#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <vector>
#include <locale>
#include <clocale>
using namespace std;
// прототипы функции
void mainMenu();
struct student {
string name;
string lastname;
bool contract;
string group_num;
int payment;
student* nexts;
};
void push_Student(string name, string lastname, bool contract, int payment) {
student* pTmp = new student;
pTmp->name = name;
pTmp->lastname = lastname;
pTmp->contract = contract;
pTmp->payment = payment;
pTmp->nexts = tops;
tops = pTmp;
}
struct group {
string name;
group* nextg;
};
void pushGroup(string name)
{
group* pTmp = new group;
pTmp->name = name;
pTmp->nextg = topg;
topg = pTmp;
}
//работа с файлом
void savefile() {
string path = "student_base.txt";
ofstream fout;
fout.open(path);
if (!fout.is_open()) { cout << "Ошибка создания файла\n"; }
else { cout << "Файл создан, возвращение в главное меню\n\n"; }
fout.close();
}
void print_student(string group_num)
{
if (group_num == "") {
cout << "Все студенты:\n";
student* pTmp = tops;
while (pTmp != 0)
{
cout << pTmp->name << "\n";
cout << pTmp->lastname << "\n";
cout << pTmp->contract << "\n";
cout << pTmp->payment << "\n\n";
pTmp = pTmp->nexts;
}
}
else {
cout << "Список студентов группы '" << group_num << "':\n";
student* pTmp = tops;
while (pTmp != 0)
{
if (group_num == pTmp->group_num) {
cout << pTmp->name << "\n";
cout << pTmp->lastname << "\n";
cout << pTmp->contract << "\n";
cout << pTmp->payment << "\n\n";
}
pTmp = pTmp->nexts;
}
}
system("pause");
}
void read_file(fstream& file) {
string count_group;
int c_g;
string group_num;
string count_student;
int c_s, c_s_all = 0;
string line;
int payment;
if (file.is_open()) {
getline(file, count_group); // Получаем кол-во групп
c_g = std::stoi(count_group); // Преобразуем кол-во групп
for (int g = 0; g < c_g; g++) { // Идем по кол-ву групп
getline(file, group_num); //Получаем название группы.
pushGroup(group_num); //Записываем группу в стек.
cout << "Группа: " << group_num << " \n";
getline(file, count_student); // Получаем кол-во студентов
c_s = std::stoi(count_student); // Преобразуем кол-во студентов
c_s_all += c_s;
for (int s = 0; s < c_s; s++) { // Идем по кол-ву студентов
for (int d = 0; d < 4; d++) { // Идем по каждому студенту
student* pTmp = new student;
pTmp->group_num = group_num; //Приписываем ему название группы
getline(file, line); //Запись имени.
pTmp->name = line;
getline(file, line); //Запись фамилии.
pTmp->lastname = line;
getline(file, line); // Запись формы обучения
pTmp->contract = line[0];
getline(file, line); // Получаем стипендию
payment = std::stoi(line);
pTmp->payment = payment;
pTmp->nexts = tops;
tops = pTmp;
break;
}
}
}
}
}
// Работа со студентами
void workwithGroup() {
int workwithstudents;
cin >> workwithstudents;
if (workwithstudents == 1) {
cout << "Вывести студентов группы\n";
cin >> workwithstudents;
}
else if (workwithstudents == 2) {
string name, lastname, group;
bool contract;
int payment;
cout << "В какую группу добавить студента: ";
cin >> group;
cout << "Имя: ";
cin >> name;
cout << "Фамилия: ";
cin >> lastname;
cout << "Форма обучения: ";
cin >> contract;
cout << "Стипендия: ";
cin >> payment;
push_Student(name, lastname, contract, payment);
}
else if (workwithstudents == 3) {
cout << "Изменение данных студента";
}
else if (workwithstudents == 4) {
cout << "Удалить студента";
}
else if (workwithstudents == 5) {
cout << "Назад\n";
mainMenu();
cout << "Выберите пункт из меню (1-10)\n" << "1. Файл\n" << "2. Работа с группой\n" << "3. Вывод всех групп\n" << endl << endl << "10. Выход из программы\n";
};
};
// Меню группы
void groupMenu() {
int menugroup;
cin >> menugroup;
if (menugroup == 1) { cout << "Вывести список групп"; }
else if (menugroup == 2) {
cout << "--------Добавление группы--------\n" << "1. Вывести студентов группы\n" << "2. Добавить студента\n" << "3. Изменить данные студента\n" << "4. Удалить студента\n" << "5. Выйти в основное меню\n";
workwithGroup();
}
else if (menugroup == 3) { cout << "Удалить группу"; }
else if (menugroup == 4) { mainMenu(); }
else {}
}
// Файловое меню
void fileMenu() { // Меню файла
int menufile = 0;
cin >> menufile;
if (menufile == 1) { cout << "Загрузка данных запрещена, выход в основное меню\n"; mainMenu(); }
else if (menufile == 2) { savefile(); mainMenu(); }
else if (menufile == 3) { mainMenu(); }
else {}
}
// Основное меню
void mainMenu() {
int menu;
cout << "--------Вы находитесь в основном меню--------\n";
cout << "Выберите пункт из меню (1-10)\n" << "1. Файл\n" << "2. Работа с группой\n" << "3. Вывод всех групп\n" << endl << endl << "10. Выход из программы\n";
cin >> menu;
switch (menu) {
case(1): {
cout << "--------Файл--------\n" << "1. Загрузить данные\n" << "2.Сохраняем данные в файл\n" << "3.Назад\n" << "Любое другое число, выйти из программы\n";
fileMenu();
break;
}
case(2): {
cout << "--------Группы--------\n" << "1. Вывести список групп\n" << "2. Добавить группу\n" << "3. Удалить группу\n" << "4. Выйти в главное меню\n";
groupMenu();
break;
}
case(3): { cout << "Вывод всех групп\n"; };
case(10): { }; break;
default: cout << "Вы ввели неправильный пункт меню"; ;
}
}
int main() {
setlocale(LC_ALL, "Russian");
mainMenu();
return 0;
}