本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下
用来存储1000个人的信息的通讯录,每个人的信息包括:
姓名、性别、年龄、电话、住址
程序如下:
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
|
#include<stdio.h> #include<string.h> #include<stdlib.h> struct People { char name[20]; char sex[5]; int age; char tel[15]; char addr[50]; }; //定义人的信息结构体(包含各种信息) struct Contact { struct People person[1000]; //定义通讯录结构体 int n; //(包含人的信息的结构体和用户个数n) }; typedef struct Contact * p; void menu(); int add(p q); //p是一个结构体指针类型,q是一个指向struct Contact的一个指针 int delete (p q); //例如:typedef int * int 即 int *p ==> int p int find(p q); int modify(p q); int show(p q); int clear(p q); //函数的声明 void menu() //目录格式 { printf ( "====================欢迎来到苏嵌154通讯录==================\n" ); printf ( "----------------------1.添加联系人信息---------------------\n" ); printf ( "----------------------2.删除指定联系人信息-----------------\n" ); printf ( "----------------------3.查找指定联系人信息-----------------\n" ); printf ( "----------------------4.修改指定联系人信息-----------------\n" ); printf ( "----------------------5.显示所有联系人信息-----------------\n" ); printf ( "----------------------6.清空所有联系人---------------------\n" ); printf ( "----------------------0.谢谢使用---------------------------\n" ); printf ( "====================欢迎来到苏嵌154通讯录==================\n" ); } int add(p q) //添加联系人 { if ((*q).n >= 1000) { printf ( "contact is full!\n" ); return -1; } else { printf ( "输入姓名:\n" ); scanf ( "%s" ,(*q).person[(*q).n].name); printf ( "输入性别:\n" ); scanf ( "%s" ,(*q).person[(*q).n].sex); printf ( "输入年龄:\n" ); scanf ( "%d" ,&(*q).person[(*q).n].age); printf ( "输入电话:\n" ); scanf ( "%s" ,(*q).person[(*q).n].tel); printf ( "输入地址:\n" ); scanf ( "%s" ,(*q).person[(*q).n].addr); ((*q).n)++; } return 0; } int delete (p q) //删除联系人 { int ret = find(q); //调用查找函数并保存其值 if (ret != -1) { int i = 0; i = ret; //这里要用另一个变量来保存输入的姓名 for (i = 0;i < (*q).n-1;i++) { (*q).person[i] = (*q).person[i+1]; //用后一个覆盖前边的,如果要删除的是最后一个不进行此步骤 } (*q).n --; //直接减去最后一个即count-- } return 0; } int find(p q) //查找联系人 { int i = 0; char ret[20]; //用另一个数组来保存姓名 printf ( "输入姓名:\n" ); scanf ( "%s" ,ret); while (i <= (*q).n) { if ( strcmp (ret,(*q).person[i].name)== 0) //比较输入的姓名和通讯录中已有的姓名 { printf ( "姓名\t性别\t年龄\t电话\t地址\4t\n" ); //制表符来制作表头 printf ( "%s\t" ,(*q).person[i].name); printf ( "%s\t" ,(*q).person[i].sex); printf ( "%d\t" ,(*q).person[i].age); printf ( "%s\t" ,(*q).person[i].tel); printf ( "%s\4t\n" ,(*q).person[i].addr); return i; } i++; } printf ( "你丫的我班没这个人\n" ); return -1; } int modify(p q) //修改函数,首先找到如要修改的姓名,然后重新输入 { int ret = find(q); if (ret != -1) { printf ( "输入修改的姓名:\n" ); scanf ( "%s" ,(*q).person[ret].name); printf ( "输入修改的性别:\n" ); scanf ( "%s" ,(*q).person[ret].sex); printf ( "输入修改的年龄:\n" ); scanf ( "%d" ,&((*q).person[ret].age)); printf ( "输入修改的电话:\n" ); scanf ( "%s" ,(*q).person[ret].tel); printf ( "输入修改的地址:\n" ); scanf ( "%s" ,(*q).person[ret].addr); } else { printf ( "你丫的我班没这个人\n" ); } return 0; } int show(p q) //显示全部联系人 { int i = 0; printf ( "姓名\t性别\t年龄\t电话\t地址\4t\n" ); for (i = 0;i < (*q).n;i++) { printf ( "%s\t" ,(*q).person[i].name); printf ( "%s\t" ,(*q).person[i].sex); printf ( "%d\t" ,(*q).person[i].age); printf ( "%s\t" ,(*q).person[i].tel); printf ( "%s\4t\n" ,(*q).person[i].addr); } printf ( "\n" ); return 0; } int clear(p q) //清除所有人,直接让成员个数变为0 { (*q).n = 0 ; return 0; } int main() { int n=1; struct Contact people; //调用通讯录结构体 people.n = 0; //初始化n while (n) { menu(); printf ( "请选择你的骚操作:\n" ); scanf ( "%d" ,&n); switch (n) //switch case语句分支选择不同函数实现不同作用 { case 1: { add(&people); break ; } case 2: { delete (&people); break ; } case 3: { find(&people); break ; } case 4: { modify(&people); break ; } case 5: { show(&people); break ; } case 6: { clear(&people); break ; } default : { return 0; break ; } } } return 0; } |
这样就实现了一个简单的通讯录。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/MyFamily_IT/article/details/78736560