Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- const char fileName[] = "D:\\i.txt";
- const char newFileName[] = "D:\\temp.txt";
- struct person {
- char lastName[50];
- char departName[50];
- int salary;
- };
- void inputNewPerson()
- {
- struct person curr;
- printf("Введите данные для добавления нового работника (название отдела, фамилия сотрудника, заработная плата).\n");
- scanf("%s %s %d", &curr.departName, &curr.lastName, &curr.salary);
- FILE* base = fopen(fileName, "a");
- fprintf(base, "%s %s %d ", curr.departName, curr.lastName, curr.salary);
- fclose(base);
- }
- void editPerson(char lastName[], int forDelete)
- {
- struct person curr, edit;
- FILE* base = fopen(fileName, "r+");
- FILE* new = fopen(newFileName, "w");
- int begin, end = -1;
- do
- {
- begin = ftell(base);
- fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- if (strcmp(curr.lastName, lastName) == 0)
- {
- end = ftell(base);
- }
- } while ((feof(base) == 0) && (strcmp(curr.lastName, lastName) != 0));
- rewind(base);
- if (end > -1)
- {
- while (ftell(base) != begin)
- {
- fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- fprintf(new, "%s %s %d ", curr.departName, curr.lastName, curr.salary);
- }
- if (forDelete == 1)
- {
- fseek(base, end, SEEK_SET);
- printf("Сотрудник удалён из базы!\n");
- }
- else
- {
- fscanf(base, "%s %s %d ", &edit.departName, &edit.lastName, &edit.salary);
- int choice = 0;
- do
- {
- printf("Что вы хотите изменить в записи о сотруднике? (1 - отдел, 2 - фамилия, 3 - зарплата): ");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- printf("Введите название отдела: ");
- scanf("%s", &edit.departName);
- break;
- case 2:
- printf("Введите фамилию работника: ");
- scanf("%s", &edit.lastName);
- break;
- case 3:
- printf("Введите зарплату сотрудника: ");
- scanf("%d", &edit.salary);
- break;
- default:
- break;
- }
- printf("Хотите изменить ещё что-нибудь о сотруднике? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- printf("Изменения сохранены!\n");
- } while (choice == 1);
- fprintf(new, "%s %s %d ", edit.departName, edit.lastName, edit.salary);
- }
- while (feof(base) == 0)
- {
- fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- fprintf(new, "%s %s %d ", curr.departName, curr.lastName, curr.salary);
- }
- }
- else
- {
- printf("Сотрудника с такой фамилией не найдено!\n");
- }
- fclose(base);
- fclose(new);
- if (end > -1)
- {
- remove(fileName);
- rename(newFileName, fileName);
- }
- }
- void task()
- {
- struct person curr;
- FILE* base = fopen(fileName, "r");
- int workerCount = 0, allSalary = 0;
- float averageSalary = 0;
- char department[50];
- //fprintf(base, "А Иванов 540 ");
- //fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- //printf("%s %s %d", curr.departName, curr.lastName, curr.salary);
- printf("Введите название отдела: ");
- scanf("%s", &department);
- do
- {
- fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- if (strcmp(curr.departName, department) == 0)
- {
- workerCount++;
- allSalary += curr.salary;
- }
- } while (feof(base) == 0);
- if (workerCount > 0)
- {
- averageSalary = allSalary / workerCount;
- }
- fclose(base);
- printf("Общие выплаты по отделу %s: %d\n", department, allSalary);
- printf("Среднемесячная зарплата сотрудника отдела: %g\n", averageSalary);
- }
- void output()
- {
- struct person curr;
- FILE* base = fopen(fileName, "r");
- do
- {
- fscanf(base, "%s %s %d ", &curr.departName, &curr.lastName, &curr.salary);
- printf("Отдел: %s\t Фамилия: %s\t Зарплата: %d\n", curr.departName, curr.lastName, curr.salary);
- } while (feof(base) == 0);
- fclose(base);
- }
- int main()
- {
- SetConsoleOutputCP(1251);
- SetConsoleCP(1251);
- struct person temp;
- int choice = -1;
- while (choice != 0)
- {
- printf("Вывести все записи о сотрудниках? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- if (choice == 1)
- {
- output();
- }
- printf("Желаете найти общую сумму выплат за месяц, а также среднемесячную зарплату? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- if (choice == 1)
- {
- task();
- }
- printf("Желаете добавить ещё одного сотрудника? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- if (choice == 1)
- {
- inputNewPerson();
- }
- char lastName[50];
- printf("Желаете удалить какого-либо сотрудника из базы данных? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- if (choice == 1)
- {
- printf("Введите фамилию сотрудника, которого желаете исключить: ");
- scanf("%s", &lastName);
- editPerson(lastName, 1);
- }
- printf("Желаете отредактировать данные о каком-либо сотруднике? (1 - да, 0 - нет) : ");
- scanf("%d", &choice);
- if (choice == 1)
- {
- printf("Введите фамилию сотрудника, данные о котором необходимо отредактировать: ");
- scanf("%s", &lastName);
- editPerson(lastName, 0);
- }
- printf("Желаете повторить какие-либо действия? (1 - да, 0 - нет): ");
- scanf("%d", &choice);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement