A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #include "stdio.h"

  2. typedef struct
  3. {
  4.         char name[50];
  5.         char address[50];
  6.         char phonenum[20];
  7.         char email[20];
  8.         char remark[50];
  9.         struct mylist *next;
  10. }mylist;


  11. void addlist(){
  12.         mylist list;
  13.         FILE *fp;
  14.         printf("请输入信息->>\n\t");
  15.         printf("姓名:");
  16.         scanf("%s",list.name);
  17.         printf("\n\t地址:");
  18.         scanf("%s",list.address);
  19.         printf("\n\t电话号码:");
  20.         scanf("%s",list.phonenum);
  21.         printf("\n\te-mail:");
  22.         scanf("%s",list.email);
  23.         printf("\n\t备注:");
  24.         scanf("%s",list.remark);
  25.         list.next=NULL;
  26.         fp=fopen("MyAddressList","ab+");
  27.        
  28.         fwrite(&list,sizeof(mylist),1,fp);
  29.         fclose(fp);
  30. }


  31. mylist *readlist(int j){
  32.         mylist *head=NULL,*r=NULL,*s;
  33.         int i,n;
  34.         char ch;
  35.         long k;
  36.         FILE *fp;
  37.        
  38.         fp=fopen("MyAddressList","rb");
  39.        
  40.         for(i=1;1;i++){
  41.                  n=fgetc(fp);
  42.                  if(n==EOF)
  43.                  break;
  44.                  k=i-1;
  45.                  fseek(fp,k*sizeof(mylist),SEEK_SET);
  46.                  s=malloc(sizeof(mylist));
  47.                  fread(s,sizeof(mylist),1,fp);
  48.                  if(head==NULL){
  49.                         head=s;
  50.                  }else
  51.                          r->next=s;
  52.                  r=s;
  53.         }
  54.        
  55.         if(j==1){
  56.                 s=head;
  57.                 for(i=0;s->next!=NULL;i++){
  58.                         printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",s->name,s->address,s->phonenum,s->email,s->remark);
  59.                         s=s->next;
  60.                         printf("\n______按任意键继续>\n");
  61.                         getch();
  62.                 }
  63.                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",s->name,s->address,s->phonenum,s->email,s->remark);
  64.                 printf("\n按任意键继续>\n");
  65.                 getch();
  66.         }
  67.         return(head);
  68.         fclose(fp);
  69.        
  70. }


  71. void search(){
  72.         mylist listu;
  73.         mylist *p,*coun;
  74.         char ch;
  75.         p=readlist(0);
  76.         coun=p;
  77.         while(1){
  78.         printf("请输入查询条件:\n");
  79.         printf("***********************\n");
  80.         printf("\t1、姓名\n");
  81.         printf("\t2、手机号\n");
  82.         printf("\t3、备注\n");
  83.         printf("\t4、退出\n");
  84.         printf("***********************\n");
  85.         ch=getch();
  86.         switch(ch){
  87.                 case '1': p=coun;
  88.                                         printf("请输入联系人名字:");
  89.                                         scanf("%s",listu.name);
  90.                                         for(;p->next!=NULL;p=p->next){
  91.                                                 if(strcmp(listu.name,p->name)==0){
  92.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  93.                                                 }
  94.                                         }
  95.                                         if(strcmp(listu.name,p->name)==0){
  96.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  97.                                                 }
  98.                                         break;
  99.                 case '2':  p=coun;
  100.                                         printf("请输入联系人手机号:");
  101.                                         scanf("%s",listu.phonenum);
  102.                                         for(;p->next!=NULL;p=p->next){
  103.                                                 if(strcmp(listu.phonenum,p->phonenum)==0){
  104.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  105.                                                 }
  106.                                         }
  107.                                         if(strcmp(listu.phonenum,p->phonenum)==0){
  108.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  109.                                                 }
  110.                                         break;
  111.                 case '3': p=coun;
  112.                                         printf("请输入联系人备注信息:");
  113.                                         scanf("%s",listu.remark);
  114.                                         for(;p->next!=NULL;p=p->next){
  115.                                                 if(strcmp(listu.remark,p->remark)==0){
  116.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  117.                                                 }
  118.                                         }
  119.                                         if(strcmp(listu.remark,p->remark)==0){
  120.                                                 printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",p->name,p->address,p->phonenum,p->email,p->remark);
  121.                                                 }
  122.                                         break;
  123.                 case '4':return;
  124.                        
  125.                 default:printf("请输入数字(1or2or3)\n");
  126.                                   continue;
  127.                 }

  128.         }
  129.        
  130. }


  131. void dellist(){
  132.         FILE *fp;
  133.         char nameu[10];
  134.         int i=0;
  135.         mylist *head,*r,*p,*s;
  136.         head=readlist(0);
  137.         r=head;
  138.        
  139.         if(head==NULL)
  140.                 printf("通讯录为空!");
  141.         else{  
  142.                 printf("请输入要删除的联系人名字:");
  143.             scanf("%s",nameu);
  144.                
  145.                 r=head;
  146.                 if(strcmp(r->name,nameu)==0)
  147.      {   r=r->next;
  148.                         head=r;
  149.      }
  150.                 else
  151.      {  
  152.          p=r->next;
  153.          while(strcmp(p->name,nameu)!=0){
  154.                 r=r->next;
  155.                 p=r->next;
  156.          }
  157.                 s=r->next;
  158.                 r->next=s->next;
  159.                  free(s);
  160. }
  161.                         p=r=head;
  162.                   if(strcmp(p->name,nameu)==0)
  163.                                 r->next=NULL;
  164.                   fp=fopen("MyAddressList","wb+");
  165.                   r=head;
  166.                   fwrite(r,sizeof(mylist),1,fp);
  167.                   r=r->next;
  168.                   while(r!=NULL){
  169.                   fwrite(r,sizeof(mylist),1,fp);
  170.                   r=r->next;
  171.                   }
  172.                  
  173.              fclose(fp);

  174.         }
  175.        
  176. }



  177. int chlist(){
  178.         mylist *head,*p;
  179.         FILE *fp;
  180.         char ch[10];
  181.         head=readlist(0);
  182.         p=head;
  183.         printf("请输入要修改人的姓名:");
  184.         scanf("%s",ch);
  185.         for(;head!=NULL;head=head->next){
  186.                 if(strcmp(head->name,ch)==0){
  187.                         printf("姓名:%s\n地址:%s\n电话号码:%s\nEmail:%s\n备注:%s\n\n",head->name,head->address,head->phonenum,head->email,head->remark);
  188.                         printf("请输入修改后信息..........\n");
  189.                         printf("\n\t姓名:");
  190.                         scanf("%s",head->name);
  191.                         printf("\n\t地址:");
  192.                         scanf("%s",head->address);
  193.                         printf("\n\t电话号码:");
  194.                         scanf("%s",head->phonenum);
  195.                         printf("\n\te-mail:");
  196.                         scanf("%s",head->email);
  197.                         printf("\n\t备注:");
  198.                         scanf("%s",head->remark);
  199.                         fp=fopen("MyAddressList","wb+");
  200.                        
  201.                        
  202.                         while(p!=NULL){
  203.                                 fwrite(p,sizeof(mylist),1,fp);
  204.                                 p=p->next;
  205.                         }
  206.                         fclose(fp);
  207.                         return(1);
  208.                 }
  209.                        
  210.         }


  211. }

  212. void main(){
  213.         char ch;
  214.         int i;
  215.         while(1){
  216.                 printf("*********我的通讯录************\n");
  217.                 printf("\t1、添加联系人\n");
  218.                 printf("\t2、删除联系人\n");
  219.                 printf("\t3、查找联系人\n");
  220.                 printf("\t4、更改联系人信息\n");
  221.                 printf("\t5、显示所有联系人\n");
  222.                 printf("\t6、退出\n");
  223.                 printf("*********我的通讯录************\n");
  224.                 ch=getch();
  225.                 switch(ch){
  226.                         case '1':
  227.                                 addlist();
  228.                                 continue;
  229.                         case '2':
  230.                                 dellist();
  231.                                 continue;
  232.                         case '3':
  233.                                 search();
  234.                                 continue;
  235.                         case '4':
  236.                                 i=chlist();
  237.                                 if(i)
  238.                                         printf("修改成功\n");
  239.                                 else
  240.                                         printf("修改失败\n");
  241.                                 continue;
  242.                         case '5':
  243.                                 readlist(1);
  244.                                 continue;
  245.                         case '6':
  246.                                 exit(0);
  247.                 }
  248.         }
  249. }
复制代码

1 个回复

倒序浏览
黑马网友  发表于 2011-9-4 10:55:44
沙发
呵呵  C学得很好啊!!如果可以你可以再加两个项目  
排序、输出(保存文件)。

评分

参与人数 1技术分 +2 收起 理由
王玉玺 + 2 谢谢

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马