
Шустрый

Профиль
Группа: Участник
Сообщений: 106
Регистрация: 31.1.2006
Репутация: нет Всего: нет
|
срочно надо разобраться почему не выводится записи и создается пустой файл??? вот текст проги | Код | #include <fstream.h> #include <GRAPHICS.H> #include <iomanip.h> #include <conio.h> #include <iostream.h> #include <STRING.H> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> int menu(); void poisk(); /*sozdanie(); print(); edit(); append(); del(); poisk(); sort(); */ int get(int min, long max); int garaph(void); int kol,i; const int n =500; struct TV { char name[15]; char firma[15]; long double price; int razr; int kol; int num; }; //===============GRAPHIKA============ void init_gr(void) { int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, ""); errorcode = graphresult(); if (errorcode != grOk) { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); } } void end_gr(void) { closegraph(); } void SetFillStyle(int pattern,int color) { setfillstyle(pattern,color); } void Bar(int x1, int y1, int x2, int y2) { bar(x1,y1,x2,y2); } void SetRGBPalette(int colornum, int red, int green, int blue) { setrgbpalette(colornum,red,green,blue); }
void GetPalette(struct palettetype far *palette) { getpalette(palette); } #define N 30 struct palettetype pal; struct {int R;int G;int B;} colors[16]; int graph(void) { init_gr(); GetPalette(&pal); for(int i=0;i<pal.size-1;i++) { colors[i+1].R=0; colors[i+1].G=30-2*i; colors[i+1].B=15+i*2; SetRGBPalette(pal.colors[i+1],colors[i+1].R,colors[i+1].G,colors[i+1].B); } for (i=1;i<16;i++) { SetFillStyle(SOLID_FILL,i); Bar((i-1)*43,0,i*43,479); } for (int j=0;j<N;j++) { for (i=1;i<pal.size;i++) SetRGBPalette(pal.colors[i], colors[i].R*(1-(float)j/N), colors[i].G*(1-(float)j/N), colors[i].B*(1-(float)j/N)); } for (j=0;j<N;j++) { for (i=1;i<pal.size;i++) SetRGBPalette(pal.colors[i], colors[i].R*(float)j/N, colors[i].G*(float)j/N, colors[i].B*(float)j/N); }
getch();
end_gr(); return 0; } //===============MENU char omenu[8][20]={"SOZDANIE NOVOY BD", "PROSMOTR BD", "REDAKTIROVANIE BD", "DOBAVLENIE ZAPISEY", "YDALENIE ZAPISEY", "POISK ZAPISEY", "SORTIROVKA", "EXIT" };
int menu() {
int p=1,i,ch,x=100; while(p==1) {
clrscr(); for(i=0;i<9;i++) {x=x+15; if(i == ch) printf("\n->%s<-", omenu[i]); else printf("\n %s", omenu[i]); } printf("\n\nklavishi vverh vniz, vybor ENTER"); int c = getch(); switch(c) { case 72: --ch;break; case 80: ++ch;break; case 13: p = 0;break; default:break; } if(ch < 0) ch = 8 - 1; if(ch >= 8) ch = 0; } return ch; } //===========Avtor
//================sozdanie bd int sozdanie() { char name[50]; clrscr(); cout<<"vvedite im9 fila"<<endl; cin>>name; ofstream baza(name,ios::trunc|ios::binary);
if (!baza) {cout<<"ERROR"; getch(); return 1; } i=0; TV s; char ch='y';
do { clrscr(); cout<<"naimenovanie\n->"; cin>>s.name; baza.write(s.name,15); cout<<"vvedite firmy igotovilet'\n->"; cin>>s.firma; baza.write(s.firma,15); cout<<"cena\n->"; s.price=get(1,99999); baza.write((char *) &s.price,sizeof(int)); cout<<"razmer ekrana\n->"; s.razr=get(1,999); baza.write((char *) &s.razr,sizeof(int)); cout<<"kolichestvo\n->"; s.kol=get(1,9999); baza.write((char *) &s.kol,sizeof(int)); s.num=i++; baza.write((char *) &s.num,sizeof(int)); clrscr(); cout<<"Hotite dobavit' dannye?\n"; cout<<"DA 'y' NET 'n'"; cin>>ch; } while((ch=='y')||(ch=='Y')); cout<<"\ndannye dobavleny\n"; baza.close(); menu(); getch(); return 0; } //============dobavlenie zapisey v bd int append() { char name[50]; clrscr(); cout<<" vvedite im9 fila\n->"<<endl; cin>>name; clrscr(); ofstream baza(name,ios::app);
if (!baza) {cout<<"ERROR"; getch(); return 1; }
TV s; char ch='y'; fread((int*)&kol, 1, sizeof(kol),0); do { clrscr(); s.num=i++; baza.write((char *) &s.num,sizeof(int)); cout<<"naimenovanie\n->"; cin>>s.name; baza.write(s.name,15); cout<<"vvedite firmy igotovilet'\n->"; cin>>s.firma; baza.write(s.firma,15); cout<<"cena\n->"; s.price=get(1,99999); baza.write((char *) &s.price,sizeof(int)); cout<<"razmer ekrana\n->"; s.razr=get(1,999); baza.write((char *) &s.razr,sizeof(int)); cout<<"kolichestvo\n->"; s.kol=(1,9999); baza.write((char *) &s.kol,sizeof(int));
clrscr(); cout<<"Hotite dobavit' dannye?\n"; cout<<"DA 'y' NET 'n'"; cin>>ch;} while((ch=='y')||(ch=='Y'));
cout<<"\ndannye dobavleny\n"; baza.close(); menu(); getch(); return 0; } //==============vavod int print() { clrscr(); char name[50]; cout<<" vvedite im9 fila "<<endl; cin>>name; clrscr();
ifstream baza(name,ios::in); if (!baza) {cout<<"ERROR"; getch(); return 1; }
TV s; clrscr(); cout<<setw(20)<<"naimenovanie"<<setw(20)<<"firma igotovitel"<<setw(6)<<"cena"<<setw(10)<<"raz ekr"<<setw(10)<<"kol"<<endl;
do { baza.read(s.name,15); baza.read(s.firma,15); baza.read((char *)&s.price,sizeof(int)); baza.read((char *)&s.razr,sizeof(int)); baza.read((char *)&s.kol,sizeof(int)); cout<<setw(20)<<s.name<<setw(20)<<s.firma<<setw(6)<<s.price<<setw(10)<<s.razr<<setw(10)<<s.kol<<endl; } while (baza.peek()!=EOF);
baza.close();menu(); getch(); return 0; } //================sort char msort[5][50]={"naimenovaniu", "firme izgotovitelu", "stoimosti", "razmeru ekrana", "kolichestvy na sklade" }; int mesort() { clrscr(); int ch = 0; int l = 1,i; while(l == 1) { clrscr(); for(i=0;i<5;++i) { if(i == ch) printf("\n->%s<-", msort[i]); else printf("\n %s", msort[i]); } cout<<"\n\nklavishi vverh vniz, ENTER vybor"; int c = getch(); switch(c) { case 72: --ch;break; case 80: ++ch;break; case 13: l = 0;break; default:break; }
if(ch < 0) ch = 5 - 1; if(ch >= 8) ch = 0; } return ch; } TV t,ss[n]; void sdb(TV & a,TV & b) { t = a; a = b; b = t; } void sort() { char name1[50]; cout<<" vvedite im9 fila "<<endl; cin>>name1; clrscr();
ifstream baza(name1,'rw'); if (!baza) {cout<<"ERROR"; getch(); //return 1; } FILE *f=fopen(name1, "rb"); TV s; clrscr(); fread((int*)&kol, 1, sizeof(kol), f); cout<<"sortirovat' po\n"; int c = mesort(); switch(c) { case 0: { for(int i=0;i<kol;++i) for(int k=0;k<kol-1;++k) if(strcmp(ss[k].name, ss[k+1].name) > 0)sdb(ss[k], ss[k+1]); break; } case 1: { for(int i=0;i<kol;++i) for(int k=0;k<kol-1;++k) if(strcmp(ss[k].firma, ss[k+1].firma) > 0)sdb(ss[k], ss[k+1]); break; } case 2: { for(int i=0;i<kol;++i) for(int k=0;k<kol-1;++k) if(ss[k].price> ss[k+1].price)sdb(ss[k], ss[k+1]); break; } case 3: { for(int i=0;i<kol;++i) for(int k=0;k<kol-1;++k) if(ss[k].razr > ss[k+1].razr)sdb(ss[k], ss[k+1]); break; } case 4: { for(int i=0;i<kol;++i) for(int k=0;k<kol-1;++k) if(ss[k].kol> ss[k+1].kol)sdb(ss[k], ss[k+1]); break; }
} } //================poisk void poisk() {clrscr(); char name1[50]; cout<<" vvedite im9 fila "<<endl; cin>>name1; clrscr(); TV s; ifstream baza(name1,'r'); if (!baza) {cout<<"ERROR"; getch(); //return 1; } clrscr(); cout<<"POISK!!\n"; cout<<"vaberite parametk dl9 poika\n"; cout<<"1. naimenovanie\n"; cout<<"2. firma igotovitel\n->"; int n; cin>>n; char a[20]; switch(n) { case 1:{
cout<<"vvedite naimenovanie->"; cin>>a;
do { if(strcmp(s.name,a)==0) {cout<<setw(20)<<"naimenovanie"<<setw(20)<<"firma igotovitel"<<setw(6)<<"cena"<<setw(5)<<"razmer ekrana"<<setw(5)<<"kol na sklade"<<endl; baza.read(s.name,15); baza.read(s.firma,15); baza.read((char *)&s.price,sizeof(int)); baza.read((char *)&s.razr,sizeof(int)); baza.read((char *)&s.kol,sizeof(int)); cout<<setw(20)<<s.name<<setw(20)<<s.firma<<setw(6)<<s.price<<setw(5)<<s.razr<<setw(5)<<s.kol<<endl; } else cout<<"POISK NE DAL REZYLTATOV"; } while (baza.peek()!=EOF);
}break; case 2:{
cout<<"vvedite firmu->"; cin>>a;
do { if(strcmp(s.firma,a)==0) {cout<<setw(20)<<"naimenovanie"<<setw(20)<<"firma igotovitel"<<setw(6)<<"cena"<<setw(5)<<"razmer ekrana"<<setw(5)<<"kol na sklade"<<endl; baza.read(s.name,15); baza.read(s.firma,15); baza.read((char *)&s.price,sizeof(int)); baza.read((char *)&s.razr,sizeof(int)); baza.read((char *)&s.kol,sizeof(int)); cout<<setw(20)<<s.name<<setw(20)<<s.firma<<setw(6)<<s.price<<setw(5)<<s.razr<<setw(5)<<s.kol<<endl; } else cout<<"POISK NE DAL REZYLTATOV";} while (baza.peek()!=EOF); }break; default:cout<<"net takogo punkta\n";break; } baza.close();menu(); getch(); //return 0; } //================osnovnaia proga void main() { graph();avtor(); if(avtor() != 27) { int l = 1; while(l == 1) { int p = menu(); switch(p) { case 0: sozdanie(); break; case 1: print(); break; // case 2: edit(); break; case 3: append(); break; //case 4: del(); break; case 5: poisk(); break; case 6: sort(); break; // case 7: exit(); break;
} } }
} //=====================GET int get(int min, long max) { int i = 0;
fscanf(stdin, "%d", &i); fflush(stdin); while ((i==0)||(i>max)||(i<min)) { gotoxy(1,wherey()); cprintf("\nWrong input, try again (%d - %d): ", min,max); fscanf(stdin, "%d", &i); fflush(stdin); } return i; }
|
как зделать редактирование записей, надеюсь на скорую помощь
|