Помощь в написании студенческих работ
Антистрессовый сервис

Ликероводочный завод

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Анализ работы ликероводочного завода позволяет определить ключевые понятия, выяснить задачи, требующие решения в рамках проекта, проанализировать функциональные требования будущего продукта и нефункциональные (надёжность, эффективность, изучаемость, модифицируемость и т. п.). Рисунок 9 — Просмотр клиентов Удаление локомотивов, вагонов и сотрудников можно осуществить при помощи кнопки «Удалить… Читать ещё >

Ликероводочный завод (реферат, курсовая, диплом, контрольная)

Федеральное агентство по образованию (Рособразование)

Архангельский государственный технический университет

Вычислительных систем и телекоммуникаций

Калитин Арсентий Игоревич

КУРСОВАЯ РАБОТА

По дисциплине

Объектно-ориентированное программирование

На тему

Ликеро-водочный завод

ЦЕЛЬ И ЗАДАЧИ ВЫПОЛНЕНИЯ РАБОТЫ

1 ВНЕШНЕЕ ОПИСАНИЕ

1.1 Анализ предметной области

1.2 Функциональная спецификация

2 ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА АВТОМАТИЗИРОВАННУЮ СИСТЕМУ

3 ПРОГРАММИРОВАНИЕ

3.1 Описание классов и интерфейсов

3.2 Диаграмма классов

4 КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ

4.1 Структура

4.2 Проектирование графического интерфейса

5 ТЕСТИРОВАНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ, А Листинг клиентского приложения

ВВЕДЕНИЕ

В данной пояснительной записке рассматривается описание программы «Ликероводочный завод» на основе объектно-ориентированного подхода.

При объектно-ориентированном подходе программа представляет собой описание объектов, их свойств (или атрибутов), совокупностей (или классов), отношений между ними, способов их взаимодействия и операций над объектами (или методов).

Несомненным преимуществом данного подхода является концептуальная близость к предметной области произвольной структуры и назначения. Механизм наследования атрибутов и методов позволяет строить производные понятия на основе базовых и таким образом создавать модель сколь угодно сложной предметной области с заданными свойствами.

В отличие от предыдущих подходов к программированию, объектно-ориентированный подход требует глубокого понимания основных принципов, или, иначе, концепций, на которых он базируется. К числу основополагающих понятий ООП обычно относят абстракцию данных, наследование, инкапсуляцию и полиморфизм.

Объектно-ориентированное программирование в настоящее время является абсолютным лидером в области прикладного программирования.

В качестве основного инструмента разработки применяется Microsoft Visual Studio 2010. Язык программирования C#.

ЦЕЛЬ И ЗАДАЧИ ВЫПОЛНЕНИЯ РАБОТЫ

Целью данной курсовой работы является автоматизация деятельности ликероводочного завода на основе объектно-ориентированного подхода, а также получение навыков в реализации этого подхода, проектировании и реализации схемы данных.

Задачи выполнения работы:

­ исследование предметной области с целью выявления основных сущностей и их атрибутов;

­ проектирование иерархии классов и интерфейсов на основе выделенных сущностей;

­ использование наследования и агрегации для структуризации классов;

­ применение принципа инкапсуляции к классам;

­ использование интерфейсов, описывающих операции в данной предметной области, для обеспечения множественного наследования;

­ тестирование созданных классов в клиентском приложении, автоматизирующем деятельность предметной области;

— документация разработанных классов при помощи XML комментариев.

программа проектирование microsoft visual

1 ВНЕШНЕЕ ОПИСАНИЕ

1.1 Анализ предметной области

Анализ предметной области — самый важный этап разработки программного обеспечения.

Анализ работы ликероводочного завода позволяет определить ключевые понятия, выяснить задачи, требующие решения в рамках проекта, проанализировать функциональные требования будущего продукта и нефункциональные (надёжность, эффективность, изучаемость, модифицируемость и т. п.).

Компонентами данной предметной области являются списки сотрудников, клиентов, продукции и заказов. Данное приложение должно позволять пользователю создавать записи, удалять, редактировать, сохранять и открывать файлы создаваемые программой.

Нефункциональные требования к программному средству:

— надежность: программа должна быть автономной;

— эффективность: программа должна иметь минимальные требования к аппаратному обеспечению. Для использования данного программного средства не должна требоваться установка на компьютер. Не должно требоваться дополнительных периферийных средств (принтер, сканер, дополнительные дисководы и т. д.)

— изучаемость: программа должна быть интуитивно понятна, иметь удобный пользовательский интерфейс;

— модифицируемость: программа должна быть легко модифицируемой вследствие небольшого исходного размера и объектно-ориентированного подхода.

1.2 Функциональная спецификации

Минимальные технические характеристики компьютера, на котором гарантируется стабильная работа программы:

компьютер/процессор: компьютер с процессором класса Pentium II 450 МГц;

— память: 64 МБ ОЗУ;

— монитор: монитор VGA с разрешением 800×600 точек или более высоким, поддерживающий 256 цветов;

— операционная система: операционная система Windows XP с установленным Microsoft .NET Framework 2.0;

— наличие свободного дискового пространства на жёстком диске.

Внешние функции:

— внесение данных и редактирование данных о клиентах, работниках, продукции и заказов;

— сохранение данных в XML-файл;

— считывание данных из XML-файла;

— проверка вводимых данных и вывод сообщений об ошибках;

— программа должна выполнять все функции за предельно малое количество времени;

Критические случаи:

— отсутствие свободного места на жёстком диске. Любая операция с файловой системой должна быть отменена;

— некорректный XML-файл. Программа не должна аварийно завершаться;

— завершение работы Windows. В этом случае программа должна завершать свою работу, не применяя выбранные пользователем настройки.

2. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА АВТОМАТИЗИРОВАННУЮ СИСТЕМУ

Техническое задание определяет требования к будущей автоматизированной информационной системе со стороны основных процессов.

Система предназначена для решения перечисленных ниже задач:

— изменение списка работников (добавления, удаление);

— изменение списка клиентов (добавления, удаление);

— изменение продукции (добавления, удаление);

— изменение заказов (добавления, удаление);

— отображение информации, хранящейся в XML-файле;

— сохранение информации в XML-файл.

3. ПРОГРАММИРОВАНИЕ

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. КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ

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 — Попытка сохранить в файл, доступный только на чтение

5. ТЕСТИРОВАНИЕ

Для тестирования программы производились различные манипуляции с данными.

Проводились следующие тесты:

— ввод неверных значений;

— открытие некорректного 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.

ПРИЛОЖЕНИЕ А. ЛИСТИНГ ПРОГРАММЫ

(обязательное)

Главная форма:

using System;

using System.Collections.Generic;

using System. ComponentModel;

using System. Data;

using System. Drawing;

using System. Linq;

using System. Text;

using System.Windows.Forms;

using Classes;

using System. IO;

using System. Xml;

using System.Xml.Serialization;

using System.Text.RegularExpressions;

namespace LVZ

{

interface IRemove

{

void Remove ();

}

public partial class Form1: Form, IRemove

{

string sv = null;

public class SaveOpen

{

#region Метод LoadXML — загрузка данных из файла

/// Статичный метод для считывания данных из XML-файла. Возвращает ListDelos

/// Адрес к XML файлу для считывания

/// Экземпляр класса ListDelos

public static ListLVZ LoadXML (string filename, ListLVZ listlvz)

{

XmlSerializer Serializer = new XmlSerializer (typeof (ListLVZ));

try

{

using (StreamReader reader = new StreamReader (filename))

{

listlvz = (ListLVZ)Serializer.Deserialize (reader);

}

}

catch (FileNotFoundException)

{

string newXML = @" «+ 'n' + @» «+ 'n' + «» + 'n' + «» ;

using (StreamWriter writer = new StreamWriter (filename))

{

writer.Write (newXML);

}

}

return listlvz;

}

#endregion

/// Статичный метод для сохранения данных в XML-файл.

/// Экземпляр класса ListDelos

/// Путь для сохранения файла XML

#region Save — сохранение экземляра класса Delo в файл

public static void Save (ListLVZ listlvz, string filename)

{

XmlSerializer sr = new XmlSerializer (listlvz.GetType ());

StringBuilder sb = new StringBuilder ();

StreamWriter SW = new StreamWriter (filename);

sr.Serialize (SW, listlvz);

SW.Close ();

}

#endregion

}

public class ListLVZ

{

public List AllWork = new List ();

public List AllClient = new List ();

public List AllProduct = new List ();

public List AllOrders = new List ();

}

public ListLVZ l = new ListLVZ ();

public Form1()

{

InitializeComponent ();

}

private void butWork_Click (object sender, EventArgs e)

{

Workers wr = new Workers ();

wr.famil = Famil. Text;

wr.name = Imya. Text;

wr.otche = Otche. Text;

wr.dolgn = Dolg. Text;

wr.telef = Telef. Text;

wr.Zarplata = Zarpl. Text;

l.AllWork.Add (wr);

dataWork.Rows.Clear ();

for (int i = 0; i < l.AllWork.Count; i++)

{

dataWork.Rows.Add ();

dataWork[0, i]. Value = l. AllWork[i]. famil;

dataWork[1, i]. Value = l. AllWork[i]. name;

dataWork[2, i]. Value = l. AllWork[i]. otche;

dataWork[3, i]. Value = l. AllWork[i]. dolgn;

dataWork[4, i]. Value = l. AllWork[i]. telef;

dataWork[5, i]. Value = l. AllWork[i]. Zarplata;

}

}

private void сохранитьToolStripMenuItem_Click (object sender, EventArgs e)

{

if (saveFileDialog1.ShowDialog () == DialogResult. OK)

{

try

{

SaveOpen.Save (l, saveFileDialog1. FileName);

MessageBox.Show («Файл сохранен»);

}

catch (UnauthorizedAccessException)

{

MessageBox.Show («Невозможно сохранить файл: доступ закрыт»);

}

}

}

private void открытьToolStripMenuItem_Click (object sender, EventArgs e)

{

if ((openFileDialog1.ShowDialog () == DialogResult. OK))

{

try

{

l = SaveOpen. LoadXML (openFileDialog1.FileName, l);

sv = openFileDialog1. FileName;

}

catch (InvalidOperationException)

{

MessageBox.Show («Невозможно прочитать данные из этого XML-файла»);

}

}

string s = openFileDialog1. FileName;

}

private void показатьToolStripMenuItem_Click (object sender, EventArgs e)

{

orNameCl.Items.Clear ();

orNamePr.Items.Clear ();

dataWork.Rows.Clear ();

dataClients.Rows.Clear ();

dataProduct.Rows.Clear ();

dataOrders.Rows.Clear ();

for (int i = 0; i < l.AllClient.Count; i++)

{

string s = (l.AllClient[i]. famil + «» + l. AllClient[i]. name + «» + l. AllClient[i]. otche);

orNameCl.Items.Add (s);

}

for (int i = 0; i < l.AllProduct.Count; i++)

{

string s = (l.AllProduct[i]. name + «(«+ l. AllProduct[i]. clas + «)»);

orNamePr.Items.Add (s);

}

for (int i = 0; i < l.AllWork.Count; i++)

{

dataWork.Rows.Add ();

dataWork[0, i]. Value = l. AllWork[i]. famil;

dataWork[1, i]. Value = l. AllWork[i]. name;

dataWork[2, i]. Value = l. AllWork[i]. otche;

dataWork[3, i]. Value = l. AllWork[i]. dolgn;

dataWork[4, i]. Value = l. AllWork[i]. telef;

dataWork[5, i]. Value = l. AllWork[i]. Zarplata;

}

for (int i = 0; i < l.AllClient.Count; i++)

{

dataClients.Rows.Add ();

dataClients[0, i]. Value = l. AllClient[i]. famil;

dataClients[1, i]. Value = l. AllClient[i]. name;

dataClients[2, i]. Value = l. AllClient[i]. otche;

dataClients[3, i]. Value = l. AllClient[i]. dolgn;

dataClients[4, i]. Value = l. AllClient[i]. telef;

dataClients[5, i]. Value = l. AllClient[i]. predrp;

dataClients[6, i]. Value = l. AllClient[i]. adress;

}

for (int i = 0; i < l.AllProduct.Count; i++)

{

dataProduct.Rows.Add ();

dataProduct[0, i]. Value = l. AllProduct[i]. name;

dataProduct[1, i]. Value = l. AllProduct[i]. clas;

dataProduct[2, i]. Value = l. AllProduct[i]. kolproiz;

dataProduct[3, i]. Value = l. AllProduct[i]. kolskl;

dataProduct[4, i]. Value = l. AllProduct[i]. price;

}

for (int i = 0; i < l.AllOrders.Count; i++)

{

dataOrders.Rows.Add ();

dataOrders[0, i]. Value = l. AllOrders[i]. namecl;

dataOrders[1, i]. Value = l. AllOrders[i]. nameprod;

dataOrders[2, i]. Value = l. AllOrders[i]. adresscl;

dataOrders[3, i]. Value = l. AllOrders[i]. kolzak;

dataOrders[4, i]. Value = l. AllOrders[i]. symm;

}

}

private void butClients_Click (object sender, EventArgs e)

{

Clients cl = new Clients ();

cl.famil = textBox1. Text;

cl.name = textBox2. Text;

cl.otche = textBox3. Text;

cl.dolgn = textBox4. Text;

cl.telef = textBox5. Text;

cl.predrp = textBox6. Text;

cl.adress = textBox7. Text;

l.AllClient.Add (cl);

dataClients.Rows.Clear ();

for (int i = 0; i < l.AllClient.Count; i++)

{

dataClients.Rows.Add ();

dataClients[0, i]. Value = l. AllClient[i]. famil;

dataClients[1, i]. Value = l. AllClient[i]. name;

dataClients[2, i]. Value = l. AllClient[i]. otche;

dataClients[3, i]. Value = l. AllClient[i]. dolgn;

dataClients[4, i]. Value = l. AllClient[i]. telef;

dataClients[5, i]. Value = l. AllClient[i]. predrp;

dataClients[6, i]. Value = l. AllClient[i]. adress;

}

}

private void butProd_Click (object sender, EventArgs e)

{

Product pr = new Product ();

pr.name = prName. Text;

pr.clas = prClass. Text;

pr.kolproiz = prKolProi. Text;

pr.kolskl = prKolSkl. Text;

pr.price = prPrice. Text;

l.AllProduct.Add (pr);

dataProduct.Rows.Clear ();

for (int i = 0; i < l.AllProduct.Count; i++)

{

dataProduct.Rows.Add ();

dataProduct[0,i]. Value = l. AllProduct[i]. name;

dataProduct[1,i].Value = l. AllProduct[i]. clas;

dataProduct[2,i].Value = l. AllProduct[i]. kolproiz;

dataProduct[3,i].Value = l. AllProduct[i]. kolskl;

dataProduct[4, i]. Value = l. AllProduct[i]. price;

}

}

private void butOrders_Click (object sender, EventArgs e)

{

Orders or = new Orders ();

or.namecl = orNameCl. Text;

or.nameprod = orNamePr. Text;

or.adresscl = orAdressCl. Text;

or.kolzak = orKolZak. Text;

or.symm = orSymm. Text;

l.AllOrders.Add (or);

dataOrders.Rows.Clear ();

for (int i = 0; i < l.AllOrders.Count; i++)

{

dataOrders.Rows.Add ();

dataOrders[0,i]. Value = l. AllOrders[i]. namecl;

dataOrders[1,i].Value = l. AllOrders[i]. nameprod;

dataOrders[2,i].Value = l. AllOrders[i]. adresscl;

dataOrders[3,i].Value = l. AllOrders[i]. kolzak;

dataOrders[4,i].Value = l. AllOrders[i]. symm;

}

}

private void orNameCl_SelectedIndexChanged (object sender, EventArgs e)

{

for (int i = 0; i < l.AllClient.Count; i++)

{

string s = (l.AllClient[i]. famil + «» + l. AllClient[i]. name + «» + l. AllClient[i]. otche);

if (orNameCl.Text == s)

{

orAdressCl.Text = l. AllClient[i]. adress;

}

}

}

private void orKolZak_TextChanged (object sender, EventArgs e)

{

}

private void Symm_Click (object sender, EventArgs e)

{

for (int i = 0; i < l.AllProduct.Count; i++)

{

string s = (l.AllProduct[i]. name + «(«+ l. AllProduct[i]. clas + «)»);

if (s == orNamePr. Text)

{

if (orKolZak.Text == «»)

{

orSymm.Text = «» ;

MessageBox.Show («Введите количество товара»);

break;

}

orSymm.Text = (int.Parse (l.AllProduct[i]. price) * int. Parse (orKolZak.Text)).ToString ();

}

string y = l. AllProduct[i]. kolskl;

if (orNamePr.Text == l. AllProduct[i]. name + «(«+ l. AllProduct[i]. clas + «)»)

{

if (int.Parse (orKolZak.Text) > int. Parse (y))

{

orSymm.Text = «» ;

MessageBox.Show («На складе нехватает товара»);

}

}

for (int g = 0; g < l.AllOrders.Count; g++)

{

int n = 0;

if (orNamePr.Text == l. AllOrders[g]. nameprod)

{

for (int k = 0; k < l.AllOrders.Count; k++)

{

if (orNamePr.Text == l. AllOrders[k]. nameprod)

{

n += (int.Parse (l.AllOrders[k]. kolzak));

}

}

int v = 0;

for (int f = 0; f < l.AllProduct.Count; f++)

{

if (orNamePr.Text == (l.AllProduct[f]. name + «(«+ l. AllProduct[f]. clas + «)»))

{

v = int. Parse (l.AllProduct[f]. kolskl) — n;

}

}

if (int.Parse (orKolZak.Text) > v)

{

MessageBox.Show («Недостаточно товара на складе»);

break;

}

}

}

break;

}

}

private void Famil_TextChanged (object sender, EventArgs e)

{

Famil.Text = System.Text.RegularExpressions.Regex.Replace (Famil.Text, @" d", «»);

Imya.Text = System.Text.RegularExpressions.Regex.Replace (Imya.Text, @" d", «»);

Otche.Text = System.Text.RegularExpressions.Regex.Replace (Otche.Text, @" d", «»);

Dolg.Text = System.Text.RegularExpressions.Regex.Replace (Dolg.Text, @" d", «»);

textBox1.Text = System.Text.RegularExpressions.Regex.Replace (textBox1.Text, @" d", «»);

textBox2.Text = System.Text.RegularExpressions.Regex.Replace (textBox2.Text, @" d", «»);

textBox3.Text = System.Text.RegularExpressions.Regex.Replace (textBox3.Text, @" d", «»);

textBox4.Text = System.Text.RegularExpressions.Regex.Replace (textBox4.Text, @" d", «»);

prName.Text = System.Text.RegularExpressions.Regex.Replace (prName.Text, @" d", «»);

}

private void Telef_KeyPress (object sender, KeyPressEventArgs e)

{

Regex r = new Regex («[0−9b]»);

Match m = r. Match (e.KeyChar.ToString ());

if (!m.Success) e. KeyChar = '';

}

private void dataProduct_CellContentClick (object sender, DataGridViewCellEventArgs e)

{

Form2 ff = new Form2();

int g = 0;

for (int i = 0; i < dataProduct.Rows.Count; i++)

{

if (e.ColumnIndex == 5 && e. RowIndex == i)

{

string s = l. AllProduct[i]. name + «(«+ l. AllProduct[i]. clas + «)» ;

for (int p = 0; p < l.AllOrders.Count; p++)

{

string s1 = l. AllOrders[p]. nameprod;

if (s == s1)

{

ff.Text = l. AllOrders[p]. nameprod;

ff.dataGridView1.Rows.Add ();

ff.dataGridView1[0, g]. Value = l. AllOrders[p]. namecl;

for (int j = 0; j < l.AllClient.Count; j++)

{

if ((l.AllClient[j]. famil + «» + l. AllClient[j]. name + «» + l. AllClient[j]. otche) == l. AllOrders[p]. namecl)

{

ff.dataGridView1[1, g]. Value = l. AllClient[j]. predrp;

}

}

ff.dataGridView1[2, g]. Value = l. AllOrders[p]. adresscl;

ff.dataGridView1[3, g]. Value = l. AllOrders[p]. kolzak;

ff.dataGridView1[4, g]. Value = l. AllOrders[p]. symm;

g++;

}

}

}

}

ff.ShowDialog ();

}

public void Remove ()

{

Checking check = new Checking ();

bool u = true;

int y = -1;

u = check. Check_Select ();

if (u)

{

y = dataWork.Rows.IndexOf (dataWork.SelectedRows[0]);

l.AllWork.RemoveAt (y);

DataGridViewRow dr = dataWork. SelectedRows[0];

dataWork.Rows.Remove (dr);

}

}

private void butDel_Click (object sender, EventArgs e)

{

Remove ();

}

private void button1_Click (object sender, EventArgs e)

{

Remove ();

}

private void butSave_Click (object sender, EventArgs e)

{

try

{

SaveOpen.Save (l, sv);

MessageBox.Show («Файл сохранен»);

}

catch (UnauthorizedAccessException)

{

MessageBox.Show («Невозможно сохранить файл: доступ закрыт»);

}

}

}

}

Листинг библиотеки Classes. dll:

using System;

using System.Collections.Generic;

using System. Linq;

using System. Text;

using System. ComponentModel;

using System. Data;

namespace Classes

{

[Serializable]

public class People

{

string FFamil;

string FName;

string FOtche;

string FDolgn;

string FTelef;

public People ()

{

FFamil = «» ;

FName = «» ;

FOtche = «» ;

FDolgn = «» ;

FTelef = «» ;

}

public People (string famil, string name, string otche, string dolgn, string telef)

{

this.FFamil = famil;

this.FName = name;

this.FOtche = otche;

this.FDolgn = dolgn;

this.FTelef = telef;

}

public string famil

{

set

{

FFamil = value;

}

get

{

return FFamil;

}

}

public string name

{

set

{

FName = value;

}

get

{

return FName;

}

}

public string otche

{

set

{

FOtche = value;

}

get

{

return FOtche;

}

}

public string dolgn

{

set

{

FDolgn = value;

}

get

{

return FDolgn;

}

}

public string telef

{

set

{

FTelef = value;

}

get

{

return FTelef;

}

}

}

[Serializable]

public class Workers: People

{

string FZarplata;

public Workers ()

{

FZarplata = «» ;

}

public Workers (string Zarplata)

{

this.FZarplata = Zarplata;

}

public string Zarplata

{

set

{

FZarplata = value;

}

get

{

return FZarplata;

}

}

}

[Serializable]

public class Clients: People

{

string FPredpr;

string FAdress;

public Clients ()

{

FPredpr = «» ;

FAdress = «» ;

}

public Clients (string predpr, string adress)

{

this.FPredpr = predpr;

this.FAdress = adress;

}

public string predrp

{

set

{

FPredpr = value;

}

get

{

return FPredpr;

}

}

public string adress

{

set

{

FAdress = value;

}

get

{

return FAdress;

}

}

}

[Serializable]

public class Product

{

string FName;

string FClas;

string FKolProiz;

string FKolSkl;

string FPrice;

public Product ()

{

FName = «» ;

FClas = «» ;

FKolProiz = «» ;

FKolSkl = «» ;

FPrice = «» ;

}

public Product (string name, string clas, string kolproiz, string kolskl, string price)

{

this.FName = name;

this.FClas = clas;

this.FKolProiz = kolproiz;

this.FKolSkl = kolskl;

this.FPrice = price;

}

public string name

{

set

{

FName = value;

}

get

{

return FName;

}

}

public string clas

{

set

{

FClas = value;

}

get

{

return FClas;

}

}

public string kolproiz

{

set

{

FKolProiz = value;

}

get

{

return FKolProiz;

}

}

public string kolskl

{

set

{

FKolSkl = value;

}

get

{

return FKolSkl;

}

}

public string price

{

set

{

FPrice = value;

}

get

{

return FPrice;

}

}

}

[Serializable]

public class Orders

{

string FNameCl;

string FNameProd;

string FAdressCl;

string FKolZak;

string FSymm;

string FPredpr;

public Orders ()

{

FNameCl = «» ;

FNameProd = «» ;

FAdressCl = «» ;

FKolZak = «» ;

FSymm = «» ;

FPredpr = «» ;

}

public Orders (string namecl, string nameprod, string adresscl, string kolzak, string symm, string predpr)

{

this.FNameCl = namecl;

this.FNameProd = nameprod;

this.FAdressCl = adresscl;

this.FKolZak = kolzak;

this.FSymm = symm;

this.FPredpr = predpr;

}

public string namecl

{

set

{

FNameCl = value;

}

get

{

return FNameCl;

}

}

public string nameprod

{

set

{

FNameProd = value;

}

get

{

return FNameProd;

}

}

public string adresscl

{

set

{

FAdressCl = value;

}

get

{

return FAdressCl;

}

}

public string kolzak

{

set

{

FKolZak = value;

}

get

{

return FKolZak;

}

}

public string symm

{

set

{

FSymm = value;

}

get

{

return FSymm;

}

}

public string predpr

{

set

{

FPredpr = value;

}

get

{

return FPredpr;

}

}

}

}

Показать весь текст
Заполнить форму текущей работой