Текст програми
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
struct avto{
int id;
char virob[10];
char mod[10];
char kom[10];
int obem;
int ks;
int rik;
int max;
char shin[10];
char shasi[10];
int var;
};
int a,b,c,r;
int q=0,x=0,i=0,j=0,k=0,w=0,l=0,p=0,z=0,v=0;
char *name,str[50],st[10],u[10];
FILE *f,*g,*t,*t2;
avto s0,s,s1;
void Create();
void Insert();
void Insert_n();
void Print();
void Reading();
void Deleting();
void Rename();
void Create_Pov();
void Insert_Pov(int e);
void Insert_n2();
void Print_Pov();
void Rename_Pov();
void End_Pov();
void Reading_Pov();
//Головна функція з меню програми
int main()
{
setlocale(0,"");
cout<<"Лабораторна робота №1"<<endl<<"Тема:"<<endl<<"Послiдовний метод доступу до файлiв на зовнiшнх запам’ятовуючих пристроях";
cout<<endl<<"Виконав"<<endl;
cout<<"cтудент групи КН-24"<<endl<<"Гурський Андрiй"<<endl;
cout<<"Тема завдання: Спортивнi болiди\n"<<endl;
a0:
cout<<"Виберiть варiант дiї:"<<endl;
cout<<"1-Послiдовний метод доступу до файлiв на ЗЗП"<<endl;
cout<<"2-Введення файлу шляхом створення файлу групової обробки повiдомлень"<<endl;
cout<<"0-Вихiд iз програми"<<endl;
cin>>a;
system("cls");
switch(a)
{
case 1:goto a1;
break;
case 2:goto a2_1;
break;
case 0:goto a3;
break;
default:
{
cout<<"Такого варiанту не iснує"<<endl;
goto a0;
}
}
a1:
system("cls");
cout<<"Послiдовний метод доступу до файлiв на ЗЗП"<<endl;
cout<<"Виберiть варiант дiї:"<<endl;
cout<<"1-Створення файлу БД"<<endl;
cout<<"2-Друк БД"<<endl;
cout<<"3-Читання за вказаним ключем"<<endl;
cout<<"4-Пошук за вказаним ключем"<<endl;
cout<<"5-Вставлення запису"<<endl;
cout<<"6-Видалення запису"<<endl;
cout<<"7-Модифiкацiя запису"<<endl;
cout<<"0-Вихiд в головне меню програми"<<endl;
cin>>b;
system("cls");
switch(b)
{
case 1: Create();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 2: Print();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 3: Reading();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 4: Reading();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 5:
cout<<"Введiть елементи полiв БД:"<<endl;
cout<<"ID:";
cin>>s0.id;
cout<<"Виробник:";
cin>>s0.virob;
cout<<"Модель:";
cin>>s0.mod;
cout<<"Рiк випуску:";
cin>>s0.rik;
cout<<"Max швидiксть:";
cin>>s0.max;
cout<<"Шини:";
cin>>s0.shin;
cout<<"Команда:";
cin>>s0.kom;
cout<<"Кiнськi сили:";
cin>>s0.ks;
cout<<"Об'єм двигуна:";
cin>>s0.obem;
cout<<"Шасi:";
cin>>s0.shasi;
cout<<endl;
k=0;l=0;
if(s0.id==0){system("cls");cout<<"Ви ввели ID=0"<<endl;k=1;w=1;}
if(s0.id<0){system("cls");cout<<"Ви ввели вiдємне ID"<<endl;k=1;w=1;}
if(s0.id>32767){system("cls");cout<<"Ви вийшли за межi можливих ID"<<endl;k=1;w=1;}
if(k!=1&&w!=1)
Insert();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 6: cout<<"Введiть ID елемента для видалення"<<endl;
cin>>s0.id;
Deleting();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 7: Rename();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a1;
break;
case 0: goto a0;
break;
default:
{
cout<<"Такого варiанту не iснує"<<endl;
goto a1;
}
}
a2_1:
cout<<"Введення файлу шляхом створення файлу групової обробки повiдомлень"<<endl;
cout<<"Виберiть варiант дiї:"<<endl;
cout<<"1-Створення файлу повiдомлення"<<endl;
cout<<"2-Друк файлу повiдомлення"<<endl;
cout<<"3-Пошук за вказаним ключем у файлi повiдомлення"<<endl;
cout<<"4-Вставлення запису у файл повiдомлення"<<endl;
cout<<"5-Видалення запису у файл повiдомлення"<<endl;
cout<<"6-Модифiкацiя запису у файлi повiдомлення"<<endl;
cout<<"0-Внесення змiн у файл БД i вихiд в головне меню програми"<<endl;
cin>>b;
system("cls");
switch(b)
{
case 1: Create_Pov();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 2: Print_Pov();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 3: Reading_Pov();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 4:
cout<<"Введiть елементи полiв БД:"<<endl;
cout<<"ID:";
cin>>s0.id;
cout<<"Виробник:";
cin>>s0.virob;
cout<<"Модель:";
cin>>s0.mod;
cout<<"Рiк випуску:";
cin>>s0.rik;
cout<<"Max швидiксть:";
cin>>s0.max;
cout<<"Шини:";
cin>>s0.shin;
cout<<"Команда:";
cin>>s0.kom;
cout<<"Кiнськi сили:";
cin>>s0.ks;
cout<<"Об'єм двигуна:";
cin>>s0.obem;
cout<<"Шасi:";
cin>>s0.shasi;
cout<<endl;
k=0;
if(s0.id==0){system("cls");cout<<"Ви ввели ID=0"<<endl;k=1;}
if(s0.id<0){system("cls");cout<<"Ви ввели вiдємне ID"<<endl;k=1;}
if(s0.id>=32767){system("cls");cout<<"Ви вийшли за межi можливих ID"<<endl;k=1;}
if(k!=1)
Insert_Pov(4);
system("cls");
cout<<"Операцiю виконано"<<endl;
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 5: cout<<"Введiть значення елемента для видалення"<<endl;
cout<<"ID:";
cin>>s0.id;
cout<<"Виробник:";
cin>>s0.virob;
cout<<"Модель:";
cin>>s0.mod;
cout<<"Рiк випуску:";
cin>>s0.rik;
cout<<"Max швидiксть:";
cin>>s0.max;
cout<<"Шини:";
cin>>s0.shin;
cout<<"Команда:";
cin>>s0.kom;
cout<<"Кiнськi сили:";
cin>>s0.ks;
cout<<"Об'єм двигуна:";
cin>>s0.obem;
cout<<"Шасi:";
cin>>s0.shasi;
cout<<endl;
Insert_Pov(5);
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 6: cout<<"Введiть ID елемента для модифiкацiї"<<endl;
cin>>s0.id;
cout<<"Введiть новi елементи поля БД:"<<endl;
cout<<"Виробник:";
cin>>s0.virob;
cout<<"Модель:";
cin>>s0.mod;
cout<<"Рiк випуску:";
cin>>s0.rik;
cout<<"Max швидiксть:";
cin>>s0.max;
cout<<"Шини:";
cin>>s0.shin;
cout<<"Команда:";
cin>>s0.kom;
cout<<"Кiнськi сили:";
cin>>s0.ks;
cout<<"Об'єм двигуна:";
cin>>s0.obem;
cout<<"Шасi:";
cin>>s0.shasi;
cout<<endl;
Insert_Pov(6);
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a2_1;
break;
case 0: End_Pov();
cout<<"Натиснiть будь-яку клавiшу...";
getch();
system("cls");
goto a0;
break;
default:
{
cout<<"Такого варiанту не iснує"<<endl;
goto a1;
}
}
a3:
cout<<"Програму завершено";
}
//Функція для створення нового файлу БД або продовження попереднього
void Create()
{ system("cls");
cout<<"Введiть адресу створення файлу БД:"<<endl;
cin>>str;
name=str;
if((f=fopen(name, "r")) != NULL)
{
cout<<"Файл вже створено"<<endl;
a4: cout<<"Виберiть варiант дiї:"<<endl;
cout<<"1-Створити нову БД"<<endl;
cout<<"2-Продовжити роботу з поточною БД"<<endl;
cin>>q;
system("cls");
switch(q){
case 1:
f=fopen(name, "w");
cout<<"Файл створено"<<endl;
break;
case 2:
f=fopen(name, "a+");
cout<<"Файл продовжено"<<endl;
break;
default:{
cout<<"Такого варiанту не iснує"<<endl;
goto a4;}
}
}
else
{
f=fopen(name, "w");
cout<<"Файл створено"<<endl;
}
fclose(f);
}
//Функція вставки елемента в БД із сортуванням
void Insert()
{
int vv=0;
if((f=fopen(name, "r")) == NULL)
cout<<"БД не iснує"<<endl;
else
{
f=fopen(name, "a+");
j=0;k=0;w=0;
//Пошук кількості рядків у файлі БД
while(!feof(f))
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(s.id==s0.id){ vv=1;goto vvv;}
w++;
}
//Перевірка чи файл БД не є пустим
long size;
fseek(f, 0, SEEK_END);
size = ftell(f);
if (size==0)
fprintf(f,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi);
else {
f=fopen(name, "r");
g=fopen("D:\\test.txt", "a+");
for(l=0;l<w-1;l++)//Прхід по циклу і запис даних в тимчасовий файл
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(j==0)
{
if(s.id<s0.id)
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
else
{
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi);
j=1;k=1;
}
}
if(k==1)
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
if((j==0)&&((l+1)==(w-1)))
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi);
}
}
fclose(g);
fclose(f);
if(size!=0)
Insert_n();//Виклик функції передачі даних з тимчасового файлу в основний файл БД
system("cls");
vvv:if(vv==0)
cout<<"Операцiю виконано"<<endl;else
cout<<"Елемент з таким ID вже є в БД!!!"<<endl;
}
}
//Функція для виводу даних з файлу БД на екран
void Print()
{
cout<<"ID Виробник Модель Рiк Max шв. Шини Команда Кн. сили Об'єм дв. Шасi"<<endl;
f=fopen(name, "r");
w=0;
while(!feof(f))
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
}
fclose(f);
f=fopen(name, "r");
for(k=0;k<w-1;k++)
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
printf("%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
}
fclose(f);
}
//Функція для знаходження і читаня даних за введеним ключем по файлу БД
void Reading()
{
f=fopen(name, "r");
q=0;w=0;
while(!feof(f))
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
}
fclose(f);
long size;
fseek(t, 0, SEEK_END);
size = ftell(t);
if (size==0){ cout<<"Файл пустий"<<endl;goto e4;}
a6: cout<<"Введiть ID елементa:"<<endl;
cin>>w;
cout<<"ID Виробник Модель Рiк Max шв. Шини Команда Кн. сили Об'єм дв. Шасi"<<endl;
f=fopen(name, "r");
for(k=0;k<w-1;k++)
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(w==s.id){
printf("%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
q=1;}
}
if(q!=1)
{
system("cls");
cout<<"Такого варiанту не iснує"<<endl;
goto a6;
}
fclose(f);
cout<<"Операцiю виконано"<<endl;
e4:fclose(f);
}
//Функція для видалення вказаного ключа з БД
void Deleting()
{
f=fopen(name, "r");
w=0;
while(!feof(f))
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
}
fclose(f);
j=0;
g=fopen("D:\\test.txt", "a+");
f=fopen(name, "r");
for(k=0;k<w-1;k++)
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(s.id!=s0.id)
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
else j=1;
}
fclose(f);
fclose(g);
Insert_n();
if(j!=1)
cout<<"Операцiю виконано"<<endl;
else
cout<<"Такого елемента не має"<<endl;
}
//Функція для модифікації елементів БД
void Rename()
{
cout<<"Введiть ID елемента для модифiкацiї"<<endl;
cin>>s0.id;
f=fopen(name, "r");
w=0;j=0;
while(!feof(f))
{
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
} fclose(f);
f=fopen(name, "r");
g=fopen("D:\\test.txt", "a+");
for(k=0;k<w-1;k++){
fscanf(f,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(s.id==s0.id){
cout<<"Введiть новi елементи поля БД:"<<endl;
cout<<"ID:";
cin>>s.id;
cout<<"Виробник:";
cin>>s.virob;
cout<<"Модель:";
cin>>s.mod;
cout<<"Рiк випуску:";
cin>>s.rik;
cout<<"Max швидiксть:";
cin>>s.max;
cout<<"Шини:";
cin>>s.shin;
cout<<"Команда:";
cin>>s.kom;
cout<<"Кiнськi сили:";
cin>>s.ks;
cout<<"Об'єм двигуна:";
cin>>s.obem;
cout<<"Шасi:";
cin>>s.shasi;
cout<<endl;
j=1;
}
fprintf(g,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
}
fclose(f);
fclose(g);
system("cls");
if(j!=1){
cout<<"Такого елемента не має"<<endl; remove("D:\\test.txt");}
else {cout<<"Операцiю виконано"<<endl; Insert_n();}
}
//Функція для запису даних з тимчасового в основний файл БД
void Insert_n()
{
g=fopen("D:\\test.txt", "r");
w=0;
while(!feof(g))
{
fscanf(g,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
}
fclose(g);
g=fopen("D:\\test.txt", "r");
f=fopen(name, "w");
fclose(f);
f=fopen(name, "a+");
for(l=0;l<w-1;l++)
{
fscanf(g,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
fprintf(f,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
}
fclose(f);
fclose(g);
remove("D:\\test.txt");
}
//Функція для створення файлу групової обробки
void Create_Pov()
{
t=fopen("D:\\group.txt","w");
fclose(t);
cout<<"Файл створено"<<endl;
}
//Функція вставки даних в файл групової обробки
void Insert_Pov(int e)
{
t=fopen("D:\\group.txt", "r");
j=0;w=0;
s0.var=e;
while(!feof(t))
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
w++;
}
fclose(t);
t=fopen("D:\\group.txt", "a+");
long size;
fseek(t, 0, SEEK_END);
size = ftell(t);
if (size==0)
fprintf(t,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);
else {
t=fopen("D:\\group.txt", "r");
t2=fopen("D:\\group2.txt", "a+");
s0.var=e;
for(l=0;l<w-1;l++)
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
//Перевірка пріорітетів операцій і зміни файлу групової обробки
if(s.id==s0.id)
{
switch(s0.var){
case 4:fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);
break;
case 5:s0.var=0;
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);j=1;k=1;
break;
case 6:s0.var=4;
if(s.var==0)fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
else fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);
j=1;k=1;
break;
}
}
if(j==0)
{
if(s.id<s0.id)
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
else
{
s0.var=e;
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
j=1;k=1;
}
}
else
if(k!=1)
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);k=0;
if((j==0)&&((l+1)==(w-1)))
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi,s0.var);
}
}
fclose(t);
fclose(t2);
if(size!=0)
Insert_n2();//Виклик функції передачі даних з тимчасового файлу в основний файл групової обробки
system("cls");
cout<<"Операцiю виконано"<<endl;
}
//функції передачі даних з тимчасового файлу в основний файл групової обробки
void Insert_n2()
{
t2=fopen("D:\\group2.txt", "r");
w=0;
while(!feof(t2))
{
fscanf(t2,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
w++;
}
fclose(t2);
t2=fopen("D:\\group2.txt", "r");
t=fopen("D:\\group.txt", "w");
fclose(t);
t=fopen("D:\\group.txt", "a+");
for(l=0;l<w-1;l++)
{
fscanf(t2,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
fprintf(t,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%-1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
}
fclose(t);
fclose(t2);
remove("D:\\group2.txt");
}
//Функція для виводу файлу групової обробки на екран
void Print_Pov()
{
cout<<"ID Виробник Модель Рiк Max шв. Шини Команда Кн. сили Об'єм дв. Шасi Вар.дiї\n";
t=fopen("D:\\group.txt", "r");
w=0;
while(!feof(t))
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
w++;
}
fclose(t);
t=fopen("D:\\group.txt", "r");
if(w!=0)
for(k=0;k<w-1;k++)
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
printf("%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
}
else cout<<"Файл пустий"<<endl;
fclose(t);
}
//Функція для зміни даних в БД з використанням файлу групової обробки
void Rename_Pov()
{
t=fopen(name, "r");
w=0;j=0;
while(!feof(t))
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
w++;
} fclose(t);
t=fopen(name, "r");
t2=fopen("D:\\test.txt", "a+");
for(k=0;k<w-1;k++){
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi);
if(s.id==s0.id){
j=1;
fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s0.id,s0.virob,s0.mod,s0.rik,s0.max,s0.shin,s0.kom,s0.ks,s0.obem,s0.shasi);}
else fprintf(t2,"%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi);
}
fclose(t);
fclose(t2);
system("cls");
if(j!=1){
cout<<"Такого елемента не має"<<endl; remove("D:\\test.txt");}
else {cout<<"Операцiю виконано"<<endl; Insert_n();}
j=0;
}
//Функція завершення файлу групової обробки і занесення змін в БД
void End_Pov()
{
t=fopen("D:\\group.txt", "r");
v=0;
while(!feof(t))
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
v++;
} fclose(t);
t=fopen("D:\\group.txt", "r");
for(z=0;z<v-1;z++){
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s0.id,&s0.virob,&s0.mod,&s0.rik,&s0.max,&s0.shin,&s0.kom,&s0.ks,&s0.obem,&s0.shasi,&s0.var);
switch(s0.var){
case 4: Insert();
break;
case 5: Deleting();
break;
case 6: Rename_Pov();
break;
default:{}
}
}
fclose(t);
remove("D:\\group.txt");
}
//Функція пошуку даних за ключем по файлі групової обробки
void Reading_Pov()
{
t=fopen("D:\\group.txt", "r");
q=0;w=0;
while(!feof(t))
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
w++;
}
fclose(t);
a6:
long size;
fseek(t, 0, SEEK_END);
size = ftell(t);
if (size==0){ cout<<"Файл пустий"<<endl;goto e3;}
cout<<"Введiть ID елементa:"<<endl;
cin>>w;
cout<<"ID Виробник Модель Рiк Max шв. Шини Команда Кн. сили Об'єм дв. Шасi Варiант дiї"<<endl;
t=fopen("D:\\group.txt", "r");
for(k=0;k<w-1;k++)
{
fscanf(t,"%6d%10s%10s%10d%10d%10s%10s%10d%10d%10s%1d",&s.id,&s.virob,&s.mod,&s.rik,&s.max,&s.shin,&s.kom,&s.ks,&s.obem,&s.shasi,&s.var);
if(w==s.id){
printf("%-6d%-10s%-10s%-10d%-10d%-10s%-10s%-10d%-10d%-10s%1d\n",s.id,s.virob,s.mod,s.rik,s.max,s.shin,s.kom,s.ks,s.obem,s.shasi,s.var);
q=1;}
}
if(q!=1)
{
system("cls");
cout<<"Такого варiанту не iснує"<<endl;
goto a6;
}
fclose(t);
cout<<"Операцiю виконано"<<endl;
e3:fclose(t);
}
Результати виконання програми
Друк бази даних
Пошук запису за ключем
Вставлення запису в базу даних
Видалення запису з бази даних
Модифікація запису в базі даних
Висновки
На цій лабораторній роботі я розглянув органiзацiю i ведення файлiв послiдовного доступу; набув практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу. Під час розробки алгоритму я передбачив більшість варіантів подій. А також розробив захист від вводу неправильних даних. Під час реалізації програми виникла складність з файлом групової обробки через те що потрібно було передбачити пріорітет операцій. Я вирішив це питання за допомогою заміни операцій з нищим пріорітетом на операції із вищим. Також були і інші складності, але і їх я зміг вирішити. В наслідок чого я розробив власну базу даних на мові високого рівня С++.
