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

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

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

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

Звіт про виконання лабораторної роботи №3 на тему: «Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях»

Оригінальна назва роботи

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

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

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

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

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

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

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

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

  • Індексно-послідовний метод доступу
  • Організація баз даних
  • Файлові структури
  • Алгоритмічне програмування на C
  • Зовнішні запам'ятовуючі пристрої
  • Пошук та модифікація даних

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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра САПР ЗВІТ про виконання лабораторної роботи №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х запам'ятовуючих пристроях.
Допоможи студентському архіву

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

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

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

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

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

Admin

26.02.2023 12:38

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