ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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; написати і відлагодити програму по створенню файлів.