通讯录说明文档
语言: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 }