基于LinuxC下的通讯录项目

通讯录说明文档
语言:c语言

格式: 编号 姓 名 住址 电话 住宅电话
X XXX XXX 183****5668 **(8位)

要求:使用结构体形式对数据存储

功能:使用链表实现增加(在增加人员的过程中有一个自动排序功能,比如按姓名排序)、删除、修改、查找(比如:工号查找、电话查找)的功能;
(1)添加用户信息(号码长度 号码是否重复)
(2)列出好友信息(按姓名排序)
(3)查找好友信息(按姓名查找)
(4)删除好友
(5)退出

注意事项:在增、删、改、查过程中,如果姓名相同怎么进行选择操作。

这是一个通讯录的项目,在这里我来整理一下自己的程序是怎么实现的。
解决这个问题用的是链表的结构体。首先是头文件的编写,这里我定义的结构体里面有四个数据,名字、住址、手机号码、住宅电话。定义完了结构体就可以开始做功能了。
首先再写功能之前呢,要先做一个界面,把该有的东西准备好,利用switch语句进入各个功能函数。首先第一步就是对链表进行初始化,这里初始化之所以分配空间是因为我给了他一个头节点的空间,要有这个头节点就要开一个空间给他。接着就是正式进入功能了,首先第一个是添加用户信息。纵观整个程序,最烦的也就是插入信息了,要对每一个信息进行核对是否输入正确,手机号码不可以重复不可以不是11位,住宅号码可以重复,所以这里我一开始都用字符串去做,但是在输入手机号码和住宅号码的时候就出现了问题,本来我输完了手机号码该输住宅号码了,显示的总是手机号码和住宅号码连起来的一长串数字字符串,里面的值也是一长串字符串,然后住宅号码又显示了一次,这就让我很烦恼,让查询的时候手机号码显示19位了,问题困扰了我之后,我决定把住宅号码改成int型,因为8位数还是在int的范围之内的,这个问题就这么解决了。插入信息的问题解决了那项目就变得简单很多,只要熟悉链表的操作都可以顺利完成了,总体来说也是一个非常简单的程序吧。

头文件

  1 ifndef _ADDRESS_H
  2 #define _ADDRESS_H
  3 
  4 
  5 #define success 100001
  6 #define failure 100002
  7 
  8 
  9 typedef char elemchar;
 10 typedef int elemint;
 11 typedef long int elemlongint;
 12 
 13 struct addresslist
 14 {
 15     elemchar name[30];
 16     elemchar home[30];
 17     elemchar phone[11];
 18     elemlongint number;
 19     struct addresslist *next;
 20 };
 21 
 22 typedef struct addresslist AdList;
 23 typedef struct addresslist *Alist;
 24 
 25 int InsertList(Alist *L);
 26 int ListTravers(Alist L, void(*print)(Alist, int));
 27 int SearchInfo(Alist L, void(*print)(Alist, int));
 28 int DeleteInfo(Alist L);
 29 int AlterInfo(Alist *L);
 30 
 31 #endif

主函数

  1 #include <stdio.h>
  1 #include <stdio.h>
  2 #include "AdressList.h"
  3 #include <stdlib.h>
  4 #include <string.h>
  5 
  6 void visit(Alist p, int i)
  7 {
  8     printf("*|%d|%s %s %s %d\n", i, p->name, p->home, p->phone, p->number);
  9 }
  1 #include <stdio.h>
  2 #include "AdressList.h"
  1 #include <stdio.h>
  1 #include <stdio.h>
  2 #include "AdressList.h"
  3 #include <stdlib.h>
  4 #include <string.h>
  5 
  6 void visit(Alist p, int i)
  7 {
  8     printf("*|%d|%s %s %s %d\n", i, p->name, p->home, p->phone, p->number);
  9 }
 10 
 11 int main()
 12 {
 13     Alist list;
 14     InitList(&list);
 15     int ret;
 16     int choice;
 17 
 18     sleep(1);
 19     system("clear");
 20     while(1)
 21     {
 22         printf("*******************************************************\n\n");
 23         printf("************************welcome************************\n\n");
 24         printf("*******************************************************\n\n");
 25         printf("**1.添加用户信息                      2.列出好友信息 **\n");
 26         printf("**3.查找好友信息                      4.删除好友信息 **\n");
 27         printf("**5.修改好友信息                      6.退出         **\n\n");
 28         printf("*******************************************************\n\n");
 29 
 30         scanf("%d",&choice);
 31         if(choice > 9 || choice < 0)
 32         {
 33             printf("Error!\n");
 34             return 0;
 35         }
 36         switch(choice)
 37         {
 38             case 1 :
 39                     ret = InsertList(&list);
 40                     if(success == ret)
 41                     {
 42                         printf("Add Success!\n");
 43                     }
 44                     else
 45                     {
 46                         printf("Add Failed!\n");
 47                     }
 48                     break;
 49             case 2 :
 50                     ret = ListTravers(list, visit);
 51                     if(success == ret)
 52                     {
 53                         printf("Travers Success!\n");
 54                     }
 55                     else
 56                     {
 57                         printf("Travers Failed!\n");
 58                     }
 59                     break;
 60             case 3 :
 61                     ret = SearchInfo(list, visit);
 62                     if(success == ret)
 63                     {
 64                         printf("Search Success!\n");
 65                     }
 66                     else
 67                     {
 68                         printf("Not Found!\n");
 69                     }
 70                     break;
 71             case 4 :
 72                     ret = DeleteInfo(list);
 73                     if(success == ret)
 74                     {
 75                         printf("Delete Success!\n");
 76                     }
 77                     else
 78                     {
 79                         printf("Delete Failed!\n");
 80                     }
 81                     break;
 82             case 5 :
 83                     ret = AlterInfo(&list);
 84                     if(success == ret)
 85                     {
 86                         printf("Alter Success!\n");
 87                     }
 88                     else
 89                     {
 90                         printf("Alter Failed!\n");
 91                     }
 92                     break;
 93 
 94             case 6 :
 95                     exit(1);
 96                     break;
 97             default :
 98                     printf("输入错误!\n");
 99                     break;
100         }
101     }
102 
103     return 0;
104 }

接口函数

  1 #include <stdio.h>
  2 #include "AdressList.h"
  3 #include <stdlib.h>
  4 #include <string.h>
  5 
  6 void InitList(Alist *L)
  7 {
  8     (*L) = (Alist)malloc(sizeof(AdList));
  9     if(NULL == (*L))
 10     {
 11         printf("System Error!\n ");
 12         exit(1);
 13     }
 14     else
 15     {
 16         (*L)->next = NULL;
 17         printf("InitList Success! loading...\n");
 18     }
 19 }
 20 
 21 int InsertList(Alist *L)
 22 {   system("clear");
 23     Alist p = (*L)->next;
 24     Alist tmp = (*L);
 25     Alist n;
 26     Alist check = (*L);
 27 
 28     n = (Alist)malloc(sizeof(AdList));
 29     if(NULL == n)
 30     {
 31         return failure;
 32     }
 33 
 34     printf("姓名:");
 35     scanf("%s",n->name);
 36     while(strlen(n->name) > 20)
 37     {
 38          printf("请输入正确姓名:\n");
 39          scanf("%s", n->name);
 40     }
 41 
 42     printf("\n住址:");
 43     scanf("%s", n->home);
 44     while(strlen(n->home) > 20)
 45     {
 46          printf("请输入正确住址:\n");
 47          scanf("%s", n->home);
 48     }
 49 
 50     printf("\n手机号码:");
 51     scanf("%s", n->phone);
 52     while(check)
 53     {
 54         if(strcmp(n->phone,check->phone) == 0)
 55         {
 56             printf("号码已存在!请重新输入:\n");
 57             scanf("%s", n->phone);
 58         }
 59         check = check->next;
 60     }
 61     while(11 != strlen(n->phone))
 62     {
 63          printf("请输入正确号码:\n");
 64          scanf("%s", n->phone);
 65     }
 66 
 67     printf("\n住宅号码:");
 68     scanf("%d", &n->number);
 69     while(n->number > 99999999 || n->number < 10000000)
 70     {
 71          printf("请输入正确号码:\n");
 72          scanf("%d", &n->number);
 73     }
 74     printf("%s\n",n->phone);
 75 
 76     if(p == NULL)
 77     {
 78         n->next = p;
 79         tmp->next = n;
 80     }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值