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

Создание программы "Ликероводочный завод" на основе объектно-ориентированного подхода: проектирование иерархии классов и интерфейсов на основе выделенных сущности. Применение принципа инкапсуляции к классам. Тестирование готового программного продукта.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 23.06.2012
Размер файла 573,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

На тему

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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

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. ПРОГРАММИРОВАНИЕ

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

/// </summary>

/// <param name="filename">Адрес к XML файлу для считывания</param>

/// <param name="listdelos">Экземпляр класса ListDelos</param>

/// <returns></returns>

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 = @"<?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>";

using (StreamWriter writer = new StreamWriter(filename))

{

writer.Write(newXML);

}

}

return listlvz;

}

#endregion

/// <summary>

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

/// </summary>

/// <param name="listdelos">Экземпляр класса ListDelos</param>

/// <param name="filename">Путь для сохранения файла XML</param>

#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<Workers> AllWork = new List<Workers>();

public List<Clients> AllClient = new List<Clients>();

public List<Product> AllProduct = new List<Product>();

public List<Orders> AllOrders = new List<Orders>();

}

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-9\b]");

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

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

}

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;

}

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.