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

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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра САПР ЗВІТ про виконання лабораторної роботи №2 на тему: «Прямий метод доступу до файлів на зовнішніх запам’ятовуючих пристроях» з курсу: «Організація баз даних і знань» Львів 2008 Тема роботи Прямий метод доступу до файлів на зовнішніх запам’ятовуючих пристроях Мета роботи Розглянути органiзацiю i ведення файлів прямого доступу; набути практичні навички у програмуванні алгоритмів доступу з хешуванням. Лабораторне завдання Тема завдання: Персонал школи 1. Написати програму методу зв’язаних блоків, яка реалізує такі функції: 1. Друк бази даних. 2. Зчитування запису. 3. Введення запису. 4. Видалення запису. 5. Модифікація запису. 6. Пошук запису. 7. Вихід. Короткі теоретичні відомості Текст програми #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; char fn[50]="db2.txt"; int h(int param) { int k; k=param%10; return k*sizeof(struct DB)*10; } void insert() { int hesh,o; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &db1.id); while (db1.id!=0) { o=0; hesh=h(db1.id); fseek(f1,hesh, SEEK_SET); fread(&db2, sizeof(struct DB),1,f1); while((db2.id>0)&&(o<10)) { if(db2.id==db1.id) { printf("\n***ERROR:Zapus z ID %d vze isnuje!!\nVvedit inshyj ID\n",db1.id); goto error; } hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db2, sizeof(struct DB),1,f1); o++; } fseek(f1, hesh, SEEK_SET); if (o<=10) { 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,o,id; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &id); while (id>0) { o=0; hesh=h(id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); while((db1.id!=id)&&(o<10)) { hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); o++; } fseek(f1, hesh, SEEK_SET); if ((o<=10)&&(db1.id>0)) { 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,o; printf("Uvedit ID (0 dla zaverszennia vvodu)\nІ "); scanf("%d", &db2.id); while (db2.id>0) { o=0; hesh=h(db2.id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); while((db1.id!=db2.id)&&(o<10)) { hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); o++; } fseek(f1, hesh, SEEK_SET); if ((o<=10)&&(db1.id>0)) { 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,o,id; printf("Uvedit ID dla poshuku (dla zavershennia vvedit 0)\nІ "); scanf("%d", &id); while (id>0) { o=0; hesh=h(id); fseek(f1,hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); while((db1.id!=id)&&(o<10)) { hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); o++; } fseek(f1, hesh, SEEK_SET); if ((o<=10)&&(db1.id>0)) { 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 sortvyvid() { int i,j,hesh=0; struct DB db2[100],db3; fseek(f1,0, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); for(i=0;i<100;i++) { if (db1.id>0) db2[i]=db1; hesh=hesh+sizeof(struct DB); fseek(f1, hesh, SEEK_SET); fread(&db1, sizeof(struct DB),1,f1); } for(j=0;j<99;j++) for(i=0;i<100;i++) { //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); if(db2[i].id>db2[i+1].id) { db3=db2[i]; db2[i]=db2[i+1]; db2[i+1]=db3; } } for(i=0;i<100;i++) if(db2[i].id>0) 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); getch(); } */ void main() { int choice; f1=fopen(fn,"r+"); textcolor(BLUE); textbackground(YELLOW); clrscr(); for(;;) { clrscr(); printf("ЙННННННННННННННННННННННННННННННННННННННННСНННННННННННННН»\n"); printf("є Druk bazy danyh і natysnit <1> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Poshuk zapysu za vvedenym kluchem і natysnit <2> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Vudalennia zapysu za vvedenym kluchem і natysnit <3> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Vstavka zapysu і natysnit <4> є\n"); printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n"); printf("є Modyfikacija zapysu і natysnit <5> є\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: {search();break;} case 3: {del(); break;} case 4: {insert();break;} case 5: {modify();break;} case 91:{ins2(); break;} default:{printf("\n\nPOTRIBNO VVESTU CHYSLO VID 0 DO 4\n"); getch();continue;} } } fclose(f1); } Результати виконання програми Головне меню: ╔════════════════════════════════════════╤══════════════╗ ║ Druk bazy danyh │ natysnit <1> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Poshuk zapysu za vvedenym kluchem │ natysnit <2> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vudalennia zapysu za vvedenym kluchem │ natysnit <3> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vstavka zapysu │ natysnit <4> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Modyfikacija zapysu │ natysnit <5> ║ ╟────────────────────────────────────────┼──────────────╢ ║ Vyhid z programy │ natysnit <0> ║ ╚════════════════════════════════════════╧══════════════╝ Vy vvely: Вивід бази даних: ║BLOK N0║ ╔════╦═══════════╦════════╦═════════╩══╦════╩═════╦═════════╦════════╦═════════╗ ║ ID║PRIZVYSHCHE║IMJA ║PO-BAT'KOVI ║DATA NAR. ║POSADA ║TELEFON ║ZARPLATA ║ ╠════╬═══════════╬════════╬════════════╬══════════╬═════════╬════════╬═════════╣ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 80║Spryns'ka ║Zoriana ║Vasylivna ║12.04.1981║Vchytel ║5-25-38 ║ 1350.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 20║Jarish ║Andrij ║Rostyslav. ║26.01.1988║San/teh. ║42-105 ║ 885.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 50║Bukliv ║Pavlo ║Jaroslavov. ║31.05.1988║Vchytel ║42-235 ║ 1455.50║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 60║Glunchak ║Pavlo ║Myronovych ║21.02.1989║Teh.prac.║42-211 ║ 885.90║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╟────╫───────────╫────────╫────────────╫──────────╫─────────╫────────╫─────────╢ ║ 0║ ║ ║ ║ ║ ║ ║ 0.00║ ╚════╩═══════════╩════════╩════════════╩══════════╩═════════╩════════╩═════════╝ Пошук запису у базі даних: Dla poshuku po ID vvedit '1' Dla poshuku po Prizvyshcsu vvedit '2' 2 Vvedit' prizvyshche dla poshuku ▓ Omelchuk REZULTAT: 11 Omelchuk Petro Petrovuch 26.11.1964 Zast.dyr. 2558025 1600.00 23 Omelchuk Marija Petrivna 15.04.1987 Vchytel 2558025 1525.29 Видалення запису з бази даних: 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в доступу хешуванням.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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