DOS通讯录

  1 #include"stdio.h"
  2 #include"string.h"
  3 #include"stdlib.h"
  4 FILE *fp;
  5 #define M 100
  6 typedef struct Record
  7     {
  8     char name[20];
  9     char age[3];
 10     char number[30],city[30],work[30],other[30];
 11      }R;
 12 void cmd_1();
 13 void cmd_write(R info[],int n)    //重新写入函数
 14 {
 15     fclose(fp);
 16     if((fp=fopen("address.txl","wb"))==NULL)
 17     {
 18         printf("CANNOT OPEN FILE\n");
 19         exit(1);
 20     }
 21     fwrite(info,sizeof(R),n,fp);
 22     fclose(fp);
 23 }
 24 
 25 void for_1(int n,char ch)    //界面元素循环输出函数
 26 {
 27     int i;
 28     for(i=1;i<=n;i++)
 29         printf("%c",ch);
 30 }
 31 
 32 void cmd_4()    //建立通讯录文件
 33 {
 34 
 35     if((fp=fopen("address.txl","wb"))==NULL)
 36     {
 37         printf("CANNOT OPEN FILE\n");
 38         exit(1);
 39     }
 40     fclose(fp);
 41     printf("\n\n文件建立成功,请使用 3:新建联系人 功能\n");
 42 }
 43 int cmd_2_turn_x(R info[],int n)    //cmd_2_turn 附属函数:record结构体组 输出
 44 {
 45     int i;
 46     printf("\n\n我 的 通 讯 录\n");
 47     for_1(30,'*');
 48     putchar('\n');
 49     for(i=0;i<n;i++)
 50         printf("%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
 51     printf("\n\n显示结束,请选择序号:");
 52 
 53     int a;
 54     scanf("%d",&a);
 55     return a;
 56 }
 57 
 58 void cmd_2_turn(R info[],int n)    //cmd_2附属函数 按循序修改
 59 {
 60     
 61     while(1)
 62     {
 63         int ask=cmd_2_turn_x(info,n);
 64         if(ask>n||ask<=0)    
 65         {
 66             printf("对不起,序号范围超出\n");
 67             return;
 68         }
 69         getchar();
 70         fflush(stdin);
 71         printf("输入姓名:");
 72         gets(info[ask-1].name);
 73         printf("\n输入年龄:");
 74         gets(info[ask-1].age);
 75         printf("\n输入号码:");
 76         gets(info[ask-1].number);
 77         printf("\n城市:");
 78         gets(info[ask-1].city);
 79         printf("\n输入工作单位:");
 80         gets(info[ask-1].work);
 81         printf("\n输入备注:");
 82         gets(info[ask-1].other);
 83         printf("是否保存修改(y/n):");
 84         char a=getchar();
 85         if(a=='y')    
 86         {
 87             cmd_write(info,n);
 88             printf("\n保存成功!\n");
 89             return;
 90         }
 91         else
 92         {
 93             for_1(30,'*');
 94             printf("\n1:返回到上级\n2:继续修改\n");
 95             printf("\n请输入指令:");
 96             int ask_1;
 97             scanf("%d",&ask_1);
 98             if(ask==1)    return;
 99             else continue;
100         }
101 
102     }
103 
104 }
105 void cmd_2_name(R info[],int n)    //cmd_2附属函数 按名字修改
106 {
107     while(1)
108     {
109         printf("\n\n请输入待查找的姓名:");
110         char ask_name[10];
111         getchar();
112         gets(ask_name);
113         int i;
114         for(i=0;i<n;i++)
115             if(strcmp(info[i].name ,ask_name)==0)    break;
116         if(i>=n)    {printf("\n查无此人\n");    return;}
117         else 
118         {
119             printf("\n查找成功,请修改\n");
120             fflush(stdin);
121             printf("输入姓名:");
122             gets(info[i].name);
123             printf("\n输入年龄:");
124             gets(info[i].age);
125             printf("\n输入号码:");
126             gets(info[i].number);
127             printf("\n城市:");
128             gets(info[i].city);
129             printf("\n输入工作单位:");
130             gets(info[i].work);
131             printf("\n输入备注:");
132             gets(info[i].other);
133             printf("是否保存修改(y/n):");
134             char a=getchar();
135             if(a=='y')    
136             {
137                 cmd_write(info,n);
138                 printf("\n修改成功!\n");
139                 printf("\n是否继续修改(y/n):");
140                 getchar();
141                 char b=getchar();
142                 if(b=='y')    continue;
143                 if(b=='n')    return;
144             }
145             else
146             {
147                 for_1(30,'*');
148                 printf("\n1:返回到上级\n2:继续修改\n");
149                 printf("\n请输入指令:");
150                 int ask_1;
151                 scanf("%d",&ask_1);
152                 if(ask_1==1)    return;
153                 else continue;
154             }
155         }    
156     }
157 }
158 void cmd_1_1(R info[],int n);
159 void cmd_2()    //修改联系人
160 {
161     if((fp=fopen("address.txl","rb"))==NULL)
162     {
163         printf("CANNOT OPEN FILE\n");
164         exit(1);
165     }
166     R temp,info[M];
167     int i=0;
168     while(fread(&temp,sizeof(R),1,fp)==1)
169              info[i++]=temp;
170      while(1)
171      {
172         
173          printf("\n修 改 联 系 人\n");
174          for_1(30,'*');
175         printf("\n1:浏览通讯录");
176         printf("\n2:按序号修改\n3:按姓名修改\n4:退出\n");
177         printf("\n请输入指令:");
178         int ask;
179          scanf("%d",&ask);
180         if(ask==1)    cmd_1_1(info,i);
181         else if(ask==2)    cmd_2_turn(info,i);
182         else if(ask==3)    cmd_2_name(info,i);
183         else    return;
184      }
185 }
186 void cmd_3()    //新建联系人函数
187 {
188     R record;
189     char a;
190     FILE *fp;
191     if((fp=fopen("address.txl","ab"))==NULL)
192     {
193         printf("CANNOT OPEN FILE ");
194         exit(1);
195     }
196 
197     printf("\n\n");
198     while(1)    //新建联系人界面
199     {
200         getchar();
201         fflush(stdin);
202         printf("输入姓名:");
203         gets(record.name);
204         printf("\n输入年龄:");
205         gets(record.age);
206         printf("\n输入号码:");
207         gets(record.number);
208         printf("\n城市:");
209         gets(record.city);
210         printf("\n输入工作单位:");
211         gets(record.work);
212         printf("\n输入备注:");
213         gets(record.other);
214         printf("是否保存(y/n):");
215         a=getchar();
216         if(a=='y')    
217         {
218             fwrite(&record,sizeof(R),1,fp);
219             printf("\n····\n");
220             printf("保存成功\n");
221         }
222         getchar();
223         printf("是否继续建立联系人(y/n):");
224         a=getchar();
225         if(a=='n')    break;
226         printf("\n");
227     }
228     fclose(fp);
229     return;
230 }
231 void cmd_1_1(R info[],int n)    //cmd_1附属函数:record结构体组 输出
232 {
233     int i;
234     printf("\n\n我 的 通 讯 录\n");
235     for_1(30,'*');
236     putchar('\n');
237     for(i=0;i<n;i++)
238         printf("%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
239     printf("\n\n显示结束,按任意键键返回上级目录:");
240     getchar();
241     char a=getchar();
242     if(a!=NULL)    return;
243 }
244 
245 void sort_name(R info[],int n)    //cmd_1附属函数姓名排序
246 {
247     int i,j;
248     R temp,info_t[M];
249     for(i=0;i<n;i++)
250         info_t[i]=info[i];
251     for(i=1;i<n;i++)
252         for(j=0;j<n-i;j++)
253             if(strcmp(info_t[j].name,info_t[j+1].name)>0)    
254             {
255                 temp=info_t[j];
256                 info_t[j]=info_t[j+1];
257                 info_t[j+1]=temp;
258             }
259     cmd_1_1(info_t,n);
260     return;
261 }
262 void sort_city(R info[],int n)    //城市排序函数
263 {
264     int i,j;
265     R temp,info_t[M];
266     for(i=0;i<n;i++)
267         info_t[i]=info[i];
268     for(i=1;i<n;i++)
269         for(j=0;j<n-i;j++)
270             if(strcmp(info_t[j].city,info_t[j+1].city)>0)    
271             {
272                 temp=info_t[j];
273                 info_t[j]=info_t[j+1];
274                 info_t[j+1]=temp;
275             }
276     cmd_1_1(info_t,n);
277     return;
278 }
279 void cmd_1_2(R info[],int n)    //显示联系人函数附属函数 转移函数
280 {
281     int ask;
282     int i;
283     R info_t[M];
284     for(i=0;i<n;i++)
285         info_t[i]=info[i];
286     while(1)
287     {
288         
289         printf("\n\n排 序 显 示\n");
290         for_1(30,'*');
291         printf("\n1:按姓名排序\n");
292         for_1(30,'*');
293         printf("\n2:按城市输出\n");
294         for_1(30,'*');
295         printf("\n3:返回上一层\n");
296         for_1(30,'*');
297         printf("\n请输入指令:");
298         scanf("%d",&ask);
299         if(ask==3)    break;
300         else if(ask==1)    sort_name(info,n);
301         else if(ask==2)    sort_city(info,n);
302         else    {printf("指令错误,重新输入");    continue;}
303     }
304 }
305 
306 void cmd_1()    //显示联系人函数
307 {
308      if((fp=fopen("address.txl","rb"))==NULL)
309      {
310         printf("CANNOT OPEN FILE");
311         exit(1);
312      }
313      R temp,info[M];
314      int i=0,cmd_x;
315      while(fread(&temp,sizeof(R),1,fp)==1)
316          info[i++]=temp;
317 
318      while(1)    //通讯录显示菜单界面
319      {
320         printf("\n显 示 联 系 人(共有 %d 条记录)\n",i);
321         for_1(30,'*');
322         printf("\n1:按自然顺序输出\n");
323         for_1(30,'*');
324         printf("\n2:按排序顺序显示\n");
325         for_1(30,'*');
326         printf("\n3:退出显示程序\n");
327         for_1(30,'*');
328         printf("\n请输入指令:");
329         scanf("%d",&cmd_x);
330         if(cmd_x==3)    {fclose(fp);    return;}
331         else if(cmd_x==1)    cmd_1_1(info,i);
332         else if(cmd_x==2)    cmd_1_2(info,i);
333         else {printf("指令错误,请重新输入!\n");    continue;}
334      }
335      fclose(fp);
336 }
337 void cmd_5_del(R info[],int n,int turn)    //删除联系人函数附属函数 删除函数
338 {
339     int i;
340     if(turn==n-1)    return;
341     for(i=turn-1;i<n-1;i++)
342         info[i]=info[i+1];
343 }
344 void cmd_5_turn(R info[],int n)    //删除联系人函数附属函数 序号删除函数
345 {
346     int i;
347     printf("\n\n我 的 通 讯 录\n");
348     for_1(30,'*');
349     putchar('\n');
350     for(i=0;i<n;i++)
351         printf("%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
352     printf("\n\n\n请输入序号:");
353     int turn;
354     scanf("%d",&turn);
355     if(turn>n||turn<=0)    
356     {
357         printf("\n对不起,超出已存范围\n");
358         return;
359     }
360     printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n\n",turn,info[turn-1].name,info[turn-1].age,info[turn-1].number,info[turn-1].city,info[turn-1].work,info[turn-1].other);
361     getchar();
362     printf("确定删除?(y/n)");
363     char ask=getchar();
364     if(ask=='y')    
365     {
366         cmd_5_del(info,n,turn);
367         cmd_write(info,n-1);
368         printf("\n删除成功!\n");
369     }
370     return;
371 }
372 void cmd_5_name(R info[],int n)    //删除联系人函数附属函数 姓名删除
373 {
374     printf("\n请输入名字:");
375     char name[10];
376     getchar();
377     gets(name);
378     int i;
379     for(i=0;i<n;i++)
380         if(strcmp(info[i].name,name)==0)    break;
381     if(i>=n)
382     {
383         printf("\n查无此人\n");
384         return;
385     }
386     else
387     {
388         printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n\n",i+1,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
389         //getchar();
390         printf("确定删除?(y/n)");
391         char ask=getchar();
392         if(ask=='y')    
393         {
394             cmd_5_del(info,n,i+1);
395             cmd_write(info,n-1);
396             printf("\n删除成功!\n");
397         }
398         return;
399     }
400 }
401 void cmd_5()    //删除联系人函数
402 {
403     if((fp=fopen("address.txl","rb"))==NULL)
404     {
405         printf("CANNOT OPEN FILE");
406         exit(1);
407     }
408     R temp,info[M];
409     int i=0;
410     while(fread(&temp,sizeof(R),1,fp)==1)
411          info[i++]=temp;
412     while(1)
413     {
414         int ask;
415         printf("\n删 除 联 系 人\n");
416         for_1(30,'*');
417         printf("\n1:序号删除 2:姓名删除  3:退出");
418         printf("\n\n请输入指令:");
419         scanf("%d",&ask);
420         if(ask==1)    cmd_5_turn(info,i);
421         else if(ask==2)    cmd_5_name(info,i);
422         else return;
423     }
424 }
425 
426 void cmd_6_city(R info[],int n)    //查询联系人函数附属函数 城市查询函数
427 {
428     char city[10];
429     int i,j;
430     printf("\n按 城 市 查 询 联 系 人\n");
431     for_1(30,'*');
432     printf("\n请输入城市:");
433     getchar();
434     gets(city);
435     j=1;
436     for(i=0;i<n;i++)
437         if(strcmp(city,info[i].city)==0)
438             printf("%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
439     printf("\n共查询到 %d 条记录\n按任意键返回",j-1);
440     char a=getchar();
441     if(a!=NULL)    return;    
442 }
443 void cmd_6_name(R info[],int n)        //查询联系人函数附属函数 姓名查询函数
444 {
445     char name[10];
446     int i,j;
447     printf("\n按 城 市 查 询 联 系 人 \n");
448     for_1(30,'*');
449     printf("\n请输入名字:");
450     getchar();
451     gets(name);
452     j=1;
453     for(i=0;i<n;i++)
454         if(strcmp(name,info[i].name)==0)
455             printf("%-5d%-10s%-4s%-15s%-10s%-4s    %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
456     printf("\n共查询到 %d 条记录\n按任意键返回",j-1);
457     char a=getchar();
458     if(a!=NULL)    return;        
459 }
460 
461 void cmd_6()    //查询联系人函数
462 {
463     if((fp=fopen("address.txl","rb"))==NULL)
464     {
465         printf("CANNOT OPEN FILE");
466         exit(1);
467     }
468 
469     R temp,info[M];
470      int i=0;
471      while(fread(&temp,sizeof(R),1,fp)==1)
472          info[i++]=temp;
473 
474     int ask;
475     while(1)
476     {
477         for_1(30,'*');
478         printf("\n查 询 联 系 人\n");
479         for_1(30,'*');
480         printf("\n查询方式:1:姓名   2:城市   3:退出\n\n请输入指令:");
481         scanf("%d",&ask);
482         if(ask==1)    cmd_6_name(info,i);
483         else if(ask==2)    cmd_6_city(info,i);
484         else return;
485     }
486     fclose(fp);
487 }
488 void cmd_7()
489 {
490     char str[100];
491     if((fp=fopen("help.txt","r"))==NULL)
492     {
493         printf("CANNOT OPEN FILE\n");
494         exit(1);
495     }
496     while(fgets(str,10,fp))
497         printf("%s",str);
498     system("mspaint a.jpg");
499     printf("\n\n");
500     return;
501 }
502 
503 void face_1()    //外界面函数
504 {
505     printf("\n\n\n");
506     for_1(5,' ');
507     printf("通讯录管理程序\n");
508     for_1(30,'*');
509     putchar('\n');
510     for_1(5,' ');
511     printf("1:显示联系人\n");
512     for_1(5,' ');
513     printf("2:修改联系人\n");
514     for_1(5,' ');                             
515     printf("3:新建联系人\n");
516     for_1(5,' ');
517     printf("4:新建联系文件\n");
518     for_1(5,' ');
519     printf("5:删除联系人\n");
520     for_1(5,' ');
521     printf("6:查询联系人\n");
522     for_1(5,' ');
523     printf("7:帮助\n");
524     for_1(5,' ');
525     printf("8:退出通讯录\n");
526     for_1(30,'*');
527     putchar('\n');
528     for_1(5,' ');
529     printf("请输入指令:");
530 }
531 int main(void)
532 {
533     int cmd;
534     while(1)
535     {
536         face_1();        //外界面函数
537         scanf("%d",&cmd);
538         putchar('\n');
539     
540         switch(cmd)
541         {
542             case 1:    cmd_1();break;
543             case 2:    cmd_2();break;
544             case 3:    cmd_3();break;
545             case 4:    cmd_4();break;
546             case 5:    cmd_5();break;
547             case 6:    cmd_6();break;
548             case 7: cmd_7();break;
549             case 8: return 0;
550             default: 
551             {
552                 printf("指令错误,无法识别\n\n");
553                 continue;
554             }
555         }
556     }
557     return 0;
558 }

这个代码很幼稚,但这是我第一次的尝试,我只是想分享我的点滴

转载于:https://www.cnblogs.com/xyfs/p/5507158.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值