• C语言课设——通讯录操作系统


      该微型系统实现了联系人的增删改查,以及排序清空等操作。

      一个联系人有3 个以下的号码,本来想用邻接表实现对号码的创建及其他操作,但我没法对链表的邻接表进行文件的读取操作,只有对号码数目固定。

      下面是源代码

     1 #pragma once
     2 #ifndef  _LIST_H
     3 #define  _LIST_H
     4 
     5 typedef struct
     6 {
     7     char num1[20];
     8     char num2[20];
     9     char num3[20];
    10     int n;
    11     char name[20];
    12 }DATATYPE_T;
    13 
    14 typedef struct Node
    15 {
    16     DATATYPE_T  data;
    17     struct Node *next;
    18 }ListType;
    19 
    20 /* 添加节点到链表末尾 */
    21 ListType *list_add_end(ListType *,DATATYPE_T);
    22 
    23 /* 添加节点到链表首部 */
    24 ListType *list_add_first(ListType *,DATATYPE_T);
    25 
    26 /*添加节点到链表中间*/ 
    27 ListType *list_insert(ListType *,char *,DATATYPE_T);
    28 
    29 /* 按关键字在链表中查找内容 */
    30 ListType *list_find_name(ListType *,char *);
    31 
    32 /* 按关键字在链表中查找内容 */
    33 ListType *list_find(ListType *,char *);
    34 
    35 /* 删除指定关键字的节点 */
    36 ListType *list_delete(ListType *,char *);
    37 
    38 /*获取链表的节点数量 */
    39 int list_length(ListType *);
    40 
    41 /* 显示链表所有信息*/
    42 void list_all(ListType *);
    43 
    44 /*添加联系人*/
    45 ListType *add_contact(ListType *);
    46 
    47 /*按照关键字查找联系人*/
    48 int find_contact(ListType *);
    49 
    50 /*按照关键字删除联系人*/
    51 ListType *delete_contact(ListType *);
    52 
    53 /*插入联系人信息*/
    54 ListType *insert_contact(ListType *);
    55 
    56 /*显示所有联系人信息*/
    57 int show_contact(ListType *);
    58 
    59 /*读取文件*/ 
    60 ListType *readfile(ListType *);
    61 
    62 /*修改链表*/ 
    63 void change_contact(ListType *);
    64 
    65 /*保存文件*/ 
    66 void save_contact(ListType *);
    67 
    68 /*排序*/ 
    69 void sort_contact(ListType *);
    70 
    71 /*清空*/ 
    72 ListType *free_contact(ListType *);
    73 
    74 /*界面*/ 
    75 int menu();
    76 
    77 #endif
    list.h
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include "list.h"
      5 
      6 ListType *list_add_end(ListType *head,DATATYPE_T data)
      7 {
      8     ListType *node,*phead;
      9 
     10     node = (ListType *)malloc(sizeof(ListType));
     11     if(NULL == node)
     12     {
     13         printf("malloc failed
    ");
     14         return NULL;
     15     }
     16     node->data.n = data.n;
     17     strcpy(node->data.name,data.name);
     18     strcpy(node->data.num1,data.num1);
     19     strcpy(node->data.num2,data.num2);
     20     strcpy(node->data.num3,data.num3);
     21     node->next = NULL;
     22     if(head ==NULL)
     23     {
     24         head = node;
     25         return head;
     26     }
     27     phead = head;
     28     
     29     while(phead->next != NULL)
     30     {
     31         phead = phead->next;
     32     }
     33     phead->next = node;
     34 
     35     return head;
     36 }
     37 
     38 ListType *list_add_first(ListType *head,DATATYPE_T data)
     39 {
     40     ListType *node;
     41 
     42     node = (ListType *)malloc(sizeof(ListType));
     43     if(NULL == node)
     44     {
     45         printf("malloc failed
    ");
     46         return NULL;
     47     }
     48     node->data = data;
     49     node->next = head;
     50     head = node;
     51 
     52     return head;
     53 }
     54 
     55 ListType *list_find(ListType *head,char *key)
     56 {
     57     ListType *phead;
     58     phead = head;
     59     
     60     while(phead)
     61     {
     62         if(strcmp(phead->data.name,key)==0 || strcmp(phead->data.num1,key)==0 || strcmp(phead->data.num2,key)==0 || strcmp(phead->data.num3,key)==0)
     63         {
     64             return phead;
     65         }
     66         phead = phead->next;
     67     }
     68     return NULL;
     69 }
     70 
     71 ListType *list_insert(ListType *head,char *findkey,DATATYPE_T data)
     72 {
     73     ListType *node,*node1;
     74     
     75     node = (ListType *)malloc(sizeof(ListType));
     76     if(NULL == node)
     77     {
     78         printf("malloc failed
    ");
     79         system("pause");
     80         return NULL;
     81     }
     82 
     83     node->data.n = data.n;
     84     strcpy(node->data.name,data.name);
     85     strcpy(node->data.num1,data.num1);
     86     strcpy(node->data.num2,data.num2);
     87     strcpy(node->data.num3,data.num3);
     88     node1 = list_find(head,findkey);    
     89     if(node1)
     90     {
     91         node->next = node1->next;
     92         node1->next = node; 
     93     }
     94     else
     95     {
     96         free(node);
     97         printf("can't find key
    ");
     98         system("pause");
     99     }
    100     return head;
    101 }
    102 
    103 ListType *list_delete(ListType *head,char *key)
    104 {
    105     ListType *node,*phead;
    106     node = head;
    107     phead = head;
    108     
    109     while(phead)
    110     {
    111         if(strcmp(phead->data.name,key)==0 || strcmp(phead->data.num1,key)==0 || strcmp(phead->data.num2,key)==0 || strcmp(phead->data.num3,key)==0)
    112         {
    113             node = head->next;
    114             free(head);
    115             head = NULL;
    116             head = node;
    117             if(head!=NULL)
    118             {
    119                 return head;
    120             }
    121             else
    122             {
    123                 return NULL;
    124             }
    125         }
    126         if(strcmp(phead->data.name,key)==0 || strcmp(phead->data.num1,key)==0 || strcmp(phead->data.num2,key)==0 || strcmp(phead->data.num3,key)==0)
    127         {
    128             node->next = phead->next;
    129             free(phead);
    130             phead = NULL;
    131             return head;
    132         }
    133         else
    134         {
    135             node = phead;
    136             phead = phead->next;
    137         }
    138     }
    139     return NULL;
    140 }
    141 
    142 ListType *free_contact(ListType *head)
    143 {
    144     ListType *p;
    145     p = head;
    146     while(head)
    147     {
    148         p = head->next;
    149         free(head);
    150         head = p;    
    151     }
    152     return head;
    153 }
    154 
    155 int list_length(ListType *head)
    156 {
    157     int length = 0;
    158     ListType *phead;
    159 
    160     phead = head;
    161     while(phead)
    162     {
    163         phead = phead->next;
    164         length++;
    165     }
    166 
    167     return length;
    168 }
    list.cpp
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include "list.h"
     4 
     5 int main()
     6 {
     7     int opt = 0;
     8     ListType *head=NULL;
     9     head = readfile(head);
    10     do
    11     {
    12         menu();
    13         scanf("%d",&opt);
    14         printf("you select for %d
    ",opt);
    15         system("pause");
    16         switch(opt)
    17         {
    18             case 1:
    19                 head = add_contact(head);        // 添加 
    20                 break;
    21             case 2:
    22                 find_contact(head);                // 查找 
    23                 break;        
    24             case 3:
    25                 head = delete_contact(head);    // 删除 
    26                 break;
    27             case 4:
    28                 head = insert_contact(head);    // 插入 
    29                 break;
    30             case 5:
    31                 show_contact(head);                // 输出 
    32                 break;
    33             case 6:
    34                 change_contact(head);
    35                 break;                            // 修改 
    36             case 7:
    37                    save_contact(head);                // 保存 
    38                    break;
    39             case 8:
    40                 sort_contact(head);                // 排序
    41                 break;    
    42             case 9:
    43                 head = free_contact(head);        // 清空 
    44                 break;                     
    45             case 0:
    46                 return 0;
    47             default:
    48                 printf("unknow select
    ");
    49                 break;
    50         }
    51     }while(opt!=0);
    52     
    53     return 0;
    54 }
    main.cpp
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <string.h>
      4 #include "list.h"
      5 
      6 /* 显示链表所有信息*/
      7 void list_all(ListType *head)
      8 {
      9     ListType *phead;
     10     DATATYPE_T data;
     11     phead = head;
     12 
     13     while(phead)
     14     {
     15         data = phead->data;
     16         printf("		***************************
    ");
     17         printf("		name: %s
    		telephone number: %d
    ",data.name,data.n);
     18         if(data.n >= 1)
     19           {
     20               printf("		telephone 1: %s
    ", data.num1);
     21           }
     22           if(data.n >= 2)
     23           {
     24               printf("		telephone 2: %s
    ", data.num2);
     25           }
     26           if(data.n >= 3)
     27           {
     28               printf("		telephone 3: %s
    ", data.num3);
     29           }
     30             phead = phead->next;
     31             printf("
    ");
     32     }
     33     system("pause");
     34 }
     35 
     36 /*添加联系人*/
     37 ListType *add_contact(ListType *head)
     38 {
     39     DATATYPE_T  contactInfo;
     40     int n,flag;
     41     printf("		***************************
    ");
     42     printf("		please input contact number:");
     43     scanf("%d", &n);
     44 
     45     while(n--)
     46     {
     47     printf("		***************************
    ");
     48     printf("		please input contact information
    "); 
     49       printf("		name:");
     50       scanf("%s", contactInfo.name);
     51       printf("		How many telephone:");
     52       scanf("%d", &contactInfo.n);
     53       if(contactInfo.n >= 1)
     54       {
     55           printf("		telephone 1:");
     56           scanf("%s", contactInfo.num1);
     57       }
     58       if(contactInfo.n >= 2)
     59       {
     60           printf("		telephone 2:");
     61           scanf("%s", contactInfo.num2);
     62       }
     63       if(contactInfo.n >= 3)
     64       {
     65           printf("		telephone 3:");
     66           scanf("%s", contactInfo.num3);
     67       }
     68     head = list_add_end(head,contactInfo);
     69  //     sort_contact(head);
     70    }
     71       
     72     return head;
     73 }
     74 
     75 /*按照关键字查找联系人*/
     76 int find_contact(ListType *head)
     77 {
     78     char key[20];
     79     ListType *node = NULL;
     80     
     81     if(head == NULL)
     82     {
     83         printf("the list is NULL!!!
    ");
     84         system("pause");
     85         return 0;
     86     }
     87     
     88        printf("		please input find key: ");
     89        scanf("%s",key);
     90     node = list_find(head,key);
     91     
     92     if(node!=NULL)
     93     {
     94         printf("		***************************
    ");
     95            printf("		name:%s
    		telephone number:%d
    ",node->data.name,node->data.n);
     96         if(node->data.n >= 1)
     97           {
     98               printf("		telephone 1:%s
    ", node->data.num1);
     99           }
    100           if(node->data.n >= 2)
    101           {
    102               printf("		telephone 2:%s
    ", node->data.num2);
    103           }
    104           if(node->data.n >= 3)
    105           {
    106               printf("		telephone 3:%s
    ", node->data.num3);
    107           }
    108           system("pause");
    109     }
    110     else
    111     {
    112         printf("		the key can't find!!!
    ");
    113     }
    114     return 0;
    115 }
    116 
    117 /*按照关键字删除联系人*/
    118 ListType *delete_contact(ListType *head)
    119 {
    120     char key[15];
    121     ListType *phead = NULL;
    122     if(head == NULL)
    123     {
    124         printf("the list is NULL!!!
    ");
    125         system("pause");
    126         return head;
    127     } 
    128     printf("		please input delete key:  ");
    129     scanf("%s",key);
    130     phead = list_delete(head,key);
    131     if(phead == NULL)
    132     {
    133         printf("delete after the list is NULL!!!
    ");
    134         return NULL;
    135     }
    136     return phead;
    137 }
    138 
    139 /*插入联系人信息*/
    140 ListType *insert_contact(ListType *head)
    141 {
    142     char key[20];
    143     DATATYPE_T insertData;
    144     ListType *phead = NULL;
    145     if(head == NULL)
    146     {
    147         printf("the list is NULL!!!
    ");
    148         system("pause");
    149         return head;
    150     } 
    151     printf("		please input insert key
    ");
    152     scanf("%s",key);
    153     printf("		please input insert contact information
    "); 
    154     printf("		name:");
    155       scanf("%s", insertData.name);
    156       printf("		How many telephone: ");
    157       scanf("%d", &insertData.n);
    158       if(insertData.n >= 1)
    159       {
    160           printf("		telephone 1: ");
    161           scanf("%s", insertData.num1);
    162       }
    163       if(insertData.n >= 2)
    164       {
    165           printf("		telephone 2: ");
    166           scanf("%s", insertData.num2);
    167       }
    168       if(insertData.n >= 3)
    169       {
    170           printf("		telephone 3: ");
    171           scanf("%s", insertData.num3);
    172       }
    173     
    174     phead = list_insert(head,key,insertData);
    175 //    sort_contact(phead);
    176     return phead;
    177 }
    178 
    179 /*显示所有联系人信息*/
    180 int show_contact(ListType *head)
    181 {
    182     
    183     if(head==NULL)
    184     {
    185         printf("the list is NULL
    ");
    186            system("pause");
    187         return -1;
    188     }
    189     
    190     sort_contact(head);
    191     return 0;
    192 }
    193 
    194 /*读取文件*/ 
    195 ListType * readfile(ListType *head)
    196 {
    197     FILE *fp;
    198     ListType *p;
    199     fp=fopen("通讯录.txt","rb");
    200     if(fp == NULL)
    201     {
    202         printf("通讯录不存在");
    203         if ((fp=fopen("通讯录.txt","wb"))==NULL) 
    204         
    205         { 
    206             printf("
    		建立失败"); 
    207             exit(0); 
    208         } 
    209         else 
    210         { 
    211             printf("
    	-----------------欢迎使用通讯录管理系统------------------");
    212             printf("
    	 通讯录文件已建立 "); 
    213             printf("
    	 按任意键进入主菜单 "); 
    214             printf("
    	---------------------------------------------------------");
    215             getchar(); 
    216         } 
    217     }
    218     
    219     fseek(fp, 0, SEEK_END);
    220     if (ftell(fp) != 0)
    221     {
    222 /* 
    223         float nLen = ftell(fp);
    224         nLen = nLen/sizeof(ListType);
    225         printf("%f
    ", nLen);
    226         while(nLen--)
    227 */        
    228         rewind(fp);
    229         while (!feof(fp))
    230         {    
    231                 ListType *p;
    232                 p = (ListType *)malloc(sizeof(ListType));
    233         //        fread(p,sizeof(ListType),1,fp);
    234                 if(fread(p,sizeof(ListType),1,fp)!=1)//读到末尾或者出错,跳出循环
    235                 {
    236                     free(p);
    237                     break;
    238                 }
    239                 p->next = head;
    240                 head = p;
    241                 
    242 /*                printf("name:%s
    telephone number:%d
    ",p->data.name,p->data.n);
    243                 if(head->data.n >= 1)
    244                   {
    245                       printf("telephone 1:%s
    ", head->data.num1);
    246                   }
    247                   if(head->data.n >= 2)
    248                   {
    249                       printf("telephone 2:%s
    ", head->data.num2);
    250                   }
    251                   if(head->data.n >= 3)
    252                   {
    253                       printf("telephone 3:%s
    ", head->data.num3);
    254                   }
    255                   system("pause");
    256 */
    257         }
    258         
    259         
    260         printf("
    	-------------欢迎使用通讯录管理系统-----------------------");
    261         printf("
    	 文件导入成功 "); 
    262         printf("
    	 按任意键返回主菜单 "); 
    263         printf("
    	---------------------------------------------------------");
    264         getchar(); 
    265 
    266     }
    267     else
    268     {
    269         printf("
    	--------------欢迎使用通讯录管理系统----------------------");
    270         printf("
    	 文件导入成功 "); 
    271         printf("
    	 通讯录文件中无任何纪录 "); 
    272         printf("
    	 按任意键返回主菜单 "); 
    273         printf("
    	----------------------------------------------------------");
    274         getchar();  
    275     }
    276     
    277     return head;
    278 }
    279 
    280 void save_contact(ListType *head)
    281 {
    282     FILE *fp;
    283     ListType *p;
    284     if(head == NULL)
    285     {
    286         printf("the list is NULL!!!
    ");
    287         system("pause");
    288     }
    289     else
    290     {
    291         fp=fopen("通讯录.txt","wb");
    292         p = head;
    293         while(p)
    294         {
    295             fwrite(p,sizeof(ListType),1,fp);
    296             p = p->next;
    297         }
    298 //    fwrite(head,sizeof(ListType),list_length(head),fp);
    299         printf("save success
    ");
    300         system("pause"); 
    301     } 
    302     
    303 }
    304 
    305 void change_contact(ListType *head)
    306 {
    307     char key[20];
    308     ListType *node = NULL;
    309     
    310     if(head == NULL)
    311     {
    312         printf("the list is NULL!!!
    ");
    313         system("pause");
    314     }
    315     else
    316     {
    317            printf("		please input find key: ");
    318            scanf("%s",key);
    319         node = list_find(head,key);
    320     
    321         if(node!=NULL)
    322           {
    323                printf("		***************************
    ");
    324                printf("		name:%s
    		telephone number:%d
    ",node->data.name,node->data.n);
    325             if(node->data.n >= 1)
    326               {
    327                   printf("		telephone 1:%s
    ", node->data.num1);
    328               }
    329               if(node->data.n >= 2)
    330               {
    331                   printf("		telephone 2:%s
    ", node->data.num2);
    332               }
    333               if(node->data.n >= 3)
    334               {
    335                   printf("		telephone 3:%s
    ", node->data.num3);
    336               }
    337               system("pause");
    338         }
    339           else
    340         {
    341             printf("		the key can't find!!!
    ");
    342           }
    343         DATATYPE_T  contactInfo;
    344 
    345         printf("		please input contact information
    "); 
    346           printf("		name:");
    347           scanf("%s", contactInfo.name);
    348           printf("		How many telephone:");
    349           scanf("%d", &contactInfo.n);
    350           if(contactInfo.n >= 1)
    351           {
    352             printf("		telephone 1:");
    353               scanf("%s", contactInfo.num1);
    354           }
    355           if(contactInfo.n >= 2)
    356           {
    357               printf("		telephone 2:");
    358               scanf("%s", contactInfo.num2);
    359           }
    360           if(contactInfo.n >= 3)
    361           {
    362               printf("		telephone 3:");
    363               scanf("%s", contactInfo.num3);
    364           }
    365           node->data.n = contactInfo.n;
    366          strcpy(node->data.name,contactInfo.name);
    367        strcpy(node->data.num1,contactInfo.num1);
    368          strcpy(node->data.num2,contactInfo.num2);
    369           strcpy(node->data.num3,contactInfo.num3);        
    370     }
    371 
    372 }
    373 
    374 void sort_contact(ListType *head)
    375 {
    376     ListType *p, *t, *p1, *t1, *r;
    377     DATATYPE_T q;
    378     for(p = head; p!=NULL; p = p->next)
    379     {
    380         for(t = p->next; t!=NULL;t = t->next)
    381         {
    382             if(strcmp(p->data.name,t->data.name)>0)
    383             {
    384                 q.n = t->data.n;
    385                 strcpy(q.name,t->data.name);
    386                 strcpy(q.num1,t->data.num1);
    387                 strcpy(q.num2,t->data.num2);
    388                 strcpy(q.num3,t->data.num3);
    389                 t->data.n = p->data.n;
    390                 strcpy(t->data.name,p->data.name);
    391                 strcpy(t->data.num1,p->data.num1);
    392                 strcpy(t->data.num2,p->data.num2);
    393                 strcpy(t->data.num3,p->data.num3);
    394                 p->data.n = q.n;
    395                 strcpy(p->data.name,q.name);
    396                 strcpy(p->data.num1,q.num1);
    397                 strcpy(p->data.num2,q.num2);
    398                 strcpy(p->data.num3,q.num3);  
    399                               
    400             }
    401         }
    402     }
    403     if(head == NULL)
    404     {
    405         printf("the list is NULL!!!
    ");
    406         system("pause");
    407     }
    408     else
    409     {
    410         list_all(head);
    411     }
    412     
    413 }
    414 
    415 int menu()
    416 {
    417     printf("
    ");
    418     system("cls");
    419     system("color 17");
    420     printf("			****Address Book****");
    421     printf("
    			** author:******* **
    ");
    422     printf("			**  ID:14045227  **
    ");
    423     printf("			********************
    ");
    424     printf("			 1.add contact
    ");
    425     printf("			 2.find a contact
    ");
    426     printf("			 3.delete a contact
    ");
    427     printf("			 4.insert a contact
    ");
    428     printf("			 5.show a contact
    ");
    429     printf("			 6.change a contact
    ");
    430     printf("			 7.save contact
    ");
    431     printf("			 8.sort contact
    ");
    432     printf("			 9.free all contact
    ");
    433     printf("			 0.quit ");
    434     printf("
    ");
    435     printf("			********************
    ");
    436     printf("please select: ");
    437 }
    Address.cpp
    转载请注明出处:http://www.cnblogs.com/ygdblogs
  • 相关阅读:
    运营是一个产品价值传递的过程,互联网营销 狼人:
    资深设计师Tony Ventrice解析手机游戏开发的四个层次 狼人:
    ubuntu 10.10下搭建android开发环境 安装必要工作用软件 狼人:
    iOS概述 狼人:
    关于Android的一些设计 狼人:
    企业中两个重要而又容易被忽视的角色,互联网营销 狼人:
    PySide教程:简单的对话框应用程序 狼人:
    PySide教程:PySide中使用Qt属性 狼人:
    网页的手机版本是否值得去做?,互联网营销 狼人:
    元素类型jQuery选择器
  • 原文地址:https://www.cnblogs.com/ygdblogs/p/4599092.html
Copyright © 2020-2023  润新知