Опа, твоя мать проститутка
-
Автор темы
- #1
Написал основную часть программы, но с личным заданием справится не смог.
Задание: Вывести перечень групп потока с указанием(для каждой группы) процента суммарной стипендии группы по отношению к суммарной стипендии потока.
Реализация основной части.
Задание: Вывести перечень групп потока с указанием(для каждой группы) процента суммарной стипендии группы по отношению к суммарной стипендии потока.
Студент потока характеризуется следующими данными:
- ФИО (до 50 символов);
- номер группы;
- набор из пяти оценок за последнюю сессию (без указания предметов);
- размер стипендии.
1) разработать (и программно реализовать) динамические структуры данных и
алгоритмы их обработки, позволяющие поддерживать выполнение следующих функций:
- консольный ввод/вывод данных о всех студентах потока;
- файловый ввод/вывод данных о потоке;
- редактирование данных о студентах и группах потока, включающее операции
добавления/удаления групп и студентов;
2) разработать и программно реализовать алгоритмы обработки базы данных,
предусмотренные персональным заданием
- ФИО (до 50 символов);
- номер группы;
- набор из пяти оценок за последнюю сессию (без указания предметов);
- размер стипендии.
1) разработать (и программно реализовать) динамические структуры данных и
алгоритмы их обработки, позволяющие поддерживать выполнение следующих функций:
- консольный ввод/вывод данных о всех студентах потока;
- файловый ввод/вывод данных о потоке;
- редактирование данных о студентах и группах потока, включающее операции
добавления/удаления групп и студентов;
2) разработать и программно реализовать алгоритмы обработки базы данных,
предусмотренные персональным заданием
Реализация основной части.
C++:
#include <iostream>
#include <windows.h>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int program = 1;
struct Node
{
int student_number;
int stipend; int stipend_group;
int student_group;
int score_1, score_2, score_3, score_4, score_5;
string name;
Node* Next, * Prev;
};
class List
{
Node* Head, * Tail;
public:
List() :Head(NULL), Tail(NULL) {};
~List();
void show();
void change();
void menu();
void del();
void add(int student_number, int stipend, int student_group, int score_1, int score_2, int score_3, int score_4, int score_5, string name);
void task(int student_count, int group);
};
List::~List()
{
while (Head)
{
Tail = Head->Next;
delete Head;
Head = Tail;
}
}
void List::add(int student_number, int stipend, int student_group, int score_1, int score_2, int score_3, int score_4, int score_5, string name) //Добавление студента
{
Node* temp = new Node;
temp->Next = NULL;
temp->student_number = student_number;
temp->stipend = stipend;
temp->student_group = student_group;
temp->score_1 = score_1;
temp->score_2 = score_2;
temp->score_3 = score_3;
temp->score_4 = score_4;
temp->score_5 = score_5;
temp->name = name;
if (Head != NULL)
{
temp->Prev = Tail;
Tail->Next = temp;
Tail = temp;
}
else
{
temp->Prev = NULL;
Head = Tail = temp;
}
}
void List::task(int student_count, int group) //Вывести перечень групп потока с указанием(для каждой группы) процента суммарной стипендии группы по отношению к сумарной стипендии потока
{
Node* temp = new Node;
int* Arr = new int[group];
for (int i = 0; i < student_count; i++)
{
Arr[i] = temp->student_number;
temp = temp->Next;
}
}
void List::del() //Удаление
{
int index = 0;
int a;
while (index == 0)
{
cout << "1. Удаление студента\n";
cout << "2. Удаление группы\n";
cout << "0. Выход\n";
cin >> a;
if (a == 1)
{
Node* temp = Head;
int n = 0;
while (temp != NULL)
{
n++;
temp = temp->Next;
}
temp = Head;
cout << "Номер студента: ";
int b;
int m = 0;
int pos = 0;
cin >> b;
for (int i = 0; i < n + m; i++)
{
if (temp != NULL)
{
if (b == temp->student_number)
{
Node* Prevdel = temp->Prev;
Node* Nextdel = temp->Next;
if (Prevdel != 0 && i != 0)
Prevdel->Next = Nextdel;
if (Nextdel != 0 && i != 0)
Nextdel->Prev = Prevdel;
if (i == 0 + pos)
{
Head = Nextdel;
pos++;
}
if (i == n - pos)
{
Tail = Prevdel;
}
m = temp->student_number;
delete temp;
temp = Head;
}
else
temp = temp->Next;
}
}
show();
}
if (a == 2)
{
Node* temp = Head;
int n = 0;
int pos = 0;
int student_group;
int m = 0;
cout << "Группа: ";
cin >> student_group;
while (temp != NULL)
{
n++;
temp = temp->Next;
}
temp = Head;
for (int i = 0; i < n + m; i++)
{
if (temp != NULL)
{
if (student_group == temp->student_group)
{
Node* Prevdel = temp->Prev;
Node* Nextdel = temp->Next;
if (Prevdel != 0 && i != 0)
Prevdel->Next = Nextdel;
if (Nextdel != 0 && i != 0)
Nextdel->Prev = Prevdel;
if (i == 0 + pos)
{
Head = Nextdel;
pos++;
}
if (i == n - pos)
{
Tail = Prevdel;
}
m = temp->student_number;
delete temp;
temp = Head;
}
else
temp = temp->Next;
}
}
show();
}
if (a == 0)
{
index++;
}
}
}
void List::show() //Вывод списка
{
Node* temp = Head;
cout << "Список студентов:\n";
if (Head != NULL)
{
while (temp != NULL)
{
cout << temp->student_number << ". ";
cout << temp->name << " ";
cout << "Группа - " << temp->student_group << " ";
cout << "Стипендия - " << temp->stipend << " ";
cout << "Оценки: " << temp->score_1 << ", " << temp->score_2 << ", " << temp->score_3 << ", " << temp->score_4 << ", " << temp->score_5 << " ";
temp = temp->Next;
cout << "\n";
}
}
else
cout << "Список пуст\n";
}
void List::change() //Редактор
{
Node* temp = Head;
int num;
cout << "Номер студента: ";
cin >> num;
while (temp->student_number != num)
{
temp = temp->Next;
}
int a = -1;
while (a != 0)
{
cout << "Изметить данные о " << temp->name << "\n";
cout << "1. Изменить имя\n";
cout << "2. Изменить группу\n";
cout << "3. Изменить размер стипендии\n";
cout << "4. Изменить 1-ую оценку\n";
cout << "5. Изменить 2-ую оценку\n";
cout << "6. Изменить 3-ю оценку\n";
cout << "7. Изменить 4-ую оценку\n";
cout << "8. Изменить 5-ую оценку\n";
cout << "0. Выход\n";
int stipend, student_group, score_1, score_2, score_3, score_4, score_5;
string name;
cin >> a;
if (a == 1)
{
cout << "Имя студента: ";
getline(cin, name);
getline(cin, name);
temp->name = name;
}
if (a == 2)
{
cout << "Группа студента: ";
cin >> student_group;
temp->student_group = student_group;
}
if (a == 3)
{
cout << "Введите стипендию: ";
cin >> stipend;
temp->stipend = stipend;
}
if (a == 4)
{
cout << "Введите оценку: ";
cin >> score_1;
temp->score_1 = score_1;
}
if (a == 5)
{
cout << "Введите оценку: ";
cin >> score_2;
temp->score_2 = score_2;
}
if (a == 6)
{
cout << "Введите оценку: ";
cin >> score_3;
temp->score_3 = score_3;
}
if (a == 7)
{
cout << "Введите оценку: ";
cin >> score_4;
temp->score_4 = score_4;
}
if (a == 8)
{
cout << "Введите оценку: ";
cin >> score_5;
temp->score_5 = score_5;
}
cout << "Измененные данные о " << temp->name << ":\n";
cout << temp->student_number << ". ";
cout << temp->name << " ";
cout << "Группа - " << temp->student_group << " ";
cout << "Стипендия - " << temp->stipend << " ";
cout << "Оценки:" << temp->score_1 << ", " << temp->score_2 << ", " << temp->score_3 << ", " << temp->score_4 << ", " << temp->score_5 << "\n";
}
}
void List::menu()//функция меню
{
int index = 0;
while (index == 0)
{
int a;
cout << "Меню\n";
cout << "1. Заполнение студентов\n2. Вывод списка студентов\n3. Файловый импорт\n4. Файловый экспорт\n5. Редактирование\n6. Удаление\n0. Выйти из меню\n";
cin >> a;
if (a==1)
{
int n, student_number, stipend, student_group, score_1, score_2, score_3, score_4, score_5;
string name;
cout << "Введите количество студентов\n";
cin >> n;
student_number = 1;
for (int i = 0; i < n; i++)
{
cout << "Введите имя студента\n";
getline(cin, name);
getline(cin, name);
cout << "Введите группу студента\n";
cin >> student_group;
cout << "Введите стипендию\n";
cin >> stipend;
cout << "Введите оценки через enter\n";
cin >> score_1 >> score_2 >> score_3 >> score_4 >> score_5;
add(student_number, stipend, student_group, score_1, score_2, score_3, score_4, score_5, name);
student_number++;
}
cout << endl;
show();
cout << endl;
}
if (a==2)
{
cout << endl;
show();
cout << endl;
}
if (a==3)
{
int n, student_number, stipend, student_group, score_1, score_2, score_3, score_4, score_5;
string name; string s;
ifstream file("import.txt");
if (!file.is_open())
{
cout << "Ошибка открытия файла!\n" << endl;
}
else
{
vector<string> strings;
while (getline(file, s, ','))
{
strings.push_back(s);
}
file.close();
string student_groups, stipends, marks;
int n;
while (!empty(strings))
{
name = strings[0];
while (name[0] == ' ')
{
name.erase(0, 2);
}
student_number = stoi(name);
name.erase(0, 2);
student_groups = strings[1];
stipends = strings[2];
marks = strings[3];
student_groups.erase(0, 8);
student_group = stoi(student_groups);
stipends.erase(0, 10);
stipend = stoi(stipends);
marks.erase(0, 8);
score_1 = stoi(marks);
marks.erase(0, 2);
score_2 = stoi(marks);
marks.erase(0, 2);
score_3 = stoi(marks);
marks.erase(0, 2);
score_4 = stoi(marks);
marks.erase(0, 2);
score_5 = stoi(marks);
add(student_number, stipend, student_group, score_1, score_2, score_3, score_4, score_5, name);
strings.erase(strings.begin(), strings.begin() + 4);
}
cout << endl;
show();
cout << endl;
}
}
if (a==4)
{
Node * temp = Head;
ofstream in;
in.open("export.txt", ios_base::trunc);
while (temp != NULL)
{
in << temp->student_number << ". ";
in << temp->name << " ";
in << "Группа - " << temp->student_group << " ";
in << "Стипендия - " << temp->stipend << " ";
in << "Оценки:" << temp->score_1 << ", " << temp->score_2 << ", " << temp->score_3 << ", " << temp->score_4 << ", " << temp->score_5 << " ";
temp = temp->Next;
in << "\n";
}
in.close();
}
if (a==5)
{
cout << endl;
show();
change();
cout << endl;
}
if (a==6)
del();
if (a==0)
index++;
}
}
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
List student;
while (program == 1)
{
student.menu();
cout << "Рестарт программы - 1\nЗавершение программы - 0\n";
cin >> program;
}
return 0;
}
Последнее редактирование: