Работа с программой. ? текст программы включена пользовательская функция void Out(TZap, TMemo*); – для вывода в Memo1 одной записи. ? текст программы включена пользовательская функция void Out(TZap, TMemo*); – для вывода в Memo1 одной записи.
Форма может иметь вид, представленный на рис. 8.2. Кнопку «Создать» нажимаем только при первом запуске программы или, если захотим заменить прежнюю информацию на новую, в окне Memo 1 отображается путь и имя созданного файла. Заполнив оба поля информацией, нажимаем кнопку «Добавить», после чего введенная информация отображается в окне Memo 1. Для работы с уже созданным файлом нажимаем кнопку «Открыть» – в Memo 1 выводится содержимое всего файла, после чего можно добавлять новые данные в конец этого файла, не уничтожая предыдущие. При нажатии кнопки «Сортировать» в Memo 1 выводятся записи, сортированные по возрастанию рейтинга. При нажатии кнопки «Сохранить результаты» создается текстовый файл, в котором сохранится информация, выведенная в Memo 1. Этот файл можно просмотреть в любом текстовым редакторе (блокноте, Word). В текст программы включена пользовательская функция void Out (TZap, TMemo *); – для вывода в Memo 1 одной записи. Для создания результирующего текстового файла используется функция, SaveToFile (FileNameRez); позволяющая записать все содержимое Memo 1 в файл с указанным именем. Рис. 8.2
Текст программы может иметь следующий вид: ... #include < stdio.h> #include < io.h> ... //--------------------------------------------------------------------------- struct TZap{ char FIO[30]; double s_b; } Zap; int size = sizeof(TZap); FILE *Fz; AnsiString File_Zap; void Out(TZap, TMemo*); //--------------------------------------------------------------------------- void __fastcall TForm1:: FormCreate(TObject *Sender) { Edit1-> Text=" "; Edit2-> Text=" "; Memo1-> Clear(); } //------------------ Создать----------------------------------------------- void __fastcall TForm1:: Button2Click(TObject *Sender) { OpenDialog1-> Title=" Создать новый файл"; if (OpenDialog1-> Execute()){ File_Zap = OpenDialog1-> FileName; if ((Fz=fopen(File_Zap.c_str(), " wb"))==NULL) { ShowMessage(" Ошибка создания ФАЙЛА! "); return; } } Memo1-> Lines-> Add(" Создали новый файл: " +AnsiString(File_Zap)); fclose(Fz); } //----------------- Добавить----------------------------------------------- void __fastcall TForm1:: Button1Click(TObject *Sender) { Fz = fopen(File_Zap.c_str(), " ab"); strcpy(Zap.FIO, Edit1 -> Text.c_str()); Zap.s_b = StrToFloat(Edit2-> Text); Out(Zap, Memo1); fwrite(& Zap, size, 1, Fz); Edit1-> Text=" "; Edit2-> Text=" "; fclose(Fz); } //--------------------- Сортировать -------------------------------------- void __fastcall TForm1:: Button4Click(TObject *Sender) { TZap st, *mas_Z; Fz = fopen(File_Zap.c_str(), " rb"); int D_f = fileno(Fz); // Находим дескриптор файла int len = filelength(D_f); // Находим размер файла int i, j, kol; kol = len/size; //Количество записей в файле mas_Z = new TZap[kol]; // Считываем записи из файла в динамический массив for (i=0; i < kol; i++) fread((mas_Z+i), size, 1, Fz); fclose(Fz); Memo1-> Lines-> Add(" Сортированные сведения"); for (i=0; i < kol-1; i++) for (j=i+1; j < kol; j++) if (mas_Z[i].s_b > mas_Z[j].s_b) { st = mas_Z[i]; mas_Z[i] = mas_Z[j]; mas_Z[j] = st; } for (i=0; i< kol; i++) Out(mas_Z[i], Memo1); delete []mas_Z; } //------------------- Сохранить -------------------------------------------- void __fastcall TForm1:: Button5Click(TObject *Sender) { SaveDialog1-> Title=" Сохранить файл результатов"; if (SaveDialog1-> Execute()) { AnsiString FileNameRez = SaveDialog1-> FileName; Memo1-> Lines-> SaveToFile(FileNameRez); } } //-------------------- Открыть ---------------------------------------------- void __fastcall TForm1:: Button3Click(TObject *Sender) { OpenDialog1-> Title=" Открыть файл"; if (OpenDialog1-> Execute()) { File_Zap = OpenDialog1-> FileName; if ((Fz=fopen(File_Zap.c_str(), " rb"))==NULL) { ShowMessage(" Ошибка открытия ФАЙЛА! "); return; } } Memo1-> Lines-> Add(" --------- Все сведения ---------"); while(1){ if(! fread(& Zap, size, 1, Fz)) break; Out(Zap, Memo1); } fclose(Fz); } //----------------- Очистка Memo ------------------------------------------- void __fastcall TForm1:: Button6Click(TObject *Sender) { Memo1-> Clear(); } //----------------- Функция вывода одной записи ----------------------- void Out(TZap z, TMemo *Memo1) { Memo1-> Lines-> Add(AnsiString(z.FIO)+ " " +FloatToStrF(z.s_b, ffFixed, 6, 3)); }
|