Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра САПР
ЗВІТ
про виконання лабораторної роботи №1
на тему: «Послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях»
з курсу: «Організація баз даних і знань»
Виконав: ст. гр. КН-3
Львів 2007
Тема роботи
Послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях
Мета роботи
Розглянути органiзацiю i ведення файлiв послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.
Лабораторне завдання
Тема завдання: Персонал школи
1. Написати програму, яка реалізує такі функції:
1.1. Друк бази даних.
1.2. Пошук запису за введеним ключем.
1.3. Видалення запису за введеним ключем.
1.4. Вставлення запису.
1.5. Модифікація запису.
2. Написати програму групового оброблення файла даних, яка реалізує наступні функції:
2.1. Створення файлу повідомлень.
2.2. Друк бази даних.
2.3. Пошук запису за введеним ключем.
2.4. Видалення запису за введеним ключем.
2.5. Вставлення запису.
2.6. Модифікація запису.
Короткі теоретичні відомості
Текст програми 2
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
/*-------------------------Opys globalnyh zminnyh---------------------------*/
char pr,cl[100],cl2[]="sec.txt";
int choice,i,m,p;
FILE *f1,*f2,*f3;
/*--------------------Opys struktury danyh v bazi danyh---------------------*/
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;
/*---------------------Funkcija vidkryttia fajliv---------------------------*/
void openf()
{
f1=fopen(cl,"r");
f2=fopen(cl2,"w");
if(f1==NULL) {printf("\nNE ISNUJE TAKOGO FAJLU BAZY DANYH!!!");getch();exit(1); }
}
void openf2()
{
f1=fopen(cl,"r");
if(f1==NULL) {printf("\nNE ISNUJE TAKOGO FAJLU BAZY DANYH!!!");getch();exit(1); }
}
/*---------------------Funkcija zakryttia fajliv----------------------------*/
void closef()
{
fclose(f1);
fclose(f2);
remove(cl);
rename(cl2,cl);
}
/*-----------------------Funkcija rozdruku bazy danyh-----------------------*/
void rozdruk()
{
int k=1;
//f1=fopen("cl.txt","r");
openf2();
printf("\nID Prizvyshche Imja Po-bat'kovi D/N Posada N.Tel. Zarplata");
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
while(!feof(f1))
{
printf("\n%-2d %-12s %-9s %-13s %-11s %-10s %-9s %4.2f", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
k++;
if(k%15==0)getch();
}
fclose(f1);
}
/*-----------------------Funkcija poshuku u bazi danyh----------------------*/
void poshuk()
{
printf("Vvedit' nomer zapysu, jakyj potribno znajty: ");
scanf("%d",&m);
f1=fopen("cl.txt","r");
p=0;
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id==m)
{
p=1;
printf("\nZapus z nomerom %d\n",m);
printf("%-12s %-9s %-13s %-11s %-10s %-9s %4.2f\n", db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
}
}
if(p==0)printf("\nNE ISNUJE ZAPYSU Z NOMEROM,JAKYJ VY VVELY!!!\n");
fclose(f1);
}
/*-------------------Funkcija vstavky zapysu u bazu danyh-------------------*/
void vstavlennia()
{
char yes_no;
int p2=0,id,mn;
printf("Vvedit' novi dani u takomu formati:\n<ID> <Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata>\n");
scanf("%d%s%s%s%s%s%s%f", &db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, &db2.zarplata);
openf();
p=0;
mn=db2.id;
while (!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if (db1.id==db2.id) p2=1;
if ((db1.id>db2.id)&&(p2!=1)&&(db2.id<32000))
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata);
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
printf("**Zapys dodano**\n");
db2.id=32001;
p=1;
db1.id=-1;
}
else if(db1.id!=-1)
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
id=db1.id;
db1.id=-1;
}
}
if((mn>id)&&(db2.id<3200))
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", mn, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata);
printf("**Zapys dodano**\n");
p=1;
}
if(p==0){printf("\nZapys z nomerom,jakyj vy vvely vze isnuje\n");}
closef();
}
/*-----------------Funkcija modyfikaciji zapysu y bazi danyh----------------*/
void modyfikacija()
{
int m=0;
printf("Vvedit' nomer zapysu, jakyj potribno redaguvaty: ");
scanf("%d",&m);
openf();
p=0;
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id==m)
{
printf("Vvedit' novi dani u takomu formati:\n<Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata>\n");
db2.id=m;
scanf("%s%s%s%s%s%s%f", db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, &db2.zarplata);
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db2.id, db2.name, db2.lname, db2.pname, db2.datan, db2.posada, db2.tel, db2.zarplata);
p=1;
}
else
if(db1.id!=-1)
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id,db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
db1.id=-1;
}
}
if(p==0)printf("\nNE ISNUJE ZAPYSU Z NOMEROM,JAKYJ VY VVELY!!!");
closef();
}
/*------------------Funkcija vydalennia zapysu z bazy danyh-----------------*/
void vydalennia()
{
struct DB db1,db2;
printf("Vvedit' nomer zapysu, jakyj potribno vydalyty: ");
scanf("%d",&m);
openf();
p=0;
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id==m) {p=1;continue;}
else if(db1.id!=-1){fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);db1.id=-1;}
}
if(p==0)printf("\nNE ISNUJE ZAPYSU Z NOMEROM,JAKYJ VY VVELY!!!\n");
closef();
}
/*-------------Funkcija grupovogo vydalennia zapysu z bazy danyh------------*/
void group_del()
{
struct DB db1,db2;
int id,p2=0,p3;
f3=fopen("sec2.txt","w");
printf("Vvedit' nomery zapysu, jakyj potribno vydalyty(dla zakinchennia vvedit' <0>): \n");
scanf("%d",&id);
while(id>0)
{
fprintf(f3," %d",id);
scanf("%d",&id);
}
fclose(f3);
openf();
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
p=0;
f3=fopen("sec2.txt","r");
while(!feof(f3))
{
fscanf(f3,"%d",&id);
if(db1.id==id) {p=1;break;}
}
fclose(f3);
if (p==1)
{
printf("\nZapys %-2d %-12s %-9s %-14s - VYDALENO",db1.id, db1.name, db1.lname, db1.pname);
p2=1;
continue;
}
else
if(db1.id!=-1) fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
db1.id=-1;
p=0;
}
if(p2==0)printf("\nZodnogo z vvedenyh zapysiv nemaje v bazi danyh\n");
closef();
}
/////////////////////////////////////////////////////////////////////////////
void group_poshuk()
{
int id,vybir,poch,kin;
f1=fopen("cl.txt","r");
printf("Dla vvody diapazony znachen' kluchiv, vvedit 1;\nDla vvody konkretnyh znachen' kluchiv, vvedit' 2.\n? ");
scanf("%d",&vybir);
if (vybir==2)
{
printf("Vvedit' nomery zapysiv, jaki potribno znajty(dla zavershennia vvedit' '0'): \n");
f3=fopen("sec2.txt","w");
scanf("%d",&id);
while(id>0)
{
fprintf(f3," %d",id);
scanf("%d",&id);
}
fclose(f3);
p=0;
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
f3=fopen("sec2.txt","r");
while(!feof(f3))
{
fscanf(f3,"%d",&id);
if(db1.id==id) {p=1;break;}
}
fclose(f3);
if(p==1)
{
printf("%d %-12s %-9s %-13s %-11s %-10s %-9s %4.2f\n",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
p=0;
}
}
}
else if(vybir==1)
{
printf("\nVvedit' mezi poshuku:\n? ");
scanf("%d%d",&poch,&kin);
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if((db1.id>=poch)&&(db1.id<=kin))
printf("%d %-12s %-9s %-13s %-11s %-10s %-9s %4.2f\n",db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
}
}
fclose(f1);
}
/////////////////////////////////////////////////////////////////////////////
/*----------------------------Golovna funkcija------------------------------*/
/////////////////////////////////////////////////////////////////////////////
void main()
{
highvideo();
textcolor(BLACK);
textbackground(WHITE);
clrscr();
printf("UVedit' adresu do fajlu bazy danyh: ");
scanf("%s",cl);
m1:
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("є Vstavlennia zapysy і natysnit <4> є\n");
printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n");
printf("є Modyfikacija zapysu і natysnit <5> є\n");
printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n");
// printf("є Grupove vydalennia zapysiv z bazu danyhі natysnit <6> є\n");
// printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n");
// printf("є Grupovyj poshuk zapysiv y bazi danyh і natysnit <7> є\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: {rozdruk(); break;}
case 2: {poshuk(); break;}
case 3: {vydalennia(); break;}
case 4: {vstavlennia(); break;}
case 5: {modyfikacija();break;}
case 6: {group_del(); break;}
case 7: {group_poshuk(); break;}
default:{printf("\n\nPOTRIBNO VVESTU CHYSLO VID 0 DO 7\n"); getch();goto m1;}
} // Ђ128 Ѓ129 ‚130 ѓ131 „132 …133 †134 ‡135 €136 ‰137 Љ138 ‹139 Њ140 Ќ141
// Ћ142 Џ143 ђ144 ‘145 ’146 “147 ”148 •149 –150 —151 152 ™153 љ154 ›155
// њ156 ќ157 ћ158 џ159
// Ў ў Ј ¤ Ґ ¦ § Ё © Є « ¬ ® Ї
printf("\n‚€ЉЋЌЂ’€ ™… џЉI‘њ „II (y/n)?: ");
m2:pr=getch();
clrscr();
if ((pr=='y')||(pr=='Y'))goto m1;
}
Текст програми 2
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
/*-------------------------Opys globalnyh zminnyh---------------------------*/
char pr,cl[]="cl.txt",cl2[]="sec.txt",mes[]="sec2.txt",mes2[]="sec3.txt";
int choice,i,m,p;
FILE *f1,*f2,*f3;
/*--------------------Opys struktury danyh v bazi danyh---------------------*/
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 DB2{
int id;
char name[12];
char lname[9];
char pname[13];
char datan[11];
char posada[10];
char tel[9];
float zarplata;
int op;
};
struct DB db1,db2;
struct DB2 db3,db4;
/*---------------------Funkcija vidkryttia fajliv---------------------------*/
void openf2()
{
f1=fopen(cl,"r");
if(f1==NULL) {printf("\nNE ISNUJE TAKOGO FAJLU BAZY DANYH!!!");getch();exit(1); }
}
/*-----------------------Funkcija rozdruku bazy danyh-----------------------*/
void rozdruk()
{
int k=1;
openf2();
printf("\nID Prizvyshche Imja Po-bat'kovi D/N Posada N.Tel. Zarplata");
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
while(!feof(f1))
{
printf("\n%-2d %-12s %-9s %-13s %-11s %-10s %-9s %4.2f", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
k++;
if(k%15==0)getch();
}
fclose(f1);
getch();
}
/*-----------------------Funkcija poshuku u bazi danyh----------------------*/
void poshuk()
{
printf("Vvedit' nomer zapysu, jakyj potribno znajty: ");
scanf("%d",&m);
f1=fopen(cl,"r");
p=0;
while(!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id==m)
{
p=1;
printf("\nZapus z nomerom %d\n",m);
printf("%-12s %-9s %-13s %-11s %-10s %-9s %4.2f\n", db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
}
}
if(p==0)printf("\nNE ISNUJE ZAPYSU Z NOMEROM,JAKYJ VY VVELY!!!\n");
fclose(f1);
getch();
}
/*------------Funkcija vstavky/modyfikaciji zapysu u bazu danyh-------------*/
void ins_modif()
{
FILE *f4;
char yes_no;
int p=0,p2=0,p1,id=0,mn;
printf("dla vstavky elementa, v punkti <op> vvedit '1',\n dla modyfikaciji - '2'\n");
v1:
f4=fopen(mes2,"w");
f3=fopen(mes,"r");
if(f3==NULL)
{fclose(f3);f3=fopen(mes,"w");fclose(f3);f3=fopen(mes,"r");}
printf("Vvedit' novi dani u takomu formati:\n<ID> <Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata><op>\n");
scanf("%d%s%s%s%s%s%s%f%d", &db4.id, db4.name, db4.lname, db4.pname, db4.datan, db4.posada, db4.tel, &db4.zarplata, &db4.op);
db3.id=-1;
mn=db4.id;
while (!feof(f3))
{
fscanf(f3,"%d%s%s%s%s%s%s%f%d", &db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, &db3.zarplata, &db3.op);
if (db3.id==db4.id)p2=1;
if ((db3.id>db4.id)&&(p2!=1)&&(db4.id<32000))
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db4.id, db4.name, db4.lname, db4.pname, db4.datan, db4.posada, db4.tel, db4.zarplata, db4.op);
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata, db3.op);
db4.id=32005;
db3.id=-1;
}
else if(db3.id>0)
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata, db3.op);
id=db3.id;
db3.id=-1;
}
}
fclose(f3);
if((mn>id)&&(db4.id<32000))
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db4.id, db4.name, db4.lname, db4.pname, db4.datan, db4.posada, db4.tel, db4.zarplata, db4.op);
printf("\n**OK**\n");
p=1;
}
if(p==0){printf("***ERROR: Vy vdryge vvely operaciju nad zapysom, nad jakym vze vykonuvaly jakus' operaciju.\n Vy mozete vykonaty Ciu operaciju piznisze, kolu zaverszyte vykonannia potochnyh.");}
printf("\nDodaty/modyfikuvaty shche zapus?\n");
fclose(f4);
yes_no=getch();
if(yes_no!='y') goto v2;
goto v1;
v2:
remove(mes);
rename(mes2,mes);
}
/*------------------Funkcija vydalennia zapysu z bazy danyh-----------------*/
void vydalennia()
{
struct DB2 db4={0, "NULL", "NULL","NULL","NULL","NULL","NULL", -1.0, 3};
FILE *f4;
char yes_no;
int p=0,p2=0,p1,id=0,mn;
v1:
f4=fopen(mes2,"w");
f3=fopen(mes,"r");
if(f3==NULL){fclose(f3);f3=fopen(mes,"w");fclose(f3);f3=fopen(mes,"r");}
printf("Vvedit' nomer zapusu dla vydalennia\n");
scanf("%d", &db4.id);
db3.id=-1;
mn=db4.id;
while (!feof(f3))
{
fscanf(f3,"%d%s%s%s%s%s%s%f%d", &db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, &db3.zarplata, &db3.op);
if (db3.id==db4.id)p2=1;
if ((db3.id>db4.id)&&(p2!=1)&&(db4.id<32000))
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db4.id, db4.name, db4.lname, db4.pname, db4.datan, db4.posada, db4.tel, db4.zarplata, db4.op);
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata, db3.op);
db4.id=32001;
db3.id=-1;
p=1;
}
else if(db3.id>0)
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata, db3.op);
id=db3.id;
db3.id=-1;
}
}
fclose(f3);
if((mn>id)&&(db4.id<32000))
{
fprintf(f4,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f %d\n", db4.id, db4.name, db4.lname, db4.pname, db4.datan, db4.posada, db4.tel, db4.zarplata, db4.op);
printf("**OK**\n");
p=1;
}
if(p==0)
{ printf("***ERROR: Vy vdryge vvely operaciju nad zapysom, nad jakym vze");
printf("\n vykonuvaly jakus' operaciju.");
printf("\n Vy mozete vykonaty Ciu operaciju piznisze, kolu zaverszyte");
printf("\n vykonannia potochnyh.");
}
printf("\nVydalyty shche zapus?\n");
fclose(f4);
yes_no=getch();
if(yes_no!='y') goto v2;
goto v1;
v2:
remove(mes);
rename(mes2,mes);
}
void save()
{
f1=fopen(cl,"r");
f2=fopen(cl2,"w");
f3=fopen(mes,"r");
if(f3==NULL){printf("Fajl povidomlen' ne stvoreno!!!");goto end2;}
while(!feof(f3))
{
fscanf(f3,"%d%s%s%s%s%s%s%f%d", &db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, &db3.zarplata, &db3.op);
vv1:
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id<db3.id)
{
if(db1.id>0)
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
db1.id=-1;
goto vv1;
}
else if((db3.op==1)&&(db3.id<31999))
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata);
goto end;
}
}
else
{
if((db1.id>db3.id)&&(db3.id<31999))
{
if(db3.op==1)
{
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata);
fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
db1.id=-1;
db3.id=32000;
}
}
else
if(db3.op==3) {continue;}
else
if(db3.op==2)fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db3.id, db3.name, db3.lname, db3.pname, db3.datan, db3.posada, db3.tel, db3.zarplata);
}
}
if(db1.id>0)fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
while (!feof(f1))
{
fscanf(f1,"%d%s%s%s%s%s%s%f", &db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, &db1.zarplata);
if(db1.id>0)fprintf(f2,"%-2d %-12s %-9s %-14s %-11s %-10s %-9s %4.2f\n", db1.id, db1.name, db1.lname, db1.pname, db1.datan, db1.posada, db1.tel, db1.zarplata);
db1.id=-1;
}
end:
printf("\n***Zminy zberezeno***");
fclose(f1);
fclose(f2);
fclose(f3);
remove(cl);
rename(cl2,cl);
remove(mes);
end2:
getch();
}
////////////////////////////////////////////////////////////////////////////
/*----------------------------Golovna funkcija------------------------------*/
/////////////////////////////////////////////////////////////////////////////
void main()
{
highvideo();
textcolor(BLACK);
textbackground(WHITE);
clrscr();
printf("UVedit' adresu do fajlu bazy danyh: ");
scanf("%s",cl);
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/modyfikacija zapysy і natysnit <4> є\n");
printf("ЗДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДД¶\n");
printf("є Zberegty zminu bazy danyh і 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: {rozdruk(); break;}
case 2: {poshuk(); break;}
case 3: {vydalennia(); break;}
case 4: {ins_modif(); break;}
case 5: {save(); break;}
default:{printf("\n\nPOTRIBNO VVESTU CHYSLO VID 0 DO 4\n"); getch();continue;}
} // Ђ128 Ѓ129 ‚130 ѓ131 „132 …133 †134 ‡135 €136 ‰137 Љ138 ‹139 Њ140 Ќ141
// Ћ142 Џ143 ђ144 ‘145 ’146 “147 ”148 •149 –150 —151 152 ™153 љ154 ›155
// њ156 ќ157 ћ158 џ159
// Ў ў Ј ¤ Ґ ¦ § Ё © Є « ¬ ® Ї
// printf("\n‚€ЉЋЌЂ’€ ™… џЉI‘њ „II (y/n)?: ");
// m2:pr=getch();
// clrscr();
}
//if ((pr=='y')||(pr=='Y'))goto m1;
}
Результати виконання програми 1
Головне меню:
╔════════════════════════════════════════╤══════════════╗
║ Druk bazy danyh │ natysnit <1> ║
╟────────────────────────────────────────┼──────────────╢
║ Poshuk zapysu za vvedenym kluchem │ natysnit <2> ║
╟────────────────────────────────────────┼──────────────╢
║ Vudalennia zapysu za vvedenym kluchem │ natysnit <3> ║
╟────────────────────────────────────────┼──────────────╢
║ Vstavlennia zapysy │ natysnit <4> ║
╟────────────────────────────────────────┼──────────────╢
║ Modyfikacija zapysu │ natysnit <5> ║
╟────────────────────────────────────────┼──────────────╢
║ Grupove vydalennia zapysiv v bazu danyh│ natysnit <6> ║
╟────────────────────────────────────────┼──────────────╢
║ Vyhid z programy │ natysnit <0> ║
╚════════════════════════════════════════╧══════════════╝
Vy vvely:
Вивід бази даних:
1 Dombrova Galyna Mykhailivna 29.11.1958 Dyrektor 42-417 1560.26
2 Klos Luba Petrivna 01.11.1974 zast.dyr 42-211 999.26
4 Dublanko Marija Ivanivna 23.00.1948 zast.dyr 42-106 732.73
5 Stashko Nadija Stepanivna 06.07.1951 vchytel 42-223 853.45
6 Shubjak Stefa Mykhailivna 02.06.1950 vchytel 42-453 1560.26
7 Deneka Luba Jaroslavivna 05.12.1962 vchytel 42-485 999.26
9 Sprynska Zorfna Vasylivna 14.03.1980 vchytel 42-159 732.73
11 Jarosh Marija Lvivna 06.07.1951 storoz 42-258 853.45
14 Novosilska Luba Ivanivna 09.09.1953 vchytel 42-753 1560.26
16 Grynak Vasyl Mykolajovich 14.03.1953 zav.gosp 42-159 732.73
Vykonaty shche jakis' diji (y/n)?:
Пошук запису у базі даних:
Vvedit' nomer zapysu, jakyj potribno znajty: 11
Zapus z nomerom 11
Jarosh Marija Lvivna 06.07.1951 storoz 42-258 853.45
Vykonaty shche jakis' diji (y/n)?:
Видалення запису з бази даних:
Vvedit' nomer zapysu, jakyj potribno vydalyty: 5
Vykonaty shche jakis' diji (y/n)?:
Вставка запису у базу даних:
Vvedit' novi dani u takomu formati:
<ID> <Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata>
17 Dombrova Mykhailo Stanislavov. 01.01.1989 vchytel 2558055 8526.36
Vykonaty shche jakis' diji (y/n)?:
Модифікація запису у базі даних:
Vvedit' nomer zapysu, jakyj potribno redaguvaty: 14
Vvedit' novi dani u takomu formati:
<Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata>
Andrijuk Andrij Andrijovych 12.02.1984 vchytel 44-541 1240.12
Vykonaty shche jakis' diji (y/n)?:
Результати виконання програми 2
Головне меню:
╔════════════════════════════════════════╤══════════════╗
║ Druk bazy danyh │ natysnit <1> ║
╟────────────────────────────────────────┼──────────────╢
║ Poshuk zapysu za vvedenym kluchem │ natysnit <2> ║
╟────────────────────────────────────────┼──────────────╢
║ Vudalennia zapysu za vvedenym kluchem │ natysnit <3> ║
╟────────────────────────────────────────┼──────────────╢
║ Vstavlennia/modyfikacija │ natysnit <4> ║
╟────────────────────────────────────────┼──────────────╢
║ Zberezennia zmin │ natysnit <5> ║
╟────────────────────────────────────────┼──────────────╢
║ Vyhid z programy │ natysnit <0> ║
╚════════════════════════════════════════╧══════════════╝
Vy vvely:
Вивід бази даних:
1 Dombrova Galyna Mykhailivna 29.11.1958 Dyrektor 42-417 1560.26
2 Klos Luba Petrivna 01.11.1974 zast.dyr 42-211 999.26
4 Dublanko Marija Ivanivna 23.00.1948 zast.dyr 42-106 732.73
5 Stashko Nadija Stepanivna 06.07.1951 vchytel 42-223 853.45
6 Shubjak Stefa Mykhailivna 02.06.1950 vchytel 42-453 1560.26
7 Deneka Luba Jaroslavivna 05.12.1962 vchytel 42-485 999.26
9 Sprynska Zorfna Vasylivna 14.03.1980 vchytel 42-159 732.73
11 Jarosh Marija Lvivna 06.07.1951 storoz 42-258 853.45
14 Novosilska Luba Ivanivna 09.09.1953 vchytel 42-753 1560.26
16 Grynak Vasyl Mykolajovich 14.03.1953 zav.gosp 42-159 732.73
Пошук запису у базі даних:
Vvedit' nomer zapysu, jakyj potribno znajty: 11
Zapus z nomerom 11
Jarosh Marija Lvivna 06.07.1951 storoz 42-258 853.45
Vykonaty shche jakis' diji (y/n)?:
Видалення запису з бази даних:
Vvedit' nomer zapusu dla vydalennia
5
**OK**
Vydalyty shche zapus?
Vvedit' nomer zapusu dla vydalennia
7
**OK**
Vydalyty shche zapus?
Вставка/модифікація запису у базу даних:
dla vstavky elementa, v punkti <op> vvedit '1',
dla modyfikaciji - '2'
Vvedit' novi dani u takomu formati:
<ID> <Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata><op>
25 Kaleniuk Sergij Sergijovych 25.03.1982 Zav.gosp 2558025 1300.50 1
**OK**
Dodaty/modyfikuvaty shche zapus?
Vvedit' novi dani u takomu formati:
<ID> <Prizvyshche> <Imja> <Pobat'kovi> <D.N.> <posada> <nom.tel.> <zarplata><op>
33 Zarickyj Ivan Myhajlovych 06.07.1989 Laborant 42-221 900.20 2
**OK**
Dodaty/modyfikuvaty shche zapus?
Висновки
На цій лабораторній роботі я розглянув органiзацiю i ведення файлiв послiдовного доступу; набув практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.