DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях

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

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

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

Рік:
2010
Тип роботи:
Звіт
Предмет:
Програмування
Група:
МЕ
Коротко про документ

Про що ця робота

Звіт присвячено вивченню індексно-послідовного методу доступу до файлів та реалізації базових операцій з базою даних мовою C. У роботі наведено лістинг програми для керування записами з використанням індексних файлів.

У роботі розглядаються

  • Індексно-послідовний метод доступу
  • Організація файлів на зовнішніх носіях
  • Структури даних у мові C
  • Алгоритми пошуку та сортування
  • Керування записами бази даних

Зміст і розділи

  1. Мета
  2. Завдання
  3. Теоретичні відомості
  4. Текст програми
Для кого:Студенти технічних спеціальностей та розробники програмного забезпечення
Викладачі:Викладач кафедри САПР

Ключові поняття

індексний файлбаза данихзовнішня пам'ятьпервинний ключблок записівділянка переповненняреорганізація файлуструктура даних

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Кафедра САПР Звіт до лабораторної роботи №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х запам'ятовуючих пристроях.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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