Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <locale>
- // Задаём стуктуру для данных
- typedef struct {
- char
- name[15],
- firstname[15],
- year[15],
- phone[15],
- mail[30];
- } adbook;
- typedef struct {
- adbook* list;
- unsigned count;
- } database;
- void adddatabase(database &db); // Добавим человека в бд
- void readdarabase(database &db); // Чтение БД из файла
- void showdatabase(database &db); // Вывод БД на экран
- void editdatebase(database &db); // Редактируем БД
- void deletedatabase(database &db); // Удаляем конкретного человека из бд
- void searchman(database &db); // Поиск по бд по фамилии
- void writedatabase(database &db); // Сохраняем БД на диск
- void sortDb(database &db); // Сортируем бд
- int main()
- {
- setlocale(LC_ALL, "Russian"); // Установим русскую кодировку для отображения
- database db;
- int a, b; // счетчики для case
- db.list = NULL;
- db.count = 0;
- do
- { // Выбираем как действовать
- printf("\n1 - создать новую базу данных\n2 - открыть существующую\n3 - выход\n");
- scanf("%d", &a);
- switch (a)
- {
- case 1: adddatabase(db); break;
- case 2: readdarabase(db); break;
- case 3: exit(0);
- }
- } while (a < 0 || a > 3);
- do
- {
- printf("1 - Посмотреть базу данных\n2 - редактировать данные\n3 - добавить\n4 - удалить человека полностью\n5 - Сохранить\n6 - Поиск\n7 - Выход\n");
- scanf("%d", &b);
- switch (b)
- { // брейк для выхода из кейса после вызова функции
- case 1: showdatabase(db); b = 0; break;
- case 2: editdatebase(db); b = 0; break;
- case 3: adddatabase(db); b = 0; break;
- case 4: deletedatabase(db); b = 0; break;
- case 5: writedatabase(db); b = 0; break;
- case 6: searchman(db); b = 0;
- }
- } while (b != 7);
- free(db.list); // освобождаем память
- return 0;
- }
- void adddatabase(database &db)
- {
- printf("\nВведите кол-во студентов:\n");
- int n;
- scanf("%d", &n);
- if ((db.list = (adbook *)realloc(db.list, (n + db.count) * sizeof(adbook))) == NULL) // Проверяем выделилась ли память
- {
- printf("невозможно выделить память");
- exit(0);
- }
- for (int i = db.count; i < (n + db.count); i++)
- {
- printf("Фамилия: ");
- scanf("%s", db.list[i].name);
- printf("Имя: ");
- scanf("%s", db.list[i].firstname);
- printf("Год рождения: ");
- scanf("%s", db.list[i].year);
- printf("Номер телефона: ");
- scanf("%s", db.list[i].phone);
- printf("Почта: ");
- scanf("%s", db.list[i].mail);
- printf("_____________________\n");
- }
- db.count += n;
- }
- void readdarabase(database &db)
- {
- FILE *f = fopen("database.txt", "r"); // Открываем файл для чтения
- db.count = 0;
- unsigned size;
- fseek(f, 0, SEEK_END); // Получаем верный размер файла
- size = ftell(f); //присваиваем данные о размере
- db.count = size / sizeof(adbook); // определяем количество записей
- fseek(f, 0, SEEK_SET);
- if (!(db.list = (adbook *)malloc(size)))
- { // Проверяем выделилась ли память
- printf("невозможно выделить память");
- exit(0);
- }
- for (int i = 0; i < db.count; i++)
- {
- fread(&db.list[i], sizeof(adbook), 1, f); // считываем из файла в структуру
- }
- fclose(f);
- }
- void showdatabase(database &db)
- {
- int i = 0;
- sortDb(db); // Сортируем БД перед выводом на экран
- while (i < db.count)
- { // выводим бд пока не закончатся записи
- printf("%s|%s|%s|%s|%s|\n", &db.list[i].name, &db.list[i].firstname, &db.list[i].year, &db.list[i].phone, &db.list[i].mail);
- printf("_________________________________________________\n");
- i++;
- }
- }
- void editdatebase(database &db)
- {
- char name[24];
- int b;
- printf("Введите фамилию для редактирования\n");
- scanf("%s", name);
- for (int i = 0; i < db.count; ++i)
- {
- if ((strcmp(name, db.list[i].name)) == 0) // Найдём то, что будет редактировать
- {
- do
- {
- printf("что менять?\n1 - Имя\n2 - Год рождения\n3 - Телефон\n4 - Почта\n5 - назад\n");
- scanf("%d", &b);
- switch (b)
- {
- case 1:
- printf("Имя: ");
- scanf("%s", db.list[i].firstname);
- break;
- case 2:
- printf("Год рождения: ");
- scanf("%s", db.list[i].year);
- break;
- case 3:
- printf("Телефон: ");
- scanf("%s", db.list[i].phone);
- break;
- case 4:
- printf("Почта: ");
- scanf("%s", db.list[i].mail);
- break;
- }
- } while (b < 0 || b > 4);
- }
- } // Если не найдём, то скажем об этом
- printf("Нет такого человека в базе данных\n");
- }
- void searchman(database &db) // Поиск человека в базе по фамилии
- {
- char name[24];
- printf("Введите фамилию для поиска:\n");
- scanf("%s", name); // введём фамилию для поиска
- for (int i = 0; i < db.count; i++)
- {
- if ((strcmp(name, db.list[i].name)) == 0)
- { // Если найден человек, то выводим
- printf("%s|%s|%s|%s|%s|\n", db.list[i].name, db.list[i].firstname, db.list[i].year, db.list[i].phone, db.list[i].mail);
- break;
- }
- else if ((strcmp(name, db.list[i].name)) != 0) printf("нет такого человека\n");
- }
- }
- void deletedatabase(database &db)
- {
- char name[24];
- printf("Введите фамилию для удаления:\n");
- scanf("%s", name);
- for (int i = 0; i < db.count; i++)
- { // Удаляем человека по фамилии. После удаления перераспределим память
- if ((strcmp(name, db.list[i].name)) == 0)
- {
- db.list[i] = db.list[i + 1];
- db.list = (adbook *)realloc(db.list, sizeof(adbook) * (--db.count));
- return;
- }
- }
- printf("нет такого человека\n");
- }
- void writedatabase(database &db)
- {
- FILE *f;
- int i = 0;
- f = fopen("database.txt", "w"); // открываем файл для записи
- while (i < db.count)
- { // запишем данные из структуры в файл
- fwrite(&db.list[i], sizeof(adbook), 1, f);
- i++;
- }
- fclose(f);
- }
- void sortDb(database &db)
- {
- adbook cur;
- //Отсортируем Бд по фамилии
- int k;
- for (int i = 0; i < (db.count - 1); ++i)
- {
- for (int j = (i + 1); j < db.count; ++j)
- {
- k = 0;
- if (db.list[i].name != db.list[j].name)
- {
- while (db.list[i].name[k] == db.list[j].name[k]) k++;
- if (db.list[i].name[k] > db.list[j].name[k])
- {
- cur = db.list[i];
- db.list[i] = db.list[j];
- db.list[j] = cur;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement