};
};
} while(number != 0);;'4':_list.print();("pause");;:;
};
} while(ch!='0');= fopen("users.bin", "wb");(int i=0; i<user_list.get_size(); i++) {= user_list.get(i);(&user, sizeof(user_data), 1, file);
};(file);(file);
};
//меню админаmenu_admin() {ch;k;filename[25];
//выбор файла начальный(filename, choose_file());
//чтениеизфайла_file(filename);
{
//простое меню("cls");
printf("Работа происходит с файлом %s\n", filename);("1) Выбрать файл для работы с данными\n");("2) Добавить запись\n");("3) Отредактировать запись\n");("4) Удалить запись\n");("5) Просмотреть все записи\n");("6) Поиск и фильтрация данных\n");("7) Управление пользователями\n");("0) Выход из учетной записи\n");
printf(">: ");(stdin);("%c", &ch);
switch (ch)
{'1':
//если выбрали изменить файл, то записываем изменения в старый
write_file(filename);
//выбираем новый(filename, choose_file());
//читаем данные из нового
read_file(filename);
if(filename) {("Файлуспешнооткрыт!\n");("pause");
} else {("Возникли проблемы с файлом. Попробуйте снова!\n");("pause");
}
break;
//во всех других случаях вызов соответствующих функций
case '2':_student();;'3':_student();;'4':_student();;'5':_student();;'6':{("cls");
printf("1) Отфильтровать по социальной активности\n");("2) Отфильтровать по активности в группе\n");("3) Найти студентов-активистов-отличников\n");
printf("0) Выйти\n");(">: ");(stdin);("%c", &k);(k) {'1':_list.filter_soc();("pause");;'2':_list.filter_soc_group();("pause");;'3':_list.filter_soc_excellent();("pause");;:;
};
} while(k!='0');;'7':_rule_users();;:
break;
}
} while (ch!='0');
//запись изменений при выходе из меню
write_file(filename);
}
//меню пользователяmenu_user() {ch;k;filename[25];
//выбор файла начальный(filename, choose_file());
//чтение из файла_file(filename);
{
//простое меню("cls");
printf("Работа происходит с файлом %s\n", filename);("1) Выбрать файл для работы с данными\n");("2) Просмотреть все записи\n");("3) Выполнить задачу\n");("4) Поиск и фильтрация данных\n");("0) Выход из учетной записи\n");
printf(">: ");(stdin);("%c", &ch);
switch (ch)
{'1':
//если выбрали изменить файл, то записываем изменения в старый
write_file(filename);
//выбираем новый(filename, choose_file());
//читаем данные из нового
read_file(filename);
if(filename) {("Файлу спешно открыт!\n");("pause");
} else {
("Возникли проблемы с файлом. Попробуйте снова!\n");("pause");
}
break;
//во всех других случаях вызов соответствующих функций
case '2':_student();;'3':_list.complete_target();("pause");;'4':{("cls");("1) НайтипоФ.И.О.\n");
printf("2) Отфильтровать по группе\n");("3) Найти по Ф.И.О. и группе\n");
printf("0) Выйти\n");(">: ");(stdin);("%c", &k);(k) {'1':_list.filter_name();("pause");;'2':_list.filter_group();("pause");;'3':_list.filter_name_group();("pause");;:;
};
} while(k!='0');;:
break;
}
} while (ch!='0');
//запись изменений при выходе из меню
write_file(filename);
}main() {(LC_ALL, "Russian");symbol;
do
{
//меню первого уровня("cls");("1) Войти как администратор\n");("2) Войти как пользователь\n");
printf("0) Выход\n");(">: ");("%c", &symbol);
switch(symbol)
{'1':
//если авторизация прошла, то меню админа, иначе предупреждение
if(authorize("admin")) {_admin();
} else {("cls");("Проверьте комбинацию логина и пароля!\n");("pause");
};'2':
//если авторизация прошла, то меню админа, иначе предупреждение
if(authorize("user")) {_user();
} else {("cls");("Проверьте комбинацию логина и пароля!\n");("pause");
};:;
}
} while (symbol!='0');
}
//выбор имени файла* choose_file() {filename[25];
system("cls");("Введите название файла. Если такого файла не существует, то будет создан новый!\n");("Максимальная длина имени файла 25 символов!\n");(">: ");(stdin);
//fgets для контроля переполнения
fgets(filename, 25, stdin);[strlen(filename)-1]='\0';
//открываем файл для дозаписи, если его не было, то он будет создан
FILE *file = fopen(filename, "ab");(file);
//возвращаем имя файлаfilename;
}
//чтение данных из файлаread_file(char *filename) {
//открытие файла*file = fopen(filename, "rb");
//очистка списка_list.clear();
//инициализация после очистки_list.init();
//вычисление количества записей в файле(file, 0, SEEK_END);
int size = ftell(file)/sizeof(student);(file, 0, SEEK_SET);(int i=0; i<size; i++) {stud;
//чтение из файла(&stud, sizeof(student), 1, file);
//добавление в список_list.add_back(stud);
}
//закрытие файла(file);
}
//запись в файл
void write_file(char *filename) {
//открытие для записи с уничтожением содержимого
FILE *file = fopen(filename, "wb");(int i=1; i<=stud_list.get_size(); i++) {
//"достаемэлементизспсика"stud = stud_list.get(i);
//записываем его в файл(&stud, sizeof(student), 1, file);
}
//закрываем файл(file);(file);
//добавление студентаadd_student() {
//создание новой структурыstud;
//вызов функций ввода из этой структуры
stud.enter_name();.enter_group();.enter_mark();.enter_social();
//добавление структуры в список_list.add_back(stud);
}
//изменение студентаchange_student() {number;
do{
//вывод списка на экран_list.print();
//ввод номера студента для изменения("Введите номер студента для изменения. 0 - для выхода\n");(">: ");(stdin);("%d", &number);
//проверка не вылезает ли он за рамки
if(number < 0 || number > stud_list.get_size()) {("Неверный выбор!\n");("pause");
} else if (number != 0) {
//если мы не ввели 0, то вызываем функцию изменения студента из структуры со списком
stud_list.change(number);
}
} while(number!=0);
}
//удаление студента_student() {;
//все тоже самое, что и в изменении, только вызывается функция не изменения, а удаления{_list.print();("Введите номер студента для удаления. 0 - для выхода\n");(">: ");(stdin);("%d", &number);(number < 0 || number > stud_list.get_size()) {("Неверный выбор!\n");("pause");
} else if (number != 0) {_list.rem(number);
}
} while(number!=0);
}
//вывод на экран
voidprint_student() {
//вызов функции вывода на экран из структуры со списком
stud_list.print();("pause");
}