Ок, теперь код программы полностью готов:
| Код | #include <conio.h> #include <stdio.h> #include <iostream.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #include <fstream.h>
void add(FILE *out, char sur[], char name[], char tel[], char fname[]) { if((out=fopen(fname, "at")) == NULL) { cout<<"ЋиЁЎЄ . ” ©« Ґ ©¤Ґ Ё«Ё Ґ бгйҐбвўгҐв."; return; }
cout<<endl<<"‚ўҐ¤ЁвҐ д ¬Ё«Ёо: "; cin>>sur; cout<<"‚ўҐ¤ЁвҐ Ё¬п: "; cin>>name; cout<<"‚ўҐ¤ЁвҐ ®¬Ґа ⥫Ґд® : "; cin>>tel; fprintf(out, "\n%s %s %s", sur, name, tel); cout<<endl<<"‡ ЇЁбм ¤®Ў ў«Ґ ."<<endl; fclose(out); getch(); return; }
int search(FILE *in, char fname[]) { char surf[20]; char sur[40]; int n=0;
if((in=fopen(fname, "rt")) == NULL) { cout<<"ЋиЁЎЄ . ” ©« Ґ ©¤Ґ Ё«Ё Ґ бгйҐбвўгҐв."; return(0); }
cout<<endl<<"‚ўҐ¤ЁвҐ д ¬Ё«Ёо: "; cin>>surf;
if((surf[0] >='a' && surf[0] <='z')||(surf[0] >='а' && surf[0] <='я')) { surf[0] -=32; }
cout<<endl; while(!feof(in)) { fscanf(in, "%s", sur);
if(!strcmp(sur,surf)) { fgets(sur,sizeof(sur),in); cout<<surf<<sur; n++; } } if(n) cout<<endl<<endl<<"Ќ ©¤Ґ® § ЇЁбҐ©: "<<n; else cout<<"‡ ЇЁбҐ© б д ¬Ё«ЁҐ© "<<surf<<" Ґ бгйҐбвўгҐв.";
fclose(in); getch(); return(n); }
void del(FILE *in, char fname[]) { char del[40]; char exr[40]; char c; int i=0; int f=0;
if((in=fopen(fname, "rt")) == NULL) { cout<<"ЋиЁЎЄ . ” ©« Ґ ©¤Ґ Ё«Ё Ґ бгйҐбвўгҐв."; return; }
int n=search(in, fname); if(n==0)return;
cout<<endl<<endl<<"Џ®«®бвмо ўўҐ¤ЁвҐ г¤ «пҐ¬го § ЇЁбм:"<<endl; cin.get(); cin.getline(del,sizeof(del)); ofstream tmp("tmp.txt");
while(!feof(in)) { exr[i]=0; fgets(exr,40,in); int z=strlen(exr); if (exr[z-1]==10 || exr[z-1]==13) exr[z-1]=0; if (exr[z-2]==10 || exr[z-2]==13) exr[z-2]=0; if(!strcmp(del,exr)){f++; continue;} else tmp<<exr<<endl; }
if(f==0) { cout<<endl<<"‚ўҐ¤Ґ п ў ¬Ё § ЇЁбм Ґ бгйҐбвўгҐв."; getch(); return; } tmp.close(); ifstream tmd("tmp.txt"); ofstream oct(fname); while(!tmd.eof()) { tmd.getline(exr,sizeof(exr)); if(exr[i]==NULL)continue; oct<<exr<<endl; } tmd.close(); oct.close(); cout<<"‡ ЇЁбм г¤ «Ґ ."; getch(); return; }
void edit(FILE *in, char fname[]) { char del[40]; char nst[40]; char exr[40]; char c; int i=0; int f=0;
if((in=fopen(fname, "rt")) == NULL) { cout<<"ЋиЁЎЄ . ” ©« Ґ ©¤Ґ Ё«Ё Ґ бгйҐбвўгҐв."; return; }
int n=search(in, fname); if(n==0)return;
cout<<endl<<endl<<"Џ®«®бвмо ўўҐ¤ЁвҐ § ЇЁбм ¤«п । ЄвЁа®ў Ёп:"<<endl; cin.get(); cin.getline(del,sizeof(del)); cout<<endl<<endl<<"‚ўҐ¤ЁвҐ ®ўл© ў аЁ в:"<<endl; cin.getline(nst,sizeof(nst));
ofstream tmp("tmp.txt");
while(!feof(in)) { exr[i]=0; fgets(exr,40,in); int z=strlen(exr); if (exr[z-1]==10 || exr[z-1]==13) exr[z-1]=0; if (exr[z-2]==10 || exr[z-2]==13) exr[z-2]=0; if(!strcmp(del,exr)) { f++; tmp<<nst<<endl; } else tmp<<exr<<endl; }
if(f==0) { cout<<endl<<"‚ўҐ¤Ґ п ў ¬Ё § ЇЁбм Ґ бгйҐбвўгҐв."; return; } tmp.close(); ifstream tmd("tmp.txt"); ofstream oct(fname); while(!tmd.eof()) { tmd.getline(exr,sizeof(exr)); if(exr[i]==NULL)continue; oct<<exr<<endl; } tmd.close(); oct.close(); cout<<endl<<"‡ ЇЁбм Ё§¬ҐҐ ."; getch(); return; }
void shutd(char key) { cout<<endl<<"‚л 㢥аҐл? (Y/N)"; while(1) { key=toupper(getch()); if(key=='Y')exit(1); if(key=='N'); if(key!='Y' && key!='N')continue; } }
void menu(FILE *in, FILE *out, char fname[]) { char sur[20]; char name[20]; char tel[10]; char key; int cod;
clrscr();
cout<<"Џа®Ја ¬¬ ¤«п а Ў®вл б Ў § ¬Ё ¤ ле."<<endl<<endl; cout<<"1. „®Ў ўЁвм § ЇЁбм"<<endl; cout<<"2. ђҐ¤ ЄвЁа®ў вм § ЇЁбм"<<endl; cout<<"3. ?бЄ вм § ЇЁбм"<<endl; cout<<"4. “¤ «Ёвм § ЇЁбм"<<endl; cout<<"5. ‚л室"<<endl<<endl; cout<<"‚ўҐ¤ЁвҐ ®¬Ґа ¤Ґ©бвўЁп: "; cin>>cod;
switch(cod) { case 1: add(out, sur, name, tel, fname); break; case 2: edit(in,fname); break; case 3: search(in, fname); break; case 4: del(in, fname); break; case 5: shutd(key); break; } }
void main() { char fname[40]; FILE *in; FILE *out;
clrscr();
cout<<"Џа®Ја ¬¬ ¤«п а Ў®вл б Ў § ¬Ё ¤ ле."<<endl; cout<<"‚ўҐ¤ЁвҐ Їгвм Є д ©«г Ў §л (Є ЇаЁ¬Ґаг: f:\\lab\\db.txt):"<<endl<<endl; cin.getline(fname,sizeof(fname));
if((in=fopen(fname, "rt")) == NULL) { while((in=fopen(fname, "rt")) == NULL) { cout<<endl<<"ЋиЁЎЄ . ” ©« Ґ ©¤Ґ Ё«Ё Ґ бгйҐбвўгҐв."<<endl; cout<<"‚ўҐ¤ЁвҐ Їа ўЁ«мл© Їгвм Є д ©«г Ў §л:"<<endl; cin.getline(fname,sizeof(fname)); } } menu(in,out,fname); }
|
осталась лишь одна небольшая проблемка (либо я туплю, либо так сделать нельзя...в общем)...нужно, к примеру, после окончания работы ф-ии del (edit, search и так далее) вызвать ф-ию menu. Т.е. стандартно говоря, после выполнения операции вернуться к главному меню программы. Т.к. функция menu определена после всех рабочих ф-ий, из них вызвать не получается, нужен прототип. Ставить меню на первое место так же не получится, в ней свич на все рабочие ф-ии, которые так же будут просить прототайп. Замкнутый круг.....в том вопрос. Возможно ли сделать вызов menu функции из других? Думаю, возможно, просто я туплю....тем не менее, в хелпе ничего не понял....прототип все равно требует... Добавлено @ 13:15 на кодировку внимания не обращайте, дос-кодировка, единственный нормальный способ борландом 3.11 делать русскую писанину под дос) |