#include<iostream> #include<cstring> #include<cstdio> #include<cctype> #include<cstdlib> #include<algorithm> using namespace std; //好友信息 typedef struct frie{ int num; char name[20]; char sex[4]; int year,month,day; char phone[3][12]; char address[20]; int groupid; }fre; fre *fri=new fre[10010]; //分组信息 typedef struct group{ int id; char name[20]; }gr; int now,size; int se[10010]; gr *group=new gr[25]; //读friend.txt中的内容 void readfriend() { FILE *fp=fopen("friend.txt","r"); if(fp==NULL){ printf("\t\t\t***********fail to open friend.txt***********\n"); } int i; int n; now=0; for(i=0;!feof(fp);i++){ if(fscanf(fp,"%d",&n)==EOF){ break; } fri[n].num=n; if(now<n) now=n; // fscanf(fp,"%s%s %d %d %d %s %s %s %d\n",fri[n].name,,&fri[n].year,,,,fri[n].phone[1],fri[n].phone[2],fri[n].address,&fri[n].groupid); fscanf(fp,"%s",fri[n].name); fscanf(fp,"%s",fri[n].sex); fscanf(fp,"%d",&fri[n].year); fscanf(fp,"%d",&fri[n].month); fscanf(fp,"%d",&fri[n].day); fscanf(fp,"%s",fri[n].phone[0]); fscanf(fp,"%s",fri[n].phone[1]); fscanf(fp,"%s",fri[n].phone[2]); fscanf(fp,"%s",fri[n].address); fscanf(fp,"%d",&fri[n].groupid); } size=i; now=now+1; fclose(fp); printf("\t\t\t************read friend.txt success!**************\n"); } void readgroup() { FILE *fp=fopen("group.txt","r"); if(fp==NULL){ printf("\t\t\t***********fail to open group.txt***********\n"); } int i; while(!feof(fp)){ if(fscanf(fp,"%d",&i)==EOF){ break; } group[i].id=i; fscanf(fp,"%s",group[i].name); } fclose(fp); printf("\t\t\t************read group.txt success!**************\n"); } void print(fre f)//输出格式 { /* printf("%4d%20s %4c%5d%6d%5d%12s%12s%12s%20s%4d\n",fri[i].num,fri[i].name,fri[i].sex,fri[i].year, fri[i].month,fri[i].day,fri[i].phone[0],fri[i].phone[1],fri[i].phone[2],fri[i].address, fri[i].groupid); */ printf("%4d",f.num); printf("%24s",f.name); if(f.sex[0]!=‘o‘){ printf("%4s",f.sex); } else{ printf("%4s"," "); } if(f.year==0&&f.month==0&&f.day==0){ printf("%5s%6s%5s"," "," "," "); } else{ printf("%5d%6d%5d",f.year,f.month,f.day); } for(int i=0;i<3;i++){ if(f.phone[i][0]!=‘0‘) printf("%12s",f.phone[i]); else{ printf("%12s"," "); } } printf("%20s%4d%20s\n",f.address,f.groupid,group[f.groupid].name); } void print2(gr g){ printf("%4d%20s\n",g.id,g.name); } void begin() { //cout<<"input i for insert,s for select,d for delete,u for update,p for display:"<<endl; printf("\t\t\t************i for insert function!************\n"); printf("\t\t\t************s for select function!************\n"); printf("\t\t\t************d for delete function!************\n"); printf("\t\t\t************u for update function!************\n"); printf("\t\t\t************p for display function!************\n"); printf("\t\t\t************e for exit the system!************\n"); } void insert(fre &f) { printf("\t\t**********insert begin!***********\n"); f.num=now; printf("please input name:\n"); cin>>f.name; printf("please input sex 男,女 and o for no:\n"); //g gor girl,b for boy,o for no cin>>f.sex; printf("please input birthday as yyyy-mm-dd and 0 0 0 for no:\n"); scanf("%d-%d-%d",&f.year,&f.month,&f.day); int n; for(int i=0;i<3;i++){ f.phone[i][0]=‘0‘; } cout<<"how many phone you want to save:"<<endl; cin>>n; for(int i=0;i<n;i++){ printf("please input phone:\n"); scanf("%s",f.phone[i]); } printf("please input address :\n"); scanf("%s",f.address); printf("please input group id if no this please create:\n"); cin>>f.groupid; if(group[f.groupid].name[0]==‘\0‘){ cout<<"please create group name:"<<endl; group[f.groupid].id=f.groupid; scanf("%s",group[f.groupid].name); cout<<group[f.groupid].name<<" created!"<<endl; } now++; size++; } //展示所有内容 void display() { printf("\t\t\t************display all**************\n"); if(size>0){ printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1", "phone2","phone3","address","id","groupname"); for(int i=0;i<now;i++){ if(fri[i].num!=-1) print(fri[i]); } } printf("%10s%20s\n","groupid","groupname"); for(int i=0;i<25;i++){ if(group[i].name[0]!=‘\0‘){ print2(group[i]); } } } void select() { printf("\t\t\t***********update begin!*************\n"); int n; cout<<"please input how you want to select:"<<endl; cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl; cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl; cout<<"0 for end selece!"<<endl; for(int i=0;i<now;i++){ se[i]=i; } int i,s,j; s=now; while(cin>>n){ switch(n){ case 0: if(s!=0){ printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1", "phone2","phone3","address","id","groupname"); for(int i=0;i<s;i++){ print(fri[se[i]]); } } return; case 1: int nu; cout<<"please input num:"<<endl; cin>>nu; if(nu<now&&fri[nu].num!=-1){ printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1", "phone2","phone3","address","id","groupname"); print(fri[nu]); } else{ cout<<"there is no that match you!"<<endl; } return; case 2: j=0; cout<<"please input name:"<<endl; char na[20]; cin>>na; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].name,na)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 3: j=0; cout<<"please input sex:"<<endl; char c[4]; cin>>c; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].sex,c)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 4: j=0; cout<<"please input birthday:"<<endl; int y,m,d; scanf("%d-%d-%d",&y,&m,&d); for(int i=0;i<s;i++){ if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 5: j=0; cout<<"please input phone:"<<endl; char p[12]; cin>>p; for(int i=0;i<s;i++){ for(int k=0;k<3;k++){ if(strcmp(p,fri[se[i]].phone[k])==0) { se[j++]=se[i]; break; } } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 6: j=0; cout<<"please input address:"<<endl; char a[20]; cin>>a; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].address,a)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 7: j=0; cout<<"please input group id:"<<endl; int b; cin>>b; for(int i=0;i<s;i++){ if(fri[se[i]].groupid==b){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 8: j=0; cout<<"please input group name:"<<endl; char nm[20]; cin>>nm; int mo; mo=-1; for(int i=0;i<25;i++){ if(strcmp(group[i].name,nm)==0) { mo=i; break; } } if(mo==-1){ cout<<"no this group name!"<<endl; return; } else{ for(int i=0;i<s;i++){ if(mo==fri[se[i]].groupid) se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; default: cout<<"input error please retry"<<endl; } } } //怎么改变friend void modify(fre &f) { int n; cout<<"please select which you want to update:"<<endl; cout<<"2 for name,3 for sex,4 for birthday"<<endl; cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl; cin>>n; switch(n){ case 2: cout<<"please input update name:"<<endl; char na[20]; cin>>na; strcpy(f.name,na); break; case 3: cout<<"please input update sex:"<<endl; char c[4]; cin>>c; strcpy(f.sex,c); break; case 4: cout<<"please input update birthday:"<<endl; int y,m,d; scanf("%d-%d-%d",&y,&m,&d); f.year=y; f.day=d; f.month=m; break; case 5: cout<<"please input update phone:"<<endl; char p[12]; cin>>p; strcpy(f.phone[0],p); break; case 6: cout<<"please input update address:"<<endl; char a[20]; cin>>a; strcpy(f.address,a); break; case 7: cout<<"please input update group id:"<<endl; int b; cin>>b; f.groupid=b; break; case 8: cout<<"please input update group name:"<<endl; char nm[20]; cin>>nm; strcpy(group[f.groupid].name,nm); break; default: cout<<"input error please retry"<<endl; break; } } void update() { printf("\t\t\t***************update begin!*************\n"); int n; cout<<"please first select which you want to update :"<<endl; cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl; cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl; cout<<"0 for end selece and delete begin!"<<endl; for(int i=0;i<now;i++){ se[i]=i; } int i,s,j; s=now; while(cin>>n){ switch(n){ case 0: if(s!=0){ for(int i=0;i<s;i++){ modify(fri[se[i]]); } } return; case 1: int nu; cout<<"please input num:"<<endl; cin>>nu; if(nu<now&&fri[nu].num!=-1){ modify(fri[nu]); } else{ cout<<"there is no that match you!"<<endl; } return; case 2: j=0; cout<<"please input name:"<<endl; char na[20]; cin>>na; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].name,na)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 3: j=0; cout<<"please input sex:"<<endl; char c[4]; cin>>c; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].sex,c)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 4: j=0; cout<<"please input birthday:"<<endl; int y,m,d; scanf("%d-%d-%d",&y,&m,&d); for(int i=0;i<s;i++){ if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 5: j=0; cout<<"please input phone:"<<endl; char p[12]; cin>>p; for(int i=0;i<s;i++){ for(int k=0;k<3;k++){ if(strcmp(fri[se[i]].phone[k],p)==0) se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 6: j=0; cout<<"please input address:"<<endl; char a[20]; cin>>a; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].address,a)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 7: j=0; cout<<"please input group id:"<<endl; int b; cin>>b; for(int i=0;i<s;i++){ if(fri[se[i]].groupid==b){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 8: j=0; cout<<"please input group name:"<<endl; char nm[20]; cin>>nm; int mo; mo=-1; for(int i=0;i<25;i++){ if(strcmp(group[i].name,nm)==0) { mo=i; break; } } if(mo==-1){ cout<<"no this group name!"<<endl; return; } else{ for(int i=0;i<s;i++){ if(mo==fri[se[i]].groupid) se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; default: cout<<"input error please retry"<<endl; break; } } } void dele() { printf("\t\t\t***********delete begin!************\n"); int n; cout<<"please input how you want to delete by:"<<endl; cout<<"1 for num,2 for name,3 for sex,4 for birthday"<<endl; cout<<"5 for phone,6 for address,7 for group id,8 for group name"<<endl; cout<<"0 for end selece and delete begin!"<<endl; for(int i=0;i<now;i++){ se[i]=i; } int i,s,j; s=now; while(cin>>n){ switch(n){ case 0: if(s!=0){ size-=s; printf("%4s%20s%4s%5s%6s%5s%12s%12s%12s%20s%4s%20s\n","num","\tname","sex","year","month","day","phone1", "phone2","phone3","address","id","groupname"); for(int i=0;i<s;i++){ fri[se[i]].num=-1; strcpy(fri[se[i]].name,"\0"); fri[se[i]].sex[0]=‘o‘; fri[se[i]].year=0; fri[se[i]].month=0; fri[se[i]].day=0; for(int j=0;j<3;j++){ fri[se[i]].phone[j][0]=‘0‘; } strcmp(fri[se[i]].address,"\0"); fri[se[i]].groupid=-1; } } return; case 1: int nu; cout<<"please input num:"<<endl; cin>>nu; if(nu<now&&fri[nu].num!=-1){ fri[nu].num=-1; strcpy(fri[nu].name,"\0"); fri[nu].sex[0]=‘o‘; fri[nu].year=0; fri[nu].month=0; fri[nu].day=0; for(int i=0;i<3;i++){ fri[se[i]].phone[i][0]=‘0‘; } strcmp(fri[nu].address,"\0"); fri[nu].groupid=-1; size--; } else{ cout<<"there is no that match you!"<<endl; } return; case 2: j=0; cout<<"please input name:"<<endl; char na[20]; cin>>na; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].name,na)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 3: j=0; cout<<"please input sex:"<<endl; char c[4]; cin>>c; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].sex,c)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 4: j=0; cout<<"please input birthday:"<<endl; int y,m,d; scanf("%d-%d-%d",&y,&m,&d); for(int i=0;i<s;i++){ if(fri[se[i]].year==y&&fri[se[i]].month==m&&fri[se[i]].day==d){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 5: j=0; cout<<"please input phone:"<<endl; char p[12]; cin>>p; for(int i=0;i<s;i++){ for(int k=0;k<3;k++){ if(strcmp(fri[se[i]].phone[k],p)==0) se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 6: j=0; cout<<"please input address:"<<endl; char a[20]; cin>>a; for(int i=0;i<s;i++){ if(strcmp(fri[se[i]].address,a)==0){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 7: j=0; cout<<"please input group id:"<<endl; int b; cin>>b; for(int i=0;i<s;i++){ if(fri[se[i]].groupid==b){ se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; case 8: j=0; cout<<"please input group name:"<<endl; char nm[20]; cin>>nm; int mo; mo=-1; for(int i=0;i<25;i++){ if(strcmp(group[i].name,nm)==0) { mo=i; break; } } if(mo==-1){ cout<<"no this group name!"<<endl; return; } else{ for(int i=0;i<s;i++){ if(mo==fri[se[i]].groupid) se[j++]=se[i]; } } s=j; if(j==0){ cout<<"there is no that match you!"<<endl; } break; default: cout<<"input error please retry"<<endl; break; } } } void save() { FILE *fp=fopen("friend.txt","w"); if(fp==NULL){ printf("打开friend.txt不成功!\n"); } for(int i=0;i<now;i++) { if(fri[i].num!=-1) { fprintf(fp,"%d %s %s %d %d %d %s %s %s %s %d\n",fri[i].num,fri[i].name,fri[i].sex,fri[i].year,fri[i].month,fri[i].day,fri[i].phone[0], fri[i].phone[1],fri[i].phone[2],fri[i].address,fri[i].groupid); } } fclose(fp); FILE *f=fopen("group.txt","w"); if(fp==NULL){ printf("打开group.txt不成功!\n"); } for(int i=0;i<25;i++){ if(group[i].name[0]!=‘\0‘){ fprintf(f,"%d %s\n",group[i].id,group[i].name); } } fclose(f); printf("\t\t\t*********谢谢使用*********\n"); } int main() { printf("\t\t\t**************system begin!************\n"); char o; int sta=1; for(int i=0;i<25;i++) { group[i].name[0]=‘\0‘; } readfriend(); readgroup(); // freopen("in.txt","r",stdin); begin(); while(cin>>o){ switch(o){ case ‘p‘: display(); break; case ‘i‘: insert(fri[now]);//如果没有该groupid则创建此id的name break; case ‘s‘: select(); break; case ‘d‘: dele(); break; case ‘u‘: update(); break; case ‘e‘: save(); return 0; default: cout<<"input error please try again:"<<endl; break; } begin(); } return 0; }
时间: 2024-12-30 14:56:50