Код
/* Программа 9.1 на языке С++ */
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "iostream"
#define MAX 30
// тип записи файла
struct STUDENT
{ char fio[20]; // фамилии и.о.
char oc[7]; // 5 оценок + '\n' + '\0'
};
// тип элемента таблицы
struct EL_TAB
{ char fio[20]; // фамилия и.о.
int oc[5]; // оценки
float srball; // средний балл
};
// прототипы функций
void PechTab (EL_TAB * tab, int n);
void Pech2 (EL_TAB * tab, int n);
/*----------------------------*/
/* главная функция */
/*----------------------------*/
void main()
{ setlocale(LC_ALL,"Russian");
FILE *f; // указатель на входной файл
STUDENT tz; // текущая запись файла
EL_TAB tab[MAX]; // таблица
int n; // длина таблицы
int i;
float s; // сумма оценок
if ((f = fopen("st.txt","r")) == NULL)
{ puts ("Файл st.txt не найден");
return;
}
// создание таблицы
n = 0;
while (fgets((char *)&tz, sizeof(struct STUDENT), f) != NULL)
{
for (i=0,s=0; i<5; i++)
{
int ocenka = tz.oc[i]-'0';
tab[n].oc[i] = ocenka;
s += ocenka;
}
tz.fio[19]='\0';
strcpy_s(tab[n].fio,tz.fio);
tab[n++].srball = s/5;
}
fclose(f);
char nom; // номер пункта меню
do
{
puts ("------------------------------------------------------");
puts (" Выберите номер пункта меню:");
puts ("1 - средние баллы студентов");
puts ("2 - студентов, имеющих не больше одной двойки");
puts ("3 - выход");
puts ("------------------------------------------------------");
nom = getche();
switch (nom)
{ case '1': PechTab(tab,n); break;
case '2': Pech2(tab,n); break;
case '3': break;
default: puts ("\nНужно ввести номер от 1 до 3");
}
if (nom != '3')
{ puts("\nДля продолжения нажмите любую клавишу");
_getch();
}
}
while (nom != '3');
}
/*-----------------------------------------------------------------*/
/* Печать среднего балла каждого студента */
/*-----------------------------------------------------------------*/
void PechTab (EL_TAB * tab, int n)
{ int j;
puts ("\nФамилия и.о. Ср.балл");
puts ("-----------------------");
for (j=0; j<n; j++)
{
printf("%s %.1f\n", tab[j].fio, tab[j].srball);
}
}
/*-----------------------------------------------------------------*/
/* Найти студентов, имеющих не больше одной двойки; */
/*-----------------------------------------------------------------*/
void Pech2 (EL_TAB *tab, int n)
{
int j,i,k=0;
puts ("\n Фамилия И.О.");
puts ("-------------");
for (j=0; j<n; j++)
{
for (i=0; i<5; i++)
{
if (tab[j].oc[i] == 2) k++;
}
if ( k <= 1 ) printf("\n %s \n", tab[j].fio);
}
}
Теги:
include,
PechTab,
break,
Pech2,
таблицы
,
студентов,
ocenka,
номер,
struct,
srball,
пункта,
STUDENT,
printf,
float,
больше,
двойки,
while,
файла
,
выход,
баллы,
Выберите,
strcpy,
Фамилия,
fclose,
Найти,
меню
,
getche,
nФамилия,
нажмите,
балла,
клавишу,
getch,
среднего,
Печать,
продолжения
Комментарии:
Нету комментариев для вывода...