c语言程序设计-通讯录Word格式.doc
《c语言程序设计-通讯录Word格式.doc》由会员分享,可在线阅读,更多相关《c语言程序设计-通讯录Word格式.doc(26页珍藏版)》请在冰点文库上搜索。
1流程介绍
本程序一共有6个流程,即显示流程、查找流程、添加流程、删除流程、修改流程和排序流程,分别实现上述六种功能,下面介绍一下这六个流程。
(1)显示流程
通过此流程可以对录入的信息进行输出,只有当有录入信息时才会输出,否则显示“没有此学生”。
流程图如图2所示。
结束
N
Y
开始
“没有此学生”
是否有学生信息?
显示通讯录信息
图2显示功能的流程图
(2)查找流程
通过此流程可以实现对录入信息的查找,此程序支持三种查找方式,按学号、姓名、电话查找,然后判断是否有此人,有则输出该用户信息,并且显示通讯录使用容量和剩余容量,否则输出“没有此人信息”并进行重新选择。
流程图如图3所示。
图3查找功能的流程图
“没有此人信息”
判断是否有此人?
输出此人信息
是否继续查找?
输入查找人姓名
9姓名
输入查找人电话
输入查找人学号
(3)添加流程
通过此流程可以实现对信息的添加,首先先对容量进行测试如果没有容量则提示信息已满,若有容量,则显示通讯录使用量和总容量,再对姓名、学号等逐项输入,输入完毕后系统会提示是否继续添加,若是,则继续添加,若否则返回菜单函数。
流程图如图4所示。
信息已满
判断是否有空位?
显示通讯录容量
输入通讯录
是否继续添加?
图4添加功能的流程图
(4)删除流程
通过此流程可以对录入的信息进行删除。
此程序提供学号、姓名、电话来查找删除人若没有此人,则显示没有此人信息,并返回删除菜单。
若有此人,系统会询问用户是否删除信息,是则删除,否则不删除,并返回删除菜单。
流程图如图5所示。
没有此人信息
删除此人信息
是否继续删除?
输入删除人姓名
是否删除?
输入删除人学号
输入删除人电话
图5删除功能的流程图
(5)修改流程
通过此流程可以实现对录入信息的修改。
此程序提供学号、姓名、电话三种方式查找待修改人,进行判断是否有此人,若没有,则显示没有此人信息,并返回修改菜单,若有则会逐项进行修改。
系统会在修改完成后询问用户是否进行修改,选否则不修改,并且返回修改菜单。
流程图如图6所示。
修改此人信息
是否继续修改?
知道姓名?
是否修改?
知道学号?
知道电话?
图6修改功能的流程图
(6)排序流程
通过此函数可以实现对录入信息进行排序。
的功能此程序提供按学号和姓名的排序,此函数的算法即冒泡法排序通过对排序量进行交换,从而达到排序的目的。
流程图如图7所示。
图7排序功能的流程图
j<
js-2?
交换两人信息
以姓名排序
以学号排序
定义js(通讯录条数)
定义i,j=0(循环变量)
i<
is-j-1?
比较i与i+1两人信息
i自增
j自增
2.函数介绍
本程序一共由18个函数组成,其中main函数只是调用菜单函数,因此可以算一个。
其中有7个主要函数,直接实现系统功能,其余为辅助函数,辅助主要函数实现对应功能。
下面将一一介绍。
menu()菜单函数,主要函数,输出主菜单,用户的工作平台,连接添加、查找、显示、删除、修改、排序六大模块,起到连接用户和系统的作用。
xianshi(),显示函数,主要函数,主要功能:
显示录入的信息。
chazhao(),查找函数,主要函数,主要功能:
查找录入的信息。
tianjia(),添加函数,主要函数,主要功能:
添加通讯录信息。
shanchu(),删除函数,主要函数,主要功能:
删除录入的信息。
xiugai(),修改函数,主要函数,主要功能:
修改录入的信息。
paixu(),排序函数,主要函数,主要功能:
对录入的信息排序。
choice(),综合功能函数,地位也相当重要,主要功能:
是查找、删除、修改的中间环节,连接这三项的初始化工作和最后操作。
find(),寻位操作函数,是choice()的后续操作,识别查找、删除、修改三种操作,并给出解决方案。
ginput(),缓冲输入函数,输入信息的缓冲区,修改中使用,并不直接修改通讯录信息,当用户确认后才会修改。
hprint(),表头输出函数,负责输出表头。
iprint(),信息输出函数,可以输出某个人的信息
input(),输入函数,无缓冲输入,直接对通讯录进行修改,在添加中使用。
jiaohuan(),交换函数,对送入的两个字符串进行交换。
replace(),取代函数,用后一个人的信息取代前一个人的信息,在删除中用。
turn(),排序函数,冒泡法的主要算法,也是排序流程的主要过程。
panduan(),判断函数,主要功能是判断Y和N的,由于此操作过多,所以单提出来作为函数。
四设计总结
通过这次课程设计,我自学了结构体那部分,并且成功运用在程序中,这样提高了自身的自学水平。
并且对于以前学过的知识都是一个很好的巩固。
通过这次课程设计,我也知道了养成良好的变成习惯很重要,这样在编程中思路会更加清晰,而且错误也会更容易找。
通过这次课程设计,我学会了调试程序,并且通过调试发现了一些问题,这使我受益匪浅。
程序中出错是一件很平常的事,但找错是一件很困难的事,通过找错,我对C语言的运行有了更深的了解,同时改出错的喜悦不亚于编出程序。
这次课设虽然结束了,但对我做的通讯录管理系统的完善并没有结束。
分的函数太多,这在读代码上会造成困难,同时也会造成程序的繁杂,不能一目了然地看出来。
还有一些功能还有待完善,比如添加功能的学号不唯一,删除没有全部删除,修改不能只修改某一项等等,还有一项预想的保存功能没能编出来,这些都是我以后要继续完善的。
参考文献
[1]谭浩强.C语言程序设计教程,第三版.高等教育出版社,2006
附录
源程序代码
#include<
stdio.h>
string.h>
stdlib.h>
conio.h>
#defineN30
#defineM80
/****************************定义结构体******************************/
typedefstruct
{charnum[M];
charname[M];
intage;
charphonum[M];
charaddress[M];
charqq[M];
}STUDENT;
STUDENTstd[N];
/*****************************声明变量******************************/
voidmenu(void);
voidxianshi(STUDENTs[N]);
voidchazhao(STUDENTs[N]);
voidtianjia(STUDENTs[N]);
voidshanchu(STUDENTs[N]);
voidxiugai(STUDENTs[N]);
voidpaixu();
voidiprint(intn);
voidhprint();
intfind(chars[M],inti,charc[M],intsign);
voidchoice(intsign);
voidprint(intn);
voidreplace(intn);
intpanduan(void);
voidinput(inti);
voidginput(inti);
voidturn(intk);
voidjiaohuan(chars[M],charc[M]);
/****************************主函数********************************/
main()
{
menu();
return0;
}
/******************************主菜单******************************/
voidmenu(void)
inta;
system("
cls"
);
printf("
*****************************欢迎进入通讯录管理系统*****************************\n\n"
//输出主菜单
\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)"
scanf("
%d"
&
a);
while(a>
6)//判断输入是否正确
{
printf("
输入错误,请重新输入:
scanf("
}
switch(a)
{
case0:
exit
(1);
break;
case1:
xianshi(std);
case2:
chazhao(std);
case3:
tianjia(std);
case4:
shanchu(std);
case5:
xiugai(std);
case6:
paixu();
/******************************显示通讯录******************************/
voidxianshi(STUDENTs[N])
inti;
******************************显示通讯录******************************\n\n"
hprint();
for(i=0;
std[i].age!
=0;
i++)
iprint(i);
if(i==0)
\n\n\t\t\t无学生信息\n\n"
else
\n已添加%d条\n还剩%d条"
i,N-i);
pause"
menu();
/**********************查找通讯录**********************/
voidchazhao(STUDENTs[N])
intsign=1,flag;
******************************查找通讯录******************************\n"
\t\t\t1.按学号查找\n"
printf("
\t\t\t2.按姓名查找\n"
\t\t\t3.按电话查找\n"
\t\t\t0.返回\n"
(0~3)"
choice(sign);
\n是否继续查找?
(Y/N)"
//继续添加
flag=panduan();
if(flag==1)
chazhao(std);
system("
/***********************添加通讯录********************/
voidtianjia(STUDENTs[N])
inti,flag;
******************************添加通讯录******************************\n\n"
;
{
if(i==N)//判断是否有空位
{
printf("
通讯录已满!
"
break;
}
if((s[i].age!
=0))//寻找空位
continue;
\n容量:
%d/%d\n\n"
i+1,N);
input(i);
\n是否继续添加?
flag=panduan();
if(flag==1)
tianjia(std);
else
{
system("
menu();
}
/****************************删除通讯录******************************/
voidshanchu(STUDENTs[N])
intflag,sign=2;
******************************删除通讯录******************************\n\n"
for(;
)
\t\t1.按学号删除\n"
\t\t2.按姓名删除\n"
\t\t0.返回\n"
请选择(0~2)"
choice(sign);
printf("
//继续删除?
flag=panduan();
if(flag==1)//判断
shanchu(std);
/****************************修改通讯录******************************/
voidxiugai(STUDENTs[N])
intflag,js=0,sign=3;
system("
printf("
****************************修改通讯录******************************\n\n"
printf("
\t\t\t1.知道学号?
\n"
\t\t\t2.知道姓名?
printf("
\t\t\t3.知道电话?
请选择(0~3)"
choice(sign);
xiugai(std);
/***************************排序通讯录*****************************/
voidpaixu()
{
inti,j;
***************************排序通讯录*****************************\n\n"
\t\t1.按学号排序\n"
\t\t2.按姓名排序\n"
do
j);
if(j==0)
elseif(j==1||j==2)
turn(j);
break;
printf("
输入错误,请重新输入(0~2)"
}while(j>
2);
hprint();
for(i=0;
iprint(i);
system("
/****************综合功能函数**************/
voidchoice(intsign)
inti,j,flag,js=0;
charc[M];
do{
scanf("
if(j==0)
menu();
elseif(j==1)
{
if(sign==1)
printf("
请输入查找人的学号:
if(sign==2)
请输入删除人的学号:
if(sign==3)
请输入修改人的学号:
scanf("
%s"
c);
hprint();
for(i=0;
N;
{
flag=find(std[i].num,i,c,sign);
if(flag==1)//判断是否有记录
js++;
}
if(js==0)
{