Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <vector>
- using namespace std;
- struct Student {
- int key; //ключ
- string firstName; //имя
- string lastName; //фамилия
- string patronymic; // отчество
- string subject; //предмет
- int assessmentForTheSubject; //оценка за предмет
- string to_string() { //вывод данных
- return std::to_string(key) + " " + lastName + " " + firstName + " "
- + patronymic + " " + subject + " " + std::to_string(assessmentForTheSubject);
- }
- };
- vector<Student> students; //создаем вектор где элементами являются студенты
- ifstream fin("/Users/antontamarov/Desktop/db.txt"); //входящий поток
- size_t split(const std::string &txt, std::vector<std::string> &strs, char ch){
- size_t pos = txt.find( ch ); //присваиваем pos число на котором находится символ ch в тексте text
- size_t initialPos = 0;
- strs.clear(); // чистим
- while( pos != std::string::npos ) {
- //кладем в вектор строк txt символ находящийся на след позициях
- strs.push_back( txt.substr( initialPos, pos - initialPos ) );
- initialPos = pos + 1;
- pos = txt.find( ch, initialPos ); //приравниваем к pos найденный элемент из txt
- }
- //кладем в вектор строк txt символ находящийся на след позициях
- strs.push_back( txt.substr( initialPos, std::min( pos, txt.size() ) - initialPos + 1 ) );
- return strs.size();
- }
- void getDB() {
- string str;
- vector<string> vector; //создаем вектор, состоящий из строк
- int index = 0;
- while (getline(fin, str)) { //пока строка записывается в файл выполняем:
- split(str, vector, ' ');
- students.push_back(Student());
- students[index].key = atoi(vector[0].c_str()); //atoi переводит строчку в тип int
- students[index].lastName = vector[1];
- students[index].firstName = vector[2];
- students[index].patronymic = vector[3];
- students[index].subject = vector[4];
- students[index].assessmentForTheSubject = atoi(vector[5].c_str());
- index++;
- }
- fin.close();
- }
- void writeString(string* str) {
- cin >> (*str);
- }
- void writeKey(int* key) {
- while (!(cin >> (*key)))
- {
- cout <<"Ошибка!!! Введите число";
- cin.clear();
- cin.ignore(numeric_limits<streamsize>::max(), '\n');
- }
- }
- void writeAssessmentForTheSubject(int* assessmentForTheSubject) {
- while (!(cin >> (*assessmentForTheSubject)) || ((*assessmentForTheSubject) < 2
- || (*assessmentForTheSubject) > 5)){
- cout << "Оценка должна быть в диапазоне от 2 до 5: ";
- cin.clear();
- cin.ignore(numeric_limits<streamsize>::max(), '\n');
- }
- }
- void getStudentByKey() {
- int key;
- bool isEmpty = true;
- cout << "Введите ключ: ";
- writeKey(&key);
- for (Student &student : students)
- {
- //смотрим одинаковые значения ключа
- if(student.key == key) {
- cout << student.to_string() << endl;
- isEmpty = false; //обновляем empty если такой студент существует
- break; //выходим
- }
- }
- if (isEmpty) cout << "Такого студента не существует" << endl;
- }
- void getStudentBySameSubjectAndAssessmentForTheSubject() {
- int assessmentForTheSubject;
- string subject;
- bool isEmpty = true;
- cout << "Введите название предмета: ";
- writeString(&subject);
- cout << "Введите оценку: ";
- writeAssessmentForTheSubject(&assessmentForTheSubject);
- for (Student &student : students)
- {
- //смотрим одинаковые значения предмета и оценки
- if(student.subject == subject &&student.assessmentForTheSubject == assessmentForTheSubject) {
- cout << student.to_string() << endl;
- isEmpty = false;
- break;
- }
- }
- if (isEmpty) cout << "Таких студентов не существует" << endl;
- }
- void menu() {
- cout << "\nВыбирете пукт меню: \n\n";
- cout << "[1] Получить запись по ключу\n" << endl;
- cout << "[2] Вывод всех записей с одинаковым значением полей «Предмет», «Оценка за год»\n" << endl;
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- int key = 0;
- getDB();
- while(key !=2) {
- menu();
- writeKey(&key);
- switch (key)
- {
- case 1:
- getStudentByKey();
- break;
- case 2:
- getStudentBySameSubjectAndAssessmentForTheSubject();
- break;
- default:
- cout << "Такого пункта меню нет";
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement