Ликероводочный завод
Создание программы "Ликероводочный завод" на основе объектно-ориентированного подхода: проектирование иерархии классов и интерфейсов на основе выделенных сущности. Применение принципа инкапсуляции к классам. Тестирование готового программного продукта.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Особенности реализации главных элементов разрабатываемой программы (цифровые элементы) с помощью объектно-ориентированного подхода. Применение принципа инкапсуляции для защиты данных. Конструирование классов, описание и тестирование программного продукта.
курсовая работа [2,3 M], добавлен 10.05.2015Общая характеристика объектно-ориентированного подхода в программировании, его основные свойства и принципы. Разработка программы для автоматизация деятельности кафе на основе объектно-ориентированного подхода, проектирования и реализации схемы данных.
курсовая работа [1,2 M], добавлен 22.01.2012Проектирование программного продукта для использования в организации учета медикаментов в аптеке. Построение функциональной модели автоматизированной системы; разработка и тестирование иерархии классов в соответствии с объектно-ориентированным подходом.
курсовая работа [1,5 M], добавлен 21.02.2013Особенности объектно-ориентированного проектирования. Основные понятия объектно-ориентированного подхода. Основы языка UML, варианты его использования. Диаграммы классов и взаимодействия. Разработка диаграммы прецедентов (вариантов использования).
курсовая работа [1,1 M], добавлен 13.05.2014Создание модели информационной системы оптовой базы с помощью средства ModelMaker. Диаграммы последовательности, диаграмма классов, создание предварительного модуля проекта на языке Object Pascal. Документирование информационной системы оптовой базы.
курсовая работа [516,4 K], добавлен 01.06.2016Принципы разработки алгоритмов и программ на основе процедурного подхода и на основе объектно-ориентированного подхода. Реализация программы Borland Pascal 7.0, ее интерфейс. Разработка простой программы в среде визуального программирования Delphi.
отчет по практике [934,7 K], добавлен 25.03.2012Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.
курсовая работа [355,9 K], добавлен 18.06.2013Основные идеи объектно-ориентированного подхода, преимущества и недостатки. Выбор языка программирования, проектирование системы классов, их взаимосвязь и формат. Программный код модуля unit1.h, тестирование, листинг. Результаты работы программы.
дипломная работа [347,7 K], добавлен 26.11.2011Классы и свойства объектно-ориентированного пространства. Методика создания новых классов в delphi: выбор родительского класса, изменение существующих компонентов, создание подклассов для элементов управления windows. Создание новой ветви классов.
контрольная работа [13,0 K], добавлен 07.07.2012Основные требования к составу и параметрам технических средства. Верификация программного продукта. Расширение функционала программы и его реализация. Отладка и тестирование программного продукта. Тестирование программы в граничных и реальных условиях.
курсовая работа [1,3 M], добавлен 29.12.2014