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; //создаем вектор где элементами являются студенты
- ofstream fout("/Users/antontamarov/Desktop/db.txt"); //исходящий поток
- 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 menu() {
- cout << "\nВыбирете пукт меню: \n";
- cout << "[1] Добавить ячейку в бд" << endl;
- cout << "[2] Сохранить и выйти" << endl;
- }
- 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 addStudentsToDB() {
- unsigned long index = students.size(); //присваиваем значению index размер вектора students
- students.push_back(Student()); //добавляем студента
- students[index].key = (int)index; //присваиваем ключу студента значение размера вектора Student
- cout << "Введите фамилию: ";
- writeString(&students[index].lastName);
- cout << "Введите имя: ";
- writeString(&students[index].firstName);
- cout << "Введите отчество: ";
- writeString(&students[index].patronymic);
- cout << "Введите название предмета: ";
- writeString(&students[index].subject);
- cout << "Введите оценку: ";
- writeAssessmentForTheSubject(&students[index].assessmentForTheSubject);
- }
- void closeAndSaveBD() {
- for(auto &student : students) {
- fout << student.to_string() << endl; //записываем в файл информацию студента
- }
- fout.close(); //закрываем файл
- }
- 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();
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- int key = 0;
- getDB();
- while(key !=2) {
- menu();
- writeKey(&key);
- switch (key)
- {
- case 1:
- addStudentsToDB();
- break;
- case 2:
- closeAndSaveBD();
- break;
- default:
- cout << "Такого пункта меню нет";
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement