Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // В папке проекта обязательно должны быть файлы student.txt и data.dat. В student.txt клиенты записываются в формате
- // Фамилия Факультет Группа Средняя оценка Список дисциплин
- // Pirozhkov MPiTK 25 4 1 1 0 1 1
- // Roflanov PrIt 21 3.7 0 0 1 0 1
- // Papich EKT 22 4.9 0 0 0 1 1
- //
- //
- //
- //
- #include <iostream>
- #include <Windows.h>
- #include <string>
- #include <fstream>
- #include <vector>
- #include <algorithm>
- using namespace std;
- struct Student {
- string last_name;
- string faculty;
- int group;
- float avg_mark;
- bool disciplines[5];
- /*
- discipline[0] - Математика
- discipline[1] - Физика
- discipline[2] - Информатика
- discipline[3] - Иностранный язык
- discipline[4] - Русский язык
- */
- bool operator<(Student obj) {
- return true ? last_name.compare(obj.last_name) < 0 : false;
- }
- string to_string() {
- string output = "Фамилия студента: " + last_name + "; Факультет: " + faculty + "; Группа: " + std::to_string(group) + "; Средняя оценка: " + std::to_string(avg_mark) + "; Выбранные дисциплины: \n";
- string math = disciplines[0] == 1 ? "Математика\n" : "";
- string physics = disciplines[1] == 1 ? "Физика\n" : "";
- string informatics = disciplines[2] == 1 ? "Информатика\n" : "";
- string foreign_language = disciplines[3] == 1 ? "Иностранный язык\n" : "";
- string russian_language = disciplines[4] == 1 ? "Русский язык\n" : "";
- return output + math + physics + informatics + foreign_language + russian_language;
- }
- };
- bool comparator(Student o1, Student o2) {
- return o1.last_name.compare(o2.last_name);
- }
- vector<Student> get_students_from_file(string path) {
- ifstream input_file;
- vector<Student> students;
- input_file.open(path, ifstream::in);
- if (!input_file) {
- cout << "Error opening file" << endl;
- return students;
- }
- else {
- while (!input_file.eof()) {
- Student current_student;
- input_file >> current_student.last_name;
- input_file >> current_student.faculty;
- input_file >> current_student.group;
- input_file >> current_student.avg_mark;
- input_file >> current_student.disciplines[0];
- input_file >> current_student.disciplines[1];
- input_file >> current_student.disciplines[2];
- input_file >> current_student.disciplines[3];
- input_file >> current_student.disciplines[4];
- students.push_back(current_student);
- }
- input_file.close();
- return students;
- }
- return students;
- }
- void write_bytes(string path, vector<Student> students) {
- ofstream output_file;
- size_t students_size = students.size();
- output_file.open(path, ios::binary || fstream::out);
- if (!output_file) {
- cout << "Error opening output file!" << endl;
- }
- else {
- output_file.write(reinterpret_cast<const char *>(&students_size), sizeof(students_size));
- output_file.write(reinterpret_cast<const char *>(&students[0]), students.size() * sizeof Student);
- output_file.close();
- }
- }
- vector<Student> get_bytes(string path) {
- size_t students_size;
- ifstream input_file;
- input_file.open(path, ios::binary);
- //Student Student;
- if (!input_file) {
- cout << "Error opening file!" << endl;
- }
- else {
- input_file.read(reinterpret_cast<char *>(&students_size), sizeof(students_size));
- vector<Student> students(students_size);
- input_file.read(reinterpret_cast<char *>(&students[0]), sizeof(Student) * students_size);
- return students;
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- string path = "student.txt";
- string byte_path = "data.dat";
- vector<Student> students;
- vector<Student> students_from_binary;
- int discipline;
- int avg;
- int choice;
- while (true) {
- cout << "1. Считать список студентов из файла, указанного в переменной path" << endl;
- cout << "2. Вывести список студентов на экран" << endl;
- cout << "3. Очистить экран" << endl;
- cout << "4. Записать список студентов в бинарный файл, указанный в переменной byte_path" << endl;
- cout << "5. Считать клиентов из бинарного файла и вывести на экран" << endl;
- cout << "6. Отсортировать студентов в алфавитном порядке" << endl;
- cout << "7. Вывести на экран студентов, желающих изучать дисциплину X со средним баллом не меньше Y" << endl;
- cout << "8. Выход" << endl;
- cout << "Ваш выбор: ";
- cin >> choice;
- switch (choice) {
- case 1:
- students = get_students_from_file(path);
- system("CLS");
- break;
- case 2:
- system("CLS");
- for (auto i : students) {
- cout << i.to_string() << endl;
- }
- break;
- case 3:
- system("CLS");
- break;
- case 4:
- write_bytes(byte_path, students);
- system("CLS");
- break;
- case 5:
- system("CLS");
- students_from_binary = get_bytes(byte_path);
- for (auto i : students_from_binary) {
- cout << i.to_string() << endl;
- }
- break;
- case 6:
- sort(students.begin(), students.end());
- for (auto i : students_from_binary) {
- cout << i.to_string() << endl;
- }
- break;
- case 7:
- /*
- discipline[0] - Математика
- discipline[1] - Физика
- discipline[2] - Информатика
- discipline[3] - Иностранный язык
- discipline[4] - Русский язык
- */
- cout << "Введите искомую дисциплину.\n0 - Математика\n1-Физика\n2-Информатика\n3-Иностранный язык\n4-Русский язык\n";
- cin >> discipline;
- cout << "Введите искомый средний балл: ";
- cin >> avg;
- system("CLS");
- for (auto i : students) {
- if (i.avg_mark >= avg && i.disciplines[discipline] == 1) {
- cout << i.to_string() << endl;
- }
- }
- break;
- case 8:
- system("EXIT");
- break;
- }
- }
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement