Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <iostream>
- // Заменить названия полей структуры
- struct Student {
- char name[50];
- double group;
- int year;
- int phys, math, info, chem;
- double average;
- };
- // Заменить названия прототипов функций
- int ShowMenu();
- int CreateFile(char*);
- int AddRecord(const char*);
- int EditRecord(const char*);
- int ViewAll(const char*, int);
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "Rus");
- char fileName[256] = ""; // Инициализируем char для хранения названия файла
- do {
- int value = ShowMenu(); // Инциализируем value с значением функции для показа меню
- switch (value)
- {
- case 1:
- CreateFile(fileName); // Вызываем функцию создания файла, которая принимает имя файла из char
- break;
- case 2:
- AddRecord(fileName); // Добавление данных
- break;
- case 3:
- EditRecord(fileName); // Изменение данных
- break;
- case 4:
- ViewAll(fileName, 0); // Показать всех
- break;
- case 5:
- ViewAll(fileName, 1); // Индивидуальное задание
- break;
- default:
- return 0;
- }
- } while (true);
- return 0;
- }
- // Функции --------------------------------------------
- int ShowMenu() // Функция для вывода меню
- {
- do {
- puts("====== Menu =====");
- puts(" 1 - Create file\n 2 - Add record\n 3 - Edit record");
- puts(" 4 - View all\n 5 - Processing\n\n 0 - Exit");
- printf(">: ");
- int value;
- scanf_s("%d", &value);
- if (value >= 0 && value <= 5) {
- return value;
- }
- cout << "Вы ввели некорректное значение. Ознакомьтесь с таблицей" << endl;
- } while (true);
- }
- void InputString(char* str, int length) // функция для записи названия файла
- {
- do {
- gets_s(str, length);
- } while (str[0] == 0);
- }
- unsigned InputRate() // Функция для рейтинга
- {
- unsigned rate = 0;
- do {
- scanf_s("%u", &rate);
- } while (rate < 1 || rate > 10);
- return rate;
- }
- int CreateFile(char* fileName) // Функция для создания файла
- {
- cout << "Введите название нового файла:" << endl;
- InputString(fileName, 255);
- FILE* f = fopen(fileName, "wb");
- if (f == NULL) {
- puts("ERROR: Can't create file!");
- return -1;
- }
- fclose(f);
- puts("File was created!");
- return 0;
- }
- int AddRecord(const char* fileName) // Функция для добавления данных
- {
- FILE* f = fopen(fileName, "ab");
- if (f == NULL) {
- puts("ERROR: File is not found!");
- return -1;
- }
- Student rec;
- printf("Input student name: ");
- InputString(rec.name, 30);
- printf("Input year of born: ");
- scanf_s("%u", &rec.year);
- printf("Input group number: ");
- scanf_s("%u", &rec.group);
- printf("Physic rate: ");
- rec.phys = InputRate();
- printf("Mathematic rate: ");
- rec.math = InputRate();
- printf("Informatic rate: ");
- rec.info = InputRate();
- printf("Chemistry rate: ");
- rec.chem = InputRate();
- rec.average = 0.25 * (rec.phys + rec.math + rec.info + rec.chem);
- if (1 != fwrite(&rec, sizeof(Student), 1, f)) {
- puts("ERROR: Record was not saved!");
- fclose(f);
- return -1;
- }
- puts("Record was saved!");
- fclose(f);
- return 0;
- }
- void OutRecord(FILE* r, const Student& rec, unsigned num) // Функция для вывода результата
- {
- printf("| %2u %-30s %4u %6u %2u %2u %2u %2u %3.1lf |\n",
- num, rec.name, rec.year, rec.group, rec.phys, rec.math, rec.info, rec.chem, rec.average);
- if (r != NULL) {
- fprintf(r, "| %2u %-30s %4u %6u %2u %2u %2u %2u %3.1lf |\n",
- num, rec.name, rec.year, rec.group, rec.phys, rec.math, rec.info, rec.chem, rec.average);
- }
- }
- int EditRecord(const char* fileName) // Функция для изменения данных
- {
- FILE* f = fopen(fileName, "rb+");
- if (f == NULL) {
- puts("ERROR: File is not found!");
- return -1;
- }
- unsigned num;
- printf("Input record number: ");
- scanf_s("%u", &num);
- if (0 != fseek(f, (num - 1) * sizeof(Student), SEEK_SET)) {
- puts("ERROR: Record is not found!");
- fclose(f);
- return -1;
- }
- Student rec;
- if (1 != fread(&rec, sizeof(Student), 1, f)) {
- puts("ERROR: Can not read the record!");
- fclose(f);
- return -1;
- }
- puts("Old value: ");
- OutRecord(NULL, rec, num);
- printf("Input student name: ");
- InputString(rec.name, 30);
- printf("Input year of born: ");
- scanf_s("%u", &rec.year);
- printf("Input group number: ");
- scanf_s("%u", &rec.group);
- printf("Physic rate: ");
- rec.phys = InputRate();
- printf("Mathematic rate: ");
- rec.math = InputRate();
- printf("Informatic rate: ");
- rec.info = InputRate();
- printf("Chemistry rate: ");
- rec.chem = InputRate();
- rec.average = 0.25 * (rec.phys + rec.math + rec.info + rec.chem);
- fseek(f, (num - 1) * sizeof(Student), SEEK_SET);
- if (1 != fwrite(&rec, sizeof(Student), 1, f)) {
- puts("ERROR: Record was not saved!");
- fclose(f);
- return -1;
- }
- puts("Record was saved!");
- fclose(f);
- return 0;
- }
- void OutHeader(FILE* r)
- {
- puts("| N Student name Year Group Rates Ave |");
- if (r != NULL) {
- fputs("| N Student name Year Group Rates Ave |\n", r);
- }
- }
- int ViewAll(const char* fileName, int mode)
- {
- FILE* f = fopen(fileName, "rb");
- if (f == NULL) {
- puts("ERROR: File is not found!");
- return -1;
- }
- Student rec;
- FILE* r = fopen(mode == 0 ? "result.txt" : "report.txt", "wt");
- OutHeader(r);
- unsigned num = 1;
- while (1 == fread(&rec, sizeof(Student), 1, f)) {
- if ((mode == 0) || ((rec.name[0] == 'A') && (rec.math >= 8) && (rec.math <= 9)))
- OutRecord(r, rec, num++);
- }
- fclose(r);
- fclose(f);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement