411

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

Курсовая

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

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

Русский

2012-11-14

417.5 KB

117 чел.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

  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)

       {

       }

   }

}


 

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

49170. Применение просвечивающего электронного микроскопа 895.5 KB
  Конструкция просвечивающего электронного микроскопа. Применение просвечивающего электронного микроскопа. Во-вторых существенное повышение до 1 Å и менее разрешающей способности электронных микроскопов что сделало их конкурентоспособными с автоионными микроскопами в получении прямых изображений кристаллической решетки. Сегодня трудно себе представить биологическую медицинскую физическую металлографическую химическую лаборатории без оптического микроскопа: исследуя капельки крови и срез ткани медики составляют заключение о состоянии...
49172. Система горячего водоснабжения, центральный тепловой пункт (ЦТП) и тепловые сети от ЦТП до присоединенных зданий 249 KB
  В ЦТП должна быть предусмотрена противокоррозийная и противонакипная обработка воды согласно СНиП Температура горячей воды должна быть: в местах водоразбора 55С на выходе из ЦТП 6065С. Определение температуры воды в подающей трубе теплосети в точке излома повышенного графика. Максимальный секундный расход воды на расчетном участке сети л с при гидравлическом расчете теплопроводов системы горячего водоснабжения определяется по формуле...
49173. Краниальная остеопатия 6.2 MB
  На протяжении десяти лет он пытался избавиться от этой идеи, но не смог, и решил доказать ее ошибочность. Следующие двадцать лет он изучал кости черепа. Учебники предлагали скудную информацию. Но чем глубже он вникал в проблему, тем логичнее казалось его первоначальное предположение. Сатерлэнд поставил много экспериментов на самом себе, производил и выправлял дефекты на собственном черепе при помощи оригинальных механических приспособлений.
49176. Расчёт структуры осесимметричных стационарных электромагнитных полей 291.5 KB
  Решение проводится в цилиндрических координатах связанных с центром цилиндра r радиусвектор точки наблюдения ось z направлена вдоль приложенного электрического поля рисунок 1. Если совместить ось z цилиндрической системы координат с осью цилиндра перпендикулярной E0 то потенциал поля не будет зависеть от координаты z и уравнение Лапласа запишется в виде ∆φ= 1.11 Величину служащую для описания...
49177. Комплексная система защиты информации на предприятии. Методические указания 204.5 KB
  Организация и технология защиты информации профиль подготовки: Специалист по защите информации. Организация и технология защиты информации; учебными планами по специальностям; общими указаниями по организации и методике проведения курсового проектирования в вузах; положением о курсовых работах НОО ВПО НП ТИЭИ. Данные методические указания предназначены для студентов 5го курса для выполнении...
49178. Я и физика 21.86 KB
  Слово энергия произносят все кому не лень но редко кто хотя бы немного разбирается в энергетике – науке об энергии. Энергетика на самом деле не является наукой об энергии она скорее отрасль производства но все равно именно она увлекла меня настолько что я уверена в том что мое будущее будет связано именно с этой отраслью физики. Конечно традиционные энергетические ресурсы – это хорошо и было бы кощунственно их не использовать но меня также привлекают и альтернативные источники энергии. В недалеком будущем когда в мире постепенно...