43395

Разработка информационно-поискового справочника «Шеф-повар»

Курсовая

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

В реальных задачах информация, которую требуется обрабатывать, может иметь достаточно сложную структуру. Для ее адекватного представления используются типы данных, построенные на основе базовых типов данных, массивов и указателей. Языки высокого уровня позволяют программисту определять свои типы данных и правила работы с ними, т.е. типы, определяемые пользователем. В языке Си к ним относятся структуры, объединения и перечисления. Рассмотрим их более подробно.

Русский

2013-11-04

1.14 MB

18 чел.

Р Е Ф Е Р А Т

 

 

Курсовая работа : 31 с., 20 рис., 5 источников, 3 прил.

 

ПРОГРАММИРОВАНИЕ, С++ Builder 6.0, БАЗА ДАННЫХ, ФАЙЛ, СТРУКТУРА,  МАССИВ

 

Объектом и предметом исследования является среда программирования С++ Builder 6.0. 

Цель работы -  разработка информационно-поискового справочника «Шеф-повар».

При выполнении работы использованы методы работы со структурами и массивами. 

В  процессе  работы  проведены  следующие  исследования  и разработки  использование средств среды программирования С++ Builder 6.0 для обработки массивов структур и массивов.

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


Содержание

[1]
Содержание

[2]
Введение

[3]
Обзор литературы

[3.1] Структуры

[3.2] Декларация структурного типа данных

[3.3] Создание структурных переменных

[3.4] Обращение к полям структур

[3.5] Массивы структур

[3.6] Размещение структурных переменных в памяти

[4]
Описание программы

[5]
Описание применения программы.

[6]
Тестирование программы

[7]
Заключение

[8]
Список литературы

[9]
Приложение 1. Блок-схема программы

[10]
Приложение 2. Листинг программы

[11]
Приложение 3. Результаты выполнения программы


Введение

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

Программа выполнена на языке С в среде программирования Borland C++ Builder 6 в виде консольного приложения.

Программа может работать на любых x86-совместимых ЭВМ. Для работы с программой необходимо наличие клавиатуры.

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

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


Обзор литературы

В реальных задачах информация, которую требуется обрабатывать, может иметь достаточно сложную структуру. Для ее адекватного представления используются типы данных, построенные на основе базовых типов данных, массивов и указателей. Языки высокого уровня позволяют программисту определять свои типы данных и правила работы с ними, т.е. типы, определяемые пользователем. В языке Си к ним относятся структуры, объединения и перечисления. Рассмотрим их более подробно.  

Структуры

Структура – это составной объект языка Си, представляющий собой совокупность логически связанных данных различных типов, объединенных в группу под одним идентификатором. Данные, входящие в эту группу, называют полями.

Термин «структура» в языке Си соответствует двум разным по смыслу понятиям:

– структура – это обозначение участка оперативной памяти, где располагаются конкретные значения данных; в дальнейшем – это структурная переменная, поля которой располагаются в смежных областях ОП;

– структура – это правила формирования структурной переменной, которыми руководствуется компилятор при выделении ей места в ОП и организации доступа к ее полям.

Определение объектов типа структуры производится за два шага:

– декларация структурного типа данных, не приводящая к выделению участка памяти;

– определение структурных переменных объявленного структурного типа с выделением для них памяти.

Декларация структурного типа данных

Структурный тип данных задается в виде шаблона, общий формат описания  которого следующий:

struct  ID структурного типа {

описание полей

};

Атрибут «ID структурного типа» является необязательным и может отсутствовать. Описание полей производится обычным способом: указываются типы переменных и их идентификаторы.

Пример определения структурного типа 

Необходимо создать шаблон, описывающий информацию о студенте: номер группы, Ф.И.О. и средний балл. Один из возможных вариантов:

struct Stud_type  {

char Number[10];       

char Fio[40];      

double S_b;       

};

Поля одного типа при описании можно объединять в одну группу:

struct Stud_type  {

char Number[10], Fio[40];      

double S_b;       

};

Размещение данного объекта типа Stud_type в ОП схематически будет выглядеть следующим образом:

Number

Fio

S_b

10 байт

40 байт

8 байт

Структурный тип данных удобно применять для групповой обработки логически связанных объектов. Параметрами таких операций являются адрес и размер структуры.

Примеры групповых операций:

– захват и освобождение памяти для объекта;

– запись и чтение данных, хранящихся на внешних носителях как физические и/или логические записи с известной структурой (при работе с файлами).

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

struct Stud_type  {

char *Number, *fio;      

double S_b;       

};

В данном случае, вводя строки Number и fio различной длины, размеры объектов будут также различны.

Создание структурных переменных

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

Способ 1. В любом месте программы для декларации структурных переменных, массивов, функций и т.д. используется объявленный в шаблоне структурный тип, например:

struct Stud_type  student;       – структурная переменная;

Stud_type  Stud[100];   – массив структур

Stud_type  *p_stud;     – указатель на структуру

Stud_type*  Fun(Stud_type);    – прототип функции с параметром структурного типа, возвращающей указатель на объект структурного типа.

Способ 2. В шаблоне структуры между закрывающейся фигурной скобкой и символом «;» указывают через запятые идентификаторы структурных данных.

Для нашего примера можно записать:

struct Stud_type  {

char Number[10], Fio[40];      

double S_b;       

} student, Stud[100], *p_stud;

Если дальше в программе не понадобится вводить новые данные объявленного структурного типа, идентификатор Stud_type можно не указывать.

При декларации структурных переменных возможна их одновременная инициализация, например:

struct Stud_type  {

char Number[10], Fio[40];      

double S_b;       

} student = {"123456", "Иванов И.И.", 6.53 };

или:

Stud_Type  stud1 = {"123456", "Иванов И.И." };

Если список инициализаций будет короче, то оставшиеся поля структурной переменной заполняются нулями.

Обращение к полям структур 

Обращение к полям структур производится путем создания составных имен, которые образуются двумя способами:

1) при помощи операции принадлежности (.) общий вид которой

ID_структуры . ID_поля

или

     (*указатель_структуры) . ID_поля

2) при помощи операции косвенной адресации (–>) в виде

указатель_структуры –> ID_поля

или

      (&ID_структуры) –> ID_поля

Если в программе созданы объекты объявленного ранее шаблона:

  Stud_Type  s1, *s2;

то к полям объекта s1 можно обратиться следующим образом:

s1. Number,   s1. Fio,   s1. S_b;

или     

(&s1) –> Number,  (&s1) –> Fio,  (&s1) –> S_b;

а к полям объекта, адрес которого s2:

s2 –> Number,   s2 –> Fio,   s2 –> S_b;

или   

(*s2) . Number,   (*s2) . Fio,   (*s2) . S_b;

Массивы структур

Структурный тип «struct ID_структуры», как правило, используют для декларации массивов, элементами которых являются структурные переменные. Это позволяет создавать программы, оперирующие с простейшими базами данных.

Например, массив структур, объявленного ранее типа:

struct Person spisok[100];  

причем ключевое слово struct можно не писать. Декларацию массива можно выполнить и в описании шаблона следующим образом:

struct Рerson {

       char fio[40];

       int day, month, year;

     }  spisok[100];

В данном случае обращение к полю, например, day элемента массива с индексом i может быть выполнено одним из следующих способов:

spisok[i].day=22;  *(spisok+i).day=22; (spisok+i)–>day=22;

Пример. Приведем часть программы, иллюстрирующей создание массива структур и передачу структурных данных в функции:

struct Spisok {

      char Fio[20];

      double S_Bal;

};

//  Описание прототипов функций пользователя

void Out(int, Spisok);

void In(int, Spisok *);

void main(void)  

{

Spisok Stud[50], *sved;

. . .

for(i=0;i<N;i++)

Vvod(i, &Stud[i]);

puts("\n Spisok Students");

for(i=0;i<N;i++)

Out(i+1, Stud[i]);

. . .

}

// Функция вывода на экран данных одного элемента структуры

void Out(int nom, Spisok dan)   {

printf("\n %3d – %20s  %4.2lf ",nom, dan.Fio, dan.S_Bal);   

}

// Функция ввода данных одного элемента структуры

void In (int nom, Spisok *sved)  {       

printf("\n Введите сведения %d : ", nom+1);

 fflush(stdin);

puts("\n ФИО      – ");      

gets(sved–>Fio);

puts("\n Средний балл   – ");      

scanf(“%lf”, &sved–>S_Bal);

}

Размещение структурных переменных в памяти

При анализе размеров структурных переменных иногда число байт, выделенных компилятором под структурную переменную, оказывается больше, чем сумма байт ее полей. Это связано с тем, что компилятор выделяет участок ОП для структурных переменных с учетом выравнивания границ, добавляя между полями пустые байты по следующим правилам:

– структурные переменные, являющиеся элементами массива, начинаются на границе слова, т.е. с четного адреса;

– любое поле структурной переменной начинается на границе слова, т.е. с четного адреса и имеет четное смещение по отношению к началу переменной;

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


Описание программы

 

 Можно выделить следующие процедуры будущей программы:

  •  добавление данных о продуктах;
  •  добавление данных о рецептах;
  •  просмотр всех рецептов;
  •  формирование заказа;
  •  привоз продуктов;

Рисунок 1. Схема взаимодействия функциональных частей

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


Главное меню будет содержать следующие пункты:

  •  добавление данных о продуктах;
  •  добавление данных о рецептах;
  •  просмотр всех рецептов;
  •  формирование заказа;
  •  привоз продуктов;
  •  выход.

Описание разработанных функций

Название

Назначение

AddProd

добавление данных о продуктах

AddRec

добавление данных о рецептах

PrintRec

просмотр всех рецептов

Menu

формирование заказа

EditProd

привоз продуктов


Описание применения программы.

Разработанная программа «Шеф-повар»   позволяет организовать:

  •  Формировать базу рецептур блюд: раскладка, рецепт приготовления;
  •  Формировать базу продуктов на складе: наименование, цена, количество;
  •  Формирование меню;
  •  Проверку достаточности товаров;
  •  Корректировку запасов.


Тестирование программы

Общий вид программы приведён на рисунке 1:

Рисунок 1 – Главное меню программы

1. Добавить продукт. Предоставляется возможность добавить в базу данных информацию о продукте, как показано на рис.2:

Рисунок 2 – Добавление продукта

2. Добавить рецепта. Предоставляется возможность добавить в базу данных информацию о новом блюде, при этом имеется возможность выбора любого продукта в рецепт из имеющихся на складе, как показано на
рис. 3.

Рисунок 3 – Добавление рецепта


4. Просмотр рецептов
. Список рецептов выводится на экран:

Рисунок 4 – Просмотр рецептов

5. Сформировать заказ. Происходит формирование заказа, подсчет общей стоимость заказа и проверка наличия продуктов на складе:

Рисунок 5 – Формирование заказа

При отсутствии необходимого количества ингредиентов на складе выводится соответствующее сообщение:

Рисунок 6 – Попытка формирования заказа

6. Привоз продуктов. Выводится список имеющихся продуктов на складе и предоставляется возможность изменить количество любого из продуктов (рис. 7).

 

Рисунок 8 – Привоз продуктов


Заключение

Разработана программа на языке программирования C для реализации поставленной в курсовом проекте. Разработаны алгоритмы подпрограмм, проверена работоспособность программы в целом. Как показало тестирование, программа работает корректно, поэтому поставленную задачу можно считать выполненной.


Список литературы

  1.  Шилдт, Герберт. С++ Базовый курс, 3-е издание. : Пер. с англ. – Алексей Жданов: СПб.: БХВ-Петербург, 2002. – 683 с. : ил.
  2.  Б. Страуструп. Язык программирования С++, 3-е изд пер. с англ. - М.: "Бином", СПб.: "Невский диалект", 1999. - 991 с., ил.
  3.  Т.А. Павловская. С/C++. Программирование на языке высокого уровня. – СПб.: Питер,2007. – 461 с.: ил.
  4.  Красиков И.В., Красикова И.Е. C++. Просто как дважды два - 2 изд. – ЭКСМО,  2007. -  336 с.: ил.
  5.  Т.А. Павловская, Ю.А. Щупак. С/C++. Структурное программирование: Практикум. – СПб.: Питер, 2007. – 239 с.: ил.


Приложение 1. Блок-схема программы

Рисунок 1 – Основное меню программы

Рисунок 2 – Добавление продукта

Рисунок 3 – Добавление рецепта

Рисунок 4 – Просмотр рецептов

Рисунок 5 – Формирование меню


Приложение 2. Листинг программы

#include <conio.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>

#include <vcl.h>

#pragma hdrstop

//---------------------------------------------------------------------------

typedef struct TProd   //структура продуктов

{

  char naim[20];

  int cena;

  double kol;

} Prod;

typedef struct TRec   //структура рецептов

{

  char nazv[20];

  int prods;

  int prod[100];

  double kol[100];

  char rec[100];

  int cena;

} Rec;

Prod prod[100];      //массив продуктов

int nprod=0;        //число продуктов

Rec rec[100];    //массив рецептов

int nrec=0;       //число рецептов

void AddProd()

{

 printf("Naimenovanie: "); scanf("%s",prod[nprod].naim);

 printf("Cena: ");scanf("%d",&prod[nprod].cena);

 printf("Koli4estvo: ");scanf("%lf",&prod[nprod].kol);

 nprod++;

 printf("Produkt dobavlen\n");getch();

}

void AddRec()

{

 int i, c;

 double kol;

 printf("Nazvanie bluda: "); scanf("%s",rec[nrec].nazv);

 rec[nrec].prods=0;

 rec[nrec].cena=0;

 printf("Spisok ingridientov:\n");

 printf("%3s%20s%15s%10s\n","N","Naimenovanie","Na sklade","Cena");

 for (i=0; i<nprod; i++)

    printf("%3d%20s%15.1lf%10d\n",i+1,prod[i].naim,prod[i].kol,prod[i].cena);

 while (1)

 {

   printf("Vibirite produkt (0-vihod): ");

   scanf("%d",&c);

   if ((c<1) || (c>nprod))

      break;

   else

   {

      c--;

      rec[nrec].prod[rec[nrec].prods]=c;

      printf("Trebuemoe koli4estvo: ");

      scanf("%lf",&rec[nrec].kol[rec[nrec].prods]);

      rec[nrec].cena+=rec[nrec].kol[rec[nrec].prods]*prod[c].cena;

      rec[nrec].prods++;

      printf("Produkt dobavlen v recept\n");

   }

 }

 printf("Recept prigonovlenija: ");

 fflush(stdin);

 gets(rec[nrec].rec);

 nrec++;

}

void PrintRec()

{

 int i,j;

 printf("Spisok receptov:\n");

 for(i=0;i<nrec;i++)

 {

   printf("\n%d. %s\n",i+1,rec[i].nazv);

   printf("Sostav:\n");

   for (j=0; j<rec[i].prods; j++)

     printf("%s, %.1lf\n",prod[rec[i].prod[j]].naim,rec[i].kol[j]);

   printf("Recept prigonovlenija: %s\n",rec[i].rec);

 }

 getch();

}

void Menu()

{

 int i,j,c,kol;

 printf("Spisok blud:\n");

 printf("%3s%20s%15s\n","N","Nazvanie","Stoimost`");

 for(i=0;i<nrec;i++)

   printf("%3d%20s%15.1d\n",i+1,rec[i].nazv,rec[i].cena);

 printf("Vibirite bludo: ");

 scanf("%d",&c);

 if ((c<1) || (c>nrec)) return;

 c--;

 printf("Koli4estvo blud: ");

 scanf("%d",&kol);

 for (j=0; j<rec[c].prods; j++)

   if (kol*rec[c].kol[j] > prod[rec[c].prod[j]].kol)

   {

     printf("Ne hvataet ingridientov na sklade\n");

     getch();

     return;

   }

 for (j=0; j<rec[c].prods; j++)

    prod[rec[c].prod[j]].kol-=kol*rec[c].kol[j];

 printf("Zakaz stoimost`ju %d prinjat.",kol*rec[c].cena);

 getch();

}

void EditProd()

{

 int i, c;

 printf("Spisok ingridientov:\n");

 printf("%3s%20s%15s%10s\n","N","Naimenovanie","Na sklade","Cena");

 for (i=0; i<nprod; i++)

    printf("%3d%20s%15.1lf%10d\n",i+1,prod[i].naim,prod[i].kol,prod[i].cena);

 printf("Vibirite produkt: ");

 scanf("%d",&c);

 if ((c<1) || (c>nprod)) return;

 c--;

 printf("Vvedite novoje koli4estvo: ");

 scanf("%lf",&prod[c].kol);

 printf("Koli4estvo izmeneno\n");

 getch();

}

void main ()

{int j;

while (1)

{

 system("cls");

 printf("%20s%s"," ","1.Dobavit` product\n");

 printf("%20s%s"," ","2.Dobavit` recept\n");

 printf("%20s%s"," ","3.Prosmotr receptov\n");

 printf("%20s%s"," ","4.Sformirovat` zakaz\n");

 printf("%20s%s"," ","5.Privoz produktov\n");

 printf("%20s%s"," ","0.Vihod\n");

 printf("Vash vibor: ") ;scanf("%d",&j);

 switch(j)

  {

   case 1:AddProd();break;

   case 2:AddRec();break;

   case 3:PrintRec();break;

   case 4:Menu();break;

   case 5:EditProd();break;

   case 0:printf("Rabota zavershena\n");getch ();return;

   default :printf("Neverniy vibor\n povtorite\n");getch();

  }

}

}


Приложение 3. Результаты выполнения программы

Рисунок 1 – Главное меню программы

Рисунок 2 – Добавление продукта

Рисунок 3 – Добавление рецепта

Рисунок 4 – Просмотр рецептов

Рисунок 5 – Формирование заказа

Рисунок 6 – Попытка формирования заказа

Рисунок 8 – Привоз продуктов


 

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

17939. ЛЕКСИЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 119 KB
  2. ЛЕКСИЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 2.1. Лексичне значення слова 2.2. Однозначні і багатозначні слова 2.3. Пряме і переносне значення слова 2.4. Омонімія синонімія антонімія паронімія 2.5. Стилістична диференціація слова 2.6. Фразео
17940. СЛОВОТВОРЧІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 54 KB
  3. СЛОВОТВОРЧІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 3.1. Морфемна структура слова 3.2. Способи словотвору 3.3. Запитання і завдання для самоперевірки 3.1. Морфемна структура слова Кожна одиниця мови має свою структуру. Структура слова є системою взаємопов'язаних і співвідносн
17941. МОРФОЛОГІЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 440 KB
  4. МОРФОЛОГІЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 4.1. Частини мови принципи їх виділення 4.2. Іменник 4.3. Прикметник 4.4. Числівник 4.5. Займенник 4.6. Дієслово 4.7. Прислівник 4.8. Службові частини мови 4.9. Вигук 4.10. Запитання і завдання для самоперевірки 4.1. Частини мови прин...
17942. СИНТАКСИЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 187 KB
  5. СИНТАКСИЧНІ ЗАСОБИ ДІЛОВОГО МОВЛЕННЯ 5.1. Словосполучення сполучення слів 5.2. Поняття про речення5.3. Просте речення5.4. Складне речення5.5. Складносурядне речення5.6. Складнопідрядне речення5.7. Безсполучникове речення5.8. Складні синтаксичні конструкції5.9. Синтаксичні особ
17943. ОСОБЛИВОСТІ ПИСЕМНОГО І УСНОГО ДІЛОВОГО МОВЛЕННЯ 42 KB
  6. ОСОБЛИВОСТІ ПИСЕМНОГО І УСНОГО ДІЛОВОГО МОВЛЕННЯ 6.1. Соціальна функція писемного і усного ділового мовлення6.2. Монологічне і діалогічне ділове мовлення6.3. Особливості писемного ділового мовлення6.4. Особливості усного ділового мовлення6.5. Запитання і завдання для само
17944. ДОКУМЕНТ. КЛАСИФІКАЦІЯ ДОКУМЕНТІВ ЗА РІЗНИМИ ОЗНАКАМИ 49 KB
  7. ДОКУМЕНТ. КЛАСИФІКАЦІЯ ДОКУМЕНТІВ ЗА РІЗНИМИ ОЗНАКАМИ 7.1. Справочинство і його складові частини7.2. Визначення документу. Роль документу у діловій сфері7.3. Класифікація документів за різними ознаками7.4. Запитання і завдання для самоперевірки 7.1. Справочинство і його ск...
17945. ВИМОГИ ДО УТВОРЕННЯ І МОВИ ДОКУМЕНТІВ 64 KB
  8. ВИМОГИ ДО УТВОРЕННЯ І МОВИ ДОКУМЕНТІВ 8.1. Сучасні вимоги до мови документів8.2. Документи з низьким і високим рівнем стандартизації8.3. Реквізити управлінських документів8.4. Вимоги до мови документів8.5. Запитання і завдання для самоперевірки 8.1. Сучасні вимоги до докуме...
17946. ДОКУМЕНТУВАННЯ В УПРАВЛІНСЬКІЙ ДІЯЛЬНОСТІ 85 KB
  ДОКУМЕНТУВАННЯ В УПРАВЛІНСЬКІЙ ДІЯЛЬНОСТІ. Організаційно-розпорядчі документи. Довідковоінформаційні документи. Документування з кадрових питань. Особисті офіційні документи. Запитання і завдання для самоперевірки. Організаційно-розпорядчі документ
17947. СПЕЦІАЛІЗОВАНЕ ДОКУМЕНТУВАННЯ 85 KB
  10. СПЕЦІАЛІЗОВАНЕ ДОКУМЕНТУВАННЯ 10.1. Документи з господарської діяльності10.2. Документи з господарськопретензійної діяльності10.3. Система обліковофінансової документації10.4. Документи в банківській діяльності10.5. Документація в рекламній та видавничої діяльності10.6. З