#include #include #include #include #define LEN sizeof(struct info) struct info { char word[40]; char mean[40]; }; struct info inf[400]; int m=0; void enter(); void add(); void Delete(); void Edit(); void enter() { int i,m=0; char n; char to[40]; printf("请输入单词: "); scanf("%s",to); FILE *fp; if((fp=fopen("data.txt","ab+"))==NULL) { printf("文件不存在!\n"); exit(1); } while(!feof(fp)) { if(fread(&inf[m],LEN,1,fp)==1) { if(strcmp(to,inf[m].word)==0) { printf("%s ",to); printf("%s\n",inf[m].mean); printf("是否继续?"); printf("按Y或y表示继续,按其它键返回\n"); fclose(fp); return; } } m++; } printf("无此单词!\n"); printf("是否继续?"); printf("按Y或y表示继续,按其它键返回\n"); fclose(fp); return; if(m==0) printf("文件中无记录!\n"); if((fp=fopen("data.txt","ab+"))==NULL) { printf("文件不存在!\n"); return; } fclose(fp); } void add() { int i; char n[20]; FILE *fp; if((fp=fopen("data.txt","ab+"))==NULL) { printf("文件不存在!\n"); exit(0); } printf("请输入单词: \n"); scanf("%s",n); while(!feof(fp)) { if(fread(&inf[m],LEN,1,fp)==1) { if(strcmp(n,inf[m].word)==0) { printf("已有此单词,是否进行修改?\n"); printf("1. 是 2. 否\n"); scanf("%d",&i); switch(i) { case 1: Edit(); case 2: break; } printf("是否继续增添?"); printf("按Y或y表示继续,按其它键返回\n"); fclose(fp); return; } } m++; } printf("请输入释义:\n"); scanf("%s",inf[m].mean); strcpy(inf[m].word,n); if(fwrite(&inf[m],LEN,1,fp)!=1) { printf("不能保存"); } else { printf("已保存\n是否继续添加?"); printf("按Y或y表示继续,按其它键返回\n"); } fclose(fp); } void Delete() { FILE *fp,*ft; char n[40],k[40]; int m=0,l=0,i; printf("请输入要删除的单词:\n"); scanf("%s",n); fp=fopen("data.txt","rb+"); ft=fopen("123.txt","wb+"); if(fp==NULL||ft==NULL) { printf("文件不存在!\n"); exit(1); } printf("是否删除此单词?谨慎考虑!\n"); printf("\t1.是"); printf("\t\t2.否\n"); scanf("%d",&i); switch(i) { case 1: while(fread(k,sizeof(k),1,fp)) { if(strcmp(k,n)!=0) { fwrite(k,sizeof(k),1,ft); m++; } else { rewind(fp); fseek(fp,sizeof(k)*(m+2),0); } } fclose(fp); fclose(ft); remove("data.txt"); rename("123.txt","data.txt"); printf("删除成功"); break; case 2:break; } printf("是否继续?\n"); printf("按Y或y表示继续,按其它键返回\n"); return; } void Edit() { int t,a,m=0; char n[40],k[40]; FILE *fp; printf("请输入要修改的单词:"); scanf("%s",n); if((fp=fopen("data.txt","rb+"))==NULL) { printf("文件不存在!\n"); exit(1); } rewind(fp); while(!feof(fp)) { if(fread(&inf[m],LEN,1,fp)==1) if(strcmp(n,inf[m].word)==0) { printf("是否修改释义?\n"); printf("\t1.是."); printf("\t\t2.否.\n"); scanf("%d",&a); switch(a) { case 1:printf("请输入修改后的释义:"); scanf("%s",k); strcpy(inf[m].mean,k); t=sizeof(inf[m].mean); fseek(fp,-t,1); if(fwrite(&inf[m].mean,t,1,fp)==1) printf("修改成功!"); break; case 2: break; } printf("是否继续?\n"); printf("按Y或y表示继续,按其它键返回\n"); fclose(fp); return; } m++; } printf("无此单词\n"); printf("是否继续修改?\n"); printf("输入y或Y继续操作,输入其他返回菜单\n"); fclose(fp); return; } int main(void) { int choice; char n[2]; do { printf("\n\t =============================="); printf("\n\t *欢迎使用有限规模电子英汉词典*"); printf("\n\t ==============================\n"); printf("\n\t ***********菜单显示***********\n"); printf("\n\t ********【1】词条查找*********\n"); printf("\n\t ********【2】词条增词*********\n"); printf("\n\t ********【3】词条删除*********\n"); printf("\n\t ********【4】词条修改*********\n"); printf("\n\t ********【0】退出词典*********\n"); printf("请选择你要进行的功能:"); scanf("%d",&choice); switch(choice) { case 1: enter(); scanf("%s",&n); while(n[0]=='Y'||n[0]=='y') { enter(); scanf("%s",&n); } break; case 2: add(); m++; scanf("%s",&n); while(n[0]=='Y'||n[0]=='y') { add(); m++; scanf("%s",&n); } break; case 3: Delete(); scanf("%s",&n); while(n[0]=='Y'||n[0]=='y') { Delete(); scanf("%s",&n); } break; case 4: Edit(); scanf("%s",&n); while(n[0]=='Y'||n[0]=='y') { Edit(); scanf("%s",&n); } break; } }while(choice!=0); return 0; }