ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.09.2024

Просмотров: 6

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторна робота №9.

Тема: Обробка структур з використанням файлів

Мета: вивчити правила створення і обробки даних структурного типу з використанням файлів; правила роботи з компонентами ОpеnDіаlоg і SаvеDіаlоg; написати і відлагодити програму по створенню файлів.

В роботе использовались : 8 edit I label , 1 button ,1 radiogroup,1 memo , 1 string grid.

Код программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#include<string.h>

#include <string>

#include <iostream.h>

#include <cstdio>

#include <iomanip>

#include <stdio.h>

#pragma hdrstop

struct Student

{char fio[20];

double avg;

int fiz,mat,inf,xim,year,grnum;};

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{Label9->Hide();Edit8->Hide();Memo1->Clear();RadioGroup1->ItemIndex=0;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{struct Student stud;int flag,i=1,delnum;

FILE *output;FILE *input;

input=fopen("input.txt","r");

output=fopen("output.txt","a+");

switch(RadioGroup1->ItemIndex)

case 0:

{

input=fopen("input.txt","r");

while(feof(input)==0)

{

setprecision(2);

fscanf(input,"%d %d %d %d %lf %d %d %s",&stud.fiz,&stud.mat,&stud.inf,&stud.xim,&stud.avg,&stud.year,&stud.grnum,&stud.fio);

StringGrid1->RowCount=i;

StringGrid1->Cells[0][i]=i;

StringGrid1->Cells[1][i]=stud.fiz;

StringGrid1->Cells[2][i]=stud.mat;

StringGrid1->Cells[3][i]=stud.inf;

StringGrid1->Cells[4][i]=stud.xim;

StringGrid1->Cells[5][i]=stud.avg;

StringGrid1->Cells[6][i]=stud.year;

StringGrid1->Cells[7][i]=stud.grnum;

StringGrid1->Cells[8][i]=stud.fio;

i++;

}

StringGrid1->Cells[0][0]='№';

StringGrid1->Cells[1][0]="Физика";

StringGrid1->Cells[2][0]="Матем.";

StringGrid1->Cells[3][0]="Информ.";

StringGrid1->Cells[4][0]="Химия";

StringGrid1->Cells[5][0]="Ср.Балл";

StringGrid1->Cells[6][0]="Год рожд.";

StringGrid1->Cells[7][0]="Группа";

StringGrid1->Cells[8][0]="ФИО";

break;

case 1:

do

{

try

{

stud.xim=StrToInt(Edit4->Text);

stud.fiz=StrToInt(Edit1->Text);

stud.inf=StrToInt(Edit3->Text);

stud.mat=StrToInt(Edit2->Text);

stud.year=StrToInt(Edit5->Text);

stud.grnum=StrToInt(Edit6->Text);

strcpy(stud.fio,Edit7->Text.c_str());

stud.avg=((stud.xim+stud.inf+stud.inf+stud.mat)/4);

}

catch (EConvertError &E)

{ShowMessage("Проверьте ввод данных");}

break;}

while(stud.xim>12 || stud.xim<1 || stud.mat>12 || stud.mat<1 ||stud.inf>12 || stud.inf<1 ||stud.fiz>12 || stud.fiz<1);

input=fopen("input.txt","a");

if (stud.xim>12 || stud.xim<1 || stud.mat>12 || stud.mat<1 ||stud.inf>12 || stud.inf<1 ||stud.fiz>12 || stud.fiz<1)

{ShowMessage("Оценки должны быть в диапазоне от 1 до 12");break;return;}


else

flag=fprintf(input,"\n%d %d %d %d %.2lf %d %d %s ",stud.fiz,stud.mat,stud.inf,stud.xim,stud.avg,stud.year,stud.grnum,stud.fio);

fclose(input);

if(flag!=0)

Memo1->Lines->Add("Успешно добавлено!");

break;

case 2:

int delnum;

delnum=StrToInt(Edit8->Text);

i=0;

input=fopen("input.txt","r");

output=fopen("output.txt","w+");

while(feof(input)==0)

{

fscanf(input,"%d %d %d %d %lf %d %d %s ",&stud.fiz,&stud.mat,&stud.inf,&stud.xim,&stud.avg,&stud.year,&stud.grnum,&stud.fio);

if(i+1!=delnum)

{

fprintf(output,"\n%d %d %d %d %.2lf %d %d %s ",stud.fiz,stud.mat,stud.inf,stud.xim,stud.avg,stud.year,stud.grnum,stud.fio);

}

else

Memo1->Lines->Add("Запись удалена");

i++;}

fclose(input);fclose(output);

break;

case 3:

i=0;

output=fopen("output.txt","w+"); input=fopen("input.txt","r");

while(feof(input)==0)

{

fscanf(input,"%d %d %d %d %lf %d %d %s ",&stud.fiz,&stud.mat,&stud.inf,&stud.xim,&stud.avg,&stud.year,&stud.grnum,&stud.fio);

if(stud.mat>4 && stud.inf>4 )

{

fprintf(output,"\n%d %d %d %d %.2lf %d %d %s",stud.fiz,stud.mat,stud.inf,stud.xim,stud.avg,stud.year,stud.grnum,stud.fio);

i++;}

}

Memo1->Lines->Add("Найдено "+IntToStr(i)+" записей");

fclose(output);fclose(input);

break;}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioGroup1Click(TObject *Sender)

{if(RadioGroup1->ItemIndex==1 || RadioGroup1->ItemIndex==0 )

{Label1->Show();Label2->Show();Label3->Show();Label4->Show();Label5->Show();Label6->Show();Label7->Show();Label8->Show();Label9->Hide();

Edit1->Show();Edit2->Show();Edit3->Show();Edit4->Show();Edit5->Show();Edit6->Show();Edit7->Show();Edit8->Hide();

}

if(RadioGroup1->ItemIndex==2 || RadioGroup1->ItemIndex==3)

{Label1->Hide();Label2->Hide();Label3->Hide();Label4->Hide();Label5->Hide();Label6->Hide();Label7->Hide();Label8->Hide();Label9->Show();

Edit1->Hide();Edit2->Hide();Edit3->Hide();Edit4->Hide();Edit5->Hide();Edit6->Hide();Edit7->Hide();Edit8->Show();

if(RadioGroup1->ItemIndex==3)

{Edit8->Hide();Label9->Hide();StringGrid1->Hide();}

}

if(RadioGroup1->ItemIndex==0)

StringGrid1->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{if (Key>='0' && Key<='9' || Key==VK_BACK)

return ;

else

Key=0;

}

//---------------------------------------------------------------------------

Висновок: на лабораторній роботі я навчився правилам створення і обробки даних структурного типу з використанням файлів; правилам роботи з компонентами ОpеnDіаlоg і SаvеDіаlоg; написати і відлагодити програму по створенню файлів.