Тема: Динамічні структури!!!
реалізувати операцію вставки нового елемента у відсортований список і операцію вилучення зі списку даних про 3-х студентів з найнижчим рейтинговим балом
вже зроблено пів програми потрібно тільки вилучити дані про 3-х студентів з найнижчим рейтинговим балом
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstring>
#include <Windows.h>
using namespace std;
struct info{
char *surname;
char *name;
char *date;
int matan, diskr, prog, ist, kult;
};
struct sesiya{
info data;
sesiya *next;
};
sesiya *start = new sesiya, *p = new sesiya, *pp = new sesiya;
int quantity=0;
void swap(info *, info *);
void sort(int);
void addItem();
void displayALL();
void komisiya();
void remove(int);
void main(){
setlocale(LC_ALL,"UKR");
char *lexems[9], **str = new char* [15];
for(int i = 0; i < 15; i++ )//виділення пам'яті під **str
str[i] = new char [200];
if(!start || !p || !pp || !lexems || !str){
cout<<"Недостатньо пам'яті!";
_getch();
return;
}
ifstream file1("student.txt");
if (file1.fail()){
cerr << "Помилка читання файлу" << endl;
exit(1);
}
start = NULL;
while (!file1.eof()){
int k=0;
file1.getline(str[quantity], 200);//зчитування рядка
//розбиття рядка на лексеми
lexems[k]=strtok(str[quantity],"\t");
while(lexems[k]){
k++;
lexems[k]=strtok(NULL,"\t");
}
p->data.surname=lexems[0];
p->data.name=lexems[1];
p->data.date=lexems[2];
p->data.matan=atoi(lexems[3]);
p->data.diskr=atoi(lexems[4]);
p->data.prog=atoi(lexems[5]);
p->data.ist=atoi(lexems[6]);
p->data.kult=atoi(lexems[7]);
if(!start)//виконається лише раз
start = p;
sesiya *pp = new sesiya;
p->next = pp;
p=pp;
quantity++;
}
file1.close();
delete [] str;
p->next = NULL;
displayALL();
sort(quantity);
cout<<"\n\nВiдбулося сортування за назвою в алфавiтному порядку.\n\n";
displayALL();
komisiya();
char answer[4];
cout<<"\nДодати новий запис yes/no ? ";
cin>>answer;
while(1){
if(!strcmp(answer, "yes") || !strcmp(answer, "Yes") || !strcmp(answer, "YES")){
while(p->next)
p=p->next;
addItem();
sort(quantity);
cout<<endl;
displayALL();
komisiya();
cout<<"\nДодати новий запис yes/no ? ";
cin>>answer;
}
else if(!strcmp(answer, "no") || !strcmp(answer, "No") || !strcmp(answer, "NO"))
break;
else
cin>>answer;
}
/*cout<<"\nВилучити 3-х студентiв з найнижчим рейтинговим балом yes/no ? ";
cin>>answer;
cout<<"\nСписок без 3-х студентiв з найнижчим рейтинговим балом:\n\n";
while(1){
int k=0;//допоміжна змінна, яка вказує чи відповідь так
if(!strcmp(answer, "yes") || !strcmp(answer, "Yes") || !strcmp(answer, "YES")){
remove(quantity);
sort(quantity);
displayALL();
komisiya();
break;
}
else if(!strcmp(answer, "no") || !strcmp(answer, "No") || !strcmp(answer, "NO"))
break;
else
cin>>answer;}
*/
_getch();
}
void swap(info *a, info *b)
{
info *tmp;
tmp=b;
b=a;
a=tmp;
}
void sort(int quantity){
for(int j=0; j<quantity; j++){
p = start;
while(1){
pp = p;
p = p->next;
if(!pp->next)
break;
int k=0;
if(pp->next->next!=NULL){
while(pp->data.surname[k] && pp->next->data.surname[k]){
if((char)pp->data.surname[k]>(char)pp->next->data.surname[k]){
swap(pp->data, pp->next->data);
break;
}
else if((char)pp->data.surname[k]==(char)pp->next->data.surname[k])
k++;
else
break;
}
}
}
}
pp->next = NULL;
}
void addItem(){
sesiya *ptr = new sesiya;
short length = 50;
char *surname = new char[length];
char *name = new char[length];
char *date = new char[length];
cin.ignore();
cout<<"\nВведiть прiзвище: ";
cin.getline(surname, length);
ptr->data.surname = surname;
cout<<"Введiть Iмя: ";
cin.getline(name, length) ;
ptr->data.name = name;
cout<<"Введiть рiк: ";
cin.getline(date, length) ;
ptr->data.date = date;
cout<<"Матан: ";
cin>>ptr->data.matan;
cout<<"КДМ: ";
cin>>ptr->data.diskr;
cout<<"ОП: ";
cin>>ptr->data.prog;
cout<<"Iстор: ";
cin>>ptr->data.ist;
cout<<"Культ: ";
cin>>ptr->data.kult;
ptr->next = start;
start = ptr;
quantity ++;
}
void displayALL(){
p = start;
cout<<"Прiзв\tIмя\tДата\t\tМатан\tКДМ\tОП\tIстор\tКульт\n";
while(p->next){
cout<<p->data.surname<<"\t"<<p->data.name<<"\t"<<p->data.date<<"\t"<<p->data.matan<<"\t"<<p->data.diskr<<"\t"<<p->data.prog<<"\t"<<
p->data.ist<<"\t"<<p->data.kult<<endl;
p = p->next;}
}
void komisiya(){
cout<<"\nСтуденти якi отримали 2 на iспитах\n\n";
p = start;
cout<<"Прiзв\tIмя\tДата\t\tМатан\tКДМ\tОП\tIстор\tКульт\n";
while(p->next){
if((p->data.matan==2) || (p->data.diskr==2) || (p->data.prog==2) || (p->data.ist==2) || (p->data.kult==2)){
cout<<p->data.surname<<"\t"<<p->data.name<<"\t"<<p->data.date<<"\t"<<p->data.matan<<"\t"<<p->data.diskr<<"\t"<<p->data.prog<<"\t"<<
p->data.ist<<"\t"<<p->data.kult<<endl;}
p = p->next;
}
}
допоможіть будь ласка буду дуже вдячний))