411

Разработка программы Кафе с использованием классов на языке программирования С#

Курсовая

Информатика, кибернетика и программирование

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

Русский

2012-11-14

417.5 KB

133 чел.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

  1.  ВНЕШНЕЕ ОПИСАНИЕ
    1.  Анализ предметной области
    2.  Функциональная спецификация
  2.  ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА АВТОМАТИЗИРОВАННУЮ СИСТЕМУ
  3.  ПРОГРАММИРОВАНИЕ
    1.  Описание классов и интерфейсов
    2.  Диаграмма классов
  4.  КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ
    1.  Структура
    2.  Проектирование графического интерфейса
  5.  ТЕСТИРОВАНИЕ

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

ПРИЛОЖЕНИЕ А. Листинг библиотеки классов

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


ВВЕДЕНИЕ

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

  •  память: 64 МБ ОЗУ;
  •  монитор: монитор VGA с разрешением 800x600 точек или более высоким, поддерживающий 256 цветов;
  •  операционная система: операционная система Windows XP с установленным Microsoft .NET Framework 2.0;
  •  наличие свободного дискового пространства на жёстком диске.

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

  •  внесение данных и редактирование данных о сотрудниках, предлагаемом товаре, заказах;
  •  сохранение данных в XML-файл;
  •  считывание данных из XML-файла;
  •  проверка вводимых данных и вывод сообщений об ошибках;
  •  программа должна выполнять все функции за предельно малое количество времени;

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

  •  отсутствие свободного места на жёстком диске. Любая операция с файловой системой должна быть отменена;
  •  некорректный XML-файл. Программа не должна аварийно завершаться;
  •  завершение работы Windows. В этом случае программа должна завершать свою работу, не применяя выбранные пользователем настройки.


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

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

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

  •  изменение списка сотрудников (добавления, удаление, редактирование);
  •  изменение меню (добавления, удаление, редактирование);
  •  изменение списка заказов  (добавления, удаление, редактирование);
  •  отображение информации, хранящейся в XML-файле;
  •  сохранение информации в XML-файл.


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

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

 В ООП главным элементом является класс, включающий множество объектов с одинаковыми свойствами, операциями и отношениями. Класс имеет внутреннее (реализацию) и внешнее представление – интерфейс. В данной программе реализованы классы Man, Worker, Food, ListShop, LoadAndSave, Sale, Check а также интерфейс IFIOtoString.

Класс Man является родителем класса Worker. Он содержит общие характеристики, описывающие человека, такие как имя, фамилия, отчество. Класс  Worker расширяет класс Man, за счёт чего получается реализация поставщиков и сотрудников. Класс Worker дополняется атрибутами дата устройства на работу, номер телефона, e-mail и наследует интерфейс IFIOtoString, описывающий отображение фамилии, имени, отчества в виде строки.

Рассмотрим остальные классы:

  •  Класс Sale описывает продажи блюда. Содержит такие атрибуты, как дата продажи, название блюда, сотрудника, продавшего блюдо, количество проданных экземпляров. Содержит конструктор сущности класса.
  •  Класс Food описывает пищу и содержит информацию об ингридиентах, цене, количестве приготовленных блюд.
  •  Класс LoadAndSave содержит два метода LoadXML и Save для загрузки XML-данных из файла и сохранения соответственно, посредством сериализации.
  •  Класс ListShop содержит списки сотрудников, заказчиков, продаж и продукции.
  •  Класс Check выводит в чек название блюда, итоговую стоимость, имя, фамилию и отчество сотрудника, который обслуживал, время и дату.

  1.  Диаграмма классов  

На рисунке 1 представлена диаграмма классов:

Рисунок 1 –Диаграмма классов

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

4.1 Структура

В данном ПП для продуктивной работы реализован удобный пользовательский интерфейс, похожий на большинство Windows – приложений. Данное программное средство можно разбить на модули, взаимодействующие друг с другом. На рисунке 2 представлена структура приложения:

Рисунок 2 – Структура приложения

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

Модуль проверки данных реализует методы:

  •  корректность вводимых пользователем данных;
  •  корректность считываемых из файла данных

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

Модуль сохранения данных, формирует все записи в один XML-файл.

Модуль считывания предоставляет возможность открытия XML-файла и заполнения списков в программе.

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

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

На рисунке 3 представлена форма приложения с отображением панели, содержащей вкладки для редактирования записей, и панели, содержащей таблицы данных:

Рисунок 3 – Форма Form1

Для редактирования записей о сотрудниках, заказчиках, продукции, заказах используется панель, содержащая вкладки: «Сотрудник», «Блюдо», «Заказы»,  «Поиск», «Чек».  Эти вкладки отображены на рисунках 4-7.

Рисунок 4 – Вкладка «Сотрудник»

Рисунок 5 – Вкладка «Блюдо»

Рисунок 6 – Вкладка «Заказы»

Рисунок 7 – Вкладка «Чек»

Для поиска информации о заказах используется вкладка «Поиск». Результаты поиска отображаются в таблице. Поиск можно осуществлять по дате. Данная вкладка изображена на рисунке 8:

Рисунок 8 – Вкладка «Поиск»

Удаление сотрудников, заказчиков, продукции, заказах осуществляется с помощью специальной панели, расположенной на главной форме приложения. Нажатием кнопки «Удалить выбранный» - удаляем из списка сотрудника. Аналогично для других списков. Вкладки отображены на рисунках 9-11:

Рисунок 9 – Таблица во вкладке «Сотрудники»

Рисунок 10 – Таблица во вкладке «Меню»

Рисунок 11– Таблица во вкладке «Журнал заказов»

Загрузка и сохранение данных осуществляются в меню файл. «Открыть» позволяет запустить диалог открытия файла XML, «Сохранить» - аналогично, только для сохранения. Диалог открытия файла предоставлен на рисунке 11 (диалог сохранения принципиально не отличается, поэтому рассматривать его не будем):

Рисунок 12 – Диалог открытия файла

Выбрав нужный файл XML и нажав кнопку «Открыть», мы загрузим данные в программу.

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

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

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

Тест 1 – Пустое значение в обязательном поле ввода данных, помеченном символом «*», изображен на рисунке 13:

Рисунок 13 – Ввод пустого значения в поле «Отчество»

Сообщение, которое будет показано пользователю после ввода пустого значения,  представлено на рисунке 14.

Рисунок 14 – Ошибка при

вводе пустого значения

Тест 2 – Попытка ввода текста в числовое поле, изображен на рисунке 15:

Рисунок 15 – Ввод текста в поле «Стоимость»

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

Рисунок 16– Ввод

некорректных

данных

Тест 3 – В полях ввода справа и слева от  введенных данных встречаются пробелы. В этом случае они не учитываются и данные в журнал записываются без них, изображен на рисунке 17:

Рисунок 17 – Встречаются пробелы слева и справа от введенных данных

Тест 4 - Открытие некорректного XML-файла, изображен на рисунке 18:

Рисунок 18 – Попытка

открыть некорректный

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.Linq;

using System.Text;

using System.Xml.Serialization;

using System.IO;

namespace KR

{

   public class LoadAndSave

   {

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

       public static ListShop LoadXML(string filename, ListShop listshop)

       {

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

           try

           {

               using (StreamReader reader = new StreamReader(filename))

               {

                   listshop = (ListShop)Serializer.Deserialize(reader);

               }

           }

           catch (FileNotFoundException)

           {

               string newXML = @"<?xml version=""1.0"" encoding=""utf-8""?>" + '\n' + @"<ListKafe xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">" + '\n' + "<AllKafe />" + '\n' + "</ListKafe>";

               using (StreamWriter writer = new StreamWriter(filename))

               {

                   writer.Write(newXML);

               }

           }

           return listshop;

       }

       #endregion

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

       public static bool Save(ListShop listshop, string filename)

       {

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

           StringBuilder sb = new StringBuilder();

           StreamWriter SW = new StreamWriter(filename);

           sr.Serialize(SW, listshop);

           SW.Close();

           return true;

       }

       #endregion

   }

   public interface IFIOtoString

   {

       string FIOtoString();

   }

   #region классы (кафе, сотрудник,блюдо, заказ и др.) и интерфейсы

   public class ListShop

   {

       public List<Worker> AllWorker = new List<Worker>();

       public List<Food> AllFood = new List<Food>();

       public List<Sale> AllSale = new List<Sale>();

       public List<Check> AllCheck = new List<Check>();

   }

   public class Man

   {

       string name;

       string surname;

       string ot;

       public string Name

       {

           get { return name; }

           set { name = value; }

       }

       public string Ot

       {

           get { return ot; }

           set { ot = value; }

       }

       public string Surname

       {

           get { return surname; }

           set { surname = value; }

       }

       public Man()

       {

           name = "";

           surname = "";

           ot = "";

       }

       public Man(string Name, string Surname, string Ot)

       {

           name = Name;

           surname = Surname;

           ot = Ot;

       }

   }

   [Serializable]

   public class Worker : Man, IFIOtoString

   {

       DateTime ustrdate;

       string twnumber;

       string wmail;

       public DateTime Ustrdate

       {

           get { return ustrdate; }

           set { ustrdate = value; }

       }

       public string Twnumber

       {

           get { return twnumber; }

           set { twnumber = value; }

       }

       public string Mail

       {

           get { return wmail; }

           set { wmail = value; }

       }

       public string FIOtoString()

       {

           return Name + " " + Ot + " " + Surname;

       }

   }

   [Serializable]

   public class Food

   {

       int id;

       string name;

       string ingr;

       int price;

       int kol;

       public int ID

       {

           get { return id; }

           set { id = value; }

       }

       public int Kol

       {

           get { return kol; }

           set { kol = value; }

       }

       public string Name

       {

           get { return name; }

           set { name = value; }

       }

       public string Ingr

       {

           get { return ingr; }

           set { ingr = value; }

       }

       public int Price

       {

           get { return price; }

           set { price = value; }

       }

   }

   [Serializable]

   public class Sale : Worker, IFIOtoString

   {

       Food foodsale;

       DateTime date;

       Worker worker;

       int kolv;

       public Food Food

       {

           get { return foodsale; }

           set { foodsale = value; }

       }

       public DateTime Date

       {

           get { return date; }

           set { date = value; }

       }

       public Worker Worker

       {

           get { return worker; }

           set { worker = value; }

       }

       public int Kolv

       {

           get { return kolv; }

           set { kolv = value; }

       }

       public Sale()

       {

           foodsale = new Food();

           date = new DateTime();

           worker = new Worker();

       }

       public Sale(Food Food, DateTime Date, Worker Worker)

       {

           foodsale = Food;

           date = Date;

           worker = Worker;

       }

   }

   public class Check

   {

       private List<Sale> sales = new List<Sale>();

       private DateTime printTime;

       private double cost=0;

       private string printText="";

       public DateTime PrintTime

       {

           get { return printTime; }

       }

       public string PrintText

       {

           get { return printText; }

       }

       public Check( IEnumerable<Sale> newSales)

       {

           sales.AddRange(newSales);

           foreach (Sale sale in sales)

           {

               cost += sale.Food.Price*sale.Kolv;

           }

       }

       public  Check(Sale newSale)

       {

           sales.Add(newSale);

           cost += newSale.Food.Price*newSale.Kolv;

       }

       public Check()

       {

           

       }

       public void AddSale(IEnumerable<Sale> newSales)

       {

           sales.AddRange(newSales);

           foreach (Sale sale in sales)

           {

               cost += sale.Food.Price * sale.Kolv;

           }

       }

       public void AddSale(Sale newSale)

       {

           sales.Add(newSale);

           cost += newSale.Food.Price * newSale.Kolv;

       }

       public double Cost

       {

           get { return cost; }

       }

       public string PrintCheck()

       {

           int temp=0;

           printTime = DateTime.Now;

           StringBuilder checkText = new StringBuilder();

           checkText.AppendLine("*** Кафе ***");

           checkText.AppendLine("Заказы :");

           foreach (Sale sale in sales)

           {

               temp++;

               checkText.AppendLine(String.Format("{0}: {1}  - {2}*{3} = {4} этот заказ обслуживал {5} {6}", temp, sale.Food.Name,

                                                  sale.Food.Price, sale.Kolv, sale.Food.Price*sale.Kolv,sale.Worker.Name,sale.Worker.Surname));

           }

           checkText.AppendLine(string.Format("Итоговая стоимость {0}", cost));

           checkText.AppendLine(string.Format("{0}",printTime));

           checkText.AppendLine("***Спасибо за покупку****");

           printText = checkText.ToString();

           return checkText.ToString();

       }

   }

   #endregion

}

ПРИЛОЖЕНИЕ Б.

Листинг клиентского приложения

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;

namespace KR

{

   public partial class MainForm : Form

   {

       public MainForm()

       {

           InitializeComponent();

       }

       ListShop ListShops = new ListShop();

       int sel1 = 0;

       int sel2 = 0;

       int sel3 = 0;

       int sel4 = 0;

       private void button2_Click(object sender, EventArgs e) // добавление нового сотрудника

       {

           if ((textBox1.Text.Trim() == "") || (textBox2.Text.Trim() == "") || (textBox3.Text.Trim() == ""))

           {

               MessageBox.Show("Не все обязательные поля заполнены");

               return;

           }

           Worker wrk = new Worker();

           wrk.Name = textBox2.Text.Trim();

           wrk.Ot = textBox3.Text.Trim();

           wrk.Surname = textBox1.Text.Trim();

           wrk.Twnumber = textBox4.Text.Trim();

           wrk.Mail = textBox5.Text.Trim();

           wrk.Ustrdate = dateTimePicker1.Value;

           ListShops.AllWorker.Add(wrk);

           MessageBox.Show("Новый сотрудник добавлен");

           

           button1_Click(sender, e);

       }

       private void button1_Click(object sender, EventArgs e) // обновление

       {

           dataGridView1.Rows.Clear();

           for (int i = 0; i < ListShops.AllWorker.Count; i++)

           {

               dataGridView1.Rows.Add(1);

               dataGridView1[0, i].Value = ListShops.AllWorker[i].Surname;

               dataGridView1[1, i].Value = ListShops.AllWorker[i].Name;

               dataGridView1[2, i].Value = ListShops.AllWorker[i].Ot;

               dataGridView1[3, i].Value = ListShops.AllWorker[i].Ustrdate;

               dataGridView1[4, i].Value = ListShops.AllWorker[i].Twnumber;

               dataGridView1[5, i].Value = ListShops.AllWorker[i].Mail;

           }

           

           dataGridView3.Rows.Clear();

           for (int i = 0; i < ListShops.AllFood.Count; i++)

           {

               dataGridView3.Rows.Add(1);

               dataGridView3[0, i].Value = ListShops.AllFood[i].Name;

               dataGridView3[1, i].Value = ListShops.AllFood[i].Ingr;

               dataGridView3[2, i].Value = ListShops.AllFood[i].Price;

           }

           dataGridView4.Rows.Clear();

           for (int i = 0; i < ListShops.AllSale.Count; i++)

           {

               dataGridView4.Rows.Add(1);

               dataGridView4[0, i].Value = ListShops.AllSale[i].Food.Name;

               dataGridView4[1, i].Value = ListShops.AllSale[i].Date;

               dataGridView4[2, i].Value = ListShops.AllSale[i].Worker.Surname + " " + ListShops.AllSale[i].Worker.Name + " " + ListShops.AllSale[i].Worker.Ot;

               dataGridView4[3, i].Value = ListShops.AllSale[i].Kolv;                

           }

          

           if (ListShops.AllWorker.Count > 0)

           {

               comboBox4.Items.Clear();

               for (int i = 0; i < ListShops.AllWorker.Count; i++)

               {

                   comboBox4.Items.Add(ListShops.AllWorker[i].Surname + " " + ListShops.AllWorker[i].Name + " " + ListShops.AllWorker[i].Ot);

               }

           }

           if (ListShops.AllFood.Count > 0)

           {

               comboBox1.Items.Clear();

               for (int i = 0; i < ListShops.AllFood.Count; i++)

               {

                   comboBox1.Items.Add(ListShops.AllFood[i].Name + " " + ListShops.AllFood[i].Ingr + " ");

               }

           }            

       }

       private void button4_Click(object sender, EventArgs e) // добавление нового блюда

       {

           if ((textBox12.Text.Trim() == "") || (textBox13.Text.Trim() == "") ||  (textBox16.Text.Trim() == "") )

           {

               MessageBox.Show("Не все обязательные поля заполнены");

               return;

           }

           Food org = new Food();

           org.Name = textBox12.Text.Trim();

           org.Ingr = textBox13.Text.Trim();

           try

           {

               org.Price = int.Parse(textBox16.Text.Trim());

               int x = ListShops.AllFood.Count;

               if (x != 0)

               {

                   for (int i = 0; i < x; i++)

                   {

                           ListShops.AllFood.Add(org);

                           MessageBox.Show("Продукция успешно добавлена");

                       

                   }

               }

               else

               {

                   ListShops.AllFood.Add(org);

                   MessageBox.Show("Продукция успешно добавлена");

               }                        

               button1_Click(sender, e);

           }

           catch (FormatException)

           {

               MessageBox.Show("Неверный формат ввода");

           }

           

       }

       private void button5_Click(object sender, EventArgs e) // добавление нового заказа

       {

           if ((comboBox1.Text.Trim() == "") || (comboBox4.Text.Trim() == ""))

           {

               MessageBox.Show("Не все обязательные поля заполены");

               return;

           }

           Sale sl = new Sale();

           sl.Food = ListShops.AllFood[comboBox1.SelectedIndex];

           sl.Worker = ListShops.AllWorker[comboBox4.SelectedIndex];

           sl.Date = dateTimePicker3.Value;

           sl.Kolv = (byte)numericUpDown1.Value;

               ListShops.AllFood[comboBox1.SelectedIndex].Kol -= sl.Kolv;

               ListShops.AllSale.Add(sl);

               MessageBox.Show("Успешно добавлено!");

          

           

       }

       private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

       {

           sel1 = e.RowIndex;

       }

       private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

       {

           sel2 = e.RowIndex;

       }

       private void dataGridView3_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

       {

           sel3 = e.RowIndex;

       }

       private void dataGridView4_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

       {

           sel4 = e.RowIndex;

       }

       private void button6_Click(object sender, EventArgs e)  // удаление сотрудника

       {

           if (ListShops.AllWorker.Count > 0)

           {

               ListShops.AllWorker.RemoveAt(sel1);

               button1_Click(sender, e);

               sel1 = 0;

           }

       }

      

       private void button8_Click(object sender, EventArgs e) // удаление в  меню

       {

           if (ListShops.AllFood.Count > 0)

           {

               ListShops.AllFood.RemoveAt(sel1);

               button1_Click(sender, e);

               sel3 = 0;

           }

       }

       private void button9_Click(object sender, EventArgs e) // удаление в журнале заказов

       {

           if (ListShops.AllSale.Count > 0)

           {

               ListShops.AllSale.RemoveAt(sel1);

               button1_Click(sender, e);

               sel4 = 0;

           }

       }

       private void button10_Click(object sender, EventArgs e) // поиск

       {

           dataGridView5.Rows.Clear();

           int count = 0;

           for (int i = 0; i < ListShops.AllSale.Count; i++)

           {

               if (ListShops.AllSale[i].Date.ToShortDateString() == dateTimePicker3.Value.ToShortDateString())

               {

                   dataGridView5.Rows.Add(1);

                   dataGridView5[0, count].Value = ListShops.AllSale[i].Food.Name + " " + ListShops.AllSale[i].Food.Ingr;

                   dataGridView5[1, count].Value = ListShops.AllSale[i].Worker.Surname + " " + ListShops.AllSale[i].Worker.Name + " " + ListShops.AllSale[i].Worker.Ot;

                   dataGridView5[2, count].Value = ListShops.AllSale[i].Kolv;

                   dataGridView5[3, count].Value = ListShops.AllSale[i].Food.Price;

               }

           }            

       }

       private void exitToolStripMenuItem_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void aboutToolStripMenuItem_Click(object sender, EventArgs e)

       {

           About about = new About();

           about.ShowDialog();

       }

       private void openToolStripMenuItem_Click(object sender, EventArgs e)

       {

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

           {

               try

               {

                   ListShops = LoadAndSave.LoadXML(openFileDialog1.FileName, ListShops);

               }

               catch (InvalidOperationException)

               {

                   MessageBox.Show("Ошибка чтения XML-файла");

               }

           }

           button1_Click(sender, e);

       }

       private void saveToolStripMenuItem_Click(object sender, EventArgs e)

       {

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

           {

               try

               {

                   LoadAndSave.Save(ListShops, saveFileDialog1.FileName);

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

               }

               catch (UnauthorizedAccessException)

               {

                   MessageBox.Show("Невозможно сохранить файл");

               }

           }

       }

       private void button3_Click(object sender, EventArgs e)

       {

           Check newCheck = new Check();

           if (listBox1.SelectedItems.Count!=0)

           {

               foreach (int sale in listBox1.SelectedIndices)

               {

                   newCheck.AddSale(ListShops.AllSale[sale]);

               }

               ListShops.AllCheck.Add(newCheck);

               MessageBox.Show(newCheck.PrintCheck());

           }

           else

           {

               MessageBox.Show("Вы должны выбрать заказы");

           }

           

       }

       private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)

       {

           if (tabControl2.TabIndex == 2)

           {

               listBox1.Items.Clear();

               foreach (var sale in ListShops.AllSale)

               {

                   listBox1.Items.Add(string.Format("{0} - {1}", sale.Food.Name, sale.Date.ToShortTimeString()));

               }

           }

       }

       private void dataGridView4_CellContentClick(object sender, DataGridViewCellEventArgs e)

       {

       }

       private void tabPage4_Click(object sender, EventArgs e)

       {

       }

   }

}


 

А также другие работы, которые могут Вас заинтересовать

20417. Системы управления контентом 47.5 KB
  История управления контентом началась с управления документами в традиционном смысле этого слова т. По мере развития понятия документ системы управления документами стали называть системами управления контентом. Системы управления контентом действительно научились разделять управление документами хранение изменение и т.
20418. Диаграмма состояний (statechart diagram) 253 KB
  Вершинами графа являются возможные состояния автомата изображаемые соответствующими графическими символами а дуги обозначают его переходы из состояния в состояние. Длительность нахождения системы в любом из возможных состояний существенно превышает время которое затрачивается на переход из одного состояния в другое. При этом автомат может находиться в отдельном состоянии как угодно долго если не происходит никаких событий; время нахождения автомата в том или ином состоянии а также время достижения того или иного состояния никак не...
20419. АСУ «Экспресс» 31.5 KB
  АСУ Экспресс начала работать в 1972 году на Московском железнодорожном узле. Она получила название Экспресс1 и предназначалась для массового обслуживания пассажиров в реальном масштабе времени. Основной целью создания системы Экспресс1 являлось получение опыта в автоматизации управления билетнокассовыми операциями в масштабе такого крупного железнодорожного узла как Москва обслуживающего в сутки до 250 тысяч пассажиров поездами прямого и местного сообщения.
20420. Система АСУ Экспресс 66.5 KB
  1972 Система Экспресс1 запущена в эксплуатацию в предварительных кассах Киевского вокзала Москвы. 1974 Система Экспресс1 введена в эксплуатацию в масштабе Московского железнодорожного узла. 1982 Система Экспресс2 запущена в Москве с обслуживанием пассажиров через бюро заказов по телефону.
20421. Диаграмма классов (class diagram) 207 KB
  В этих разделах могут указываться имя класса атрибуты переменные и операции методы. Имя класса должно быть уникальным в пределах пакета который описывается некоторой совокупностью диаграмм классов или одной диаграммой. В дополнение к общему правилу наименования элементов языка UML имя класса записывается по центру секции имени полужирным шрифтом и должно начинаться с заглавной буквы. В первой секции обозначения класса могут находиться ссылки на стандартные шаблоны или абстрактные классы от которых образован данный класс и от которых он...
20422. Основные пакеты метамодели языка UML 282 KB
  org view=Basic_packages_metamodeli_language_UML 2730 Основные пакеты метамодели языка UML Возвращаясь к рассмотрению языка UML напомним что основой его представления на метамодельном уровне является описание трех его логических блоков или пакетов: Основные элементы Элементы поведения и Общие механизмы рис. Пакет Типы данных определяет основные структуры данных для языка UML. Основные пакеты метамодели языка UML Рис. Подпакеты пакета Основные элементы языка UML Пакет Основные элементы Ниже дается краткая характеристика элементов...
20423. Жизненный цикл ИС 86 KB
  Модель жизненного цикла отражает различные состояния системы начиная с момента возникновения необходимости в данной ИС и заканчивая моментом ее полного выхода из употребления. Модель жизненного цикла структура содержащая процессы действия и задачи которые осуществляются в ходе разработки функционирования и сопровождения программного продукта в течение всей жизни системы от определения требований до завершения ее использования. В настоящее время известны и используются следующие модели жизненного цикла: Каскадная модель рис....
20424. Мультипроцессоры 58 KB
  Мультипроцессоры Мультипроцессорные системы обладают одной характерной особенностью: все процессоры имеют прямой доступ к общей памяти. Мультипроцессорные системы шинной архитектуры состоят из некоторого количества процессоров подсоединенных к общей шине а через нее к модулям памяти. Простейшая конфигурация содержит плату с шиной или материнскую плату в которую вставляются процессоры и модули памяти. Поскольку используется единая память когда процессор А записывает слово в память а процессор В микросекундой позже считывает слово из...
20425. Компоненты NET 231.5 KB
  Использовать методы службы NET Romoting . Однако WCF содержит и другой тип сериализатора NetDataContractSerializer который является полной копией стандартного сериализатора однако помимо всего прочего он добавляет полное имя типа в сериализованный поток байтов. Хостинг IIS Internet Information Server WPF Приложения WPF строятся на основе языка XAML и языка реализации логики C.