Разработка приложений на языке C#. Полезные настройки. Особые спецификаторы формата, страница 32

  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)

    {