Advertisement
Anton0093

Задание1_2

Nov 16th, 2020
714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.14 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. struct Student {
  9.    
  10.     int key;  //ключ
  11.    
  12.     string firstName; //имя
  13.     string lastName; //фамилия
  14.     string patronymic; // отчество
  15.     string subject; //предмет
  16.     int assessmentForTheSubject; //оценка за предмет
  17.    
  18.     string to_string() { //вывод данных
  19.         return std::to_string(key) + " " + lastName + " " + firstName + " "
  20.         + patronymic + " " + subject + " " + std::to_string(assessmentForTheSubject);
  21.     }
  22. };
  23.  
  24.     vector<Student> students;  //создаем вектор где элементами являются студенты
  25.  
  26.     ofstream fout("/Users/antontamarov/Desktop/db.txt"); //исходящий поток
  27.     ifstream fin("/Users/antontamarov/Desktop/db.txt"); //входящий поток
  28.  
  29.  
  30. size_t split(const std::string &txt, std::vector<std::string> &strs, char ch){
  31.     size_t pos = txt.find( ch ); //присваиваем pos число на котором находится символ ch в тексте text
  32.     size_t initialPos = 0;
  33.     strs.clear(); // чистим
  34.    
  35.     while( pos != std::string::npos ) {
  36.         //кладем в вектор строк txt символ находящийся на след позициях
  37.         strs.push_back( txt.substr( initialPos, pos - initialPos ) );
  38.         initialPos = pos + 1;
  39.        
  40.         pos = txt.find( ch, initialPos ); //приравниваем к pos найденный элемент из txt
  41.     }
  42.     //кладем в вектор строк txt символ находящийся на след позициях
  43.     strs.push_back( txt.substr( initialPos, std::min( pos, txt.size() ) - initialPos + 1 ) );
  44.    
  45.     return strs.size();
  46. }
  47.  
  48. void menu() {
  49.     cout << "\nВыбирете пукт меню: \n";
  50.     cout << "[1] Добавить ячейку в бд" << endl;
  51.     cout << "[2] Сохранить и выйти" << endl;
  52. }
  53.  
  54. void writeString(string* str) {
  55.     cin >> (*str);
  56. }
  57.  
  58. void writeKey(int* key) {
  59.     while (!(cin >> (*key)))
  60.     {
  61.         cout <<"Ошибка!!! Введите число";
  62.         cin.clear();
  63.         cin.ignore(numeric_limits<streamsize>::max(), '\n');
  64.     }
  65. }
  66.  
  67.  
  68. void writeAssessmentForTheSubject(int* assessmentForTheSubject) {
  69.     while (!(cin >> (*assessmentForTheSubject)) || ((*assessmentForTheSubject) < 2
  70.                                                     || (*assessmentForTheSubject) > 5)){
  71.         cout << "Оценка должна быть в диапазоне от 2 до 5: ";
  72.         cin.clear();
  73.         cin.ignore(numeric_limits<streamsize>::max(), '\n');
  74.     }
  75. }
  76.  
  77. void addStudentsToDB() {
  78.    
  79.     unsigned long index = students.size(); //присваиваем значению index размер вектора students
  80.     students.push_back(Student()); //добавляем студента
  81.     students[index].key = (int)index; //присваиваем ключу студента значение размера вектора Student
  82.    
  83.     cout << "Введите фамилию: ";
  84.         writeString(&students[index].lastName);
  85.    
  86.     cout << "Введите имя: ";
  87.         writeString(&students[index].firstName);
  88.    
  89.     cout << "Введите отчество: ";
  90.         writeString(&students[index].patronymic);
  91.    
  92.     cout << "Введите название предмета: ";
  93.         writeString(&students[index].subject);
  94.    
  95.     cout << "Введите оценку: ";
  96.         writeAssessmentForTheSubject(&students[index].assessmentForTheSubject);
  97. }
  98.  
  99. void closeAndSaveBD() {
  100.    
  101.     for(auto &student : students) {
  102.         fout << student.to_string() << endl; //записываем в файл информацию студента
  103.     }
  104.     fout.close(); //закрываем файл
  105. }
  106.  
  107. void getDB() {
  108.    
  109.     string str;
  110.     vector<string> vector; //создаем вектор, состоящий из строк
  111.     int index = 0;
  112.    
  113.     while (getline(fin, str)) { //пока строка записывается в файл выполняем:
  114.         split(str, vector, ' ');
  115.         students.push_back(Student());
  116.         students[index].key = atoi(vector[0].c_str()); //atoi переводит строчку в тип int
  117.         students[index].lastName = vector[1];
  118.         students[index].firstName = vector[2];
  119.         students[index].patronymic = vector[3];
  120.         students[index].subject = vector[4];
  121.         students[index].assessmentForTheSubject = atoi(vector[5].c_str());
  122.         index++;
  123.     }
  124.     fin.close();
  125. }
  126.  
  127. int main() {
  128.    
  129.     setlocale(LC_ALL, "Russian");
  130.     int key = 0;
  131.     getDB();
  132.     while(key !=2) {
  133.        
  134.         menu();
  135.         writeKey(&key);
  136.         switch (key)
  137.         {
  138.             case 1:
  139.                 addStudentsToDB();
  140.                 break;
  141.             case 2:
  142.                 closeAndSaveBD();
  143.                 break;
  144.             default:
  145.                 cout << "Такого пункта меню нет";
  146.                 break;
  147.         }
  148.     }
  149.     return 0;
  150. }
  151.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement