我的课程设计.docx
《我的课程设计.docx》由会员分享,可在线阅读,更多相关《我的课程设计.docx(38页珍藏版)》请在冰豆网上搜索。
我的课程设计
华北水利水电大学
《C语言程序设计》
课程设计报告
学院:
管理与经济学院
专业班级:
工业工程
学生姓名:
唐松祥
学号:
2012142**
设计地点:
实验楼S-5
设计题目:
个人通讯录管理系统
完成日期:
2013年6月21日
华北水利水电大学
课程设计任务书
设计题目:
个人通讯录管理系统
课程设计名称
高级语言课程设计
专业班级
(学生人数)
2012工业工程141、142
58人
指导教师
闫雒恒、杨雪青
本学期承担相应课程教学任务情况
2012级高级程序设计语言
课程设计目的及任务
通过课程设计培养学生综合运用已学过的理论知识与技能去分析和解决问题的能力,掌握计算机程序设计常用方法与过程,并重点锻炼学生调试程序的能力。
课程设计要求
1、搜索、阅读相关文献和资料;
2、除必做题外,选择选做题目中的1个,设计算法,实现代码;
1)需求分析通过对用户需求进行调查分析,写出需求分析文档。
2)总体设计根据需求分析文档,初步提出问题解决方案,以及软件系统的体系结构和数据结构的设计方案,并写出书面文档总体设计说明书。
3)详细设计根据总体设计说明书,在总体设计的基础上,对系统进行详细设计,以便下一步进行程序编码工作。
4)编写代码。
5)调试运行分析结果
课程设计目标
本课程设计是《高级语言程序设计》课程的组成之一,也是它的继续和延伸。
进一步加深C语言中结构体、指针、内存分配、文件等内容的理解,从课程设计的过程中理解结构化设计的精髓,领悟程序调试的内涵。
采用研究型学习方法,完成一个管理类型的小型软件。
在课程设计前期安排学习C语言程序设计、软件工程、VC开发环境有关知识,以自学和上机实验为主。
开设本课程的目的是使学生通过参加小型软件的开发过程,进一步掌握结构化程序设计方法,使学生具有团队协作精神,并培养学生的创新能力和创新意识。
参考文献
及资料
1、《C语言程序设计》谭浩强主编第二版或第三版清华大学出版社
2、《C语言程序设计》海燕主编科学出版社
3、苏小红《C语言大学实用教程》电子工业出版社
4、金保华《C语言程序设计实验指导与习题解答》科学出版社
5、杨彩霞《C语言程序设计实验指导与习题解答》中国铁道出版社
6、国外网站,等
教研室主任:
指导教师:
闫雒恒、杨雪青2013年06月21日
目录
第一章软件需求分析说明书
1.1设计软件的目的分析………………………………………………….………………………………1
1.2软件的界面要求………………………………………………………………………………………..1
1.3详细的功能分析………………………………………………………………………………………..1
1.4设计要求分析…………………………………………………………………………………………..1
1.5软件的数据结构分析…………………………………………………………………………………..1
第二章系统分析与设计
2.1软件界面设计……………………………………….…………………………………………………2
2.2软件的数据(结构)设计…………………………………………………………………………….2
2.3软件的模块图………………………………………………………………………………………….2
2.4软件的流程图…………………………………………………………………………………………2
第三章软件的实现
3.1源程序………………………………………………………………………………………………..5
第四章软件测试
4.1文件导入界面…………………………………………………………………………………..….…14
4.2软件的主界面……………………………………………………………………….………………14
4.3添加联系人模块……………………………………………………………………………….…..15
4.4显示和查找联系人界面………………………………………………………………………….…15
4.5删除联系人模块………………………………………………………….…………………………15
4.6修改联系人模块……………………………………………………………………………….……16
总结与体会………………………………………………………………………………………………..17
致谢………………………………………………………….…………...........................18
第一章软件需求分析说明书
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文件内部的数据格式
我采用了Load()函数来读取文件,使用if((fp=fopen("c:
\\通讯录.txt","r"))==NULL)以只读方式打开判定文件是否为空,如果不空,则使用fseek(fp,0,2);文件位置指针移动到文件末尾以来进行写入数据。
使用New()将联系人写入文件,用if((fp=fopen("c:
\\通讯录.txt","w"))==NULL)以只写的方式来对判定文件是否为空,如果不为空,则从键盘上录入所需要录入的信息存到相应的文件中。
最后通过fclose(fp)来关闭文件,回到主界面上等待用户输入新的操作。
2.3软件的模块图
软件的模块图很直观的反映出软件能够实现的功能,由下面的模块图可以很直观的看出我设计的通讯录软件能够方便的实现添加联系人、显示联系人、删除联系人、修改联系人功能,另外,我设计的软件还实现了保存退出和不保存退出功能,这个功能很独特。
①在增加联系人部分,我用了三个函数调用来分别实现录入联系人姓名、号码、地址。
②在显示和查询联系人部分,我也有三个模块:
逐个显示联系人,按姓名查询,按号码查询。
③在删除联系人部分,我设计了三个界面,可以实现全部删除,单个删除,回到主菜单。
④在修改联系人模块,我也设计了三个界面,按姓名修改,按号码修改,回到主菜单。
⑤最后我设计了保存退出和不保存退出,针对那些修改后却又后悔修改的用户需要。
图2.1软件的模块图
2.4软件的流程图
由于程序流程图较为复杂,我采用了分块画出程序流程图
2.4.1添加联系人程序流程图
由添加联系人的程序流程图可以看出,在添加联系人板块上,我设计了三种信息,输入姓名,输入电话和输入地址,输入完成后会提示是否继续输入,如果输入y后则可以继续输入,输入n后返回主菜单。
图2.2添加联系人程序流程图
2.4.2显示和查找联系人程序流程图
在主菜单上输入2后便可以进入显示和查询联系人的主界面,我为您提供了三个选项,1.显示全部2.按姓名查询3.按电话查询。
输入对应的数字便可以实现对应的功能,同理,系统会在您查询完毕后询问您是否继续查询,操作同上。
图2.3显示和查找联系人程序流程图
2.4.3删除联系人流程图
在删除联系人流程图上,我设计了全部删除和单个删除功能,单个删除设计了按照姓名删除和按电话号码删除两种选择,在删除时,系统都会询问您是否删除,以免误删。
图2.4删除联系人流程图
2.4.4修改联系人流程图
修改联系人界面上我设计了按姓名修改和按号码修改两种方式,当选择时系统会提示您是否修改,若不修改则返回主界面,若选择是,则系统会该处三个修改项目:
修改姓名,修改电话,修改地址,修改完毕后系统会提示您是否继续修改,如不修改,则又返回主界面等待输入。
图2.5修改联系人流程图
源程序如下:
#include/*头文件*/
#include//包含最常用的系统函数
#include//关于字符数组的函数定义的头文件
#include//控制台输入输出
//定义结构体
structtongxunlu/*定义通讯录结构体变量*/
{
charxingming[20];/*定义输入名字的数组*/
chardianhua[20];/*定义输入电话号码的数组*/
chardizhi[40];/*定义输入地址的数组*/
}txl[100];//默认100个数据
intn=0;//记录数据联系人数量
FILE*fp;/*定义文件*/
//程序用到的所有函数
voidmenu();/*主菜单函数*/
voidAdd();/*增加联系人函数*/
voidLoad();/*文件中读入函数*/
voidNew();/*文件中写入函数*/
voidModify();/*修改联系人函数*/
voidModify_xingming();/*姓名修改*/
voidModify_dianhua();/*电话号码修改*/
voidchazhao();/*查找联系人函数*/
voidchazhao_xingming();/*按姓名查找*/
voidchazhao_dianhua();/*按号码查找*/
voidDel();/*删除联系人函数*/
voidDel_quanbu();/*全部删除*/
voidDel_dange();/*单个删除*/
voidxianshi();/*号码显示*/
//程序主函数模块六
voidmain()/*主函数main*/
{Load();/*读入文件*/
while
(1)/*循环(永远进行)*/
{
menu();/*调用主菜单函数*/
}
}
//读取文件函数部分开始模块七
voidLoad()
{
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----------------欢迎使用通讯录管理系统-------------------");
printf("\n\t文件导入成功");
printf("\n\t按任意键返回主菜单");
printf("\n\t---------------------------------------------------------");
getch();
return;
}
printf("\n\t------------欢迎使用通讯录管理系统-----------------------");
printf("\n\t文件导入成功");
printf("\n\t通讯录文件中无任何纪录");
printf("\n\t按任意键返回主菜单");
printf("\n\t---------------------------------------------------------");
getch();
return;
}
//读取文件函数结束
//文件主菜单函数开始模块六
voidmenu()
{
charc;
system("cls");
printf("\n\t\t|-------欢迎您使用通讯录管理系统--------------|");
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':
Add();break;
case'2':
chazhao();break;
case'3':
Del();break;
case'4':
Modify();break;
case'5':
New();break;
case'0':
exit(0);
default:
menu();/*如果没有则返回主菜单等待输入*/
}
}
//文件主菜单函数结束
//添加新联系人函数开始模块一
voidAdd()
{
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')
Add();
return;
}
//添加新联系人结束
//写入文件函数开始模块七
voidNew()/*联系人写入文件*/
{
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------------------------------------------------------");
}
//写入文件函数结束
///查询联系人函数开始模块四----------------------------------------------------
voidchazhao()
{
charc;
system("cls");
printf("\n\t\t-------------------显示和查询联系人------------------");
printf("\n\t\t|1-逐个显示所有2-按姓名查询|");
printf("\n\t\t|3-按电话查询4-返回主菜单|");
printf("\n\t\t|------------------------------------------------------");
printf("\n\t\t请选择您所所要的服务:
");
c=getch();
switch(c)
{
case'1':
xianshi();break;/*显示所有号码*/
case'2':
chazhao_xingming();break;/*调用按姓名查询函数*/
case'3':
chazhao_dianhua();break;/*调用按号码查询函数*/
case'4':
menu();break;/*主菜单*/
}
}
voidxianshi()//显示所有联系人函数
{
inti;
system("cls");//清楚屏幕
if(n!
=0)
{
printf("\n\t\t----------欢迎您查询通讯录所有联系人信息-------------");
for(i=0;i{
printf("\n\t\t姓名:
%s",txl[i].xingming);
printf("\n\t\t电话:
%s",txl[i].dianhua);
printf("\n\t\t地址:
%s",txl[i].dizhi);
printf("\n\t\t--------------------------------------------------");
if(i+1{
printf("\n\t\t-----------------------");
system("pause");//返回错误信息
}
}
printf("\n\t\t---------------------------------------------");
}
else/*无联系人*/
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:
");
getch(