Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Определение макроса для отключения предупреждений о безопасности для функций, таких как scanf и fopen
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- // Максимальное количество записей в базе данных
- #define MAX_RECORDS 300
- // Структура для представления записи в базе данных
- struct Record {
- char surname[50];
- int yearOfBirth;
- double salary;
- };
- // Функция для добавления записи в базу данных
- void addRecord(struct Record database[], int* numRecords) {
- if (*numRecords < MAX_RECORDS) {
- printf("Введите данные для записи:\n");
- printf("Фамилия: ");
- scanf("%s", database[*numRecords].surname);
- printf("Год рождения: ");
- scanf("%d", &database[*numRecords].yearOfBirth);
- printf("Зарплата: ");
- scanf("%lf", &database[*numRecords].salary);
- (*numRecords)++;
- printf("Запись успешно добавлена.\n");
- }
- else {
- printf("Достигнуто максимальное количество записей.\n");
- }
- }
- // Функция для просмотра конкретной записи в базе данных
- void viewRecord(struct Record database[], int numRecords, int recordNumber) {
- if (recordNumber >= 1 && recordNumber <= numRecords) {
- printf("Данные для записи %d:\n", recordNumber);
- printf("Фамилия: %s\n", database[recordNumber - 1].surname);
- printf("Год рождения: %d\n", database[recordNumber - 1].yearOfBirth);
- printf("Зарплата: %.2lf\n", database[recordNumber - 1].salary);
- }
- else {
- printf("Неверный номер записи.\n");
- }
- }
- // Функция для сортировки записей в базе данных по фамилии в порядке возрастания
- void sortRecords(struct Record database[], int numRecords) {
- for (int i = 0; i < numRecords - 1; i++) {
- for (int j = 0; j < numRecords - i - 1; j++) {
- if (database[j].yearOfBirth > database[j + 1].yearOfBirth) {
- // Обмен записями, если они находятся в неправильном порядке
- struct Record temp = database[j];
- database[j] = database[j + 1];
- database[j + 1] = temp;
- }
- }
- }
- }
- // Функция для вывода всех записей в базе данных
- void printAllRecords(struct Record database[], int numRecords) {
- printf("Все записи:\n");
- for (int i = 0; i < numRecords; i++) {
- printf("%d. %s, %d, %.2lf\n", i + 1, database[i].surname, database[i].yearOfBirth, database[i].salary);
- }
- }
- // Функция для сохранения всех записей в файл
- void saveToFile(struct Record database[], int numRecords, const char* filename) {
- FILE* file = fopen(filename, "w");
- if (file != NULL) {
- for (int i = 0; i < numRecords; i++) {
- fprintf(file, "%s %d %.2lf\n", database[i].surname, database[i].yearOfBirth, database[i].salary);
- }
- fclose(file);
- }
- else {
- printf("Ошибка открытия файла для записи.\n");
- }
- }
- // Функция для чтения записей из файла
- void readFromFile(struct Record database[], int* numRecords, const char* filename) {
- FILE* file = fopen(filename, "r");
- if (file != NULL) {
- while (fscanf(file, "%s %d %lf", database[*numRecords].surname, &database[*numRecords].yearOfBirth, &database[*numRecords].salary) == 3) {
- (*numRecords)++;
- if (*numRecords >= MAX_RECORDS) {
- break;
- }
- }
- fclose(file);
- }
- else {
- printf("Ошибка открытия файла для чтения.\n");
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- // Инициализация массива записей базы данных и переменных
- struct Record database[MAX_RECORDS];
- int numRecords = 0;
- int choice;
- // Главный цикл программы
- do {
- // Вывод меню на экран
- printf("\nМеню:\n");
- printf("1. Добавить запись\n");
- printf("2. Просмотр записи\n");
- printf("3. Сортировка записей\n");
- printf("4. Просмотр всех записей\n");
- printf("5. Сохранить записи в файл\n");
- printf("6. Загрузить записи из файла\n");
- printf("7. Выход\n");
- // Ввод выбора пользователя
- printf("Введите ваш выбор: ");
- scanf("%d", &choice);
- // Обработка выбора пользователя
- switch (choice) {
- case 1:
- addRecord(database, &numRecords);
- break;
- case 2:
- if (numRecords > 0) {
- int recordNumber;
- printf("Введите номер записи: ");
- scanf("%d", &recordNumber);
- viewRecord(database, numRecords, recordNumber);
- }
- else {
- printf("Нет доступных записей.\n");
- }
- break;
- case 3:
- if (numRecords > 0) {
- sortRecords(database, numRecords);
- printf("Записи успешно отсортированы.\n");
- }
- else {
- printf("Нет доступных записей.\n");
- }
- break;
- case 4:
- if (numRecords > 0) {
- printAllRecords(database, numRecords);
- }
- else {
- printf("Нет доступных записей.\n");
- }
- break;
- case 5:
- if (numRecords > 0) {
- char filename[50];
- printf("Введите имя файла для сохранения: ");
- scanf("%s", filename);
- saveToFile(database, numRecords, filename);
- printf("Записи успешно сохранены в файл.\n");
- }
- else {
- printf("Нет доступных записей.\n");
- }
- break;
- case 6:
- {
- char filename[50];
- printf("Введите имя файла для чтения: ");
- scanf("%s", filename);
- readFromFile(database, &numRecords, filename);
- printf("Записи успешно загружены из файла.\n");
- }
- break;
- case 7:
- printf("Выход из программы.\n");
- break;
- default:
- printf("Неверный выбор. Пожалуйста, введите правильный вариант.\n");
- }
- } while (choice != 7);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement