Показано с 1 по 1 из 1
Древовидный режим
-
22.12.2010, 14:48 #1
- Регистрация
- 14.02.2010
- Сообщений
- 10
- Сказал(а) спасибо
- 0
- Поблагодарили 0 раз(а) в 0 сообщениях
помогите с прогой пожалуйста
в программе должно быть: создание файла(типа базы данных), запись в файл, загрузка и удаление файла.
вот код:
#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 baza{char name[20];int kolvo;};
struct zapis {float mark;float age; int course; char sex[6];char fio[20];int nz;};
zapis res[30];
int mar=0;
void record(FILE *f, int i, zapis zap1);
void data(int n,char s[20]);
void operate(char s[20]);
void create();
zapis reading(FILE *f, int i);
void main()
{
char s[20];
int wrk,k,num;
baza base;
FILE *f,*sav,*fb;
Choose: system("cls");
cout<<"Create new base------1"<<endl;
cout<<"Load existent base---2"<<endl;
cout<<"Delete data base-----3"<<endl;
cout<<"Exit-----------------4"<<endl;
cout<<endl;
cout<<"Enter your choise: ";
cin>>wrk;
switch (wrk)
{
case 1: create();break;
case 2:
{
k=1;
sav=fopen("data.dnt","rb");
while (fread(&base,sizeof(baza),1,sav))
{
cout<<k<<" . "<<base.name<<endl;
k++;
}
fclose(sav);
cout<<"Enter the number of chosen data base: ";
cin>> num;
k=1;
sav=fopen("data.dnt","rb");
while (fread(&base,sizeof(baza),1,sav))
{
if(k==num) strcpy(s,base.name);
}
fclose(sav);
operate(s);
};break;
case 3:
{
k=1;
sav=fopen("data.dnt","rb");
while (fread(&base,sizeof(baza),1,sav))
{
cout<<k<<". "<<base.name<<endl;
k++;
}
fclose(sav);
cout<<"Enter number of data base you want to delete: ";
cin>>num;
sav=fopen("data.dnt","rb");
f=fopen("system.dnt","wb");
int i=1;
while ((fread(&base,sizeof(baza),1,sav))&&(i<num))//если номер текущей записи меньше нужного, записываемв резервный файл и берем следующую
{
fwrite(&base, sizeof(baza),1,f);
i++;
}//записаны все записи до удаляемой, удаляемая уже прочитана, значит при следующем чтении будет взята следующая после удаляемой
while (fread(&base,sizeof(baza),1,sav))//запись оставшихся записей(после удаляемой)
{
fwrite(&base, sizeof(baza),1,f);
}
fclose(sav);
fclose(f);
sav=fopen("data.dnt","wb");
f=fopen("system.dnt","rb");
while (fread(&base,sizeof(baza),1,f))//запись обратно в наш файл(удаляемой записи уже нет)
{
fwrite(&base, sizeof(baza),1,sav);
}
fclose(sav);
fclose(f);
getch();
goto Choose;
};break;
case 4: exit(1);break;
default: {cout<<"You entered incorrect number, please, choose again"; getch(); goto Choose;}
};
goto Choose;
};
void create()
{
system("cls");
zapis zap1;//это создаваемая запись
baza base;
int n,i,num;
char s[20];
FILE *f,*sav,*fb;
//для имени файла
printf("enter file name(you can't use symbols ?,/,|,\,:,<,>,space) ");
scanf("%s",s);
f=fopen(s,"wb");//открытие файла(создание если нету)
cout <<"count of zapis= ";
cin>>n;//сколько записей
for (i=1;i<=n;i++)
{
cout<<"enter nomer zachetki =";//ввод новой записи
cin>>zap1.nz;
cout<<"enter age =";
cin>>zap1.age;
cout<<"enter sex(male/female) =";
cin>>zap1.sex;//нужен try
cout<<"enter course =";
cin>>zap1.course;
cout<<"enter mark =";
cin>>zap1.mark;
cout<<"enter FIO =";
cin>>zap1.fio;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,f);//запись данных в файл
}
fclose(f);
sav=fopen("data.dnt","rb");
fb=fopen("system.dnt","wb");
while (fread(&base,sizeof(baza),1,sav)) fwrite(&base,sizeof(baza),1,fb);
base.kolvo=n;
strcpy(base.name,s);
fwrite(&base,sizeof(baza),1,fb);
fclose(sav);
fclose(fb);
sav=fopen("data.dnt","wb");
fb=fopen("system.dnt","rb");
while (fread(&base,sizeof(baza),1,fb)) fwrite(&base,sizeof(baza),1,sav);
fclose(sav);
fclose(fb);
cout<<"Do you want to work with this data base? Y(1) / N(2)";
cin>>num;
switch (num)
{
case 1: operate(s);
case 2: exit(0);
};
};
void operate(char s[20])
{
FILE *f,*fd,*sav,*fb;//f -для нашего файла, fd - для резервного файла
int n,g,i,del, corr, output, sort, item, zikl;
int deln, corrn, outn, sortn;
float s1;
zapis zap1;
baza base;
char s2[20],s3[1],a1[20];
system("cls");
cout<<endl;
cout<<"MENU:"<<endl;
cout<<"Enter new data--------------(1)"<<endl;
cout<<"Delete data--------------(2)"<<endl;
cout<<"Change data--------------(3)"<<endl;
cout<<"vivod-(4)"<<endl;
cout<<"Sortirovat------------------(5)"<<endl;
cout<<"Otmena----------------------(8)"<<endl;
cout<<endl;
n=0;
f=fopen(s,"rb");
while (fread(&zap1,sizeof(zapis),1,f))
{
n++;
}
fclose(f);
sav=fopen("data.dnt","rb");
while (fread(&base,sizeof(baza),1,sav))
{
if(strcmp(s,base.name)==0)
g=base.kolvo;
};
fclose(sav);
if (n!=g){cout <<"Eta baza povrezhdena, viberite drygyu"<<endl;getch();return;};
cout<<"Viberite punkt menu ";
cin>>item;
cout<<endl;
//сколько записей
while (item!=8)//работа меню
{
switch (item)
{
case 1:
{
// system("cls");
fd=fopen("system.dnt","wb");//открытие резервного файла для записи\чтения
f=fopen(s,"rb");//открытие нашего файла только для чтения
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);//копирование файла в резервный
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))//копирование обратно
{
fwrite(&zap1, sizeof(zapis),1,f);
}
cout<<"enter nomber of a student record-book = ";//ввод новой записи
cin>>zap1.nz;
cout<<"enter age = ";
cin>>zap1.age;
cout<<"enter sex(male/female) = ";
cin>>zap1.sex;
cout<<"enter course =";
cin>>zap1.course;
cout<<"enter mark = ";
cin>>zap1.mark;
cout<<"enter FIO =";
cin>>zap1.fio;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,f);//запись в наш файл
fclose(fd);//закрытие файлов
fclose(f);
data(n,s);
}; break;
case 2://удаление записи
{
//system("cls");
cout<<"Vvedite nomer zapisi dlya udaleniya ";
cin>>deln;
cout<<endl;
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<deln))//если номер текущей записи меньше нужного, записываемв резервный файл и берем следующую
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}//записаны все записи до удаляемой, удаляемая уже прочитана, значит при следующем чтении будет взята следующая после удаляемой
while (fread(&zap1,sizeof(zapis),1,f))//запись оставшихся записей(после удаляемой)
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))//запись обратно в наш файл(удаляемой записи уже нет)
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
data(n,s);
}; break;
case 3://исправление записи
{
//system("cls");
cout<<"Vvedite nomer zapisi dlya ispravleniya ";
cin>>corrn;
cout<<endl;
int pol;
cout<<endl<<"Vvedite nomer polya dlya redaktirovaniya"<<endl;
cout<<"1 - Nomber of a student record-book"<<endl;
cout<<"2 - Age"<<endl;
cout<<"3 - Sex"<<endl;
cout<<"4 - Course"<<endl;
cout<<"5 - Mark"<<endl;
cout<<"6 - FIO"<<endl;
cin>>pol;
switch (pol)
{
case 1:
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))//ищет нужную запись(как в удалении)
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Nomber of a student record-book =";
cin>>zap1.nz;//изменяет поле "фамилия"
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);//перезаписывает запись
while (fread(&zap1,sizeof(zapis),1,f))//дозаписывает оставшиеся записи в резервный файл
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))//запись обратно в наш файл
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 2://точно так же изменяет иостальные поля
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Age =";
cin>>zap1.age;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 3:
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Enter sex =";
cin>>zap1.sex;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 4:
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Enter course =";
cin>>zap1.course;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 5:
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Vvedite icpravlennii dannii"<<endl;
cout<<"Enter mark =";
cin>>zap1.mark;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
case 6:
{system("cls");
fd=fopen("system.dnt","wb");
f=fopen(s,"rb");
i=1;
while ((fread(&zap1,sizeof(zapis),1,f))&&(i<corrn))
{
fwrite(&zap1, sizeof(zapis),1,fd);
i++;
}
cout<<"Enter FIO=";
cin>>zap1.fio;
cout<<endl;
fwrite(&zap1, sizeof(zapis),1,fd);
while (fread(&zap1,sizeof(zapis),1,f))
{
fwrite(&zap1, sizeof(zapis),1,fd);
}
fclose(fd);
fclose(f);
f=fopen(s,"wb");
fd=fopen("system.dnt","rb");
while (fread(&zap1,sizeof(zapis),1,fd))
{
fwrite(&zap1, sizeof(zapis),1,f);
}
fclose(fd);
fclose(f);
};break;
default:cout<<"Vi neverno vveli znachenie"<<endl;
};
}; break;
case 4://вывод данных на экран
{
system("cls");
i=1;
f=fopen(s,"rb");
cout<<"=========================================== ============================="<<endl;
cout<<"| N p/p * FIO * Age * Sex * Cours * Mark * Nom. r-b. |"<<endl;
cout<<"=========================================== ============================="<<endl;
while (fread(&zap1,sizeof(zapis),1,f))
{
cout<<"|";
cout.width(7);cout<<i;
cout<<"*";
cout.width(7);cout<<zap1.fio;
cout<<"*";
cout.width(9);cout<<zap1.age;
cout<<"*";
cout.width(13);cout<<zap1.sex;
cout<<"*";
cout.width(7);cout<<zap1.course;
cout<<"*";
cout.width(11);cout<<zap1.mark;
cout<<"*";
cout.width(14);cout<<zap1.nz;
cout<<"|"<<endl;
cout<<"=========================================== ============================="<<endl;
i++;
}
fclose(f);
cout<<endl;
}; break;
case 5://сортировка
{
zapis zap1;
int pol;
n=0,
f=fopen(s,"r+b");
fseek(f,0,SEEK_SET);
while (fread(&zap1,sizeof(zapis),1,f))
{
n++;
}
cout<<endl<<"Vvedite nomer polya po kotoromu predpolagaetsya sortirovka"<<endl;
cout<<"1 - FIO"<<endl;
cout<<"2 - Age"<<endl;
cout<<"3 - Sex"<<endl;
cout<<"4 - Mark"<<endl;
cin>>pol;
int i=0,j=0,k=0,m=0;
zapis B,V;
for (i=0;i<n;i++)
{
B=reading(f,i);
j=0;
switch (pol)
{
case 1:
{
while (B.fio>reading(f,j).fio)
j++;
break;
};
case 2: {
while (B.age>reading(f,j).age)
j++;
break;
};
case 3: {
while (strcmp(B.sex,reading(f,j).sex)>0)
j++;
break;
};
case 4: {
while (B.mark>reading(f,j).mark)
j++;
break;
};
default:{cout<<"Sortirovka nevozmozhna"<<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;
default:cout<<"Vi vibrali nevernii punkt"<<endl;
};
cout<<"add-(1), delete-(2), correct-(3), output-(4), sorting-(5), cancel-(6)"<<endl;
cout<<"Viberite punkt menu ";
cin>>item;
cout<<endl;
};
return;
};
///////////////////////////////////////////////////////////////////////////
zapis reading(FILE *f, int i)
{
zapis vsp;
fseek(f,i*sizeof(zapis),SEEK_SET);
fread(&vsp,sizeof(zapis),1,f);
return vsp;
};
void record(FILE *f, int i, zapis zap1)
{
fseek(f,i*sizeof(zapis),SEEK_SET);
fwrite(&zap1,sizeof(zapis),1,f);
};
void data(int n,char s[20])
{FILE *sav,*fb;
baza base;
sav=fopen("data.dnt","rb");
fb=fopen("system.dnt","wb");
n=0;
while (fread(&base,sizeof(baza),1,sav))
{
fwrite(&base,sizeof(baza),1,fb);
n++;}
base.kolvo=n;
strcpy(base.name,s);
fwrite(&base,sizeof(baza),1,fb);
fclose(sav);
fclose(fb);
sav=fopen("data.dnt","wb");
fb=fopen("system.dnt","rb");
while (fread(&base,sizeof(baza),1,fb)) fwrite(&base,sizeof(baza),1,sav);
fclose(sav);
fclose(fb);
}
подскажите что не так написано.
Похожие темы
-
Пожалуйста, помогите!
от yours_truly в разделе Доменные именаОтветов: 8Последнее сообщение: 28.02.2020, 06:17 -
Помогите пожалуйста.
от Dim@@ в разделе Прикладное программированиеОтветов: 4Последнее сообщение: 17.04.2010, 00:38 -
Помогите с прогой и дровами для карты системы видео наблюдения SK1601V
от MetalHamer в разделе Периферийные устройстваОтветов: 0Последнее сообщение: 22.08.2009, 18:53 -
Помогите пожалуйста
от Денис01 в разделе Выбор комплектующихОтветов: 1Последнее сообщение: 15.01.2008, 23:03 -
Помогите с консольной прогой
от coolspot в разделе C\C++Ответов: 0Последнее сообщение: 24.09.2007, 21:13
Социальные закладки