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

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

БЕЛАРУСЬ

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

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

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

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

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

«Разработка многопоточных приложений на С#»

Вариант 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();

try

WorkWithFile.WriteToFile(st);

catch (IOException e)

Console.WriteLine("IOException: " + e.Message + "\n" + e.StackTrace);

Console.ReadKey();

public static int vvod()

{
label:

int num;

try

num = int.Parse(Console.ReadLine());

catch (FormatException e)

Console.WriteLine("System.format.Exception: " + e.Message + "\n" + e.StackTrace);

Console.Write("Введите еще раз: \n");

goto label;

return num;

public static short vvods()

label:

short num;

try

num = Int16.Parse(Console.ReadLine());

catch (Exception e)

Console.WriteLine("System.format.Exception: " + e.Message + "\n" + e.StackTrace);

Console.Write("Введите еще раз: \n");


goto label;

return num;

public static ushort vvodus()

label:

ushort num;

try

num = UInt16.Parse(Console.ReadLine());

catch (FormatException e)

Console.WriteLine("System.format.Exception: " + e.Message + "\n" + e.StackTrace);

Console.Write("Введите еще раз: \n");

goto label;

return num;

public static Decimal vvodD()

label:

Decimal num;

try

{
num = Decimal.Parse(Console.ReadLine());

catch (FormatException e)

Console.WriteLine("System.format.Exception: " + e.Message + "\n" + e.StackTrace);

Console.Write("Введите еще раз: \n");

goto label;

return num;

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

1. Поток – это независимый путь исполнения кода, который может выполняться


параллельно с другими потоками.

2. Пространство имен System.Threading предоставляет классы и интерфейсы,


обеспечивающие возможности многопотокового программирования.

3. Делегат ThreadStart используется для создания новых потоков. В качестве


параметров он получает метод, который нужно выполнить. Запустить поток
можно через метод Start.

4.

Наименование Описание

Lowest Поток может быть выполнен после выполнения потоков с любыми


другими приоритетами.

BelowNormal Поток может быть выполнен после потоков с Normal приоритетом


и перед элементами с Lowest приоритетом.

Normal Поток может быть выполнен после потоков с AboveNormal приоритетом


и перед элементами с BelowNormal приоритетом. Потоки имеют Normal
приоритет по умолчанию.
AboveNormal Поток может быть выполнен после потоков с Highest приоритетом
и перед элементами с Normal приоритетом.

Highest Поток может быть выполнен до выполнения потоков с любыми другими


приоритетами.

5. Делегат ParameterizedThreadStart используется для создания потока с


дополнительными параметрами. Использование ParameterizedThreadStart
подразумевает запуск во втором потоке метод, который в качестве
единственного параметра принимает объект типа object.

Вам также может понравиться