Наследование. Добавить событие и показать его обработку - C#
Формулировка задачи:
На основе задания реализовать класс наследник от базового класса, добавить событие и показать его обработку.
Задание: В магазине формируется список лиц, записавшихся на покупку товара повышения спроса. Каждая запись этого списка содержит: порядковый номер, Ф.И.О., домашний адрес покупателя и дату постановки на учет. Удалить из списка все повторные записи, проверяя Ф.И.О и домашний адрес.
Вот код который я написал к заданию:
Файл Program.cs:
Файл Spravka.cs:
class Program
{
public static Spravka<int>[] list;
static public void DisplayMenu()
{
Console.WriteLine("1. Создать лист");
Console.WriteLine("2. Просмотреть лист...");
Console.WriteLine("3. Открыть файл...");
Console.WriteLine("4. Сохранить файл...");
Console.WriteLine("ESC.Exit...");
}
static void CreateList()
{
Console.WriteLine();
Console.Write("Список лиц: ");
int s = int.Parse(Console.ReadLine());
list = new Spravka<int>[s];
for (int i = 0; i < s; i++)
{
Console.Write("Порядковый номер: ");
int nomer = int.Parse(Console.ReadLine());
Console.Write("Ф.И.О: ");
string fio = Console.ReadLine();
Console.Write("Дом. адрес покупателя: ");
string adres = (Console.ReadLine());
Console.Write("Дата постановки на учёт: ");
string data = Console.ReadLine();
Spravka<int> spravka = new Spravka<int>(nomer, fio, adres, data);
list[i] = spravka;
Console.WriteLine("Данные занесены!");
}
Проверка_Уник();
}
static void ViewList()
{
Console.WriteLine();
if (list == null)
{
Console.WriteLine("Лист пустой!");
return;
}
Console.WriteLine("Просмотр листа: ");
for (int i = 0; i < list.Length; i++)
{
if (list[i] == null) continue;
else
{
Console.WriteLine(list[i].ToString());
}
}
}
static void SaveToFile()
{
Console.WriteLine();
if (list == null)
{
Console.WriteLine("Лист пустой!");
return;
}
Console.Write("Введите название файла: ");
string nf = Console.ReadLine();
if (nf.Length == 0) nf = "text.txt";
StreamWriter writer = new StreamWriter(nf, false);
using (writer)
{
for (int i = 0; i < list.Length; i++)
{
writer.WriteLine(list[i]);
}
}
}
static void OpenFile()
{
string i = Directory.GetCurrentDirectory();
DirectoryInfo directinfo = new DirectoryInfo(i);
FileInfo[] flinfo = directinfo.GetFiles("*.txt");
StreamReader streader = new StreamReader(flinfo[0].Name);
using (streader)
{
string line;
Console.WriteLine();
while ((line = streader.ReadLine()) != null)
{
Console.Write("Файл открыт: \n" + line);
}
}
}
static void Main(string[] args)
{
Console.WriteLine("Выберите № пункта из нижеперечисленных: ");
DisplayMenu();
Console.Write("№ пункта: ");
ConsoleKeyInfo cki;
do
{
cki = Console.ReadKey(false);
switch (cki.KeyChar.ToString())
{
case "1":
CreateList();
break;
case "2":
ViewList();
break;
case "3":
OpenFile();
break;
case "4":
SaveToFile();
break;
}
}
while (cki.Key != ConsoleKey.Escape);
Console.ReadLine();
}
public static void Проверка_Уник()
{
try
{
for (int i = 0; i < list.Length - 1; i++)
{
if (list[i].fio == list[i + 1].fio && list[i].adres == list[i + 1].adres)
{
list[i + 1] = null;
}
}
}
catch { }
Console.WriteLine("Удалить из списка все повторные записи, проверя Ф.И.О и Дом.адрес ");
for (int i = 0; i < list.Length; i++)
{ Console.WriteLine(list[i]); }
}
}public class Spravka<T>
{
private int nomer;
public string fio;
private T[] mass;
public string adres;
private string data;
private const int MASS_SIZE = 4;
public int сount;
public Spravka(int nomer, string fio, string adres, string data, int ms = MASS_SIZE)
{
this.nomer = nomer;
this.fio = fio;
this.adres = adres;
this.data = data;
this.mass = new T[ms];
}
public override string ToString()
{
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mass.Length; i++)
{
sb.Append(mass[i] + " ");
}
return "Порядковый номер: " + nomer + " " + "Ф.И.О: " + fio + " " + "Дом. адрес покупателя: " + " " + adres + " " + "Дата постановки на учёт: " + " " + data;
}
}
}Решение задачи: «Наследование. Добавить событие и показать его обработку»
textual
Листинг программы
using System;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApp1
{
struct Info
{
public int num;
public string FIO, addres, date;
}
class Spisok//родительский класс
{
public Info[] human;
public int n;
public void Add()//создать список
{
Console.Write("Количество записей: "); n = int.Parse(Console.ReadLine());
human = new Info[n];
for (int i = 0; i < n; i++)
{
Console.WriteLine($"Запись {i + 1}");
human[i].num = i;
Console.Write("ФИО: "); human[i].FIO = Console.ReadLine();
Console.Write("Адрес: "); human[i].addres = Console.ReadLine();
Console.Write("Дата: "); human[i].date = Console.ReadLine();
}
Console.Clear();
}
public void View()//вывод содержимого
{
for (int i = 0; i < human.Length; i++)
{
if (human[i].FIO != null)
Console.WriteLine($"{human[i].num + 1}. {human[i].FIO}; {human[i].addres}; {human[i].date}");
}
Console.WriteLine();
}
public void FileInput()//заполнение из файла
{
Console.Write("Полный адрес файла: "); string path = Console.ReadLine();
if (!File.Exists(path))
{
Console.Clear();
Console.WriteLine("Файла не существует!\n");
}
else
{
Console.Clear();
n = File.ReadAllLines(path).Length;
human = new Info[n];
string[] s = File.ReadAllLines(path,Encoding.GetEncoding("windows-1251")).ToArray();
for (int i = 0; i < n; i++)
{
string[] ss = s[i].Split('/').ToArray();
human[i].num = i;
human[i].FIO = ss[0];
human[i].addres = ss[1];
human[i].date = ss[2];
}
Console.WriteLine("Успешно!\n");
}
}
public void SaveToFile()//вывод в файл
{
Console.Write("Полный адрес файла: "); string path = Console.ReadLine();
Console.Clear();
FileStream fcreate = File.Create(path);
fcreate.Close();
if (!Path.HasExtension(path))
{
Console.WriteLine("Файл не может быть создан!\n");
}
else
{
string[] s = new string[n];
for (int i = 0; i < s.Length; i++)
s[i] = $"{human[i].FIO}/{human[i].addres}/{human[i].date}";
File.WriteAllText(path, String.Join(Environment.NewLine, s.Where(v => !v.StartsWith("/"))));
Console.WriteLine("Успешно!\n");
}
}
}
class SpisokDel : Spisok//дочерний класс
{
public void Menu()//меню
{
int c = -1;
do
{
Console.WriteLine("1.Создать список\n2.Просмотреть список\n3.Открыть файл\n4.Сохранить в файл\n5.Удалить повторные записи\n0.Выход");
c = int.Parse(Console.ReadLine());
Console.Clear();
switch (c)
{
case 1:
Add();
break;
case 2:
View();
break;
case 3:
FileInput();
break;
case 4:
SaveToFile();
break;
case 5:
Del();
break;
}
} while (c != 0);
}
public void Del()//удаление одинаковых
{
for (int i = 0; i < human.Length - 1; i++)
{
for (int j = i + 1; j < human.Length; j++)
{
if (human[i].FIO == human[j].FIO && human[i].addres == human[j].addres)
{
human[j].FIO = null;
human[j].addres = null;
human[j].date = null;
}
}
}
Console.WriteLine("Повторные записи удалены!\n");
}
}
class Program
{
static void Main()
{
SpisokDel s = new SpisokDel();
s.Menu();
}
}
}