
Экранная форма:
Дополнительное задание №6. Обработка структур с использованием файлов
Написать программу обработки файла типа запись, содержащую следующие пункты меню: «Создание», «Просмотр», «Коррекция» (добавление новых данных или редактирование старых), «Решение индивидуального задания».
Каждая запись должна содержать следующую информацию о студентах:
– фамилия и инициалы;
– год рождения;
– номер группы;
– оценки за семестр: по физике, математике, информатике, химии;
– средний балл.
Организовать ввод исходных данных, средний балл рассчитать по введенным оценкам.
Содержимое всего файла и результаты решения индивидувльного задания записать в текстовый файл.
Распечатать анкетные данные студентов интересующей вас группы. Фамилии студентов начинаются с букв В, Г и Д.
Листинг:
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
using namespace std;
struct T_BD{
char FIO[50];
double g_r;
char group[10];
double o_f;
double o_m;
double o_i;
double o_h;
double s_b;
} BD;
int size = sizeof(T_BD);
FILE *Fz, *Ft;
char File_Zap[] = "zapisi.dat";
char File_Rez[] = "rezult.txt";
void Out(T_BD);
int main()
{
int kod, i=0, j, kod2, x=0, pos; char qgroup[10];
Ft = fopen(File_Rez, "w");
while(true) {
ouch: puts("\n\n Create: 1 \n Edit: 2 \n View: 3 \n My Task: 4 \n EXIT: 0");
scanf("%d", &kod);
switch(kod)
{
case 1:
if ((Fz=fopen(File_Zap,"wb"))==NULL) {
puts("\n Create ERROR!");
return 0;
}
fclose(Fz);
printf ("\n Create New File %s !\n", File_Zap);
break;
case 2:
puts ("\n Add: 1 \n Correct: 2 \n Back: 0");
scanf("%d", &kod2);
switch(kod2)
{
case 1:
Fz= fopen(File_Zap,"ab");
printf("\n F.I.O.: ");
fflush(stdin);
gets(BD.FIO);
printf("\n The year of birth: ");
scanf("%lf", &BD.g_r);
printf("\n Group: ");
cin>>BD.group;
printf("\n Phisics: ");
scanf("%lf", &BD.o_f);
printf("\n Math: ");
scanf("%lf", &BD.o_m);
printf("\n IT knowledge: ");
scanf("%lf", &BD.o_i);
printf("\n Chemistry: ");
scanf("%lf", &BD.o_h);
BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
fwrite(&BD, 1,size, Fz);
fclose(Fz);
break;
case 2:
puts("\nInput number of unit: "); scanf("%d",&pos); pos--;
Fz= fopen(File_Zap,"r+b");
fseek(Fz, pos*size, SEEK_SET);
fread(&BD,1,size,Fz);
printf("\n F.I.O.: ");
fflush(stdin);
gets(BD.FIO);
printf("\n The year of birth: ");
scanf("%lf", &BD.g_r);
printf("\n Group: ");
cin>>BD.group;
printf("\n Phisics: ");
scanf("%lf", &BD.o_f);
printf("\n Math: ");
scanf("%lf", &BD.o_m);
printf("\n IT knowledge: ");
scanf("%lf", &BD.o_i);
printf("\n Chemistry: ");
scanf("%lf", &BD.o_h);
BD.s_b=(BD.o_f+BD.o_m+BD.o_i+BD.o_h)/4;
fseek(Fz, pos*size, SEEK_SET);
fwrite(&BD, 1, size, Fz);
fclose(Fz);
break;
case 3: goto ouch; break;
} break;
case 3:
if ((Fz=fopen(File_Zap,"rb"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
// Вывод на экран
printf ("\n\t--------- Informations ---------");
// Запись такой же информации в текстовый файл Ft
fprintf (Ft, "\n\t--------- Informations ---------");
while(1) {
if(!fread(&BD,size,1,Fz)) break;
Out(BD);
}
fclose(Fz);
break;
case 4:
Fz = fopen(File_Zap,"rb");
if ((Fz=fopen(File_Zap,"rb"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
j=0;
while(1) {
if(!fread(&BD,size,1,Fz)) break;
j++;
}
fclose(Fz);
Fz = fopen(File_Zap,"rb");
if ((Fz=fopen(File_Zap,"r"))==NULL) {
puts("\n Open ERROR!");
return 0;
}
cout << "\n Input group:"; cin >> qgroup;
cout <<"\n----- T A S K -----\n";
for(i=0;i<j;i++) {fread(&BD,size,1,Fz);
if (stricmp(BD.group, qgroup)==0) { x++;
if (BD.FIO[0] == 'V') Out(BD);
if (BD.FIO[0] == 'G') Out(BD);
if (BD.FIO[0] == 'D') Out(BD); }
} if (x==0) {puts("No unit's");}
fclose(Fz);
break;
case 0:
fclose(Ft);
return 0;
}
}
}
//----------------- Функция вывода одной записи на экран и в файл --------------------
void Out(T_BD z)
{
printf(" \n %s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
fprintf(Ft, "%s, %1.0lf, %s, %1.0lf, %1.0lf, %1.0lf, %1.0lf, %1.1lf", z.FIO,z.g_r, z.group, z.o_f, z.o_m, z.o_i, z.o_h, z.s_b);
}
Основная литература
1. Батура М.П., Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации и программирования. Язык Си : учеб. пособие. – Минск : БГУИР, 2007.
2. Бусько В.Л., Карцев В.Т., Кривоносова Т.М., Навроцкий А.А. Основы программирования в среде С++ Builder: лаб.практикум по курсу «Основы алгоритмизации и программирования» для студ. 1 – 2-го курсов БГУИР. В 2 ч. Ч.1 . – Минск: БГУИР, 2007.