Здравствуйте. После нескольких вечеров втыкания в основы с++ родился код. Задача - из файла Base.txt выводить группу, ФИО студента, оценки по 4 экзаменам и 5 зачетам. В том виде, как оно сейчас есть, программа работает. Но есть загвоздка - нужно до чтения из файла воткнуть структуру данных, а как это сделать, до меня что-то никак не доходит
Код:
#include "stdafx.h"
#include "iostream.h"
#include "fstream.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
int j,i=0,k,l,s=0,ekz[20][4];
char gr[20][5],surname[20][64],name[20][16],z[20][5];
float sum=0; //сумма всех оценок
void main(void)
{
Nach:printf("Vvedite nomer punkta:\n");
printf("1. Pokazat' spisok vseh studentov\n");
printf("2. Pokazat' dolzhnikov\n");
printf("3. Pokazat' otlichnikov\n");
printf("4. Pokazat' srednii ball studentov\n");
printf("5. Vyhod\n\n");
j=getch(); //читаем ASCII-код нажатой клавиши
ifstream input_file("Base.txt");
for (s=0;s<20;s++)
{
input_file>>gr[s]>>surname[s]>>name[s]>>ekz[s][0]>>ekz[s][1]>>ekz[s][2]>>ekz[s][3]>>z[s][0]>>z[s][1]>>z[s][2]>>z[s][3]>>z[s][4];
}
switch(j)
{
case 49: //нажали 1
printf("===========================Spisok studentov===========================\n"); //все студенты
for (s=0;s<20;s++)
{
cout<< gr[s]<<" <"<<surname[s]<<" "<<name[s]<<"> "<<ekz[s][0]<<" "<<ekz[s][1]<<" "<<ekz[s][2]<<" "<<ekz[s][3]<<" "<<z[s][0]<<" "<<z[s][1]<<" "<<z[s][2]<<" "<<z[s][3]<<" "<<z[s][4]<<endl;
}
printf("\n\n");
goto Nach;
case 50: //нажали 2
printf("===========================Spisok dolzhnikov==========================\n"); //должники
for (s=0;s<20;s++)
{
for (k=0;k<5;k++)
{
if (ekz[s][k]==2||z[s][k]=='n') {printf("%s <%s %s> ",gr[s],surname[s],name[s]); //если хоть что-то не сдано, вывод гр, ФИО
for (k=0;k<5;k++)
{
if (ekz[s][k]==2) printf("ekz.%d",k+1); //отмечаем несданные экзамены
if (z[s][k]=='n') printf("z.%d ",k+1); //и незачеты
}
printf ("\n");
}}
}
printf("\n\n");
goto Nach;
case 51: //нажали 3
printf("==========================Spisok otlichnikov==========================\n"); //отличники
for (s=0;s<20;s++) //пройдемся по всей БД
{
for (k=0;k<4;k++)
{
if (ekz[s][k]==2||ekz[s][k]==3||z[s][k]=='n')
{
l=1;k=4; //l-переменная для выявления НЕотличников; проходим по всем экзаменам/зачетам
//если есть хотя бы один неудовлетворительный экзамен или незакрытый зачет, то сразу проверяем следующего
}
else l=0;
}
if (l==0) printf("%s %s %s\n",gr[s],surname[s],name[s]); //если есть отличник - выводим его
}
printf("\n\n");
goto Nach;
case 52: //нажали 4
printf("==============================Srednii ball============================\n"); //средний балл
for (s=0;s<20;s++,sum=0)
{
for (k=0;k<4;k++)
{
sum+=ekz[s][k]; //считаем сумму оценок
}
printf("%s <%s %s> %.2f\n",gr[s],surname[s], name[s], sum/4);
}
printf("\n\n");
goto Nach;
case 53: //нажали 5
input_file.close ();
printf("====================Dlya vyhoda nazhmite CTRL+BREAK===================\n"); //выход
}
getch();
}
Base.txt:
Цитата:
VT Ivanov I.O. 4 5 5 4 z z z z z
VT Klimov P.V. 3 4 4 2 n n z z n
VT Bykova A.L. 5 5 5 5 z z z z z
VT Svetov K.P. 3 4 5 4 n z z z z
MO Guseva N.I. 4 4 3 2 z n n z z
MO Trudov V.C. 5 4 5 4 z z z n z
MO Kirova L.E. 3 2 3 3 n n n n n
MO Serova A.D. 4 3 5 5 z z z z z
MI Kravec U.N. 4 4 2 3 z n n z n
MI Gresch A.A. 5 5 4 4 z z n z z
MI Hlebov E.V. 4 3 4 3 z z z n n
MI Zykova M.C. 5 5 5 4 z n z z z
BU Careva V.I. 5 4 4 4 z z z z z
BU Vasina U.V. 4 4 4 4 z z z z z
BU Kostin K.K. 4 3 4 5 n z n z z
BU Petrin R.R. 4 5 4 4 z z z z z
CC Bragin Y.M. 3 3 2 2 n n n z n
CC Firsov G.M. 4 3 3 4 n z n z z
CC Aksina L.I. 4 4 4 4 z z z z z
CC Arovoi I.A. 3 3 3 2 n z z n z
|