你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用C语言实现简易手机通讯录

[复制链接]
gaosmile 发布时间:2021-1-14 13:53
一、通讯录
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、电话。
功能:
  • 新增联系人
  • 查找联系人
  • 删除联系人
  • 修改联系人
  • 查看所有联系人
  • 清空所有联系人
  • 以名字排序所有联系人

    9 G  E- G9 U# Q* D1 Q- p
这是一个简单的通讯录,实现方案是初级版。只能在程序运行期间存在(没有写入文件)。

二、菜单实现和用户交互
菜单实现和用户的交互
0.退出1.新增联系人2.查找联系人3.删除联系人4.修改联系人5.查看所有联系人6.清空所有联系人7.以名字排序所有联系人
int menu(){
  B4 r7 T# b, ]# R6 J9 Pprintf("=====================\n");
8 g9 L* t) v) s+ h6 i8 Y) L1 rprintf(" 1. 新增联系人\n");4 Y- ]/ @  K. {( P
printf(" 2. 查找联系人\n");  V/ J3 J& t4 ~+ P1 v
printf(" 3. 删除联系人\n");$ e) c8 E( L: @* S
printf(" 4. 修改联系人\n");   
  O8 t3 v) Z& f; |4 h- D* l! D* \printf(" 5. 查看所有联系人\n");
1 G3 k3 {8 T# h, fprintf(" 6. 清空所有联系人\n"); ' [6 t3 L) m8 D% M8 B! k+ c9 r; z
printf(" 7. 以名字排序所有联系人\n");
1 u% g7 M, t, `printf(" 0. 退出\n");7 {; M8 W2 m2 \8 ?+ q' q& T
printf("=====================\n");
0 Y3 J6 ]) {. h* g* c* K8 Rprintf(" 请输入您的选择:");
/ G$ K) a" x9 J) V; K1 B6 H& q1 vint choice = 0;
# |* P! F# p# F; {+ ^1 Gscanf("%d", &choice);; s; L1 D# l5 r" m
return choice;
9 `6 |. I. b. `% t' I% ?7 \}
9 ^8 x9 b) |9 p$ l* v  n12345678910111213141516

: b( W" I; s) Q

" z3 {/ w1 v, K# {三、主函数7 x: X8 B% y5 j. T) ?- k( F# c
1.转移表
使用转移表的方式来简化代码。定义函数指针Func,参数类型是结构体指针。
typedef void(*Func)(AddressBook*);
8 }' N! _  H6 x, X9 ?# Y1
; o) y5 v, M3 i, [0 M

+ |& K1 z2 {5 \
* I- M2 V& |4 \6 d3 U, ]
2.choice判断
选择为0,打印GoodBye!!!。选择不在0-7范围内时,提示输入错误,重新输入选择。选择在0-7范围内时,使用转移表调用函数。
int main()
/ c) Z  c2 z+ T9 m1 j5 }5 W{
/ z% y' P- _5 p2 J. B% S; lFunc funcs[] = {
+ L! \0 `) i. n* X" Y5 S* F( KNULL,, k6 C- a8 B1 |: g( l* O0 i. r/ E
addPerson,
8 B3 o. ]' ^5 FfindPerson,
# _5 M* N/ U* D: a( ndelPerson," S5 t3 L, w. w( t/ u4 J
updatePerson,! E% N% W- z! m. W: J1 v
printPerson," P- S: W; I& Y5 I2 T) d
clearPerson,
9 V/ ^: J1 O- n6 J) E$ `) A, rsortPerson,& c7 x. P! D! l! w  ?8 L
};: n6 D* t0 f. U" W' Q
init(&addressbook);
& m1 {5 P* Z1 d. ], d0 H+ L; h3 k. F/ i! S* s- D3 A* }4 c+ Y
while (1){
3 D: P1 a8 s7 aint choice = menu();
! `- g  C' k9 A4 w" [/ nif (choice == 0){
1 T' R8 f9 p$ a) F! p" Qprintf("GoodBye!!!");
6 B# y+ ]: p9 B2 ?! [2 fbreak;
! [) D1 L# Y: B, C' m2 }# c7 ?5 a}
! n- s! H5 l* i1 E$ |- ~7 Z# dif (choice<0 || choice > sizeof(funcs)/sizeof(funcs[0])){) l7 G" d8 u0 s  V  }/ G
printf("您的输入无效!\n");' B. O) Q$ ]8 I
continue;. @. S/ E4 X1 f1 D; `/ C+ u
}: D# e* X/ Q4 ~- @! {- ^: f
funcs[choice](&addressbook);8 f+ u+ }2 g4 |1 K, O. E/ Z2 U
}
: `# w9 n5 ~0 J* `system("pause");
9 ]+ B% I& [* U/ hreturn 0;9 _3 e$ t! J# v4 i( e1 E, c
}
8 J/ b6 D& S# B+ r1234567891011121314151617181920212223242526272829
1 H- C7 ]/ i; i

& P9 I& @/ {1 \0 m  [1 ^2 B; w

4 X3 B' \- E- }& [5 Q四、定义联系人和通讯录
  w1 F! M/ q+ N: S  Z1.定义联系人结构体
表示一个联系人,包含联系人姓名和电话。
typedef struct Person{
5 u4 U" {  i" m* G+ w% rchar name[1024];: {' X" t. J4 k1 u9 O8 D
char tel[1024];- |6 u2 i1 u  O& f9 l# l
}Person;3 N# `, c- R6 [# X
1234
- n0 h$ y4 y* j9 U$ Q) k. n

3 f. y; F) e5 ?; a+ E5 e1 z9 l" p* k! {

' s& I& Y+ P6 ~8 K9 W: K% a2.定义通讯录结构体
表示整个通讯录,管理所有联系人,包含联系人。
通讯录刚开始是空着的,每次新增联系人,才会增加一个元素。定义size用来控制当前通讯录中有多少个人。[0, size) 就是有效区间。
#define MAX_PERSON 1000" c# f* H  K7 L
typedef struct AddressBook {
, v" ]3 @7 ?8 t* P- _Person persons[MAX_PERSON];
& ^5 T7 `8 N1 y/ k2 F( hint size;& F, z. G( _5 j& }1 _2 ^' U
}AddressBook;( \) J! ~: D  ]8 P/ H5 Y- ]# l
12345
! x, B! ~; S! n9 L8 ^9 a5 l
/ Q3 e  p; K8 r. i1 G% c

1 C3 [8 T* y' F+ j* L$ r# D3.定义结构体变量
全局变量addressbook
AddressBook addressbook;
5 p( e) o7 z* A  @! A0 u3 H& [5 H1
4 P6 Q/ A1 V7 N0 l3 _. n3 ?

' ~1 b. l' ~' Y/ E/ {6 H

& e5 u: e+ z3 o5 p8 L$ X+ t五、通讯录初始化
针对整个通讯录初始化,只需要将size设置为0。
void init(AddressBook* addressbook) {
7 h- u2 H9 {' B" S1 y8 c' Oaddressbook->size = 0;" k& J& w; P* n- @7 n
}
# {8 g3 U* j( ~# b, ~6 O123

, R! X; Q6 B' r, V4 e& I' P( `* i0 k0 `/ Y, Q7 o
% f+ V" v# J8 N9 ^8 X# n
六、新增联系人
首先,判断通讯录是不是满了,满了给出提示,没满让用户输入联系人姓名和电话。此处不能直接使用结构体变量 Person p 这种形式,必须使用结构体指针Person* p。
因为我们的目的是修改全局变量中的 Person 结构体。而使用结构体变量的话,相当于创建了一个局部变量的结构体。此时的修改只是针对该局部变量生效,随着函数结束,局部变量就被释放了。
#define MAX_PERSON 10006 |' c/ Y2 F" M/ d
void addPerson(AddressBook* addressbook){
1 _8 o: t6 |5 K% A, A& u3 Sprintf("新增联系人\n");
2 j6 S* R& Z$ Sint cursize = addressbook->size;4 u+ \& ?: n: k- Z( f/ w" M
if (cursize >= MAX_PERSON){3 L+ @5 ^% D7 p8 O+ ?$ {
printf("通讯录已满,增加失败!\n");! b$ D0 O$ @7 Z" G% b( q
}- Y0 t/ {# f. \) `& x  E. i# t& ~
Person* p = &addressbook->persons[cursize];
3 x/ z. f/ h- {printf("请输入联系人姓名:");
2 n+ k% v1 b$ L  z4 r# ^9 g; h8 kscanf("%s", p->name);
& }* o" G5 Z/ F" k/ V5 lprintf("请输入联系人电话:");
4 N' N1 \3 {# Hscanf("%s", p->tel);
7 I1 \2 ?* s% }printf("新增联系人成功!\n");3 |- @: Y* u7 X1 u; A) T2 J; k/ P0 B
addressbook->size++;5 U- G; {1 l1 M, n+ U; v
}' P! X1 t% i# ]7 X
123456789101112131415
) m: r8 @: ^# w# e4 Z( ?9 A/ w
" q5 [' S% W5 J. e1 A

" ~" z& U) U" T9 ^" m/ Y6 F) w七、查找联系人
采用按照姓名查找电话号码的方法。用户输入姓名后查找,输出编号、姓名和电话。
void findPerson(AddressBook* addressbook){
3 R" s/ I) z8 X0 Mprintf("按照姓名查找联系人\n");) H6 Z' A! D6 G2 g# Y
printf("请输入要查找的姓名: ");
7 Y% o3 T5 l8 z# D  w8 V% l' C8 i, Gchar name[1024] = { 0 };" Y+ z) _9 }. }8 G
scanf("%s", name);6 G; W. y( `5 @
# K2 V/ z$ h( j$ Q( W" [7 }! |
for (int i = 0; i < addressbook->size; i++) {3 X- D% O2 Y4 z' V0 n
Person* p = &addressbook->persons;0 a  O# h; C5 `1 B" ~+ i
if (strcmp(name, p->name) == 0) {
! K# u& D- L5 G! r+ {printf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel);% [+ ^3 z/ Q# N" B5 M* r
}% k' |: x) M5 m8 G, w. ?& H
}% e1 U3 o7 d- Q* u
printf("查找联系人完成!\n");) A7 p1 k* w4 Z9 P
}+ W# @8 ?* N, E2 t- t8 [4 K
1234567891011121314
+ ~/ Z* T$ R7 C4 i9 [6 N; P
# l% Z* M& }2 T- Z( ^

; F3 D9 p' {  ]$ i9 }3 w八、删除联系人
用户输入联系人的编号来进行删除(数组下标),删除下标为 id 的元素。
如果 id 对应的元素就是最后一个,直接 size--。如果 id 对应的元素是中间元素,和最后一个元素替换,再删除最后一个元素。
void delPerson(AddressBook* addressbook){
; ^" b- C' r) q  V. |5 aprintf("删除联系人\n");
5 t8 q! z/ `; g7 a: d. Pprintf("请输入要删除的联系人的编号: ");
/ q& _2 k  `2 X1 I1 ~int id = 0;
. T5 B- X, ~8 \" y6 `5 o' `: o$ oscanf("%d", &id);# |  \3 t3 v/ R' a7 J1 T* F5 @9 f
if (id < 0 || id >= addressbook->size) {# W5 J7 h! J* W) r; D* G/ c
printf("您输入的编号有误!\n");
+ u& |" @# H- Q9 t) ]return;4 d5 |, ?  k6 |/ K/ d0 n
}, V/ I. T- p2 _) U+ R9 O
if (id == addressbook->size - 1){( B5 X. @+ n8 G
addressbook->size--;
# p/ n" d- l1 O5 U% X7 V4 Iprintf("删除成功!\n");0 q* D( H( O: S5 j$ H0 A
return;1 w6 `9 U8 Z+ v; t
}
( k9 \* Z- o+ N' Uaddressbook->persons[id] = addressbook->persons[addressbook->size - 1];
1 q! ?  u7 k  N4 E) F: Y# \$ waddressbook->size--;* }! v' u% V; k: a6 z! \; i: t4 l$ d
printf("删除成功!\n");( ?$ @! P9 ^. S
}/ j3 ^2 T$ b& ?- b- R% o6 R+ U
123456789101112131415161718
- c$ _/ O, Y& J0 ~& `1 N
5 y5 e6 t0 p$ L+ }( r6 K* {4 a: l

: T7 U' W. I* n' n( {) b$ L/ A九、修改联系人
用户输入联系人的编号来进行修改,更改下标为 id 的元素。用户重新输入姓名和电话,输出更新成功。
void updatePerson(AddressBook* addressbook){
! ?5 |) ?+ w; T, v% R* G" Pprintf("更新联系人\n");
# n! C6 u7 n3 Nprintf("请输入要更新的联系人的编号: ");
1 `: m% H( \$ L" z# F! lint id = 0;
7 r0 F0 ^& v( \, Dscanf("%d", &id);
9 x& |: @$ v- l9 ]6 d$ X6 `  @if (id < 0 || id >= addressbook->size) {# Z7 J) i- ?6 ]; V  k3 @
printf("您输入的编号有误!\n");
3 T4 U' f' {) d/ v5 |return;
6 n7 |. v( x/ f* g}
) t6 S) s+ F7 ~! Q; qPerson* p = &addressbook->persons[id];3 e9 ^% f& N' O$ O# P. j, h
printf("请输入联系人姓名:");: A; G0 e0 g5 x3 U
scanf("%s", p->name);
! C  x! P) q1 D( aprintf("请输入联系人电话:");
: c6 u7 k1 n! i# \% }  x- Ascanf("%s", p->tel);8 e% L0 E% X+ n1 ]8 ~# U& V& C7 G; ?
printf("更新联系人成功!\n");
" X" I, Z# L& j- z3 Y0 C5 |8 {( k6 V; p  ?/ \5 M: @1 n
}
% l" f  g+ E# `/ b3 y! E0 U1234567891011121314151617
4 s- G1 N; [  Y: T5 [6 s+ ^+ y
& X7 p* a5 E; ~& C' B
" S" @: P' g) Q
十、查看所有联系人
打印所有联系人和通讯录中记录条数。
void printPerson(AddressBook* addressbook){: O+ [# J* {( @6 d
printf("查所有联系人:\n");
+ y3 z" v  R5 I; u3 `% pfor (int i = 0; i < addressbook->size; i++) {5 I8 V* ^8 n% p
Person* p = &addressbook->persons;
" {$ B2 a+ `. ]8 Nprintf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel);7 [( [/ S  o' j' c; T6 Q1 V( d
}8 H. j, S' [( F
printf("共计 [%d] 条记录\n", addressbook->size);9 F9 \  z/ ^! w, H
}
- i9 ~4 q: \9 m9 X  f/ c) e. |12345678
$ u* B5 n; T  m

0 y2 U- R' V: `, Y

- a; r( U+ I  W7 O十一、清空所有联系人
size--清空所有联系人,到0为止。
void clearPerson(AddressBook* addressbook){
) p9 L; ~; Q2 I7 l9 Pfor (int i = 0; i < addressbook->size; i++) {
2 ]3 D+ o* ?. e) `4 |5 M; r$ T0 aaddressbook->size--;
) h; G/ r1 U  U% g2 ~if (addressbook->size == 0){
! Z+ V2 U+ r& ^' Hbreak;
+ Z$ k# h( [6 B}2 T: o: `) x3 Z# E
}
, E3 S3 P& Z9 O4 a3 \- lprintf("清空成功\n");
9 u9 c( P) g4 l% D0 c( b# f) b( Z0 v}' i2 j/ Y0 m7 v8 t
123456789

1 b5 |( y8 Q  i0 _, V
9 J  ?7 b( i7 R7 H6 r
( ?9 K3 F+ R5 w0 N" D8 K* s
十二、以名字排序所有联系人
使用strcmp比较姓名,然后进行交换排序。
void sortPerson(AddressBook* addressbook){# h( `" j0 G6 y* Y3 f
if (addressbook->size <= 0){1 r1 i8 g; V+ X  m4 x
printf("通讯录中没有联系人,请添加!\n");" ?& Y6 e2 {+ z% t( W
}
; M! Y- p) {4 Tint i = 0;$ C# W0 a4 N/ W; G
int j = 0;
0 z: o6 W" S4 U# Q' Zfor (i = 0; i<addressbook->size - 1; i++)! P& M5 S& W$ [
{& l6 c7 Y' p8 d5 Y7 \1 i, G5 B
for (j = 0; j<addressbook->size - i - 1; j++)$ I# J8 g1 B" m/ {0 \. K. K$ h
{
$ w6 W8 f6 \) [4 l. r# i! g; z7 l6 Oif (strcmp(addressbook->persons[j].name, (addressbook->persons[j + 1]).name)>0): l3 {$ I5 g1 \7 ^; M
{
3 O, d! d! ?5 e1 rPerson tmp = addressbook->persons[j];( \* j* p3 F" ~
addressbook->persons[j] = addressbook->persons[j + 1];
. @/ a6 f  J9 z1 r0 G' X7 eaddressbook->persons[j + 1] = tmp;2 C# U3 u' s# ^+ ^; b7 R
}
8 v! k# ^9 j) {1 `) p}
+ F2 s  M' J2 g' Y- x3 Oprintf("排序成功!\n");
" H5 D: S3 R  R- r4 Y}4 D& v5 V- ]( W: ]# v; e9 y  M( I* `
}, D& w; q( n5 c/ J! g" w
1234567891011121314151617181920

( M6 w; y6 C( O' x1 ~; m8 Z6 m/ U0 y# J& X# G3 ?1 e8 O; E$ [1 g
3 n/ S4 W! M2 [5 T
十三、演示% O  ~3 t/ W# f' Z- A; E; x
1. 新增联系人
新增联系人:张三 001 、李四 002。
2. 查找联系人
+ P$ [0 Y: W+ V( a. x( L. x1 M3 D
查找联系人:张三
3. 删除联系人# p& _# u7 d5 W6 m' ^4 h& t
删除联系人:编号0,张三
4. 修改联系人9 ~& F9 T$ i# h: D6 g9 J5 E
修改联系人:李四 002 更新为 李五 003.
5. 查看所有联系人
查看所有联系人和记录数
6. 清空所有联系人
清空所有联系人
7. 以名字排序所有联系人
重新录入联系人:张三 001 、李四 002。按名字排序:
十四、完整代码
代码已经验证过了,可以直接使用
  1. ( j  @$ N* K2 o" e4 ^. M
  2. /**1 s$ R# B& r" d" d; p. M' D
  3. * @author: 冲哥
    ) h! T& r' `0 }0 f
  4. * @date: 2020/12/1 15:12
    8 ^  r' n9 J1 f7 r/ `5 d
  5. * @description:简易版通讯录,实现增删改查功能
    8 D: V9 ~' o/ D: u% l8 }7 L: G
  6. */2 f9 D+ R4 B2 v5 b* }
  7. #define _CRT_SECURE_NO_WARNINGS/ \! }; Z+ c( D" H: a0 Z
  8. #define MAX_PERSON 1000
    6 K* A4 ?' E3 A) d0 g3 B
  9. #include <stdio.h>
    2 }! [$ q5 S& o, O+ `- p0 u! _
  10. #include <stdlib.h>6 s) \" g6 e0 ]& A/ n
  11. #include <string.h>; d4 A8 F* E& m

  12. 1 ?6 C; T5 F, w4 N
  13. typedef struct Person {, {/ C5 j; _0 `- V+ x5 @" d* a# {
  14. char name[1024];9 m2 y7 s. s8 B$ w7 c! i' _
  15. char tel[1024];
    5 s3 m. c. \6 ~+ A3 ]4 y0 F% X8 g
  16. }Person;
    ; Y# S4 M! N) ~3 d

  17. 9 z1 w/ P4 Q6 t3 O
  18. typedef struct AddressBook {
    $ [' c& u5 ~) I6 I4 k# K5 o
  19.     Person persons[MAX_PERSON];0 j2 B/ \/ N, t* I( D
  20. int size;+ I! ^) G9 G8 ^- R& Q' p6 l
  21. }AddressBook;
    ' b2 `0 H" }3 k, g9 u: m, E5 U$ Q
  22. void init(AddressBook* addressbook) {
    " h7 F% O7 t! h1 z* ?* F- R( z$ \
  23.     addressbook->size = 0;+ w9 A* b) O2 v: m' @, P
  24. }
    6 O9 Z4 q! i* r: M: @: m" ?2 D
  25. void addPerson(AddressBook* addressbook) {
    : V% N  r; g" I0 c6 y
  26. printf("新增联系人\n");
    $ c5 {+ @, `5 h' R- A
  27. int cursize = addressbook->size;
    7 m) z7 P4 \% K3 }7 i
  28. if (cursize >= MAX_PERSON) {( }( \  ?0 Y+ F  i
  29. printf("通讯录已满,增加失败!\n");$ p. u) r: L, }# y
  30.     }- o9 }. u$ J' d7 L+ w; G5 l" B# ]
  31.     Person* p = &addressbook->persons[cursize];. W" I* ^/ n; }( B3 |& p  ~' \/ k5 G5 u
  32. printf("请输入联系人姓名:");
    . d( h0 u, w! f1 g0 k- U7 M' D
  33. scanf("%s", p->name);
    - B. k1 Q3 F0 @
  34. printf("请输入联系人电话:");
    * A5 Y! d* a4 C9 S" \4 T, V
  35. scanf("%s", p->tel);" x! u, I7 \4 B
  36. printf("新增联系人成功!\n");1 V: G8 n( n4 O& U# U) X
  37.     addressbook->size++;
    0 T' ]5 W& d! I/ P# S- f
  38. }
    : a! \  ]; j7 _" c3 [* S$ [
  39. void findPerson(AddressBook* addressbook) {
    # ?: w. J5 r* [! @, h: q
  40. printf("按照姓名查找联系人\n");
    0 {: i' t) A/ P
  41. printf("请输入要查找的姓名: ");
    % s! N, a% s  J; U
  42. char name[1024] = { 0 };+ L" {- l( }; I
  43. scanf("%s", name);
    9 X6 M% P% ~( n0 Y' N

  44. $ t1 ?# ]7 ^4 J. d
  45. for (int i = 0; i < addressbook->size; i++) {" D6 T9 \0 `& c- V6 s8 a' F" P
  46.         Person* p = &addressbook->persons[i];; {3 s0 w) a: `
  47. if (strcmp(name, p->name) == 0) {
    2 V2 k' j+ A+ @2 a0 C
  48. printf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel);
    # ^6 J! C3 r) G/ _( _
  49.         }
    8 E  f4 c% ?0 P, @1 m6 [
  50.     }- U! {( f. f- u
  51. printf("查找联系人完成!\n");8 c8 C- _+ u0 a5 m
  52. }5 l5 Q! P( H% X
  53. void delPerson(AddressBook* addressbook) {
    " F) f4 E  Y5 i+ h) L7 s1 F
  54. printf("删除联系人\n");
    : c/ Y5 P2 W- h
  55. printf("请输入要删除的联系人的编号: ");
    # |' p& V" p& f9 E% a* s
  56. int id = 0;
    ! d- ~) ~9 S3 U' i1 K, v) o
  57. scanf("%d", &id);/ N" B7 H  O3 ~# [: E
  58. if (id < 0 || id >= addressbook->size) {
    5 `& D" c6 Z) E
  59. printf("您输入的编号有误!\n");; Y  T8 v+ N% I( ?* ?  w
  60. return;! t; T( h5 V( E1 T; @# d  B
  61.     }
    . S% {7 N4 M. L3 X+ p7 P
  62. if (id == addressbook->size - 1) {
    3 o1 Z3 C0 k1 [+ O5 ^& s6 V
  63.         addressbook->size--;
    ' T" P5 c9 e8 l- a/ X2 m
  64. printf("删除成功!\n");
    3 ~! j6 ~. a& a1 }4 Q8 c7 ?
  65. return;
    8 t5 s. A5 `2 I! |
  66.     }. }; q6 K) Y7 e
  67.     addressbook->persons[id] = addressbook->persons[addressbook->size - 1];
    ' ~; r/ w8 f1 H& M3 Y
  68.     addressbook->size--;5 a! J# \+ m" K3 m
  69. printf("删除成功!\n");; u) J/ F. `- J' v& F& K
  70. }# V1 S7 @4 g: S  C
  71. void updatePerson(AddressBook* addressbook) {& x6 Y3 o& K* r( I
  72. printf("更新联系人\n");
    : T# q0 f4 d8 L1 X8 ^  q8 X+ V1 C2 u
  73. printf("请输入要更新的联系人的编号: ");9 D  l- H' i0 h0 `
  74. int id = 0;
    & c, ?/ ?: U1 O* r  u; w  S
  75. scanf("%d", &id);3 U1 B8 i9 d1 ~7 `& ~4 N8 \
  76. if (id < 0 || id >= addressbook->size) {+ h; J- U, l2 P& g7 c6 ]
  77. printf("您输入的编号有误!\n");  D& C* M1 \' Q: B# i+ h
  78. return;6 L' o& r4 E/ J+ k1 z, u* z7 J
  79.     }4 C, {% X. k: D9 l, V
  80.     Person* p = &addressbook->persons[id];# i0 U, O2 z$ T9 T) p' E
  81. printf("请输入联系人姓名:");
    & ^* v4 t) n" B3 K) |  l0 @) k
  82. scanf("%s", p->name);: E1 ^9 D; t4 f
  83. printf("请输入联系人电话:");
      s+ V% N+ u' o
  84. scanf("%s", p->tel);  T1 M/ V. `$ t8 {6 G3 W
  85. printf("更新联系人成功!\n");
    1 P. W, |) X6 t1 }% C

  86. 7 e; E* B( O4 f3 [/ M$ o& D" R8 o
  87. }
    $ Y  s/ `0 G( u( H) S, n/ a
  88. void printPerson(AddressBook* addressbook) {
    0 K& M0 t$ n$ D4 g
  89. printf("查所有联系人:\n");6 L# A2 [  w4 q! H* N5 u
  90. for (int i = 0; i < addressbook->size; i++) {
    : T/ {  s8 E1 e
  91.         Person* p = &addressbook->persons[i];7 V  v. c5 V$ v3 X  f4 {% Q$ |
  92. printf("[%d]\t\t%s\t\t%s\n", i, p->name, p->tel);
    ) P7 U$ b1 I& l, l
  93.     }( Y  F7 o+ k; Q$ P+ M6 N3 i
  94. printf("共计 [%d] 条记录\n", addressbook->size);
    ! d2 g1 z+ J) E5 _% E1 @2 H
  95. }- _/ `: @- m1 ~" T
  96. void clearPerson(AddressBook* addressbook) {9 D+ ?8 y* S6 d8 C
  97. for (int i = 0; i < addressbook->size; i++) {
    ! S7 @; I. l& @. y4 W; A
  98.         addressbook->size--;0 `+ B& \+ i/ ?- I/ `
  99. if (addressbook->size == 0) {: K+ t$ e$ Y& q
  100. break;' o$ T/ x1 ?$ W' z6 i: \3 ~8 e
  101.         }
    " J5 x# l- D5 t8 b' v
  102.     }+ n8 Q; T% c- X( X6 g7 B
  103. printf("清空成功\n");
    , V) ^; m0 M; F8 A3 c0 \" g
  104. }
    & E+ h$ ]" k! j

  105. ; ~: `, A* Y2 s/ ]2 |" y# D4 u
  106. void sortPerson(AddressBook* addressbook) {4 F, h  z$ [; b9 g  n  ]5 s
  107. if (addressbook->size <= 0) {
    0 q0 e/ o. L8 i' v4 N. E
  108. printf("通讯录中没有联系人,请添加!\n");* o/ n, U! d; P" F
  109.     }. Z( c- z+ `+ G( A% n2 m# |
  110. int i = 0;, ]: t. H, J- t1 y  x
  111. int j = 0;
    - o# ^9 A# l  G3 t- M6 f
  112. for (i = 0; i < addressbook->size - 1; i++)
    ' s$ p* Y' e5 n% z
  113.     {) U% d  N' v0 P% \, ]
  114. for (j = 0; j < addressbook->size - i - 1; j++)4 j/ @) s1 V# D! z7 b7 k; K
  115.         {
    $ `$ q1 H* ]& j$ ~& h
  116. if (strcmp(addressbook->persons[j].name, (addressbook->persons[j + 1]).name) > 0)5 s# a6 q: @$ k4 Y, B5 L/ l
  117.             {
    ) D, _, J& |1 |0 F- N
  118.                 Person tmp = addressbook->persons[j];8 q1 c1 d, V: H8 `6 O# K) v" v- s
  119.                 addressbook->persons[j] = addressbook->persons[j + 1];( D! j8 q3 r1 K& N1 H  G
  120.                 addressbook->persons[j + 1] = tmp;
    / h1 ^  L3 M: m1 j+ }6 ^
  121.             }  ?; h( l+ ~0 j! j
  122.         }
    ' I; n3 f# j3 V' g6 c
  123. printf("排序成功!\n");3 e# F; o5 \. x# v! O; G
  124.     }) I1 x7 V( M& F" E
  125. }
    + `1 ]8 L% d5 `/ Y
  126. int menu() {
    ' ~5 K! {4 f9 K
  127. printf("=====================\n");
    ( w2 z0 G" ]" {
  128. printf(" 1. 新增联系人\n");* a0 |, r0 {( h- [$ o6 n
  129. printf(" 2. 查找联系人\n");
    9 l& k% _( q+ r' ?2 b0 q
  130. printf(" 3. 删除联系人\n");
    ( b8 h7 J; o& l3 F/ h0 e
  131. printf(" 4. 修改联系人\n");
    8 ^, Y( j& t& N( T4 F
  132. printf(" 5. 查看所有联系人\n");6 D* w+ [# w7 D" k; Q
  133. printf(" 6. 清空所有联系人\n");6 P$ C4 U% o, G+ W* Q; W, b
  134. printf(" 7. 以名字排序所有联系人\n");& }3 j0 G  p, q* Q
  135. printf(" 0. 退出\n");& o$ M7 t' Q: n6 r, c+ a
  136. printf("=====================\n");2 b" Z4 U- \* v( w9 Y/ o
  137. printf(" 请输入您的选择:");$ U# P# m$ a: j
  138. int choice = 0;" R+ y+ Q9 g( N; `) I
  139. scanf("%d", &choice);  h3 n) O% ^8 q' N& Z; O' g
  140. return choice;3 |$ D- t1 X3 f. V+ D3 ]
  141. }
    2 w/ u; T1 t. `1 q1 J
  142. typedef void(*Func)(AddressBook*);; M5 U" h( w3 o. a5 W. d6 ]
  143. AddressBook addressbook;4 m4 O* e' m6 [' O, d  [: _3 J% W( A
  144. int main()( m6 N# E/ C+ a
  145. {8 P' x% L# x8 x: ]' q9 b6 d, I
  146.     Func funcs[] = {
    ! D; ~' ^  F; f" Y$ H, X, T
  147. NULL,4 }, @) c. W' X9 P- r/ s2 I
  148.             addPerson,
    3 J$ u, x+ z+ A" Q! `( s) b% n
  149.             findPerson,; S' ^0 E0 Z* A+ F7 m
  150.             delPerson,1 H. ~7 L# E- y, ^  x0 A5 J- A
  151.             updatePerson,
    5 e& ?) {5 Z4 B& I8 h
  152.             printPerson,
    % z* j' Q1 W. a9 Y
  153.             clearPerson,6 F; p& h) y2 j# h
  154.             sortPerson,  X4 \6 N5 t: Y% K7 l
  155. 9 y$ _3 P: m7 F* E2 B
  156.     };
    1 V4 r8 `' b6 Q
  157.     init(&addressbook);" z8 j4 ~1 o, z! J* |7 E% S
  158. + h' c, a8 @& e! y( U" C! X
  159. while (1) {/ E) x+ e. d. W0 A
  160. int choice = menu();. d2 c+ N( P9 y4 t) ]6 Y
  161. if (choice == 0) {
    $ |( \5 r" I% {. v5 s( t. ~
  162. printf("GoodBye!!!");
    % J  [8 B- p# k( _
  163. break;8 M8 U. w  t6 n4 B3 M6 d2 F5 j
  164.         }
      _1 V# k1 P# j& I, d, c
  165. if (choice < 0 || choice>sizeof(funcs) / sizeof(funcs[0])) {2 g6 C# f/ i7 _
  166. printf("您的输入无效!\n");
    & A9 n: D2 ]9 C2 z* e1 s/ B
  167. continue;- {6 k% @5 J6 ~3 B0 |& ~7 A, {
  168.         }
    3 e3 l( j/ @7 Q4 x5 q# p
  169.         funcs[choice](&addressbook);2 b) q% m8 h( z# {
  170.     }( x% [1 {6 a7 s4 W3 A
  171.     system("pause");
    7 x4 ~  E2 L0 F" l! u
  172. return 0;
    ! x; \2 ~8 T- {4 r* v' Y" J
  173. }
复制代码
, _8 N8 K/ |9 M( p# R1 V
赞 收藏 评论1 发布时间:2021-1-14 13:53

举报

1个回答
mcza30 回答时间:2021-1-14 17:10:59
请教楼主,VC6上能不能运行?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版