Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ctime>
- #include <algorithm>
- #include "windows.h"
- #include <string>
- #include <vector>
- #include <fstream>
- #include <iostream>
- using namespace std;
- class Project {
- public:
- Project();
- Project(string Surname, string Initials, unsigned int QAprogram, unsigned int QAnote, unsigned int QAprotection);
- ~Project();
- void updateID();
- unsigned int getID();
- unsigned int getQAprogramm();
- unsigned int getQAnote();
- unsigned int getQAprotection();
- string getSurname();
- void info();
- void changeQAprogramm(unsigned int QAprogramm);
- void changeQAnote(unsigned int QAnote);
- void changeQAprotection(unsigned int QAprotection);
- public:
- static unsigned int COUNTER;
- static float AVERAGE_MARK;
- private:
- string getStrMark(unsigned int Mark);
- private:
- unsigned int m_id;
- string m_surname;
- string m_initials;
- unsigned int m_quality_program;
- unsigned int m_quality_note;
- unsigned int m_quality_protection;
- unsigned int m_mark;
- };
- unsigned int Project::COUNTER = 0;
- float Project::AVERAGE_MARK = 0.f;
- Project::Project() :
- m_id(0),
- m_surname(""),
- m_initials(""),
- m_quality_program(0),
- m_quality_note(0),
- m_quality_protection(0),
- m_mark(0) {
- COUNTER++;
- m_id = COUNTER;
- ifstream fstream;
- fstream.open("Surname.txt");
- int part = rand () % 14;
- for (int i = 0; i < part + 1; i++) {
- getline(fstream, m_surname);
- }
- fstream.close();
- m_initials.resize(4);
- string mass = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЭЮЯ";
- m_initials += mass[rand() % 29];
- m_initials += '.';
- m_initials += mass[rand() % 29];
- m_initials += '.';
- m_quality_program = rand () % 3; // 0-> bad. 1-> normal. 2-> good.
- m_quality_note = rand () % 3;
- m_quality_protection = rand () % 3;
- // 2.2f to int equal 2
- // 2.7f to int equal 2
- // 2.2f + 0.5f to int eqaual 2
- // 2.7f + 0.5f to int equal 3
- // (+ 0.5f) математическое округление
- m_mark = int( ( float(m_quality_program + m_quality_note + m_quality_protection) / 3.f + 0.5f) );
- AVERAGE_MARK = (AVERAGE_MARK * (float(COUNTER) - 1.f) + float(m_mark)) / float(COUNTER);
- }
- Project::Project(string Surname, string Initials, unsigned int QAprogram, unsigned int QAnote, unsigned int QAprotection) :
- m_id(0),
- m_surname(Surname),
- m_initials(Initials),
- m_quality_program(QAprogram),
- m_quality_note(QAnote),
- m_quality_protection(QAprotection),
- m_mark(0)
- {
- COUNTER++;
- m_id = COUNTER;
- m_mark = ( float(m_quality_program + m_quality_note + m_quality_protection) + 0.5f ) / 3.f;
- AVERAGE_MARK = (AVERAGE_MARK * (COUNTER - 1) + m_mark) / COUNTER;
- }
- Project::~Project() {
- Project::COUNTER--;
- Project::AVERAGE_MARK = (AVERAGE_MARK * (COUNTER + 1) - m_mark) / COUNTER;
- }
- void Project::updateID() {
- m_id--;
- }
- unsigned int Project::getID() {
- return m_id;
- }
- unsigned int Project::getQAprogramm() {
- return m_quality_program;
- }
- unsigned int Project::getQAnote() {
- return m_quality_note;
- }
- unsigned int Project::getQAprotection() {
- return m_quality_protection;
- }
- string Project::getSurname() {
- return m_surname;
- }
- void Project::info() {
- cout << "\n";
- cout << "-------------------------\n";
- cout << "Курсовой проект # " << m_id << "\n";
- cout << "Ученик: " << m_surname << m_initials << "\n";
- cout << "Качество програмы: " << getStrMark(m_quality_program) << "\n";
- cout << "Качество записки: " << getStrMark(m_quality_note) << "\n";
- cout << "Качество защиты: " << getStrMark(m_quality_protection) << "\n";
- cout << "Итого: " << getStrMark(m_mark) << "\n";
- cout << "-------------------------\n";
- }
- void Project::changeQAprogramm(unsigned int QAprogramm) {
- m_quality_program = QAprogramm;
- Project::AVERAGE_MARK = (AVERAGE_MARK * (COUNTER + 1) - m_mark) / COUNTER;
- m_mark = ( float(m_quality_program + m_quality_note + m_quality_protection) + 0.5f ) / 3.f;
- AVERAGE_MARK = (AVERAGE_MARK * (COUNTER - 1) + m_mark) / COUNTER;
- }
- void Project::changeQAnote(unsigned int QAnote) {
- m_quality_note = QAnote;
- Project::AVERAGE_MARK = (AVERAGE_MARK * (COUNTER + 1) - m_mark) / COUNTER;
- m_mark = ( float(m_quality_program + m_quality_note + m_quality_protection) + 0.5f ) / 3.f;
- AVERAGE_MARK = (AVERAGE_MARK * (COUNTER - 1) + m_mark) / COUNTER;
- }
- void Project::changeQAprotection(unsigned int QAprotection) {
- m_quality_protection = QAprotection;
- Project::AVERAGE_MARK = (AVERAGE_MARK * (COUNTER + 1) - m_mark) / COUNTER;
- m_mark = ( float(m_quality_program + m_quality_note + m_quality_protection) + 0.5f ) / 3.f;
- AVERAGE_MARK = (AVERAGE_MARK * (COUNTER - 1) + m_mark) / COUNTER;
- }
- string Project::getStrMark(unsigned int Mark) {
- string res;
- switch (Mark) {
- case 0:
- res = "плохо";
- break;
- case 1:
- res = "нормально";
- break;
- case 2:
- res = "хорошо";
- break;
- default:
- break;
- }
- return res;
- }
- struct Node {
- Project* project;
- Node* next;
- };
- class List {
- public:
- List();
- void add(Project * project);
- void remove(unsigned int NO); // Project with id=NO will be removed
- void print(unsigned int NO); // From project with id=NO the printing wil start
- Project* getProject(unsigned int NO); // Get Project from list with id=NO
- void print();
- private:
- Node* begin;
- Node* end;
- };
- List::List() :
- begin(nullptr),
- end(nullptr) {
- }
- void List::add(Project * project) {
- Node* temp = new Node();
- temp->next = begin;
- temp->project = project;
- if (begin) {
- end->next = temp;
- end = temp;
- } else {
- begin = temp;
- end = temp;
- temp->next = begin;
- }
- }
- void List::remove(unsigned int NO) {
- Node* temp = begin;
- // Searching the next project with id=NO.
- while (temp->next->project->getID() != NO) {
- temp = temp->next;
- }
- Node* previousProject = temp;
- Node* projectToDelete = temp->next;
- if (Project::COUNTER > 1) {
- previousProject->next = projectToDelete->next; // Tieing thorough projectToDelete item
- if (projectToDelete == end) { // We dont need to update ids
- end = previousProject;
- } else {
- if (projectToDelete == begin) {
- begin = projectToDelete->next;
- }
- temp = projectToDelete->next; // Update the ids from next project to projectToDelete till end inclusively
- do {
- temp->project->updateID();
- temp = temp->next;
- } while (temp != begin);
- }
- } else {
- begin = nullptr;
- end = nullptr;
- }
- delete projectToDelete->project;
- delete projectToDelete;
- }
- void List::print(unsigned int NO) {
- Node* temp = begin;
- // Searching the project with id=NO.
- while (temp->project->getID() != NO) {
- temp = temp->next;
- }
- // Printing till we reach the foundedProject with id=NO
- Node* foundedProject = temp;
- do {
- temp->project->info();
- temp = temp->next;
- } while (temp != foundedProject);
- }
- Project * List::getProject(unsigned int NO) {
- Node* temp = begin;
- // Searching the project with id=NO.
- while (temp->project->getID() != NO) {
- temp = temp->next;
- }
- return temp->project;
- }
- void List::print() {
- Node* temp = begin;
- if (temp) {
- do {
- temp->project->info();
- temp = temp->next;
- } while (temp != begin);
- } else {
- cout << "List is empty!\n";
- }
- }
- void mainMenu() {
- cout << "==========|MENU|==========\n";
- cout << "(1) Добавить проект\n";
- cout << "(2) Добавить случайный проект\n";
- cout << "(3) Удалить проект\n";
- cout << "(4) Посмотреть проекты...\n\n";
- cout << "(5) Изменить данные о проекте...\n";
- cout << "(6) Посмотреть количество всех проектов\n";
- cout << "(7) Посмотреть среднюю оценку\n\n";
- cout << "(9) Узнать информацию об авторе\n";
- cout << "(0) Выход\n\n";
- cout << "==========================\n";
- cout << "> ";
- }
- void showProjectsMenu() {
- cout << "==========|MENU|==========\n";
- cout << "====Просмотр проектов=====\n";
- cout << "(1) Посмотреть весь список\n";
- cout << "(2) Посмотреть проекты по кругу начиная с...\n";
- cout << "(3) Посмотреть проект под номером...\n";
- cout << "(4) Посмотреть проекты по оценке за качество программы\n";
- cout << "(5) Посмотреть проекты по оценке за качество записки\n";
- cout << "(6) Посмотреть проекты по оценке за качество защиты\n";
- cout << "(7) Посмотреть проекты по алфавиту студента\n";
- cout << "(8) Назад\n";
- cout << "==========================\n";
- cout << "> ";
- }
- void showChangeProjectMenu(Project* project) {
- cout << "==========|MENU|==========\n";
- cout << "===| Редактирование проекта ";
- project->info();
- cout << "(1) Изменить оценку за качество программы\n";
- cout << "(2) Изменить оценку за качество записки\n";
- cout << "(3) Изменить оценку за качество защиты\n\n\n\n";
- cout << "(4) Назад\n";
- cout << "==========================\n";
- cout << "> ";
- }
- void info() {
- cout << "Работу выполнил:\n";
- cout << "[XXX]\n";
- cout << "Группа: ОПК-216\n";
- cout<<"Преподавватель:\n";
- cout << "Коломиец Павел Юрьевич\n";
- }
- bool sortByQAprogramm(Project * A,Project * B) {
- return (A->getQAprogramm() > B->getQAprogramm());
- }
- bool sortByQAnote(Project * A,Project * B) {
- return (A->getQAnote() > B->getQAnote());
- }
- bool sortByQAprotection(Project * A,Project * B) {
- return (A->getQAprotection() > B->getQAprotection());
- }
- bool sortBySurname(Project * A,Project * B) {
- return (A->getSurname() < B->getSurname());
- }
- int startGate(int number_of_projects);
- int main() {
- setlocale(LC_ALL, "rus");
- srand(time(0));
- cout << "Добро пожаловать. Введите количество курсовых проектов (до 20).\n";
- int number_of_projects = 0;
- while (number_of_projects < 1 || number_of_projects > 20) {
- cout << "Количество: ";
- cin >> number_of_projects;
- if (number_of_projects < 0) {
- cout << "\nКак количество может быть отрицательный ?! (Вводите только натуральные числа)\n";
- } else if (number_of_projects > 20) {
- cout << "\n(Вводите числа меньше или равные 20)\n";
- } else if (number_of_projects == 0) {
- cout << "\nНу хотя бы один!\n";
- } else {
- cout << "\nЗамечательно!\n";
- }
- }
- startGate(number_of_projects);
- }
- int startGate(int number_of_projects) {
- List list;
- for (int i = 0; i < number_of_projects; i++) {
- list.add(new Project);
- }
- while (true) {
- system("cls");
- mainMenu();
- int choice = 0;
- int second_choice = 0;
- int num = 0, data1 = 0;
- unsigned int data = 0;
- string name, namecopy;
- string name1, namecopy1;
- cin >> choice;
- switch (choice) {
- case 1: {
- system("cls");
- cout << "Введите фамилию: \n> ";
- cin >> name;
- getline(cin, namecopy);
- system("cls");
- cout << "Введите инициалы в следующем формате [Х.Х.] : \n> ";
- cin >> name1;
- getline(cin, namecopy1);
- system("cls");
- cout << "Введите оценку за качество программы: \n> ";
- do {
- cin >> num;
- if (num < 0 || num > 2) {
- cout << "Вне возможных рамок(от 0 до 2). Попробуйте ещё раз ! \n> ";
- }
- } while (num < 0 || num > 2);
- system("cls");
- cout << "Введите оценку за качество записки: \n> ";
- do {
- cin >> data;
- if (data < 0 || data > 2) {
- cout << "Вне возможных рамок(от 0 до 2). Попробуйте ещё раз ! \n> ";
- }
- } while (data < 0 || data > 2);
- system("cls");
- cout << "Введите оценку за качество защиты: \n> ";
- do {
- cin >> data1;
- if (data1 < 0 || data1 > 2) {
- cout << "Вне возможных рамок(от 0 до 2). Попробуйте ещё раз ! \n> ";
- }
- } while (data1 < 0 || data1 > 2);
- system("cls");
- list.add(new Project(name + namecopy, name1 + namecopy1, num, data, data1));
- system("cls");
- mainMenu();
- cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Новый курсовой проект добавлен !";
- Sleep(1000);
- }
- break;
- case 2: {
- list.add(new Project);
- system("cls");
- mainMenu();
- cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Новый курсовой проект добавлен !";
- Sleep(1000);
- }
- break;
- case 3: {
- while (num < 1 || num > Project::COUNTER) {
- system("cls");
- mainMenu();
- cout << "Проект под каким номером вы хотите удалить ?\n> ";
- cin >> num;
- if (num < 1 || num > Project::COUNTER) {
- cout << "Проект с номером " << num << " не существет. Попробуйте ещё раз.\n>";
- Sleep(1000);
- }
- }
- list.remove(num);
- cout << "\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Проект под номером " << num << " удален.\n";
- Sleep(1000);
- }
- break;
- case 4: {
- while (second_choice != 7) {
- system("cls");
- showProjectsMenu();
- cin >> second_choice;
- switch (second_choice) {
- case 1: {
- system("cls");
- list.print();
- system("pause");
- }
- break;
- case 2: {
- do {
- system("cls");
- cout << "С какого проекта начнём ? (Введите номер проекта): \n> ";
- cin >> num;
- if (num < 1 || num > Project::COUNTER) {
- cout << "Проекта с номером " << num << " не существует\n";
- Sleep(1000);
- }
- } while (num < 1 || num > Project::COUNTER);
- system("cls");
- list.print(num);
- system("pause");
- }
- break;
- case 3: {
- do {
- system("cls");
- cout << "Какой проект посмотрим? (Введите номер проекта): \n> ";
- cin >> num;
- if (num < 1 || num > Project::COUNTER) {
- cout << "Проект с номером " << num << " не существует\n";
- Sleep(1000);
- }
- } while (num < 1 || num > Project::COUNTER);
- system("cls");
- list.getProject(num)->info();
- system("pause");
- }
- break;
- case 4: {
- vector<Project *> out;
- for (int i = 0; i < Project::COUNTER; i++) {
- out.push_back(list.getProject(i + 1));
- }
- sort(out.begin(), out.end(), sortByQAprogramm);
- system("cls");
- for (int i = 0; i < Project::COUNTER; i++) {
- out[i]->info();
- }
- system("pause");
- }
- break;
- case 5: {
- vector<Project *> out;
- for (int i = 0; i < Project::COUNTER; i++) {
- out.push_back(list.getProject(i + 1));
- }
- sort(out.begin(), out.end(), sortByQAnote);
- system("cls");
- for (int i = 0; i < Project::COUNTER; i++) {
- out[i]->info();
- }
- system("pause");
- }
- break;
- case 6: {
- vector<Project *> out;
- for (int i = 0; i < Project::COUNTER; i++) {
- out.push_back(list.getProject(i + 1));
- }
- sort(out.begin(), out.end(), sortByQAprotection);
- system("cls");
- for (int i = 0; i < Project::COUNTER; i++) {
- out[i]->info();
- }
- system("pause");
- }
- break;
- case 7: {
- vector<Project *> out;
- for (int i = 0; i < Project::COUNTER; i++) {
- out.push_back(list.getProject(i + 1));
- }
- sort(out.begin(), out.end(), sortBySurname);
- system("cls");
- for (int i = 0; i < Project::COUNTER; i++) {
- out[i]->info();
- }
- system("pause");
- }
- break;
- default:
- break;
- }
- }
- }
- break;
- case 5: {
- while (num < 1 || num > Project::COUNTER) {
- system("cls");
- mainMenu();
- cout << "Проект под каким номером вы хотите редактировать ?\n> ";
- cin >> num;
- if (num < 1 || num > Project::COUNTER) {
- cout << "Проект с номером " << num << " не существет. Попробуйте ещё раз.\n>";
- Sleep(1000);
- } else {
- while (second_choice != 4) {
- system("cls");
- showChangeProjectMenu(list.getProject(num));
- cin >> second_choice;
- switch (second_choice) {
- case 1: {
- cout << "Введите оценку за качество программы: \n> ";
- do {
- cin >> data;
- if (data < 0 || data > 2) {
- cout << "Вне возможных рамок. Попробуйте ещё раз ! \n> ";
- }
- } while (data < 0 || data > 2);
- list.getProject(num)->changeQAprogramm(data);
- system("cls");
- showChangeProjectMenu(list.getProject(num));
- cout << "\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Оценка за качество программы изменена!";
- Sleep(1000);
- }
- break;
- case 2: {
- cout << "Введите оценку за качество записки: \n> ";
- do {
- cin >> data1;
- if (data1 < 0 || data1 > 2) {
- cout << "Вне возможных рамок. Попробуйте ещё раз ! \n> ";
- }
- } while (data1 < 0 || data1 > 2);
- list.getProject(num)->changeQAnote(data1);
- system("cls");
- showChangeProjectMenu(list.getProject(num));
- cout << "\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Оценка за качество программы изменена!";
- Sleep(1000);
- }
- break;
- case 3: {
- cout << "Введите оценку за качество защиты: \n> ";
- do {
- cin >> data;
- if (data < 0 || data > 2) {
- cout << "Вне возможных рамок. Попробуйте ещё раз ! \n> ";
- }
- } while (data < 0 || data > 2);
- list.getProject(num)->changeQAprotection(data);
- system("cls");
- showChangeProjectMenu(list.getProject(num));
- cout << "\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Оценка за качество защиты изменена!";
- Sleep(1000);
- }
- break;
- case 4: {
- }
- break;
- default: {
- }
- break;
- }
- }
- }
- }
- }
- break;
- case 6: {
- cout << Project::COUNTER << "\n";
- system("pause");
- }
- break;
- case 7: {
- cout << Project::AVERAGE_MARK << "\n";
- switch ( int( Project::AVERAGE_MARK + 0.5f ) ) {
- case 0:
- cout << "Плохо.\n";
- break;
- case 1:
- cout << "Нормально.\n";
- break;
- case 2:
- cout << "Хорошо.\n";
- break;
- default:
- break;
- }
- system("pause");
- }
- break;
- case 9: {
- system("cls");
- info();
- system("pause");
- }
- break;
- case 0: {
- system("cls");
- mainMenu();
- cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n> ";
- cout << "Пока-пока ! ";
- Sleep(1000);
- return 0;
- }
- break;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement