个人通讯录管理系统C语言课程设计报告.docx
《个人通讯录管理系统C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《个人通讯录管理系统C语言课程设计报告.docx(40页珍藏版)》请在冰豆网上搜索。
个人通讯录管理系统C语言课程设计报告
个人通讯录管理系统C语言课程设计报告
————————————————————————————————作者:
————————————————————————————————日期:
重庆科技学院
《C语言程序设计》
课程设计报告
学院:
_电气与信息工程学院_专业班级:
电自专2011-01
学生姓名:
蒋洪山学号:
2011630194
设计地点(单位)________I515________________
设计题目:
__________个人通讯录管理系统_____________
完成日期:
2012年12月28日
指导教师评语:
_______________________________________
____________________________________________________________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________
指导教师(签字):
________________
摘要
本次课程设计的题目为个人通讯录管理系统,要求将程序中所输入的联系人姓名、电话和地址信息这三个数据以文本方式保存在磁盘中,并且能够对所储存的联系人信息进行显示、查询、修改、删除等功能。
我编写的程序从整体上看可分为两个部分,一部分为文件的建立、读取和保存,另一部分为通讯录功能的实现。
在文件部分,我通过readfile()函数和writefile()函数从而实现了对磁盘上数据的进行写和读,通过刚开始的界面提示可以知道文件是否建立,以免丢失数据,我还为用户设计了保存退出和不保存退出两大功能供用户做选择。
在模块功能实现部分,通过scanf从键盘上输入的数字放到switch()case循环中来实现调用zengjia()、shanchu()、xiugai()、chazhao()等十五个函数来实现“添加”、“查询和显示”、“修改”、“删除”等不同功能。
关键字:
文件、数组、循环、函数
重庆科技学院
课程设计任务书
设计题目:
个人通讯录管理系统
学生姓名
蒋洪山
课程名称
C语言程序设计课程设计
专业班级
电自专2011
地点
I515
起止时间
2012年12月17日-12月28日
设计内容及要求
建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信簿进行显示、查找、添加、修改及删除。
进一步掌握利用C语言进行程序设计的能力;进一步理解和运用结构化程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用流程图表示算法。
根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。
设计
参数
(1)系统分析、设计正确。
(2)结果以图表方式显示。
(3)界面简洁、美观。
(4)报告格式规范。
进度
要求
周一:
明确设计任务,学习相关基础知识
周二:
熟悉各知识点,进行基础练习
周三:
根据题目要求,进行设计和实现
周四:
根据题目要求,进行设计和实现
周五:
撰写报告,进行答辩
参考资料
[1]何钦铭颜晖.《C语言程序设计》.高等教育出版社.2008年
[2]谭浩强张基温.《C语言程序设计教程》.高等教育出版社.2006年
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:
指导教师:
雷亮2012年12月10日
第一章软件需求分析说明书
1.1设计软件的目的分析
本软件要求用C语言建立一通讯录,输入姓名、电话号码、住址等信息,然后对通信录进行显示、查找、添加、修改及删除。
1.2软件的界面要求
本软件要求软件的界面简洁、美观,让人一目了然,使用起来方便。
于是我设计的软件首先提示您是否有通讯录文件存在,如没有文件,则自动建立一个,如有文件存在,则提示导入成功,让人直观明白的了解文件的情况。
按任意键便可以进入主菜单,在主菜单上显示出软件的功能,通过输入数字0到5来进行选择便可以实现你所需要的功能,每个模块进入模块内部实现软件的具体功能,实现您所需要的功能。
1.3详细的功能分析
该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。
下面六个模块都是利用C语言文件,向文件中添加数据、修改数据、查询数据、删除数据和保存数据。
1.3.1创建文件
用fopen()建立一个文本文件,然后向其中输入数据(例如,向文件中输入“姓名”,“地址”,“号码”等),并对文件进行命名。
1.3.2添加联系人
通过键盘输入通讯录人员的姓名、电话号码、地址信息便可实现将信息添加到通讯录文件内,添加完毕后,系统会自动询问你是否继续添加,如你想继续添加,再通过键盘输入通讯录人员的姓名、电话号码、地址信息即可实现继续添加。
1.3.3显示和查询联系人
通过前面第一个模块打得录入我们便可以执行第二个模块,通过第二个模块我们可以进行对联系人进行显示和查找。
我通过调用showall()函数来进行显示所有的联系人,showall()函数可以实现逐个显示联系人。
对于查找联系人我则采用了search()函数来进行查找联系人,我提供了两种查找方法:
按照姓名查找;
按照电话号码查找。
1.3.4删除联系人
我调用deletecd()函数来实现删除功能,同样我也提供给了两种删除方法:
全部删除;
单个删除。
其中全部删除会提示是否全部删除,以免误删。
1.3.5修改联系人
我调用modify()函数来实现修改功能,我同样提供了两种修改方法:
对姓名进行修改;
对电话号码进行修改。
修改完毕后会提示是否据需修改。
1.3.6保存退出与不保存退出
你还在为误添加、误修改、误删除后悔吗?
还想回到以前的数据吗?
这个担忧在我的程序中您就不必担心了,我为程序提供了两种退出方式:
保存退出;
不保存退出。
完全解决您的后顾之忧。
1.4设计要求分析
进一步掌握利用C语言进行程序设计的能力;
进一步理解和运用结构化程序设计的思想和方法;
初步掌握开发一个小型实用系统的基本方法;
学会调试一个较长程序的基本方法;
学会利用流程图表示算法。
⑥根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。
1.5软件的数据结构分析
1.5.1软件的函数
本软件采用了不同的函数来进行定义不同模块的功能,通过调用不同的函数,可以实现不同的功能。
软件中采用了五个主体函数来实现添加联系人,修改联系人,查找联系人,显示联系人,删除联系人的功能。
1.5.2文件的调用和保存
本软件通过文本方式对用户所录入的信息进行保存。
通过保存下来的文本,您可以在电脑磁盘中找到您存入文件的位置,打开后便可以找到您所录入的通讯录信息。
第二章系统分析与设计
2.1软件界面设计
画出软件全部输入、输出数据的界面,并对每一个界面进行详细的操作说明
2.2软件的数据(结构)设计
软件调用不同的函数来实现不同的功能,通过反复调用函数来实现反复输入。
代码中通过scanf从键盘上输入不同的数字选项,然后通过swtichcase()来实现对不同函数的调用。
2.2.1软件的文件功能
软件采用了文本文档进行存取,我在C盘建立了一个txl文本文档用于存取输入的信息,打开C盘后就能直接看到您录入的信息,很方便和快捷。
2.2.2文件内部的数据格式
我采用了readfile()函数来读取文件,使用if((fp=fopen("c:
\\通讯录.txt","r"))==NULL)以只读方式打开判定文件是否为空,如果不空,则使用fseek(fp,0,2);文件位置指针移动到文件末尾以来进行写入数据。
使用writefile()将联系人写入文件,用if((fp=fopen("c:
\\通讯录.txt","w"))==NULL)以只写的方式来对判定文件是否为空,如果不为空,则从键盘上录入所需要录入的信息存到相应的文件中。
最后通过fclose(fp)来关闭文件,回到主界面上等待用户输入新的操作。
2.3软件的模块图
软件的模块图很直观的反映出软件能够实现的功能,由下面的模块图可以很直观的看出我设计的通讯录软件能够方便的实现添加联系人、显示联系人、删除联系人、修改联系人功能,另外,我设计的软件还实现了保存退出和不保存退出功能,这个功能很独特。
①在增加联系人部分,我用了三个函数调用来分别实现录入联系人姓名、号码、地址。
②在显示和查询联系人部分,我也有三个模块:
逐个显示联系人,按姓名查询,按号码查询。
③在删除联系人部分,我设计了三个界面,可以实现全部删除,单个删除,回到主菜单。
④在修改联系人模块,我也设计了三个界面,按姓名修改,按号码修改,回到主菜单。
⑤最后我设计了保存退出和不保存退出,针对那些修改后却又后悔修改的用户需要。
图2.1软件的模块图
2.4软件的流程图
由于程序流程图较为复杂,我采用了分块画出程序流程图
2.4.1添加联系人程序流程图
由添加联系人的程序流程图可以看出,在添加联系人板块上,我设计了三种信息,输入姓名,输入电话和输入地址,输入完成后会提示是否继续输入,如果输入y后则可以继续输入,输入n后返回主菜单。
主界面
添加联系人
输入姓名
输入电话
输入地址
是否继续
添加
Y/y
N/n
开始
图2.2添加联系人程序流程图
2.4.2显示和查找联系人程序流程图
在主菜单上输入2后便可以进入显示和查询联系人的主界面,我为您提供了三个选项,1.显示全部2.按姓名查询3.按电话查询。
输入对应的数字便可以实现对应的功能,同理,系统会在您查询完毕后询问您是否继续查询,操作同上。
图2.3显示和查找联系人程序流程图
2.4.3删除联系人流程图
在删除联系人流程图上,我设计了全部删除和单个删除功能,单个删除设计了按照姓名删除和按电话号码删除两种选择,在删除时,系统都会询问您是否删除,以免误删。
图2.4删除联系人流程图
2.4.4修改联系人流程图
修改联系人界面上我设计了按姓名修改和按号码修改两种方式,当选择时系统会提示您是否修改,若不修改则返回主界面,若选择是,则系统会该处三个修改项目:
修改姓名,修改电话,修改地址,修改完毕后系统会提示您是否继续修改,如不修改,则又返回主界面等待输入。
主界面
修改联系人
按姓名修改
按号码修改
确认是否继续修改
Y/y
N/n
修改姓名
修改电话
修改地址
确认是否修改
Y/y
N/n
开始
图2.5修改联系人流程图
第三章软件的实现
3.1函数声明
voidzhucaidan();/*主菜单函数*/
voidzengjia();/*增加联系人函数*/
voidreadfile();/*文件中读入函数*/
voidwritefile();/*文件中写入函数*/
voidxiugai();/*修改联系人函数*/
voidxiugai_xingming();/*姓名修改*/
voidxiugai_dianhua();/*电话号码修改*/
voidchazhao();/*查找联系人函数*/
voidchazhao_xingming();/*按姓名查找*/
voidchazhao_dianhua();/*按号码查找*/
voidshanchu();/*删除联系人函数*/
voidshanchu_quanbu();/*全部删除*/
voidshanchu_dange();/*单个删除*/
voidxianshi();/*号码显示*/
3.2zhucaidan()主菜单函数
其源代码如下:
voidzhucaidan()
{
charc;
system("cls");
printf("\n\t\t|-------欢迎您使用通讯录管理系统1.0beat版-----|");
printf("\n\t\t|1-添加联系人2-查询和显示联系人|");
printf("\n\t\t|3-删除联系人4-修改联系人|");
printf("\n\t\t|5-保存退出0-不保存退出|");
printf("\n\t\t|------------------------------------------------|");
printf("\n\t\t请选择您所所要的服务:
");
c=getch();
switch(c)/*对于上边的选择项目*/
{
case'1':
zengjia();break;
case'2':
chazhao();break;
case'3':
shanchu();break;
case'4':
xiugai();break;
case'5':
writefile();break;
case'0':
exit(0);
default:
zhucaidan();/*如果没有则返回主菜单等待输入*/
}
}
较难语句分析:
1system("cls");清除输入在屏幕上的数据;
2c=getch();将键盘上输入的数据赋予c;
3switch(c)case:
实现对主菜单上的选项的控制;
3.3main()主函数
main()函数的源代码见下:
voidmain()/*主函数main*/
{readfile();/*读入文件*/
while
(1)/*循环(永远进行)*/
{
zhucaiidan();/*调用主菜单函数*/
}
}
main()函数功能分析:
main()函数通过调用readfile()函数和循环menu()函数实现对入文件和界面进行控制。
3.4readfile()读取文件函数
其源代码如下:
voidreadfile()
{
if((fp=fopen("c:
\\通讯录.txt","r"))==NULL)/*以只读方式打开判定文件是否为空*/
{
printf("\n\t\t\t通讯录文件不存在");/*判断结论*/
if((fp=fopen("同通讯录.txt","w"))==NULL)/*只写方式判断*/
{
printf("\n\t\t建立失败");/*为空结论*/
exit(0);/*退出*/
}
else/*不为空则执行else*/
{
printf("\n\t-----------------欢迎使用通讯录管理系统------------------");
printf("\n\t通讯录文件已建立");
printf("\n\t按任意键进入主菜单");
printf("\n\t---------------------------------------------------------");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);/*文件位置指针移动到文件末尾*/
if(ftell(fp)>0)/*文件不为空*/
{
rewind(fp);/*文件位置指针移动到文件开始位置*/
for(n=0;!
feof(fp)&&fread(&txl[n],sizeof(structtongxunlu),1,fp);n++);
printf("\n\t----------欢迎使用通讯录管理系统1.0beat版----------------");
printf("\n\t文件导入成功");
printf("\n\t按任意键返回主菜单");
printf("\n\t---------------------------------------------------------");
getch();
return;
}
printf("\n\t------------欢迎使用通讯录管理系统1.0beat版--------------");
printf("\n\t文件导入成功");
printf("\n\t通讯录文件中无任何纪录");
printf("\n\t按任意键返回主菜单");
printf("\n\t---------------------------------------------------------");
getch();
return;
}
较难语句分析:
1if((fp=fopen("c:
\\通讯录.txt","r"))==NULL)以只读方式打开判定文件是否为空;
2fseek(fp,0,2);文件位置指针移动到文件末尾;
3ftell(fp):
返回当前文件位置,也就是说返回FILE指针当前位置;
4rewind(fp);文件位置指针移动到文件开始位置;
5feof(fp)检测流上的文件结束符;
6fread(&txl[n],sizeof(structtongxunlu),1,fp);n++)从fp指向的文件中向txl[n]中读入一个(structtongxunlu)类型的值并输出后面的内容。
若没有成功执行就不输出后面的内容。
voidreadfile()函数的功能分析:
首先由if((fp=fopen("c:
\\通讯录.txt","r"))==NULL)判断文件是否存在,如果不存在,则显示通讯录文件不存在,如果文件为空,则显示建立失败;若建立成功,则显示通讯录文件已建立,然后利用fseek(fp,0,2);将文件位置指针移动到文件末尾等待输入。
3.5writefile()联系人写入文件函数
函数源程序见下:
voidwritefile()/*联系人写入文件*/
{
inti;
if((fp=fopen("c:
\\通讯录.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for(i=0;i{
if(fwrite(&txl[i],sizeof(structtongxunlu),1,fp)!
=1)
{
printf("\n\t\t写入文件错误!
\n");
}
}
fclose(fp);/*关闭文件*/
printf("\n\t------------------------------------------------------");/*输出提示信息*/
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t谢谢使用,欢迎再次使用!
\n");
printf("如果对本软件有疑问,请到我们官网()提出您的问题,我们将为您解答.\n");
printf("我们的软件有不足之处,欢迎到官网()反映,我们将努力改正!
");
printf("\n\t\t按任意键退出程序\n\t\t");/*输出完毕*/
exit(0);
printf("\n\t------------------------------------------------------");
}
较难语句分析:
1fp=fopen("c:
\\通讯录.txt","w"))以只写的方式打开c:
\\txl.txt文件赋予fp;
2if(fwrite(&txl[i],sizeof(structtongxunlu),1,fp)!
=1)从fp指向的文件中向txl[n]中写入一个(structtongxunlu)类型的值并输出后面的内容。
若没有成功执行就不输出后面的内容。
3fclose(fp);关闭文件
writefile()联系人写入文件函数的功能分析:
将c:
\\通讯录.txt文件以只读方式打开付给fp,如果为空则输出“文件打开失败”;若果成功则执行if(fwrite(&txl[i],sizeof(structtongxunlu),1,fp)!
=1),如果写入(structtongxunlu)成功则关闭文件,若果不成功则输出“写入文件错误!
”。
3.6zengjia()增加联系人函数
其源程序如下:
voidzengjia()
{
printf("\n\t\t------------------请输入联系人信息--------------------\n");
printf("\n\t\t输入联系人姓名:
");
scanf("%s",txl[n].xingming);/*键盘输入*/
printf("\n\t\t输入联系人电话号码:
");
scanf("%s",txl[n].dianhua);
printf("\n\t\t输入联系人地址:
");
scanf("%s",txl[n].dizhi);
n++;/*统计个数*/
printf("\n\t\t是否继续添加联系人?
(Y/N):
");/*是否继续输入联系人.*/
if(getch()=='y')
zengjia();
return;
}
功能分析:
调用zengjia()函数后,就可以通过txl[n].xingming,txl[n].dianhua,txl[n].dizhi数组从键盘上输入联系人的姓名,电话,地址,输入完毕后,系统会提示是否继续输入,输入“y”后,则再次调用zengjia();函数,如此循环,直到不输入联系人为止。
3.7shanchu()删除函数主界面
原函数代码:
voidshanchu()
{
charc;
if(n==0)/*如果通讯录中没有一个记录输出以下部分*/
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");/*清屏*/
printf("\n\t\t-----------------删除菜单----------------------");
printf("\n\t\t|1-删除所有2-删除单个|");
printf("\n\t\t|3-返回主菜单|");
printf("\n\t\t|-----------