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

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

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

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

Рік:
2008
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Організація баз даних і знань
Група:
КН-316

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра САПР ЗВІТ про виконання лабораторної роботи №3 на тему: «Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях» з курсу: «Організація баз даних і знань» Львів 2008 Тема роботи Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях. Мета роботи Розглянути органiзацiю i ведення файлiв iндексно-послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях. Лабораторне завдання Тема завдання: Персонал школи 1. Написати програму, яка реалiзує алгоритми роботи iндексно-послiдов ного методу доступу до iнформацiї на зовнiшнiх носiях: 1.1. Пошук елемента даних за введеним ключем. 1.2. Вставка елемента даних. 1.3. Видалення елемента даних. 1.4. Модифiкацiя елемента даних. Короткі теоретичні відомості Текст програми #include <stdio.h> #include <conio.h> #include <string.h> struct DB { int id; char name[12]; char lname[9]; char pname[13]; char datan[11]; char posada[10]; char tel[9]; float zarplata; }; struct DB db1,db2; FILE *f1,*fi; char fn[50]="db3.txt",fn2[50]="index.txt"; int h(int param) { int k,mod1; fi=fopen(fn2,"r"); while(!feof(fi)) { fscanf(fi,"%d",&k); if(param<k) break; } if(!feof(fi)) { fclose(fi); mod1=(param%10)*sizeof(struct DB); return (k-10)*sizeof(struct DB)+mod1; } return 0; } void insert() { int hesh; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &db1.id); while (db1.id!=0) { hesh=h(db1.id); fseek(f1,hesh, SEEK_SET); fread(&db2, sizeof(struct DB),1,f1); if(db2.id==db1.id) { printf("\n***ERROR:Zapus z ID %d vze isnuje!!\nVvedit inshyj ID\n",db1.id); goto error; } fseek(f1, hesh, SEEK_SET); printf("Uvedit'\nPrizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarplatu\n"); scanf("%s%s%s%s%s%s%f", db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata); fwrite(&db1, sizeof(struct DB), 1, f1); printf("***Zapys dodano***\n"); error: printf("Uvedit' ID\nІ "); scanf("%d", &db1.id); } } void ins2() { int hesh=0,i; fseek(f1,0, SEEK_SET); fwrite(&db2, sizeof(struct DB),1,f1); for(i=0;i<100;i++) { hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fwrite(&db2, sizeof(struct DB),1,f1); } } void vyvid() { int i,j=0,k=0,l=0; clrscr(); fseek(f1,0, SEEK_SET); fread(&db2,sizeof(struct DB),1,f1); for(i=1;i<=100;i++) { if (k==0) { getch(); clrscr(); printf(" єBLOK N%dє\n",j); printf("ЙННННЛНННННННННННЛННННННННЛНННННННННКННЛННННКНННННЛНННННННННЛННННННННЛННННННННН»"); printf("є IDєPRIZVYSHCHEєIMJA єPO-BAT'KOVI єDATA NAR. єPOSADA єTELEFON єZARPLATA є"); printf("МННННОНННННННННННОННННННННОННННННННННННОННННННННННОНННННННННОННННННННОННННННННН№"); } printf("є%4dє%-11sє%-8sє%-12sє%-10sє%-9sє%-8sє%9.2fє",db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata); if(l<9) printf("ЗДДДДЧДДДДДДДДДДДЧДДДДДДДДЧДДДДДДДДДДДДЧДДДДДДДДДДЧДДДДДДДДДЧДДДДДДДДЧДДДДДДДДД¶"); fseek(f1,i*sizeof(struct DB), SEEK_SET); fread(&db2,sizeof(struct DB),1,f1); k=i%10; j=i/10; l++; if(l==10) { printf("ИННННКНННННННННННКННННННННКННННННННННННКННННННННННКНННННННННКННННННННКНННННННННј"); l=0; } } getch(); } ////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ void del() { struct DB db2={0, NULL, NULL, NULL, NULL, NULL, NULL, 0.00}; int hesh,id; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &id); while (id>0) { hesh=h(id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); // if((db1.id==id)&&(db1.id>=1)) { fseek(f1, hesh, SEEK_SET); fwrite(&db2, sizeof(struct DB),1, f1); printf("\n****Zapys vydaleno****"); } // else printf("\n***ERROR: Ne isnuje zapysu, jakyj vy hochete vydalyty\n"); printf("\nVvedit' ID dla vydalennia\nІ "); scanf("%d",&id); } } void modify() { struct DB db2; int hesh; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &db2.id); while (db2.id>0) { hesh=h(db2.id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); if(db1.id==db2.id) { fseek(f1, hesh, SEEK_SET); printf("Uvedit' novi dani \nPrizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarplatu\n"); scanf("%s%s%s%s%s%s%f", db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, &db2.zarplata); fwrite(&db2, sizeof(struct DB), 1, f1); printf("\n****Zapys modyfikovano****"); } else printf("\n***ERROR: Ne isnuje zapysu, jakyj vy hochete modyfikuvaty\n"); printf("\nVvedit' ID dla modyfikaciji\nІ "); scanf("%d",&db2.id); } } void search() { int choice; err:printf("\nDla poshuku po ID vvedit '1'\nDla poshuku po Prizvyshcsu vvedit '2' "); scanf("%d",&choice); if (choice==1) search1(); else if(choice==2) search2(); else {printf("\nPotribno vvesty '1' abo '2'");goto err; } } search1() { int hesh,id; printf("Uvedit ID dla poshuku (dla zavershennia vvedit 0)\nІ "); scanf("%d", &id); while (id>0) { hesh=h(id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); if(db1.id==id) { printf("Rezultat: \n"); printf("%3d %-11s %-8s %-12s %-10s %-9s %-8s %-6.2f",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata); } else printf("\n***ERROR: Ne isnuje zapysu, jakyj vy hochete znajtu"); printf("\nVvedit' ID dla poshuku\nІ "); scanf("%d",&id); } return 0; } search2() { int hesh=0,i,k,l=0; char name[12]; printf("\n Vvedit' prizvyshche dla poshuku\nІ "); scanf("%s",name); fseek(f1,0, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); printf("REZULTAT:\n"); while(!feof(f1)) { for(k=0;k<=strlen(db1.name);k++) if (db1.name[k]==name[k])l=1; else{l=0;break;} if (l==1) printf("\n%3d %-11s %-8s %-12s %-10s %-9s %-8s %-6.2f",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata); hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); } getch(); return 0; } void svyvid() { int hesh=0,k=0; printf("ЙННННЛНННННННННННЛННННННННЛННННННННННННЛННННННННННЛНННННННННЛННННННННЛННННННННН»"); printf("є IDєPRIZVYSHCHEєIMJA єPO-BAT'KOVI єDATA NAR. єPOSADA єTELEFON єZARPLATA є"); printf("МННННОНННННННННННОННННННННОННННННННННННОННННННННННОНННННННННОННННННННОННННННННН№"); fseek(f1,0,SEEK_SET); while(!feof(f1)) { fseek(f1,hesh,SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); hesh=hesh+sizeof(struct DB); if(db1.id>=1) { printf("є%4dє%-11sє%-8sє%-12sє%-10sє%-9sє%-8sє%9.2fє",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata); printf("МННННОНННННННННННОННННННННОННННННННННННОННННННННННОНННННННННОННННННННОННННННННН№"); k++; if(k%10==0)getch(); } } getch(); } void main() { int choice; textcolor(BLUE); textbackground(YELLOW); clrscr(); printf("Vvedit' adresu do fajlu BD: "); scanf("%s",fn); clrscr(); f1=fopen(fn,"r+"); for(;;) { clrscr(); printf("ЙННННННННННННННННННННННННННННННННННННННННСНННННННННННННН»\n"); printf("є Druk bazy danyh (po blokah) і natysnit <1> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Druk bazy danyh (vidsortovanyj) і natysnit <2> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Poshuk zapysu za vvedenym kluchem і natysnit <3> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Vudalennia zapysu za vvedenym kluchem і natysnit <4> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Vstavka zapysu і natysnit <5> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Modyfikacija zapysu і natysnit <6> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Vyhid z programy і natysnit <0> є\n"); printf("ИННННННННННННННННННННННННННННННННННННННННПННННННННННННННј\n"); printf("Vy vvely: "); scanf("%d",&choice); printf("\n\n"); switch (choice) { case 0 :{exit(1); break;} case 1 :{vyvid(); break;} case 2 :{svyvid();break;} case 3 :{search();break;} case 4 :{del(); break;} case 5 :{insert();break;} case 6 :{modify();break;} case 91:{ins2(); break;} default:{printf("\n\nPOTRIBNO VVESTU CHYSLO VID 0 DO 4\n"); getch();continue;} } } fclose(f1); } Результати виконання програми Головне меню: ╔════════════════════════════════════════╤══════════════╗ ║ Druk bazy danyh (po blokah) │ natysnit <1> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Druk bazy danyh (vidsortovanyj) │ natysnit <2> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Poshuk zapysu za vvedenym kluchem │ natysnit <3> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vudalennia zapysu za vvedenym kluchem │ natysnit <4> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vstavka zapysu │ natysnit <5> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Modyfikacija zapysu │ natysnit <6> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vyhid z programy │ natysnit <0> ║ ╚════════════════════════════════════════╧══════════════╝ Vy vvely: Вивід бази даних(по блоках): ║BLOK N0║ ╔════╦═══════════╦════════╦═════════╩══╦════╩═════╦═════════╦════════╦═════════╗ ║ ID║PRIZVYSHCHE║IMJA ║PO-BAT'KOVI ║DATA NAR. ║POSADA ║TELEFON ║ZARPLATA ║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 1║Dombrova ║Galuna ║Myhajlivna ║29.11.1958║Dyrektor ║42-417 ║ 1750.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 2║Klos ║Luba ║Petrivna ║13.05.1977║Zast.dyr.║42-111 ║ 1560.20║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 6║Dublanko ║Marija ║Ivanivna ║12.11.1951║Zast.Dyr.║42-443 ║ 1450.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 9║Sobchyshak ║Natalia ║Dmytrivna ║15.03.1967║Ped.Org. ║46-112 ║ 1100.00║ ╚════╩═══════════╩════════╩════════════╩══════════╩═════════╩════════╩═════════╝ Вивід бази даних(відсортованй): ╔════╦═══════════╦════════╦════════════╦══════════╦═════════╦════════╦═════════╗ ║ ID║PRIZVYSHCHE║IMJA ║PO-BAT'KOVI ║DATA NAR. ║POSADA ║TELEFON ║ZARPLATA ║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 1║Dombrova ║Galuna ║Myhajlivna ║29.11.1958║Dyrektor ║42-417 ║ 1750.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 2║Klos ║Luba ║Petrivna ║13.05.1977║Zast.dyr.║42-111 ║ 1560.20║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 6║Dublanko ║Marija ║Ivanivna ║12.11.1951║Zast.Dyr.║42-443 ║ 1450.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 9║Sobchyshak ║Natalia ║Dmytrivna ║15.03.1967║Ped.Org. ║46-112 ║ 1100.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 11║Lyhva ║Myron ║Petrovych ║30.04.1965║Vchytel ║44-114 ║ 1000.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 15║Spryns'ka ║Zoriana ║Vasylivna ║12.04.1981║Vchytel ║3-25-48 ║ 980.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 19║Jarosh ║Marija ║Lvivna ║15.05.1949║Storozh ║42-130 ║ 890.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 20║Dombrova ║Ivan ║Stanisl. ║14.01.1983║Vchytel ║42-417 ║ 890.00║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 21║Grynda ║Lida ║Pavlivna ║21.02.1952║Vchytel ║42-450 ║ 1180.20║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 25║Omelchuk ║Marija ║Petrivna ║15.04.1987║Vchytel ║255-8025║ 1240.50║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ Пошук запису у базі даних: Dla poshuku po ID vvedit '1' Dla poshuku po Prizvyshcsu vvedit '2' 1 Uvedit ID dla poshuku (dla zavershennia vvedit 0) ▓ 30 Rezultat: 30 Klynkovskyj Igor Romanovych 17.03.1972 Vchytel 2-25-48 820.00 Vvedit' ID dla poshuku Vvedit' prizvyshche dla poshuku ▓ Jarosh REZULTAT: 19 Jarosh Marija Lvivna 15.05.1949 Storozh 42-130 890.00 Видалення запису з бази даних: Uvedit ID (0 dla zaverszennia vvodu) ▓ 27 ****Zapys vydaleno**** Vvedit' ID dla vydalennia ?▓ Вставка запису у базу даних: Uvedit ID (0 dla zaverszennia vvodu) ▓ 10 Uvedit' Prizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarpl atu Zaritslyj Ivan Mykhailovyc 06.07.1989 Vchytel 42-221 1150.00 ***Zapys dodano*** Модифікація запису у базі даних: Uvedit ID (0 dla zaverszennia vvodu) ▓ 47 Uvedit' novi dani Prizvyshche(11), Imja(8), Po-bat'kovi(12), d/n(10), posadu(9), telefon(8), zarpl atu Kalytka Pavlo Petrovych 30.03.1971 Vchytel 44-669 1400.20 ****Zapys modyfikovano**** Vvedit' ID dla modyfikaciji ▓ Висновки На цій лабораторній роботі я розглянув орган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

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