Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТиУвТС / ОАиП, заочное ИИТ, 1 кр, 6 вариант.doc
Скачиваний:
12
Добавлен:
01.04.2014
Размер:
256.51 Кб
Скачать

Экранная форма:

Дополнительное задание №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.