Курсовая работа по C++ — Динамические структуры данных. Списки

Здравствуйте читатели блога. Курсовая работа по динамическим структурам данных — спискам. Может кому пригодиться =)
Будут вопросы задавайте в комментариях. Исходники и оформление курсовой в конце поста.

<br />
#include &lt;iostream&gt;<br />
#include &lt;windows.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;fstream&gt;<br />
#include &lt;conio.h&gt;<br />
using namespace std;<br />
int zena;<br />
struct Product {<br />
 // Идентификатор<br />
 int id;<br />
 // Наименование<br />
 char name[64];<br />
 // Единица измерения - Рубли / Доллары и т.д<br />
 char value[32];<br />
 // Цена единицы<br />
 double price;<br />
 // Количество товара<br />
 int number;<br />
 // Дата последнего завоза - Формат - День / Месяц / Год<br />
 char last_date[32];<br />
};</p>
<p>struct Products {<br />
 Product P;<br />
 Products *next;<br />
};</p>
<p>char*rus (char*);</p>
<p>void read_database (Products**);<br />
void input_product (Product &amp;);<br />
void print_products (Products*);<br />
void print_product (Product);<br />
void search_product (Products*);<br />
void delete_product (Products**,int);<br />
void save_struct (Products*,int);<br />
void add_element_struct (Products**,Product&amp;);<br />
void insert_element_struct (Products**,Product&amp;);<br />
void clear_struct (Products**);</p>
<p>void add_element_buy_struct (Products**,Product&amp;);<br />
void print_buy_product (Product);<br />
void buy_product (Products*,Products**);<br />
void print_buy_products (Products*);<br />
void save_buy_struct (Products*);<br />
void read_buy_database (Products**);<br />
void delete_buy_product (Products**,int);<br />
void see_factura_product (Products**);<br />
void clear_buy_struct (Products**);</p>
<p>int main()<br />
{<br />
/**<br />
* Магазин с одним продавцом.<br />
* Компьютер вместо кассового аппарата.<br />
* База наличия товаров: наименование, единица измерения, цена единицы, количество, дата последнего завоза.<br />
* Регистрация поступления товара (как старых, так и новых наименований).<br />
* Оформление покупки: выписка чека, корректировка базы.<br />
* Проблема уценки и описания.<br />
* Инвентаризация остатков товара с вычислением суммарной стоимости.<br />
*<br />
* Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе<br />
*/<br />
Product D;<br />
Products*Ps=NULL;<br />
Products*BPs=NULL;<br />
zena=0;</p>
<p>int menu;<br />
do {<br />
cout&lt;&lt;rus(&quot;\t Меню: *&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 1.Просмотр списка товаров&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 2.Добавление товара в конец списка&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 3.Добавление товара в произв.место списка&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 4.Сохранение товаров в файл (Продолжение записи)&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 5.Сохранение товаров в файл (Новая запись)&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 6.Чтение базы товаров с файла&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 7.Поиск товара&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 8.Удаление товара по номеру&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 9.Очистка списка&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t ------------------------&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 10.Покупка товаров&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 11.Просмотр корзины&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 12.Сохранение купленных товаров в файл&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 13.Чтение корзины с файла&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 14.Выписка счета&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 15.Удаление товара из корзины&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 16.Очистка корзины&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;\t 17.Касса&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;&quot;-----------------------------&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;0.Выход&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;* Введите номер пункта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;menu;</p>
<p>    switch(menu) {<br />
        // Просмотр списка товаров<br />
        case 1:<br />
        print_products(Ps);<br />
        break;</p>
<p>        // Добавление товара в список<br />
        case 2:<br />
        input_product(D);<br />
        add_element_struct(&amp;Ps,D);<br />
        break;</p>
<p>        // Вставка в произвол.место<br />
        case 3:<br />
        input_product(D);<br />
        insert_element_struct(&amp;Ps,D);<br />
        break;</p>
<p>        // Сохранение в файл списка<br />
        case 4:<br />
        save_struct(Ps,1);<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Список товаров сохранен&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>         // Сохранение в файл (перезапись)<br />
        case 5:<br />
        save_struct(Ps,0);<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Список товаров сохранен&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>        // Чтение с файла<br />
        case 6:<br />
        clear_struct(&amp;Ps);<br />
        read_database(&amp;Ps);<br />
        break;</p>
<p>        // Поиск товара<br />
        case 7:<br />
        search_product(Ps);<br />
        break;</p>
<p>        // Удаление товара по номеру<br />
        case 8:<br />
        delete_product(&amp;Ps,0);<br />
        break;</p>
<p>         // Очистка<br />
        case 9:<br />
        clear_struct(&amp;Ps);<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Список очищен&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>        //--------------------------------------------------//</p>
<p>        // Покупка товара<br />
        case 10:<br />
        buy_product(Ps,&amp;BPs);<br />
        break;</p>
<p>        // Просмотр корзины<br />
        case 11:<br />
        print_buy_products(BPs);<br />
        break;</p>
<p>        // Сохранение в файл купленных товаров<br />
        case 12:<br />
        save_buy_struct(BPs);<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Список купленных товаров сохранен&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>        // Сохранение в файл купленных товаров<br />
        case 13:<br />
        clear_buy_struct(&amp;BPs);<br />
        read_buy_database(&amp;BPs);<br />
        break;</p>
<p>        // Выписка счета<br />
        case 14:<br />
        see_factura_product(&amp;BPs);<br />
        break;</p>
<p>        // Удаление товара из корзины<br />
        case 15:<br />
        delete_buy_product(&amp;BPs,0);<br />
        break;</p>
<p>          // Очистка корзины<br />
        case 16:<br />
        clear_buy_struct(&amp;BPs);<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Список купленных товаров очищен&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>        case 17:<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Денег в кассе: &quot;)&lt;&lt;zena&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        break;</p>
<p>        //--------------------------------------------------//<br />
        // Выход<br />
        case 0:<br />
        clear_struct(&amp;Ps);<br />
        clear_buy_struct(&amp;BPs);<br />
        break;</p>
<p>        default: cout&lt;&lt;rus(&quot;Выбран не существующий пункт меню&quot;)&lt;&lt;endl;<br />
    }<br />
} while (menu!=0);</p>
<p>}</p>
<p>/**<br />
* Функция перекодировки<br />
*/<br />
char bufer [255];<br />
char*rus (char*s) {<br />
 CharToOem (s,bufer);<br />
 return bufer;<br />
}</p>
<p>/**<br />
* Функция печати списка базы товаров<br />
*/<br />
void print_products (Products*Ps) {<br />
Products*S=Ps;</p>
<p>if (!S) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>cout&lt;&lt;rus(&quot;************ База товаров **************&quot;)&lt;&lt;endl;<br />
while(S)<br />
{<br />
cout&lt;&lt;rus(&quot;--------- Товар (ID) &quot;)&lt;&lt;S-&gt;P.id&lt;&lt;&quot; ----------&quot;&lt;&lt;endl;<br />
print_product(S-&gt;P);<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
S=S-&gt;next;<br />
}<br />
cout&lt;&lt;&quot;****************************************&quot;&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Функция печати параметров продукта<br />
*/<br />
void print_product (Product P) {<br />
cout&lt;&lt;rus(&quot;ID:  &quot;)&lt;&lt;P.id&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Название товара:  &quot;)&lt;&lt;P.name&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Единица измерения(Валюта):  &quot;)&lt;&lt;P.value&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Цена товара:  &quot;)&lt;&lt;P.price&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Количество товара на базе:  &quot;)&lt;&lt;P.number&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Дата последнего завоза товара:  &quot;)&lt;&lt;P.last_date&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Сохранение структуры с файла (продолжение записи)<br />
*/<br />
void save_struct (Products*Ps,int act) {<br />
fstream file;</p>
<p>if(!act) {<br />
remove(&quot;database.txt&quot;);<br />
}</p>
<p>file.open(&quot;database.txt&quot;,ios::out|ios::app);<br />
if (!file) {<br />
cout&lt;&lt;rus(&quot;База данных не доступна&quot;);<br />
return;<br />
}</p>
<p>while (Ps) {<br />
file.write((char *) &amp;Ps-&gt;P, sizeof(Product));<br />
Ps=Ps-&gt;next;<br />
}<br />
file.close();<br />
}</p>
<p>/**<br />
* Добавление элемента в структуру<br />
*/<br />
void add_element_struct (Products**Ps,Product &amp;D) {<br />
Products*Inc=new Products;</p>
<p>Inc-&gt;P.id=D.id;<br />
strcpy(Inc-&gt;P.name, D.name);<br />
strcpy(Inc-&gt;P.value, D.value);<br />
Inc-&gt;P.price=D.price;<br />
Inc-&gt;P.number=D.number;<br />
strcpy(Inc-&gt;P.last_date, D.last_date);</p>
<p>Inc-&gt;next=*Ps;<br />
*Ps=Inc;<br />
}</p>
<p>/**<br />
* Вставка элемента в структуру<br />
*/<br />
void insert_element_struct (Products**Ps,Product&amp;D) {<br />
Products*Inc=new Products;</p>
<p>Inc-&gt;P.id=D.id;<br />
strcpy(Inc-&gt;P.name, D.name);<br />
strcpy(Inc-&gt;P.value, D.value);<br />
Inc-&gt;P.price=D.price;<br />
Inc-&gt;P.number=D.number;<br />
strcpy(Inc-&gt;P.last_date, D.last_date);</p>
<p>    if(*Ps==NULL) {<br />
    Inc-&gt;next=NULL;<br />
    *Ps=Inc;<br />
    return;<br />
    }</p>
<p>    Products*S=*Ps;<br />
    if (S-&gt;P.id&gt;=Inc-&gt;P.id) {<br />
    Inc-&gt;next=S;<br />
    *Ps=Inc;<br />
    return;<br />
    }</p>
<p>    Products*S1=S-&gt;next;<br />
    while (S1) {<br />
        if(S-&gt;P.id&lt;Inc-&gt;P.id &amp;&amp; S-&gt;P.id&lt;=S1-&gt;P.id) {<br />
        S-&gt;next=Inc;<br />
        Inc-&gt;next=S1;<br />
        return;<br />
        }<br />
        S=S-&gt;next;<br />
        S1=S1-&gt;next;<br />
    }<br />
    S-&gt;next=Inc;<br />
    Inc-&gt;next=NULL;<br />
}</p>
<p>/**<br />
* Чтение из файла ,создание списка<br />
*/<br />
void read_database (Products**Ps) {</p>
<p>ifstream file;<br />
Products*Inc=new Products;<br />
Product S;</p>
<p>file.open(&quot;database.txt&quot;,ios::in);<br />
if (!file) {<br />
cout&lt;&lt;rus(&quot;База данных не доступна&quot;);<br />
return;<br />
}</p>
<p>long file_size;<br />
file.seekg(0, ios::end);<br />
file_size = file.tellg();<br />
if (!file_size) {<br />
cout&lt;&lt;rus(&quot;База данных пуста&quot;);<br />
return;<br />
}<br />
file.close();</p>
<p>file.open(&quot;database.txt&quot;,ios::in);</p>
<p>file.read((char *) &amp;S, sizeof(Product));<br />
Inc-&gt;P.id=S.id;<br />
strcpy(Inc-&gt;P.name, S.name);<br />
strcpy(Inc-&gt;P.value, S.value);<br />
Inc-&gt;P.price=S.price;<br />
Inc-&gt;P.number=S.number;<br />
strcpy(Inc-&gt;P.last_date, S.last_date);<br />
Inc-&gt;next=NULL;<br />
*Ps=Inc;<br />
while(!file.eof()) {<br />
if(file.read((char *) &amp;S, sizeof(Product))==NULL)break;<br />
Inc-&gt;next=new Products;<br />
Inc=Inc-&gt;next;<br />
Inc-&gt;P.id=S.id;<br />
strcpy(Inc-&gt;P.name, S.name);<br />
strcpy(Inc-&gt;P.value, S.value);<br />
Inc-&gt;P.price=S.price;<br />
Inc-&gt;P.number=S.number;<br />
strcpy(Inc-&gt;P.last_date, S.last_date);</p>
<p>Inc-&gt;next=NULL;<br />
}<br />
file.close();</p>
<p>cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Список товаров получен из файла&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Ввод данных<br />
*/<br />
void input_product(Product &amp;D) {<br />
char val[64];<br />
bool valid=false;<br />
do {</p>
<p>cout&lt;&lt;rus(&quot;Введите ID продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val;<br />
for (int i=0;i&lt;strlen(val);i++) {<br />
 if (val[i]&lt;'0' || val[i]&gt;'9') {<br />
 valid=false;<br />
 break;<br />
 }<br />
 valid=true;<br />
}</p>
<p>if (valid) {<br />
sscanf(val,&quot;%d&quot;,&amp;D.id);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только целые числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid);</p>
<p>cout&lt;&lt;rus(&quot;Введите название продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;D.name;<br />
cout&lt;&lt;rus(&quot;Введите единицу измерения(Валюту)&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;D.value;</p>
<p>char val2[64];<br />
bool valid2=false;<br />
do {</p>
<p>cout&lt;&lt;rus(&quot;Введите цену на товара&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val2;<br />
for (int i=0;i&lt;strlen(val2);i++) {<br />
 if (val2[i]=='.') {<br />
 continue;<br />
 }<br />
 else if (val2[i]&lt;'0' || val2[i]&gt;'9') {<br />
 valid2=false;<br />
 break;<br />
 } else {<br />
 valid2=true;<br />
 }<br />
}</p>
<p>if (valid2) {<br />
sscanf(val2,&quot;%lf&quot;,&amp;D.price);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только double числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid2);</p>
<p>char val3[64];<br />
bool valid3=false;<br />
do {</p>
<p>cout&lt;&lt;rus(&quot;Введите количество товара на базе&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val3;<br />
for (int i=0;i&lt;strlen(val3);i++) {<br />
 if (val3[i]&lt;'0' || val3[i]&gt;'9') {<br />
 valid3=false;<br />
 break;<br />
 }<br />
 valid3=true;<br />
}</p>
<p>if (valid3) {<br />
sscanf(val3,&quot;%d&quot;,&amp;D.number);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только int числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid3);</p>
<p>cout&lt;&lt;rus(&quot;Введите дату последнего завоза товара&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;D.last_date;<br />
}</p>
<p>/**<br />
* Поиск товара<br />
*/<br />
void search_product (Products*Ps) {<br />
if(!Ps) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>char name[64];<br />
cout&lt;&lt;rus(&quot;Введите имя продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;name;</p>
<p>Products*S=Ps;</p>
<p>while(S) {<br />
 if (!strcmp(S-&gt;P.name,name)) {<br />
 cout&lt;&lt;rus(&quot;\t По запросу найден&quot;)&lt;&lt;endl;<br />
 print_product(S-&gt;P);<br />
 return;<br />
 }</p>
<p>S=S-&gt;next;<br />
}</p>
<p>cout&lt;&lt;rus(&quot;\t Данного товара нет&quot;)&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Удаление продукта<br />
*/<br />
void delete_product (Products**Ps,int delete_id) {</p>
<p>if(!*Ps) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>int id;<br />
if (!delete_id) {<br />
char val[64];<br />
bool valid=false;<br />
do {<br />
cout&lt;&lt;rus(&quot;Введите ID удаляемого продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val;<br />
for (int i=0;i&lt;strlen(val);i++) {<br />
 if (val[i]&lt;'0' || val[i]&gt;'9') {<br />
 valid=false;<br />
 break;<br />
 }<br />
 valid=true;<br />
}</p>
<p>if (valid) {<br />
sscanf(val,&quot;%d&quot;,&amp;id);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только целые числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid);<br />
} else {<br />
id=delete_id;<br />
}</p>
<p>Products*T=*Ps;<br />
    if(T-&gt;P.id==id) {<br />
    *Ps=T-&gt;next;<br />
    delete T;</p>
<p>    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
    cout&lt;&lt;rus(&quot;Товар удален&quot;)&lt;&lt;endl;<br />
    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
    return;<br />
    }</p>
<p>Products*T1=T-&gt;next;<br />
    while(T1) {<br />
        if(T1-&gt;P.id&gt;=id &amp;&amp; id&gt;=T1-&gt;P.id) {<br />
        T-&gt;next=T1-&gt;next;<br />
        delete T1;</p>
<p>        if (!delete_id) {<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Товар удален&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        }<br />
        return;<br />
        }<br />
    T=T1;<br />
    T1=T1-&gt;next;<br />
    }<br />
}</p>
<p>/**<br />
* Очистка списка<br />
*/<br />
void clear_struct (Products**Ps) {<br />
if(!*Ps) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}<br />
    Products*S=*Ps;<br />
    Products*D;<br />
    while(S)<br />
    {<br />
            D=S;<br />
            S=S-&gt;next;<br />
            delete D;<br />
    }<br />
    *Ps=NULL;<br />
}</p>
<p>/**<br />
* Добавление элемента в структуру<br />
*/<br />
void add_element_buy_struct (Products**BPs,Product &amp;D) {<br />
Products*BInc=new Products;</p>
<p>BInc-&gt;P.id=D.id;<br />
strcpy(BInc-&gt;P.name, D.name);<br />
strcpy(BInc-&gt;P.value, D.value);<br />
BInc-&gt;P.price=D.price;<br />
BInc-&gt;P.number=D.number;<br />
strcpy(BInc-&gt;P.last_date, D.last_date);</p>
<p>BInc-&gt;next=*BPs;<br />
*BPs=BInc;<br />
}</p>
<p>/**<br />
* Функция печати параметров купленного продукта<br />
*/<br />
void print_buy_product (Product P) {<br />
cout&lt;&lt;rus(&quot;ID:  &quot;)&lt;&lt;P.id&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Название товара:  &quot;)&lt;&lt;P.name&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Единица измерения(Валюта):  &quot;)&lt;&lt;P.value&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Цена товара:  &quot;)&lt;&lt;P.price&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Количество купленного товара:  &quot;)&lt;&lt;P.number&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Дата покупки:  &quot;)&lt;&lt;P.last_date&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Покупка товара ,добавление в корзину<br />
*/<br />
void buy_product (Products*Ps,Products**BPs) {<br />
if(!Ps) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>Product D;<br />
char val[64];<br />
bool valid=false;<br />
do {<br />
cout&lt;&lt;rus(&quot;Введите ID продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val;<br />
for (int i=0;i&lt;strlen(val);i++) {<br />
 if (val[i]&lt;'0' || val[i]&gt;'9') {<br />
 valid=false;<br />
 break;<br />
 }<br />
 valid=true;<br />
}</p>
<p>if (valid) {<br />
sscanf(val,&quot;%d&quot;,&amp;D.id);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только целые числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid);</p>
<p>Products*S=Ps;</p>
<p>bool result;<br />
while(S) {<br />
    if (S-&gt;P.id==D.id) {<br />
    result=true;</p>
<p>    cout&lt;&lt;rus(&quot;\t По запросу найден&quot;)&lt;&lt;endl;<br />
    print_product(S-&gt;P);</p>
<p>    cout&lt;&lt;rus(&quot;\n Введите количество покупаемого товара&quot;)&lt;&lt;endl;<br />
    cin&gt;&gt;D.number;</p>
<p>     if (S-&gt;P.number&lt;D.number) {<br />
     cout&lt;&lt;rus(&quot;Нет такого количества товара&quot;)&lt;&lt;endl;<br />
     cout&lt;&lt;rus(&quot;Сейчас в ассортименте(штук): &quot;)&lt;&lt;D.number&lt;&lt;endl;<br />
     D.number=D.number-(D.number-S-&gt;P.number);<br />
     cout&lt;&lt;rus(&quot;Купить: &quot;)&lt;&lt;D.number&lt;&lt;endl;<br />
     cout&lt;&lt;rus(&quot;штук товара?&quot;)&lt;&lt;endl;<br />
     }</p>
<p>    int act;<br />
    cout&lt;&lt;rus(&quot;\n Продолжить покупку (1 - да,0 - нет&quot;)&lt;&lt;endl;<br />
    cin&gt;&gt;act;</p>
<p>    if (act) {<br />
    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
    cout&lt;&lt;rus(&quot;Товар добавлен в корзину&quot;)&lt;&lt;endl;<br />
    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;</p>
<p>    strcpy(D.name, S-&gt;P.name);<br />
    strcpy(D.value, S-&gt;P.value);<br />
    D.price=S-&gt;P.price;<br />
    strcpy(D.last_date, S-&gt;P.last_date);</p>
<p>    add_element_buy_struct (BPs,D);</p>
<p>    S-&gt;P.number=S-&gt;P.number-D.number;<br />
    if (!S-&gt;P.number) {<br />
    delete_product (&amp;Ps,D.id);<br />
    }</p>
<p>    save_struct(Ps,0);<br />
    }</p>
<p>    return;<br />
    }</p>
<p>S=S-&gt;next;<br />
}</p>
<p>if (!result) {<br />
cout&lt;&lt;rus(&quot;Товар с данным ID не найден&quot;)&lt;&lt;endl;<br />
}</p>
<p>}</p>
<p>/**<br />
* Функция печати корзины<br />
*/<br />
void print_buy_products (Products*BPs) {<br />
Products*BS=BPs;</p>
<p>if (!BS) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>cout&lt;&lt;rus(&quot;************ Корзина (купленные товары) **************&quot;)&lt;&lt;endl;<br />
while(BS)<br />
{<br />
cout&lt;&lt;rus(&quot;--------- Товар (ID) &quot;)&lt;&lt;BS-&gt;P.id&lt;&lt;&quot; ----------&quot;&lt;&lt;endl;<br />
print_buy_product(BS-&gt;P);<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
BS=BS-&gt;next;<br />
}<br />
cout&lt;&lt;&quot;****************************************&quot;&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Сохранение купленных товаров<br />
*/<br />
void save_buy_struct (Products*BPs) {<br />
fstream file;</p>
<p>remove(&quot;buy_database.txt&quot;);</p>
<p>file.open(&quot;buy_database.txt&quot;,ios::out|ios::app);<br />
if (!file) {<br />
cout&lt;&lt;rus(&quot;База данных не доступна&quot;);<br />
return;<br />
}</p>
<p>while (BPs) {<br />
file.write((char *) &amp;BPs-&gt;P, sizeof(Product));<br />
BPs=BPs-&gt;next;<br />
}<br />
file.close();<br />
}</p>
<p>/**<br />
* Чтение купленных товаров<br />
*/<br />
void read_buy_database (Products**BPs) {</p>
<p>ifstream file;<br />
Products*Inc=new Products;<br />
Product S;</p>
<p>file.open(&quot;buy_database.txt&quot;,ios::in);<br />
if (!file) {<br />
cout&lt;&lt;rus(&quot;База данных не доступна&quot;);<br />
return;<br />
}</p>
<p>long file_size;<br />
file.seekg(0, ios::end);<br />
file_size = file.tellg();<br />
if (!file_size) {<br />
cout&lt;&lt;rus(&quot;База данных пуста&quot;)&lt;&lt;endl;<br />
return;<br />
}<br />
file.close();</p>
<p>file.open(&quot;buy_database.txt&quot;,ios::in);</p>
<p>file.read((char *) &amp;S, sizeof(Product));<br />
Inc-&gt;P.id=S.id;<br />
strcpy(Inc-&gt;P.name, S.name);<br />
strcpy(Inc-&gt;P.value, S.value);<br />
Inc-&gt;P.price=S.price;<br />
Inc-&gt;P.number=S.number;<br />
strcpy(Inc-&gt;P.last_date, S.last_date);<br />
Inc-&gt;next=NULL;<br />
*BPs=Inc;<br />
while(!file.eof()) {<br />
if(file.read((char *) &amp;S, sizeof(Product))==NULL)break;<br />
Inc-&gt;next=new Products;<br />
Inc=Inc-&gt;next;<br />
Inc-&gt;P.id=S.id;<br />
strcpy(Inc-&gt;P.name, S.name);<br />
strcpy(Inc-&gt;P.value, S.value);<br />
Inc-&gt;P.price=S.price;<br />
Inc-&gt;P.number=S.number;<br />
strcpy(Inc-&gt;P.last_date, S.last_date);</p>
<p>Inc-&gt;next=NULL;<br />
}<br />
file.close();</p>
<p>cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Список купленных товаров получен из файла&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Выписка счета<br />
*/<br />
void see_factura_product (Products**BPs) {<br />
Products*BS=*BPs;</p>
<p>if (!BS) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>int price=0;<br />
cout&lt;&lt;rus(&quot;************ Счет - фактура **************&quot;)&lt;&lt;endl;<br />
while(BS)<br />
{<br />
cout&lt;&lt;rus(&quot;--------- Товар (ID) &quot;)&lt;&lt;BS-&gt;P.id&lt;&lt;&quot; ----------&quot;&lt;&lt;endl;<br />
print_buy_product(BS-&gt;P);<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
price+=BS-&gt;P.price*BS-&gt;P.number;<br />
BS=BS-&gt;next;<br />
}<br />
cout&lt;&lt;&quot;****************************************&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Итого: &quot;)&lt;&lt;price&lt;&lt;endl;<br />
zena+=price;<br />
int act;<br />
cout&lt;&lt;rus(&quot;\n Оплатить (1 - да,0 - нет&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;act;</p>
<p>if (act) {<br />
remove(&quot;buy_database.txt&quot;);<br />
clear_buy_struct(BPs);<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Товары куплены.Ждите курьера =)&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
}</p>
<p>}<br />
/**<br />
* Удаление продукта из корзины<br />
*/<br />
void delete_buy_product (Products**BPs,int delete_id) {</p>
<p>if(!*BPs) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}</p>
<p>int id;<br />
if (!delete_id) {<br />
char val[64];<br />
bool valid=false;<br />
do {<br />
cout&lt;&lt;rus(&quot;Введите ID удаляемого продукта&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;val;<br />
for (int i=0;i&lt;strlen(val);i++) {<br />
 if (val[i]&lt;'0' || val[i]&gt;'9') {<br />
 valid=false;<br />
 break;<br />
 }<br />
 valid=true;<br />
}</p>
<p>if (valid) {<br />
sscanf(val,&quot;%d&quot;,&amp;id);<br />
} else {<br />
cout&lt;&lt;rus(&quot;\t Неверный тип (только целые числа)&quot;)&lt;&lt;endl;<br />
}</p>
<p>} while (!valid);<br />
} else {<br />
id=delete_id;<br />
}</p>
<p>Products*T=*BPs;<br />
    if(T-&gt;P.id==id) {<br />
    *BPs=T-&gt;next;<br />
    delete T;</p>
<p>    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
    cout&lt;&lt;rus(&quot;Товар удален&quot;)&lt;&lt;endl;<br />
    cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
    return;<br />
    }</p>
<p>Products*T1=T-&gt;next;<br />
    while(T1) {<br />
        if(T1-&gt;P.id&gt;=id &amp;&amp; id&gt;=T1-&gt;P.id) {<br />
        T-&gt;next=T1-&gt;next;<br />
        delete T1;</p>
<p>        if (!delete_id) {<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        cout&lt;&lt;rus(&quot;Товар удален&quot;)&lt;&lt;endl;<br />
        cout&lt;&lt;&quot;-------------------------------&quot;&lt;&lt;endl;<br />
        }<br />
        return;<br />
        }<br />
    T=T1;<br />
    T1=T1-&gt;next;<br />
    }<br />
}</p>
<p>/**<br />
* Очистка списка купленных товаров<br />
*/<br />
void clear_buy_struct (Products**BPs) {<br />
if(!*BPs) {<br />
cout&lt;&lt;rus(&quot;Список пуст&quot;)&lt;&lt;endl;<br />
return;<br />
}<br />
    Products*S=*BPs;<br />
    Products*D;<br />
    while(S)<br />
    {<br />
            D=S;<br />
            S=S-&gt;next;<br />
            delete D;<br />
    }<br />
    *BPs=NULL;<br />
}<br />

Скачать исходники курсовой
Скачать оформление курсовой

Вам также может понравиться ...