Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <fstream>
- #include <iostream>
- #include <cstdlib>
- #include <cstdio>
- #include <iomanip>
- #include <windows.h>
- using namespace std;
- //Описание динамического списка
- struct comp {
- char dest[20]; // Пункт назначения
- char num[20]; // Номер рейса
- char FIO[40]; // ФИО пассажира
- char date[10]; //Дата вылета
- comp* next; //Ссылка на следущий элемент списка
- };
- char* fileName = new char[50];
- FILE* f1;
- struct dyn_list {
- comp* head; // Первый элемент (голова) списка
- comp* tail; // Последний элемент (хвост) списка
- };
- // Создание пустого списка
- void constr_list(dyn_list& l)
- {
- l.head = NULL;
- }
- // Проверка списка на пустоту
- bool chk_empty(dyn_list l)
- {
- return (l.head == NULL);
- }
- // Включение в список нового компонента
- void comp_in(dyn_list& l, char* de, char* nu, char* fio, char* da)
- {
- comp* c = new comp();
- strcpy_s(c->dest, 20, de);
- strcpy_s(c->num, 20, nu);
- strcpy_s(c->FIO, 20, fio);
- strcpy_s(c->date, 20, da);
- c->next = NULL;
- if (chk_empty(l))
- l.head = c;
- else
- l.tail->next = c;
- l.tail = c;
- }
- // Поиск компонента по номеру рейса
- comp* search(dyn_list l, char* n)
- {
- while (l.head != NULL)
- {
- if (!strcmp(l.head->num, n))
- return l.head;
- l.head = l.head->next;
- }
- return l.head;
- }
- //ФУНКЦИЯ НОВЫЕ ЗАПИСИ
- void news(dyn_list& vars1) {
- cout << "Введите пункт назначения: ";
- char buf_dest[20];
- cin >> buf_dest;
- cout << "Введите номер рейса: ";
- char buf_num[20];
- cin >> buf_num;
- cout << "Введите ФИО пассажира: ";
- char buf_FIO[40];
- cin >> buf_FIO;
- cout << "Введите дату вылета: ";
- char buf_date[10];
- cin >> buf_date;
- comp_in(vars1, buf_dest, buf_num, buf_FIO, buf_date);
- }
- //ФУНКЦИЯ ПРОСМОТРА БАЗЫ
- void print(dyn_list l) {
- cout << setw(25) << left << "Пункт назначения: " << setw(45) << left << "Номер рейса: " << setw(45) << "ФИО пассажира: " << left << "Дата вылета: " << endl;
- while (l.head != NULL) {
- cout << setw(45) << left << l.head->dest << setw(45) << left << l.head->num << setw(45) << left << l.head->FIO << setw(45) << left << l.head->date << endl;
- l.head = l.head->next;
- }
- }
- //ФУНКЦИЯ УДАЛЕНИЯ
- // Удаление компонента из списка
- void comp_del(dyn_list& l, comp* c) {
- if (c == l.head) {
- l.head = c->next;
- return;
- }
- comp* r = new comp();
- r = l.head;
- while (r->next != c)
- r = r->next;
- r->next = c->next;
- delete c;
- }
- void del(dyn_list& vars1) {
- cout << "Введите город, информацию о котором вы хотите удалить из базы данных: ";
- char buf[20];
- cin >> buf;
- comp* p = new comp();
- p = search(vars1, buf);
- if (p)
- comp_del(vars1, p);
- else
- cout << "Информации об этом городе нет!" << endl;
- }
- //ФУНКЦИЯ ВЫХОДА
- void output(dyn_list vars3) {
- ofstream* out = new ofstream(fileName);
- while (vars3.head != NULL)
- {
- out->write(vars3.head->dest, strlen(vars3.head->dest));
- out->write(" ", 1);
- out->write(vars3.head->num, strlen(vars3.head->num));
- out->write(" ", 1);
- out->write(vars3.head->FIO, strlen(vars3.head->FIO));
- out->write(" ", 1);
- out->write(vars3.head->date, strlen(vars3.head->date));
- out->write(" ", 1);
- vars3.head = vars3.head->next;
- }
- out->close();
- }
- //ФУНКЦИЯ ДОБАВЛЕНИЯ
- void change(dyn_list vars2) {
- cout << "Введите город, информацию о котором хотите изменить: ";
- char buf_n[20];
- cin >> buf_n;
- char buf_n1[20];
- int vibor;
- do {
- cout << "Какую информацию будем менять(название(1)/численность(2)/статус(3))? -> ";
- cin >> vibor;
- switch (vibor) {
- case 1: cout << "Введите новое название города: ";
- cin >> buf_n1; break;
- case 2: cout << "Введите новую численность населения: ";
- cin >> buf_n1; break;
- case 3: cout << "Введите новый статус города: ";
- cin >> buf_n1; break;
- }
- } while ((vibor < 1) || (3 < vibor));
- comp* p = new comp();
- p = search(vars2, buf_n);
- if (p) {
- switch (vibor) {
- case 1: strcpy_s(p->dest, 20, buf_n1); break;
- case 2: strcpy_s(p->num, 20, buf_n1); break;
- case 3: strcpy_s(p->FIO, 40, buf_n1); break;
- case 4: strcpy_s(p->date, 10, buf_n1); break;
- }
- }
- else
- cout << "Такой город не найден!" << endl;
- }
- //ФУНКЦИЯ ПОИСКА
- void poisk(dyn_list vars1) {
- cout << "Введите номер рейса и дату вылета: ";
- char buf[20];
- cin >> buf;
- comp* p = new comp();
- p = search(vars1, buf);
- if (p) {
- cout << "Пункт назначения: " << p->dest << endl;
- cout << "ФИО пассажира: " << p->FIO << endl;
- }
- else
- cout << "Информации по номеру рейса и дате вылета нет!" << endl;
- }
- int main() {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- char* buf_dest = new char[20];
- char* buf_num = new char[20];
- char* buf_FIO = new char[40];
- char* buf_date = new char[10];
- dyn_list vars; // Динамический список
- cout << "Работаем с базой данных!";
- cout << "Введите имя файла -> ";
- cin >> fileName;
- ifstream* inp = new ifstream(fileName);
- f1 = fopen(fileName, "r");
- if (!inp->good()) {
- cout << "Ошибка в открытии файла!\n";
- system("PAUSE");
- return 0;
- }
- constr_list(vars);
- cout << "\nИнформация, содержащаяся в исходном файле:\n" << endl;
- while (!inp->eof()) {
- inp->getline(buf_dest, 20, ' ');
- cout << buf_dest << " ";
- inp->getline(buf_num, 20, ' ');
- cout << buf_num << " ";
- inp->getline(buf_FIO, 40, ' ');
- cout << buf_FIO << " " << endl;
- inp->getline(buf_date, 10, ' ');
- cout << buf_date << " " << endl;
- comp_in(vars, buf_dest, buf_num, buf_FIO, buf_date);
- }
- system("pause");
- inp->close();
- int n;
- do {
- system("cls");
- cout << "---------Menu---------" << endl;
- cout << "[1] - Новые записи" << endl;
- cout << "[2] - Показать записи" << endl;
- cout << "[3] - Изменить запись" << endl;
- cout << "[4] - Удалить запись" << endl;
- cout << "[5] - Поиск" << endl;
- cout << "[6] - Выход" << endl;
- cout << "Выбор: ";
- cin >> n;
- switch (n) {
- case 1: news(vars); break;
- case 2: system("cls"); print(vars); cout << endl; system("pause"); break;
- case 3: change(vars); break;
- case 4: del(vars); break;
- case 5: system("cls"); poisk(vars); cout << endl; system("pause"); break;
- case 6: output(vars); break;
- }
- } while (n != 6);
- system("PAUSE");
- return 0;
- }
Add Comment
Please, Sign In to add comment