🚀 Вийди на новий рівень крипто-торгівлі!
Easy Trade Bot — автоматизуй свій прибуток уже зараз!

Ми пропонуємо перелік перевірених прибуткових стратегій на такі пари як BTC, DOT, TRX, AAVE, ETH, LINK та інші. Ви можете підключити автоматичну торгівлю на своєму акаунті Binance або отримувати торгові рекомендації на email у режимі реального часу. Також можемо створити бота для обраної вами монети.

Всі результати торгів ботів доступні для перегляду у зручних таблицях на головній сторінці. Швидко, динамічно та прозоро!

Перейти до бота + 30$ бонус

ІНДЕКСНО-ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИХ ПРИСТРОЯХ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт
Предмет:
Інші
Група:
МЕ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Кафедра САПР Звіт до лабораторної роботи №3 на тему: «ІНДЕКСНО-ПОСЛІДОВНИЙ МЕТОД ДОСТУПУ ДО ФАЙЛІВ НА ЗОВНІШНІХ ЗАПАМ’ЯТОВУЮЧИХ ПРИСТРОЯХ» Мета: Розглянути органiзацiю i ведення файлiв iндексно-послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях. Завдання: Написати програму, яка реалiзує алгоритми роботи iндексно-послiдов ного методу доступу до iнформацiї на зовнiшнiх носiях: Створення БД. Вставка елементу в БД. Видалення запису з БД. Модифікація запису. Пошук. Перегляд. Теоретичні відомості: Якщо файл впорядкований по ключах, то звичайно для адресацiї використовується таблиця, що називається iндексом. При звертаннi до таблицi задається ключ шуканого запису, а результатом процедури пошуку у таблицi є вiдносна адреса запису у зовнiшнiй пам'ятi. Якщо для адресацiї файла використовується iндекс, ЕОМ в основному здiйснює пошук в iндексi, а не у файлi даних. При цьому суттєво економиться час, але потребується пам'ять для зберiгання iндексу. Існує багато iндексних методiв доступу, в основi яких лежить принцип створення окремого iндексного файла. індексний файл значно менший вiд власне бази даних, i, оскiльки вiн може повнiстю зберiгатися в оперативнiй пам'ятi, швидкодiя пошуку у ньому значно вища. В iндексно-послiдовному методi доступу iндексний файл завжди впорядкований за так званим первинним ключем (головний атрибут фiзичного запису). Оскiльки у цьому методi i записи файла даних впорядкованi за ключем, iндекс звичайно мiстить не посилання на окремий запис, а посилання на блоки записiв, всерединi яких можна здiйснювати пошук i сканування. Збереження посилань на блоки записiв, а не на окремi записи значно зменшує розмiр iндексу. Наприклад, якщо в блоцi зберiгається 10 записiв, то для нього в iндексному файлi буде одна стаття, а не 10, i розмiр iндексного файла зменшується в 10 разiв. Індексний файл i файл даних органiзованi послiдовно. Індексний файл мiстить лише максимальнi значення первинних ключiв записiв кожного блока. Послiдовна органiзацiя індексного файла допускає iндексацiю його вмiсту. Записи iндексу групуються у блоки, якi можна iндексувати. Індексний файл наступного рiвня мiстить вказiвники на індекснi файли попереднього рiвня. При роботi з великими файлами така органiзацiя дає змогу покращити характеристики доступу. Індексний файл складається з пар (значення ключа, адреса блока). Пара (v,b) з'являється у файлi iндексу, якщо перший запис у блоцi з адресою b має значення ключа v. Перше поле є ключем файла iндексу, який пiдтримується вiдсортованим за значенням свого ключа. В iндексно-послiдовному файлi необхiдно отримати вiдповiдi на запитання: якщо задане значення ключа v1 для iндексного файла, знайти в iндексi такий запис (v2,b), що v2<=v1 i або (v2,b) ї останнiм записом у iндексi, або наступний запис (v3,b) задовольняє умову v1<v3. У цiй ситуацiї говорять, що v2 покриває v1. Отже, ми знаходимо блок b головного файла, що мiстить запис iз значенням ключа v1, оскiльки файл iндексу з гарантiїю є вiдсортованим. Пiд час вставляння нових записiв виникає необхiднiсть або пересортовувати файл, або вносити новi записи в окрему дiлянку i органiзувати вказiвники на цi записи. Цi записи помiщаються у дiлянку переповнення. Такi файли перiодично реорганiзовуються, т.б. записи файла заново сортуються i здiйснюються вiдповiднi змiни в iндексi. Для уникнення частого використання процедури реорганiзацiї у файлi передбачаються позицiї з порожнiми записами (подiл файла даних на блоки). Але даний метод не дає змоги повнiстю уникнути виконання процедури реорганiзацiї. Розглянемо операцiї пошуку, вставляння, видалення i модифiкацiї над вiдсортованим файлом iз записами, не закрiпленими вказiвниками за фіксованими адресами. Цi 4-и операцiї потребують вставляння, видалення, модифiкацiї у файлi iндексу. Вхiдний вiдсортований файл мiститься у послiдовностi блокiв b1, b2,...,bk. Записи у кожному блоцi мiстяться у сортованоiй послiдовностi, причому записи блока bi передують записам блока bi+1. У заголовку кожного блока знаходиться iнформацiя, що вказує, який iз субблокiв мiстить записи, а який є вiльним. Текст програми: #include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> #define MAXNAME 40 #define MAXPLATFORM 20 #define MAXDEVELOPER 30 #define MAXPUBLISHER 30 #define MAXRELEASEDATE 10 #define MAXGENRE 20 #define MAXHOMEPAGE 20 #define MAXTRANSMITTER 3 #define MAXGRAPHICS 10 void addSpaces(int,FILE *); void frotSpaces(int,FILE *); int whatNumber(int); void addNewBlock(FILE *); void addNewRecord(struct game add,FILE *); void editRecord(struct game add,FILE *, int whatEdit); void searchRecord(FILE *); struct game { int ID; char name[MAXNAME]; char developer[MAXDEVELOPER]; char publisher[MAXPUBLISHER]; char platform[MAXPLATFORM]; char genre[MAXGENRE]; char homepage[MAXHOMEPAGE]; char releaseDate[MAXRELEASEDATE]; int age; char transmitter[MAXTRANSMITTER]; int gameRate; char graphics[MAXGRAPHICS]; long adress; }; int main(void) { FILE *fileDatabase; //Мітка на файл БД. FILE *fileTemp; //Мітка на тимчасовий файл. FILE *fileTempInd; //Мітка на тимчасовий індексний файл. FILE *fileIndex; //Мітка на індексний файл. char nameOfDatabase[20]; //Буде міститись назва БД. char nameOfIndexFile[20]; //Буде міститись навза індексного файла. int menuItem,menuExit=7,menuItemP; // menuItem -для зберігання вибору пункту головного меню int yes_no; //Змінна для перевірки вибору меню кожного підменю. int back,backGo; //Змінна для перевірки нажато "0" для виходу в гол. меню. int recSize=202; struct game addGame; system("cls"); do { system("cls"); printf(" Menu:\n1. Creation a database.\n2. Insert the element in a database (ID).\n3. Delete an element. \n4. Edit after the key field. \n5. Review a database. \n6. Search in the database. \n7. Close a programm.\n"); printf("Choose and enter one of menu items: "); scanf("%d",&menuItem); if (menuItem==1) { menuItemP=0; printf(" -=CREATION A DATABASE=-"); printf("\n Do you want to create a new database? The old database will be deleted.\n"); printf("1. Yes\n2. No\n"); printf("Choose and enter one of menu items: "); scanf("%d",&menuItemP); //**Перевірка вибраний пункт підменю головного меню чи ні. if (menuItemP==1 || menuItemP==2) { yes_no=1; } else { yes_no=0; } //*Перевірка чи потрібно виконувати цикл, якщо не вибраний пункт підменю. while (yes_no!=1) { printf("You have not chosen any menu item. Please enter once again: "); scanf("%d",&menuItemP); if (menuItemP==1 || menuItemP==2) { yes_no=1; } } //*Кінець - Перевірка чи потрібно виконувати цикл, якщо не вибраний пункт підменю. //**Кінець - Перевірка вибраний пункт підменю головного меню чи ні. if (menuItemP==1) { //Потрібно створювати базу даних??? printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } addNewBlock(fileDatabase); fprintf(fileIndex,"0 0"); //*Перевірка чи закритий файл бази даних чи ні та виведення результату. if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } else if (menuItem==2) { printf(" -=ADD A RECORD IN THE DATABASE=-"); printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"r+")) == NULL) { printf("\nAn error is at opening a file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"r+")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } if ((fileTemp=fopen("temp.txt","w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } if ((fileTempInd=fopen("temp_int.txt","w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } //***Введення даних. int yes_noGameRate=0; printf("\nEnter next information for a record in a database."); printf("\n1. Enter ID of the game: "); scanf("%d",&addGame.ID); printf("2. Enter platform (MAX-10): "); scanf("%s",&addGame.platform); printf("3. Enter name of the game (MAX-40): "); scanf("%s",&addGame.name); printf("4. Enter developer (MAX-30): "); scanf("%s",&addGame.developer); printf("5. Enter publisher (MAX-30): "); scanf("%s",&addGame.publisher); printf("6. Enter release date (MAX-10): "); scanf("%s",&addGame.releaseDate); printf("7. Enter genre (MAX-20): "); scanf("%s",&addGame.genre); printf("8. Enter homepage (MAX-20): "); scanf("%s",&addGame.homepage); printf("9. Enter transmitter (MAX-10): "); scanf("%s",&addGame.transmitter); printf("10. Enter graphics (MAX-10): "); scanf("%s",&addGame.graphics); printf("11. Enter age (MAX-3): "); scanf("%d",&addGame.age); printf("12. Enter game rate (1,2,3,4 or 5): "); scanf("%d",&addGame.gameRate); if (addGame.gameRate==1 || addGame.gameRate==2 || addGame.gameRate==3 || addGame.gameRate==4 || addGame.gameRate== 5) { yes_noGameRate=1; } while (yes_noGameRate!=1) { printf("You have not enter 1, 2, 3, 4 or 5. Please enter once again: "); scanf("%d",&addGame.gameRate); if (addGame.gameRate==1 || addGame.gameRate==2 || addGame.gameRate==3 || addGame.gameRate==4 || addGame.gameRate== 5) { yes_noGameRate=1; } } //***Кінець - Введення даних. //**Вивід даних. printf("\n----------------------------------"); printf("\nYour dates:\n"); printf("\nID: %d\nPlatform: %s\nName: %s\nDeveloper: %s\nPublisher: %s\nRelease date: %s\nGenre: %s\nHomepage: %s\nTransmitter: %s\nGraphics: %s\nAge: %d\nGame rate: %d\n",addGame.ID,addGame.platform,addGame.name,addGame.developer,addGame.publisher,addGame.releaseDate,addGame.genre,addGame.homepage,addGame.transmitter,addGame.graphics,addGame.age,addGame.gameRate); printf("\n----------------------------------\n"); //**Кінець - Вивід даних. int maxID,nRecords,c,n=0,addRec_yn=0,yn=0,renameInd=0; long adressN,adressInd; char words[7]; while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { n++; } rewind(fileIndex); printf("\nn=%d",n); for (int i=0; i<n; i++) { adressInd=ftell(fileIndex); fscanf(fileIndex,"%d",&maxID); c=whatNumber(maxID); frotSpaces(c,fileIndex); adressN=ftell(fileIndex); fscanf(fileIndex,"%d",&nRecords);//Врахувати кынець рядка, якщо не зчиту ты символи, що потрыбно. printf("\nmaxID=%d, nRecords=%d",maxID,nRecords); if (maxID==0) { addNewRecord(addGame,fileDatabase); fseek(fileIndex,adressInd,SEEK_SET); fprintf(fileIndex,"%d",addGame.ID); c=whatNumber(addGame.ID); addSpaces(c,fileIndex); fprintf(fileIndex,"%d",nRecords+1); addRec_yn=1; } else { if (addGame.ID<maxID) { char record[202]; if (nRecords==1) { printf("\nDobavlajem v %d blok.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); for (int k=0; k<4; k++) { fgets(record,202,fileDatabase); if (k<3) { fprintf(fileTemp,"%s",record); } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords+1); addRec_yn=1; } else if (nRecords==2) { int IDB=0; char *endB; printf("\nDobavlajem v %d blok.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); } else { fprintf(fileTemp,"%s",record); addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); } for (int k=0; k<3; k++) { fgets(record,202,fileDatabase); if (k<2) { fprintf(fileTemp,"%s",record); } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords+1); addRec_yn=1; } else if (nRecords==3) { int IDB=0; char *endB; printf("\nDobavlajem v %d blok.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); for (int k=0; k<3; k++) { fgets(record,202,fileDatabase); if (k<2) { fprintf(fileTemp,"%s",record); } } } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); } else { fprintf(fileTemp,"%s",record); addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); } for (int k=0; k<2; k++) { fgets(record,202,fileDatabase); if (k<1) { fprintf(fileTemp,"%s",record); } } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords+1); addRec_yn=1; } else if (nRecords==4) { int IDB=0; char *endB; printf("\nDobavlajem v %d blok.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); for (int k=0; k<2; k++) { fgets(record,202,fileDatabase); if (k<2) { fprintf(fileTemp,"%s",record); } } for (int s=0; s<2; s++) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); } fseek(fileIndex,0L,SEEK_SET); for (int j=0; j<i; j++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB); c=whatNumber(IDB); addSpaces(c,fileTempInd); fprintf(fileTempInd,"3"); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); words[4]='2'; fprintf(fileTempInd,"%s",words); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); for (int k=0; k<2; k++) { fgets(record,202,fileDatabase); if (k<2) { fprintf(fileTemp,"%s",record); } } for (int s=0; s<2; s++) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); } fseek(fileIndex,0L,SEEK_SET); for (int j=0; j<i; j++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB); c=whatNumber(IDB); addSpaces(c,fileTempInd); fprintf(fileTempInd,"3"); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); words[4]='2'; fprintf(fileTempInd,"%s",words); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\n%d",IDB); if (addGame.ID<IDB) { addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fprintf(fileTemp,"%s",record); for (int k=0; k<1; k++) { fgets(record,202,fileDatabase); if (k<1) { fprintf(fileTemp,"%s",record); } } for (int s=0; s<2; s++) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); } fseek(fileIndex,0L,SEEK_SET); for (int j=0; j<i; j++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",addGame.ID); c=whatNumber(addGame.ID); addSpaces(c,fileTempInd); fprintf(fileTempInd,"3"); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); words[4]='2'; fprintf(fileTempInd,"%s",words); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } } else { fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); addNewRecord(addGame,fileTemp); fprintf(fileTemp,"\n"); for (int k=0; k<1; k++) { fgets(record,202,fileDatabase); if (k<1) { fprintf(fileTemp,"%s",record); } } for (int s=0; s<2; s++) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); } fseek(fileIndex,0L,SEEK_SET); for (int j=0; j<i; j++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB); c=whatNumber(IDB); addSpaces(c,fileTempInd); fprintf(fileTempInd,"3"); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); words[4]='2'; fprintf(fileTempInd,"%s",words); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } } } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } renameInd=1; addRec_yn=1; } yn=1; } } if (addRec_yn==1) { break; } } if (addRec_yn==0) { printf("\nIt is needed to create a new block."); fseek(fileDatabase,0L,SEEK_END); fprintf(fileDatabase,"\n"); addNewBlock(fileDatabase); fseek(fileDatabase,n*4*recSize,SEEK_SET); addNewRecord(addGame,fileDatabase); fseek(fileIndex,0L,SEEK_END); fprintf(fileIndex,"\n%d",addGame.ID); c=whatNumber(addGame.ID); addSpaces(c,fileIndex); fprintf(fileIndex,"%d",1); } if (fclose(fileTempInd) != 0) { printf("\nAn error is at closing of file temp.txt."); } if (fclose(fileTemp) != 0) { printf("\nAn error is at closing of file temp.txt."); } if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } if (yn==1) { remove(nameOfDatabase); rename("temp.txt",nameOfDatabase); if (renameInd==1) { remove(nameOfIndexFile); rename("temp_int.txt",nameOfIndexFile); } } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } //######################################################################### else if (menuItem==3) { printf(" -=DELETE A RECORD IN THE DATABASE=-"); printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"r+")) == NULL) { printf("\nAn error is at opening a file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"r+")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } if ((fileTemp=fopen("temp.txt","w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } if ((fileTempInd=fopen("temp_int.txt","w")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } //***Введення даних. printf("\nEnter next information for a record in a database."); printf("\nEnter ID of the game: "); scanf("%d",&addGame.ID); int maxID,nRecords,c,n=0,deleteRec_yn=0,yn=0,renameInd=0; long adressN,adressInd; char words[7]; while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { n++; } rewind(fileIndex); printf("\nn=%d",n); for (int i=0; i<n; i++) { adressInd=ftell(fileIndex); fscanf(fileIndex,"%d",&maxID); c=whatNumber(maxID); frotSpaces(c,fileIndex); adressN=ftell(fileIndex); fscanf(fileIndex,"%d",&nRecords);//Врахувати кынець рядка, якщо не зчиту ты символи, що потрыбно. printf("\nmaxID=%d, nRecords=%d",maxID,nRecords); int IDB; char *endB; if (addGame.ID<maxID || addGame.ID==maxID) { char record[202]; if (nRecords==1) { printf("\nVudalajem z %d bloy.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { for (int p=0; p<3; p++) { fgets(record,202,fileDatabase); } } else { printf("\nTakoho zapusy nema."); fprintf(fileTemp,"%s",record); for (int h=0; h<3; h++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } fseek(fileIndex,0L,SEEK_SET); for (int s=0; s<i; s++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fgets(words,7,fileIndex); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } renameInd=1; deleteRec_yn=1; } if (nRecords==2) { printf("\nVudalajem z %d bloky.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); int IDB2; IDB2=IDB; if (IDB==addGame.ID) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,0L,SEEK_SET); for (int s=0; s<i; s++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB2); c=whatNumber(IDB2); addSpaces(c,fileTempInd); fprintf(fileTempInd,"%d",nRecords-1); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } renameInd=1; } else { printf("\nTakoho zapusy nema."); fprintf(fileTemp,"%s",record); for (int h=0; h<3; h++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } deleteRec_yn=1; } if (nRecords==3) { printf("\nVudalajem z %d bloky.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); int IDB2; if (IDB==addGame.ID) { for (int ss=0; ss<2; ss++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); IDB2=IDB; if (IDB==addGame.ID) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,0L,SEEK_SET); for (int s=0; s<i; s++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB2); c=whatNumber(IDB2); addSpaces(c,fileTempInd); fprintf(fileTempInd,"%d",nRecords-1); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } renameInd=1; } else { printf("\nTakoho zapusy nema."); fprintf(fileTemp,"%s",record); for (int h=0; h<3; h++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } } } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } deleteRec_yn=1; } if (nRecords==4) { printf("\nVudalajem z %d bloky.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); int IDB2; if (IDB==addGame.ID) { for (int ss=0; ss<3; ss++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { for (int ss=0; ss<2; ss++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); IDB2=IDB; if (IDB==addGame.ID) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,adressN,SEEK_SET); fprintf(fileIndex,"%d",nRecords-1); } else { fprintf(fileTemp,"%s",record); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { addSpaces(200,fileTemp); fprintf(fileTemp,"\n"); fseek(fileIndex,0L,SEEK_SET); for (int s=0; s<i; s++) { fgets(words,7,fileIndex); fprintf(fileTempInd,"%s",words); } fprintf(fileTempInd,"%d",IDB2); c=whatNumber(IDB2); addSpaces(c,fileTempInd); fprintf(fileTempInd,"%d",nRecords-1); fprintf(fileTempInd,"\n"); fgets(words,7,fileIndex); while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { fprintf(fileTempInd,"%s",words); } renameInd=1; } else { printf("\nTakoho zapusy nema."); fprintf(fileTemp,"%s",record); for (int h=0; h<3; h++) { fgets(record,202,fileDatabase); fprintf(fileTemp,"%s",record); } } } } } while(fgets(record,202,fileDatabase) != NULL && words[0] != '\n') { fprintf(fileTemp,"%s",record); } deleteRec_yn=1; } yn=1; } if (deleteRec_yn==1) { break; } } if (fclose(fileTempInd) != 0) { printf("\nAn error is at closing of file temp.txt."); } if (fclose(fileTemp) != 0) { printf("\nAn error is at closing of file temp.txt."); } if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } if (yn==1) { remove(nameOfDatabase); rename("temp.txt",nameOfDatabase); if (renameInd==1) { remove(nameOfIndexFile); rename("temp_int.txt",nameOfIndexFile); } } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } else if (menuItem==4) { printf(" -=EDIT A RECORD IN THE DATABASE=-"); printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"r+")) == NULL) { printf("\nAn error is at opening a file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"r+")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } //***Введення даних. int yes_noGameRate=0; printf("\nEnter next information for a record in a database."); printf("\n1. Enter ID of the game: "); scanf("%d",&addGame.ID); int yes_noP=0,menuItemEdit,whatEdit; while (yes_noP!=1) { system("cls"); printf("\nWhat you want to edit: "); printf("\n1. Platform\n2. Name\n3. Developer\n4. Publisher\n5. Release date\n6. Genre\n7. Homepage\n8. Transmitter\n9. Graphics\n10. Age\n11. Game rate\n"); printf("Choose and enter one of menu items: "); scanf("%d",&menuItemEdit); if (menuItemEdit==1) { printf("Enter platform (MAX-10): "); scanf("%s",&addGame.platform); whatEdit=1; yes_noP=1; } else if (menuItemEdit==2) { printf("Enter name (MAX-40): "); scanf("%s",&addGame.name); whatEdit=2; yes_noP=1; } else if (menuItemEdit==3) { printf("Enter Developer (MAX-30): "); scanf("%s",&addGame.developer); whatEdit=3; yes_noP=1; } else if (menuItemEdit==4) { printf("Enter Publisher (MAX-30): "); scanf("%s",&addGame.publisher); whatEdit=4; yes_noP=1; } else if (menuItemEdit==5) { printf("Enter Release date (MAX-10): "); scanf("%s",&addGame.releaseDate); whatEdit=5; yes_noP=1; } else if (menuItemEdit==6) { printf("Enter Genre (MAX-20): "); scanf("%s",&addGame.genre); whatEdit=6; yes_noP=1; } else if (menuItemEdit==7) { printf("Enter Homepage (MAX-20): "); scanf("%s",&addGame.homepage); whatEdit=7; yes_noP=1; } else if (menuItemEdit==8) { printf("Enter Transmitter (MAX-10): "); scanf("%s",&addGame.transmitter); whatEdit=8; yes_noP=1; } else if (menuItemEdit==9) { printf("Enter Graphics (MAX-10): "); scanf("%s",&addGame.graphics); whatEdit=9; yes_noP=1; } else if (menuItemEdit==10) { printf("Enter Age: "); scanf("%d",&addGame.age); whatEdit=10; yes_noP=1; } else if (menuItemEdit==11) { printf("Enter Game Rate: "); scanf("%d",&addGame.gameRate); whatEdit=11; yes_noP=1; } } int maxID,nRecords,c,n=0,editRec_yn=0,yn=0,renameInd=0; long adressN,adressInd,adressRec; char words[7]; while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { n++; } rewind(fileIndex); printf("\nn=%d",n); for (int i=0; i<n; i++) { adressInd=ftell(fileIndex); fscanf(fileIndex,"%d",&maxID); c=whatNumber(maxID); frotSpaces(c,fileIndex); adressN=ftell(fileIndex); fscanf(fileIndex,"%d",&nRecords);//Врахувати кынець рядка, якщо не зчиту ты символи, що потрыбно. printf("\nmaxID=%d, nRecords=%d",maxID,nRecords); int IDB; char *endB; if (addGame.ID<maxID || addGame.ID==maxID) { char record[202]; printf("\nRedahujem v %d blozi.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); } for(int osn=0; osn<4; osn++) { adressRec=ftell(fileDatabase); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { printf("\nZapus znajdeno.Ura!!!!!!"); fseek(fileDatabase,0L,SEEK_SET); if (whatEdit==1) { fseek(fileDatabase,adressRec+4,SEEK_SET); } if (whatEdit==2) { fseek(fileDatabase,adressRec+25,SEEK_SET); } if (whatEdit==3) { fseek(fileDatabase,adressRec+66,SEEK_SET); } if (whatEdit==4) { fseek(fileDatabase,adressRec+97,SEEK_SET); } if (whatEdit==5) { fseek(fileDatabase,adressRec+128,SEEK_SET); } if (whatEdit==6) { fseek(fileDatabase,adressRec+139,SEEK_SET); } if (whatEdit==7) { fseek(fileDatabase,adressRec+160,SEEK_SET); } if (whatEdit==8) { fseek(fileDatabase,adressRec+181,SEEK_SET); } if (whatEdit==9) { fseek(fileDatabase,adressRec+185,SEEK_SET); } if (whatEdit==10) { fseek(fileDatabase,adressRec+196,SEEK_SET); } if (whatEdit==11) { fseek(fileDatabase,adressRec+199,SEEK_SET); } editRecord(addGame, fileDatabase, whatEdit); editRec_yn=1; } if (editRec_yn==1) { break; } } } if (editRec_yn==1) { break; } } if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } else if (menuItem==5) { printf(" -=REWIEW A DATABASE IN THE DATABASE=-"); printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"r+")) == NULL) { printf("\nAn error is at opening a file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"r+")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } //***Введення даних. int yes_noGameRate=0; printf("\nEnter next information for a record in a database."); printf("\nEnter max ID of the block: "); scanf("%d",&addGame.ID); int maxID,nRecords,c,n=0,searchRec_yn=0,yn=0,renameInd=0; long adressN,adressInd,adressRec; char words[7]; while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { n++; } rewind(fileIndex); printf("\nn=%d",n); for (int i=0; i<n; i++) { adressInd=ftell(fileIndex); fscanf(fileIndex,"%d",&maxID); c=whatNumber(maxID); frotSpaces(c,fileIndex); adressN=ftell(fileIndex); fscanf(fileIndex,"%d",&nRecords);//Врахувати кынець рядка, якщо не зчиту ты символи, що потрыбно. printf("\nmaxID=%d, nRecords=%d",maxID,nRecords); int IDB; char *endB; if (addGame.ID==maxID) { char record[202]; printf("\nRedahujem v %d blozi.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); } for(int osn=0; osn<4; osn++) { adressRec=ftell(fileDatabase); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB>0) { printf("\nZapus znajdeno.Ura!!!!!!"); fseek(fileDatabase,adressRec,SEEK_SET); searchRecord(fileDatabase); searchRec_yn=1; } fseek(fileDatabase,adressRec+202,SEEK_SET); } } if (searchRec_yn==1) { break; } } if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } //########################################################### else if (menuItem==6) { printf(" -=SEARCH A RECORD IN THE DATABASE=-"); printf("\nEnter name of the file (MAX-20): "); scanf("%s",&nameOfDatabase); //Введення назви файлу бази даних. strcat(nameOfDatabase,".txt"); //Додавання розширення .txt до імені. strcpy(nameOfIndexFile,"ind_"); strcat(nameOfIndexFile,nameOfDatabase); //**Перевірка чи створений файл бази даних чи ні та виведення результату. if ((fileDatabase=fopen(nameOfDatabase,"r+")) == NULL) { printf("\nAn error is at opening a file. %s.",nameOfDatabase); } if ((fileIndex=fopen(nameOfIndexFile,"r+")) == NULL) { printf("\nAn error is at creation of file. %s.",nameOfIndexFile); } //***Введення даних. int yes_noGameRate=0; printf("\nEnter next information for a record in a database."); printf("\n1. Enter ID of the game: "); scanf("%d",&addGame.ID); int maxID,nRecords,c,n=0,searchRec_yn=0,yn=0,renameInd=0; long adressN,adressInd,adressRec; char words[7]; while(fgets(words,7,fileIndex) != NULL && words[0] != '\n') { n++; } rewind(fileIndex); printf("\nn=%d",n); for (int i=0; i<n; i++) { adressInd=ftell(fileIndex); fscanf(fileIndex,"%d",&maxID); c=whatNumber(maxID); frotSpaces(c,fileIndex); adressN=ftell(fileIndex); fscanf(fileIndex,"%d",&nRecords);//Врахувати кынець рядка, якщо не зчиту ты символи, що потрыбно. printf("\nmaxID=%d, nRecords=%d",maxID,nRecords); int IDB; char *endB; if (addGame.ID<maxID || addGame.ID==maxID) { char record[202]; printf("\nRedahujem v %d blozi.",i); for (int j=0; j<i*4; j++) { fgets(record,202,fileDatabase); } for(int osn=0; osn<4; osn++) { adressRec=ftell(fileDatabase); fgets(record,202,fileDatabase); IDB=strtol(record,&endB,10); printf("\nIDB=%d",IDB); if (IDB==addGame.ID) { printf("\nZapus znajdeno.Ura!!!!!!"); fseek(fileDatabase,adressRec,SEEK_SET); searchRecord(fileDatabase); searchRec_yn=1; } if (searchRec_yn==1) { break; } } } if (searchRec_yn==1) { break; } } if (fclose(fileIndex) != 0) { printf("\nAn error is at closing of file %s.",nameOfIndexFile); } if (fclose(fileDatabase) != 0) { printf("\nAn error is at closing of file %s.",nameOfDatabase); } //**Повернення в головне меню. printf("\nEnter '0' for returning in a main menu: "); scanf("%d",&backGo); while (backGo!=0) { printf("You have not enter '0'. Please enter once again: "); scanf("%d",&backGo); } //**Кінець - Повернення в головне меню. back=1; //Вивід головного меню дозволений. } else if (menuItem==7) { printf("Good bye!!!\n"); } } while (menuItem != menuExit); return 0; } //Функція - Додавання пробілів. void addSpaces(int n,FILE *f) { for(int i=0; i<n; i++) { fprintf(f," "); } } //Функція - Зчитування пробілів. void frotSpaces(int n, FILE *fpc) { for(int i=0; i<n; i++) { fscanf(fpc,"%с"); } } //Функція - Визначення, яке число <10,<100,<1000. int whatNumber(int n) { int num; if (n<10) { num=3; } else if (n>=10 && n<100) { num=2; } else if (n>=100 && n<1000) { num=1; } return num; } //Функція - Додавання нового блоку. void addNewBlock(FILE *fp) { for (int i=0; i<4; i++) { addSpaces(200,fp); if (i != 3) { fprintf(fp,"\n"); } } } //Функція - Додавання запису. void addNewRecord(struct game add,FILE *fp) { int k; fprintf(fp,"%d",add.ID); k=whatNumber(add.ID); addSpaces(k,fp); fprintf(fp,"%s",add.platform); k=21-strlen(add.platform); addSpaces(k,fp); fprintf(fp,"%s",add.name); k=41-strlen(add.name); addSpaces(k,fp); fprintf(fp,"%s",add.developer); k=31-strlen(add.developer); addSpaces(k,fp); fprintf(fp,"%s",add.publisher); k=31-strlen(add.publisher); addSpaces(k,fp); fprintf(fp,"%s",add.releaseDate); k=11-strlen(add.releaseDate); addSpaces(k,fp); fprintf(fp,"%s",add.genre); k=21-strlen(add.genre); addSpaces(k,fp); fprintf(fp,"%s",add.homepage); k=21-strlen(add.homepage); addSpaces(k,fp); fprintf(fp,"%s",add.transmitter); k=4-strlen(add.transmitter); addSpaces(k,fp); fprintf(fp,"%s",add.graphics); k=11-strlen(add.graphics); addSpaces(k,fp); fprintf(fp,"%d",add.age); if (add.age<10) { k=2; } else if (add.age>=10 || add.age<100) { k=1; } addSpaces(k,fp); fprintf(fp,"%d",add.gameRate); } //Функція - Редагування запису. void editRecord(struct game add, FILE *fileDatabase, int whatEdit) { printf("\nVxid y vunkizijy je!!!!!!!!!!!!"); int k; printf("\n##whatEdit=%d",whatEdit); if (whatEdit==1) { fprintf(fileDatabase,"%s",add.platform); k=21-strlen(add.platform); addSpaces(k,fileDatabase); } if (whatEdit==2) { fprintf(fileDatabase,"%s",add.name); k=41-strlen(add.name); addSpaces(k,fileDatabase); } if (whatEdit==3) { fprintf(fileDatabase,"%s",add.developer); k=31-strlen(add.developer); addSpaces(k,fileDatabase); } if (whatEdit==4) { fprintf(fileDatabase,"%s",add.publisher); k=31-strlen(add.publisher); addSpaces(k,fileDatabase); } if (whatEdit==5) { fprintf(fileDatabase,"%s",add.releaseDate); k=11-strlen(add.releaseDate); addSpaces(k,fileDatabase); } if (whatEdit==6) { fprintf(fileDatabase,"%s",add.genre); k=21-strlen(add.genre); addSpaces(k,fileDatabase); } if (whatEdit==7) { fprintf(fileDatabase,"%s",add.homepage); k=21-strlen(add.homepage); addSpaces(k,fileDatabase); } if (whatEdit==8) { fprintf(fileDatabase,"%s",add.transmitter); k=4-strlen(add.transmitter); addSpaces(k,fileDatabase); } if (whatEdit==9) { fprintf(fileDatabase,"%s",add.graphics); k=11-strlen(add.graphics); addSpaces(k,fileDatabase); } if (whatEdit==10) { fprintf(fileDatabase,"%d",add.age); if (add.age<10) { k=2; } else if (add.age>=10) { k=1; } addSpaces(k,fileDatabase); } if (whatEdit==11) { fprintf(fileDatabase,"%d",add.gameRate); } } //Функція - Пошуку в бази даних. void searchRecord(FILE *fileDatabase) { struct game reviewGame; fscanf(fileDatabase,"%d",&reviewGame.ID); int k; if (reviewGame.ID<10) { k=3; } else if (reviewGame.ID>=10 && reviewGame.ID<100) { k=2; } else if (reviewGame.ID>100 || reviewGame.ID==100) { k=1; } frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.platform); k=21-strlen(reviewGame.platform); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.name); k=41-strlen(reviewGame.name); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.developer); k=31-strlen(reviewGame.developer); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.publisher); k=31-strlen(reviewGame.publisher); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.releaseDate); k=11-strlen(reviewGame.releaseDate); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.genre); k=21-strlen(reviewGame.genre); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.homepage); k=21-strlen(reviewGame.homepage); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.transmitter); k=4-strlen(reviewGame.transmitter); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%s",&reviewGame.graphics); k=11-strlen(reviewGame.graphics); frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%d",&reviewGame.age); if (reviewGame.age<10) { k=2; } else if (reviewGame.age>=10 || reviewGame.age<100) { k=1; } frotSpaces(k,fileDatabase); fscanf(fileDatabase,"%d",&reviewGame.gameRate); printf("\n----------------------------------"); printf("\nYour dates:\n"); printf("\nID: %d\nPlatform: %s\nName: %s\nDeveloper: %s\nPublisher: %s\nRelease date: %s\nGenre: %s\nHomepage: %s\nTransmitter: %s\nGraphics: %s\nAge: %d\nGame rate: %d\n",reviewGame.ID,reviewGame.platform,reviewGame.name,reviewGame.developer,reviewGame.publisher,reviewGame.releaseDate,reviewGame.genre,reviewGame.homepage,reviewGame.transmitter,reviewGame.graphics,reviewGame.age,reviewGame.gameRate); printf("\n----------------------------------\n"); } Результати виконання програми:  Висновок: Виконавши дану лабораторну роботу я розглянув органiзацiю i ведення файлiв iндексно-послiдовного доступу; набув практичнi навички у програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!