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

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

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

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

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

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

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

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

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

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

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

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

  • Організація баз даних
  • Файли прямого доступу
  • Хешування
  • Мова програмування C
  • Алгоритми пошуку записів
  • Управління файлами

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

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

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

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

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

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

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

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

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

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

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

Admin

26.02.2023 12:38

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