411

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

Курсовая

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

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

Русский

2012-11-14

417.5 KB

124 чел.

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

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

  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)

       {

       }

   }

}


 

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

23825. Графічні методи 53 KB
  Створив додаток екранна форма якого містить три об'єкти: командна кнопка з ім'ям ПУСК і два графічних вікна з іменами Picturel і Picture2. Вікно робочого додатка Програмний код для цього додатка: Private Sub Command1_Click Picture1.Line 0 03015 2935 65280 BF Picture2.Scale 0 1010 0 Picture2.
23826. Процедури та функції 80 KB
  Caption = InputBox Введіть значення інформаційного ресурсу країни C End Sub Function nA B C As Integer Picture1.Scale 0 1010 0 Picture1.1 Picture1.Print A Picture1.
23827. Програмування повторень 62 KB
  Виконання завдань: Створив додаток який обчислює середнє значення ВВП країни за nроків.Caption a = 0 b = 0 For n = 1 To n a = InputBox Введіть розмір ВВП b = b a Next Label2.Caption = Strb n 1 End Sub Створив додаток який визначає кількість країн ВВП яких перевершує заданий рівень. Назви країн та ВВП вводяться в діалоговому вікні.
23828. Алгоритми, алгоритмізація 90 KB
  Виконання роботи Словесні форми алгоритмів Щоб розвязати квадратне рівняння потрібно: отримати коефіцієнти аbс; якщо а=0 b=0 і с=0 то розвязок може набути будьяких значень; якщо а=0 b=0 і с не дорівнює нулю тоді розвязків немає; якщо а=0 а коефіцієнти b та с не дорівнюють нулю тоді розвязок єдиний і дорівнює х= с b. Якщо коефіцієнт а не дорівнює 0 тоді слід обчислити дискримінант D=b24ac якщо отриманий результат менший нуля то рівняння матиме комплексні корені якщо більше нуля то знаходимо корені рівняння за формулою: ...
23829. Дані та змінні 367.5 KB
  Спроектував додаток Обмін значеннями таким чином щоб після запуску програми на виконання поля на зазначеній формі розміщуються відповідно до своїх написів. Програмний код: Зовнішній вигляд програми до і після завершення виконання : 2. Спроектував додаток який реалізує: зміну положення командної кнопки на екранній формі після активізації командної кнопки; зміну кольору командної кнопки на екранній формі після активізації командної кнопки; зміну розміру командної кнопки на екранній формі після активізації...
23830. Форматування абзаців тексту 974 KB
  Атрибут ALIGN також можна використати з багатьма іншими дескрипторами HTML для вирівнювання зображень вмісту таблиць і інших елементів сторінки. Щоб полегшити їм перегляд можна розбити документ на логічні розділи кожний з яких буде присвячений одній темі. Найкраще використати заголовки вважаючи їх елементами структури документа У заголовках можна використати атрибут ALIGN як і в дескрипторі P .
23831. Форматування за допомогою таблиць 37 KB
  Вихідний код сторінки: html head title Країни Індокитаю title head body p align= center ; font size= 6 Країни Індокитаю font p div align= center table border= 1 width= 459 height= 216 tr td height= 40 width= 97 rowspan= 2 h3 align= center Країна h3 td td height= 24 width= 347 colspan= 2 h4 Характеристика країни h4 td tr tr td height= 24 width= 169 h5 align= center Населення h5 td td height= 24 width= 172 h5 align= center Площа h5 td tr tr td height= 36 width= 97 align= left valign= top font...
23832. Використання фреймів 34.5 KB
  Вихідний код сторінки: HTML HEAD TITLE FRAMES TITLE HEAD FRAMESET COLS=2575 FRAMESET ROWS=3070 FRAME SRC= zmist.html FRAME SRC= cast.html FRAMESET FRAMESET ROWS=5050 FRAME SRC= inflist.html FRAME SRC= empty.
23833. Використання каскадних листів стилів 29.5 KB
  Виконання завдань: Створити три гіпертекстових сторінки з наступними характеристиками: Для першої сторінки: визначити стиль для документу фон блакитний; визначити стиль для заголовку шрифт Arial колір червоний вирівнювання за центром сторінки; визначити стиль для абзацу шрифт Sans Serif курсив. Для другої сторінки: визначити стиль для заголовку шрифт Times New Roman розмір 14 пунктів колір зелений; визначити стиль для абзацу шрифт Courier напівжирний. Для третьої сторінки розбитої на два розділи: застосувати стиль 1ої...