Необходимо разобрать пользовательский интерфейс в среде Borland C++ Builder для ввода и вывода информации. В программе данные должны быть реализованы и храниться в виде массива структур (структура должна соответствовать заданию). Дополнительно необходимо предусмотреть автоматическое сохранение (и восстановление) данных в файле (из файла) (считывание из файла при запуске программы, запись данных в файл при закрытии программы). Вот я сделал, но программа работает немного не так. Сохраняет, загружает, менять там всё можно. Но вот с обшим колличеством звёзд и их % я чтото никак сделать не могу. Посмотрите пожалуйста. Заранее спасибо. | Код | //---------------------------------------------------------------------------
#include <vcl.h> #include <iostream.h> #include <conio.h> #include <math.h> #pragma hdrstop
#include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; struct galaxy{AnsiString name,massa,chisl;}; galaxy zvezda[30]; char c1[100],c2[100],c3[100]; int i; int N=0; float chast,y,allStars; FILE *fil;
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) { //Cansel Series1->Clear(); if((fil=fopen("stars.txt","r"))==NULL) exit(0);
fscanf(fil,"%d\n",&N); fscanf(fil,"%f\n",&allStars);
Edit1->Text=FloatToStr(allStars); StringGrid1->RowCount=N+2; for(i=0;i<=N;i++) { fscanf(fil,"%s\n",c1); fscanf(fil,"%s\n",c2); fscanf(fil,"%s\n",c3);
zvezda[i].name = c1; zvezda[i].massa = c2; zvezda[i].chisl = c3; y=StrToFloat(zvezda[i].chisl); chast=y/allStars*100;
StringGrid1->Cells[0][i+1]=zvezda[i].name; StringGrid1->Cells[1][i+1]=zvezda[i].massa; StringGrid1->Cells[2][i+1]=FloatToStr(chast); StringGrid1->Cells[3][i+1]=zvezda[i].chisl; Series1->Add(StrToInt(zvezda[i].chisl),zvezda[i].name); }
fclose(fil); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { // OPEN Series1->Clear(); StringGrid1->Cells[0][0]="Ñïåêòðàëüíûé êëàññ"; StringGrid1->Cells[1][0]="Ïðèáëèçèòåëüíàÿ ìàññà"; StringGrid1->Cells[2][0]="×àñòü %"; StringGrid1->Cells[3][0]="×èñëåííîñòü"; if((fil=fopen("stars.txt","r"))==NULL) exit(0);
fscanf(fil,"%d\n",&N); fscanf(fil,"%f\n",&allStars);
Edit1->Text=FloatToStr(allStars); StringGrid1->RowCount=N+2; for(i=0;i<=N;i++) { fscanf(fil,"%s\n",c1); fscanf(fil,"%s\n",c2); fscanf(fil,"%s\n",c3);
zvezda[i].name = c1; zvezda[i].massa = c2; zvezda[i].chisl = c3; y=StrToFloat(zvezda[i].chisl); chast=y/allStars*100;
StringGrid1->Cells[0][i+1]=zvezda[i].name; StringGrid1->Cells[1][i+1]=zvezda[i].massa; StringGrid1->Cells[2][i+1]=FloatToStr(chast); StringGrid1->Cells[3][i+1]=zvezda[i].chisl; Series1->Add(StrToInt(zvezda[i].chisl),zvezda[i].name); }
fclose(fil); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // SAVE Series1->Clear(); if((fil=fopen("stars.txt","w"))==NULL) exit(1); fscanf(fil,"%d\n",&N);
fprintf(fil,"%d\n",N); fprintf(fil,"%f\n",allStars);
for (i=0;i<=N;i++) { zvezda[i].name=StringGrid1->Cells[0][i+1]; zvezda[i].massa=StringGrid1->Cells[1][i+1]; zvezda[i].chisl=StringGrid1->Cells[3][i+1];
fprintf(fil,"%s\n",zvezda[i].name); fprintf(fil,"%s\n",zvezda[i].massa); fprintf(fil,"%s\n",zvezda[i].chisl); Series1->Add(StrToInt(zvezda[i].chisl),zvezda[i].name); }
y=StrToFloat(zvezda[i].chisl); chast=y/allStars*100; StringGrid1->Cells[2][i+1]=FloatToStr(chast);
fclose(fil); } //--------------------------------------------------------------------------- void __fastcall TForm1::N1Click(TObject *Sender) { // MoRE StringGrid1->RowCount++; N++; StringGrid1->Cells[0][N+1]="0"; StringGrid1->Cells[1][N+1]="0"; StringGrid1->Cells[2][N+1]="0"; StringGrid1->Cells[3][N+1]="0"; } //--------------------------------------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { Edit1->Text=IntToStr(StringGrid1->Row); for(int j=StringGrid1->Row;j<StringGrid1->RowCount;j++) { for(i=0;i<4;i++) {StringGrid1->Cells[i][j]=StringGrid1->Cells[i][j+1];} } StringGrid1->RowCount--; N--; } //----------------------------------------------------------------
|
Присоединённый файл ( Кол-во скачиваний: 4 )
222.2.rar 68,04 Kb
|