Міністерство освіти та науки України
Національний авіаційний університет
Курсова робота
З дисципліни «Об’єктно-орієнтоване програмування»
На тему «Система замовлень страв у ресторані (C#)»
Київ 2012
Зміст
Система замовляння страв в ресторані
Спрощені вимоги до програмного забезпечення
Функціональні вимоги:
Управління інгредієнтами
Можливість додавати інгредієнт
Можливість видаляти інгредієнт (у випадку що він не входить до складу якоїсь страви)
Можливість змінити інгредієнт
Можливість переглянути перелік всіх інгредієнтів
Управління стравами
Можливість додавати страву
Можливість видаляти страву
Можливість змінювати страву
Можливість додавати та видаляти інгредієнти страви
Можливість змінювати назву страви
Можливість змінювати ціну страви
Можливість змінювати час приготування страви
Можливість переглянути інформацію про конкретну страву
Управління замовленнями
Можливість додати замовлення
Можливість видалити замовлення
Можливість змінити замовлення
змінити кількість страв
змінити загальну вартість
змінити номер столика даного замовлення
Можливість переглянути інформацію про замовлення
Нефункціональні вимоги:
Вимоги до зовнішнього інтерфейсу
Зовнішній інтерфейс користувача має бути командним
Застосування має бути консольним
Дані повинні зберігатись у файлах після виходу з програми.
Система має забезпечити правильність введених даних
Логічна структура даних
Інформаційний об'єкт страва
Елемент даних
Тип
Опис
Коментар
Назва
Текст
Назва страви
-
Інгредієнти
Структура даних типу лист
Перелік інгредієнтів конкретної страви
-
Ціна
Дробове число
Ціна конкретної страви
-
Час
Дробове число
Час приготування конкретної страви
-
Інформаційний об'єкт замовлення
Елемент даних
Тип
Опис
Коментар
Страви
Структура даних типу лист
Перелік страв у конкретному
-
Загальна вартість
Ціле число
Загальна вартість конкретного замовлення
-
Номер столика
Ціле число
Номер столика, на який повинні принести конкретне замовлення
-
Особливості роботи
У головному меню користувачу пропонується ввести команду серед команд запропонованного списку. Команда зчитується за допомогою змінної string. Далі введена команда передається у файл основної програми й там виконується перевірка на вихід з програми. Після цього перевіряється введена команда і виводиться пункт меню, обраної команди. Якщо введена команда не співпадає з жодної з листу доступних , то буде виведено повідомлення про помилку та програма запропонує ввести команду ще раз.
У програмі використовується шість основних класів .
Клас «Інридієнта»
Перший це клас «Інгредієнт». Цей клас містить у собі інформацію про інгредієнт. Складові класу «Інгредієнт» - це поле яке містить лише поле назви інгредієнта та методи для роботи с класом такі як запис в файл інформації про інгредієнт, редагування назви інгредієнта , виведення назви інгредієнта на екран, конструктор за умовчанням та конструктор з параметрами
Тіло класу «Інгредієнт»
class Products
{
private string name;
public void correct_name(string _name)
public Products() { }
public Products(string _name)
private bool pr_TrueFalse=true;
public bool get_pr_TrueFalse()
public void show_product()
}
Методи классу «Інгридієнт»
Метод відображення назви інгридієнта, без параметрів. Метод просто виводить на екран інформацію що є в об’єкті за допомогою Console.WriteLine();
Запис до файлу здійснюється через конструктор класу і деструктор. За допомогою серіалізації здійснюємо запис до файлу у конструкторі, а у деструкторізвільняємо потік.
public Products()
{
try
{
IFormatter formatter2 = new BinaryFormatter();
Stream stream2 = new FileStream("MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
Products obj2 = (Products)formatter2.Deserialize(stream2);
this.name = obj2.name;
this.pr_TrueFalse = obj2.pr_TrueFalse;
stream2.Close();
}
catch { }
}
~Products()
{
try
{
Products obj1 = new Products();
IFormatter formatter1 = new BinaryFormatter();
Stream stream1 = new FileStream("MyFile.bin",
FileMode.Create, FileAccess.Write, FileShare.None);
formatter1.Serialize(stream1, obj1);
stream1.Close();
}
catch { }
}
Метод введення назви інгредієнта: Користувач вводить через консоль назву інгредієнта, яка запам’ятовується старої і надалі використовується.
Метод введення назви інгредієнта: Користувач вводить через консоль назву інгредієнта, яка запам’ятовується старої і надалі використовується.
Метод умови інгредієнту: Умові інгредієнта на початку надається значення true, але якщо інгредієнт буде використовуватись у певній страві, то метод умови, яка надає умови false і надалі інгредієнт не можна видалити.
Клас «Список інгредієнтів»
Другий це клас «Список інгредієнтів». Цей клас містить у собі інформацію про інгредієнти та методі роботи зі списком інгредієнтів.
Поле класу – список інгредієнтів типу List.
Методи цього класу: метод занесення інгредієнту до списку, метод видалення інгредієнту зі списку, метод розрахунку кількості інгредієнтів у списку, метод зміни назви інгредієнту списку,метод виведення на екран списку інгредієнтів, метод редагування списку інгредієнтів.
Тіло класу «Список інгредієнтів :
class ingridients_list
{
private List<Products> products_list = new List<Products>();
public ingridients_list()
~ingridients_list()
public void add_product(Products temp)
public void del_product(int n)
public Products get_prod(int n)
public void change_name(int n, string temp_s)
public int get_count()
public void show_all_products()
public void change(int n, int c, int temp_d, Products temp_i, string temp_s)
}
Методи класу «Список інгредієнтів»
Метод додає інгредієнт до списку через стандартний метод колекції Add.
public void add_product(Products temp)
{
products_list.Add(temp);
}
Метод видаляє інгредієнт зі списку через стандартний метод колекції Remove. Для того щоб видалити користувач вводить номер інгредієнту зі списку. Програма декрементує введене значення(тому що нумерація списку у програмі починається із 0, а не з 1, як показано користувачу); далі програма перевіряє на умову входження інгредієнту до страви і якщо інгредієнт входить до певної страви, то видається повідомлення, що інгредієнт використовується і його не можна видалити.
public void del_product(int n)
{
n--;
if (products_list[n].get_pr_TrueFalse())
{
products_list.Remove(products_list[n]);
}
else
{
Console.WriteLine("Этот ингридиент используется");
}
}
Метод запису документу в файл працює так же як і аналогічний метод класу «Інгредієнт».
Метод виведення списку інгредієнтів реалізується через цикл, метод класу «Інгредієнт» та виводить інформацію на екран за допомогою System.Console.Write()
public void show_all_products()
{
for (int k = 0; k < products_list.Count; k++)
{
System.Console.Write("[" + System.Convert.ToString(k + 1) + "]");
products_list[k].show_product();
}
System.Console.WriteLine();
}
Метод зміни назви інгредієнту реалізуються через метод класу «Інгредієнт». Користувач вводить номер інгредієнту, назву якого він хочу змінити та нову назву. Введений номер декрементується через властивості списку.
public void change_name(int n, string temp_s)
{
n--;
products_list[n].correct_name(temp_s);
}
Метод розрахунку кількості інгредієнтів у списку реалізується через стандартний метод колекції Count.
public int get_count()
{
return products_list.Count;
}
Метод редагування списку інгредієнтів функціоную на основі вищеописанних методів та оператору switch – case. Користувач обирає, що саме він хоче змінити у списку(видалити, додати, редагувати назву елементу чи повернутись до попередньго меню), вводить необхідну команду серед запропонованих на консолі (у разі некоректного вводу програма просить ввести команду серед запропонованих).
public void change(int n, int c, int temp_d, Products temp_i, string temp_s)
{
n--;
switch (c)
{
case 1:
products_list.Add(temp_i);
break;
case 2:
{
n--;
if (products_list[n].get_pr_TrueFalse())
{
products_list.Remove(products_list[n]);
}
else
{
Console.WriteLine("Этот ингридиент используется");
}
}
break;
case 3:
products_list[n].correct_name(temp_s);
break;
} } }
Клас «Страва»
Клас «Страва» містить у собі інформацію про страву, а саме такі поля: назва страви ціна страви; час приготування страви та список інгредієнтів; які входять до страви; метод запису страви до файлу; метод введення інгредієнту до списку інгредієнтів, що використовуються у страві, метод видалення інгредієнтів з цього списку; метод підрахунку кількості інгредієнтів, що входять до страви; метод виведення списку інгредієнтів, що входять до страви; метод виведення інформації про страву на екран; метод зміни назви страви; метод зміни ціни на страву; метод зміни часу приготування страви, метод виведення на екран тільки назви страви.
Тіло класу «Страва»:
class strava
{
private string name;
double cost, time;
private List<Products> ingrediants = new List<Products>();
public strava()
~strava()
public void show_dish(int nw)
public void add_ingr(Products tmp)
public void del_ingr(Products tmp)
public strava(string _name, double _cost, double _time):this()
public int get_count_ingr()
public void strava_ingr_show()
public void to_correct_name(string temp)
public void to_correct_cost(double temp)
public void to_correct_time(double temp)
public void print()
public void show_dish()
}
Методи класу «Страва»
У класі «страва» такі методи: метод запису страви до файлу; метод введення інгредієнту до списку інгредієнтів, що використовуються у страві; метод видалення інгредієнтів з цього списку; метод підрахунку кількості інгредієнтів, що входять до страви; метод виведення списку інгредієнтів, що входять до страви; метод виведення інформації про страву на екран; метод зміни назви страви; метод зміни ціни на страву; метод зміни часу приготування страви, метод виведення на екран тільки назви страви.
Метод запису до файлу реалізується аналогічно із методом запису до файлу у класі «Інгредієнт».Методи введення до списку інгредієнтів, що використовуються у страві, їх підрахунок та видалення з нього виконуються через стандартні операції колекції Add та Remove, Count.
public void add_ingr(Products tmp)
{
ingrediants.Add(tmp);
}
public void del_ingr(Products tmp)
{
ingrediants.Remove(tmp);
}
public int get_count_ingr()
{
return ingrediants.Count();
}
Метод виведення інформації про страву виконується через цикл та оператори System.Console.Write.
public void print()
{
System.Console.WriteLine("Название блюда: " + name);
System.Console.WriteLine("Стоимость: " + cost);
System.Console.WriteLine("Время приготовления: " + time);
System.Console.WriteLine("Ингридиенты: ");
for (int k = 0; k < ingrediants.Count; k++)
{
System.Console.Write("[" + (k + 1) + "]");
ingrediants[k].show_product();
}
}
Аналогічно виводиться список інгредієнтів, що входят до страви.
public void strava_ingr_show()
{
for (int i = 0; i <= ingrediants.Count; i++)
{
System.Console.Write("[" + System.Convert.ToString(i + 1) + "] ");
System.Console.Write(ingrediants[i]);
}
if (ingrediants.Count == 0) System.Console.WriteLine("Ингридиенты отсутсвуют");
}
Метод виведення назви страви здійснюється через оператор System.Console.WriteLine.
Метод зміни назви, ціни, та часу приготування страви здійснюється аналогічно із зміною назви інгредієнта у класі «Інгредієнт».
Клас «Список страв»
Четвертий клас - «Список страв». Цей клас містить у собі інформацію про страви та методі роботи зі списком страв.
Поле класу – список страв типу List.
Методи цього класу: метод занесення страви до списку, метод видалення страви зі списку, метод розрахунку кількості страв у списку, метод зміни назви страви списку ,метод виведення на екран списку страв, метод редагування списку страв.
Тіло класу «Список страв»:
class dish
{
private List<strava> dish_list = new List<strava>();
public dish()
~dish()
public strava get_dish(int nt)
public void add_dish(strava temp)
public void change(int n, int c, int yt, string temp_s, int temp_i, Products temp)
public void remove(int n)
public int get_count()
public void view(int n)
public void show_all_dish()
}
Методи класу «Список страв»
Метод додає страву до списку через стандартну операцію колекції Add.
public void add_dish(strava temp)
{
dish_list.Add(temp);
}
Метод видаляє страву зі списку через стандартний метод колекції Remove.
public void remove(int n)
{
dish_list.Remove(dish_list[n]);
System.Console.WriteLine("This dish is not in base");
}
Метод запису документу в файл працює так же як і аналогічні методи попередніх класів.
Метод виведення списку страв реалізується через цикл, метод класу «Інгредієнт» та виводить інформацію на екран за допомогою System.Console.Write()
public void show_all_dish()
{
for (int k = 0; k < dish_list.Count; k++)
{
System.Console.Write("[" + System.Convert.ToString(k + 1) + "]");
dish_list[k].print();
}
System.Console.WriteLine();
}
Метод виводу інформації про страву через номер, реалізується методом описаним в класі «Страва». Номер введений користувачем декрементується.
public void view(int n)
{
n--;
dish_list[n].print();
}
Метод розрахунку кількості страв у списку реалізується через стандартний метод колекції Count.
public int get_count()
{
return dish_list.Count;
}
Метод редагування списку страв функціоную на основі вищеописанних методів данного классу та оператору switch – case. По суті, він реалізован так само, як аналогічний метод у классі «Список інгредієнтів». Так само, користувач обирає, що саме він хоче змінити у списку(видалити, додати, редагувати назву елементу чи повернутись до попередньго меню), вводить необхідну команду серед запропонованих на консолі (у разі некоректного вводу програма просить ввести команду серед запропонованих).
public void change(int n, int c, int yt, string temp_s, int temp_i, Products temp)
{
n--;
switch (c)
{
case 1:
dish_list[n].to_correct_name(temp_s);
break;
case 2:
dish_list[n].to_correct_cost(Convert.ToDouble(temp_s));
break;
case 3:
dish_list[n].to_correct_time(Convert.ToDouble(temp_s));
break;
case 4:
if (yt == 1)
dish_list[n].add_ingr(temp);
if (yt == 2)
{
// dish_list[n].strava_ingr_show();
dish_list[n].del_ingr(temp);
}
break;
default:
System.Console.WriteLine("error");
break;
}
}
Клас «Замовлення»
Клас «Страва» містить у собі поля: номер столику, на який записано замовлення; ціна замовлення; список страв замовлення; метод запису замовлення до файлу; метод введення страви до списку страв, що замовилися; метод видалення страви з цього списку; метод підрахунку кількості страв, що входять до замовлення; метод виведення списку страв, що входять до замовлення; метод виведення інформації про замовлення на екран; метод зміни ціни на страву; метод зміни столику на який зареєстровано замовлення.
Тіло класу «Замовлення»:
class Wish
{
int table_num;
double w_cost;
private List<strava> wish_dish = new List<strava>();
public Wish()
~Wish()
public Wish(int _table_num, double _w_cost):this()
public void add_dish(strava tmp)
public void del_dish(strava tmp)
public void to_correct_tablenumber(int temp)
public void to_correct_dishcost(double temp)
public void print()
}
Методи класу «замовлення»
У класі «страва» такі методи: метод запису замовлення до файлу; метод введення страви до списку страв, що замовилися; метод видалення страви з цього списку; метод виведення списку страв, що входять до замовлення; метод виведення інформації про замовлення на екран; метод зміни ціни на страву; метод зміни столику на який зареєстровано замовлення.
Метод запису до файлу реалізується аналогічно із методом запису до аналогічних методів описаних у попередніх класах.Методи введення до списку страв, що замовились, та видалення страв з замовлення виконуються через стандартні операції колекції Add та Remove.
public void add_dish(strava tmp)
{
wish_dish.Add(tmp);
}
public void del_dish(strava tmp)
{
wish_dish.Remove(tmp);
}
Метод виведення інформації про замовлення виконується через оператори System.Console.Write та цикл.
public void print()
{
System.Console.WriteLine("Table №"+table_num);
System.Console.WriteLine("How much cost " + w_cost);
System.Console.WriteLine("How much dishes: " );
for (int ui = 0; ui < wish_dish.Count; ui++)
{
System.Console.Write("["+(ui+1)+"]");
wish_dish[ui].show_dish();
}
System.Console.WriteLine();
}
Метод зміни номеру столику, ціни замовлення здійснюється аналогічно до попередніх классів («Індгредієнт», «Страва»).
Клас «Список замовлень»
Шостий клас - «Список замовлень». Цей клас містить у собі інформацію про замовлення та методі роботи зі списком замовлень.
Поле класу – список замовлень типу List.
Методи цього класу: метод занесення замовлення до списку; метод видалення замовлення зі списку; метод розрахунку кількості загальної кількості замовлень; метод зміни замовлення; метод виведення на екран списку замовлень; метод виведення інформації про окреме замовлення.
Тіло класу «Список страв»:
class Wish_base
{
private List<Wish> base_wish = new List<Wish>();
public Wish_base()
~Wish_base()
public void Add_wish(Wish temp)
public void change(int n, int c, int yt, double temp_d, int temp_i, strava temp)
public void remove(int n)
public void view(int n)
public void show_all_wishes()
public int get_count()
public void print(int n)
}
Методи класу «Список страв»
Методи додавання, підрахунок та видалення замовлення зі списку через стандартні операції колекції Add, Remove, Count.
public void Add_wish(Wish temp)
{
base_wish.Add(temp);
}
public void remove(int n)
{
n--;
base_wish.Remove(base_wish[n]);
}
public int get_count()
{
return base_wish.Count;
}
Метод запису документу в файл працює так же як і аналогічні методи попередніх класів.
Метод виведення списку замовлень реалізується через цикл, метод класу «Інгредієнт» та виводить інформацію на екран за допомогою System.Console.Write()
public void show_all_wishes()
{
for (int k = 0; k < base_wish.Count; k++)
{
System.Console.Write("[" + System.Convert.ToString(k + 1) + "] ");
base_wish[k].print();
}
}
Метод виводу інформації про замовлення через номер, реалізується методом описаним в класі «Замовлення». Номер введений користувачем декрементується.
public void print(int n)
{
n--;
base_wish[n].print();
}
Метод редагування списку замовлення функціонує на основі вищеописанних методів данного классу та оператору switch – case. По суті, він реалізован так само, як аналогічний метод у классі «Список інгредієнтів», та «Список страв». Так само, користувач обирає, що саме він хоче змінити у списку(видалити, додати, редагувати назву елементу чи повернутись до попередньго меню), вводить необхідну команду серед запропонованих на консолі (у разі некоректного вводу програма просить ввести команду серед запропонованих).
public void change(int n, int c, int yt, double temp_d, int temp_i, strava temp)
{
n--;
switch (c)
{
case 1:
base_wish[n].to_correct_tablenumber(temp_i);
break;
case 2:
base_wish[n].to_correct_dishcost(temp_d);
break;
case 3:
if (yt == 1)
{
base_wish[n].add_dish(temp);
}
if (yt == 2)
{
base_wish[n].del_dish(temp);
}
break;
}
}
Команди та меню
1. Основне меню
При введенні команди «0» - ви вийдете з програми;
При введенні команди «1» - ви перейдете до меню управління інгредієнтами;
При введенні команди «2» - ви перейдете до меню управління стравами;
При введенні команди «3» - ви перейдете до меню управління замовленнями;
Меню управління інгредієнтамиЯкщо ж ви вибрали команду «Управление ингредиентами», то наступне меню буде таким:
При введенні команди «0» - ви повернетесь до основного меню №1;
При введенні команди «1» - ви перейдете до додавання інгредієнта;
При введенні команди «2» - ви перейдете до видалення інгредієнта і вам виведеться на консоль список інгредієнтів, щоб ви обрали номер інгредієнту, який ви хочете видалити;
При введенні команди «3» - ви перейдете до перегляду списку інгредієнтів. Вам виведеться на консоль список інгредієнтів;
Меню управління стравами
Якщо ж ви вибрали команду «Управление блюдами», то наступне меню буде таким:
При введенні команди «0» - ви повернетесь до основного меню №1;
При введенні команди «1» - ви перейдете до додавання страви;
При введенні команди «2» - ви перейдете до видалення страви і вам виведеться на консоль список страв та вся інформація про ці страви, щоб ви обрали номер інгредієнту, який ви хочете видалити. Вам виведеться таке меню команд;
При введенні команди «4» - ви перейдете до перегляду списку страв і інформації про них. Вам виведеться на консоль список інгредієнтів;
При введенні команди «3» - ви перейдете до зміни страви і вам виведеться на консоль список страв та вся інформація про ці страви, щоб ви обрали номер інгредієнту, який ви хочете змінити. Вам виведеться таке меню команд
Якщо оберете:
«0» - перейдете до попереднього меню;
«1» - перейдете до зміни назви страви;
«2» - перейдете до зміни ціни страви;
«3» - перейдете до зміни часу приготування страви;
«4» - перейдете до зміни списку інгредієнтів страви.
При обранні «4» пункту Вам виведеться на консоль таке меню
При обранні:
«0» - перейдете до попереднього меню;
«1» - перейдете до додавання інгредієнта до страви. Вам виведеться список інгредієнтів, де ви маєте вибрати номер інгредієнту, який ви хочете додати;
«2» - перейдете до видалення інгредієнту. Вам виведеться вся інформація про страву із списком інгредієнтів, де серед списку інгредієнтів Вам треба обрати номер того інгредієнту, який ви хочете видалити;
Меню управління замовленнями
Якщо в основному меню ви вибрали пункт №3, то Ви перейдете до меню управління замовленнями і Вам виведеться таке меню команд
При введенні команди «0» - ви повернетесь до основного меню №1;
При введенні команди «1» - ви перейдете до додавання замовлення;
При введенні команди «2» - ви перейдете до видалення замовлення. Вам виведеться на консоль список замовлень та інформація про них, Вам необхідно буде ввести номер замовлення яке Ви бажаєте видалити;
При введенні команди «4» - Вам виведеться на консоль список замовлень та інформація про них.При введенні команди «3» - ви перейдете до зміни замовлення і наступне меню яке вам виведеться буде зображено таким чином замовлення. Вам виведеться на консоль список замовлень та інформація про них, Вам необхідно буде ввести номер замовлення яке Ви бажаєте змінити.
При обранні:«0» - перейдете до попереднього меню;
«1» - перейдете до зміни номеру столика замовлення;
«2» - перейдете до зміни вартості замовлення;
«3» - перейдете до зміни замовлених страв. На консолі виведеться список замовлень. Оберіть номер замовлення, яке бажаєте змінити. Після обрання номеру замовлення Вам виведеться таке меню команд
Якщо ви оберете:
«0» - то перейдете до попереднього меню;
«1» - то перейдете до списку всіх страв. Введіть номер страви яку хочете додати і вона буде додана ;
«2» - то перейдете до детальної інформації про замовлення і Вам виведеться список страв які є у замовленні. Введіть номер страви, яку бажаєте видалити;
Діаграма Об’єктів
UML – Діаграма класів
Використана література
Герберт Шилдт - Полный справочник по С SHARP.pdf