/*Name and surname:
* Student number:
* CSIS1644 Practical 4
* Date:
*/
using System;
using System.IO;
using System.Xml.Serialization; ✓
namespace Timetable
{
class Program
{
static void Main(string[] args)
{
Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Black;
Console.Clear();
string[][] timetable = new string[5][]; ✓✓
InitializeTable(timetable);
//Read current timetable from file
Read(ref✓ timetable);
//Display menu first time
Menu(timetable);
//Save timetable
Save(timetable);
} //Main
private static void Menu(string[][] timetable)
{
char option = ' ';
do
{
//Display the timetable
DisplayTimetable(timetable);
//Display menu possibilties
Console.WriteLine();
Console.WriteLine("\tA. Set entry");
Console.WriteLine("\tB. Clear entry");
Console.WriteLine("\tC. Clear all");
Console.WriteLine("\tS. Save");
Console.WriteLine("\tX. Exit program");
Console.WriteLine();
//Read option
Console.Write("\tOption : ");
option = char.ToUpper(Console.ReadKey().KeyChar);
//Execute appropriate action
switch (option)
{
case 'A': SetEntry(timetable); break;
case 'B': ClearEntry(timetable); break;
case 'C': ClearAll(timetable); break;
case 'S': Save(timetable); break;
case 'X': case 'x': break;
} //switch
} while (option != 'X');//Run program as long as the user does not select "X"
} //Menu
private static void✓ InitializeTable(string[][] timetable) ✓
{
for (int i = 0; i < timetable.Length; i++)✓
timetable[i] = new string[15]; ✓
}
private static void DisplayTimetable(string[][] timetable)
{
Console.Clear();
//Write headers
Console.WriteLine("\t" + "".PadRight(80, '='));
Console.Write("\t|" + "Period".PadRight(8) + "|");
foreach (string day in new string[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" })
Console.Write(day.PadRight(13) + "|");
Console.WriteLine();
Console.WriteLine("\t" + "".PadRight(80, '='));
//Write entries
for (int period = 1; period <= 15; period++)
{
Console.Write("\t|" + period.ToString().PadRight(8) + "|");
for (int day = 1; day <= 5; day++)
Console.Write(GetEntry(timetable, period, day) ✓.PadRight(13) + "|");
Console.WriteLine();
if (period < 15)
Console.WriteLine("\t" + "".PadRight(80, '-'));
} //for period
Console.WriteLine("\t" + "".PadRight(80, '='));
} //DisplayTimetable
private static string GetEntry(string[][] timetable, int period✓, int day✓)
{
string entry = timetable[day - 1][period - 1]; ✓
if (entry == null) ✓
return "";✓
return entry; ✓
} //GetEntry
private static void SetEntry(string[][] timetable)
{
Console.Clear();
Console.WriteLine("\tSet entry");
Console.WriteLine();
Console.Write("\tDay (1-5): ");
if (int.TryParse(Console.ReadLine(), out int day) ✓ && day >= 1✓ && day <= 5✓)
{
Console.Write("\tPeriod (1-15): ");
if (int.TryParse(Console.ReadLine(), out int period) ✓ && period >= 1 && period <= 15✓)
{
Console.Write("\tEntry: ");
string entry = Console.ReadLine();✓
timetable[day - 1][period - 1] = entry; ✓
} //period valid
} //day valid ✓nested if statements
} //SetEntry
private static void ClearEntry(string[][] timetable)
{
Console.Clear();
Console.WriteLine("\tClear entry");
Console.WriteLine();
Console.Write("\tDay (1-5): ");
if (int.TryParse(Console.ReadLine(), out int day) ✓ && day >= 1 && day <= 5✓)
{
Console.Write("\tPeriod (1-15): ");
if (int.TryParse(Console.ReadLine(), out int period) ✓ && period >= 1 && period <= 15✓)
{
timetable[day - 1][period - 1] = null; ✓
} //if period valid
} //if day valid
} //ClearEntry
private static void ClearAll(string[][] timetable)
{
Console.Clear();
Console.WriteLine("\tClear all");
Console.WriteLine();
Console.Write("\tSure (Y/N)? ");
char isSure = char.ToUpper(Console.ReadKey().KeyChar);
if (isSure == 'Y')
{
InitializeTable(timetable); ✓
}
} //ClearAll
public static void Save(string[][] timetable)
{
using✓ (FileStream fs = new FileStream("Timetable.xml", FileMode.Create) ✓)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[][]));✓
serializer.Serialize(fs, timetable); ✓
}
} //Save
public static void Read(ref✓ string[][] timetable)
{
if✓ (File.Exists("Timetable.xml")✓)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[][]));✓
using✓ (FileStream fs = new FileStream("Timetable.xml", FileMode.Open) ✓)
{
timetable = (string[][])serializer.Deserialize(fs); ✓
}
}
else
ClearAll(timetable); ✓
} //Read
} //class Client
} //namespace