10. Зміст робіт зі створення пз:
Специфікація вимог.
Аналіз
Проектування
Реалізація
Перелік документів, які підлягають розробці: програма, технічне
завдання, звіт про виконання роботи, структури даних, блок-схема алгоритму.
Перелік літератури і посилань:
Стауструп Б. П. Язык программирования С++. (Учебное пособие). – Санкт-Петербург: “БХВ Петербург”. – 2010. – 745 с.
Схематичне зображення структури даних
Блок-схема алгоритму
Код програми
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstring>
#include <Windows.h>
using namespace std;
struct InfoAboutStudent{//ошолошення структури InfoAboutStudent
char *surname;
char *name;
char *date;
int Matan, Diskr, Programuvanja, IstoriaUkraine, IstoriaKulturu;
};
struct Sesiya{//оголошення структури Sesiya
InfoAboutStudent data;
Sesiya *next;
};
Sesiya *start = new Sesiya, *CurrentVkazivnuk = new Sesiya, *NextVkazivnuk = new Sesiya;
int Quantity=0;
void swap(InfoAboutStudent *, InfoAboutStudent *);//обмін
void Sortuvanja(int); //сортування
void AddItem(); //додавання повідомлення
void displayALL(); //вивід
void Komisiya(); //комісія
void remove(int); //видалення
void main(){
setlocale(LC_ALL,"UKR");
char *Lexems[9], **strichka = new char* [15];
for(int i = 0; i < 15; i++ )//виділення пам'яті під **str
strichka[i] = new char [200];
if(!start || !CurrentVkazivnuk || !NextVkazivnuk || !Lexems || !strichka){
cout<<"Недостатньо пам'яті!";
_getch();
return;
}
ifstream file1("student.txt");
if (file1.fail()){
cerr << "Помилка читання файлу" << endl;
exit(1);
}
start = NULL;
while (!file1.eof()){
int k=0;
file1.getline(strichka[Quantity], 200);//зчитування рядка
//розбиття рядка на лексеми
Lexems[k]=strtok(strichka[Quantity],"\t");
while(Lexems[k]){
k++;
Lexems[k]=strtok(NULL,"\t");
}
CurrentVkazivnuk->data.surname=Lexems[0];
CurrentVkazivnuk->data.name=Lexems[1];
CurrentVkazivnuk->data.date=Lexems[2];
CurrentVkazivnuk->data.Matan=atoi(Lexems[3]);
CurrentVkazivnuk->data.Diskr=atoi(Lexems[4]);
CurrentVkazivnuk->data.Programuvanja=atoi(Lexems[5]);
CurrentVkazivnuk->data.IstoriaUkraine=atoi(Lexems[6]);
CurrentVkazivnuk->data.IstoriaKulturu=atoi(Lexems[7]);
if(!start)//виконається лише раз
start = CurrentVkazivnuk;
Sesiya *NextVkazivnuk = new Sesiya;
CurrentVkazivnuk->next = NextVkazivnuk;
CurrentVkazivnuk=NextVkazivnuk;
Quantity++;
}
file1.close();
delete [] strichka;
CurrentVkazivnuk->next = NULL;
displayALL();
Sortuvanja(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(CurrentVkazivnuk->next)
CurrentVkazivnuk=CurrentVkazivnuk->next;
AddItem();
Sortuvanja(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);
Sortuvanja(Quantity);
displayALL();
Komisiya();
break;
}
else if(!strcmp(answer, "no") || !strcmp(answer, "No") || !strcmp(answer, "NO"))
break;
else
cin>>answer;}
*/
_getch();
}
void swap(InfoAboutStudent *a, InfoAboutStudent *b)
{
InfoAboutStudent *tmp;
tmp=b;
b=a;
a=tmp;
}
void Sortuvanja(int Quantity){
for(int j=0; j<Quantity; j++){
CurrentVkazivnuk = start;
while(1){
NextVkazivnuk = CurrentVkazivnuk;
CurrentVkazivnuk = CurrentVkazivnuk->next;
if(!NextVkazivnuk->next)
break;
int k=0;
if(NextVkazivnuk->next->next!=NULL){
while(NextVkazivnuk->data.surname[k] && NextVkazivnuk->next->data.surname[k]){
if((char)NextVkazivnuk->data.surname[k]>(char)NextVkazivnuk->next->data.surname[k]){
swap(NextVkazivnuk->data, NextVkazivnuk->next->data);
break;
}
else if((char)NextVkazivnuk->data.surname[k]==(char)NextVkazivnuk->next->data.surname[k])
k++;
else
break;
}
}
}
}
NextVkazivnuk->next = NULL;
}
void AddItem(){ //додання повідомлення
Sesiya *Pointer = 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);
Pointer->data.surname = surname;
cout<<"Введiть Iмя: ";
cin.getline(name, length) ;
Pointer->data.name = name;
cout<<"Введiть рiк: ";
cin.getline(date, length) ;
Pointer->data.date = date;
cout<<"Мат.аналіз: ";
cin>>Pointer->data.Matan;
cout<<"Компютерна дискретна математика : ";
cin>>Pointer->data.Diskr;
cout<<"Основи програмування : ";
cin>>Pointer->data.Programuvanja;
cout<<"Iсторія України: ";
cin>>Pointer->data.IstoriaUkraine;
cout<<"Історія культури: ";
cin>>Pointer->data.IstoriaKulturu;
Pointer->next = start;
start = Pointer;
Quantity ++;
}
void displayALL(){ //виведення даних
CurrentVkazivnuk = start;
cout<<"Прiзв\tIмя\tДата\t\tМатан\tКДМ\tОП\tIстор\tКульт\n";
while(CurrentVkazivnuk->next){
cout<<CurrentVkazivnuk->data.surname<<"\t"<<CurrentVkazivnuk->data.name<<"\t"<<CurrentVkazivnuk->data.date<<"\t"<<CurrentVkazivnuk->data.Matan<<"\t"<<CurrentVkazivnuk->data.Diskr<<"\t"<<CurrentVkazivnuk->data.Programuvanja<<"\t"<<
CurrentVkazivnuk->data.IstoriaUkraine<<"\t"<<CurrentVkazivnuk->data.IstoriaKulturu<<endl;
CurrentVkazivnuk = CurrentVkazivnuk->next;}
}
void Komisiya(){ //комісія
cout<<"\nСтуденти якi отримали 2 на iспитах\n\n";
CurrentVkazivnuk = start;
cout<<"Прiзв\tIмя\tДата\t\tМатан\tКДМ\tОП\tIстор\tКульт\n";
while(CurrentVkazivnuk->next){
if((CurrentVkazivnuk->data.Matan==2) || (CurrentVkazivnuk->data.Diskr==2) || (CurrentVkazivnuk->data.Programuvanja==2) || (CurrentVkazivnuk->data.IstoriaUkraine==2) || (CurrentVkazivnuk->data.IstoriaKulturu==2)){
cout<<CurrentVkazivnuk->data.surname<<"\t"<<CurrentVkazivnuk->data.name<<"\t"<<CurrentVkazivnuk->data.date<<"\t"<<CurrentVkazivnuk->data.Matan<<"\t"<<CurrentVkazivnuk->data.Diskr<<"\t"<<CurrentVkazivnuk->data.Programuvanja<<"\t"<<
CurrentVkazivnuk->data.IstoriaUkraine<<"\t"<<CurrentVkazivnuk->data.IstoriaKulturu<<endl;}
CurrentVkazivnuk = CurrentVkazivnuk->next;
} }
