Методические указания ЛР10_примеры__2014 (1079950), страница 5
Текст из файла (страница 5)
Оформить в виде функции фрагмент программы для вычисления интегральнойхарактеристики по вашему варианту (см. предыдущее задание).//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ22//////// РЕАЛИЗАЦИЯ ФУНКЦИИ//////////////////////////// МУ п.22//////////////////////////double StudSumm( const char * FileName , double * Sum){Student * pStudMas;int Razm;*Sum = 0.0;StudFileToMas( FileName , &pStudMas , &Razm );for ( int i = 0 ; i < Razm ; i++)*Sum+= (pStudMas + i)->Oklad;delete [] pStudMas;return *Sum;};…//////// ПРОТОТИП// МУ п.23double StudSumm( const char * FileName , double * Sum);…//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23////////double SumOklad;printf ( "Фонд зарплаты из функции= %8.2lf \n" , StudSumm( "BDStud.bin" , &SumOklad));///////////////////////////////////////////////////////…Результат работы программы:Пункт МУ 22.2(Интегральные расчеты):…Фонд зарплаты из функции = 13479.727. Дополнительные требования для сильных студентов (Уровень С):Варианты заданий и примеры рассмотрены для случая использования контейнератипа массив для хранения записей в программе.
Студентам, которые хотят освоитьпрограммирование на самом высоком уровне предлагается также самостоятельно решитькомплекс заданий, перечисленных ниже для контейнера типа список, сделанных на базеЛР № 7 и 8.23. Разработать специальные функции для нашей структуры и файла БД, содержащегозаписи структурных переменных, для следующих операций:23.1 Добавления записи в файл БД (в начало).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23///////////////////////////////////////////////// МУ п.23.1////////// Добавить запись ( начало )printf ("Добавление (начало):\n");Student SFirst = {"Первый" , 22 , 3400.00};StudAdd("BDStud.bin", SFirst , First );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.1/223void StudAdd(const char * FileName , Student S , TypeAddDel TAD );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// МУ п.23.1/2///////////////////////////void StudAdd(const char * FileName , Student S , TypeAddDel TAD = Default ){//if ( TAD == Last){ClearReadonlyFile(FileName);int pFBin = _open( FileName, _O_RDWR |_O_BINARY | _O_APPEND);long posF = _lseek( pFBin, 0, SEEK_END ); // Установить новую текущую позицию_write (pFBin , &S, sizeof(Student));// Закрытие файла_close( pFBin );return;};if( TAD == First ){Student * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );Student * pTemp = (Student *) new Student [ Razm + 1];memcpy( pTemp , &S, sizeof(Student) );for ( int i = 1 ; i <=Razm ; i++)memcpy( pTemp + i , pStudMas + (i - 1), sizeof(Student) );//StudMasToFile( FileName , pTemp , Razm + 1 );delete [] pTemp;delete [] pStudMas;return;};return;};…23.2 Добавления записи в файл БД (в конец).//////// ГЛАВНАЯ ПРОГРАММА////////// МУ п.23.2////////// - Добавить запись ( конец)printf ("Добавление (конец):\n");Student SLast = {"Последний" , 22 , 3400.00};StudAdd("BDStud.bin", SLast );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.1/2void StudAdd(const char * FileName , Student S , TypeAddDel TAD );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ(см.
выше п.23.1)…23.3 Добавления записи в файл БД (по номеру записи).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.3////////24// Добавить запись (номер)/////////////////////////////////////////////////////printf ("Добавление (номер):\n");Student SNumb = {"По номеру - 2" , 33 , 5500.00};StudAddNum("BDStud.bin", SNumb, 3);StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.3void StudAddNum(const char * FileName , Student S , int Numb );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Добавления по номеру в файл// МУ п.23.3///////////////////////void StudAddNum(const char * FileName , Student S , int Numb ){Student * pStudMas;int Razm;if ( Numb < 0) return;// Формирование массиваStudFileToMas( FileName , &pStudMas , &Razm );if (Numb >= Razm ){StudAdd(FileName, S , Last );delete [] pStudMas;return;};//Student * pTemp = (Student *) new Student [ Razm + 1];for ( int i = 0 , k=0 ; i <= Razm ; i++, k++){if ( ( i - 1) == Numb){memcpy( pTemp + i , &S, sizeof(Student) );k--;}else{memcpy( pTemp + i , pStudMas + k, sizeof(Student) );};};// Запоминание в файл новогоStudMasToFile( FileName , pTemp , Razm + 1 );delete [] pTemp;delete [] pStudMas;};…23.4 Удаления записи в файл БД (в начало).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.4////////printf ("Удаление (Начало):\n");StudDel("BDStud.bin", First );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.4/525void StudDel(const char * FileName , TypeAddDel TAD );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Удаление первого или последнего из файла// МУ п.23.4/5/////////////////////////////////////////////void StudDel(const char * FileName , TypeAddDel TAD = Last ){Student * pStudMas;int Razm;if ( TAD == Last){StudFileToMas( FileName , &pStudMas , &Razm );StudMasToFile( FileName , pStudMas , Razm - 1 );delete [] pStudMas;return;};if ( TAD == First ){StudFileToMas( FileName , &pStudMas , &Razm );StudMasToFile( FileName , pStudMas + 1 , Razm - 1 );delete [] pStudMas;}};…23.5 Удаления записи в файл БД (в конец).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.5////////printf ("Удаление (конец):\n");StudDel("BDStud.bin", Last );//StudDel("BDStud.bin" );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.4/5void StudDel(const char * FileName , TypeAddDel TAD );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ(см.
выше п.23.4)…23.6 Удаления записи в файл БД (по номеру записи).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.6////////printf ("Удаление (номер):\n");StudDelNum("BDStud.bin", 4 );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.6void StudDelNum(const char * FileName , int Numb );…26//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Удаление по номеру из файла// МУ п.23.6///////////////////////////////////////////void StudDelNum(const char * FileName , int Numb ){Student * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );if ( Numb < 0 || Numb > Razm ) return;if ( Numb == 0) {StudDel( FileName , First );delete [] pStudMas;return;};if ( Numb == Razm -1) {StudDel( FileName , Last );delete [] pStudMas;return;};// Удаление из серединыStudent * pTemp = (Student *) new Student [ Razm - 1];for (int i =0, k =0 ; i < Razm ; i++ , k++){if ( i == Numb )k--;elsememcpy( pTemp + k , pStudMas + i, sizeof(Student) );};StudMasToFile( FileName , pTemp , Razm - 1 );delete [] pTemp;delete [] pStudMas;};…23.7 Поиска и чтения записи из файла БД (по номеру записи).//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.7///////////// - Прочитать запись по номеруprintf ("Чтение (номер):\n");Student * pFind = new Student;FindStudNum( "BDStud.bin" , pFind , 2);PrintStudent( pFind );…//////// ПРОТОТИП// МУ п.23.7void FindStudNum( const char * FileName , Student * pS , int Numb);…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Поиск и выборка одной записи по номеру// МУ п.23.7///////////////////////////////////////////void FindStudNum( const char * FileName , Student * pS , int Numb){Student * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );if ( Numb < 0 || Numb >= Razm ){27}elsepS->Name[0] = '\0';pS->Num = NULL;pS->Oklad = NULL;memcpy( pS , pStudMas + Numb , sizeof(Student) );delete [] pStudMas;};…23.8 Замены записи в файле БД по номеру (вместо одной другая)//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.8////////printf ("Изменение записи (номер):\n");Student SChang ={"Замена" , 11, 111.00};ChangeStudNum( "BDStud.bin" , SChang , 2);StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.8void ChangeStudNum( const char * FileName , Student pS , int Numb);…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// МУ п.23.8///////////////////////////////////////////void ChangeStudNum( const char * FileName , Student pS , int Numb){Student * pStudMas;int Razm;StudFileToMas( FileName , &pStudMas , &Razm );if ( Numb < 0 || Numb >= Razm ){delete [] pStudMas;return;}elsememcpy( pStudMas + Numb , &pS, sizeof(Student) );StudMasToFile( FileName , pStudMas , Razm );delete [] pStudMas;};…23.9 Поиска и выборки по конкретному значению поля имени..
– Возврат номера!!!//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.9////////int n;printf ("Поиск по имени:\n");if ( ( n =FindStudName( "BDStud.bin" , pFind , "Замена" )) != -1){ printf ("Найдена по номеру = %d \n", n );printf ("Найдена запись: ");PrintStudent( pFind );}elseprintf ("Не найдена запись! ");…//////// ПРОТОТИП// МУ п.23.928int FindStudName( const char * FileName , Student * pS , const char * FindName );…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// Поиск по имени содержимого записей в файле в файле (первая запись)// МУ п.23.9///////////////////////////////////////////int FindStudName( const char * FileName , Student * pS , const char * FindName ){Student * pStudMas;int Razm;int i ;StudFileToMas( FileName , &pStudMas , &Razm );for ( i = 0 ; i < Razm ; i++)if ( strcmp ( (pStudMas + i)->Name , FindName ) == 0) break;if ( i == Razm ){// Не найденоpS->Name[0] = '\0';pS->Num = NULL;pS->Oklad = NULL;delete [] pStudMas;return -1 ;}// Найденоelsememcpy( pS , pStudMas + i , sizeof(Student) );};delete [] pStudMas;return i ;…23.10 Взаимного обмена (swap!) записей по двум номерам в файле БД.//////// ГЛАВНАЯ ПРОГРАММА// МУ п.23.10////////// Swap замена записей в файле БДprintf ("Замена SWAP в файле по номеру: 1<->3\n");SwapStudFile( "BDStud.bin" , 1 ,3 );StudPrintFile( "BDStud.bin" );…//////// ПРОТОТИП// МУ п.23.10void SwapStudFile( const char * FileName , int NumA ,int NumB);…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ///////////////////////////////////////////////// Замена по номерам записей в файле///////////////////////////////////////////// МУ п.23.10///////////////////////////////////////////void SwapStudFile( const char * FileName , int NumA ,int NumB){Student * pStudMas;int Razm;int i ;StudFileToMas( FileName , &pStudMas , &Razm );if ( NumA < 0 || NumA >= Razm || NumB < 0 || NumB >= Razm ){}29else{SwapStudent ( pStudMas + NumA , pStudMas + NumB );StudMasToFile( FileName , pStudMas , Razm );};//delete [] pStudMas;};…23.11 Удаления файла БД.//////// ГЛАВНАЯ ПРОГРАММА//////////////StudRemoveFile ("BDStud.bin"); // Тестирование БД////////…//////// ПРОТОТИПvoid StudRemoveFile(const char * FileName);…//////// ЗАГОЛОВОЧНЫЙ ФАЙЛ//////// РЕАЛИЗАЦИЯ ФУНКЦИИ// МУ п.17/23.11//////////////////////////////////void StudRemoveFile(const char * FileName){char Comand[40];// Снятие защиты с файла - отключение Readonlystrcpy (Comand , "attrib -R ");strcat (Comand , FileName);system( Comand );strcpy (Comand , "attrib -A ");strcat (Comand , FileName);system( Comand );// Удаление файла все дискрипторы файла должны быть закрытыstrcpy (Comand , "del ");strcat (Comand , FileName);system( Comand );};…Для всех функций и операций выполнить качественную проверку ее работы:отладку и тестирование во всех режимах.














