Ликероводочный завод
Федеральное агентство по
образованию (Рособразование)
Архангельский
государственный технический университет
Вычислительных
систем и телекоммуникаций
Калитин
Арсентий Игоревич
КУРСОВАЯ РАБОТА
По дисциплине
Объектно-ориентированное
программирование
На тему
Ликеро-водочный
завод
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
ЦЕЛЬ И ЗАДАЧИ ВЫПОЛНЕНИЯ РАБОТЫ
1 ВНЕШНЕЕ ОПИСАНИЕ
1.1 Анализ предметной области
1.2 Функциональная спецификация
2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА АВТОМАТИЗИРОВАННУЮ СИСТЕМУ
3 ПРОГРАММИРОВАНИЕ
3.1 Описание классов и интерфейсов
3.2 Диаграмма классов
4 КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ
4.1 Структура
4.2 Проектирование графического интерфейса
5 ТЕСТИРОВАНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ А Листинг клиентского приложения
ВВЕДЕНИЕ
В данной пояснительной записке рассматривается описание программы
«Ликероводочный завод» на основе объектно-ориентированного подхода.
При объектно-ориентированном подходе программа представляет
собой описание объектов, их свойств (или атрибутов), совокупностей (или
классов), отношений между ними, способов их взаимодействия и операций над
объектами (или методов).
Несомненным преимуществом данного подхода является
концептуальная близость к предметной области произвольной структуры и
назначения. Механизм наследования атрибутов и методов позволяет строить
производные понятия на основе базовых и таким образом создавать модель сколь
угодно сложной предметной области с заданными свойствами.
В отличие от предыдущих подходов к программированию,
объектно-ориентированный подход требует глубокого понимания основных принципов,
или, иначе, концепций, на которых он базируется. К числу основополагающих
понятий ООП обычно относят абстракцию данных, наследование, инкапсуляцию и
полиморфизм.
Объектно-ориентированное программирование в настоящее время
является абсолютным лидером в области прикладного программирования.
В качестве основного инструмента разработки применяется Microsoft Visual Studio 2010. Язык программирования C#.
ЦЕЛЬ И
ЗАДАЧИ ВЫПОЛНЕНИЯ РАБОТЫ
Целью данной курсовой работы является автоматизация деятельности
ликероводочного завода на основе объектно-ориентированного подхода, а также
получение навыков в реализации этого подхода, проектировании и реализации схемы
данных.
Задачи выполнения работы:
исследование предметной области с целью выявления основных сущностей и
их атрибутов;
проектирование иерархии классов и интерфейсов на основе выделенных
сущностей;
использование наследования и агрегации для структуризации классов;
применение принципа инкапсуляции к классам;
использование интерфейсов, описывающих операции в данной предметной
области, для обеспечения множественного наследования;
тестирование созданных классов в клиентском приложении,
автоматизирующем деятельность предметной области;
документация разработанных классов при помощи XML комментариев.
программа
интерфейс класс инкапсуляция
1 ВНЕШНЕЕ
ОПИСАНИЕ
1.1 Анализ
предметной области
Анализ предметной области - самый важный этап
разработки программного обеспечения.
Анализ работы ликероводочного завода позволяет определить
ключевые понятия, выяснить задачи, требующие решения в рамках проекта,
проанализировать функциональные требования будущего продукта и нефункциональные
(надёжность, эффективность, изучаемость, модифицируемость и т.п.).
Компонентами данной предметной области являются списки
сотрудников, клиентов, продукции и заказов. Данное приложение должно позволять
пользователю создавать записи, удалять, редактировать, сохранять и открывать
файлы создаваемые программой.
Нефункциональные требования к программному средству:
- надежность: программа должна быть автономной;
эффективность: программа должна иметь минимальные требования к аппаратному
обеспечению. Для использования данного программного средства не должна
требоваться установка на компьютер. Не должно требоваться дополнительных
периферийных средств (принтер, сканер, дополнительные дисководы и т.д.)
изучаемость: программа должна быть интуитивно понятна, иметь удобный
пользовательский интерфейс;
модифицируемость: программа должна быть легко модифицируемой вследствие
небольшого исходного размера и объектно-ориентированного подхода.
1.2
Функциональная спецификации
Минимальные технические характеристики компьютера, на котором
гарантируется стабильная работа программы:
компьютер/процессор: компьютер с процессором класса Pentium II 450 МГц;
- память: 64 МБ ОЗУ;
- монитор: монитор VGA с разрешением 800x600 точек или более
высоким, поддерживающий 256 цветов;
- операционная система: операционная система Windows XP с установленным Microsoft .NET Framework 2.0;
- наличие свободного дискового пространства на жёстком диске.
Внешние функции:
- внесение данных и редактирование данных о клиентах,
работниках, продукции и заказов;
- сохранение данных в XML-файл;
- считывание данных из XML-файла;
- проверка вводимых данных и вывод сообщений об ошибках;
- программа должна выполнять все функции за предельно малое
количество времени;
Критические случаи:
- отсутствие свободного места на жёстком диске. Любая операция
с файловой системой должна быть отменена;
- некорректный XML-файл.
Программа не должна аварийно завершаться;
- завершение работы Windows. В этом случае программа должна завершать свою работу, не
применяя выбранные пользователем настройки.
2.
ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА АВТОМАТИЗИРОВАННУЮ СИСТЕМУ
Техническое задание определяет требования к будущей
автоматизированной информационной системе со стороны основных процессов.
- изменение списка
работников (добавления, удаление);
- изменение списка клиентов
(добавления, удаление);
- изменение продукции
(добавления, удаление);
- изменение заказов
(добавления, удаление);
- отображение информации,
хранящейся в XML-файле;
- сохранение информации в XML-файл.
3.
ПРОГРАММИРОВАНИЕ
.1 Описание
классов и интерфейсов
В ООП главным элементом является класс, включающий множество
объектов с одинаковыми свойствами, операциями и отношениями. Класс имеет
внутреннее (реализацию) и внешнее представление - интерфейс. В данной программе
реализованы классы Workers, Clients, Checking, Product, Orders, SaveOpen, ListLVZ, а также интерфейс IRemove.
Класс Workers содержит общие
характеристики, описывающие работников, такие как фамилию, имя, отчество,
телефон, должность и зарплату. Класс Clients содержит информацию о
клиентов такую как ,
фамилию, имя, отчество, телефон, предпреятие и адрес предпреятия. Класс Clients является наследуемым от класса Workers. Класс
Product содержит наименование продукции, ее тип, количество производства в
день, количество товара на складе, и цену за ящик.
Рассмотрим остальные классы:
- Класс Orders описывает заказы заводу.
Содержит такие атрибуты, как имя заказчика, наименование заказываемой
продукции, адрес заказчика, количество заказываемого товара, и сумма за весь
товар. Содержит конструктор сущности класса.
- Класс Checking служит проверкой выделения строки в таблице с данными.
- Класс SaveOpen содержит два метода LoadXML и Save для загрузки
XML-данных из файла и сохранения соответственно, посредством сериализации.
- Класс ListLVZ содержит списки сотрудников, клиентов, товаров и заказов.
3.2
Диаграмма классов
На рисунке 1 представлена диаграмма классов:
Рисунок 1 -
Диаграмма классов
4.
КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ
.1
Структура
В данном ПП для продуктивной работы реализован удобный пользовательский
интерфейс, похожий на большинство Windows - приложений, с оригинальным дизайном, приятным для
восприятия. Данное программное средство можно разбить на модули,
взаимодействующие друг с другом. На рисунке 2 представлена структура
приложения:
Рисунок 2 -
Структура приложения
Модуль просмотра данных предоставляет возможность наглядного отображение
данных.
Модуль проверки данных реализует методы:
- корректность вводимых пользователем данных;
- корректность считываемых из файла данных
Модуль ввода данных, реализует простой графический интерфейс для ввода
необходимых значений.
Модуль сохранения данных, формирует все записи в один XML-файл.
Модуль считывания предоставляет возможность открытия XML-файла и заполнения списков в
программе.
Модуль редактирования записей предоставляет простой интерфейс для
изменения ранее внесенных данных, а также добавления и удаления.
4.2
Проектирование графического интерфейса
На рисунке 3 представлена форма приложения с отображением данных работников
завода:
Рисунок
3 - Форма Form1
Для редактирования и ввода записей о сотрудниках, клиентах, продуктах и
заказов необходимо воспользоваться соответствующими вкладками на форме. Эти
вкладки отображены на рисунках 4-7.
Рисунок 4 -
Вкладка «Работники»
Рисунок 5 -
Вкладка «Клиенты»
Рисунок 6 -
Вкладка «Продукция»
Рисунок 7 - Вкладка
«Заказы»
Если количество товаров складе меньше количества заказываемых товаров, то
мы можем увидеть сообщение об ошибке изображенное на рисунке 8:
Рисунок 8 -
Попытка ввода большого количества товаров
Просмотр клиентов заказавших
определенный товар можно увидеть на рисунке 9:
Рисунок 9 -
Просмотр клиентов
Удаление локомотивов, вагонов и сотрудников можно осуществить при помощи
кнопки «Удалить запись». При нажатии на эту кнопку мы удаляем выбранный нами
локомотив. Аналогично для других списков. Вкладки отображены на рисунках 10 -
13:
Рисунок 10 -
Таблица во вкладке «Сотрудники»
Рисунок 11 -
Таблица во вкладке «Клиенты»
Рисунок 12 -
Таблица во вкладке «Продукция»
Рисунок 13 -
Таблица во вкладке «Заказы»
Загрузка и сохранение данных
осуществляются в меню файл. «File…»
позволяет запустить диалог открытия файла XML, «Сохранить как…» - аналогично, только для
сохранения. Диалог сохранения файла предоставлен на рисунке 12(диалог открытия
файла принципиально ничем не отличается поэтому его рассматривать не будем):
Рисунок 14 -
Сохранение в файл
Выбрав имя файла XML и
нажав кнопку «Сохранить», мы сохраним данные в файл.
Если попытаться загрузить некорректный XML-файл, то будет выведено такое сообщение, рисунок 15:
Рисунок 15 -
Попытка открыть некорректный XML-файл
Если попытаться сохранить данные в файл, доступный только на чтение, то
будет получено такое сообщение, рисунок 16:
Рисунок 16 -
Попытка сохранить в файл, доступный только на чтение
Для тестирования программы производились различные манипуляции с данными.
Проводились следующие тесты:
- ввод неверных значений;
открытие некорректного XML-файла;
запись в защищенный от записи файл;
доступ к несуществующим элементам списка;
другие операции в хаотическом порядке, призванные выявить
ошибки в программе.
Тестирование выявило мелкие недочеты, которые в последствии были
устранены.
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Э. Троелсен. С# и
платформа .NET. Библиотека программиста. - СПб.: Питер, 2004. -796 с.: ил.
2. Е.А. Жоголев. «Технология
программирования» - М., Научный мир, 2004, 216 с
3. Т. А. Павловская. «С#.
Программирование на языке высокого уровня. Учебник для вузов» - СПб.: Питер,
2007. - 432 с.
4. Microsoft Developer
Network(MSDN). [Электронный ресурс]. - Режим доступа: msdn.microsoft.com, свободный.
5. СТО 01.04 - 2005. Работы студентов.
Общие требования и правила оформления. - введ. 2005 - 04 - 01. - Архангельск:
Изд-во Арханг. гос. техн. ун-та, 2005.
ПРИЛОЖЕНИЕ А. ЛИСТИНГ ПРОГРАММЫ
(обязательное)
Главная форма:
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;Classes;System.IO;System.Xml;System.Xml.Serialization;System.Text.RegularExpressions;LVZ
{IRemove
{Remove();
}partial class Form1 : Form, IRemove
{sv = null;class SaveOpen
{
#region Метод LoadXML - загрузка данных из файла
/// Статичный метод для считывания данных из
XML-файла. Возвращает ListDelos
/// </summary>
/// <param name="filename">Адрес
к XML файлу для считывания</param>
/// <param name="listdelos">Экземпляр
класса ListDelos</param>
/// <returns></returns>static ListLVZ
LoadXML(string filename, ListLVZ listlvz)
{Serializer = new XmlSerializer(typeof(ListLVZ));
{(StreamReader reader = new
StreamReader(filename))
{= (ListLVZ)Serializer.Deserialize(reader);
}
}(FileNotFoundException)
{newXML = @"<?xml
version=""1.0""
encoding=""utf-8""?>" + '\n' +
@"<ListDogovor
xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" +
'\n' + "<AllDogovor />" + '\n' + "</ListDogovor>";(StreamWriter
writer = new StreamWriter(filename))
{.Write(newXML);
}
}listlvz;
}
#endregion
/// <summary>
/// Статичный метод для сохранения данных в
XML-файл.
/// </summary>
/// <param
name="listdelos">Экземпляр класса ListDelos</param>
/// <param name="filename">Путь
для сохранения файла XML</param>
#region Save - сохранение экземляра класса Delo в
файлstatic void Save(ListLVZ listlvz, string filename)
{sr = new XmlSerializer(listlvz.GetType());sb =
new StringBuilder();SW = new StreamWriter(filename);.Serialize(SW,
listlvz);.Close();
}
#endregion
}class ListLVZ
{List<Workers> AllWork = new
List<Workers>();List<Clients> AllClient = new
List<Clients>();List<Product> AllProduct = new
List<Product>();List<Orders> AllOrders = new List<Orders>();
}ListLVZ l = new ListLVZ();Form1()
{();
}void butWork_Click(object sender, EventArgs e)
{wr = new Workers();.famil = Famil.Text;.name =
Imya.Text;.otche = Otche.Text;.dolgn = Dolg.Text;.telef = Telef.Text;.Zarplata
= Zarpl.Text;.AllWork.Add(wr);.Rows.Clear();(int i = 0; i < l.AllWork.Count;
i++)
{.Rows.Add();[0, i].Value =
l.AllWork[i].famil;[1, i].Value = l.AllWork[i].name;[2, i].Value =
l.AllWork[i].otche;[3, i].Value = l.AllWork[i].dolgn;[4, i].Value =
l.AllWork[i].telef;[5, i].Value = l.AllWork[i].Zarplata;
}
}void сохранитьToolStripMenuItem_Click(object
sender, EventArgs e)
{(saveFileDialog1.ShowDialog() ==
DialogResult.OK)
{
{.Save(l,
saveFileDialog1.FileName);.Show("Файл сохранен");
}(UnauthorizedAccessException)
{.Show("Невозможно сохранить файл: доступ
закрыт");
}
}
}void открытьToolStripMenuItem_Click(object
sender, EventArgs e)
{((openFileDialog1.ShowDialog() ==
DialogResult.OK))
{
{= SaveOpen.LoadXML(openFileDialog1.FileName,
l);= openFileDialog1.FileName;
}(InvalidOperationException)
{.Show("Невозможно прочитать данные из этого
XML-файла");
}
}void показатьToolStripMenuItem_Click(object
sender, EventArgs e)
{.Items.Clear();.Items.Clear();.Rows.Clear();.Rows.Clear();.Rows.Clear();.Rows.Clear();(int
i = 0; i < l.AllClient.Count; i++)
{s = (l.AllClient[i].famil + " " +
l.AllClient[i].name + " " + l.AllClient[i].otche);.Items.Add(s);
}(int i = 0; i < l.AllProduct.Count; i++)
{s = (l.AllProduct[i].name + "(" +
l.AllProduct[i].clas + ")");.Items.Add(s);
}(int i = 0; i < l.AllWork.Count; i++)
{.Rows.Add();[0, i].Value =
l.AllWork[i].famil;[1, i].Value = l.AllWork[i].name;[2, i].Value =
l.AllWork[i].otche;[3, i].Value = l.AllWork[i].dolgn;[4, i].Value =
l.AllWork[i].telef;[5, i].Value = l.AllWork[i].Zarplata;
}(int i = 0; i < l.AllClient.Count; i++)
{.Rows.Add();[0, i].Value =
l.AllClient[i].famil;[1, i].Value = l.AllClient[i].name;[2, i].Value =
l.AllClient[i].otche;[3, i].Value = l.AllClient[i].dolgn;[4, i].Value =
l.AllClient[i].telef;[5, i].Value = l.AllClient[i].predrp;[6, i].Value =
l.AllClient[i].adress;
}(int i = 0; i < l.AllProduct.Count; i++)
{.Rows.Add();[0, i].Value =
l.AllProduct[i].name;[1, i].Value = l.AllProduct[i].clas;[2, i].Value =
l.AllProduct[i].kolproiz;[3, i].Value = l.AllProduct[i].kolskl;[4, i].Value =
l.AllProduct[i].price;
}(int i = 0; i < l.AllOrders.Count; i++)
{.Rows.Add();[0, i].Value =
l.AllOrders[i].namecl;[1, i].Value = l.AllOrders[i].nameprod;[2, i].Value =
l.AllOrders[i].adresscl;[3, i].Value = l.AllOrders[i].kolzak;[4, i].Value =
l.AllOrders[i].symm;
}
}void butClients_Click(object sender, EventArgs
e)
{cl = new Clients();.famil = textBox1.Text;.name
= textBox2.Text;.otche = textBox3.Text;.dolgn = textBox4.Text;.telef =
textBox5.Text;.predrp = textBox6.Text;.adress = textBox7.Text;.AllClient.Add(cl);.Rows.Clear();(int
i = 0; i < l.AllClient.Count; i++)
{.Rows.Add();[0, i].Value =
l.AllClient[i].famil;[1, i].Value = l.AllClient[i].name;[2, i].Value =
l.AllClient[i].otche;[3, i].Value = l.AllClient[i].dolgn;[4, i].Value = l.AllClient[i].telef;[5,
i].Value = l.AllClient[i].predrp;[6, i].Value = l.AllClient[i].adress;
}
}void butProd_Click(object sender, EventArgs e)
{pr = new Product();.name = prName.Text;.clas =
prClass.Text;.kolproiz = prKolProi.Text;.kolskl = prKolSkl.Text;.price =
prPrice.Text;.AllProduct.Add(pr);.Rows.Clear();(int i = 0; i <
l.AllProduct.Count; i++)
{.Rows.Add();[0,i].Value =
l.AllProduct[i].name;[1,i].Value = l.AllProduct[i].clas;[2,i].Value =
l.AllProduct[i].kolproiz;[3,i].Value = l.AllProduct[i].kolskl;[4, i].Value =
l.AllProduct[i].price;
}
}void butOrders_Click(object sender, EventArgs e)
{or = new Orders();.namecl =
orNameCl.Text;.nameprod = orNamePr.Text;.adresscl = orAdressCl.Text;.kolzak =
orKolZak.Text;.symm = orSymm.Text;.AllOrders.Add(or);.Rows.Clear();(int i = 0;
i < l.AllOrders.Count; i++)
{.Rows.Add();[0,i].Value =
l.AllOrders[i].namecl;[1,i].Value = l.AllOrders[i].nameprod;[2,i].Value =
l.AllOrders[i].adresscl;[3,i].Value = l.AllOrders[i].kolzak;[4,i].Value =
l.AllOrders[i].symm;
}
}void orNameCl_SelectedIndexChanged(object
sender, EventArgs e)
{(int i = 0; i < l.AllClient.Count; i++)
{s = (l.AllClient[i].famil + " " +
l.AllClient[i].name + " " + l.AllClient[i].otche);(orNameCl.Text ==
s)
{.Text = l.AllClient[i].adress;
}
}
}void orKolZak_TextChanged(object sender,
EventArgs e)
{
}void Symm_Click(object sender, EventArgs e)
{(int i = 0; i < l.AllProduct.Count; i++)
{s = (l.AllProduct[i].name + "(" +
l.AllProduct[i].clas + ")");(s == orNamePr.Text)
{(orKolZak.Text == "")
{.Text = "";.Show("Введите
количество товара");;
}.Text = (int.Parse(l.AllProduct[i].price) *
int.Parse(orKolZak.Text)).ToString();
}y = l.AllProduct[i].kolskl;(orNamePr.Text ==
l.AllProduct[i].name + "(" + l.AllProduct[i].clas + ")")
{(int.Parse(orKolZak.Text) > int.Parse(y))
{.Text = "";.Show("На складе
нехватает товара");
}
}(int g = 0; g < l.AllOrders.Count; g++)
{n = 0;(orNamePr.Text == l.AllOrders[g].nameprod)
{(int k = 0; k < l.AllOrders.Count; k++)
{(orNamePr.Text == l.AllOrders[k].nameprod)
{+= (int.Parse(l.AllOrders[k].kolzak));
}
}v = 0;(int f = 0; f < l.AllProduct.Count;
f++)
{(orNamePr.Text == (l.AllProduct[f].name +
"(" + l.AllProduct[f].clas + ")"))
{= int.Parse(l.AllProduct[f].kolskl) - n;
}
}(int.Parse(orKolZak.Text) > v)
{.Show("Недостаточно товара на
складе");;
}
}
};
}
}void Famil_TextChanged(object sender, EventArgs
e)
{.Text =
System.Text.RegularExpressions.Regex.Replace(Famil.Text, @"\d",
"");.Text = System.Text.RegularExpressions.Regex.Replace(Imya.Text,
@"\d", "");.Text =
System.Text.RegularExpressions.Regex.Replace(Otche.Text, @"\d",
"");.Text = System.Text.RegularExpressions.Regex.Replace(Dolg.Text,
@"\d", "");.Text =
System.Text.RegularExpressions.Regex.Replace(textBox1.Text, @"\d",
"");.Text = System.Text.RegularExpressions.Regex.Replace(textBox2.Text,
@"\d", "");.Text =
System.Text.RegularExpressions.Regex.Replace(textBox3.Text, @"\d",
"");.Text =
System.Text.RegularExpressions.Regex.Replace(textBox4.Text, @"\d",
"");.Text = System.Text.RegularExpressions.Regex.Replace(prName.Text,
@"\d", "");
}void Telef_KeyPress(object sender,
KeyPressEventArgs e)
{r = new Regex("[0-9\b]");m =
r.Match(e.KeyChar.ToString());(!m.Success) e.KeyChar = '\0';
}void dataProduct_CellContentClick(object sender,
DataGridViewCellEventArgs e)
{ff = new Form2();g = 0;(int i = 0; i <
dataProduct.Rows.Count; i++)
{(e.ColumnIndex == 5 && e.RowIndex == i)
{s = l.AllProduct[i].name + "(" +
l.AllProduct[i].clas + ")";(int p = 0; p < l.AllOrders.Count; p++)
{s1 = l.AllOrders[p].nameprod;(s == s1)
{.Text =
l.AllOrders[p].nameprod;.dataGridView1.Rows.Add();.dataGridView1[0, g].Value =
l.AllOrders[p].namecl;(int j = 0; j < l.AllClient.Count; j++)
{.dataGridView1[1, g].Value =
l.AllClient[j].predrp;
}
}.dataGridView1[2, g].Value =
l.AllOrders[p].adresscl;.dataGridView1[3, g].Value =
l.AllOrders[p].kolzak;.dataGridView1[4, g].Value = l.AllOrders[p].symm;++;
}
}
}
}.ShowDialog();
}void Remove()
{check = new Checking();u = true;y = -1;=
check.Check_Select();(u)
{=
dataWork.Rows.IndexOf(dataWork.SelectedRows[0]);.AllWork.RemoveAt(y);dr =
dataWork.SelectedRows[0];.Rows.Remove(dr);
}
}void butDel_Click(object sender, EventArgs e)
{();
}void button1_Click(object sender, EventArgs e)
{();
}void butSave_Click(object sender, EventArgs e)
{
{.Save(l, sv);.Show("Файл сохранен");
}(UnauthorizedAccessException)
{.Show("Невозможно сохранить файл: доступ
закрыт");
}
}
}
}
Листинг
библиотеки Classes.dll:
using
System;System.Collections.Generic;System.Linq;System.Text;System.ComponentModel;System.Data;Classes
{
[Serializable]class People
{FFamil;FName;FOtche;FDolgn;FTelef;People()
{= "";= "";= "";=
"";= "";
}People(string famil, string name, string otche,string dolgn,
string telef)
{.FFamil = famil;.FName = name;.FOtche = otche;.FDolgn =
dolgn;.FTelef = telef;
}string famil
{
{= value;
}
{FFamil;
}
}string name
{
{= value;
}
{FName;
}
}string otche
{
{= value;
}
{FOtche;
}
}string dolgn
{
{= value;
}
{FDolgn;
}
}string telef
{
{= value;
}
{FTelef;
}
}
}
[Serializable]class Workers: People
{ FZarplata;Workers()
{ = "";
}Workers( string Zarplata)
{.FZarplata = Zarplata;
} string Zarplata
{= value;
}
{FZarplata;
}
}
}
[Serializable]class Clients: People
{FPredpr;FAdress;Clients()
{= "";= "";
}Clients(string predpr, string adress)
{.FPredpr = predpr;.FAdress = adress;
}string predrp
{
{= value;
}
{FPredpr;
}
}string adress
{
{= value;
}
{FAdress;
}
}
}
[Serializable]class Product
{FName;FClas;FKolProiz;FKolSkl;FPrice;Product()
{= "";= "";= "";=
"";= "";
}Product(string name, string clas, string kolproiz, string
kolskl, string price)
{.FName = name;.FClas = clas;.FKolProiz = kolproiz;.FKolSkl =
kolskl;.FPrice = price;
}string name
{
{= value;
}
{FName;
}
}string clas
{
{= value;
}
{FClas;
}
}string kolproiz
{
{= value;
}
{FKolProiz;
}
}string kolskl
{
{= value;
}
{FKolSkl;
}
}string price
{
{= value;
}
{FPrice;
}
}
}
[Serializable]class Orders
{FNameCl;FNameProd;FAdressCl;FKolZak;FSymm;FPredpr;Orders()
{= "";= "";= "";=
"";= "";= "";
}Orders(string namecl, string nameprod, string adresscl,
string kolzak, string symm, string predpr)
{.FNameCl = namecl;.FNameProd = nameprod;.FAdressCl =
adresscl;.FKolZak = kolzak;.FSymm = symm;.FPredpr = predpr;
}string namecl
{
{= value;
{FNameCl;
}
}string nameprod
{
{= value;
}
{FNameProd;
}
}string adresscl
{
{= value;
}
{FAdressCl;
}
}string kolzak
{
{= value;
}
{FKolZak;
}
}string symm
{
{= value;
}
{FSymm;
}
}string predpr
{
{= value;
}
{FPredpr;
}
}
}
}