通讯录C语言实训报告Word文档下载推荐.docx
《通讯录C语言实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《通讯录C语言实训报告Word文档下载推荐.docx(47页珍藏版)》请在冰豆网上搜索。
charname[20];
/*姓名*/
charmobile[15];
/*手机号码*/
charphone[15];
/*家庭电话*/
charaddress[50];
/*家庭住址*/
structphone*next;
};
自定义函数
voidshowmenu();
/*显示功能菜单*/
voidcreatnew()/*添加纪录函数*/
voidsave()/*将数据写入文件函数*/
voidadd()/*控制添加记录函数*/
voidopenfile()/*输出文件到链表函数*/
voidshow()/*显示全部记录函数*/
voidsearchshow()/*显示查找选项函数*/
tel*searchname()/*按姓名查找记录函数*/
tel*searchmobile()/*按手机号码查找记录函数*/
tel*searchphone()/*按家庭电话查找记录函数*/
tel*searchaddress()/*按地址查找记录函数*/
tel*search()/*查找记录函数*/
tel*dimsearch()/*模糊查找记录函数*/
voidmodify()/*修改记录函数*/
voiddel()/*删除记录函数*/
voidfre()/*释放链表空间函数*/
voidopenfile();
/*读取文件到链表*/
2.2.2主控main()函数执行流程
以只读的方式打开一个数据文件
将此文件的内容读出,
并存入一个结构体中,关闭文件
进入while
(1)主循环
调用函数showmenu()输出菜单
输入[0~6]中的一个数值,
选择相应操作
是
否
判断键值,调用相应函数,
完成相应功能
本通讯录执行主流程如图2.2所示。
它先以只读的方式打开数据文件,此文件默认为“txl.txt”,若该文件不存在,则给出提示。
当打开文件操作成功后,从文件中读出全部记录,添加到结构体中,然后执行进入主循环和显示主菜单操作,输入(0~6)进行按键判断。
当输入0时,系统会退出通讯录系统的操作。
若选择1,则调用voidadd()函数,执行增加记录操作;
若选择2,则调用voidmodify()函数,执行修改记录操作;
若选择3,则调用tel*search()函数,执行查询记录操作;
若选择4,则调用voiddel()函数,执行删除记录操作;
若选择5,则调用voidshow()函数,执行显示全部记录操作;
若选择6,则调用tel*dimsearch()函数,执行模糊查找操作;
若选择0,则调用voidsave()、voidfre(),函数,执行保存记录,并释放链表空间操作;
若输入为0~6之外的值,给出选择错误的提示。
2.2.3添加记录模块
程序一开始就从默认文件调用fsanf()函数读入记录(若文件存在且有记录)到结构体中。
在添加每条信息时均在提示框显示有相关提示,当用户选择0退出添加记录时,系统会清屏并返回到主菜单供用户再次选择其他操作。
2.2.4查询记录模块
此模块包括精确查询和模糊查询两大功能。
通过调用tel*search()和tel*dimsearch()实现,查询记录模块主要实现了显示结构体中所有成员信息。
通过调用tel*search()函数实现,系统默认为精确查找,当精确查找没有匹配是,会提示用户是否进行模糊查找,模糊查找系统会根据用户输入的相关信息,通过调用tel*dimsearch()函数分条显示与该信息相关的记录,直到用户确认或程序到最后一条记录。
2.2.5修改记录模块
此模块主要通过调用tel*search()和tel*dimsearch()实现,查询记录模块主要实现了显示结构体中所有成员信息。
通过调用tel*search()函数实现,系统默认为精确查找,当精确查找没有匹配是,会提示用户是否进行模糊查找,模糊查找系统会根据用户输入的相关信息,通过调用tel*dimsearch()函数分条显示与该信息相关的记录,直到用户确认后进行修改或程序到最后一条记录。
2.2.6删除模块
通过调用tel*search()函数实现,系统默认为精确查找,当精确查找没有匹配是,会提示用户是否进行模糊查找,模糊查找系统会根据用户输入的相关信息,通过调用tel*dimsearch()函数分条显示与该信息相关的记录,直到用户确认后进行删除或程序到最后一条记录。
2.2.7显示全部记录模块
此模块主要通过调用show()函数将记录(如果有记录)全部输入到屏幕上面,否则则给出相应提示。
2.2.8模糊查询模块
通过调用tel*dimsearch()函数实现,模糊查找系统会根据用户输入的相关信息,通过调用tel*dimsearch()函数分条显示与该信息相关的记录,直到用户确认该信息或到最后一条记录。
3、系统实现
3.1编码
3.1.1程序预处理
#include<
stdio.h>
/*标准输入输出库*/
conio.h>
/*界面处理库*/
stdlib.h>
string.h>
/*处理字符串函数库*/
structphone/*定义结构体变量*/
/*存放姓名*/
/*存放手机号码*/
/*存放家庭电话*/
/*存放家庭住址*/
/*存放下一个节点的地址*/
3.1.2主函数main()
main()
intx,m;
openfile();
system("
color9a"
);
/*设置背景颜色和字体颜色*/
while
(1)/*设置循环条件为真*/
showmenu();
/*显示各个功能*/
fflush(stdin);
/*刷新缓存区*/
printf("
请作出您的选择:
"
scanf("
%d"
&
x);
if(x>
=0&
&
x<
=6)
{
switch(x)
{
system("
cls"
case1:
add();
break;
/*添加记录函数*/
case2:
modify();
/*修改记录函数*/
case3:
search();
/*查找记录函数*/
case4:
del();
/*删除记录函数*/
case5:
show();
/*显示全部记录*/
case6:
dimsearch();
/*模糊查找*/
case0:
fre();
printf("
\n\t\t欢迎再次使用通讯录管理系统,再见!
....\n\n"
exit(0);
}
else
printf("
\n\n选择错误,请再次选择!
\n"
}
getch();
}
3.1.3输出菜单
voidshowmenu()
{inti;
for(i=0;
i<
80;
i++)
%c"
16);
\t\t\t\t1:
添加记录\n"
\t\t\t\t2:
修改记录\n"
\t\t\t\t3:
查找记录\n"
\t\t\t\t4:
删除记录\n"
\t\t\t\t5:
显示全部录\n"
\t\t\t\t6:
模糊查找\n"
\t\t\t\t0:
退出程序\n"
请在0--6选择:
17);
3.1.4添加功能
能添加入新记录(结构体成员包括:
姓名、手机号码、家庭电话、家庭住址)
voidcreatnew()/*添加记录并按姓名排序*/
{
intn;
tel*new,*p1,*p2;
new=(tel*)malloc(sizeof(tel));
/*为变量申请空间*/
aa:
\t\t\t请输入姓名:
scanf("
%s"
new->
name);
\t\t\t请输入手机号码:
mobile);
\t\t\t请输入家庭电话:
phone);
\t\t\t请输入家庭住址:
address);
p1=head;
/*将头指针再次赋给变量p1*/
if(head!
=NULL)/*先判断是否有记录*/
do
{
if((strcmp(p1->
mobile,new->
mobile))==0||
(strcmp(p1->
phone,new->
phone))==0)/*判断记录是否已经存在*/
{
printf("
记录已经存在\n"
\n%-20s%-15s%-15s%-50s\n"
p1->
name,p1->
mobile,p1->
phone,p1->
/*输出已存在记录*/
printf("
是否继续添加?
1继续添加\t其他数字键重新输入\n"
scanf("
n);
/*确认是否添加记录*/
if(n==1)/*确认添加*/
break;
else/*确认重新输入*/
gotoaa;
}
p1=p1->
next;
}while(p1!
=NULL);
/*判断记录是否存在*/
/*将头指针再次赋给变量p1*/
if(head==NULL)/*检测是否为空链表*/
head=new;
/*链表为空,插入的结点作为第一个结点*/
new->
next=NULL;
else
while((p1->
next!
=NULL)&
(strcmp(p1->
name,new->
name)<
0))/*为新节点找插入位置*/
p2=p1;
p1=p1->
if((strcmp(p1->
name)>
0))
if(head==p1)
new->
next=head;
head=new;
p2->
next=new;
next=p1;
p1->
new->
3.1.5修改功能
voidmodify()/*修改记录函数*/
{
tel*new=search();
/*调用查找函数*/
if(z==0)
;
if(x==0);
elseif(z==0&
x==0);
/*根据表计量判断指针*/
{if(new==NULL)/*修改头结点数据*/
请输入新纪录:
head->
save();
else/*修改其他结点数据*/
next->
\n\n"
\t\t\t按任意键继续"
getch();
system("
3.1.6查找功能
tel*search()
{inti,j=0;
tel*p1=NULL,*p2=NULL,*p=NULL;
loop:
searchshow();
i);
if(i>
=1&
=4)
switch(i)
p2=searchname();
p2=searchmobile();
p2=searchphone();
p2=searchaddress();
选择错误,请重新选择\n\n"
gotoloop;
while(p1!
=NULL)
if((strcmp(p1->
name,p2->
name))==0||(strcmp(p1->
mobile,p2->
(strcmp(p1->
phone,p2->
phone))==0||(strcmp(p1->
address,p2->
address))==0)
找到记录:
%-20s%-15s%-15s%-50s\n"
"
姓名"
手机号码"
电话号码"
家庭住址"
\n%-20s%-15s%-15s%-50s"
p1->
break;
p=p1;
if(p1==NULL)
\t\t\t电话本中无此记录!
!
\t\t是否重新进行?
按1继续\t按其他数字键模糊查找!
scanf("
if(i==1)
free(p2);
/*释放p2的存储空间*/
gotoloop;
else
{
/*精确查找没有记录,进行模糊找找*/
p=dimsearch();
}
returnp;
3.1.7删除功能
voiddel()/*删除记录函数*/
tel*p2=search();
/*查找要删除的结点*/
inti;
if(z==0)
/*根据标记量判断删除的是否是头点*/
if(p2==NULL)
\n\n\n确实要删除吗?
\t按1删除!
\t按其他数字保留!
head=head->
/*修改删除头结点的指针*/
\t\t\t按任意键返回"
}
else
{
if(i==1)
next=p2->
/*修改不是删除头结点的指针*/
3.1.8显示全部记录
voidshow()/*显示全部记录*/
tel*p1=head;
if(head==NULL)/*判断是否是空链表*/
\n\t\t\t电话簿中没有记录,请输入纪录后,在使用本能!
getch();
system("
return;
{printf("
p1=p1->
system(“cls”);
3.1.9模糊查找功能
tel*dimsearch()/*模糊查找*/
{inti,j=0,m;
searchshow();
lp:
}
gotolp;
p1=head;
while(p1!
if((strstr(p1->
name))||(strstr(p1-