Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <locale>
- #include <fstream>
- #include <algorithm>
- using namespace std;
- struct Student
- {
- string lastName;
- string firstName;
- string middleName;
- int numbRecordBook;
- int birthYear;
- double averageScore;
- string scholarship;
- };
- bool comp1(const Student& a, const Student& b){
- return a.lastName < b.lastName;
- }
- bool comp2(const Student& a, const Student& b){
- return a.firstName < b.firstName;
- }
- bool comp3(const Student& a, const Student& b){
- return a.middleName < b.middleName;
- }
- bool comp4(const Student& a, const Student& b){
- return a.numbRecordBook < b.numbRecordBook;
- }
- bool comp5(const Student& a, const Student& b){
- return a.birthYear < b.birthYear;
- }
- bool comp6(const Student& a, const Student& b){
- return a.averageScore < b.averageScore;
- }
- bool comp7(const Student& a, const Student& b){
- return a.scholarship < b.scholarship;
- }
- void studIn(vector<Student>& v)
- {
- char ch;
- do {
- Student st;
- cout << "Введите фамилию студента: "; cin >> st.lastName;
- cout << "Введите имя студента: "; cin >> st.firstName;
- cout << "Введите отчество студента: "; cin >> st.middleName;
- cout << "Введите номер зачетной книжки: "; cin >> st.numbRecordBook;
- cout << "Введите год рождения: "; cin >> st.birthYear;
- cout << "Введите среднюю оценку: "; cin >> st.averageScore;
- if (st.averageScore < 4) st.scholarship = "--//--";
- if (st.averageScore >= 4 && st.averageScore < 4.5) st.scholarship = "usual";
- if (st.averageScore >= 4.5 && st.averageScore < 5) st.scholarship = "+50%";
- if (st.averageScore == 5) st.scholarship = "+100%";
- v.push_back(st);
- cout << "Хотите продолжить? y/n\n";
- do {
- cin >> ch;
- if (ch != 'y' && ch != 'n') {
- cout << "Неправильный ввод.\nПопробуйте снова.\n";
- }
- }
- while (ch != 'y' && ch != 'n');
- cout << "\n";
- }
- while (ch != 'n');
- }
- void studOut(vector<Student>& v)
- {
- if(v.size() > 0) {
- cout << "Выберите поле для сортировки:\n"
- << "1 - Фамилия.\n"
- << "2 - Имя.\n"
- << "3 - Отчество.\n"
- << "4 - Номер зачетной книжки.\n"
- << "5 - Год рождения.\n"
- << "6 - Средняя оценка.\n"
- << "7 - Размер стипендии.\n";
- char ch;
- cin >> ch;
- switch (ch) {
- case '1': sort(v.begin(), v.end(), comp1); break;
- case '2': sort(v.begin(), v.end(), comp2); break;
- case '3': sort(v.begin(), v.end(), comp3); break;
- case '4': sort(v.begin(), v.end(), comp4); break;
- case '5': sort(v.begin(), v.end(), comp5); break;
- case '6': sort(v.begin(), v.end(), comp6); break;
- case '7': sort(v.begin(), v.end(), comp7); break;
- default : cout << "Неправильный ввод.\n"; return;
- }
- for (int i = 0; i < v.size(); i++) {
- cout << i+1 << ")"
- << "\nФамилия: "<< v[i].lastName
- << "\nИмя: " << v[i].firstName
- << "\nОтчество: " << v[i].middleName
- << "\nНомер зачетной книжки: " << v[i].numbRecordBook
- << "\nГод рождения: " << v[i].birthYear
- << "\nСредняя оценка: " << v[i].averageScore
- << "\nРазмер стипендии: " << v[i].scholarship << "\n";
- }
- }
- else {
- cout << "Нет студентов для вывода\n";
- }
- }
- void studDel(vector<Student>& v)
- {
- if(v.size() > 0) {
- int n;
- char ch;
- cout << "Введите номер студента для удаления: ";
- cin >> n;
- if (n < 1 || n > v.size()) {
- cout << "Студента с таким номером нет.";
- }
- else {
- cout << "Удалить студента <" << v[n-1].lastName << " " << v[n-1].firstName << " " << v[n-1].middleName << "> (y/n)?\n";
- do {
- cin >> ch;
- if (ch != 'y' && ch != 'n') cout << "Неправильный ввод.\nПопробуйте снова: ";
- }
- while (ch != 'y' && ch != 'n');
- if (ch == 'y') v.erase(v.begin() + n - 1);
- }
- cout << "\n";
- }
- else {
- cout << "Нет студентов для удаления\n";
- }
- }
- void studInFile(vector<Student>& v)
- {
- char ch[150];
- cout << "Введите директорию файла для чтения: ";
- cin >> ch;
- ifstream fin(ch);
- if (!fin.is_open()) {
- cout << "Не удалось открыть файл для чтения.\n";
- return;
- }
- while (!fin.eof()) {
- Student t;
- fin >> t.lastName >> t.firstName >> t.middleName;
- fin >> t.numbRecordBook >> t.birthYear >> t.averageScore;
- if (t.averageScore < 4) t.scholarship = "--//--";
- if (t.averageScore >= 4 && t.averageScore < 4.5) t.scholarship = "usual";
- if (t.averageScore >= 4.5 && t.averageScore < 5) t.scholarship = "+50%";
- if (t.averageScore == 5) t.scholarship = "+100%";
- v.push_back(t);
- }
- fin.close();
- }
- void studOutFile(vector<Student>& v)
- {
- if(v.size() > 0) {
- char ch[150];
- cout << "Введите директорию файла для записи: ";
- cin >> ch;
- ofstream fout(ch);
- if (!fout.is_open()) {
- cout << "Не удалось открыть файл для записи.\n";
- return;
- }
- for (int i = 0; i < v.size(); i++) {
- fout << i+1 << ")"
- << "\nФамилия: "<< v[i].lastName
- << "\nИмя: " << v[i].firstName
- << "\nОтчество: " << v[i].middleName
- << "\nНомер зачетной книжки: " << v[i].numbRecordBook
- << "\nГод рождения: " << v[i].birthYear
- << "\nСредняя оценка: " << v[i].averageScore
- << "\nРазмер стипендии: " << v[i].scholarship << "\n";
- }
- fout.close();
- }
- else {
- cout << "Нет студентов для записи в файл\n";
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- vector<Student> v;
- while (true) {
- cout << "Меню пользователя:\n1. Ввод.\n2. Вывод.\n3. Удаление.\n4. Чтение из файла.\n5. Запись в файл.\n6. Выход.\n";
- char menu;
- cin >> menu;
- switch (menu) {
- case '1': studIn(v);
- break;
- case '2': studOut(v);
- break;
- case '3': studDel(v);
- break;
- case '4': studInFile(v);
- break;
- case '5': studOutFile(v);
- break;
- case '6': return 0;
- default: cout << "Неправильный ввод.\nПопробуйте снова.\n";
- break;
- }
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment