Вы находитесь на странице: 1из 11

МИНИСТЕРСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ РЕСПУБЛИКИ

БЕЛАРУСЬ

Учреждение образования

«БЕЛОРУССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ СВЯЗИ»

ФАКУЛЬТЕТ ИНЖИНИРИНГА И ТЕХНОЛОГИЙ СВЯЗИ

КАФЕДРА ИНЖИНИРИНГА И ТЕХНОЛОГИЙ СВЯЗИ

Лабораторная работа №17

«Работа с файлами и потоками»

Вариант 7

Выполнил учащийся гр.ТО613 В.П. Паплевка


Руководитель Н.И. Лущик

Минск 2019
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
class Program
{
interface Deleter
{
void Delete(List<BookList> l, int index);
}
class Delet{
public static void Deleter(Deleter d, List <BookList> l, int index)
{
d.Delete(l, index);
}
}
class People : Deleter
{
string aut;
string name;
ushort year;
virtual public void set()
{
Console.WriteLine("Введите имя автора: ");
aut = Console.ReadLine();
Console.WriteLine("Введите название: ");
name = Console.ReadLine();
year = 1;
while (year < 0 || year > 2019)
{
Console.WriteLine("Год выпуска: ");
year = vvodus();
}
}
virtual public void print()
{
Console.WriteLine("Сведения о книге:");
Console.WriteLine("Имя автора: " + aut);
Console.WriteLine("Название: " + name);
Console.WriteLine("Год выпуска: " + year);
}
public void Delete(List<BookList> l, int index)
{
Console.WriteLine("Удалить книгу");
}
}
class BookList : People, Deleter
{
public delegate void BookList Handler(string message);
public event BookList Handler addHandler;
public event BookList Handler deleteHandler;
string aut;
string name;
short mark;
ushort year;
decimal pages;
public int this[int i]
{
get
{
Console.WriteLine("get i = " + i);
return i;
}
}
public void Delete(List< BookList > st, int index)
{
st.RemoveAt(index);
if (deleteHandler != null)
deleteHandler($"Книга {this.name} была удалена.");
}
public override void set()
{
Console.WriteLine("Введите имя автора: ");
aut = Console.ReadLine();
Console.WriteLine("Введите название: ");
name = Console.ReadLine();
course = -1;
while (mark < 1 || mark > 10)
{
Console.WriteLine("Введите оценку: ");
mark = vvods();
}
year = 1;
while (year < 0 || year > 2019)
{
Console.WriteLine("Год выпуска: ");
year = vvodus();
}
pages = -1;
while (avgMark < 1 )
{
Console.WriteLine("Количество страниц: ");
pages = vvodD();
}
if (addHandler != null)
addHandler.Invoke($"Книга {name} была добавлена!!!");
}
public override void print()
{
Console.WriteLine("Сведения о книге:");
Console.WriteLine("имя: " + aut);
Console.WriteLine("фамилия: " + name);
Console.WriteLine("курс: " + mark);
Console.WriteLine("Дата рождения: " + year);
Console.WriteLine("средний балл: " + pages);
}
public static void sortByMark(List< BookList > s)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
{
if (s[j].mark < s[j + 1].mark)
{
short tmp = s[j].mark;
s[j].mark = s[j + 1].mark;
s[j + 1].mark = tmp;
short temp = s[j].pages;
s[j].pages = s[j + 1].pages;
s[j + 1].pages = temp;
String temperary = s[j].aut;
s[j].aut = s[j + 1].aut;
s[j + 1].aut = temperary;
string tempe = s[j].name;
s[j].name = s[j + 1].name;
s[j + 1].name = tempe;
ushort temper = s[j].year;
s[j].year = s[j + 1].year;
s[j + 1].year = temper;
}
}
}
bool flag = false;
for(int i = 1; i < 3; i++)
{
if (s[i - 1].Equals(s[i]))
flag = true;
}
if(flag == true)
{
Console.WriteLine("Книги с одинаковыми оценками существуют!");
Console.WriteLine(s.GetType());
}
else
{
// Console.WriteLine("FALSE");
}
}
public override bool Equals(object obj)
{
var group = obj as BookList;
return group != null &&
mark == group.mark;
}
public override int GetHashCode()
{
return 164379502 + mark.GetHashCode();
}
}
private static void Show_Message(string message)
{
Console.WriteLine(message);
}
class WorkWithFil
{
public static void WriteToFile(List<BookList > Book)
{
try
{
StreamWriter sw = new
StreamWriter("C:/Users/DELL/Desktop/study/C#/Никита/ConsoleApp8/ConsoleApp4/text.txt",
false, Encoding.Default);
foreach (BookListi in Book)
{
sw.WriteLine("Имя автора: " + i.GetAut());
sw.WriteLine("Название книги: " + i.Getname());
sw.WriteLine("Оценка: " + i.GetMark());
sw.WriteLine("Год выпуска: " + i.GetYear());
sw.WriteLine("Количество страниц: " + i.GetPages());
sw.WriteLine();
}

Console.WriteLine("Запись в файл произошла успешно");


sw.Close();
}
catch (IOException e)
{
Console.WriteLine("IOException: " + e.Message + "\n" + e.StackTrace);
}
}

static void Main(string[] args)


{
List< BookList > st = new List< BookList >();
st.Add(new BookList ());
st.Add(new BookList ());
st.Add(new StudentGroup());
for (int i = 0; i < st.Count; i++)
{
st[i].addHandler += Show_Message;
st[i].deleteHandler += Show_Message;
}
foreach (BookList i in st)
{
i.set();
}
foreach (BookList i in st)
{
i.print();
Console.WriteLine();
}
BookList.sortBymark(st);
Console.WriteLine("Сортировка по оценке: ");
foreach (BookList i in st)
{
i.print();
}
Console.Write("Введите номер книги, которую надо удалить:\n");
s:
int index = vvod();
if (index < 0 || index > st.Count)
{
Console.Write("Error\n");
goto s;
}
else
{
Delet.Deleter(new BookList (), st, index);
}
foreach (BookList i in st)
{
i.print();
Console.WriteLine();
}
Console.ReadKey();
}
public static int vvod()
{
label:
int num;
try
{
num = int.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.Write("Error\n");
goto label;
}
return num;
}
public static short vvods()
{
label:
short num;
try
{
num = short.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.Write("Error\n");
goto label;
}
return num;
}
public static ushort vvodus()
{
label:
ushort num;
try
{
num = ushort.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.Write("Error\n");
goto label;
}
return num;
}
public static Decimal vvodD()
{
label:
Decimal num;
try
{
num = Decimal.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.Write("Error\n");
goto label;
}
return num;
}
}
}

Контрольные вопросы:

1. Класс FileStream позволяет организовать поток для ввода/вывода информации из


текстового или бинарного файла. Представляет возможности по считыванию из файла и
записи в файл. Он позволяет работать как с текстовыми файлами, так и с бинарными.

2. StreamReader предназначен для чтения данных из файла

StringWriter предназначен для записи информации в файл

3. Если не закрыть поток при изменении данных в файле, данные не сохранятся.

4. stream.AppendText(“text”);

5. Класс File предоставляет функциональность, почти идентичную типу FileInfo, и


поддерживает методы AppendText(), Create(), CreateText(), Open(), OpenRead(),
OpenWrite() и OpenText(). Кроме этого File также поддерживает несколько
дополнительных методов.

Оценить