Разработка программы, реализующей основные функции электронного магазина

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

АННОТАЦИЯ

Данный документ является пояснительной запиской к курсовой работе. Целью выполнения настоящей курсовой работы является закрепление теоретических знаний и отработка практических навыков работы на ПК.

Для реализации поставленной задачи была выбрана интегрированная среда разработки Microsoft Visual C++, которая предоставляет мощную и гибкую среду разработки, позволяющую создавать приложения для Microsoft Windows и приложения, основанные на Microsoft. NET.

Содержание

  • ВВЕДЕНИЕ
  • 1 Анализ задания
  • 2 Описание логической структуры
  • 3 Входные и выходные данные
  • 4 Инструкция, описывающая специальные сведения для запуска программы
  • 5 Инструкция пользователя
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
  • ПРИЛОЖЕНИЕ А

ВВЕДЕНИЕ

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

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

1) Аутентификация пользователя;

2) Обновление данных о доступных товаров;

3) Поиск по каталогу доступных товаров и др.

1 Анализ задания

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

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

2 Описание логической структуры

Рисунок 1 — блок-схема работы программы

Этап аутентификации можно представить в виде рисунка 2:

/

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

1) Добавление/Удаление пользователя;

2) Добавление/Удаление товара;

3) Выход из программы.

Меню обычного пользователя:

1) Покупка — выбор товара из списка и последующая его покупка (или отмена операции);

2) Выход из программы.

3 Входные и выходные данные

Данные о товаре представлены в виде структуры следующего вида:

struct Tovar

{

char Name[50];

char Manufacturer[50];

char Model[50];

int Number;

int Price;

int PayType;

Tovar* next;

},

где Name — наименование товара, Manufacturer — производитель, Model — модель продукта, Number — количество доступное для продажи, Price — цена, PayType — тип оплаты, next — указатель на следующий элемент в списке.

В данной программе предусмотрено два вида оплаты: наличные и оплата с помощью кредитной карты.

Так же после завершения программы создается отчет о проданных товарах, который сохраняется в файл Отчет. txt.

4 Инструкция, описывающая специальные сведения для запуска программы

электронный магазин программа

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

— Процессор: Pentium с тактовой частотой 400 MГц или аналогичный процессор (рекомендуется Pentium с тактовой частотой 1ГГц или аналогичный процессор)

— Операционные системы семейства Windows NT

— ОЗУ: не менее 96 МБ (рекомендуется 256 МБ)

— Жесткий диск: может потребоваться до 500 МБ доступного дискового пространства

— Экран: разрешение 800×600, 256 цветов (рекомендуется разрешение 1024×768, 32-разрядный)

5 Инструкция пользователя

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

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

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

ЗАКЛЮЧЕНИЕ

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1 Похомов, Б.И. C, C++ и МS Visual C++ 2008 для начинающих, 2009

ПРИЛОЖЕНИЕ А

Текст программы

// Shared. h

//

#pragma once

#include «stdafx. h»

#include < stdio. h>

#include < stdlib. h>

#include < conio. h>

#include < errno. h>

struct Tovar

{

char Name[50];

char Manufacturer[50];

char Model[50];

int Number;

int Price;

int PayType;

Tovar* next;

};

extern Tovar* Tovary; // extern — значит, что где-то не в этом файле находится tovary и tovarysold

extern Tovar* TovarySold;

//Функция для корректного отображения русских букв в консоли

char *GetRusMessage (char *message);

// Запрашивает ввод данных в виде числа.

// Возвращает ErrValue, если произошла ошибка

// или пользователь отменил ввод числа.

int GetIntInput (int ErrValue, char *buf=0);

// Собственная, более безопасная реализация функции gets ();

void my_gets (char *_Buf, int MaxCount);

// Запрос данных товара: сумма или способ оплаты (в зависимости от InputType).

bool Tovar_GetInput (int InputType, Tovar* T, int *Output);

// Возвращает указатель на товар, находящийся на i-ой позиции в списке.

Tovar* GetItem (Tovar* List, int i);

// Добавление товара в список отдельно по полям.

int AddTovar (Tovar** List, char* Name, char* Manufacturer, char* Model, int Number, int Price);

// Добавление товара в список готовой структурой.

int AddTovar (Tovar** List, Tovar T);

// Удаление товара из списка.

int DeleteTovar (Tovar *List, Tovar *DelItem);

// Поиск товара по имени.

int SearchTovar (Tovar *List, char *name);

//Receipt. cpp

//

#include «stdafx. h»

#include «Shared. h»

// Вывод меню «Приём товара».

int Menu_Receipt ();

// Запрос данных о добавляемом товаре с последющим добавлением в общий список.

int ReceivingTovar ();

//Вывод меню для выбора удаляемого товара.

Tovar* SubMenu_ReceiptDelete ();

//Vidacha. h

//

#include «stdafx. h»

#include «Shared. h»

// Вывод меню «Выдача».

int Menu_Vydacha ();

// Добавление товара в список куплен-ных. Также изменяет количество оставшихся единиц товара.

int BuyItem (Tovar* Item, int count, int PayType);

// Sklad. cpp: определяет точку входа для консольного приложения.

//

#include «stdafx. h»

#include < conio. h>

#include < windows. h>

#include «vydacha. h»

#include «Receipt. h»

#include «Shared. h»

Tovar* Tovary=0; // создается пустой список таваров

Tovar* TovarySold=0; // пустой список проданных товаров

// Cохранение купленных товаров в отчёт и имеющиеся товары в бинарный файл.

int SaveGoods ()

{

FILE* F = fopen («Data. txt», «w»); // открытие файла на запись

if (!F) // если не удалось открыть, то функция завершается

return 1; // завершение фун-ции

// запись всех товаров в файл

Tovar* Item;

for (Item=Tovary; Item; Item = Item-> next)

{

fwrite (Item, sizeof (Tovar)-8, 1, F);

}

fclose (F); // закрытие файла

F = fopen («Отчёт. txt», «w»);

if (!F)

return 2;

fprintf (F, «Проданные товары: nn»);

int TotalSum=0;

for (Item=TovarySold; Item; Item = Item-> next)

{

fprintf (F, «Название: %sn»

«Производитель: %sn»

«Модель: %sn»

«Продано штук: %dn»

«Цена за указаное количество штук: %dn»

«Данный товар приобретён %sn»

«----------------------------------n»,

Item-> Name,

Item-> Manufacturer,

Item-> Model,

Item-> Number,

Item-> Price*Item->Number,

(Item-> PayType==1? «наличными»: «кредитной картой»)

);

TotalSum += Item-> Price*Item->Number;// одсчитывается общая прибыль

}

fprintf (F, «Общая прибыль: %dn», TotalSum); // и записывается в отчет

fclose (F); //закрытие

return 0; //ф-ция завершина

}

// Очистка памяти от списка товаров и списка проданных товаров.

void ClearLists ()//(удаление из оперативной памяти списка товаров)

{

Tovar *Item, *Del;

for (Item=Tovary; Item;)

{

Del = Item;

Item = Item-> next;

delete Del;

}

for (Item=TovarySold; Item;)

{

Del = Item;

Item = Item-> next;

delete Del;

}

}

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

int LoadGoods ()

{

FILE* F = fopen («Data. txt», «r»);

if (!F)

return 1;

// узнаём, не пуст ли файл

fseek (F, 0, SEEK_END); // ставим курсор в конец файла

if (!ftell (F))// если файл пуст, то ф-ция завершается

{

fclose (F);

return 2;

}

rewind (F); // перевод курсора в начало файла

Tovar NewTovar; //Переменная для чтения из файла

// если файл не пуст, то идет чтение файла и запись данных в оперативную память

while (!feof (F))// выполнение цикла, пока не будет достигнут конец файла

{

memset (& NewTovar, 0, sizeof (Tovar)-8); //запись (по очередности добавляет товары в оперативную память)

fread (& NewTovar, sizeof (Tovar)-8, 1, F);

AddTovar (& Tovary, NewTovar);

}

fclose (F); //закрытие

return 0;

}

// Вывод главного меню.

int MainMenu ()

{

int result; // переменная в которой я буду вводить выбранный пункт меню

while (true)// будет выполняться пока не выйду из меню

{

printf (GetRusMessage («Выберите пункт меню: n»

«1 — Покупкаn»

«0 — Выход из программыn»

));

result = GetIntInput (-1); // ввод пункта меню

if (result >= 0 & & result <= 1)// если результат >= 1 & & result <= 4

return result;

else

{

printf (GetRusMessage («Неоходимо ввести число от 0 до 2. Нажмите любую клавишу для продолжения для продолжения. «));

_getch ();

system («cls»); // очиска консольного экрана (командная строка в отчете исправить)

}

}

}

// Вывод меню администратора

void AdminMenu (bool setPassword)

{

FILE *f;

char password[20], login[20], data[20];

int menuItem, i;

// Если пароль администратора не задан (файл с данными пользователей отсутсвует)

if (setPassword == true)

{

//Просим ввести новый пароль администратора

printf (GetRusMessage («Пароль администратора не задан. Введите пароль: «));

GetIntInput (-2, password);

// Открываем файла на запись и записываем туда логин admin и его пароль

f = fopen («Users», «w»);

strcpy (login, «admin»);

// Шифруем данные

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

{

login[i] = login[i] + 11;

password[i] = password[i] + 13;

}

// Записываем данные в файл

fwrite (login, sizeof (char), 20, f);

fwrite (password, sizeof (char), 20, f);

// Закрываем файл

fclose (f);

}

// Бесконечный цикл для вывода меню администратора

while (true)

{

system («cls»);

printf (GetRusMessage («Меню администратора: n1 — Добавить пользователяn2 — Добавить/Удалить товарn0 — Завершить сеанс администратораn»));

menuItem = GetIntInput (-1);

// Проверяем введенное значение (допускается только 0 или 1, т.к. два пункта меню)

if (menuItem < 0 || menuItem > 2)

{

printf (GetRusMessage («Неверный ввод. Нажмите любую клавишу для продолжения. «));

_getch ();

}

else

{

// Если введен 0, то выходим из меню администратора

if (menuItem == 0)

return;

if (menuItem == 1)

{

// Если введеена 1, то просим ввести логин и пароль нового пользователя

printf (GetRusMessage («Введите логин нового пользователя: «));

GetIntInput (-2, login);

printf (GetRusMessage («Введите пароль нового пользователя: «));

GetIntInput (-2, password);

// Открываем файл на добавление

f = fopen («Users», «a»);

// переводим курсор в конец файла

fseek (f, 0, SEEK_END);

// Шифруем данные

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

{

login[i] = login[i] + 11;

password[i] = password[i] + 13;

}

// Записываем данные о новом пользователе и закрываем файл

fwrite (login, sizeof (char), 20, f);

fwrite (password, sizeof (char), 20, f);

fclose (f);

}

else

{

do

{

system («cls»);

int menu = Menu_Receipt (); // Вывод меню «Приём товара».

if (menu == -1 || menu == 0)// если введенно -1 или 0, то товар не добавляется

break;

system («cls»);

switch (menu)// вывод нового меню

{

case 1:

{

ReceivingTovar (); // Запрос данных о добавляемом товаре с последющим добавлением в общий список.

}

break;

case 2:

{

if (!Tovary)// условие есть ли товарв в списке! если нет то Добавьте товаров со склада

{

printf (GetRusMessage («Нет товаров в списке! Нажмите любую клавишу для продолжения. «));

_getch ();

break;

}

Tovar* Item = SubMenu_ReceiptDelete (); //Вывод меню для выбора удаляемого товара.

if ((int)Item == -1)// если введенно -1, то ф-ция прекращает свою работу

break;

else if (!Item)// есть ли товар в списке

{

int ItemNum = Menu_Vydacha (); // если есть то переходим в меню выдача

if (!ItemNum)

{

printf (GetRusMessage («Нет товаров в списке! Добавьте товаров. n»));

_getch ();

break;

}

else if (ItemNum == -1)

break;

else

Item = GetItem (Tovary, ItemNum); // получение данных товара, который подлежит удалению

}

system («cls»);

printf («%s, %s, %s, %d, %dn», GetRusMessage (Item-> Name), GetRusMessage (Item-> Manufacturer), GetRusMessage (Item-> Model), Item-> Number, Item-> Price);

//PrintRusMessage (Item-> Name

printf (GetRusMessage («Нажмите Y для подтверждения удаления или любую другую клавишу для отменыn»));

int Key = _getch ();

if (Key == 'y'|| Key == 'Y')

DeleteTovar (Tovary, Item);

}

break;

}

}while (true);

}

}

}

}

// Функция аутентификации

int Authentication ()

{

FILE *f;

char inputLogin[20], inputPassword[20], login[20], password[20];

int i;

// Просим ввести логин и пароль

printf (GetRusMessage («Введите логин: «));

GetIntInput (-2, inputLogin);

printf (GetRusMessage («Введите пароль: «));

GetIntInput (-2, inputPassword);

// Открываем файл на чтение

if ((f = fopen («Users», «r»)) == NULL)

{

// Если файла нет

if (strcmp (inputLogin, «admin») == 0)

{

// Если файла нет и введен логин admin то возвращаем 0

return 0;

}

// Если файла нет, и введен логин отличный от admin, то возвращаем -1

return -1;

}

// Если же файла существует, то начинаем считывать из него данные и сравнивать со введенными

fread (login, sizeof (char), 20 * sizeof (char), f);

fread (password, sizeof (char), 20 * sizeof (char), f);

while (!feof (f))

{

// Дешифруем данные

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

{

login[i] = login[i] - 11;

password[i] = password[i] - 13;

}

if (strcmp (inputLogin, login) == 0 & & strcmp (inputPassword, password) == 0)

{

// Если такой логин и пароль найдены в файле, то закрываем файл и проверяем введен логин admin или нет

fclose (f);

if (strcmp (login, «admin») == 0)

// Если введен логин admin то возвращаем 1

return 1;

//Иначе 2

return 2;

}

// Читаем следующую пару логин-пароль

fread (login, sizeof (char), 20 * sizeof (char), f);

fread (password, sizeof (char), 20 * sizeof (char), f);

}

// Если были прочитаны все данные из файла, но совпадений не было найдено, то закрываем файл и возвращаем -1

fclose (f);

return -1;

}

int _tmain (int argc, _TCHAR* argv[])// оснавная ф-ция в которой выполняется вся программа ()

{

//Задаем кодировку текста

SetConsoleCP (1251);

bool success = false;

// Пока не будет осуществлен успешный ввод логина и пароля выполняем

while (success == false)

{

system («cls»);

// Вызываем функцию аутентификации

switch (Authentication ())

{

case 0:

// Если она вернула 0, то вызываем меню администратора с требованием задать для него пароль, так как он отсутствует

AdminMenu (true);

break;

case 1:

// Вызываем меню администратора без требования ввести новый пароль

AdminMenu (false);

break;

case 2:

// Если был осуществлен успешный ввод пользователя отличного от администратора, то прерываем цикл

success = true;

break;

default:

// Иначе выдаем сообщение о неверном логине и/или пароле

printf (GetRusMessage («Неверный логин и/или пароль. Нажмите любую клавишу для продолжения. «));

_getch ();

break;

}

}

LoadGoods (); // загрузка данных из файлов

do

{

system («cls»);

switch (MainMenu ())// выбор пункта меню

{

case 1:

{

system («cls»);

if (!Tovary)// условие есть ли товарв в списке! если нет то Добавьте товаров со склада

{

printf (GetRusMessage («Нет товаров в списке! Добавьте товаров со склада. n»));

_getch ();

break; // прикращение работы этого пункта меню

}

do // если список не пуст

{

int Item = Menu_Vydacha (); // то переходим к выдачи товаров

if (Item == -1)// -1, чтобы выйти

break;

system («cls»);

Tovar* T = GetItem (Tovary, Item); // получение данных товара, который подлежит к выдачи

if (!T) // проверка наличие товара в списке

{

printf (GetRusMessage («Нет товаров в списке! Добавьте товаров со склада. n»));

_getch ();

break;

}

else if (!T-> Number)// проверка возможность продаже товара

{

printf (GetRusMessage («Товар распродан. n»));

_getch ();

continue;

}

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

printf («%s, %s, %s, %d, %dn», GetRusMessage (T-> Name), GetRusMessage (T-> Manufacturer), T-> Model, T-> Number, T-> Price);

printf (GetRusMessage («Введите количество товара «));

int Count = 0; // переменная вкоторой вводим кол-во товаров

Tovar_GetInput (1, T, & Count); //вводим кол-во товаров

if (Count==0)// если кол-во =0, то

continue; // выполняется

printf (GetRusMessage («Выберете вид оплаты (1 — наличные; 2 — кредитная карта) или введите 0 для отмены покупкиn»));

int PayType = 0; // переменная в которой вводим вид оплаты

Tovar_GetInput (2, T, & PayType);//вводим вид оплаты

if (PayType==0)// если кол-во =0, то

continue;

BuyItem (T, Count, PayType); //// фунция покупки товара и добавлление его в список проданных

printf (GetRusMessage («Товар был успешно купленn»));

_getch ();

}

while (true);

}

break;

case 0:

{

//Сохраняем данные в файл

SaveGoods ();

//Очищаем выделенную под список данных память

ClearLists ();

return 0;

}

break;

}

}while (true);

return 0;

}

// Receipt. cpp:

//

#include «stdafx. h»

#include «Receipt. h»

#include «Shared. h»

#include < string. h>

int Menu_Receipt () //меню «Приём товара»

{

int menu; // переменная, куда вводим выбор меню

do

{

printf (GetRusMessage («Выберите действие: n»

«1 — Добавить товарn»

«2 — Удалить товарn»

«0 — Выйти в главное менюn»));

menu = GetIntInput (-1);

if (menu> =0 & & menu< =2)//если введено 0,1,2 то выполняется пункт меню

return menu;

else //или же придётся ввести заново

{

printf (GetRusMessage («Введено некорректное число. Нажмите любую клавишу для продолжения. n»));

_getch ();

}

}while (true);

}

Tovar* SubMenu_ReceiptDelete ()

{

char buf[20]; //переменная, в которую копируется имя товара

printf (GetRusMessage («Введите часть имени товара, порядковый номер товара, n»

«0 для отображения всего списка или -1 для выходаn»

));

int result = GetIntInput (-2, & buf[ 0 ]);

if (result == -2)

{

Tovar* TResult = GetItem (Tovary, SearchTovar (Tovary, buf));

}

else if (result==-1 || result==0)

return (Tovar*)result;

else

return GetItem (Tovary, result-1);

}

int ReceivingTovar ()//добавление товара

{

Tovar NewT; //сюда записываем данные о новом товаре

printf (GetRusMessage («Введите название товара: n»));

my_gets (& NewT. Name[0], 50);

printf (GetRusMessage («Введите имя производителя: n»));

my_gets (& NewT. Manufacturer[0], 50);

printf (GetRusMessage («Введите модель: n»));

my_gets (& NewT. Model[0], 50);

printf (GetRusMessage («Введите количество: n»));

NewT. Number = GetIntInput (0);

printf (GetRusMessage («Введите цену за 1 шт. :n»));

NewT. Price = GetIntInput (0);

return AddTovar (& Tovary, NewT); //завершение функции и добавление товара в список

}

// Shared. cpp:

//

#include «stdafx. h»

#include «Shared. h»

#include < stdio. h>

#include < stdlib. h>

#include < string. h>

#include < shlwapi. h>

#pragma comment (lib, «shlwapi. lib»)

void my_gets (char *_Buf, int _MaxCount)

{

fgets (_Buf, _MaxCount, stdin);

_Buf[ strlen (_Buf)-1 ] = 0; // убираем символ 'n'

}

//Функция для корректного отображения русских букв в консоли

char* GetRusMessage (char *message)

{

//Выделяем память той же длинны что и сообщение

char* rusMessage = new char[strlen (message)];

//Преобразовываем

CharToOem (message, rusMessage);

return rusMessage;

}

int GetIntInput (int ErrValue, char *_buf)

{

char buf[20];

my_gets (& buf[0], 20);

if (_buf)

strcpy (_buf, buf);

int result = atoi (& buf[0]);

// При неудачной конвертации atoi возвращает 0.

// Проверим, не является ли возвращённое значение

// сконвертированным нулём, чтобы избежать недоразумений

if (!result & & buf[0] ≠ '0')

return ErrValue;

else

return result;

}

bool Tovar_GetInputHelper (int InputType, int InputSubType, int input, Tovar* T)

{

// этап выполнения функции Tovar_GetInput ()

switch (InputType)

{

// Запрос на количество или способ оплаты

case 1: switch (InputSubType)

input==2);

break;

// Запрос на количество или способ оплаты

case 2: switch (InputSubType)

{

case 1: printf (GetRusMessage («Введено некорректное количество. Введите число от 1 до %d или 0, чтобы отменить покупкуn»), T-> Number);

return true;

case 2: printf (GetRusMessage («Введено некорректное число. Введите 1, 2 или 0, чтобы отменить покупкуn»));

return true;

}

break;

}

}

bool Tovar_GetInput (int InputType, Tovar* T, int *Output)

{

int out = *Output;

do

{

out = GetIntInput (-1);

if (Tovar_GetInputHelper (1, InputType, out, T))

break;

else if (out==0)

break;

else

{

Tovar_GetInputHelper (2, InputType, out, T);

}

}while (true);

*Output = out;

return (out≠0);

}

// Возвращает указатель на конец списка.

Tovar* GetTail (Tovar* List)

{

Tovar* result;

if (!List)

return 0;

for (result=List; result-> next; result = result-> next);

return result;

}

Tovar* GetItem (Tovar* List, int i)//

{

Tovar* result;

int cur;

if (!List || i < 0)

return 0;

for (result=List, cur=0; result; result = result-> next, cur++)

{

if (cur==i)

return result;

}

return 0;

}

int AddTovar (Tovar **List, char* Name, char* Manufacturer, char* Model, int Number, int Price)

{

Tovar T;

strcpy (T. Name, Name);

strcpy (T. Manufacturer, Manufacturer);

strcpy (T. Model, Model);

T. Number = Number;

T. Price = Price;

T. PayType = 0;

return AddTovar (List, T);

}

int AddTovar (Tovar **List, Tovar T)

if (!T. Name[0]

int DeleteTovar (Tovar *List, Tovar *DelItem)

{

Tovar *PrevDelItem;

if (DelItem == List)

{

Tovary = Tovary-> next;

}

else

{

for (PrevDelItem = List; PrevDelItem-> next ≠ DelItem; PrevDelItem = PrevDelItem-> next);

PrevDelItem-> next = DelItem-> next;

}

delete DelItem;

return 0;

}

int SearchTovar (Tovar *List, char *name)

{

int count=0,

*A = NULL,

i;

Tovar *Cur;

bool isAnyItemFound = false;

for (Cur = List, i = 0; Cur; Cur = Cur-> next, i++)

{

if (StrStrI (Cur-> Name, name))

{

isAnyItemFound = true;

A = (int*)realloc (A, (++count)*sizeof (int));

A[ count-1 ] = i;

printf («%d. %s, %s, %s, %d, %dn», count, GetRusMessage (Cur-> Name), GetRusMessage (Cur-> Manufacturer), GetRusMessage (Cur-> Model), Cur-> Number, Cur-> Price);

}

}

if (!isAnyItemFound)

return -1;

printf (GetRusMessage («Введите порядковый номер найденного товара, или 0 для выходаn»));

int result = GetIntInput (0);

if (result > 0 & & result <= count)

result = A[ result — 1 ];

else

{

result = -1;

}

free (A);

return result;

}

// vydacha. cpp:

//

#include «stdafx. h»

#include «vydacha. h»

#include «Shared. h»

#include < stdio. h>

#include < stdlib. h>

#include < conio. h>

int SubMenu (int i)

{

int result;

char buf[ 256 ];

printf (GetRusMessage («Введите часть названия товара или его порядковый номер (от 1 до %d). Для возврата в предыдущее меню введите -1n»), i);

result = -1;

switch (result = GetIntInput (-2, & buf[ 0 ]))

{

case -2:

system («cls»);

result = SearchTovar (Tovary, buf);

if (result == -1)

{

printf (GetRusMessage («Подходящих товаров не найдено. Нажмите любую клавишу для продолжения. n»));

_getch ();

return 0; // Снова покажет это меню.

}

else

return result + 1;

default:

return result;

}

}

int Menu_Vydacha ()

{

Tovar *Cur; //указатель на текущий

int result; //выбор меню

int i, j; //счётчики

for (Cur=Tovary, i=0; Cur; i++)//вывод всего списка товаров

{

for (j=0; Cur & & j< 25; Cur = Cur-> next, j++)

{

printf («%d. %s, %s, %s, %d, %dn», j+1, GetRusMessage (Cur-> Name), GetRusMessage (Cur-> Manufacturer), GetRusMessage (Cur-> Model), Cur-> Number, Cur-> Price);

}

i=i+j;

result = SubMenu (i);

if (result==-1)

return -1;

else if (result==0)

{

if (!Cur)

{

Cur=Tovary;

i=-1;

}

continue;

}

else

return result-1;

}

result = SubMenu (i);

if (result==-1)

return -1;

else

return result-1;

}

int BuyItem (Tovar* Item, int count, int PayType)// фунция покупки товара и добавлление его в список проданных

{

Tovar SoldT; // переменная в которой будем записывать информацию о проданном товаре

memcpy (& SoldT, Item, sizeof (Tovar)); //запись иформации о проданном товаре

SoldT. PayType = PayType; // запись о виде оплаты покупки

SoldT. Number = count; // количество купленных предметов

Item-> Number -= count; // уменьшение кол-во товаров в наличии (в магазине)

AddTovar (& TovarySold, SoldT); // добавление товара под список проданных

return 0;

}

ПоказатьСвернуть
Заполнить форму текущей работой