• 通讯录工程的构建(二)


    这一篇给大家介绍子函数,大多是对于链表的操作,就不一一赘述。

    (代码复制的时候格式有点问题,空行较多)

      1 NODE *create()
      2 
      3 {
      4 
      5     NODE* p;
      6 
      7     p=OP;                                             // #define OP
      8 
      9  
     10 
     11     return p;
     12 
     13 }
     14 
     15  
     16 
     17 int revise(NODE* head)
     18 
     19 {
     20 
     21     NODE* p;
     22 
     23     char name[20],yn;
     24 
     25  
     26 
     27     puts("
    
    	  Please enter the name of contacts that should be revised   ");
     28 
     29     getchar();
     30 
     31     gets(name);
     32 
     33  
     34 
     35 //---查找与所输入名字相同的节点
     36 
     37  
     38 
     39     p=head->next;
     40 
     41  
     42 
     43     while(p)
     44 
     45     {
     46 
     47         if(strcmp(p->name,name)==0)
     48 
     49         {
     50 
     51             printf("
    		*    Name revise?(y/n)    *");
     52 
     53             yn=getchar();
     54 
     55             getchar();
     56 
     57  
     58 
     59             if(yn=='y')
     60 
     61             {
     62 
     63                 printf("
    *    Enter new name:    *");
     64 
     65                 gets(p->name);
     66 
     67             }
     68 
     69  
     70 
     71             printf("
    		*    Tel revise?(y/n)    *");
     72 
     73             yn=getchar();
     74 
     75             getchar();
     76 
     77  
     78 
     79             if(yn=='y')
     80 
     81             {
     82 
     83                 printf("
    *    Enter new tel:    *");
     84 
     85                 gets(p->tel);
     86 
     87             }
     88 
     89  
     90 
     91             printf("
    		*    Email revise?(y/n)    *");
     92 
     93             yn=getchar();
     94 
     95             getchar();
     96 
     97  
     98 
     99             if(yn=='y')
    100 
    101             {
    102 
    103                 printf("
    *    Enter new email:    *");
    104 
    105                 gets(p->email);
    106 
    107             }
    108 
    109  
    110 
    111             printf("
    		*    Sort revise?(y/n)    *");
    112 
    113             yn=getchar();
    114 
    115             getchar();
    116 
    117  
    118 
    119             if(yn=='y')
    120 
    121             {
    122 
    123                 printf("
    *    Enter new sort:    *");
    124 
    125                 p->sort=getchar();
    126 
    127                 getchar();
    128 
    129                 //printf("
    new sort:%d",p->sort);
    130 
    131             }
    132 
    133  
    134 
    135             puts("
    
    		*    Revise succeed    *");
    136 
    137             return 1;
    138 
    139  
    140 
    141         }
    142 
    143         p=p->next;
    144 
    145     }
    146 
    147  
    148 
    149 //---没有找到则返回0
    150 
    151         puts("
    
    	*    Not find this contacts    *");
    152 
    153         return 0;
    154 
    155  
    156 
    157  
    158 
    159  
    160 
    161  
    162 
    163 }
    164 
    165  
    166 
    167 void build(NODE* head,int len,NODE stu[])
    168 
    169 {
    170 
    171     NODE* p,*q;
    172 
    173     int i,j;
    174 
    175  
    176 
    177 //---建立链表并赋入结构体数组中的信息
    178 
    179     p=head;
    180 
    181  
    182 
    183     for(i=0;i<len;i++)
    184 
    185     {
    186 
    187         q=OP;
    188 
    189         p->next=q;
    190 
    191         for(j=0;stu[i].name[j] != '';j++)
    192 
    193             q->name[j]=stu[i].name[j];
    194 
    195         q->name[j]=stu[i].name[j];
    196 
    197  
    198 
    199         for(j=0;stu[i].tel[j] != '';j++)
    200 
    201             q->tel[j]=stu[i].tel[j];
    202 
    203         q->tel[j]=stu[i].tel[j];
    204 
    205  
    206 
    207         q->sort=stu[i].sort;
    208 
    209  
    210 
    211         for(j=0;stu[i].email[j] != '';j++)
    212 
    213             q->email[j]=stu[i].email[j];
    214 
    215         q->email[j]=stu[i].email[j];
    216 
    217  
    218 
    219         //printf("here?");
    220 
    221         p=q;
    222 
    223     }
    224 
    225     q->next=NULL;
    226 
    227  
    228 
    229 }
    230 
    231  
    232 
    233 //---将链表中的信息转存到结构体数组中
    234 
    235 void trans(NODE* head,int len,NODE lin[])
    236 
    237 {
    238 
    239     NODE* pt;
    240 
    241     int i,j;
    242 
    243  
    244 
    245         pt=head->next;
    246 
    247  
    248 
    249         for(i=0;(i<len)&&(pt);pt=pt->next,i++)
    250 
    251     {
    252 
    253         for(j=0;pt->name[j] != '';j++)
    254 
    255             lin[i].name[j]=pt->name[j];
    256 
    257         lin[i].name[j]='';
    258 
    259  
    260 
    261         for(j=0;pt->tel[j] != '';j++)
    262 
    263             lin[i].tel[j]=pt->tel[j];
    264 
    265         lin[i].tel[j]='';
    266 
    267  
    268 
    269         for(j=0;pt->email[j] != '';j++)
    270 
    271             lin[i].email[j]=pt->email[j];
    272 
    273         lin[i].email[j]='';
    274 
    275  
    276 
    277         lin[i].sort=pt->sort;                    // ?
    278 
    279     }
    280 
    281  
    282 
    283  
    284 
    285 }
    286 
    287  
    288 
    289 //---节点删除
    290 
    291 int del(NODE* head)
    292 
    293 {
    294 
    295     char cname[20];                     //contacts' name
    296 
    297     NODE* p,*pn;                        //pn: pointer next
    298 
    299     int flag=0;
    300 
    301  
    302 
    303     puts("
    
    	  Please enter the name of contacts that should be deleted  ");
    304 
    305     getchar();
    306 
    307     gets(cname);
    308 
    309  
    310 
    311     p=head;
    312 
    313  
    314 
    315     while(p->next)
    316 
    317     {
    318 
    319         pn=p->next;
    320 
    321         if(strcmp(pn->name,cname)==0)
    322 
    323         {
    324 
    325             flag=1;
    326 
    327             p->next=pn->next;
    328 
    329             pn->next=NULL;
    330 
    331             free(pn);
    332 
    333             break;
    334 
    335         }
    336 
    337         p=p->next;
    338 
    339     }
    340 
    341  
    342 
    343     if(!flag)
    344 
    345     {
    346 
    347         puts("
    
    	*    Not find this contacts    *");
    348 
    349         return 0;
    350 
    351     }
    352 
    353  
    354 
    355  
    356 
    357     puts("
    
    		*    Delete succeed    *");
    358 
    359  
    360 
    361     return 1;
    362 
    363  
    364 
    365 }
    366 
    367  
    368 
    369 //---完全新建
    370 
    371 int _new(NODE *head,char filename[])
    372 
    373 {
    374 
    375     FILE *in,*f_name;
    376 
    377     NODE *p,*q,*pc,*pt;                     // pc : pointer check   pt: pointer transport
    378 
    379     int i,j,len;
    380 
    381     char yon;
    382 
    383     int getlen(NODE* head);
    384 
    385  
    386 
    387     // new file
    388 
    389  
    390 
    391                                                                      // if input right?
    392 
    393  
    394 
    395         printf("
    
      Please enter file address( change character '\' by '\\' .):         ");
    396 
    397         gets(filename);
    398 
    399         printf("
    
    Filename:  %s
    ",filename);
    400 
    401  
    402 
    403         //for(i=0;filename[i]!='#';i++)
    404 
    405         //    ;
    406 
    407         //filename[i]='';
    408 
    409         if((in=fopen(filename,"wb"))==NULL)
    410 
    411         {
    412 
    413             puts("
    
    		*    Cannot open the file    *");
    414 
    415             return 0;
    416 
    417         }
    418 
    419         fclose(in);
    420 
    421  
    422 
    423         if((f_name=fopen("D:\file_name.dat","wb"))==NULL)                                 // note file address
    424 
    425         {
    426 
    427             puts("
    
    		*    Cannot open the file    *");
    428 
    429             return 0;
    430 
    431         }
    432 
    433  
    434 
    435         rewind(f_name);
    436 
    437  
    438 
    439         //filename[i]=-1;
    440 
    441         fputs(filename,f_name);
    442 
    443  
    444 
    445         //fputs(&filename[i],f_name);                  // add ''
    446 
    447  
    448 
    449         fclose(f_name);
    450 
    451                                                                          // note file address end
    452 
    453  
    454 
    455     //new file end
    456 
    457  
    458 
    459  
    460 
    461  
    462 
    463     puts("
    
    *   Tips: When you enter 'sort' information, 'a' means official, 'b' means personal, 'c' means commercial.  *
    ");
    464 
    465     p=head;
    466 
    467     for(i=0;i<15;i++)
    468 
    469     {
    470 
    471         q=OP;
    472 
    473         p->next=q;
    474 
    475         printf("
    
         *******************   Enter information   *******************
    
    ");
    476 
    477  
    478 
    479         printf("		Name:  ");
    480 
    481         scanf("%s",q->name);
    482 
    483  
    484 
    485         printf("		Tel :  ");
    486 
    487         scanf("%s",q->tel);
    488 
    489  
    490 
    491         printf("		Sort:  ");
    492 
    493         getchar();
    494 
    495         q->sort=getchar();
    496 
    497         getchar();
    498 
    499  
    500 
    501  
    502 
    503         printf("
    		Email: ");
    504 
    505         scanf("%s",q->email);
    506 
    507         puts("
    ");
    508 
    509  
    510 
    511         haha: puts("
    	*    Another person?(y/n)    *");
    512 
    513         getchar();
    514 
    515         q->yn=getchar();
    516 
    517         getchar();
    518 
    519  
    520 
    521         p=q;
    522 
    523  
    524 
    525         if(q->yn=='y') continue;
    526 
    527         else if (q->yn=='n') break;
    528 
    529         else
    530 
    531         {
    532 
    533             puts("	*    Error    *");
    534 
    535             goto haha;
    536 
    537         }
    538 
    539  
    540 
    541     }
    542 
    543     if(i>=15) printf("
    		*  The total number should be less than 15  *");
    544 
    545     q->next=NULL;
    546 
    547  
    548 
    549  
    550 
    551     len=getlen(head);
    552 
    553  
    554 
    555  
    556 
    557  
    558 
    559     puts("
    
    		*    Create succeed    *");
    560 
    561  
    562 
    563     return len;
    564 
    565 }
    566 
    567  
    568 
    569 //---得到节点个数
    570 
    571 int getlen(NODE *head)
    572 
    573 {
    574 
    575     NODE *p;
    576 
    577     int i=0;
    578 
    579  
    580 
    581     p=head->next;
    582 
    583     while(p)
    584 
    585     {
    586 
    587         i++;
    588 
    589         p=p->next;
    590 
    591  
    592 
    593     }
    594 
    595  
    596 
    597     return i;
    598 
    599 }
    600 
    601  
    602 
    603  
    604 
    605  
    606 
    607 //---增加节点
    608 
    609 int add(NODE *head)
    610 
    611 {
    612 
    613     NODE* p,*pn;               //pn: pointer new
    614 
    615  
    616 
    617     p=head;
    618 
    619  
    620 
    621     while(p->next)
    622 
    623     {
    624 
    625         p=p->next;
    626 
    627     }
    628 
    629  
    630 
    631     pn=OP;
    632 
    633     p->next=pn;
    634 
    635  
    636 
    637     printf("
    
         *******************   Enter information   *******************
    
    ");
    638 
    639  
    640 
    641         printf("		Name:  ");
    642 
    643         scanf("%s",pn->name);
    644 
    645  
    646 
    647         printf("		Tel:   ");
    648 
    649         scanf("%s",pn->tel);
    650 
    651  
    652 
    653         printf("		Sort:  ");
    654 
    655         getchar();
    656 
    657         pn->sort=getchar();
    658 
    659         getchar();
    660 
    661  
    662 
    663         printf("
    		Email: ");
    664 
    665         scanf("%s",pn->email);
    666 
    667         puts("
    ");
    668 
    669  
    670 
    671  
    672 
    673  
    674 
    675     pn->next=NULL;
    676 
    677  
    678 
    679  
    680 
    681  
    682 
    683     puts("
    
    		*    Add succeed    *");
    684 
    685     getchar();
    686 
    687  
    688 
    689     return 1;
    690 
    691  
    692 
    693 }
    694 
    695  
    696 
    697 //---主界面
    698 
    699 int func()
    700 
    701 {
    702 
    703     int choose;
    704 
    705     printf("
    
       ****************************   Function   ****************************
    ");
    706 
    707     printf("
    
    		      1. Check
    ");
    708 
    709     printf("
    		      2. Add
    ");
    710 
    711     printf("
    		      3. Revise
    ");
    712 
    713     printf("
    		      4. Delete
    ");
    714 
    715     printf("
    		      5. Create
    ");
    716 
    717     printf("
    		      6. Show telbook
    ");
    718 
    719     printf("
    
    		Please enter the number you choose.
    ");
    720 
    721  
    722 
    723  
    724 
    725     scanf("%d",&choose);
    726 
    727  
    728 
    729     return choose;
    730 
    731 }
    732 
    733  
    734 
    735 //---查找
    736 
    737 void check(NODE* head)
    738 
    739 {
    740 
    741     NODE *p;
    742 
    743     char chos;
    744 
    745     void output(char chos,NODE* p);
    746 
    747  
    748 
    749     p=head;
    750 
    751  
    752 
    753     puts("
    
        Choose sort:   a.official   b.personal   c.commercial    ");
    754 
    755     getchar();
    756 
    757     chos=getchar();
    758 
    759     getchar();
    760 
    761  
    762 
    763     switch(chos)
    764 
    765     {
    766 
    767         case 'a':   ;
    768 
    769         case 'A':  output(chos,p);break;
    770 
    771         case 'b':   ;
    772 
    773         case 'B':  output(chos,p);break;
    774 
    775         case 'c':   ;
    776 
    777         case 'C': output(chos,p);break;
    778 
    779     }
    780 
    781 }
    782 
    783  
    784 
    785 //---查找函数中的输出函数
    786 
    787 void output(char chos,NODE* p)
    788 
    789 {
    790 
    791     while(p->next)
    792 
    793     {
    794 
    795         p=p->next;
    796 
    797         if(p->sort==chos)
    798 
    799         {
    800 
    801             printf("
    		Name: %s
    ",p->name);
    802 
    803             printf("		Tel: %s
    ",p->tel);
    804 
    805             printf("
    		Email: %s
    ",p->email);
    806 
    807             puts("
    ");
    808 
    809         }
    810 
    811     }
    812 
    813     puts("
    ");
    814 
    815 }
  • 相关阅读:
    mysql json 嵌套数组查询
    Centos 部署 mysql
    Mysql8.0 导出数据库文档
    MySQL常用Json函数
    java Dateutil 操作类
    雪花算法生成的ID,前端无法使用
    Mysql 一个字段匹配多个字符
    EntityManager 获取 List<T>
    高级软件工程第二次作业:随机生成N个不重复的已解答完毕的数独棋盘
    调研《构建之法》指导下的全国高校优秀实践作品三篇
  • 原文地址:https://www.cnblogs.com/GY8023/p/4552128.html
Copyright © 2020-2023  润新知