#include <stdlib.h>
#include <stdio.h>
#include <cstring>
struct TT
{
char tiecher[40];
char discipline[40];
int course;
int semestr;
int audience;
};
TT data[10];
void ShowT(TT* data, int count);
void Edit(TT* data, int count);
void Add(TT* data, int count);
void Delete(TT* data, int count);
void Sort(TT* data, int count);
void Find(TT* data, int count);
using namespace std;
int Count = 10;
enum eCMD { CMD_EXIT = -1, CMD_NONE, CMD_READ, CMD_SHOW, CMD_EDIT, CMD_ADD, CMD_DELETE, CMD_SORT, CMD_FIND, CMD_SAVE, CMD_SAVE_2 };
extern bool change = false;
extern int Count;
void Readfile(TT* data, int* count)
{
char filename[50];
int str = 0;
puts("Введите имя файла: ");
scanf("%s", &filename);
fflush(stdin);
FILE* file = fopen(filename, "r");
if (!file)
{
printf("Файл не обнаружен.");
}
else
{
while (!feof(file))
{
fscanf(file, "%[^;];%[^;];%d;%d;%dn", data[str].tiecher, data[str].discipline, &data[str].course, &data[str].semestr, &data[str].audience);
++str;
}
*count = str;
fclose(file);
}
}
void Savefile(TT* data, int* count)
{
char filename[50];
printf("Введите имя файла:");
scanf("%s", &filename);
fflush(stdin);
char f;
printf("Вы хотите сохранить в txt или в csv формате?(t/c)");
scanf("%c", &f);
fflush(stdin);
FILE* file = fopen(filename, "w");
if (f == 'c')
{
for (int i = 0; i < *count; i++)
{
fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
}
}
else if (f == 't')
{
for (int i = 0; i < *count; i++)
{
fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
}
}
fclose(file);
}
void Savefile_2(TT* data, int* count)
{
FILE* file = fopen("Начальный.txt", "w");
for (int i = 0; i < *count; i++)
{
fprintf(file, "%s;%s;%d;%d;%d\n", data[i].tiecher, data[i].discipline, &data[i].course, &data[i].semestr, &data[i].audience);
}
fclose(file);
}
TT Data[1000];
eCMD Menushow()
{
while (true)
{
system("cls");
puts("Выберите действие:");
puts("1 - Открыть файл");
puts("2 - Просмотр данных");
puts("3 - Записать в файл");
puts("4 - Записать в новый файл");
puts("5 - Выход из программы");
unsigned opt;
fflush(stdin);
scanf("%u", &opt); // выбор действия
switch (opt)
{
case 1: return CMD_READ; //открыть файл
case 2: return CMD_SHOW; //просмотр данных
case 3: return CMD_SAVE_2; // Сохранить файл
case 4: return CMD_SAVE; // Сохранить в новый файл
case 5: return CMD_EXIT; // Выход
default: puts("Вы ввели неправильную команду");
system("pause");
}
}
}
int main()
{
int count = 0;
system("chcp 1251");
eCMD cmd = CMD_NONE;
int def_str = 0;
FILE* def = fopen("Начальный.txt", "r");
while (!feof(def))
{
fscanf(def, "%[^;];%[^;];%d;%d;%d\n", Data[def_str].tiecher, Data[def_str].discipline, &Data[def_str].course, &Data[def_str].semestr, &Data[def_str].audience);
++def_str;
}
Count = def_str;
while (true)
{
cmd = Menushow();
if (cmd == CMD_EXIT)
{
char t;
if (change == true)
{
printf("Файл был изменён. Хотитет сохранить данные?(y/n)");
fflush(stdin);
scanf("%c", &t);
if (t == 'y')
{
Savefile(Data, &Count);
puts("Файл успешно сохранён");
system("pause");
return 0;
}
else if (t == 'n')
{
puts("Работа завершена");
system("pause");
return 0;
}
}
else
{
puts("Работа завершена");
system("pause");
return 0;
}
}
switch (cmd)
{
case CMD_SHOW: ShowT(Data, Count); break;
case CMD_READ: Readfile(Data, &Count); break;
case CMD_SAVE: Savefile(Data, &Count); break;
case CMD_SAVE_2: Savefile_2(Data, &Count); break;
}
}
puts("Работа завершена");
system("pause");
return 0;
}
void ShowT(TT* data, int count)
{
eCMD cmd = CMD_NONE; // Инициализируем cmd значением CMD_NONE
while (true)
{
system("chcp 1251");
system("cls");
const char* t_tiecher = "Преподаватель";
const char* t_discipline = "Дисциплина";
const char* t_course = "Курс";
const char* t_semestr = "Семестр";
const char* t_audience = "Аудитория";
printf("------------------------------------------------\n");
printf("| № |%10s|%10s|%10d|%9d|%10d|\n", t_tiecher, t_discipline, t_course, t_semestr, t_audience);
printf("------------------------------------------------\n");
for (int i = 0; i < count; i++)
{
printf("|%-3d|%10s|%10s|%10d|%9d|%10d|\n", i + 1, data[i].tiecher, data[i].discipline, data[i].course, data[i].semestr, data[i].audience);
printf("------------------------------------------------\n");
}
cmd = Menushow();
if (cmd == CMD_EXIT)
{
break;
}
switch (cmd)
{
case CMD_EDIT: Edit(data, count); break;
case CMD_ADD: Add(data, count); break;
case CMD_DELETE: Delete(data, count); break;
case CMD_SORT: Sort(data, count); break;
case CMD_FIND: Find(data, count); break;
//case CMD_CALC: Calc(data, count); break;
}
}
}
void Edit(TT* data, int count)
{
int s, k;
TT y;
printf("Введите номер строки, которую хотите изменить:");
scanf("%d", &s);
system("cls");
printf("-----------------------------------------------------------------------------\n");
printf("|%-20s|%-10s|%-20d|%-20d|%-20d|\n", data[s - 1].tiecher, data[s - 1].discipline, data[s - 1].course, data[s - 1].semestr, data[s - 1].audience);
printf("-----------------------------------------------------------------------------\n");
fflush(stdin);
printf("Введите номер столбца, который хотите изменить:");
scanf("%d", &k);
switch (k)
{
case 1: fflush(stdin);
printf("Введите преподавателя: ");
scanf("%39[^\n]", y.tiecher);
strcpy(data[s - 1].tiecher, y.tiecher);
change = 1;
break;
case 2: fflush(stdin);
printf("Введите дисциплину: ");
scanf("%39[^\n]", y.discipline);
strcpy(data[s - 1].discipline, y.discipline);
change = 1;
break;
case 3: fflush(stdin);
printf("Введите курс: ");
scanf("%d", &y.course);
data[s - 1].course = y.course;
change = 1;
break;
case 4: fflush(stdin);
printf("Введите семестр: ");
scanf("%d", &y.semestr);
data[s - 1].semestr = y.semestr;
change = 1;
break;
case 5: fflush(stdin);
printf("Введите аудиторию: ");
scanf("%d", &y.audience);
data[s - 1].audience = y.audience;
change = 1;
break;
}
}
void Sort(TT* data, int count)
{
system("chcp 1251");
int g = 0;
char f;
printf("Введите номер столбца, который хотите сортировать(1-5): ");
scanf("%d", &g);
fflush(stdin);
printf("Сортировать по возрастанию (y\\n): ");
scanf("%c", &f);
fflush(stdin);
if (g > 0 && g < 6)
{
int i, j;
printf("%c", f);
TT tmp;
for (i = 0; i < count - 1; ++i)
{
for (j = 0; j < count - 1; ++j)
{
if (f == 'y')
{
switch (g)
{
case 1:
if (strcmp(data[j].tiecher, data[j + 1].tiecher) > 0)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 2:
if (strcmp(data[j].discipline, data[j + 1].discipline) > 0)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 3:
if (data[j + 1].course < data[j].course)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 4:
if (data[j + 1].semestr < data[j].semestr)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 5:
if (data[j + 1].audience < data[j].audience)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
}
}
else if (f == 'n')
{
switch (g)
{
case 1:
if (strcmp(data[j].tiecher, data[j + 1].tiecher) < 0)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 2:
if (strcmp(data[j].discipline, data[j + 1].discipline) < 0)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 3:
if (data[j + 1].course > data[j].course)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 4:
if (data[j + 1].semestr > data[j].semestr)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
case 5:
if (data[j + 1].audience > data[j].audience)
{
tmp = data[j + 1];
data[j + 1] = data[j];
data[j] = tmp;
}; break;
}
}
}
}
}
else
{
printf("Вы ввели неверный номер столбца");
}
change = 1;
}
void Add(TT* data, int count)
{
system("cls");
fflush(stdin);
printf("Введите преподавателя: ");
scanf("%39[^\n]", data[count].tiecher);
fflush(stdin);
printf("Введите дисциплину: ");
scanf("%39[^\n]", data[count].discipline);
fflush(stdin);
printf("Введите курс: ");
scanf("%d]", &data[count].course);
fflush(stdin);
printf("Введите семестр: ");
scanf("%d", &data[count].semestr);
printf("Введите аудитория: ");
scanf("%d", &data[count].audience);
count++;
change = 1;
}
void Delete(TT* data, int count)
{
int s;
printf("Введите номер строки, которую хотите удалить?(Если удалять передумал, жми 0)");
scanf("%d", &s);
s--;
if (s >= 0)
{
for (; s < count; s++)
{
strcpy(data[s].tiecher, data[s + 1].tiecher);
strcpy(data[s].discipline, data[s + 1].discipline);
data[s].course = data[s + 1].course;
data[s].semestr = data[s + 1].semestr;
data[s].audience = data[s + 1].audience;
}
count--;
change = 1;
system("cls");
}
}
void Find(TT* data, int count)
{
char s[40];
int O;
printf("Введите номер столбца по которому хотите осуществить поиск (1-2):");
scanf("%d", &O);
switch (O)
{
case 1:system("cls");
printf("Введите преподавателя для поиска:");
fflush(stdin);
scanf("%39[^n]", s);
fflush(stdin);
for (int l = 0; l < count; l++)
{
if (strcmp(s, data[l].tiecher) == 0)
{
printf("-------------------------------------------------------------------n");
printf("|%-20s|%-10s|%-20d|%-10.2d ||%-10d|n", data[l].tiecher, data[l].discipline, data[l].course, data[l].semestr, data[l].audience);
printf("-------------------------------------------------------------------n");
}
}
break;
case 2:system("cls");
printf("Введите дисциплину для поиска:");
fflush(stdin);
scanf("%39[^n]", s);
fflush(stdin);
for (int l = 0; l < count; l++)
{
if (strcmp(s, data[l].discipline) == 0)
{
printf("-------------------------------------------------------------------n");
printf("|%-20s|%-10s|%-20d|%-10d ||%-10d|n", data[l].tiecher, data[l].discipline, data[l].course, data[l].semestr, data[l].audience);
printf("-------------------------------------------------------------------n");
}
}
break;
default: printf("Неправильно введен номер столбца"); break;
}
system("pause");
}```