(一)实现思路
1.通讯录功能
添加好友,删除好友,查找好友,修改好友信息,对好友进行排序
2.模块化实现各方面的功能
a. test.c
测试通讯录功能
b. Contact.c
实现通讯录功能
c. Contact.h
包含通讯录实现的头文件
3.代码实现
(二)源代码
A.test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "contact.h" void menu() { printf ( "*******************************\n" ); printf ( "*** 1.Add 2.Del ***\n" ); printf ( "*** 3.Search 4.Modify ***\n" ); printf ( "*** 5.Show 6.Sort ***\n" ); printf ( "*** 7.Help 8.About0 ***\n" ); printf ( "*** 0.Exit ***\n" ); printf ( "*******************************\n" ); } int main() { int input = 0; //创建通讯录 int size = 0; struct Contact con; //一个结构体里包含1000个人的信息和size; //size表示的是该通讯录里现在的好友数 //初始化通讯录 InitContact(&con); //使size的初始值,以及好友信息初始化为0; do { menu(); printf ( "请选择:" ); scanf ( "%d" , &input); switch (input) { //添加好友信息 case Add: AddContact(&con); break ; //删除好友 case Del: DelContact(&con); break ; //查找好友信息 case Search: SearchContact(&con); break ; //修改好友信息 case Modify: ModifyContact(&con); break ; //显示好友信息 case Show: ShowContact(&con); break ; //好友排序 case Sort: SortContact(&con); break ; //退出 case Exit: printf ( "退出通讯录!" ); break ; //通讯录的使用以及帮助 case Help: HelpContact(); break ; //关于通讯录 case About: AboutContact(); break ; //选择错误 default : printf ( "选择错误!" ); break ; } } while (input); return 0; } |
B.Contact.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#define _CRT_SECURE_NO_WARNINGS 1 #define Max 1000 #define Max_name 20 #define Max_sex 5 #define Max_tele 12 #define Max_addr 30 enum Option { Exit, Add, Del, Search, Modify, Show, Sort, Help, About }; //创建一个结构体来存放通讯录中要存放的信息 struct PeoInfo { char name[Max_name]; int age; char sex[Max_sex]; char tele[Max_tele]; char addr[Max_addr]; }; //通讯录类型 struct Contact { struct PeoInfo data[Max]; //存放一个信息,包括好友姓名,年龄,性别,电话,地址 int size; //记录当前已经有的元素个数 //存入一个好友,size加1,表示通讯录人数增加一个 }; //声明函数 //1.对通讯录进行初始化 void InitContact( struct Contact* ps); //增加好友信息 void AddContact( struct Contact* ps); //删除好友 void DelContact( struct Contact* ps); //查找指定姓名的好友 void SearchContact( struct Contact* ps); //显示好友信息 void ShowContact( const struct Contact* ps); //修改好友信息 void ModifyContact( struct Contact* ps); //按名字首字母对通讯录的好友进行排序 void SortContact( struct Contact* ps); //帮助使用通讯录 void HelpContact(); //关于通讯录 void AboutContact(); |
C.Contact.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
|
#define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" #include <stdio.h> #include <stdlib.h> #include <string.h> //初始化通讯录 void InitContact( struct Contact* ps) { memset (ps->data, 0, sizeof (ps->data)); ps->size = 0; //设置通讯录最初只有0个元素 } //帮助使用通讯录 void HelpContact() { printf ( "各按键的使用:\n" ); printf ( "1.添加好友\n" ); printf ( "2.删除好友\n" ); printf ( "3.查找好友信息\n" ); printf ( "4.修改好友信息\n" ); printf ( "5.显示好友信息\n" ); printf ( "6.对好友进行排序\n" ); printf ( "7.帮助使用通讯录\n" ); printf ( "8.关于通讯录\n" ); printf ( "谢谢使用通讯录!\n" ); } //关于通讯录 void AboutContact() { printf ( "通讯录一般指在日常生活中用笔记录,也在手机,电脑,电子字典等电子产品中拥有这个功能。\n" ); } //增加好友的电话,信息 void AddContact( struct Contact* ps) { if (ps->size == Max) { printf ( "通讯录已满,无法增加!\n" ); } else { printf ( "请输入姓名:" ); scanf ( "%s" , ps->data[ps->size].name); //除了年龄,其他都是数组,直接用数组名 printf ( "请输入年龄:" ); scanf ( "%d" , &(ps->data[ps->size].age)); //年龄不是数组,则需要& printf ( "请输入性别:" ); scanf ( "%s" , ps->data[ps->size].sex); printf ( "请输入电话:" ); scanf ( "%s" , ps->data[ps->size].tele); printf ( "请输入地址:" ); scanf ( "%s" , ps->data[ps->size].addr); ps->size++; //添加成功一个1好友,size加1,; printf ( "添加成功!\n" ); } } //在删除,查找,修改的函数中均涉及查找到该好友才能进行 //为了避免冗余,我们把查找的这个环节从函数中抽离出来 //在函数中直接使用,就不会显得重复 static int Find_by_name( struct Contact* ps, char name[Max_name]) { int i; for (i = 0; i < ps->size; i++) { //将要查找的好友姓名与通讯录中的好友进行比较 if (0 == strcmp (ps->data[i].name, name)) { //若找到,返回其下标 return i; } } //若都循环,比对完了以后还没找到就返回-1 return -1; } //删除好友信息 void DelContact( struct Contact* ps) { int j; char name[Max_name]; printf ( "请输入删除好友的名字:" ); scanf ( "%s" , name); //1.查找要删除的人的位置 int pos = Find_by_name(ps, name); //调用函数进行查找,若找到,返回下标,若没找到,返回-1; //2.删除 if (pos==-1) { printf ( "该好友不存在!\n" ); } else { //删除数据 for (j = pos; j < ps->size - 1; j++) { ps->data[j] = ps->data[j + 1]; //删除数据后,后面的元素位置都改变,向前移动一个位置; } ps->size--; //删除一个好友,size-1. printf ( "删除成功!\n" ); } } //查找指定好友信息 void SearchContact( struct Contact* ps) { char name[Max_name]; printf ( "输入要查找的好友姓名:" ); scanf ( "%s" , name); int pos = Find_by_name(ps, name); if (pos ==-1) { printf ( "该好友不存在!\n" ); } else { printf ( "%10s\t%4s\t%5s\t%12s\t%20s\n" , "名字" , "年龄" , "性别" , "电话" , "地址" ); printf ( "%10s\t%4d\t%5s\t%12s\t%20s\n" , ps->data[pos].name, ps->data[pos].age, ps->data[pos].sex, ps->data[pos].tele, ps->data[pos].addr); } } //修改好友信息 void ModifyContact( struct Contact* ps) { char name[Max_name]; printf ( "请输入需要修改信息的好友姓名:" ); scanf ( "%s" , name); int pos=Find_by_name(ps, name); if (pos == -1) { printf ( "该用户不存在!\n" ); } else { printf ( "请输入姓名:" ); scanf ( "%s" , ps->data[pos].name); printf ( "请输入年龄:" ); scanf ( "%d" , &(ps->data[pos].age)); printf ( "请输入性别:" ); scanf ( "%s" , ps->data[pos].sex); printf ( "请输入电话:" ); scanf ( "%s" , ps->data[pos].tele); printf ( "请输入地址:" ); scanf ( "%s" , ps->data[pos].addr); printf ( "修改成功!\n" ); } } //显示出好友的基本信息 void ShowContact( const struct Contact* ps) { if (ps->size == 0) { printf ( "通讯录为空!\n" ); } else { int i = 0; printf ( "%10s\t%4s\t%5s\t%12s\t%20s\n" , "名字" , "年龄" , "性别" , "电话" , "地址" ); for (i = 0; i < ps->size; i++) { printf ( "%10s\t%4d\t%5s\t%12s\t%20s\n" , ps->data[i].name, ps->data[i].age, ps->data[i].sex, ps->data[i].tele, ps->data[i].addr); } } } //按照名字的首字母进行排序 int cmp_stu_by_name( const void * e1, const void * e2) { return ( strcmp ((( struct Contact*)e1)->data->name, (( struct Contact*)e2)->data->name)); } //我们用qsort()函数对我们的好友按照名字首字母进行排序 void SortContact( struct Contact* ps) { qsort (ps->data, ps->size, sizeof (ps->data[0]), cmp_stu_by_name); printf ( "%10s\t%4s\t%5s\t%12s\t%20s\n" , "名字" , "年龄" , "性别" , "电话" , "地址" ); int i; for (i = 0; i < ps->size; i++) { printf ( "%10s\t%4d\t%5s\t%12s\t%20s\n" , ps->data[i].name, ps->data[i].age, ps->data[i].sex, ps->data[i].tele, ps->data[i].addr); } } |
到此这篇关于C语言实现通讯录的详细代码的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。