Задача: Для хранения данных о ноутбуках описать структуру вида: struct NOTEBOOK { char model[21]; // наименование struct size { // габаритные размеры float х; float у; float z; }; float w; // вес int price; // цена } Написать функцию, которая читает данные о ноутбуках из файла note.txt (см. Задача 75) в структуру приведенного вида. Написать функцию, которая записывает содержимое структуры в конец бинарного файла. Структура бинарного файла: первые два байта (целое) число записей в файле; далее записи в формате структуры NOTE-BOOK. Написать программу, в которой на основе разработанных функций осуществляется чтение данных только для тех ноутбуков, частота процессора которых больше 120 МГц, и запись в бинарный файл по убыванию цены. У меня есть код на Билдере С++...а как переделать под Microsoft Visual Studio 6? clrscr() функция отсутствует...а что еще? может у кого нибудь есть готовое решени подобной задачи под мою среду? Код | //Файл Main.cpp: Код: #include "Functions.cpp"
void main(void) { while(ShowMenu()); //показываем меню, пока пользователь не выберет пункт выхода из программы }
|
============================ Код | //Файл Functions.cpp: Код:
#include <iostream.h> #include <conio.h> #include <stdio.h> #include "Struct.cpp"
void AddRecordTo(char* FileName) //добавление новой записи в файл note.txt { clrscr(); FILE* ptF=fopen(FileName,"ab"); if(!ptF) { clrscr(); cout<<"Open file error"; getch(); return; } NOTEBOOK NB; cout<<"Enter the notebook params:\n\n"; cout<<"Hor size, pix: "; cin>>NB.DR.x; cout<<"Ver size, pix: "; cin>>NB.DR.y; cout<<"Regeneration frequency, MHz: "; cin>>NB.f; cout<<"Size of Diagonal: "; cin>>NB.d; cout<<"HDD space, Gb: "; cin>>NB.hdd; cout<<"Model name: "; cin>>NB.model; cout<<"Processor frequency, MHz: "; cin>>NB.procfrequency; cout<<"Price, $: "; cin>>NB.price; fwrite(&NB,sizeof(NOTEBOOK),1,ptF); fclose(ptF); cout<<"\nRecord was added. Press any key for return to menu..."; getch(); }
void Sort(int** Dimension,int DimSize) //сортировка двумерного массива порядковых номеров записей в файле note.txt и цен на ноутбуки по возрастанию цен { bool WasIterate=true; int Bufer; while(WasIterate) { WasIterate=false; for(int i=0;i<DimSize-1;i++) if(Dimension[1][i]>Dimension[1][i+1]) { Bufer=Dimension[0][i]; Dimension[0][i]=Dimension[0][i+1]; Dimension[0][i+1]=Bufer; Bufer=Dimension[1][i]; Dimension[1][i]=Dimension[1][i+1]; Dimension[1][i+1]=Bufer; WasIterate=true; } } }
void AddRecordsFromTo(char* FileNameFrom,char* FileNameTo) //добавление записей, удовлетворяющих условию из note.txt в result.txt { clrscr(); FILE* ptFFrom=fopen(FileNameFrom,"rb"); //открытие файла note.txt на чтение if(!ptFFrom) { clrscr(); cout<<"Open file error"; getch(); return; } FILE* ptFTo=fopen(FileNameTo,"wb"); //открытие файла result.txt на запись if(!ptFTo) { fclose(ptFFrom); clrscr(); cout<<"Open file error"; getch(); return; } NOTEBOOK NB; fseek(ptFFrom,0,2); //установка указателя в файле note.txt на его конец int NumOfRecords=ftell(ptFFrom)/sizeof(NOTEBOOK); //подсчёт кол-ва записей в файле note.txt rewind(ptFFrom); //возврат указателя в файле note.txt на его начало int* DimPrice[2]; //создание динамического двумерного массива для хранения порядковых номеров записей в файле note.txt и цен на ноутбуки DimPrice[0]=new int[NumOfRecords]; DimPrice[1]=new int[NumOfRecords]; int Index=0; while(fread(&NB,sizeof(NOTEBOOK),1,ptFFrom)) { DimPrice[0][Index]=Index; DimPrice[1][Index]=NB.price; Index++; } Sort(DimPrice,NumOfRecords); //после сортировки массива по возрастанию цен, порядковые номера записей будут указывать очерёдность считывания записей из файла node.txt int CurIndex=0; short RecCount=0; fwrite(&RecCount,sizeof(short),1,ptFTo); //запись в начало файла result.txt 2-х байтового числа - кол-ва записей, которое для начала равно 0 while(CurIndex<NumOfRecords) { fseek(ptFFrom,DimPrice[0][CurIndex]*sizeof(NOTEBOOK),0); //установка указателя в файле node.txt на следующую по возрастанию цены запись fread(&NB,sizeof(NOTEBOOK),1,ptFFrom); if(NB.procfrequency>120) //если частота процессора > 120 МГц, то записываем запись в файл result.txt { fwrite(&NB,sizeof(NOTEBOOK),1,ptFTo); RecCount++; } CurIndex++; } rewind(ptFTo); fwrite(&RecCount,sizeof(short),1,ptFTo); //запись в начало файла result.txt 2-х байтового числа - кол-ва записей if(DimPrice) { delete []DimPrice[0]; delete []DimPrice[1]; } fclose(ptFTo); fclose(ptFFrom); cout<<"\n"<<RecCount<<" records was added. Press any key for return to menu..."; getch(); }
int ShowMenu(void) //меню { clrscr(); cout<<"1 - Add record to end of \"note.txt\"\n"; cout<<"2 - Add records from \"note.txt\" to \"result.txt\"\n"; cout<<"3 - Exit Program\n\n\n"; char Select; cout<<"Make the choice: "; Select=getch(); int Result=1; switch(Select) { case '1': { AddRecordTo("note.txt"); break; } case '2': { AddRecordsFromTo("note.txt","result.txt"); break; } case '3': { Result=0; break; } } return Result; }
|
================ Код | //Файл Struct.cpp: Код:
struct NOTEBOOK { struct disp_res { // разрешающая способность дисплея int x; // по горизонтали int y; // по вертикали }DR; int f; // частота регенерации float d; // размер диагонали дисплея float hdd; // объём диска char model[21]; // наименование int procfrequency; // частота процессора int price; // цена ноутбука };
|
|