#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;
}
}
}