Name = tokens[1].Trim(); // Нас интересует (см. формат данных файла) только 1-я и 3-я лексемы (считая от нуля)
Helper.MakeInt (tokens[3], 0, maxAge, out age);
}
Рассмотрим переопределенную версию метода Read в классе Stud.
public override void Read (string[] tokens)
{
base.Read (tokens);
Helper.MakeInt (tokens[5], 0, 6, out course); // Нужна 5-я лексема (считая от нуля)
}
Для реализации динамического списка создадим класс List. Среди его методов, очевидно, должны быть: вставка в список, удаление из него, редактирование выбранного элемента, вывод списка, файловые операции ввода-вывода, сортировка по одному из общих полей. В число данных класса целесообразно ввести какую-нибудь динамическую структуру данных, которая, собственно, и будет хранить ссылки на объекты классов, производных от класса Man. Кроме того, добавим несколько вспомогательных переменных, для хранения текущего состояния списка.
При реализации методов класса List наибольшие затруднения возникают с файловыми операциями. В тексте ниже даны подсказки (они спрятаны стилем hidden). Те, кто будет ими пользоваться, могут проявить их (выделите спрятанный текст и нажмите Ctrl+пробел). Тем, кто будет разрабатывать свой собственный код, советую не копировать методы с подсказками (они автоматически проявятся).
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Xml.Serialization;
namespace ManSpace
{
public class List
{
List<Man> men; // Список ссылок на объекты
bool bModified, // Флаг состояния: список изменен
bNew; // Флаг состояния: новый список
string version, // Строка аутентификации файла
fileName; // Имя файла со списком
public delegate string ManDelegate (Man m);
// Создайте readonly-свойство для доступа к списку men
// Для свойства задайте атрибуты, необходимые для Xml-сериализации списка (XmlSerializer)
public List ()
{
// Создайте сам список
// men =
bModified = false;
bNew = true;
version = "List of Man, v.1.0";
// Определяем местоположение файлов с данными
string dir = Environment.CurrentDirectory + @"\..\..\Data\";
fileName = dir + "List.txt";
}
public void Show ()
{
Console.Write ((men.Count == 0 ? "\n\tList is Empty\n" : "\n\tList of Man\n"));
// Выведите весь список, нумеруя все строки
}
public void Add ()
{
while (true) // Пусть пользователь вводит, пока ему не надоест
{
Man m; // Пока пустая ссылка
switch (ManMenu ()) // Это меню должно предлагать выбор: Stud или Prof
{
case 'q': return;
case 's': m = /* Ваш код */ break;
case 'p': m = /* Ваш код */ break;
default: continue;
}
// Вызовите виртуальный метод ввода данных. Здесь работает полиморфизм позднего связывания
//==== Добавьте ссылку в коллекцию
bModified = true; // Список изменился
}
}
public void Delete ()
{
if (men.Count == 0)
{
Console.WriteLine ("List is empty");
return;
}
while (men.Count > 0)
{
Console.Write ("\n\tDelete\t0...{0} (0 - to Quit): ", men.Count);
int n = // Попросите Helper ввести номер удаляемого элемента списка
if (n <= 0)
break;
// Удалите этот элемент
bModified = true;
Show ();
}
}
//======= Универсальный метод: открывает файл либо для чтения, либо для записи
public object FileOpen (string mode)
{
object file;
switch (mode)
{
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.