C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
代码实现:
头文件:
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
|
#ifndef __HEAD_H__ ////防止头文件被多次调用 #define __HEAD_H__ #include<stdio.h> #include<string.h> #include<stdlib.h> #define PEOPLE_MAX 1000 #define NAME_LENTH 20 #define SEX_LENTH 5 #define AGE_LENTH 10 #define TEL_LENTH 15 #define ADDR_LENTH 50 //宏定义各个数据所需的大小,后续引用直接可以使用名称,或需修改时只用修改这里就可以了 struct People { char name[NAME_LENTH]; char sex[SEX_LENTH]; int age; char tel[TEL_LENTH ]; char addr[ADDR_LENTH]; }; //定义人的信息结构体(包含各种信息) struct Contact { struct People person[PEOPLE_MAX]; int user_count; }; //定义通讯录结构体(包含人的信息的结构体和用户个数) typedef struct Contact * pContact; int add_contact(pContact pcon); //pContact是一个结构体指针类型,pcon是一个指向struct Contact的一个指针 int dele_contact(pContact pcon); //例如:typedef int * int 即 int *p ==> int p int find_contact(pContact pcon); int modify_contact(pContact pcon); int show_contact(pContact pcon); int clear_contact(pContact pcon); void menu(); //函数的声明 #endif |
各种函数实现:
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
|
#include"head.h" int add_contact(pContact pcon) { if (pcon->user_count >= PEOPLE_MAX) { printf ( "contact is full!\n" ); return -1; } else { printf ( "input name,please!\n" ); scanf ( "%s" ,pcon->person[pcon->user_count].name); printf ( "input sex,please!\n" ); scanf ( "%s" ,pcon->person[pcon->user_count].sex); printf ( "input age,please!\n" ); scanf ( "%d" ,&pcon->person[pcon->user_count].age); //这里用%d输出int printf ( "input tel,please!\n" ); scanf ( "%s" ,pcon->person[pcon->user_count].tel); printf ( "input addr,please!\n" ); scanf ( "%s" ,pcon->person[pcon->user_count].addr); (pcon->user_count)++; } return 0; } //添加信息的实现 int dele_contact(pContact pcon) { int ret = find_contact(pcon); //调用查找函数并保存其值 if (ret != -1) { int i = 0; i = ret; //这里要用另一个变量来保存输入的姓名 for (i = 0;i < pcon->user_count-1;i++) { pcon->person[i] = pcon->person[i+1]; //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤 } pcon->user_count --; //直接减去最后一个即count-- } return 0; } int find_contact(pContact pcon) { int i = 0; char ret[NAME_LENTH]; //用另一个数组来保存name printf ( "input name,please!\n" ); scanf ( "%s" ,ret); while (i <= pcon->user_count) { if ( strcmp (ret,pcon->person[i].name)== 0) //比较输入的姓名和通讯录中已有的姓名 { printf ( "name\tsex\tage\ttel\taddr\t\n" ); printf ( "%s\t" ,pcon->person[i].name); printf ( "%s\t" ,pcon->person[i].sex); printf ( "%d\t" ,pcon->person[i].age); printf ( "%s\t" ,pcon->person[i].tel); printf ( "%s\t\n" ,pcon->person[i].addr); return i; } i++; } printf ( "sorry,the name you find is not exist!\n" ); return -1; } int modify_contact(pContact pcon) //修改函数,首先找到如要修改的姓名,然后重新输入 { int ret = find_contact(pcon); if (ret != -1) { printf ( "input name,please!\n" ); scanf ( "%s" ,pcon->person[ret].name); printf ( "input sex,please!\n" ); scanf ( "%s" ,pcon->person[ret].sex); printf ( "input age,please!\n" ); scanf ( "%d" ,&(pcon->person[ret].age)); printf ( "input tel,please!\n" ); scanf ( "%s" ,pcon->person[ret].tel); printf ( "input addr,please!\n" ); scanf ( "%s" ,pcon->person[ret].addr); } else { printf ( "sorry,the name you find is not exist!\n" ); } return 0; } int show_contact(pContact pcon) { int i = 0; printf ( "name\tsex\tage\ttel\t\taddr\t\n" ); //制表符来制作表头 for (i = 0;i < pcon->user_count;i++) { printf ( "%s\t" ,pcon->person[i].name); printf ( "%s\t" ,pcon->person[i].sex); printf ( "%d\t" ,pcon->person[i].age); printf ( "%s\t" ,pcon->person[i].tel); printf ( "%s\t\n" ,pcon->person[i].addr); } printf ( "\n" ); return 0; } int clear_contact(pContact pcon) { pcon->user_count = 0 ; return 0; } //清除所有人,直接让成员个数变为0即可 void menu() { printf ( "-------contact---------\n" ); printf ( " 1.添加联系人信息 \n" ); printf ( " 2.删除指定联系人信息 \n" ); printf ( " 3.查找指定联系人信息 \n" ); printf ( " 4.修改指定联系人信息 \n" ); printf ( " 5.显示所有联系人信息 \n" ); printf ( " 6.清空所有联系人 \n" ); printf ( " 0.谢谢使用 \n" ); printf ( "-------contact---------\n" ); } |
主函数:
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
|
#include"head.h" int main() { int n=1; struct Contact people; //调用通讯录结构体 people.user_count = 0; //初始化user_count while (n) { menu(); printf ( "please input\n" ); scanf ( "%d" ,&n); switch (n) { case 1: { add_contact(&people); break ; } case 2: { dele_contact(&people); break ; } case 3: { find_contact(&people); break ; } case 4: { modify_contact(&people); break ; } case 5: { show_contact(&people); break ; } case 6: { clear_contact(&people); break ; } default : { return 0; break ; } //switch case语句分支选择不同函数实现不同作用 } } return 0; } |
结果实现:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/ret_skd/article/details/44923195