МIНIСТЕРСТВО ОСВIТИ І НАУКИ УКРАЇНИ
Національний університет «Львiвська полiтехнiка»
Звіт
до лабораторної роботи №3
на тему
«Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях.»
з курсу "Організація баз даних і знань"
Львів 2016
Тема
Індексно-послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях.
Мета роботи
Розглянути органiзацiю i ведення файлiв iндексно-послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв iндексно-послiдовного доступу до файлiв на зовнiшнiх запам'ятовуючих пристроях.
Завдання:
Написати програму, яка реал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>
#include <math.h>
#include <iostream>
#pragma hdrstop
#include <tchar.h>
#define BLOCKS 10
#define BLOCK_ROWS 6
#pragma argsused
// global vars
FILE *db;
char file_name[100];
struct data{
int id, remaindsDet, priceDet, securityDet, lifetimeDet, salesDet;
char company[20], nameDet[20], categoryDet[20], returnDet[20];
};
struct data parser(char *s);
int hash(int id){
return (id % BLOCKS)-1;
}
void read_row(char *buf){
int i=0 ;
for (i = 0;i<255&&!feof(db); i++){
fscanf(db,"%c",&buf[i]);
buf[i+1]='\0';
if(buf[i]=='\n'){
buf[i]='\0';
break;
}
}
}
void write_row(FILE *f, struct data row){
fprintf(f,"%i|%i|%i|%i|%i|",row.id,row.remaindsDet,row.priceDet,row.securityDet,row.lifetimeDet,row.salesDet);
fprintf(f,"%i|%s|%s|%s|%s|\n",row.salesDet,row.company,row.nameDet,row.categoryDet,row.returnDet);
}
void block_read(struct data block[]){
int i=0;
char buf[255];
for (i = 0; i < BLOCKS; i++) {
block[i].id=0;
}
for (i = 0; i < BLOCK_ROWS && !feof(db); i++) {
read_row(buf);
block[i]=parser(buf);
}
}
void block_write(FILE *f, struct data *block){
int i=0;
for (i = 0; i < BLOCK_ROWS; i++) {
if(block[i].id==0){
fprintf(f,"0||||||||||\n");
}else{
write_row(f,block[i]);
}
}
}
int db_conect(void){
int i;
char c;
system("pause");
for (i=0;i<sizeof(file_name);i++){file_name[i]='\0';}
printf("Database adress: ");
fflush(stdin);
scanf("%s",&file_name);
db=fopen(file_name,"r");
if(db==0){
printf("\ndatabase not find!\n 1- insert new database adress\n 2- exit\n");
c=getchar();
if(c=='1')db_conect();else
if(c!='1')return 0;
}
return 1;
}
struct data parser(char *s){
char b[255];
struct data row;
int i=0, tmp=0,y,bi=0;
row.id=0;
while(s[i]!='\0'&&s[i]!='\n'){
if(s[i]=='|'){
switch (tmp) {
case 0:{row.id=atoi(b);break;}
case 1:{row.remaindsDet=atoi(b);break;}
case 2:{row.priceDet=atoi(b);break;}
case 3:{row.securityDet=atoi(b);break;}
case 4:{row.lifetimeDet=atoi(b);break;}
case 5:{row.salesDet=atoi(b);break;}
case 6:{for(y=0;y<sizeof(row.company);y++)row.company[y]=b[y];break;}
case 7:{for(y=0;y<sizeof(row.nameDet);y++)row.nameDet[y]=b[y];break;}
case 8:{for(y=0;y<sizeof(row.categoryDet);y++)row.categoryDet[y]=b[y];break;}
case 9:{for(y=0;y<sizeof(row.returnDet);y++)row.returnDet[y]=b[y];break;}
default:break;
}
for (bi = 0; bi < sizeof(b); bi++)b[bi]='\0';
bi=0;
tmp++;
}else{
b[bi]=s[i];
bi++;
}
i++;
}
return row;
}
void print_shapka(void){
printf("***Output***\n");
}
void print_row(struct data row){
printf("\n----------------------------------\n");
printf("ID = %d\n",row.id);
printf("Remains = %d\n",row.remaindsDet);
printf("Security = %d\n",row.securityDet);
printf("Price = %d\n",row.priceDet);
printf("Weight = %d\n",row.lifetimeDet);
printf("Sales = %d\n",row.salesDet);
printf("Company = %s\n",row.company);
printf("Name = %s\n",row.nameDet);
printf("Category = %s\n",row.categoryDet);
pr...