Created
October 9, 2013 18:00
-
-
Save RMcGee/6905475 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static void Main(string[] args) | |
{ | |
//The MAXPLAYERS constant is the physical table size | |
const Int32 MAXPLAYERS = 23; | |
//Declare the player tables | |
Int32[] playerNumbers = new Int32[MAXPLAYERS]; | |
String[] playerLastNames = new String[MAXPLAYERS]; | |
Int32[] playerPoints = new Int32[MAXPLAYERS]; | |
//Keep track of the actual number of players (i.e. logical table size) | |
Int32 playerCount = 0; | |
//Main Driver | |
char menuItem; | |
Console.WriteLine("Welcome to the player system...\n"); | |
menuItem = GetMenuItem(); | |
while (menuItem != 'X') | |
{ | |
ProcessMenuItem(menuItem, playerNumbers, playerLastNames, playerPoints, ref playerCount, MAXPLAYERS); | |
menuItem = GetMenuItem(); | |
} | |
Console.WriteLine("\nThank you, goodbye"); | |
Console.ReadLine(); | |
} | |
//Returns either a 'C', 'R', 'U', 'D', 'L', or 'X' to the caller | |
static char GetMenuItem() | |
{ | |
char menuItem; | |
DisplayMenu(); | |
menuItem = char.ToUpper(char.Parse(Console.ReadLine())); | |
while (menuItem != 'C' | |
&& menuItem != 'L' && menuItem != 'X') | |
{ | |
Console.WriteLine("\nError - Invalid menu item"); | |
DisplayMenu(); | |
menuItem = char.ToUpper(char.Parse(Console.ReadLine())); | |
} | |
return menuItem; | |
} | |
static void DisplayMenu() | |
{ | |
Console.WriteLine("\nPlease pick an item:"); | |
Console.WriteLine("C - Create Player"); | |
Console.WriteLine("L - List Players"); | |
Console.WriteLine("X - Exit"); | |
} | |
//Routes to the appropriate process routine based on the user menu choice | |
static void ProcessMenuItem(Char menuItem, Int32[] playerNumbers, String[] playerLastNames, | |
Int32[] playerPoints, ref Int32 playerCount, Int32 MAXPLAYERS) | |
{ | |
switch (menuItem) | |
{ | |
case 'C': | |
ProcessCreate(playerNumbers, playerLastNames, playerPoints, ref playerCount, MAXPLAYERS); | |
break; | |
case 'L': | |
ProcessList(playerNumbers, playerLastNames, playerPoints, playerCount); | |
break; | |
} | |
} | |
//Creates a player in the tables if the array is not already full and the name is not a duplicate | |
static void ProcessCreate(Int32[] playerNumbers, String[] playerLastNames, | |
Int32[] playerPoints, ref Int32 playerCount, Int32 MAXPLAYERS) | |
{ | |
Int32 number, points; | |
String lastName; | |
if (playerCount < MAXPLAYERS) | |
{ | |
number = GetPositiveInteger("\nCreate Player: please enter the player's number"); | |
if (GetPlayerIndex(number, playerNumbers, playerCount) == -1) | |
{ | |
lastName = GetString("\nCreate Player: please enter the player's last name"); | |
points = GetPositiveInteger("\nCreate Player: please enter the player's points"); | |
InsertPlayer(number, lastName, points, playerNumbers, playerLastNames, playerPoints, ref playerCount); | |
Console.WriteLine("\nCreate Player: Number - {0}, Name - {1}, Points - {2}, created successfully", number, lastName, points); | |
Console.WriteLine(); | |
} | |
else | |
Console.WriteLine("\nCreate Player: the player number already exists"); | |
} | |
else | |
Console.WriteLine("\nCreate Player: the player roster is already full"); | |
} | |
//Inserts the player at the correct location in the tables based on order of | |
//ascending player number. Unless the insert location is at the end, this | |
//requires shifting existing players down in order to make room | |
static void InsertPlayer(Int32 number, String lastName, Int32 points, | |
Int32[] playerNumbers, String[] playerLastNames, Int32[] playerPoints, | |
ref Int32 playerCount) | |
{ | |
//puts data in acsending player number | |
Int32 insertIndex, shiftCount; | |
insertIndex = GetInsertIndex(number, playerNumbers, playerCount); | |
for (shiftCount = playerCount; shiftCount > insertIndex; shiftCount--) | |
{ | |
playerNumbers[shiftCount] = playerNumbers[shiftCount - 1]; | |
playerLastNames[shiftCount] = playerLastNames[shiftCount - 1]; | |
playerPoints[shiftCount] = playerPoints[shiftCount - 1]; | |
} | |
playerNumbers[insertIndex] = number; | |
playerLastNames[insertIndex] = lastName; | |
playerPoints[insertIndex] = points; | |
playerCount++; | |
} | |
//Returns the index of the first player number in the table that is greater | |
//than the player number to be inserted | |
static Int32 GetInsertIndex(Int32 playerNumber, Int32[] playerNumbers, | |
Int32 playerCount) | |
{ | |
Int32 index = 0; | |
bool found = false; | |
while (index < playerCount && found == false) | |
if (playerNumbers[index] > playerNumber) | |
found = true; | |
else | |
index++; | |
return index; | |
} | |
//Returns the index of the player number in the table | |
//or -1 if the number is not found | |
static Int32 GetPlayerIndex(Int32 playerNumber, | |
Int32[] playerNumbers, Int32 playerCount) | |
{ | |
Int32 index = 0; | |
bool found = false; | |
while (index < playerCount && found == false) | |
if (playerNumbers[index] == playerNumber) | |
found = true; | |
else | |
index++; | |
if (found == false) | |
index = -1; | |
return index; | |
} | |
//Lists the players in the tables | |
static void ProcessList(Int32[] playerNumbers, String[] playerLastNames, | |
Int32[] playerPoints, Int32 playerCount) | |
{ | |
if (playerCount > 0) | |
{ | |
Console.WriteLine("\n{0,7} {1,-25}{2,6}\n", "Number", "Last Name", "Points"); | |
for (Int32 player = 0; player < playerCount; player++) | |
Console.WriteLine("{0,7} {1,-25}{2,6}", playerNumbers[player], playerLastNames[player], playerPoints[player]); | |
} | |
else | |
Console.WriteLine("\nList Players: the roster is empty"); | |
} | |
//Returns a positive integer | |
static Int32 GetPositiveInteger(String prompt) | |
{ | |
Int32 n; | |
Console.WriteLine(prompt); | |
n = Int32.Parse(Console.ReadLine()); | |
while (n < 0) | |
{ | |
Console.WriteLine("\nError: enter positive value"); | |
Console.WriteLine(prompt); | |
n = Int32.Parse(Console.ReadLine()); | |
} | |
return n; | |
} | |
//Returns a non-empty string | |
static String GetString(String prompt) | |
{ | |
String returnString; | |
Console.WriteLine(prompt); | |
returnString = Console.ReadLine(); | |
while (returnString == "") | |
{ | |
Console.WriteLine("\nError: must enter keyboard data"); | |
Console.WriteLine(prompt); | |
returnString = Console.ReadLine(); | |
} | |
return returnString; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment