|
Общее условие задачи:
- Представьте заданную таблицу в виде файла БД, выберите тип поля и его разрядность.
- Напишите программы создания файла добавления в него записей, удаления записей, исправления записей, вывода содержимого файла на экран в виде таблицы и просмотра этой таблицы страницами, двигаясь вверх и вниз по записям, по страницам, сразу перемещаясь к началу или концу файла.
- Напишите программу, которая сортировала бы файл по любому указанному полю.
- Напишите программу, которая отыскивала бы и выводила для просмотра записи файла найденные по заданному логическому выражению, содержащему поля файла, числа, операции.
- Напишите программу, которая бы объединяла все выше описанные программы с помощью комбинированного меню в единую систему.
Вариант 1. Автор решения: Фёдорова Т., группа 121МИ, 2008 год.
1. Список студентов
1. ФИО
1. Фамилия
2. Имя
3. Отчество
2. Пол
3. Возраст
4. Курс
5. Специальность
Решение данной задачи разделим на два основных блока. Первый написание программы, которая создает файл базы данных и заносит данные. Второй написание программы, которая работает с готовым файлом дынных.
Работу организуем с бинарными файлами. Первая программа будет запрашивать у пользователя имя файла, если такой файл уже существует то она выведет на экран его содержимое, в противном случае создаст новый и запросит у пользователя количество записей, после чего перейдет к воду данных.
Вторая программа выполняет следующие задачи:
- добавление записи;
- удаление записи;
- редактирование записи;
- поиск записи по полю и заданному значению;
- сортировка файла по выбранному пользователем полю (Выполняет сортировку выбором записей в файле.
Файл открывается для чтения и записи. Запрашивается у пользователя номер поля, по которому предполагается
ввести сортировку. В алгоритме сортировки при сравнении элементов сравниваем элементы в зависимости от
выбранного поля сортировки. После выполнения сортировки функции передается 1, если сортировка выполнена
удачно и 0 в противном случае. В конце работы закрываем файл);
- просмотр отдельных записей;
|
НАЧАЛО (Создание файла с данными):
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
struct fio{char fam[30]; char imya[30]; char otch[30];};
struct stud {struct fio fio1; char pol; int vozrast; int kurs; char spez[100];};
void main ()
{
stud stud1;
int n,i;
FILE *f;
char s[20];
cout<<"imya faila = ";
cin.getline(s,20);
f=fopen(s,"wb");
cout <<"kol-vo studentov= ";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"familiya "<<i<<"-go studenta = ";
cin>>stud1.fio1.fam;
cout<<"imya "<<i<<"-go studenta = ";
cin>>stud1.fio1.imya;
cout<<"otchestvo "<<i<<"-go studenta = ";
cin>>stud1.fio1.otch;
cout<<"pol "<<i<<"-go studenta = ";
cin>>stud1.pol;
while ((stud1.pol!='m')&&(stud1.pol!='w'))
{
cout<<"Pol vveden neverno"<<endl;
cout<<"pol studenta =";
cin>>stud1.pol;
}
cout<<"vozrast "<<i<<"-go studenta = ";
cin>>stud1.vozrast;
cout<<"kurs "<<i<<"-go studenta = ";
cin>>stud1.kurs;
cout<<"spez "<<i<<"-go studenta = ";
cin>>stud1.spez;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(f);
}
ПРОДОЛЖЕНИЕ (Работа с файлом данных):
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
struct fio{char fam[30]; char imya[30]; char otch[30];};
struct stud {struct fio fio1; char pol; int vozrast; int kurs; char spez[100];};
stud reading(FILE *f, int i);
void record(FILE *f, int i, stud stud1);
void main()
{
FILE *f,*fd;
int n,i,ud, ispr, viv, sort, poisk, punkt, zikl;
int udn, isprn, vivn, sortn, poiskn;
stud stud1;
char s[20],s1[20],s2[20],s3[1];
cout<<endl;
cout<<"imya faila = ";
cin.getline(s,20);
cout<<"MENU:"<<endl;
cout<<"Dobavit zapis--------------(1)"<<endl;
cout<<"Udalit zapis--------------(2)"<<endl;
cout<<"Ispravit zapis--------------(3)"<<endl;
cout<<"Vivod soderzhimogo na ekran-(4)"<<endl;
cout<<"Sortirovat------------------(5)"<<endl;
cout<<"Poisk-----------------------(6)"<<endl;
cout<<"Otmena----------------------(7)"<<endl;
cout<<endl;
cout<<"Viberite punkt menu ";
cin>>punkt;
cout<<endl;
n=0;
f=fopen(s,"rb");
while (fread(&stud1,sizeof(stud),1,f))
{
n++;
}
fclose(f);
while (punkt!=7)
{
switch (punkt)
{
case 1:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
cout<<"familiya studenta =";
cin>>stud1.fio1.fam;
cout<<"imya studenta =";
cin>>stud1.fio1.imya;
cout<<"otchestvo studenta =";
cin>>stud1.fio1.otch;
cout<<"pol studenta =";
cin>>stud1.pol;
while ((stud1.pol!='m')&&(stud1.pol!='w'))
{
cout<<"Pol vveden neverno"<<endl;
cout<<"pol studenta =";
cin>>stud1.pol;
}
cout<<"vozrast studenta =";
cin>>stud1.vozrast;
cout<<"kurs studenta =";
cin>>stud1.kurs;
cout<<"spez studenta =";
cin>>stud1.spez;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,f);
fclose(fd);
fclose(f);
}; break;
case 2:
{
cout<<"Vvedite nomer zapisi dlya udaleniya ";
cin>>udn;
cout<<endl;
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<udn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 3:
{
cout<<"Vvedite nomer zapisi dlya ispravleniya ";
cin>>isprn;
cout<<endl;
int pol;
cout<<endl<<"Vvedite nomer polya dlya redaktirovaniya"<<endl;
cout<<"1 - Familiya"<<endl;
cout<<"2 - Imya"<<endl;
cout<<"3 - Otchestvo"<<endl;
cout<<"4 - Pol"<<endl;
cout<<"5 - Vozrast"<<endl;
cout<<"6 - Kurs"<<endl;
cout<<"7 - Spezialnost"<<endl;
cin>>pol;
switch (pol)
{
case 1:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"familiya studenta =";
cin>>stud1.fio1.fam;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 2:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"imya studenta =";
cin>>stud1.fio1.imya;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 3:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"otchestvo studenta =";
cin>>stud1.fio1.otch;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 4:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"pol studenta =";
cin>>stud1.pol;
while ((stud1.pol!='m')&&(stud1.pol!='w'))
{
cout<<"Pol vveden neverno"<<endl;
cout<<"pol studenta =";
cin>>stud1.pol;
}
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 5:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"vozrast studenta =";
cin>>stud1.vozrast;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 6:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"kurs studenta =";
cin>>stud1.kurs;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
case 7:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud1,sizeof(stud),1,f))&&(i<isprn))
{
fwrite(&stud1, sizeof(stud),1,fd);
i++;
}
cout<<"spez studenta =";
cin>>stud1.spez;
cout<<endl;
fwrite(&stud1, sizeof(stud),1,fd);
while (fread(&stud1,sizeof(stud),1,f))
{
fwrite(&stud1, sizeof(stud),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&stud1,sizeof(stud),1,fd))
{
fwrite(&stud1, sizeof(stud),1,f);
}
fclose(fd);
fclose(f);
};break;
default:cout<<"Vi neverno vveli znachenie"<<endl;
};
}; break;
case 4:
{
i=1;
f=fopen(s,"rb");
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
i++;
}
fclose(f);
cout<<endl;
}; break;
case 5:
{
stud stud1;
int pol;
n=0,
f=fopen(s,"r+b");
fseek(f,0,SEEK_SET);
while (fread(&stud1,sizeof(stud),1,f))
{
n++;
}
cout<<endl<<"Vvedite nomer polyz po kotoromu predpolagaetsya sortirovka"<<endl;
cout<<"1 - Familiya"<<endl;
cout<<"2 - Imya"<<endl;
cout<<"3 - Otchestvo"<<endl;
cout<<"4 - Pol"<<endl;
cout<<"5 - Vozrast"<<endl;
cout<<"6 - Kurs"<<endl;
cout<<"7 - Spezialnost"<<endl;
cin>>pol;
int i=0,j=0,k=0,m=0;
stud B,V;
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1:
{
while (strcmp(B.fio1.fam,reading(f,j).fio1.fam)>0)
j++;
break;
};
case 2: {
while (strcmp(B.fio1.imya,reading(f,j).fio1.imya)>0)
j++;
break;
};
case 3: {
while (strcmp(B.fio1.otch,reading(f,j).fio1.otch)>0)
j++;
break;
};
case 4: {
while (B.pol>reading(f,j).pol)
j++;
break;
};
case 5: {
while (B.vozrast>reading(f,j).vozrast)
j++;
break;
};
case 6: {
while (B.kurs>reading(f,j).kurs)
j++;
break;
};
case 7: {
while (strcmp(B.spez,reading(f,j).spez)>0)
j++;
break;
};
default:{cout<<"ЌҐўҐа¬® § ¤ ¬® Ї®«Ґ б®авЁа®ўЄЁ"<<endl;
};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
fclose(f);
}; break;
case 6:
{
cout<<"POisk po: polu -1, logicheskomu virazheniu-2"<<endl;
int qwer;
cin>>qwer;
switch(qwer)
{
case 1:
{
////////////////////////////////////////////////////
i=0;
cout<<"Poisk osushestvit po polu:"<<endl;
cout<<"familiya-(1), imya-(2), otchestvo-(3), pol-(4), vozrast-(5), kurs-(6), spez-(7)"<<endl;
cin>>poisk;
switch (poisk)
{
case 1:
{
cout<<"Vvedite familiyu: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (strcmp(s1,stud1.fio1.fam)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
cout<<endl;
}; break;
case 2:
{
cout<<"Vvedite imya: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (strcmp(s1,stud1.fio1.imya)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
case 3:
{
cout<<"Vvedite otchestvo: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (strcmp(s1,stud1.fio1.otch)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
case 4:
{
cout<<"Vvedite pol: ";
char s4;
cin>>s4;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (s4==stud1.pol)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
case 5:
{
cout<<"Vvedite vozrast: ";
int w;
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (w==stud1.vozrast)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
case 6:
{
cout<<"Vvedite kurs: ";
int w;
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (w==stud1.kurs)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
case 7:
{
cout<<"Vvedite spez: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (strcmp(s1,stud1.spez)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
}; break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
};
};break;
case 2:
{
cout<<"Viberite pole1: ";
cout<<"vozrast-(5), kurs-(6)"<<endl;
int poisk2;
cin>>poisk2;
switch(poisk2)
{
case 5:
{
cout<<"Viberite znak operacii (<, > or =): ";
char znak;
cin>>znak;
switch (znak)
{
case '<':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, vozrast kotorih < "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.vozrast<chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
case '>':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, vozrast kotorih > "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.vozrast>chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
case '=':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, vozrast kotorih = "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.vozrast==chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
}
}; break;
case 6:
{
cout<<"Viberite znak operacii (<, > or =): ";
char znak;
cin>>znak;
switch (znak)
{
case '<':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, kurs kotorih < "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.kurs<chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
case '>':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, kurs kotorih > "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.kurs>chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
case '=':
{
cout<<endl<<"Vvedite chislo: ";
int chislo;
cin>>chislo;
cout<<"Studenti, kurs kotorih = "<<chislo<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
cout<<"| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
while (fread(&stud1,sizeof(stud),1,f))
{
i++;
if (stud1.kurs==chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<stud1.fio1.fam;
cout<<"|";
cout.width(8);cout<<stud1.fio1.imya;
cout<<"|";
cout.width(13);cout<<stud1.fio1.otch;
cout<<"|";
cout.width(7);cout<<stud1.pol;
cout<<"|";
cout.width(11);cout<<stud1.vozrast;
cout<<"|";
cout.width(8);cout<<stud1.kurs;
cout<<"|";
cout.width(8);cout<<stud1.spez;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+--------+--------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih studentov net!"<<endl;
}
/////////
}; break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
}
};break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
};
};break;
default:{cout<<"Vi vveli nevernoe znachenie"<<endl;};
};
///////////////////////////////////////////////////////
}; break;
default:cout<<"Vi nechego ne vibrali. Prilozhenie bydet zakrito"<<endl;
}
cout<<"dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)"<<endl;
cout<<"Viberite punkt menu ";
cin>>punkt;
cout<<endl;
}
fclose(f);
}
///////////////////////////////////////////////////////////////////////////
stud reading(FILE *f, int i)
{
stud vsp;
fseek(f,i*sizeof(stud),SEEK_SET);
fread(&vsp,sizeof(stud),1,f);
return vsp;
};
void record(FILE *f, int i, stud stud1)
{
fseek(f,i*sizeof(stud),SEEK_SET);
fwrite(&stud1,sizeof(stud),1,f);
};
|
imya faila = 1
MENU:
Dobavit zapis--------------(1)
Udalit zapis--------------(2)
Ispravit zapis--------------(3)
Vivod soderzhimogo na ekran-(4)
Sortirovat------------------(5)
Poisk-----------------------(6)
Otmena----------------------(7)
Viberite punkt menu 4
+-------+-------+--------+--------+-------+-----------+--------+--------+
| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 1| asdf| asdf| asdf| a| 56| 3| aasdf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 2| zxcv| zxcv| zxcv| z| 56| 6| zxf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 3| vbnm| vbnm| vbnm| v| 7| 7| vbn|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 4| tyui| tyui| tyui| t| 8| 8| tyui|
+-------+-------+--------+--------+-------+-----------+--------+--------+
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 1
familiya studenta =ghjk
imya studenta =ghjk
otchestvo studenta =gh
pol studenta =j
vozrast studenta =23
kurs studenta =4
spez studenta =jkl
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 4
+-------+-------+--------+--------+-------+-----------+--------+--------+
| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 1| asdf| asdf| asdf| a| 56| 3| aasdf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 2| zxcv| zxcv| zxcv| z| 56| 6| zxf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 3| vbnm| vbnm| vbnm| v| 7| 7| vbn|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 4| tyui| tyui| tyui| t| 8| 8| tyui|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 5| ghjk| ghjk| gh| j| 23| 4| jkl|
+-------+-------+--------+--------+-------+-----------+--------+--------+
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 2
Vvedite nomer zapisi dlya udaleniya 5
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 4
+-------+-------+--------+--------+-------+-----------+--------+--------+
|N p/p | fam | imya | otch | pol | vozrast | kurs | spez |
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 1| asdf| asdf| asdf| a| 56| 3| aasdf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 2| zxcv| zxcv| zxcv| z| 56| 6| zxf|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 3| vbnm| vbnm| vbnm| v| 7| 7| vbn|
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 4| tyui| tyui| tyui| t| 8| 8| tyui|
+-------+-------+--------+--------+-------+-----------+--------+--------+
Viberite punkt menu 3
Vvedite nomer zapisi dlya ispravleniya 2
Vvedite icpravlennii dannii
familiya studenta =uio
imya studenta =uiop
otchestvo studenta =uk
pol studenta =z
vozrast studenta =24
kurs studenta =2
spez studenta =ert
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 5
Vvedite nomer polyz po kotoromu predpolagaetsya sortirovka
1 - Familiya
2 - Imya
3 - Otchestvo
4 - Pol
5 - Vozrast
6 - Kurs
7 - Spezialnost
6
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 6
Poisk osushestvit po polu:
familiya-(1), imya-(2), otchestvo-(3), pol-(4), vozrast-(5), kurs-(6), spez-(7)
3
Vvedite otchestvo: uk
+-------+-------+--------+--------+-------+-----------+--------+--------+
| N p/p | fam | imya | otch | pol | vozrast | kurs | spez |
+-------+-------+--------+--------+-------+-----------+--------+--------+
| 1| uio| uiop| uk| z| 24| 2| ert|
+-------+-------+--------+--------+-------+-----------+--------+--------+
dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)
Viberite punkt menu 7
|
Вариант 2. Автор решения: Федотова Е., группа 121МИ, 2008 год.
1. Сведения о потреблении
1. фамилия потребителя
2. номер потребителя
3. прежнее показание расходомера
1. литера
2. трехзначное число
4. новое показание расходомера
1. литера
2. трехзначное число
Файл создается с помощью структур:
struct pokaz
{char litera;
int chislo;};
struct new_pokaz
{char litera;
int chislo;};
struct potreb
{char fam[20];
int nomer;
struct pokaz p;
struct new_pokaz n_p;};
Задается количество потребителей и заполняется файл.
Добавление происходит в конец файла и файл открывается на дозапись (a+b).
Редактирование осуществляется постановкой указателя файла на позицию изменяемой записи и записывается новая запись.
Удаление осуществляется при использовании дополнительного файла.
Сортировка методом вставки происходит с помощью сравнения строк и перемещения меньшей строки в начало, а большей в конец.
Поиск записи происходит сравнением указанной строки с записью и сравнением их значений.
|
Создание файла
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include <fcntl.h>
struct pokaz
{char litera;
int chislo;};
struct new_pokaz
{char litera;
int chislo;};
struct potreb
{char fam[20];
int nomer;
struct pokaz p;
struct new_pokaz n_p;};
void main()
{
FILE *f;int n,i;potreb a;
//cout<<endl;
//cout<<"imi file";cout<<endl;
//char s[20];
//cin.getline(s,20);
f=fopen("file","wb");
cout<<"Vvedite kol-vo potrebitelei";cout<<endl;
cin>>n;
for ( i=1;i<=n;i++)
{
cout<<"Familia "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.fam;
cout<<"Nomer "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.nomer;
cout<<"Litera pokazanii "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.p.litera;
cout<<"Chislo pokazanii "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.p.chislo;
cout<<"Litera novix pokazanii "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.n_p.litera;
cout<<"Chislo novix pokazanii "<<i<<" -go potrebiteli";cout<<endl;
cin>>a.n_p.chislo;
fwrite(&a,sizeof(potreb),1,f);
}
fclose(f);
f=fopen("file","rb");
cout.width(9);cout<<"Familia";
cout<<"|";
cout.width(8);cout<<"Nomer";
cout<<"|";
cout.width(9);cout<<"Lit pokaz";
cout<<"|";
cout.width(10);cout<<"Ch pokaz";
cout<<"|";
cout.width(12);cout<<"Lit nov pokaz";
cout<<"|";
cout.width(10);cout<<"Ch nov pokaz";
cout<<endl;
while (fread(&a,sizeof(potreb),1,f))
{
cout.width(9);cout<<a.fam;
cout.width(8);cout<<a.nomer;
cout.width(9);cout<<a.p.litera;
cout.width(10);cout<<a.p.chislo;
cout.width(12);cout<<a.n_p.litera;
cout.width(10);cout<<a.n_p.chislo;
cout<<endl;
}
fclose(f);
getch();
}
Работа с файлом
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys\stat.h>
#include <io.h>
struct pokaz
{char litera;
int chislo;};
struct new_pokaz
{char litera;
int chislo;};
struct potreb
{char fam[20];
int nomer;
struct pokaz p;
struct new_pokaz n_p;};
int col_rec(FILE *file);
potreb reading(FILE *file, int i);
void record(FILE *file, int i, potreb dat);
void print (potreb vsp);
void vivod(FILE *file);
void main()
{
FILE *f,*f1;int n,i,v,nomer,j,pol,k,m,c;potreb a,b,B,V;char s[20],s1[20],l;
v=1;
n=col_rec(f);
while(v!=0)
{
cout<<endl;
cout<<"1-dobavlenie zapisi";cout<<endl;
cout<<"2-udalenie zapisi"; cout<<endl;
cout<<"3-redaktirovanie zapisi";cout<<endl;
cout<<"4-sortirovka";cout<<endl;
cout<<"5-poisk";cout<<endl;
cout<<"6-vivod";cout<<endl;
cout<<"0-vihod";cout<<endl;
cin>>v;
if (v==1)
{ //dobavlenie
f=fopen("file", "a+b");
fseek(f,n*sizeof(potreb),SEEK_SET);
cout<<"Familia potrebiteli";cout<<endl;
cin>>a.fam;
cout<<"Nomer potrebiteli";cout<<endl;
cin>>a.nomer;
cout<<"Litera pokazanii potrebiteli";cout<<endl;
cin>>a.p.litera;
cout<<"Chislo pokazanii potrebiteli";cout<<endl;
cin>>a.p.chislo;
cout<<"Litera novix pokazanii potrebiteli";cout<<endl;
cin>>a.n_p.litera;
cout<<"Chislo novix pokazanii potrebiteli";cout<<endl;
cin>>a.n_p.chislo;
fwrite(&a,sizeof(potreb),1,f);
n++;
vivod(f);
}
if (v==2)
{ //udalenie
f=fopen("file","r+b");
f1=fopen("file1.tmp","wb");
cout<<"vvedite nomer udaliemoi zapisi";cout<<endl;
cin>>nomer;
/*i=0;
j=0;
for (i=nomer;i<n;i++)
{
j=i+1;
fseek(f,j*sizeof(potreb),SEEK_SET);
fread(&a,sizeof(potreb),1,f);
fseek(f,i*sizeof(potreb),SEEK_SET);
fwrite(&a,sizeof(potreb),1,f);
};*/
i=0;
while ((fread(&a,sizeof(potreb),1,f))&&(i<nomer))
{
fwrite(&a,sizeof(potreb),1,f1);
i++;
}
while(fread(&a,sizeof(potreb),1,f))
{
fwrite(&a,sizeof(potreb),1,f1);
}
fclose(f);
fclose(f1);
f=fopen("file","wb");
f1=fopen("file1.tmp","rb");
while(fread(&a,sizeof(potreb),1,f1))
{
fwrite(&a,sizeof(potreb),1,f);
}
fclose(f);
fclose(f1);
f=fopen("file","rb");
vivod(f);
};
if(v==3)
{ //redaktirovanie
f=fopen("file","r+b");
cout<<"vvedite nomer zapisi";cout<<endl;
cin>>nomer;
fseek(f,nomer*sizeof(potreb),SEEK_SET);
fread(&a,sizeof(potreb),1,f);
cout<<"Familia potrebiteli";cout<<endl;
cin>>b.fam;
cout<<"Nomer potrebiteli";cout<<endl;
cin>>b.nomer;
cout<<"Litera pokazanii potrebiteli";cout<<endl;
cin>>b.p.litera;
cout<<"Chislo pokazanii potrebiteli";cout<<endl;
cin>>b.p.chislo;
cout<<"Litera novix pokazanii potrebiteli";cout<<endl;
cin>>b.n_p.litera;
cout<<"Chislo novix pokazanii potrebiteli";cout<<endl;
cin>>b.n_p.chislo;
fseek(f,nomer*sizeof(potreb),SEEK_SET);
fwrite(&b,sizeof(potreb),1,f);
vivod(f);
};
if (v==4)
{
i=0;
j=0;
k=0;
m=0;
f=fopen("file","r+b");
n=col_rec(f);
cout<<endl<<"Vvedite nomer poli sortirovki"<<endl;
cout<<"1 - po familii"<<endl;
cout<<"2 - po nomeru"<<endl;
cout<<"3 - po litere"<<endl;
cout<<"4 - po chislu"<<endl;
cout<<"5 - po novoi litere"<<endl;
cout<<"6 - po novomu chislu"<<endl;
cin>>pol;
//sortirovka vstavkoi
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1: {
while (strcmp(B.fam,reading(f,j).fam)>0)
j++;
break;
};
case 2: {
while (B.nomer>reading(f,j).nomer)
j++;
break;
};
case 3: {
while (B.p.litera>reading(f,j).p.litera)
j++;
break;
};
case 4: {
while (B.p.chislo>reading(f,j).p.chislo)
j++;
break;
};
case 5: {
while (B.n_p.litera>reading(f,j).n_p.litera)
j++;
break;
};
case 6: {
while (B.n_p.chislo>reading(f,j).n_p.chislo)
j++;
break;
};
default:{cout<<"Net takogo poli"<<endl;
};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
vivod(f);
};
if (v==5)
{
f=fopen("file","rb");
cout<<endl;
cout<<"vvedite nomer zapisi";cout<<endl;
cout<<"1 - po familii"<<endl;
cout<<"2 - po nomeru"<<endl;
cout<<"3 - po litere"<<endl;
cout<<"4 - po chislu"<<endl;
cout<<"5 - po novoi litere"<<endl;
cout<<"6 - po novomu chislu"<<endl;
cin>>pol;
cout<<"vvedite znachenie poiska"<<endl;
switch (pol)
{
case 1:{cin>>s1;break;};
case 2:{cin>>c;break;};
case 3:{cin>>l;break;};
case 4:{cin>>c;break;}
case 5:{cin>>l;break;}
case 6:{cin>>c;break;}
default:{cout<<"Net takogo poli"<<endl;}
};
i=0;
cout.width(9);cout<<"Familia";
cout<<"|";
cout.width(8);cout<<"Nomer";
cout<<"|";
cout.width(9);cout<<"Lit pokaz";
cout<<"|";
cout.width(10);cout<<"Ch pokaz";
cout<<"|";
cout.width(12);cout<<"Lit nov pokaz";
cout<<"|";
cout.width(10);cout<<"Ch nov pokaz";
cout<<endl;
while (fread(&a,sizeof(potreb),1,f))
{
switch (pol)
{
case 1: {
if (!strcmp(s1,a.fam))
{
print (a);
i++;
};
break;
};
case 2: {
if (c==a.nomer)
{
print (a);
i++;
};
break;
};
case 3: {
if (l==a.p.litera)
{
print (a);
i++;
};
break;
};
case 4: {
if (c==a.p.chislo)
{
print (a);
i++;
};
break;
};
case 5: {
if (l==a.n_p.litera)
{
print (a);
i++;
};
break;
};
case 6: {
if (c==a.n_p.chislo)
{
print (a);
i++;
};
break;
};
default:{
};
};
}
fclose(f);
};
if (v==6)
{
f=fopen("file","rb");
vivod(f);
};
/*if (v==7)
{
f=fopen("file","rb");
cout<<endl;
cout<<"vvedite nomer zapisi";cout<<endl;
cout<<"1 - po familii"<<endl;
cout<<"2 - po nomeru"<<endl;
cout<<"3 - po litere"<<endl;
cout<<"4 - po chislu"<<endl;
cout<<"5 - po novoi litere"<<endl;
cout<<"6 - po novomu chislu"<<endl;
cin>>pol;
cout<<"vvedite znachenie poiska"<<endl;
switch (pol)
{
case 1:{cin>>s1;break;};
case 2:{cin>>c;break;};
case 3:{cin>>l;break;};
case 4:{cin>>c;break;}
case 5:{cin>>l;break;}
case 6:{cin>>c;break;}
default:{cout<<"Net takogo poli"<<endl;}
};
cout<<"vvedite nomer zapisi";cout<<endl;
cout<<"1 - po familii"<<endl;
cout<<"2 - po nomeru"<<endl;
cout<<"3 - po litere"<<endl;
cout<<"4 - po chislu"<<endl;
cout<<"5 - po novoi litere"<<endl;
cout<<"6 - po novomu chislu"<<endl;
cin>>pol;
cout<<"vvedite znachenie poiska"<<endl;
switch (pol)
{
case 1:{cin>>s1;break;};
case 2:{cin>>c;break;};
case 3:{cin>>l;break;};
case 4:{cin>>c;break;}
case 5:{cin>>l;break;}
case 6:{cin>>c;break;}
default:{cout<<"Net takogo poli"<<endl;}
};
i=0;
cout.width(9);cout<<"Familia";
cout<<"|";
cout.width(8);cout<<"Nomer";
cout<<"|";
cout.width(9);cout<<"Lit pokaz";
cout<<"|";
cout.width(10);cout<<"Ch pokaz";
cout<<"|";
cout.width(12);cout<<"Lit nov pokaz";
cout<<"|";
cout.width(10);cout<<"Ch nov pokaz";
cout<<endl;
while (fread(&a,sizeof(potreb),1,f))
{
switch (pol)
{
case 1: {
if (!strcmp(s1,a.fam))
{
print (a);
i++;
};
break;
};
case 2: {
if (c==a.nomer)
{
print (a);
i++;
};
break;
};
case 3: {
if (l==a.p.litera)
{
print (a);
i++;
};
break;
};
case 4: {
if (c==a.p.chislo)
{
print (a);
i++;
};
break;
};
case 5: {
if (l==a.n_p.litera)
{
print (a);
i++;
};
break;
};
case 6: {
if (c==a.n_p.chislo)
{
print (a);
i++;
};
break;
};
default:{
};
};
}
fclose(f);
};*/
}
}
int col_rec(FILE *file)
{
int n=0;
potreb dat;
fseek(file,0,SEEK_SET);
while (fread(&dat,sizeof(potreb),1,file))
n++;
return n;
};
potreb reading(FILE *file, int i)
{
potreb vsp;
fseek(file,i*sizeof(potreb),SEEK_SET);
fread(&vsp,sizeof(potreb),1,file);
return vsp;
};
void record(FILE *file, int i, potreb dat)
{
fseek(file,i*sizeof(potreb),SEEK_SET);
fwrite(&dat,sizeof(potreb),1,file);
};
void print (potreb vsp)
{
cout.width(9);cout<<vsp.fam;
cout.width(8);cout<<vsp.nomer;
cout.width(9);cout<<vsp.p.litera;
cout.width(10);cout<<vsp.p.chislo;
cout.width(12);cout<<vsp.n_p.litera;
cout.width(10);cout<<vsp.n_p.chislo;
cout<<endl;
};
void vivod(FILE *file)
{ potreb a;
fseek(file,0*sizeof(potreb),SEEK_SET);
cout.width(9);cout<<"Familia";
cout<<"|";
cout.width(8);cout<<"Nomer";
cout<<"|";
cout.width(9);cout<<"Lit pokaz";
cout<<"|";
cout.width(10);cout<<"Ch pokaz";
cout<<"|";
cout.width(12);cout<<"Lit nov pokaz";
cout<<"|";
cout.width(10);cout<<"Ch nov pokaz";
cout<<endl;
while (fread(&a,sizeof(potreb),1,file))
{
cout.width(9);cout<<a.fam;
cout.width(8);cout<<a.nomer;
cout.width(9);cout<<a.p.litera;
cout.width(10);cout<<a.p.chislo;
cout.width(12);cout<<a.n_p.litera;
cout.width(10);cout<<a.n_p.chislo;
cout<<endl;
}
fclose(file);
}
|
6
Litera pokazanii 1 -go potrebiteli
r
Chislo pokazanii 1 -go potrebiteli
565
Litera novix pokazanii 1 -go potrebiteli
h
Chislo novix pokazanii 1 -go potrebiteli
563
Familia 2 -go potrebiteli
petrov
Nomer 2 -go potrebiteli
4
Litera pokazanii 2 -go potrebiteli
r
Chislo pokazanii 2 -go potrebiteli
454
Litera novix pokazanii 2 -go potrebiteli
r
Chislo novix pokazanii 2 -go potrebiteli
232
Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
popov 6 r 565 h 563
petrov 4 r 454 r 232
Меню:
1-dobavlenie zapisi
2-udalenie zapisi
3-redaktirovanie zapisi
4-sortirovka
5-poisk
6-vivod
0-vihod
1: Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
popov 6 r 565 h 563
petrov 4 r 454 r 232
sidorov 5 h 676 h 343
2:удаление второй записи:
Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
popov 6 r 565 h 563
sidorov 5 h 676 h 343
3:редактирование второй записи:
Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
popov 6 r 565 h 563
ivanov 6 h 454 f 343
4:сортировка по фамилии:
Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
ivanov 6 h 454 f 343
popov 6 r 565 h 563
5:
поиск по литере, равной h
Familia| Nomer|Lit pokaz| Ch pokaz|Lit nov pokaz|Ch nov pokaz
ivanov 6 h 454 f 343
|
Вариант 3. Автор решения: Фролова Е., группа 121МИ, 2008 год.
1.Счет;
2. дата;
3. день;
3. месяц;
3. год;
2. номер;
2. приход;
2. расход;
2. остаток.
Решение программы организовано таким образом, что сначала заполняется файл данными,
потом файл считывается и выводится на экран. Строим меню из 5 пунктов: добавить, удалить,
редактировать, сортировать, поиск по условию, печать файла. Сортировка осуществляется
методом пузырька.
Используемые процедуры:
int col(FILE *file); - подсчет количества строк в файле
Schet Pole(FILE *file,int k); - читается из файла стодбей для сортировки
void record(FILE *file,int i, Schet dat); - перезапись строки в файле при сортировке
void print(Schet vsp); - печать файла
void print_2(FILE *file); - печать файла
|
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include <string.h>
#include <fcntl.h>
#include <fstream.h>
#include<stdio.h>
#include <fcntl.h>
#include <iomanip.h>
#include <conio.h>
struct date {int day; int month; int year;};
struct Schet {struct date bd; int number; float prihod; float rashod; float ostatok;};
int col(FILE *file);
Schet Pole(FILE *file,int k);
void record(FILE *file,int i, Schet dat);
void print(Schet vsp);
void print_2(FILE *file);
void main()
{
Schet schet,schet1,tek,sled,Vv,q1,q2,q3;
int n,n1,i,rec,j,pole,k,punkt_menu,znach;
float znach2;
char s[20],s1[20],l;
FILE *f,*f1;
clrscr();
f=fopen("29","wb");
cout << "Vvedite kolichestvo schetov? "; cin >> n1;
for (i=1; i<=n1; i++)
{ cout << "Day " << i << "-go sheta? "; cin >> schet.bd.day;
cout << "Month " << i << "-go scheta? "; cin >> schet.bd.month;
cout << "Year " << i << "-go scheta? "; cin >> schet.bd.year;
schet.number=i;
cout << "Prihod " << i << "-go scheta? "; cin >> schet.prihod;
cout << "Rashod " << i << "-go scheta? "; cin >> schet.rashod;
schet.ostatok=schet.prihod-schet.rashod;
fwrite(&schet, sizeof(Schet), 1, f);
}
fclose(f);
clrscr();
f=fopen("29","rb");
cout<<" Day Month Year Number Prihod Rashod Ostatok"<<endl;
cout<<"----------------------------------------------------------------------------"<<endl;
while (fread(&schet,sizeof(Schet),1,f))
{
cout<<setw(5)<<schet.bd.day
<<setw(9)<< schet.bd.month
<<setw(8)<< schet.bd.year
<<setw(11)<< schet.number
<<setw(14)<< schet.prihod
<<setw(14)<< schet.rashod
<<setw(15)<< schet.ostatok<<endl;
}
fclose(f);
cout<<endl;
cout<<"****************RABOTA S FYILOM******************";
cout<<endl;
cout<<" Dobavit Udalit Redakt Sort Poisk Print"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<setw(9)<<"1"
<<setw(8)<<"2"
<<setw(9)<<"3"
<<setw(8)<<"4"
<<setw(8)<<"5"
<<setw(8)<<"6"<<endl;
cout<<"Vvedite punkt MENU:"; cin>>punkt_menu;
if ((punkt_menu!=1) && (punkt_menu!=2)
&&(punkt_menu!=3)&&(punkt_menu!=4)
&&(punkt_menu!=5)&(punkt_menu!=6))
cout<<"Operaciya ne vozmozhna!";
else
{
n=col(f);
switch(punkt_menu)
{
case 1:{ //vstavka
f=fopen("29", "a+b");
fseek(f,n*sizeof(Schet),SEEK_SET);
cout << "Day " << n1+1 << "-go sheta? "; cin >> schet.bd.day;
cout << "Month " << n1+1 << "-go scheta? "; cin >> schet.bd.month;
cout << "Year " << n1+1 << "-go scheta? "; cin >> schet.bd.year;
schet.number=n1+1;
cout << "Prihod " << n1+1 << "-go scheta? "; cin >> schet.prihod;
cout << "Rashod " << n1+1 << "-go scheta? "; cin >> schet.rashod;
schet.ostatok=schet.prihod-schet.rashod;
fwrite(&schet,sizeof(Schet),1,f);
n++;
print_2(f);
} break;
case 2:{
//udalenie
f=fopen("29","r+b");
f1=fopen("29_1.tmp","wb");
cout<<"Nomer stroki dlya udalenia:(numeracia s 0!)";cout<<endl;
cin>>rec;
i=0;
while ((fread(&schet,sizeof(Schet),1,f))&&(i<rec))
{
fwrite(&schet,sizeof(Schet),1,f1);
i++;
}
while(fread(&schet,sizeof(Schet),1,f))
fwrite(&schet,sizeof(Schet),1,f1);
fclose(f);
fclose(f1);
f=fopen("29","wb");
f1=fopen("29_1.tmp","rb");
while(fread(&schet,sizeof(Schet),1,f1))
fwrite(&schet,sizeof(Schet),1,f);
fclose(f);
fclose(f1);
f=fopen("29","rb");
print_2(f);
}break;
case 3:{
f=fopen("29","r+b");
cout<<"vvedite nomer zapisi(numeracia s 0!):";cout<<endl;
cin>>rec;
fseek(f,rec*sizeof(Schet),SEEK_SET);
fread(&schet,sizeof(Schet),1,f);
cout << "Day " << rec+1 << "-go sheta? "; cin >> schet1.bd.day;
cout << "Month " << rec+1 << "-go scheta? "; cin >> schet1.bd.month;
cout << "Year " << rec+1 << "-go scheta? "; cin >> schet1.bd.year;
schet1.number=rec+1;
cout << "Prihod " << rec+1 << "-go scheta? "; cin >> schet1.prihod;
cout << "Rashod " << rec+1 << "-go scheta? "; cin >> schet1.rashod;
schet1.ostatok=schet1.prihod-schet1.rashod;
fseek(f,rec*sizeof(Schet),SEEK_SET);
fwrite(&schet1,sizeof(Schet),1,f);
print_2(f);
}break;
case 4:{//sortirivka
f=fopen("29","r+b");
n=col(f);
cout<<endl<<"Vvedite pole dlya sortirovki"<<endl;
cout<<"1 - day"<<endl;
cout<<"2 - month"<<endl;
cout<<"3 - year"<<endl;
cout<<"4 - number"<<endl;
cout<<"5 - prihod"<<endl;
cout<<"6 - rashod"<<endl;
cout<<"7 - ostatok"<<endl;
cin>>pole;
for (i=0;i<n-1;i++)
for (k=0;k<n-1;k++)
{
tek=Pole(f,k);
sled=Pole(f,k+1);
switch (pole)
{
case 1: {
if (tek.bd.day>sled.bd.day)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 2: {
if (tek.bd.month>sled.bd.month)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 3:{
if (tek.bd.year>sled.bd.year)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 4:{
if (tek.number>sled.number)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 5:{
if (tek.prihod>sled.prihod)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 6:{
if (tek.rashod>sled.rashod)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
case 7:{
if (tek.ostatok>sled.ostatok)
{
q1=tek;
tek=sled;
sled=q1;
record(f,k,tek);
record(f,k+1,sled);
}
};break;
}//switch
}
print_2(f);
}
case 5:{
f=fopen("29","rb");
cout<<endl;
cout<<"vvedite pole poiska"<<endl;
cout<<"1 - day"<<endl;
cout<<"2 - month"<<endl;
cout<<"3 - year"<<endl;
cout<<"4 - number"<<endl;
cout<<"5 - prihod"<<endl;
cout<<"6 - rashod"<<endl;
cout<<"7 - ostatok"<<endl;
cin>>pole;
cout<<"vvedite znachenie polya poiska"<<endl;
//if ((pole==1)||(pole||2)||(pole==3)||(pole==4))
cin>>znach;
//else cin>>znach2;
while (fread(&schet,sizeof(Schet),1,f))
{
switch (pole)
{
case 1: {
if (znach==schet.bd.day)
print(schet);
}; break;
case 2: {
if (znach==schet.bd.month)
print(schet);
};
break;
case 3: {
if (znach==schet.bd.year)
print(schet);
};
break;
case 4: {
if (znach==schet.number)
print(schet);
};
break;
case 5: {
if (znach==schet.prihod)
print(schet);
};
break;
case 6: {
if (znach==schet.rashod)
print(schet);
};
break;
case 7: {
if (znach==schet.ostatok)
print(schet);
};
break;
};
}
fclose(f);
};break;
case 6:{
f=fopen("29","rb");
print_2(f);
};break;
}
}
getch();
}
int col(FILE *file)
{
int n=0;
Schet schet;
fseek(file,0,SEEK_SET);
while (fread(&schet,sizeof(Schet),1,file))
n++;
return n;
};
Schet Pole(FILE *file, int k)
{
Schet schet;
fseek(file,k*sizeof(Schet),SEEK_SET);
fread(&schet,sizeof(Schet),1,file);
return schet;
};
void record(FILE *file, int i, Schet dat)
{
fseek(file,i*sizeof(Schet),SEEK_SET);
fwrite(&dat,sizeof(Schet),1,file);
};
void print (Schet schet)
{
cout<<setw(5)<<schet.bd.day
<<setw(9)<< schet.bd.month
<<setw(8)<< schet.bd.year
<<setw(11)<< schet.number
<<setw(14)<< schet.prihod
<<setw(14)<< schet.rashod
<<setw(15)<< schet.ostatok<<endl;
};
void print_2(FILE *file)
{ Schet schet;
fseek(file,0*sizeof(Schet),SEEK_SET);
cout<<" Day Month Year Number Prihod Rashod Ostatok"<<endl;
cout<<"----------------------------------------------------------------------------"<<endl;
while (fread(&schet,sizeof(Schet),1,file))
{
cout<<setw(5)<<schet.bd.day
<<setw(9)<< schet.bd.month
<<setw(8)<< schet.bd.year
<<setw(11)<< schet.number
<<setw(14)<< schet.prihod
<<setw(14)<< schet.rashod
<<setw(15)<< schet.ostatok<<endl;
}
fclose(file);
}
|
Day Month Year Number Prihod Rashod Ostatok
----------------------------------------------------------------------------
12 3 2008 1 1200 300 900
30 1 1987 2 8900 2500 6400
18 5 1999 3 15000 7500 7500
****************RABOTA S FYILOM******************
Dobavit Udalit Redakt Sort Poisk Print
---------------------------------------------------
1 2 3 4 5 6
Vvedite punkt MENU:1
Day 4-go sheta? 15
Month 4-go scheta? 6
Year 4-go scheta? 2005
Prihod 4-go scheta? 16000
Rashod 4-go scheta? 8000
Day Month Year Number Prihod Rashod Ostatok
----------------------------------------------------------------------------
12 3 2008 1 1200 300 900
30 1 1987 2 8900 2500 6400
18 5 1999 3 15000 7500 7500
15 6 2005 4 16000 8000 8000
|
Вариант 4. Автор решения: Груздева И., группа 121МИ, 2008 год.
1 Квитанция
2 номер квитанции
2 фамилия заказчика
2 дата выписки счета
3 день
3 месяц
3 год
2 сумма по счету
Меню:
1. Создание файла и заполнение его данными;
2. Просмотр содержимого файла;
3. Добавление записи;
4. Удаление записи;
5. Исправление записи;
6. Сортировка файла по заданному полю;
7. Поиск записи по заданному значению поля;
8. Закончить выбор пунктов меню.
- Заполняется структура kvitok и записывается в файл.
- Из файла считывается структура и выводится на экран.
- Вводится номер квитанции. Номера квитанций должны быть уникальны, поэтому сначала проверяется, есть ли в файле запись с набранным номером. Если такого номера ещё нет, то указатель ставится на конец файла и туда заносится новая структура.
- Вводится номер квитанции. Проверяется, есть ли в файле запись с таким номером. Если есть, то этот элемент удаляется. Удаление происходит с помощью другого файла. Производится перезапись всех элементов, хранящихся в первом файле, во второй до удаляемого элемента. Удаляемый элемент пропускается (то есть, не записывается во второй файл), а все остальные элементы также дописываются из первого во второй файл. Далее, все элементы из второго файла переписываются в первый файл.
- Вводится номер квитанции. Проверяется, есть ли в файле запись с таким номером. Если есть, то этот элемент исправляется. Исправление происходит с помощью другого файла. Производится перезапись всех элементов, хранящихся в первом файле, во второй до исправляемого элемента. Исправляемый элемент пропускается (то есть, не записывается во второй файл), вместо него во второй файл записывается новая структура, а все остальные элементы также дописываются из первого во второй файл. Далее, все элементы из второго файла переписываются в первый файл.
- Выбирается поле, по которому будут отсортированы данные. Далее по выбранному полю происходит сортировка вставкой – два цикла, первый сравнивает элементы, а второй перемещает большие элементы в конец файла, а меньшие в начало файла.
- Выбирается поле, по которому будет произведен поиск. Далее вводится искомое значение поля. Далее значение этого поля ищется в записях файла. Если поле с таким значением есть, то выводится вся запись.
|
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <string.h>
struct vipiska{int den; int mesac; int god;};
struct kvitok{int nomer; char fio[20]; struct vipiska chet; double summa;};
int menu(int vibor)
{
cout<<"Выберите нужный пункт меню:"; cout << endl;
cout << "1. Создание файла и заполнение его данными;"; cout<<endl;
cout << "2. Просмотр содержимого файла;"; cout<<endl;
cout << "3. Добавление записи;"; cout<<endl;
cout << "4. Удаление записи;"; cout<<endl;
cout << "5. Исправление записи;"; cout<<endl;
cout << "6. Сортировка файла по заданному полю;"; cout<<endl;
cout << "7. Поиск записи по заданному значению поля;"; cout<<endl;
cout << "8. Закончить выбор пунктов меню."; cout<<endl;
cin>>vibor;
return vibor;
}
kvitok chten(FILE *f, int i);
void zap(FILE *f, int i, kvitok vsp);
void main()
{
FILE *f,*f1; kvitok kvit,vsp,vsp1;
int n,i,vibor,nomer,m[100],prov,j,k,a,znach,p; char ch,s[15];
clrscr();
vibor=menu(vibor);
while (vibor!=8)
{
if (vibor==1)
{
cout<<endl;
f=fopen("s", "wb");
cout << "Введите количество квитанций: ";
cin >> n;
for (i=1; i<=n; i++)
{ cout << "Номер квитанции: "; cin>>kvit.nomer;
cout << "Фамилия " << i << "-го заказчика: "; cin >> kvit.fio;
cout << "День выписки счета: "; cin >> kvit.chet.den;
cout << "Месяц выписки счета: "; cin >> kvit.chet.mesac;
cout << "Год выписки счета: "; cin >> kvit.chet.god;
cout << "Сумма по счету: "; cin >> kvit.summa;
fwrite(&kvit, sizeof(kvitok), 1, f);
}
fclose(f);
cout<<"Файл заполнен!!!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==2)
{
cout<<"Содержимое файла: "; cout<<endl;
f=fopen("s", "rb");
fseek(f,0*sizeof(kvitok),SEEK_SET);
cout.width(10);cout<<"Номер кв.";
cout.width(10);cout<<"Фамилия";
cout.width(10);cout<<"День";
cout.width(10);cout<<"Месяц";
cout.width(10);cout<<"Год";
cout.width(10);cout<<"Сумма";
cout<<endl;
while (fread(&kvit,sizeof(kvitok),1,f))
{
cout.width(10);cout<<kvit.nomer;
cout.width(10);cout<<kvit.fio;
cout.width(10);cout<<kvit.chet.den;
cout.width(10);cout<<kvit.chet.mesac;
cout.width(10);cout<<kvit.chet.god;
cout.width(10);cout<<kvit.summa;
cout<<endl;
}
fclose(f);
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==3)
{
f=fopen("s", "rb");
i=0;
while (fread(&kvit,sizeof(kvitok),1,f))
{
m[i]=kvit.nomer;
i++;
}
n=i;
fclose(f);
cout<<endl;
f=fopen("s", "a+b");
cout<<"Номер квитанции: ";cin>>kvit.nomer;
prov=0;
for (i=0; i<n; i++)
{
if (m[i]==kvit.nomer) {prov++;}
}
if (prov==0)
{
fseek(f,n*sizeof(kvitok),SEEK_SET);
cout<<"Фамилия заказчика: ";cin>>kvit.fio;
cout<<"День выписки счета: ";cin >> kvit.chet.den;
cout<<"Месяц выписки счета: ";cin >> kvit.chet.mesac;
cout<<"Год выписки счета: ";cin >> kvit.chet.god;
cout<<"Сумма по счету: ";cin >> kvit.summa;
fwrite(&kvit,sizeof(kvitok),1,f);
n++;
fclose(f);
cout<<"Элемент добавлен!!!";
}
else cout<<"В файле уже есть квитанция с таким номером!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==4)
{
f=fopen("s", "rb");
i=0;
while (fread(&kvit,sizeof(kvitok),1,f))
{
m[i]=kvit.nomer;
i++;
}
n=i;
fclose(f);
cout<<endl;
cout<<"Введите номер удаляемой квитанции: ";cin>>nomer;
prov=0;
for (i=0; i<n; i++)
{
if (m[i]==nomer) {prov++;}
}
f=fopen("s","r+b");
f1=fopen("file1.tmp","wb");
if (prov!=0)
{
i=0;
while ((fread(&kvit,sizeof(kvitok),1,f))&&(kvit.nomer!=nomer))
{
fwrite(&kvit,sizeof(kvitok),1,f1);
i++;
}
while(fread(&kvit,sizeof(kvitok),1,f))
{
fwrite(&kvit,sizeof(kvitok),1,f1);
}
fclose(f);
fclose(f1);
f=fopen("s","wb");
f1=fopen("file1.tmp","rb");
while(fread(&kvit,sizeof(kvitok),1,f1))
{
fwrite(&kvit,sizeof(kvitok),1,f);
}
fclose(f);
fclose(f1);
cout<<"Элемент удален!!!";
}
else cout<<"В файле нет квитанции с таким номером!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==5)
{
f=fopen("s", "rb");
i=0;
while (fread(&kvit,sizeof(kvitok),1,f))
{
m[i]=kvit.nomer;
i++;
}
n=i;
fclose(f);
cout<<endl;
cout<<"Введите номер исправляемой квитанции: ";cout<<endl;
cin>>nomer;
prov=0;
for (i=0; i<n; i++)
{
if (m[i]==nomer) {prov++;}
}
f=fopen("s","r+b");
f1=fopen("file1.tmp","wb");
if (prov!=0)
{
i=0;
while ((fread(&kvit,sizeof(kvitok),1,f))&&(kvit.nomer!=nomer))
{
fwrite(&kvit,sizeof(kvitok),1,f1);
i++;
}
cout<<"Введите новые данные -";cout<<endl;
cout<<"Номер квитанции: ";cin>>vsp.nomer;
cout<<"Фамилия заказчика: ";cin>>vsp.fio;
cout<<"День выписки счета: ";cin>>vsp.chet.den;
cout<<"Месяц выписки счета: ";cin>>vsp.chet.mesac;
cout<<"Год выписки счета: ";cin>>vsp.chet.god;
cout<<"Сумма по счету: ";cin>>vsp.summa;
fwrite(&vsp,sizeof(kvitok),1,f1);
while(fread(&kvit,sizeof(kvitok),1,f))
{
fwrite(&kvit,sizeof(kvitok),1,f1);
}
fclose(f);
fclose(f1);
f=fopen("s","wb");
f1=fopen("file1.tmp","rb");
while(fread(&kvit,sizeof(kvitok),1,f1))
{
fwrite(&kvit,sizeof(kvitok),1,f);
}
fclose(f);
fclose(f1);
cout<<"Элемент исправлен!!!";
}
else cout<<"Квитанции с таким номером нет!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==6)
{
f=fopen("s", "r+b");
i=0;
while (fread(&kvit,sizeof(kvitok),1,f))
{
m[i]=kvit.nomer;
i++;
}
n=i;
fclose(f);
i=0;
j=0;
k=0;
a=0;
f=fopen("s","r+b");
cout<<endl;
cout<<"По какому значению произвести сортировку?"<<endl;
cout<<"1. По номеру квитанции;"<<endl;
cout<<"2. По фамилии заказчика;"<<endl;
cout<<"3. По дню выписки счета;"<<endl;
cout<<"4. По месяцу выписки счета;"<<endl;
cout<<"5. По году выписки счета;"<<endl;
cout<<"6. По сумме счета."<<endl;
cin>>znach;
//вставка
for (i=0;i<n;i++)
{
vsp=chten(f,i);
j=0;
switch (znach)
{
case 1: { while (vsp.nomer>chten(f,j).nomer) j++; break; };
case 2: { while (strcmp(vsp.fio,chten(f,j).fio)>0) j++; break; };
case 3: { while (vsp.chet.den>chten(f,j).chet.den) j++; break; };
case 4: { while (vsp.chet.mesac>chten(f,j).chet.mesac) j++; break; };
case 5: { while (vsp.chet.god>chten(f,j).chet.god) j++; break; };
case 6: { while (vsp.summa>chten(f,j).summa) j++; break; };
default:{cout<<"Такого поля нет!"<<endl; };
};
for(k=i-1;k>=j;k--)
{
a=k;
vsp1=chten(f,k);
zap(f,++a,vsp1);
}
zap(f,j,vsp);
};
fclose(f);
cout<<"Сортировка произведена!!!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
if (vibor==7)
{
f=fopen("s","rb");
cout<<endl;
cout<<"Среди каких полей произвести поиск?";cout<<endl;
cout<<"1. По номеру квитанции;"<<endl;
cout<<"2. По фамилии заказчика;"<<endl;
cout<<"3. По дню выписки счета;"<<endl;
cout<<"4. По месяцу выписки счета;"<<endl;
cout<<"5. По году выписки счета;"<<endl;
cout<<"6. По сумме счета."<<endl;
cin>>znach;
cout<<endl;
cout<<"Введите значение искомого поля:";
switch (znach)
{
case 1:{cin>>p;break;};
case 2:{cin>>s;break;};
case 3:{cin>>p;break;};
case 4:{cin>>p;break;};
case 5:{cin>>p;break;};
case 6:{cin>>p;break;};
default:{cout<<"Такого поля нет!"<<endl;}
};
i=0;
cout.width(10);cout<<"Номер кв.";
cout.width(10);cout<<"Фамилия";
cout.width(10);cout<<"День";
cout.width(10);cout<<"Месяц";
cout.width(10);cout<<"Год";
cout.width(10);cout<<"Сумма";
cout<<endl;
while (fread(&vsp,sizeof(kvitok),1,f))
{
switch (znach)
{
case 1: {if (p==vsp.nomer)
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
case 2: {if (!strcmp(s,vsp.fio))
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
case 3: {if (p==vsp.chet.den)
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
case 4: {if (p==vsp.chet.mesac)
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
case 5: {if (p==vsp.chet.god)
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
case 6: {if (p==vsp.summa)
{
cout.width(10);cout<<vsp.nomer;
cout.width(10);cout<<vsp.fio;
cout.width(10);cout<<vsp.chet.den;
cout.width(10);cout<<vsp.chet.mesac;
cout.width(10);cout<<vsp.chet.god;
cout.width(10);cout<<vsp.summa;
cout<<endl;
i++;};break;};
default:{};
};
}
fclose(f);
cout<<"Поиск произведен!!!";
cout<<endl;
cout<<"Хотите выбрать другой пункт меню? (y/n) ";
cin>>ch;
if (ch=='y') vibor=menu(vibor);
else vibor=8;
}
}
}
kvitok chten(FILE *f, int i)
{
kvitok vsp;
fseek(f,i*sizeof(kvitok),SEEK_SET);
fread(&vsp,sizeof(kvitok),1,f);
return vsp;
}
void zap(FILE *f, int i, kvitok vsp)
{
fseek(f,i*sizeof(kvitok),SEEK_SET);
fwrite(&vsp,sizeof(kvitok),1,f);
}
|
Вариант 5. Автор решения: Панькова Е., группа 121МИ, 2008 год.
1. Список ошибок:
1. Код ошибки
1. Число
2. Литера класса ошибки
2. Название
3. Англ текст
4. Рус перевод
Решение данной задачи разделим на два основных блока. Первый написание программы, которая создает файл базы данных и заносит данные. Второй написание программы, которая работает с готовым файлом данных.
Работу организуем с бинарными файлами. Первая программа будет запрашивать у пользователя имя файла, если такой файл уже существует то она выведет на экран его содержимое, в противном случае создаст новый и запросит у пользователя количество записей, после чего перейдет к вводу данных.
Вторая программа выполняет следующие задачи:
- добавление записи;
- удаление записи;
- редактирование записи;
- поиск записи по полю и заданному значению;
- сортировка файла по выбранному пользователем полю (Выполняет сортировку выбором записей в файле. Файл открывается для чтения и записи. Запрашивается у пользователя номер поля, по которому предполагается ввести сортировку. В алгоритме сортировки при сравнении элементов сравниваем элементы в зависимости от выбранного поля сортировки. После выполнения сортировки функции передается 1, если сортировка выполнена удачно и 0 в противном случае. В конце работы закрываем файл);
- просмотр отдельных записей;
|
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
struct kod{int chislo; char litera;};
struct spis {struct kod kod1; char naim[30]; char angl[50]; char rus[50];};
void main ()
{
spis spis1;
int n,i;
FILE *f;
char s[20];
cout<<"imya faila = ";
cin.getline(s,20);
f=fopen(s,"wb");
cout <<"kol-vo oshibok= ";
cin>>n;
for (i=1;i<=n;i++)
{
cout<<"chislo. Kod "<<i<<"-oi oshibki = ";
cin>>spis1.kod1.chislo;
cout<<"litera. Kod "<<i<<"-oi oshibki = ";
cin>>spis1.kod1.litera;
cout<<"Nazvanie "<<i<<"-oi oshibki = ";
cin>>spis1.naim;
cout<<"Angl text "<<i<<"-oi oshibki =";
cin>>spis1.angl;
cout<<"Russkii text "<<i<<"-oi oshibki =";
cin>>spis1.rus;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(f);
}
//Продолжение
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
struct kod{int chislo; char litera[1];};
struct spis {struct kod kod1; char naim[30]; char angl[50]; char rus[50];};
spis reading(FILE *f, int i);
void record(FILE *f, int i, spis spis1);
void main()
{
FILE *f,*fd;
int n,i,ud, ispr, viv, sort, poisk, punkt, zikl;
int udn, isprn, vivn, sortn, poiskn;
spis spis1;
char s[20],s1[20],s2[20],s3[1];
cout<<endl;
cout<<"imya faila = ";
cin.getline(s,20);
cout<<"MENU:"<<endl;
cout<<"Dobavit zapis--------------(1)"<<endl;
cout<<"Udalit zapis--------------(2)"<<endl;
cout<<"Ispravit zapis--------------(3)"<<endl;
cout<<"Vivod soderzhimogo na ekran-(4)"<<endl;
cout<<"Sortirovat------------------(5)"<<endl;
cout<<"Poisk-----------------------(6)"<<endl;
cout<<"Otmena----------------------(7)"<<endl;
cout<<endl;
cout<<"Viberite punkt menu ";
cin>>punkt;
cout<<endl;
n=0;
f=fopen(s,"rb");
while (fread(&spis1,sizeof(spis),1,f))
{
n++;
}
fclose(f);
while (punkt!=7)
{
switch (punkt)
{
case 1:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
cout<<"chislo. Kod oshibki = ";
cin>>spis1.kod1.chislo;
cout<<"litera. Kod oshibki = ";
cin>>spis1.kod1.litera;
cout<<"Nazvanie oshibki = ";
cin>>spis1.naim;
cout<<"Angl text oshibki =";
cin>>spis1.angl;
cout<<"Russkii text oshibki =";
cin>>spis1.rus;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,f);
fclose(fd);
fclose(f);
}; break;
case 2:
{
cout<<"Vvedite nomer zapisi dlya udaleniya ";
cin>>udn;
cout<<endl;
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<udn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 3:
{
cout<<"Vvedite nomer zapisi dlya ispravleniya ";
cin>>isprn;
cout<<endl;
int pol;
cout<<endl<<"Vvedite nomer polya dlya redaktirovaniya"<<endl;
cout<<"1 - chislo. Kod oshibki"<<endl;
cout<<"2 - litera. Kod oshibki"<<endl;
cout<<"3 - Nazvanie oshibki"<<endl;
cout<<"4 - Angl text oshibki"<<endl;
cout<<"5 - Russkii text oshibki"<<endl;
cin>>pol;
switch (pol)
{
case 1:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<isprn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"chislo. Kod oshibki =";
cin>>spis1.kod1.chislo;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,fd);
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 2:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<isprn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"litera. Kod oshibki =";
cin>>spis1.kod1.litera;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,fd);
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 3:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<isprn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Nazvanie oshibki =";
cin>>spis1.naim;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,fd);
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 4:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<isprn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Angl text oshibki =";
cin>>spis1.angl;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,fd);
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 5:
{
fd=fopen("2","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&spis1,sizeof(spis),1,f))&&(i<isprn))
{
fwrite(&spis1, sizeof(spis),1,fd);
i++;
}
cout<<"Russkii text oshibki =";
cin>>spis1.rus;
cout<<endl;
fwrite(&spis1, sizeof(spis),1,fd);
while (fread(&spis1,sizeof(spis),1,f))
{
fwrite(&spis1, sizeof(spis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("2","rb");
while (fread(&spis1,sizeof(spis),1,fd))
{
fwrite(&spis1, sizeof(spis),1,f);
}
fclose(fd);
fclose(f);
};break;
default:cout<<"Vi neverno vveli znachenie"<<endl;
};
}; break;
case 4:
{
i=1;
f=fopen(s,"rb");
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
i++;
}
fclose(f);
cout<<endl;
}; break;
case 5:
{
spis spis1;
int pol;
n=0,
f=fopen(s,"r+b");
fseek(f,0,SEEK_SET);
while (fread(&spis1,sizeof(spis),1,f))
{
n++;
}
cout<<endl<<"Vvedite nomer polyz po kotoromu predpolagaetsya sortirovka"<<endl;
cout<<"1 - chislo. Kod oshibki"<<endl;
cout<<"2 - litera. Kod oshibki"<<endl;
cout<<"3 - Nazvanie oshibki"<<endl;
cout<<"4 - Angl text oshibki"<<endl;
cout<<"5 - Russkii text oshibki"<<endl;
cin>>pol;
int i=0,j=0,k=0,m=0;
spis B,V;
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1:
{
while (B.kod1.chislo>reading(f,j).kod1.chislo)
j++;
break;
};
case 2: {
while (strcmp(B.kod1.litera,reading(f,j).kod1.litera)>0)
j++;
break;
};
case 3: {
while (strcmp(B.naim,reading(f,j).naim)>0)
j++;
break;
};
case 4: {
while (strcmp(B.angl,reading(f,j).angl)>0)
j++;
break;
};
case 5: {
while (strcmp(B.rus,reading(f,j).rus)>0)
j++;
break;
};
default:{cout<<"ЌҐўҐа® § ¤ ® Ї®«Ґ б®авЁа®ўЄЁ"<<endl;
};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
fclose(f);
}; break;
case 6:
{
cout<<"POisk po: polu -1, logicheskomu virazheniu-2"<<endl;
int qwer;
cin>>qwer;
switch(qwer)
{
case 1:
{
////////////////////////////////////////////////////
i=0;
cout<<"Poisk osushestvit po polu:"<<endl;
cout<<"chislo-(1), litera-(2), nazvanie-(3), angl-(4), rus-(5)"<<endl;
cin>>poisk;
switch (poisk)
{
case 1:
{
cout<<"Vvedite chislo: ";
int s4;
cin>>s4;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (s4==spis1.kod1.chislo)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
}; break;
case 2:
{
cout<<"Vvedite litera: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (strcmp(s1,spis1.kod1.litera)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
}; break;
case 3:
{
cout<<"Vvedite Nazvanie: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (strcmp(s1,spis1.naim)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
}; break;
case 4:
{
cout<<"Vvedite Angl: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (strcmp(s1,spis1.angl)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
}; break;
case 5:
{
cout<<"Vvedite Rus text: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (strcmp(s1,spis1.rus)==0)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
}; break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
};
};break;
case 2:
{
cout<<"Poisk po chislu(Kod oshibki): ";
cout<<"Viberite znak operacii (<, > or =): ";
char znak;
cin>>znak;
switch (znak)
{
case '<':
{
cout<<endl<<"Vvedite chislo1: ";
int chislo1;
cin>>chislo1;
cout<<"Kod oshibki, chislo kotorogo < "<<chislo1<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (spis1.kod1.chislo<chislo1)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
/////////
}; break;
case '>':
{
cout<<endl<<"Vvedite chislo1: ";
int chislo1;
cin>>chislo1;
cout<<"Kod oshibki, chislo kotorogo > "<<chislo1<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (spis1.kod1.chislo>chislo1)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
/////////
}; break;
case '=':
{
cout<<endl<<"Vvedite chislo1: ";
int chislo1;
cin>>chislo1;
cout<<"Kod oshibki, chislo kotorogo = "<<chislo1<<" : " <<endl;
/////////
f=fopen(s,"rb");
int q=0;
int i=0;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
cout<<"| N p/p |Chislo | Litera | Nazvanie | Angl | Rus text |"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
while (fread(&spis1,sizeof(spis),1,f))
{
i++;
if (spis1.kod1.chislo==chislo1)
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"|";
cout.width(7);cout<<spis1.kod1.chislo;
cout<<"|";
cout.width(8);cout<<spis1.kod1.litera;
cout<<"|";
cout.width(13);cout<<spis1.naim;
cout<<"|";
cout.width(7);cout<<spis1.angl;
cout<<"|";
cout.width(11);cout<<spis1.rus;
cout<<"|"<<endl;
cout<<"+-------+-------+--------+-------------+-------+-----------+"<<endl;
q++;
}
}
cout<<endl;
fclose(f);
if (q==0)
{
cout<<"Takih oshibok net!"<<endl;
}
/////////
}; break;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
}
};break;
default:{cout<<"Vi vveli nevernoe znachenie"<<endl;};
};
///////////////////////////////////////////////////////
}; break;
default:cout<<"Vi nechego ne vibrali. Prilozhenie bydet zakrito"<<endl;
}
cout<<"dob-(1), ud-(2), ispr-(3), viv-(4), sort-(5), poisk-(6), otm-(7)"<<endl;
cout<<"Viberite punkt menu ";
cin>>punkt;
cout<<endl;
}
fclose(f);
}
///////////////////////////////////////////////////////////////////////////
spis reading(FILE *f, int i)
{
spis vsp;
fseek(f,i*sizeof(spis),SEEK_SET);
fread(&vsp,sizeof(spis),1,f);
return vsp;
};
void record(FILE *f, int i, spis spis1)
{
fseek(f,i*sizeof(spis),SEEK_SET);
fwrite(&spis1,sizeof(spis),1,f);
};
|
Вариант 6. Автор решения: Захаров А., группа 121МИ, 2008 год.
1.Список банковских счетов
2.фамилия имя отчество
2.номер счета
2.текущее состояние
3.расход
3.приход
Файл создается с помощью структур:
struct tek_sost
{int r;
int p;};
struct bank
{char fio[11];
int n_s;
struct tek_sost t_s;};
Добавление данных происходит в конец файла, т.е. fopen(a+b) .
При удалении данных используем дополнительный файл.
Редактирование осуществляется постановкой указателя файла на позицию изменяемой записи и записывается новая запись.
Сортируем записи путем сравнения строк и перемещения большей строки в конец файла.
Поиск записи происходит по одному из значений записи.
|
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys\stat.h>
#include <io.h>
//объявление структур
struct tek_sost
{int r;
int p;};
struct bank
{char fio[11];
int n_s;
struct tek_sost t_s;};
int col_rec(FILE *file);
bank reading(FILE *file, int i);
void record(FILE *file, int i, bank dat);
void print (bank vsp);
void vivod(FILE *file);
void main()
{
FILE *f,*f1;
int n,i,v,n_s,j,pol,k,m,c;
bank a,b,B,V;
char s[40],s1[40],l;
v=1;
n=col_rec(f);
while( v==1 || v==2|| v==3|| v==4|| v==5|| v==6 )
{
cout<<endl;
cout<<"Главное меню программы";cout<<endl;
cout<<"1-добавить счет";cout<<endl;
cout<<"2-удалить счет"; cout<<endl;
cout<<"3-редактировать счет";cout<<endl;
cout<<"4-сортировать счета";cout<<endl;
cout<<"5-поиск счета";cout<<endl;
cout<<"6-вывод списка всех счетов";
cout<<endl;
cout<<"для выхода нажмите любую другую клавишу";
cout<<endl;
cin>>v;
//добавить счет//////////////////////////////////////////////////////
if (v==1)
{
f=fopen("file", "a+b");
fseek(f,n*sizeof(bank),SEEK_SET);
cout<<"ФИО ";cout<<endl;
cin>>a.fio;
cout<<"Номер счета ";cout<<endl;
cin>>a.n_s;
cout<<"Расход";cout<<endl;
cin>>a.t_s.r;
cout<<"Приход";cout<<endl;
cin>>a.t_s.p;
fwrite(&a,sizeof(bank),1,f);
n++;
vivod(f);
}
//удалить счет///////////////////////////////////////////////////////
if (v==2)
{
f=fopen("file","r+b");
f1=fopen("file1.tmp","wb");
cout<<"Номер счета для удаления";cout<<endl;
cin>>n_s;
i=0;
while ((fread(&a,sizeof(bank),1,f))&&(i<n_s))
{
fwrite(&a,sizeof(bank),1,f1);
i++;
}
while(fread(&a,sizeof(bank),1,f))
{
fwrite(&a,sizeof(bank),1,f1);
}
fclose(f);
fclose(f1);
f=fopen("file","wb");
f1=fopen("file1.tmp","rb");
while(fread(&a,sizeof(bank),1,f1))
{
fwrite(&a,sizeof(bank),1,f);
}
fclose(f);
fclose(f1);
f=fopen("file","rb");
vivod(f);
};
//редактировать счет/////////////////////////////////////////////////
if(v==3)
{
f=fopen("file","r+b");
cout<<"Номер счета для редактирования ";cout<<endl;
cin>>n_s;
n_s = n_s - 1;
fseek(f,n_s*sizeof(bank),SEEK_SET);
fread(&a,sizeof(bank),1,f);
cout<<"Новое ФИО ("<<a.fio<<")";cout<<endl;
cin>>b.fio;
cout<<"Новый номер счета ("<<a.n_s<<")";cout<<endl;
cin>>b.n_s;
cout<<"Новый расход ("<<a.t_s.r<<")";cout<<endl;
cin>>b.t_s.r;
cout<<"Новый приход ("<<a.t_s.p<<")";cout<<endl;
cin>>b.t_s.p;
fseek(f,n_s*sizeof(bank),SEEK_SET);
fwrite(&b,sizeof(bank),1,f);
vivod(f);
};
//сортировать счета//////////////////////////////////////////////////
if (v==4)
{
i=0;
j=0;
k=0;
m=0;
f=fopen("file","r+b");
n=col_rec(f);
cout<<endl<<"Выберите поле сортировки"<<endl;
cout<<"1-по ФИО "<<endl;
cout<<"2-по номеру счета"<<endl;
cout<<"3-по расходу"<<endl;
cout<<"4-по приходу"<<endl;
cin>>pol;
//сортировка
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1: {
while (strcmp(B.fio,reading(f,j).fio)>0)
j++;
break;
};
case 2: {
while (B.n_s>reading(f,j).n_s)
j++;
break;
};
case 3: {
while (B.t_s.r>reading(f,j).t_s.r)
j++;
break;
};
case 4: {
while (B.t_s.p>reading(f,j).t_s.p)
j++;
break;
};
default:{cout<<"НЕВЕРНО ЗАДАНО ПОЛЕ !!!"<<endl;
};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
vivod(f);
};
//поиск счета////////////////////////////////////////////////////////
if (v==5)
{
f=fopen("file","rb");
cout<<endl;
cout<<"1-поиск по ФИО"<<endl;
cout<<"2-поиск по номеру счета"<<endl;
cout<<"3-поиск по расходу"<<endl;
cout<<"4-поиск по приходу"<<endl;
cin>>pol;
cout<<"Искомое значение равно"<<endl;
switch (pol)
{
case 1:{cin>>s1;break;};
case 2:{cin>>c;break;};
case 3:{cin>>l;break;};
case 4:{cin>>c;break;}
default:{cout<<"ПОЛЕ НЕ ЗАДАНО !!!"<<endl;}
};
i=0;
cout<<"-------------------------------------------------";
cout<<endl;
cout<<"|";
cout.width(11);cout<<"ФИО";
cout<<"|";
cout.width(11);cout<<"Номер счета";
cout<<"|";
cout.width(11);cout<<"Расход";
cout<<"|";
cout.width(11);cout<<"Приход";
cout<<"|";
cout<<endl;
cout<<"-------------------------------------------------";
cout<<endl;
while (fread(&a,sizeof(bank),1,f))
{
switch (pol)
{
case 1: {
if (!strcmp(s1,a.fio))
{
print (a);
i++;
};
break;
};
case 2: {
if (c==a.n_s)
{
print (a);
i++;
};
break;
};
case 3: {
if (l==a.t_s.r)
{
print (a);
i++;
};
break;
};
case 4: {
if (c==a.t_s.p)
{
print (a);
i++;
};
break;
};
default:{
};
};
}
fclose(f);
};
//вывод списка всех счетов///////////////////////////////////////////
if (v==6)
{
f=fopen("file","rb");
vivod(f);
};
}
}
int col_rec(FILE *file)
{
int n=0;
bank dat;
fseek(file,0,SEEK_SET);
while (fread(&dat,sizeof(bank),1,file))
n++;
return n;
};
bank reading(FILE *file, int i)
{
bank vsp;
fseek(file,i*sizeof(bank),SEEK_SET);
fread(&vsp,sizeof(bank),1,file);
return vsp;
};
void record(FILE *file, int i, bank dat)
{
fseek(file,i*sizeof(bank),SEEK_SET);
fwrite(&dat,sizeof(bank),1,file);
};
void print (bank vsp)
{
cout.width(11);cout<<vsp.fio;
cout.width(11);cout<<vsp.n_s;
cout.width(11);cout<<vsp.t_s.r;
cout.width(11);cout<<vsp.t_s.p;
cout<<endl;
};
void vivod(FILE *file)
{ bank a;
fseek(file,0*sizeof(bank),SEEK_SET);
cout<<"-------------------------------------------------";
cout<<endl;
cout<<"|";
cout.width(11);cout<<"ФИО";
cout<<"|";
cout.width(11);cout<<"Номер счета";
cout<<"|";
cout.width(11);cout<<"Расход";
cout<<"|";
cout.width(11);cout<<"Приход";
cout<<"|";
cout<<endl;
cout<<"-------------------------------------------------";
cout<<endl;
while (fread(&a,sizeof(bank),1,file))
{
cout.width(11);cout<<a.fio;
cout.width(11);cout<<a.n_s;
cout.width(11);cout<<a.t_s.r;
cout.width(11);cout<<a.t_s.p;
cout<<endl;
}
fclose(file);
}
|
-------------------------------------------------
and 2 800 300
petrov 1 4000 200
Главное меню программы
1-добавить счет
2-удалить счет
3-редактировать счет
4-сортировать счета
5-поиск счета
6-вывод списка всех счетов
для выхода нажмите любую другую клавишу
5
1-поиск по ФИО
2-поиск по номеру счета
3-поиск по расходу
4-поиск по приходу
2
Искомое значение равно
1
-------------------------------------------------
| ФИО|Номер счета| Расход| Приход|
-------------------------------------------------
petrov 1 4000 200
Главное меню программы
1-добавить счет
2-удалить счет
3-редактировать счет
4-сортировать счета
5-поиск счета
6-вывод списка всех счетов
для выхода нажмите любую другую клавишу
6
-------------------------------------------------
| ФИО|Номер счета| Расход| Приход|
-------------------------------------------------
and 2 800 300
petrov 1 4000 200
Главное меню программы
1-добавить счет
2-удалить счет
3-редактировать счет
4-сортировать счета
5-поиск счета
6-вывод списка всех счетов
для выхода нажмите любую другую клавишу
|
Вариант 7. Автор решения: Шихов А., группа 121МИ, 2008 год.
1. Успеваемость;
1. Фамилия, инициалы;
2. Группа;
3. Специальность;
4. Экзаменационные оценки;
1. по информатике;
2. по математике;
3. по физике;
4. по химии.
В первой части программа создаёт файл БД и заносит данные.
Во второй части программа работает с готовым файлом БД:
- добавление записи (с использованием дополнительного файла);
- удаление выбранной записи (с использованием дополнительного файла);
- исправление выбранной записи (с использованием дополнительного файла);
- вывод содержимого БД на экран;
- сортировка по выбранному полю (методом вставки: сравнение строк и перемещение меньшей строки в начало, а большей в конец);
- поиск по выбранному полю.
|
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
struct ocenki {int Inform; int Math; int Phys; int Chem;};
struct uspev {char FamIO[20]; int group; int spec; struct ocenki mark;};
void main ()
{
uspev stud;
int n,i;
FILE *f;
char s[20];
cout<<endl;
cout<<" Enter file name: ";
cin.getline(s,20);
f=fopen(s,"wb");
cout <<" Kol-vo studentov: ";
cin>>n; cout<<endl;
for (i=1;i<=n;i++)
{
cout<<" "<<i<<"-j student: \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>>>>>>>>>> Gruppa: "; cin>>stud.group;
cout<<" >>>>> Special'nost': "; cin>>stud.spec;
cout<<" >> Ekzam.Ocenka... \n";
cout<<" -- po informatike: "; cin>>stud.mark.Inform;
cout<<" --- po matematike: "; cin>>stud.mark.Math;
cout<<" ------- po fizike: "; cin>>stud.mark.Phys;
cout<<" -------- po himii: "; cin>>stud.mark.Chem;
cout<<endl;
fwrite(&stud, sizeof(uspev),1,f);
}
fclose(f);
}
II)
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
struct ocenki {int Inform; int Math; int Phys; int Chem;};
struct uspev {char FamIO[20]; int group; int spec; struct ocenki mark;};
uspev reading(FILE *f, int i);
void record(FILE *f, int i, uspev stud);
void main()
{
FILE *f,*fd;
int n,i,pol,j,k,m,punkt,w;
uspev stud;
char s[20],s1[20];
cout<<endl;
cout<<" Imya faila: ";
cin.getline(s,20);
cout<<endl;
cout<<" [ M E N U ]"<<endl;
cout<<" -----------------------------------"<<endl;
cout<<" Dobavit' zapis' --------------> (1)"<<endl;
cout<<" Udalit' zapis' ---------------> (2)"<<endl;
cout<<" Ispravit' zapis' -------------> (3)"<<endl;
cout<<" Vyvod soderzhimogo na ekran --> (4)"<<endl;
cout<<" Sortirovat' ------------------> (5)"<<endl;
cout<<" Poisk ------------------------> (6)"<<endl;
cout<<" Vyhod ------------------------> (7)"<<endl;
cout<<endl;
cout<<" Vyberite punkt menu: "; cin>>punkt;
cout<<endl;
while (punkt!=7)
{
switch (punkt)
{
case 1:
{
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
while (fread(&stud,sizeof(uspev),1,f))
{
fwrite(&stud, sizeof(uspev),1,fd);
}
fclose(fd);
fclose(f);
fd=fopen("vsp.tmp","rb");
f=fopen(s,"wb");
while (fread(&stud,sizeof(uspev),1,fd))
{
fwrite(&stud, sizeof(uspev),1,f);
}
cout<<" Dobavit' zapis': \n";
cout<<" ---------------------+ \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>>>>>>>>>> Gruppa: "; cin>>stud.group;
cout<<" >>>>> Special'nost': "; cin>>stud.spec;
cout<<" >> Ekzam.Ocenka... \n";
cout<<" -- po informatike: "; cin>>stud.mark.Inform;
cout<<" --- po matematike: "; cin>>stud.mark.Math;
cout<<" ------- po fizike: "; cin>>stud.mark.Phys;
cout<<" -------- po himii: "; cin>>stud.mark.Chem;
cout<<endl;
fwrite(&stud, sizeof(uspev),1,f);
fclose(fd);
fclose(f);
}; break;
case 2:
{
cout<<" Udavit' zapis' #: ";
cin>>n;
cout<<endl;
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud,sizeof(uspev),1,f))&&(i<n))
{
fwrite(&stud, sizeof(uspev),1,fd);
i++;
}
while (fread(&stud,sizeof(uspev),1,f))
{
fwrite(&stud, sizeof(uspev),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("vsp.tmp","rb");
while (fread(&stud,sizeof(uspev),1,fd))
{
fwrite(&stud, sizeof(uspev),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 3:
{
cout<<" Ispravit' zapis' #: ";
cin>>n;
cout<<endl;
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud,sizeof(uspev),1,f))&&(i<n))
{
fwrite(&stud, sizeof(uspev),1,fd);
i++;
}
cout<<" Novye dannye dlya "<<n<<"-j zapisi: "<<endl;
cout<<" ---------------------+ \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>>>>>>>>>> Gruppa: "; cin>>stud.group;
cout<<" >>>>> Special'nost': "; cin>>stud.spec;
cout<<" >> Ekzam.Ocenka... \n";
cout<<" -- po informatike: "; cin>>stud.mark.Inform;
cout<<" --- po matematike: "; cin>>stud.mark.Math;
cout<<" ------- po fizike: "; cin>>stud.mark.Phys;
cout<<" -------- po himii: "; cin>>stud.mark.Chem;
cout<<endl;
fwrite(&stud, sizeof(uspev),1,fd);
while (fread(&stud,sizeof(uspev),1,f))
{
fwrite(&stud, sizeof(uspev),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("vsp.tmp","rb");
while (fread(&stud,sizeof(uspev),1,fd))
{
fwrite(&stud, sizeof(uspev),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 4:
{
i=1;
f=fopen(s,"rb");
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
i++;
}
fclose(f);
cout<<endl;
}; break;
case 5:
{
n=0,
f=fopen(s,"r+b");
fseek(f,0,SEEK_SET);
while (fread(&stud,sizeof(uspev),1,f))
{
n++;
}
cout<<" Pole dlya sortirovki:"<<endl;
cout<<" 1 - Familiya I.O."<<endl;
cout<<" 2 - Gruppa"<<endl;
cout<<" 3 - Special'nost'"<<endl;
cout<<" 4 - Ocenka po Informatike"<<endl;
cout<<" 5 - Ocenka po Matematike"<<endl;
cout<<" 6 - Ocenka po Fizike"<<endl;
cout<<" 7 - Ocenka po Himii"<<endl;
cout<<" Vash vybor: ";
cin>>pol;
j=0; k=0; m=0;
uspev B, V;
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1:
{
while (strcmp(B.FamIO,reading(f,j).FamIO)>0)
j++;
break;
};
case 2: {
while (B.group>reading(f,j).group)
j++;
break;
};
case 3: {
while (B.spec>reading(f,j).spec)
j++;
break;
};
case 4: {
while (B.mark.Inform>reading(f,j).mark.Inform)
j++;
break;
};
case 5: {
while (B.mark.Math>reading(f,j).mark.Math)
j++;
break;
};
case 6: {
while (B.mark.Phys>reading(f,j).mark.Phys)
j++;
break;
};
case 7: {
while (B.mark.Chem>reading(f,j).mark.Chem)
j++;
break;
};
default:{cout<<"Vvedeno nesuwestvuyuwee pole."<<endl;};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
fclose(f);
}; break;
case 6:
{
i=0;
cout<<" Pole dlya poiska:"<<endl;
cout<<" 1 - Familiya I.O."<<endl;
cout<<" 2 - Gruppa"<<endl;
cout<<" 3 - Special'nost'"<<endl;
cout<<" 4 - Ocenka po Informatike"<<endl;
cout<<" 5 - Ocenka po Matematike"<<endl;
cout<<" 6 - Ocenka po Fizike"<<endl;
cout<<" 7 - Ocenka po Himii"<<endl;
cout<<" Vash vybor: ";
cin>>pol;
switch (pol)
{
case 1:
{
cout<<" Vvedite Familiyu I.O.: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (strcmp(s1,stud.FamIO)==0)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
cout<<endl;
}; break;
case 2:
{
cout<<" Vvedite Gruppu: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.group)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 3:
{
cout<<" Vvedite Special'nost': ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.spec)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 4:
{
cout<<" Vvedite ocenku po informatike: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Inform)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 5:
{
cout<<" Vvedite ocenku po matematike: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Math)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 6:
{
cout<<" Vvedite ocenku po fizike: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Phys)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 7:
{
cout<<" Vvedite ocenku po himii: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Chem)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
default:cout<<"Vvedeno nesuwestvuyuwee pole."<<endl;
}
}; break;
default:cout<<"Vy nechego ne vybrali. Prilozhenie budet zakryto"<<endl;
}
cout<<"\n Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)"<<endl;
cout<<" Viberite punkt menu: ";
cin>>punkt;
cout<<endl;
}
fclose(f);
}
uspev reading(FILE *f, int i)
{
uspev vsp;
fseek(f,i*sizeof(uspev),SEEK_SET);
fread(&vsp,sizeof(uspev),1,f);
return vsp;
};
void record(FILE *f, int i, uspev stud)
{
fseek(f,i*sizeof(uspev),SEEK_SET);
fwrite(&stud,sizeof(uspev),1,f);
};; | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Math)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 6:
{
cout<<" Vvedite ocenku po fizike: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Phys)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 7:
{
cout<<" Vvedite ocenku po himii: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+--------+-----------+-----------------------+"<<endl;
cout<<" | | | | | Ekzam. ocenka |"<<endl;
cout<<" | # | Familiya I.O. | Gruppa | Spec. +-----------------------+"<<endl;
cout<<" | | | | | Inf | Mat | Fiz | Him |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
while (fread(&stud,sizeof(uspev),1,f))
{
i++;
if (w==stud.mark.Chem)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(7);cout<<stud.group;
cout<<" |";
cout.width(10);cout<<stud.spec;
cout<<" | ";
cout.width(1);cout<<stud.mark.Inform;
cout<<" | ";
cout.width(1);cout<<stud.mark.Math;
cout<<" | ";
cout.width(1);cout<<stud.mark.Phys;
cout<<" | ";
cout.width(1);cout<<stud.mark.Chem;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih studentov net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
default:cout<<"Vvedeno nesuwestvuyuwee pole."<<endl;
}
}; break;
default:cout<<"Vy nechego ne vybrali. Prilozhenie budet zakryto"<<endl;
}
cout<<"\n Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)"<<endl;
cout<<" Viberite punkt menu: ";
cin>>punkt;
cout<<endl;
}
fclose(f);
}
uspev reading(FILE *f, int i)
{
uspev vsp;
fseek(f,i*sizeof(uspev),SEEK_SET);
fread(&vsp,sizeof(uspev),1,f);
return vsp;
};
void record(FILE *f, int i, uspev stud)
{
fseek(f,i*sizeof(uspev),SEEK_SET);
fwrite(&stud,sizeof(uspev),1,f);
};
|
Imya faila: D:\ash29.dat
[ M E N U ]
-----------------------------------
Dobavit' zapis' --------------> (1)
Udalit' zapis' ---------------> (2)
Ispravit' zapis' -------------> (3)
Vyvod soderzhimogo na ekran --> (4)
Sortirovat' ------------------> (5)
Poisk ------------------------> (6)
Vyhod ------------------------> (7)
Vyberite punkt menu: 4
+----+---------------------+--------+-----------+-----------------------+
| | | | | Ekzam. ocenka |
| # | Familiya I.O. | Gruppa | Spec. +-----------------------+
| | | | | Inf | Mat | Fiz | Him |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 1 | Petrov | 121 | 1234 | 5 | 4 | 3 | 5 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 2 | Sidorov | 121 | 1222 | 4 | 5 | 5 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 3 | Dergachev | 122 | 1222 | 3 | 3 | 3 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 1
Dobavit' zapis':
---------------------+
>>>>> Familiya I.O.: Ivanov
>>>>>>>>>>>> Gruppa: 123
>>>>> Special'nost': 1234
>> Ekzam.Ocenka...
-- po informatike: 5
--- po matematike: 4
------- po fizike: 5
-------- po himii: 4
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 5
Pole dlya sortirovki:
1 - Familiya I.O.
2 - Gruppa
3 - Special'nost'
4 - Ocenka po Informatike
5 - Ocenka po Matematike
6 - Ocenka po Fizike
7 - Ocenka po Himii
Vash vybor: 1
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 4
+----+---------------------+--------+-----------+-----------------------+
| | | | | Ekzam. ocenka |
| # | Familiya I.O. | Gruppa | Spec. +-----------------------+
| | | | | Inf | Mat | Fiz | Him |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 1 | Dergachev | 122 | 1222 | 3 | 3 | 3 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 2 | Ivanov | 123 | 1234 | 5 | 4 | 5 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 3 | Petrov | 121 | 1234 | 5 | 4 | 3 | 5 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 4 | Sidorov | 121 | 1222 | 4 | 5 | 5 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 6
Pole dlya poiska:
1 - Familiya I.O.
2 - Gruppa
3 - Special'nost'
4 - Ocenka po Informatike
5 - Ocenka po Matematike
6 - Ocenka po Fizike
7 - Ocenka po Himii
Vash vybor: 3
Vvedite Special'nost': 1222
+----+---------------------+--------+-----------+-----------------------+
| | | | | Ekzam. ocenka |
| # | Familiya I.O. | Gruppa | Spec. +-----------------------+
| | | | | Inf | Mat | Fiz | Him |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 1 | Dergachev | 122 | 1222 | 3 | 3 | 3 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
| 4 | Sidorov | 121 | 1222 | 4 | 5 | 5 | 4 |
+----+---------------------+--------+-----------+-----+-----+-----+-----+
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 7
|
Вариант 9. Автор решения: Давыдов А., группа 121МИ, 2008 год.
1.Расписание;
2. номер рейса;
2. пункт отправления;
2. пункт прибытия;
2. время отправления;
3. часы;
3. минуты;
2. время прибытия ;
3. часы;
3. минуты.
Представляем заданную таблицу в виде БД, создаём файл с возможностью добавления, удаления, исправления,
вывода содержимого в виде таблицы и быстрого перемещения по нему, описываем сортировку по любому указанному полю,
описываем поиск записей в файле по заданному логическому выражению.
Решение данной задачи разделим на два основных блока. Первый написание программы, которая создает файл базы
данных и заносит данные. Второй написание программы, которая работает с готовым файлом данных.
|
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <string.h>
#include <io.h>
struct Vrm
{
int chas;
int minut;
};
struct SRasp
{int nomr;
char Potp[50];
char Pprb[50];
struct Vrm Otpr;
struct Vrm Prbt;
};
void SozdF(char *fname);
void VyvF(char *fname);
void DobZ(char *fname);
void UdalZ(char *fname);
void IsprZ(char *fname);
void SortZ(char *fname);
void Poisk(char *fname);
int main(int argc, char* argv[])
{int ch,sz,i,n,n1,n2;
char *fname=new char[255];
while (ch!=8)
{ cout<<"1 - sozdat file"<<endl;
cout<<"2 - dobavit zapis"<<endl;
cout<<"3 - udalit zap"<<endl;
cout<<"4 - ispravit zap"<<endl;
cout<<"5 - sort file"<<endl;
cout<<"6 - vyvod faila"<<endl;
cout<<"7 - poisk po failu"<<endl;
cout<<"8 - end of program"<<endl;
cin>>ch;
if (ch==1) {SozdF(fname);}
if (ch==2) {DobZ(fname);VyvF(fname);}
if (ch==3) {UdalZ(fname);VyvF(fname);}
if (ch==4) {IsprZ(fname);VyvF(fname);}
if (ch==5) {SortZ(fname);VyvF(fname);}
if (ch==6) {VyvF(fname);}
if (ch==7) {Poisk(fname);}
}
return 0;
}
void Poisk(char *fname)
{ char *s=new char;
int o;
struct SRasp K;
int i,j;
cout<<"punct prib.:";
gets(s);
cout<<"vremya prib.:";
cin>>o;
FILE *f;
f=fopen(fname,"rb");
j=1;
while (fread(&K,sizeof(SRasp),1,f))
{i=strcmpi(s,K.Pprb);
if ((i==0)&&(K.Prbt.chas<o))
{cout<<j<<": ";
cout<<" "<<K.nomr<<" "<<K.Potp<<" "<<K.Pprb<<endl;
cout<<" "<<K.Otpr.chas<<":"<<K.Otpr.minut<<" "<<K.Prbt.chas<<":"<<K.Prbt.minut<<endl;
j++;
}
cout<<endl;
}
fclose(f);
}
void SozdF(char *fname)
{
FILE *f;
cout<<"name of file:";
cin>>fname;
f=fopen(fname,"wb");
fclose(f);
}
void VyvF(char *fname)
{ struct SRasp K;
int j;
FILE *f;
f=fopen(fname,"rb");
j=1;
while (fread(&K,sizeof(SRasp),1,f))
{cout<<j<<": ";
cout<<" "<<K.nomr<<" "<<K.Potp<<" "<<K.Pprb<<endl;
cout<<" "<<K.Otpr.chas<<":"<<K.Otpr.minut<<" "<<K.Prbt.chas<<":"<<K.Prbt.minut<<endl;
j++;
}
cout<<endl;
fclose(f);
}
void DobZ(char *fname)
{ struct SRasp K;
FILE *f;
f=fopen(fname,"ab");
cout<<endl<<"nomer reysa:";
cin>>(K.nomr);
cout<<endl<<"p. otprav.:";
cin>>(K.Potp);
cout<<endl<<"p. pribyt.:";
cin>>(K.Pprb);
cout<<endl<<"vremya otpr.(chasy):";
cin>>(K.Otpr.chas);
cout<<endl<<"vremya otpr.(minut.):";
cin>>(K.Otpr.minut);
cout<<endl<<"vremya prbt.(chasy):";
cin>>(K.Prbt.chas);
cout<<endl<<"vremya prbt.(minut.):";
cin>>(K.Prbt.minut);
fwrite(&K,sizeof(SRasp),1,f);
fclose(f);
}
void UdalZ(char *fname)
{ struct SRasp K;
int i,j;
FILE *f,*f1;
cout<<"nomer:";
cin>>i;
f=fopen(fname,"r+b");
f1=fopen("fl.bak","wb");
j=1;
while (fread(&K,sizeof(SRasp),1,f))
{if (j!=i) fwrite(&K,sizeof(SRasp),1,f1);
j++; }
fclose(f1);
fclose(f);
f=fopen(fname,"wb");
f1=fopen("fl.bak","rb");
while (fread(&K,sizeof(SRasp),1,f1))
fwrite(&K,sizeof(SRasp),1,f);
fclose(f1);
fclose(f);
}
void IsprZ(char *fname)
{ struct SRasp K;
int i;
FILE *f;
cout<<"nomer:";
cin>>i;
f=fopen(fname,"r+b");
fseek(f,(i-1)*sizeof(SRasp),0);
cout<<endl<<"nomer reysa:";
cin>>(K.nomr);
cout<<endl<<"p. otprav.:";
cin>>(K.Potp);
cout<<endl<<"p. pribyt.:";
cin>>(K.Pprb);
cout<<endl<<"vremya otpr.(chasy):";
cin>>(K.Otpr.chas);
cout<<endl<<"vremya otpr.(minut.):";
cin>>(K.Otpr.minut);
cout<<endl<<"vremya prbt.(chasy):";
cin>>(K.Prbt.chas);
cout<<endl<<"vremya prbt.(minut.):";
cin>>(K.Prbt.minut);
fwrite(&K,sizeof(SRasp),1,f);
fclose(f);
}
void SortZ(char *fname)
{ struct SRasp K,K1;
int ch1,i,b;
FILE *f;
cout<<"1 - po nomeru reysa"<<endl;
cout<<"2 - po punktu pribyt."<<endl;
cout<<"3 - po vremeni otprav"<<endl;
cin>>ch1;
if (ch1==1)
{b=1;
while (b==1)
{ b=0;
i=1;
f=fopen(fname,"r+b");
fseek(f,sizeof(SRasp),0);
while (fread(&K,sizeof(SRasp),1,f))
{fseek(f,(i-1)*sizeof(SRasp),0);
fread(&K1,sizeof(SRasp),1,f);
if (strcmpi(K1.FIO.fam,K.FIO.fam)>0)
if (K1.nomr>K.nomr)
{ fseek(f,(i-1)*sizeof(SRasp),0);
fwrite(&K,sizeof(SRasp),1,f);
fseek(f,i*sizeof(SRasp),0);
fwrite(&K1,sizeof(SRasp),1,f);
b=1;
}
i++;
fseek(f,i*sizeof(SRasp),0);
}
fclose(f);
}
}
if (ch1==2)
{b=1;
while (b==1)
{ b=0;
i=1;
f=fopen(fname,"r+b");
fseek(f,sizeof(SRasp),0);
while (fread(&K,sizeof(SRasp),1,f))
{fseek(f,(i-1)*sizeof(SRasp),0);
fread(&K1,sizeof(SRasp),1,f);
if (strcmpi(K1.Pprb,K.Pprb)>0)
{ fseek(f,(i-1)*sizeof(SRasp),0);
fwrite(&K,sizeof(SRasp),1,f);
fseek(f,i*sizeof(SRasp),0);
fwrite(&K1,sizeof(SRasp),1,f);
b=1;
}
i++;
fseek(f,i*sizeof(SRasp),0);
}
fclose(f);
}
}
if (ch1==3)
{b=1;
while (b==1)
{ b=0;
i=1;
f=fopen(fname,"r+b");
fseek(f,sizeof(SRasp),0);
while (fread(&K,sizeof(SRasp),1,f))
{fseek(f,(i-1)*sizeof(SRasp),0);
fread(&K1,sizeof(SRasp),1,f);
if (K1.Otpr.chas>K.Otpr.chas)
{ fseek(f,(i-1)*sizeof(SRasp),0);
fwrite(&K,sizeof(SRasp),1,f);
fseek(f,i*sizeof(SRasp),0);
fwrite(&K1,sizeof(SRasp),1,f);
b=1;
}
i++;
fseek(f,i*sizeof(SRasp),0);
}
fclose(f);
}
}
}
|
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
1
name of file:Poezd
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
2
nomer reysa:111
p. otprav.:Perm
p. pribyt.:Moscow
vremya otpr.(chasy):12
vremya otpr.(minut.):35
vremya prbt.(chasy):19
vremya prbt.(minut.):45
1: 111 Perm Moscow
12:35 19:45
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
12:35 19:45
4
nomer:1
nomer reysa:132
p. otprav.:Perm
p. pribyt.:Sochi
vremya otpr.(chasy):14
vremya otpr.(minut.):23
vremya prbt.(chasy):19
vremya prbt.(minut.):45
1: 132 Perm Sochi
14:23 19:45
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
6
1: 132 Perm Sochi
14:23 19:45
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
5
1 - po nomeru reysa
2 - po punktu pribyt.
3 - po vremeni otprav
2
1: 132 Perm Sochi
14:23 19:45
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
5
1 - po nomeru reysa
2 - po punktu pribyt.
3 - po vremeni otprav
3
1: 132 Perm Sochi
14:23 19:45
1 - sozdat file
2 - dobavit zapis
3 - udalit zap
4 - ispravit zap
5 - sort file
6 - vyvod faila
7 - poisk po failu
8 - end of program
8
|
Вариант 10. Автор решения: Нагуманов А., группа 121МИ, 2008 год.
1 Справка;
2 фамилия, имя, отчество;
2 название заболевания;
2 дата начала заболевания;
3 день;
3 месяц;
3 год;
2 количество дней нетрудоспособности.
В первой части программа создаёт файл БД и заносит данные.
Во второй части программа работает с готовым файлом БД:
- добавление записи (с использованием дополнительного файла);
- удаление выбранной записи (с использованием дополнительного файла);
- исправление выбранной записи (с использованием дополнительного файла);
- вывод содержимого БД на экран;
- сортировка по выбранному полю (методом вставки: сравнение строк и перемещение меньшей строки в начало, а большей в конец);
- поиск по выбранному полю.
|
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
struct data {int den; int mec; int god;};
struct spravka {char FamIO[20]; char nazv_bolezni[20]; int kol_netrty;struct data mark;};
void main ()
{
spravka stud;
int n,i;
FILE *f;
char s[20];
cout<<endl;
cout<<" Enter file name: ";
cin.getline(s,20);
f=fopen(s,"wb");
cout <<" Kol-vo spravok: ";
cin>>n; cout<<endl;
for (i=1;i<=n;i++)
{
cout<<" "<<i<<"-j spravka: \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>> Nazvanie bolezni: "; cin>>stud.nazv_bolezni;
cout<<" >> Data nachala bolezni.. \n";
cout<<" -- Den: "; cin>>stud.mark.den;
cout<<" --- Mecyac: "; cin>>stud.mark.mec;
cout<<" ------- God: "; cin>>stud.mark.god;
cout<<" --Kjol-vo dnei netr-ti: "; cin>>stud.kol_netrty;
cout<<endl;
fwrite(&stud, sizeof(spravka),1,f);
}
fclose(f);
}
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
struct data {int den; int mec; int god;};
struct spravka {char FamIO[20]; char nazv_bolezni[20]; int kol_netrty; struct data mark;};
spravka reading(FILE *f, int i);
void record(FILE *f, int i, spravka stud);
void main()
{
FILE *f,*fd;
int n,i,pol,j,k,m,punkt,w;
spravka stud;
char s[20],s1[20];
cout<<endl;
cout<<" Imya faila: ";
cin.getline(s,20);
cout<<endl;
cout<<" [ M E N U ]"<<endl;
cout<<" -----------------------------------"<<endl;
cout<<" Dobavit' zapis' --------------> (1)"<<endl;
cout<<" Udalit' zapis' ---------------> (2)"<<endl;
cout<<" Ispravit' zapis' -------------> (3)"<<endl;
cout<<" Vyvod soderzhimogo na ekran --> (4)"<<endl;
cout<<" Sortirovat' ------------------> (5)"<<endl;
cout<<" Poisk ------------------------> (6)"<<endl;
cout<<" Vyhod ------------------------> (7)"<<endl;
cout<<endl;
cout<<" Vyberite punkt menu: "; cin>>punkt;
cout<<endl;
while (punkt!=7)
{
switch (punkt)
{
case 1:
{
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
while (fread(&stud,sizeof(spravka),1,f))
{
fwrite(&stud, sizeof(spravka),1,fd);
}
fclose(fd);
fclose(f);
fd=fopen("vsp.tmp","rb");
f=fopen(s,"wb");
while (fread(&stud,sizeof(spravka),1,fd))
{
fwrite(&stud, sizeof(spravka),1,f);
}
cout<<" Dobavit' zapis': \n";
cout<<" ---------------------+ \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>> Nazvanie bolezni: "; cin>>stud. nazv_bolezni;
cout<<" >> Data nachala bolezni.. \n";
cout<<" -- Den: "; cin>>stud.mark.den;
cout<<" --- Mecyac: "; cin>>stud.mark.mec;
cout<<" ------- God: "; cin>>stud.mark.god;
cout<<" --Kjol-vo dnei netr-ti: "; cin>>stud.kol_netrty;
cout<<endl;
fwrite(&stud, sizeof(spravka),1,f);
fclose(fd);
fclose(f);
}; break;
case 2:
{
cout<<" Udavit' zapis' #: ";
cin>>n;
cout<<endl;
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud,sizeof(spravka),1,f))&&(i<n))
{
fwrite(&stud, sizeof(spravka),1,fd);
i++;
}
while (fread(&stud,sizeof(spravka),1,f))
{
fwrite(&stud, sizeof(spravka),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("vsp.tmp","rb");
while (fread(&stud,sizeof(spravka),1,fd))
{
fwrite(&stud, sizeof(spravka),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 3:
{
cout<<" Ispravit' zapis' #: ";
cin>>n;
cout<<endl;
fd=fopen("vsp.tmp","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&stud,sizeof(spravka),1,f))&&(i<n))
{
fwrite(&stud, sizeof(spravka),1,fd);
i++;
}
cout<<" Novye dannye dlya "<<n<<"-j zapisi: "<<endl;
cout<<" ---------------------+ \n";
cout<<" >>>>> Familiya I.O.: "; cin>>stud.FamIO;
cout<<" >>>> Nazvanie bolezni: "; cin>>stud. nazv_bolezni;
cout<<" >> Data nachala bolezni.. \n";
cout<<" -- Den: "; cin>>stud.mark.den;
cout<<" --- Mecyac: "; cin>>stud.mark.mec;
cout<<" ------- God: "; cin>>stud.mark.god;
cout<<" --Kjol-vo dnei netr-ti: "; cin>>stud.kol_netrty;
cout<<endl;
fwrite(&stud, sizeof(spravka),1,fd);
while (fread(&stud,sizeof(spravka),1,f))
{
fwrite(&stud, sizeof(spravka),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("vsp.tmp","rb");
while (fread(&stud,sizeof(spravka),1,fd))
{
fwrite(&stud, sizeof(spravka),1,f);
}
fclose(fd);
fclose(f);
}; break;
case 4:
{
i=1;
f=fopen(s,"rb");
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
i++;
}
fclose(f);
cout<<endl;
}; break;
case 5:
{
n=0,
f=fopen(s,"r+b");
fseek(f,0,SEEK_SET);
while (fread(&stud,sizeof(spravka),1,f))
{
n++;
}
cout<<" Pole dlya sortirovki:"<<endl;
cout<<" 1 - Familiya I.O."<<endl;
cout<<" 2 - Nazvanie bolezni"<<endl;
cout<<" 3 - Den"<<endl;
cout<<" 4 - Mec"<<endl;
cout<<" 5 - God"<<endl;
cout<<" 6 - Kol-vo dnei netr-ti"<<endl;
cout<<" Vash vybor: ";
cin>>pol;
j=0; k=0; m=0;
spravka B, V;
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1:
{
while (strcmp(B.FamIO,reading(f,j).FamIO)>0)
j++;
break;
};
case 2: {
while (strcmp(B.nazv_bolezni,reading(f,j).nazv_bolezni)>0)
j++;
break;
};
case 3: {
while (B.mark.den>reading(f,j).mark.den)
j++;
break;
};
case 4: {
while (B.mark.mec>reading(f,j).mark.mec)
j++;
break;
};
case 5: {
while (B.mark.god>reading(f,j).mark.god)
j++;
break;
};
case 6: {
while (B.kol_netrty>reading(f,j).kol_netrty)
j++;
break;
};
default:{cout<<"Vvedeno nesuwestvuyuwee pole."<<endl;};
};
for(k=i-1;k>=j;k--)
{
m=k;
V=reading(f,k);
record(f,++m,V);
}
record(f,j,B);
};
fclose(f);
}; break;
case 6:
{
i=0;
cout<<" Pole dlya poiska:"<<endl;
cout<<" 1 - Familiya I.O."<<endl;
cout<<" 2 - Nazvanie bolezni"<<endl;
cout<<" 3 - Den"<<endl;
cout<<" 4 - Mec"<<endl;
cout<<" 5 - God"<<endl;
cout<<" 6 - Kol-vo dnei netr-ti"<<endl;
cout<<" Vash vybor: ";
cin>>pol;
switch (pol)
{
case 1:
{
cout<<" Vvedite Familiyu I.O.: ";
cin>>s1;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (strcmp(s1,stud.FamIO)==0)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
cout<<endl;
}; break;
case 2:
{
cout<<" Vvedite nazv_bolezni: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (strcmp(s1,stud.nazv_bolezni)==0)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
out<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 3:
{
cout<<" Vvedite den nachala bolezni: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (w==stud.mark.den)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 4:
{
cout<<" Vvedite mec nachala bolezni: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +------------------ Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (w==stud.mark.mec)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 5:
{
cout<<" Vvedite god nachala bolezni: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (w==stud.mark.god)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
out<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
case 6:
{
cout<<" Vvedite kol-vo dnei netr-ti: ";
cin>>w;
f=fopen(s,"rb");
int q=0;
cout<<" +----+---------------------+---------------------+-----------------+----------+"<<endl;
cout<<" | | | | Data nachala | |"<<endl;
cout<<" | # | Familiya I.O. | Bolezn +-----------------| Kol_dnei |"<<endl;
cout<<" | | | | Den | Mec | God | netr-ti |"<<endl;
cout<<" +----+---------------------+---------------------+-----+-----+-----+----------+"<<endl;
while (fread(&stud,sizeof(spravka),1,f))
{
i++;
if (w==stud.kol_netrty)
{
cout<<" | ";
cout.width(2);cout<<i;
cout<<" |";
cout.width(20);cout<<stud.FamIO;
cout<<" |";
cout.width(20);cout<<stud.nazv_bolezni;
cout<<" |";
cout.width(2);cout<<stud.mark.den;
cout<<" | ";
cout.width(2);cout<<stud.mark.mec;
cout<<" | ";
cout.width(4);cout<<stud.mark.god;
cout<<" | ";
cout.width(2);cout<<stud.kol_netrty;
cout<<" |"<<endl;
cout<<" +----+---------------------+--------+-----------+-----+-----+-----+-----+"<<endl;
q++;
}
}
fclose(f);
if (q==0)
{
cout<<" | Takih spravok net! |"<<endl;
cout<<" +----^---------------------^--------------------------------------------+"<<endl;
}
}; break;
default:cout<<"Vvedeno nesuwestvuyuwee pole."<<endl;
}
}; break;
default:cout<<"Vy nechego ne vybrali. Prilozhenie budet zakryto"<<endl;
}
cout<<"\n Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)"<<endl;
cout<<" Viberite punkt menu: ";
cin>>punkt;
cout<<endl;
}
fclose(f);
}
spravka reading(FILE *f, int i)
{
spravka vsp;
fseek(f,i*sizeof(spravka),SEEK_SET);
fread(&vsp,sizeof(spravka),1,f);
return vsp;
};
void record(FILE *f, int i, spravka stud)
{
fseek(f,i*sizeof(spravka),SEEK_SET);
fwrite(&stud,sizeof(spravka),1,f);
};
|
Enter file name: 001
Kol-vo spravok: 3
1-j spravka:
>>>>> Familiya I.O.: Ivanov
>>>> Nazvanie bolezni: grip
>> Data nachala bolezni..
-- Den: 8
--- Mecyac: 2
------- God: 2009
--Kjol-vo dnei netr-ti: 8
2-j spravka:
>>>>> Familiya I.O.: Maslaykov
>>>> Nazvanie bolezni: angina
>> Data nachala bolezni..
-- Den: 6
--- Mecyac: 4
------- God: 1
--Kjol-vo dnei netr-ti: 20
3-j spravka:
>>>>> Familiya I.O.: Gerasimov
>>>> Nazvanie bolezni: vcd
>> Data nachala bolezni..
-- Den: 8
--- Mecyac: 6
------- God: 2007
--Kjol-vo dnei netr-ti: 30
Imya faila: 001
[ M E N U ]
-----------------------------------
Dobavit' zapis' --------------> (1)
Udalit' zapis' ---------------> (2)
Ispravit' zapis' -------------> (3)
Vyvod soderzhimogo na ekran --> (4)
Sortirovat' ------------------> (5)
Poisk ------------------------> (6)
Vyhod ------------------------> (7)
Vyberite punkt menu: 1
Dobavit' zapis':
---------------------+
>>>>> Familiya I.O.: Zvorygin
>>>> Nazvanie bolezni: perelom_nogi
>> Data nachala bolezni..
-- Den: 26
--- Mecyac: 8
------- God: 2002
--Kjol-vo dnei netr-ti: 90
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 4
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu: 2
Udavit' zapis' #: 1
Add-(1), Del-(2), Edit-(3), Print-(4), Sort-(5), Search-(6), Exit-(7)
Viberite punkt menu:5
Pole dlya sortirovki:
1 - Familiya I.O.
2 - Nazvanie bolezni
3 - Den
4 - Mec
5 - God
6 - Kol-vo dnei netr-ti
Vash vybor: 1
Viberite punkt menu:6
|
|