Untitled

 avatar
unknown
plain_text
2 years ago
6.2 kB
6
Indexable
#include <iostream>
#include "windows.h"

using namespace std;

struct Watch {
    Watch *Next;                                                        
    char Case;
    union {
        struct {
            char watchName[15], Model[9], dial[10];
        } Retailer;
        struct {
            char watchName[15];
            int NumId;
        } Stock;
    };
    char Address[40];
    int Length;
};

Watch *DataBase = NULL;

Watch InpWatchInfo(char cs) {
    Watch watch;
    watch.Case = cs;
    if (watch.Case) {
        cout << "Производитель часов: ";
        cin >> watch.Stock.watchName;
        cout << "Номер: ";
        cin >> watch.Stock.NumId;
    } else {
        cout << "Производитель часов: ";
        cin >> watch.Retailer.watchName;
        cout << "Модель часов: ";
        cin >> watch.Retailer.Model;
        cout << "Цвет циферблата: ";
        cin >> watch.Retailer.dial;
    }
    cout << "Адрес: ";
    cin >> watch.Address;
    watch.Length = 0;
    return watch;
}

void OutWatchInfo(Watch watch) {
    if (watch.Case) {
        cout << watch.Stock.watchName << " | ";
        cout << watch.Stock.NumId;
    } else cout << watch.Retailer.watchName << " | " << watch.Retailer.Model << " | " << watch.Retailer.dial;
    cout << " | " << watch.Address << endl
         << "Длина: " << watch.Length << "зв." << endl;
}

Watch &AddLength(Watch &watch, int length) {
    watch.Length += length;
    return watch;
}

Watch *SubLength(Watch *watch, int length) {
    watch->Length -= length;
    return watch;
}
Watch *FoundWatchNum(int num) {
    Watch *p = DataBase;
    while (p != NULL && num--)                                               
        p = p->Next;                                                         
    return p;                                                    
}                                                                                          
 
void AddWatch(int num, char cs) {
    Watch *q = new Watch;                                                                   
    *q = InpWatchInfo(cs);                                                                 
    if (DataBase == NULL) num = 0;                                             
    if (num) {
        Watch *p = DataBase;                                                                           
        while (p->Next != NULL && --num)                                                     
            p = p->Next;
        q->Next = p->Next;
        p->Next = q;                                                               
    } else {
        q->Next = DataBase;
        DataBase = q;
    }                                                                                        
}

void DeleteWatch(int num) {
    Watch *q;
    if (DataBase == NULL) return;
    if (num) {
        Watch *p = DataBase;                                                 
        while (p->Next != NULL && --num) p = p->Next;
        if ((q = p->Next) != NULL) {
            p->Next = q->Next;
            delete q;
        }
    }                                                                                      
    else {
        q = DataBase;
        DataBase = q->Next;
        delete q;
    }
}

int main() {
    SetConsoleOutputCP(CP_UTF8);
    Watch *p;
    int i, j;
    while (1) {
        cout << " Меню СУБД:" << endl
             << "1. Ввод данных." << endl
             << "2. Вывод информации о товаре." << endl
             << "3. Вывод всей информации." << endl
             << "4. Увеличить длину браслета." << endl
             << "5. Уменьшить длину браслета." << endl
             << "6. Удалить данные." << endl
             << "7. Закончить работу." << endl
             << ">";
        cin >> i;
        switch (i) {
            case 1:
                cout << "Номер: ";
                cin >> i;
                cout << "Вариант (0-магазин, 1-наличие): ";
                cin >> j;
                AddWatch(i, j);
                break;
            case 2:
                cout << "Номер: ";
                cin >> i;
                if ((p = FoundWatchNum(i)) != NULL)
                    OutWatchInfo(*p);
                else cout << "Часы не найдены!" << endl;
                break;
            case 3:
                p = DataBase;
                i = 0;
                while (p != NULL) {
                    cout << "Часы:" << i++ << ':' << endl;
                    OutWatchInfo(*p);
                    p = p->Next;
                }
                break;
            case 4:
                cout << "Номер: ";
                cin >> i;
                if ((p = FoundWatchNum(i)) != NULL) {
                    cout << "Длина: ";
                    cin >> j;
                    AddLength(*p, j);
                } else cout << "Часы не найдены!" << endl;
                break;
            case 5:
                cout << "Номер: ";
                cin >> i;
                if ((p = FoundWatchNum(i)) != NULL) {
                    cout << "Насколько уменьшить длину: ";
                    cin >> j;
                    SubLength(p, j);
                } else cout << "Часы не найдены!" << endl;
                break;
            case 6:
                cout << "Номер: ";
                cin >> i;
                DeleteWatch(i);
                break;
            case 7:
                while (DataBase != NULL)                                                       
                {
                    p = DataBase;
                    DataBase = p->Next;
                    delete p;
                }
            default:
                cout << "Поторите ввод!" << endl;
        }
    }
}