Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Задание № С-11
- Тема курсовой работы:
- "Разработка информационно-справочной системы учёта клиентов рекламной компании"
- Система должна предоставлять возможность:
- - формировать список клиентов, добавляя в имеющийся или создавая новый список
- - просматривать всех клиентов рекламной компании
- - осуществлять поиск клиентов, чей срок договора истекает на определённую дату
- - осуществлять поиск клиентов в заданном округе
- - получать информацию о постоянных клиентах рекламной компании
- Выполнил студент группы П-21,
- Самойленко Александр
- Магистрант: Леонид Седов (undefiened@gmail.com)
- Руководитель курсовой работы: Соколова Натэлла Юрьевна (sokolovanat@yandex.ru) */
- /* Алгоритм работы:
- 1. Программа предлагает пользователю выбор: работу с готовой БД или создание новой.
- 2. Если выбирается новая БД, пользователя просят выполнить её заполнение, если старая - предлагают дополнить или пропустить этот пункт.
- 3. Непосредственно работа с БД:
- а) поиск клиента по городу
- б) поиск по дате истечения договора
- в) вывод всех постоянных клиентов компании */
- #include <iostream>
- #include <fstream> // подключение потоков для работы с текстовыми файлами
- #include <cstring> // strlen(), strcmp()
- #include <iomanip> // setw()
- using namespace std;
- int answer;
- struct Clients {
- char surname[12]; // Фамилия
- char name[12]; // Имя
- char patronymic[12]; // Отчество
- char date[11]; // Дата в формате ДД.ММ.ГГГГ
- char region[12]; // Город
- char regularCustomer[4]; // Постоянный клиент (yes/no)
- int number; // Номер клиента в списке
- Clients *next = NULL; // Указатель на следующий элемент очереди
- };
- Clients* createQueueFromTxt(ifstream &f) { // Функция создаёт односвязный список (очередь) считывая БД из текстового файла
- Clients *p = NULL, *head = NULL;
- int number = 2;
- while (!f.eof()) { // Пока не конец файла
- if (!head) { // Если нет 1-го элемента
- head = new Clients;
- f >> head->surname >> head->name >> head->patronymic >> head->date >> head->region >> head->regularCustomer;
- head->number = 1;
- head->next = p;
- p = head;
- }
- else { // Если 1-ый элемент уже создан
- Clients *s = new Clients;
- f >> s->surname >> s->name >> s->patronymic >> s->date >> s->region >> s->regularCustomer;
- s->number = number;
- number++;
- s->next = NULL;
- p->next = s;
- p = s;
- }
- }
- return head; // Возвращаем указатель на 1-ый элемент очереди
- }
- void saveChangesInTXT(ofstream &file, Clients *f) {
- while (f) {
- file.write(f->surname, strlen(f->surname));
- file.write(" ", strlen(" "));
- file.write(f->name, strlen(f->name));
- file.write(" ", strlen(" "));
- file.write(f->patronymic, strlen(f->patronymic));
- file.write(" ", strlen(" "));
- file.write(f->date, strlen(f->date));
- file.write(" ", strlen(" "));
- file.write(f->region, strlen(f->region));
- file.write(" ", strlen(" "));
- file.write(f->regularCustomer, strlen(f->regularCustomer));
- file.write("\n", strlen("\n"));
- f = f->next;
- }
- cout << "Изменения записаны в файл!\n";
- }
- Clients* addNewClient(Clients *f) {
- cout << "Введите нового клиента по образцу, например:\n";
- cout << "Ivanov Ivan Ivanovich **.**.**** Moscow no\n";
- Clients *s = new Clients;
- cin >> s->surname >> s->name >> s->patronymic >> s->date >> s->region >> s->regularCustomer;
- if (f) {
- int number = 0;
- while (f->next) {
- number++;
- f = f->next;
- }
- f->next = s;
- s->next = NULL;
- s->number = number;
- }
- else {
- s->number = 1;
- s->next = NULL;
- }
- return s;
- }
- void editClient(Clients *f, int number) {
- while (f){
- if (number == f->number) {
- cout << "Клиент найден!\n";
- cout << "Введите информацию заново, например\n";
- cout << "Ivanov Ivan Ivanovich **.**.**** Moscow no\n";
- cin >> f->surname >> f->name >> f->patronymic >> f->date >> f->region >> f->regularCustomer;
- break;
- }
- f = f->next;
- }
- }
- Clients* removeClient(Clients *f, int number) {
- Clients *mem, *first, *rm;
- first = mem = f;
- bool flag = false;
- if (f->number == 1) { // Если нужный клиент в начале очереди
- cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
- flag = true;
- char answer;
- cin >> answer;
- if (answer == 'y') {
- first = first->next;
- mem = f;
- }
- while (f) {
- f->number = f->number--;
- f = f->next;
- }
- }
- while (f->next) {
- if (number == f->number) { // Если нужный клиент не первый и не последний
- cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
- flag = true;
- char answer;
- cin >> answer;
- if (answer == 'y') {
- rm = f;
- f = f->next;
- mem->next = f;
- delete rm;
- }
- while (f) {
- f->number = f->number--;
- f = f->next;
- }
- break;
- }
- mem = f;
- }
- if (number == f->number) { // Если нужный клиент в конце
- cout << "Вы уверены, что хотите удалить этого клиента?(y): ";
- flag = true;
- char answer;
- cin >> answer;
- if (answer == 'y') {
- mem->next = NULL;
- delete f;
- }
- }
- if (!flag) cout << "Совпадений не найдено!";
- return first;
- }
- void queueOutput(Clients *f) { // Функция позволяет вывести односвязный список клиентов в виде таблицы
- cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
- while (f) {
- cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
- f = f->next;
- }
- }
- void findInQueue(Clients *f, int choice) { // Функция для работы с очередью
- switch (choice) {
- case 2:
- char region[12];
- cout << "Введите город: ";
- cin >> region;
- cout << "Клиенты из города " << region << ":\n";
- cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
- while (f) { // пока очередь существует. Аналог while(f != NULL)
- if (!strcmp(f->region, region)) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
- f = f->next;
- }
- break;
- case 3:
- char date[11];
- cout << "Введите дату: ";
- cin >> date;
- cout << "Клиенты, договор которых истекает " << date << ":\n";
- cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
- while (f) {
- if (!strcmp(f->date, date)) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
- f = f->next;
- }
- break;
- case 4:
- cout << "Постоянные клиенты компании:\n";
- cout << "№" << setw(12) << "Фамилия" << setw(12) << "Имя" << setw(12) << "Отчество" << setw(13) << "Ист. догов." << setw(10) << "Город" << setw(12) << "Постоян.\n";
- while (f) {
- if (!strcmp(f->regularCustomer, "yes")) cout << f->number << setw(12) << f->surname << setw(12) << f->name << setw(12) << f->patronymic << setw(12) << f->date << setw(11) << f->region << " " << f->regularCustomer << endl;
- f = f->next;
- }
- break;
- }
- }
- void mainMenu() {
- while (true) {
- cout << "** Меню выбора списка **\n";
- cout << "1. Создать новый список\n";
- cout << "2. Выбрать существующий\n";
- cin >> answer;
- if ((answer == 1) || (answer == 2)) return;
- cout << "Ошибка! Выберите один из предложенных пунктов:\n";
- }
- }
- int clientsMenu() {
- while (true) {
- cout << "** Меню работы с клиентами **\n";
- cout << "1. Добавить клиента\n";
- cout << "2. Редактировать клиента\n";
- cout << "3. Удалить клиента\n";
- cout << "4. Вывести список клиентов...\n";
- cout << "5. Выбрать другой список\n";
- int a;
- cin >> a;
- if ((a >= 1) && (a <= 5)) answer = a;
- else cout << "Ошибка! Введите номер одного из предложенных вариантов!\n";
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- char filename[32];
- int number;
- while (true) {
- mainMenu();
- if (answer == 1) {
- cout << "Введите имя файла1: ";
- cin >> filename;
- ofstream newFile(filename, ios::out | ios::trunc);
- if (!newFile) { // Если не удалось создать поток выводим сообщение и закрываем программу с кодом ошибки '1'
- cout << "Не удалось создать " << filename << "!";
- cout << "Перезапустите программу!\n";
- system("pause");
- return 1;
- }
- while (true) {
- clientsMenu();
- Clients *head = NULL;
- switch (answer)
- {
- case 1:
- break;
- case 2:
- cout << "Введите номер клиента, которого вы хотите редактировать: ";
- cin >> number;
- break;
- case 3:
- cout << "Введите номер клиента, которого вы хотите удалить: ";
- cin >> number;
- break;
- case 4:
- break;
- case 5:
- break;
- default: cout << "Ошибка! Выберите один из предложенных пунктов:\n";
- break;
- }
- }
- }
- else {
- cout << "Введите имя файла2: ";
- cin >> filename;
- ifstream oldFile(filename, ios::out); // Создаём поток (файл) для чтения БД
- if (!oldFile) { // Если не удалось создать поток выводим сообщение и закрываем программу с кодом ошибки '1'
- cout << filename << " не существует!\n";
- cout << "Перезапустите программу и укажите верное имя!\n";
- system("pause");
- return 1;
- }
- Clients *first = createQueueFromTxt(oldFile);
- }
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement