Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Method_Lab_Work_ANSI_C__2010_lab1-10_v2.doc
Скачиваний:
39
Добавлен:
22.11.2018
Размер:
1.14 Mб
Скачать

Приклад коду

#include<iostream>

#include<conio.h>

#include<string.h>

#include<iomanip> //бібліотека маніпуляторів уведення-виведення

using namespace std;

/////////////// оголошення структур ///////////////////

struct teacher //структура даних про викладача

{

char fio[10]; //прізвище

char posada[20]; //посада

float salary; //зарплатня

};

struct stud //структура даних про студента

{

char fio[10]; //прізвище

float bal; //середній бал

float stip; //стипендія

};

struct subject //структура даних про дисципліни

{

char name[10]; //назва дисципліни

teacher prepod; //викладач, який читає дисципліну

int stnum; //кількість студентів, які вивчають цю дисципліну

stud student[10] ; //масив студентів, які вивчають дисципліну

};

subject predmet[10]; //масив дисциплін

int n; //кількість записів

///////////////////// Введення даних ////////////////////

void input()

{

char answer_prep, //параметр закінчення введення даних про викладача

answer_stud; //параметр закінчення введення даних про студента

int i=0; //початкове значення лічильника кількості дисциплін

do

{ //уведення даних про викладача

cout<<"subject name"<<endl; //уведення назви дисципліни

cin>>predmet[i].name; //уведення назви дисципліни

cout<<"teacher\'s surname"<<endl;

cin>>predmet[i].prepod.fio;

cout<<"teacher\'s position"<<endl;

cin>>predmet[i].prepod.posada;

cout<<"teacher\'s salary"<<endl;

cin>>predmet[i].prepod.salary;

int j=0; //початкове значення лічильника кількості студентів

do

{

//уведення даних про студента, який навчається у конкретного викладача

cout<<"student\'s surname"<<endl;

сin>>predmet[i].student[j].fio;

cout<<"student\'s ball on subject"<<endl;

cin>>predmet[i].student[j].bal;

cout<<"student\'s stipend"<<endl;

cin>>predmet[i].student[j].stip;

j++; //перехід до індексу наступного студента

cout<<"any students else? y/n"<<endl;

answer_stud=getch();

} while(answer_stud!='n'); //кінець введення даних про студента

predmet[i].stnum=j; //кількість студентів, які вивчають і-у

// дисципліну

cout<<"contunue input? y/n"<<endl;

answer_prep=getch();

i++; //перехід до нової дисципліни

} while (answer_prep!='n'); //кінець введення даних про викладача

n=i; //кількість викладачів

getch(); //чекати натиснення клавіші

} //кінець функції input()

/////////////////// виведення даних ///////////////////////

void output()

{

for(int i=0;i<n;i++)

{

cout<<"subject------teacher----position-----salary"<<endl;

cout.setf(ios::left); //вирівнювання даних на екрані зліва

cout<<setw(12)<<predmet[i].name<<setw(12)<<predmet[i].prepod.fio<<

setw(13)<<predmet[i].prepod.posada<<predmet[i].prepod.salary<<endl;

cout<<"____Students"<<endl;

cout<<" fio--------ball-----stipend"<<endl;

for(int j=0;j<predmet[i].stnum;j++) //виведення даних про студентів

{

cout.setf(ios::left);

cout<<setw(12)<<predmet[i].student[j].fio<<setw(10)<<

predmet[i].student[j].bal<<predmet[i].student[j].stip<<endl;

}

}

getch(); //чекати натиснення клавіші

} //кінець функції read_from_file()

//////////////// виведення даних про викладачів /////////////

void list_prepod()

{

cout<<"---subject----teacher-----position-----salary \n";

for(int i=0;i<n;i++)

{

cout.setf(ios::left); //виведення даних про викладачів

cout<< setw(10)<<predmet[i].name<<setw(12)<<predmet[i].prepod.fio<<

setw(14)<<predmet[i].prepod.posada<<predmet[i].prepod.salary<<endl;

}

getch(); //чекати натиснення клавіші

}

/////// пошук дисципліни з найвищім середнім балом ////////////

void maxbal()

{

float sr[10];

int i; //середній бал

for(i=0;i<n;i++)

{

sr[i]=0; //сума балів успішності по і-й дисципліні

for(int j=0;j<predmet[i].stnum;j++) //перегляд даних про студентів

//сума балів студентів з дисципліни

sr[i]+=predmet[i].student[j].bal;

sr[i]=float(sr[i])/predmet[i].stnum; //середній бал з конкретної

//дисципліні

}

cout<<" Subject\'s average ball"<<endl;

for (int i=0;i<n;i++) //цикл виведення даних про всіх викладачів

{

cout.setf(ios::left);

cout<<setw(10)<<predmet[i].name<<setw(5)<<sr[i]<<endl;

}

cout<<" subject with the highest ball: "<<endl;

float max=sr[0]; //максимальний бал

int nomer_predmet=0; //індекс дисципліни у масиві дисциплін

//пошук найбільшого середнього бала з усіх дисциплін

for(int i=1;i<kol_prep; i++)

if (max<sr[i])

{

max=sr[i];

nomer_predmet=i;

}

cout<<" max ball="<<max<<" in subject "<<

predmet[nomer_predmet].name<<

" teacher "<<predmet[nomer_predmet].prepod.fio<<endl;

getch(); //чекати натиснення клавіші

} //кінець функції maxbal()

////////////// перерозподіл стипендій /////////////////

void stipendia()

{

float sum=0; //сума стипендій студентів з середнім балом меншим трьох

int k=0; //кількість записів про студентів у вхідному масиві

int m=0; //лічильник кількості студентів

stud s,tmp[10],stud_tmp[10]; //проміжні масиви студентів

//копіювання даних про студентів у масив без дисциплін і прізвищ викладачів

for(int i=0;i<n;i++)

for(int j=0;j<predmet[i].stnum;j++) //обробка масиву студентів

{ //копіювання масиву студентів

tmp[k]=predmet[i].student[j];

k++;

}

//===розрахунок середнього бала студентів, що вивчають різні дисципліни =====

int kol[10]; //лічильник дисциплін, які вивчає один студент

for (int i=0;i<k;i++)

{ //перегляд усього масиву студентів

stud_tmp[m].bal=0; //сума балів одного студента з різних дисциплін

kol[m]=0; //кількість дисциплін для одного студента

int f=0; //прапорець обробки даних про студента

//перегляд даних про студентів від початку масиву до конкретного запису

for (int j=0;j<i;j++)

if ((strcmp(tmp[i].fio,tmp[j].fio)==0))

f=1; //відомості про студента вже зустрічалися в масиві

if (f==0) //відомості про студента ще не зустрічалися в масиві

{

for (int j=i;j<k;j++) //перегляд масиву студентів

if (strcmp(tmp[i].fio,tmp[j].fio)==0) //студент вивчає

// інший предмет

{

stud_tmp[m].bal+=tmp[j].bal; //накопичення балів

// одного студента

strcpy(stud_tmp[m].fio, tmp[j].fio); //запам’ятати

// прізвище студента

stud_tmp[m].stip=tmp[j].stip; //запам’ятати

//розмір стипендії

kol[m]++; //вибір наступної дисципліни

}

stud_tmp[m].bal=float(stud_tmp[m].bal)/kol[m]; //розрахунок

// середнього бала

m++; //перехід до наступного студента

} // end of if (f==0)

} //end of for I

//================ сортування студентів за алфавітом =================

int all_stud=m; //загальна кількість студентів

for (int i=0;i<all_stud;i++)

for(int j=i+1;j<all_stud;j++)

if (strcmp(stud_tmp[i].fio,stud_tmp[j].fio)>0)

{

s=stud_tmp[i];

stud_tmp[i]=stud_tmp[j];

stud_tmp[j]=s;

}

//=== виведення даних про загальний середній бал і початкову стипендію ====

cout<<"Array of students after sort"<<endl;

cout<<"—student------average ball------stipend"<<endl;

for (int i=0;i<all_stud;i++)

{

cout.setf(ios::left);

cout<<setw(20)<<stud_tmp[i].fio<<setw(15)<<stud_tmp[i].bal<<

stud_tmp[i].stip<<endl;

}

getch();

// ================== перерозподіл стипендій =======================

int j=0; //кількість студентів

for (int i=0;i<all_stud;i++)

if ((stud_tmp[i].bal>=0)&&(stud_tmp[i].bal<3)) //умови зняття стипендій

{

sum+=stud_tmp[i].stip;

stud_tmp[i].stip=0; //обнуління даних про стипендії

j++;

}

//розподіл стипендії між студентами, які добре вчаться

for (int i=0;i<all_stud; i++)

if ((stud_tmp[i].bal>=3)&&(stud_tmp[i].bal<=5))

stud_tmp[i].stip=stud_tmp[i].stip+sum/(all_stud-j);

//=============== виведення нарахованої стипендії =================

//виведення заголовка таблиці

cout<<endl<<"Counted stipend"<<endl;

cout<<"—FIO------average ball------stipend"<<endl;

//виведення даних з масиву студентів

for(int i=0;i<all_stud;i++)

{

cout.setf(ios::left);

cout<<setw(15)<<stud_tmp[i].fio<<setw(15)<<stud_tmp[i].bal;

if ((stud_tmp[i].bal>=3)&&(stud_tmp[i].bal<=5))

cout<<stud_tmp[i].stip<<endl;

else

cout<<"has no stipend"<<endl; //стипендію не нараховано

}

getch(); //чекати натиснення клавіші

} //кінець функції stipendia()

///////////////// виведення даних про студентів //////////////////

void list_student()

{

cout<<"---teacher----student-----ball----stipend \n";

for(int i=0;i<n;i++)

{

cout<<" "<<predmet[i].prepod.fio<<endl; //прізвища викладача

//вибір студентів, які навчаються у конкретного викладача

for(int j=0;j<predmet[i].stnum;j++)

{

cout.setf(ios::left); //виведення даних про студентів

cout<<setw(12)<<predmet[i].student[j].fio<<setw(10)<<

predmet[i].student[j].bal<<predmet[i].student[j].stip<<endl;

}

}

} //кінець функції list_student()

//////////////////// головна програма //////////////////

void main()

{

while (1)

{

system("cls");

cout<<" MENU \n"<<endl;

cout<<"1. Database input by keyboard."<<endl;

cout<<"2. Output data."<<endl;

cout<<"3. View teacher\’s database."<<endl;;

cout<<"4. View student\’s database."<<endl;

cout<<"5. List of subjects with the highest average ball."<<endl;

cout<<"6. Stipend."<<endl;

cout<<"7. Stipend found."<<endl;

cout<<"8. Exit"<<endl;

cout<<endl;

int key; //номер пункту меню

cout<< "Choosen menu item:";

cin>>key; //вибір потрібного пункту меню

switch(key) //вибір функції реалізації меню

{

case 1: {input();break;} //введення даних

case 2: {output();break;} //виведення даних з масиву на екран

case 3: {list_prepod();break;} //виведення даних про викладачів

case 4: {list_student();break;} //виведення даних про студентів

case 5: {maxbal();break;} //пошук дисципліни з найвищім балом

case 6: {stipendia();break;} //перерозподіл стипендій

case 8: {exit (0); break;} //вихід з програми

default: {cout<<"Try another time...";getch();break;}

}

}

} //кінець функції main()

Рис. 10.1. Результати роботи програми. Виконання меню 2

Рис. 10.2. Результати роботи програми. Виконання меню 5

Рис. 10.3. Результати роботи програми. Виконання меню 6

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]