您的位置:首页 > 其它

通讯录

2016-05-27 16:56 190 查看

.h文件

#ifndef
__CONTACTS__
#define
__CONTACTS__

#define
_CRT_SECURE_NO_WARNINGS
1

[align=left]#include<stdio.h>[/align]
[align=left]#include<stdlib.h>[/align]
#define
NAME_SIZE
10
#define
SEX_SIZE
5
#define
TEL_SIZE
12
#define
ADDRE_SIZE
20
#define
START
10

enum
//把不同的操作用枚举的方式把它们的可能取值列出来
[align=left]{[/align]
[align=left] EXIT,[/align]
[align=left] ADD,[/align]
[align=left] DELETE,[/align]
[align=left] FIND,[/align]
[align=left] ALTER,[/align]
[align=left] SHOW,[/align]
[align=left] CLEAR,[/align]
[align=left] SORT,[/align]
[align=left] SAVE[/align]
[align=left]};[/align]

typedef
struct
Peo
//因为通讯录里一个人的信息包括很多方面,不同的类型,所以把人定义为一个新的结构体类型
[align=left]{[/align]

char
name[NAME_SIZE
];

char
sex[SEX_SIZE
];

int
age;

char
tel[TEL_SIZE
];

char
addre[ADDRE_SIZE
];
[align=left]}Peo;[/align]

typedef
struct
Contact
[align=left]{[/align]

int
size;

Peo
peo[];
}Contact,*
Pcon;

void
meun();
void
init_conatct(Pcon
pcon);
void
load_contact(Pcon
pcon);
void
add_conatct(Pcon
pcon);
void
dele_conatct(Pcon
pcon);
void
find_conatct(Pcon
pcon);
void
alter_conatct(Pcon
pcon);
void
show_conatct(Pcon
pcon);
void
clear_conatct(Pcon
pcon);
void
sort_conatct(Pcon
pcon);
void
save_contact(Pcon
pcon);

[align=left]#endif[/align]


.c文件

#include"contact.h"

void
meun()
[align=left]{[/align]
printf(
" ********通讯录********\n"
);
printf(
"********1、添加联系人 2、删除指定联系人*********\n"
);
printf(
"********3、查找指定联系人 4、修改指定联系人*********\n"
);
printf(
"********5、显示所有联系人 6、清空所有联系人*********\n"
);
printf(
"********7、按名字排序联系人 8、保存联系人并退出*******\n"
);
printf(
"********0、退出程序 *******\n"
);
printf(
"请选择:>"
);
[align=left]}[/align]

void
init_conatct(Pcon
pcon)
[align=left]{[/align]

pcon->size = 0;

pcon
= (Pcon
)malloc(START
*
sizeof(pcon
->peo) +
sizeof(
Pcon));
//为通讯录分配动态内存
[align=left]}[/align]

void
add_mem(Pcon
pcon)
[align=left]{[/align]

if
(pcon
->size == 1000)
[align=left] {[/align]
printf(
"通讯录已满!\n"
);

return;
[align=left] }[/align]

int
num =
pcon
->size / 10 + 1;

pcon
= (Pcon
)malloc(num *
START
*
sizeof(pcon
->peo) +
sizeof(
Pcon));
[align=left]}[/align]

void
load_contact(Pcon
pcon)
[align=left]{[/align]

char
ch =
' '
;
init_conatct(
pcon);

char
p[5] = { 0 };

FILE
*fread = fopen("contact.txt"
,
"r");

if
(fopen ==
NULL
)
[align=left] {[/align]
printf(
"打开文件失败!\n"
);
[align=left] exit(0);[/align]
[align=left] }[/align]
[align=left] ch = fgetc(fread);[/align]

while
(ch!=EOF
)
[align=left] {[/align]
fseek(fread, -1,
SEEK_CUR);
add_mem(
pcon);
fscanf(fread,
"%s%s%d%s%s",
pcon
->peo[pcon->size].name,
pcon->peo[pcon
->size].sex, &pcon->peo[
pcon->size].age,\

pcon->peo[pcon
->size].tel,
pcon->peo[
pcon->size].addre);//注意结构体指针变量对成员的引用方法

//fscanf():从文件里以格式化的方式读取数据到内存的函数

pcon->size++;
ch = fgetc(fread);
//因为fscanf是读到上一行的'\n'截止,所以得先把'\n'读了,使fread指向下一行
ch = fgetc(fread);
//判断现在fread所指向的这一行是不是空行(EOF)
[align=left] }[/align]
[align=left] fclose(fread);[/align]
[align=left]}[/align]

void
save_contact(Pcon
pcon)
[align=left]{ [/align]

int
i = 0;

FILE
*fwriter = fopen("contact.txt"
,
"w");

if
(fopen ==
NULL
)
[align=left] {[/align]
printf(
"打开文件失败!\n"
);
[align=left] exit(0);[/align]
[align=left] }[/align]

//fprintf(fwriter, "%-4s %-4s %-4s %-8s %-8s\n", "姓名", "性别", "年龄", "电话", "住址");

while
(i <
pcon
->size)
[align=left] { [/align]
fprintf(fwriter,
"%-4s %-4s %-4d %-8s %s\n"
,
pcon->peo[i].name,
pcon->peo[i].sex,
pcon->peo[i].age,\

pcon->peo[i].tel,
pcon
->peo[i].addre);

//fprintf():从内存里以格式化的方式输出数据到文件的函数
[align=left] i++;[/align]

[align=left] }[/align]
[align=left] fclose(fwriter);[/align]
printf(
"联系人信息保存成功!\n"
);
[align=left] exit(0);[/align]
[align=left]}[/align]

void
swap(Peo
*peo1,
Peo
*peo2)
//排序时交换两个人的信息
[align=left]{[/align]

Peo
temp = *peo1
;
*
peo1
= *peo2
;
*
peo2
= temp;
[align=left]}[/align]

void
add_conatct(Pcon
pcon)
[align=left]{[/align]
add_mem(
pcon);
printf(
"请输入要插入的联系人的信息:\n"
);
printf(
"姓名:"
);
scanf(
"%s",
pcon
->peo[pcon->size].name);
printf(
"性别:"
);
scanf(
"%s",
pcon
->peo[pcon->size].sex);
printf(
"年龄:"
);
scanf(
"%d", &pcon
->peo[pcon->size].age);
printf(
"电话:"
);
scanf(
"%s",
pcon
->peo[pcon->size].tel);
printf(
"住址:"
);
scanf(
"%s",
pcon
->peo[pcon->size].addre);

pcon->size++;
printf(
"插入成功!\n"
);
system(
"cls");
[align=left]}[/align]

void
dele_conatct(Pcon
pcon)
[align=left]{[/align]

int
i = 0;

char
p[10] =
""
;
printf(
"请输入要删除的联系人的姓名:\n"
);
scanf(
"%s", p);

for
(i = 0; i <
pcon
->size; i++)
[align=left] {[/align]

if
(!strcmp(p,
pcon
->peo[i].name))
[align=left] {[/align]

break;
[align=left] }[/align]
[align=left] }[/align]

if
(i ==
pcon
->size)
[align=left] {[/align]
printf(
"通讯录不存在该联系人,无法删除!\n"
);

return;
[align=left] }[/align]

while
(i < (pcon
->size - 1))
[align=left] {[/align]

pcon->peo[i] =
pcon
->peo[i + 1];
[align=left] i++;[/align]
[align=left] }[/align]

pcon->size--;
printf(
"删除成功!\n"
);
system(
"cls");
[align=left]}[/align]

void
find_conatct(Pcon
pcon)
[align=left]{[/align]

int
i = 0;

char
p[10] =
""
;
printf(
"请输入要查找的联系人的姓名:\n"
);
scanf(
"%s", p);

for
(i = 0; i <
pcon
->size;)
[align=left] {[/align]

if
(!strcmp(pcon
->peo[i].name, p))

[align=left] {[/align]
printf(
"%-6s%-6s%-6s%-16s%s\n",
"姓名"
,
"性别",
"年龄",
"电话"
,
"住址");
printf(
"%-6s%-6s%-6d%-16s%s\n",
pcon
->peo[i].name,
pcon->peo[i].sex,
pcon->peo[i].age, \

pcon->peo[i].tel,
pcon
->peo[i].addre);

return;
[align=left] }[/align]
i++;
//因为上面循环里的判断用到i了,要是把i++写在循环条件里,那么会出错
[align=left] }[/align]
printf(
"通讯录内不存在该联系人!\n"
);

return;
[align=left]}[/align]

void
alter_conatct(Pcon
pcon)
[align=left]{[/align]

int
i = 0;

char
p[10] =
""
;
printf(
"请输入要修改的联系人的姓名:\n"
);
scanf(
"%s", p);

for
(i = 0; i <
pcon
->size; )
[align=left] {[/align]

if
(!strcmp(pcon
->peo[i].name, p))
[align=left] {[/align]
printf(
"请输入修改后的联系人的信息:\n"
);
printf(
"姓名:"
);
scanf(
"%s",
pcon
->peo[i].name);
printf(
"性别:"
);
scanf(
"%s",
pcon
->peo[i].sex);
printf(
"年龄:"
);
scanf(
"%d", &pcon
->peo[i].age);
printf(
"电话:"
);
scanf(
"%s",
pcon
->peo[i].tel);
printf(
"住址:"
);
scanf(
"%s",
pcon
->peo[i].addre);
printf(
"修改成功!\n"
);
system(
"cls");

return;
[align=left] }[/align]
i++;
//因为上面循环里的判断用到i了,要是把i++写在循环条件里,那么会出错
[align=left] }[/align]
printf(
"通讯录内不存在该联系人!\n"
);
system(
"cls");
[align=left]}[/align]

void
show_conatct(Pcon
pcon)
[align=left]{[/align]

int
i = 0;

if
(pcon
->size == 0)
[align=left] {[/align]
printf(
"通讯录内没有任何信息!\n"
);
system(
"cls");

return;
[align=left] }[/align]
printf(
"%-6s%-6s%-6s%-16s%s\n",
"姓名"
,
"性别",
"年龄",
"电话"
,
"住址");

for
(i = 0; i <
pcon
->size; i++)
[align=left] {[/align]
printf(
"%-6s%-6s%-6d%-16s%s\n",
pcon
->peo[i].name,
pcon->peo[i].sex,
pcon->peo[i].age,\

pcon->peo[i].tel,
pcon
->peo[i].addre);
[align=left] }[/align]
[align=left]}[/align]

void
clear_conatct(Pcon
pcon)
[align=left]{[/align]

pcon->size = 0;
printf(
"联系人已被清空!\n"
);
system(
"cls");
[align=left]}[/align]

void
sort_conatct(Pcon
pcon)
[align=left]{[/align]

int
i = 0;

int
j = 0;

for
(i = 0; i <
pcon
->size - 1; i++)
[align=left] {[/align]

for
(j = 0; j <
pcon
->size - i - 1; j++)
[align=left] {[/align]

if
(strcmp(pcon
->peo[j].name,
pcon->peo[j+1].name) > 0)
//这个必须指明结果是大于0还是小于0,因为

//不指明的话,不管大于0还是小于0都会进到if

//判断语句里去
[align=left] {[/align]
swap(&
pcon->peo[j], &pcon
->peo[j + 1]);
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
printf(
"排序成功!\n"
);
system(
"cls");
[align=left]}[/align]


测试部分

#define_CRT_SECURE_NO_WARNINGS
1

[align=left]#include"contact.h"[/align]

int
main()
[align=left]{[/align]

Contact
pcon = { 0 };
[align=left] load_contact(&pcon);[/align]

while
(1)
[align=left] {[/align]

int
input = 0;
[align=left] meun();[/align]
scanf(
"%d", &input);

switch
(input)
[align=left] {[/align]

case
ADD:;
[align=left] add_conatct(&pcon);[/align]

break;

case
DELETE:;
[align=left] dele_conatct(&pcon);[/align]

break;

case
FIND:
[align=left] find_conatct(&pcon);[/align]

break;

case
ALTER:;
[align=left] alter_conatct(&pcon);[/align]

break;

case
SHOW:;
[align=left] show_conatct(&pcon);[/align]

break;

case
CLEAR:;
[align=left] clear_conatct(&pcon);[/align]

break;

case
SORT:;
[align=left] sort_conatct(&pcon);[/align]

break;

case
SAVE:;
[align=left] save_contact(&pcon);[/align]

break;

case
EXIT:;
[align=left] exit(0);[/align]

break;
[align=left] }[/align]
[align=left] }[/align]
system(
"pause");

return
0;
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: