c语言课程设计实验报告模板.docx
- 文档编号:4856594
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:12
- 大小:134.01KB
c语言课程设计实验报告模板.docx
《c语言课程设计实验报告模板.docx》由会员分享,可在线阅读,更多相关《c语言课程设计实验报告模板.docx(12页珍藏版)》请在冰豆网上搜索。
c语言课程设计实验报告模板
《程序设计基础》
课程设计报告
课程设计题目
通讯录管理系统
指导教师:
____李萍____
班级:
__0903班____
学生姓名:
2009100333_闫晓
2009100334皇倩
2009100335翟少平
2009100336谢成龙
2009100337姚琳
完成日期:
2010年9月16日
运城学院计算机科学与技术系
《C语言课程设计》
通讯录管理系统
一、课程设计目的
1、通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
2、通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据文件等知识的运用。
3、通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
4、通过课程设计,训练C程序调试能力,能将一个中小型各级组织系统联调通过。
5、通过课程设计,开发一个中小型系统,掌握系统研发全过程。
6、通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容
设计一个实用的学生通讯录管理系统,能以简便高效的方式对通讯录进行管理和检索,具体要示:
(1)录入:
学生通讯录信息包括:
姓名,地址,电话等。
以结构数组或数据文件的形式存放通讯录信息。
(2)更新:
能插入、删除通讯录信息。
(3)浏览:
按姓名为序进行通讯录信息浏览。
(4)查询:
能实现指定联系人信息查询或指定课题组人员查询功能。
(5)系统以菜单方式工作,要求界面友好,易于操作。
三、总体设计
模块化设计
为实现系统功能,本程序主要分为六个模块。
它们分别为:
输入一个学生信息、删除一个学生信息、查询一个学生信息、插入一个学生信息、输出所有的学生信息、保存并且退出该程序。
这六个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
creat函数用于对通讯录中的数据以文件的方式
进行读入及函数用于录入通讯录中学生的信息;
delete函数用于对通讯录中指定信息的删除;
search函数用于对通讯录中指定信息的查询;
append函数用于在通讯录中插入信息;
output函数用于对通讯录中所有信息进行浏览;
exit函数用于保存通讯录信息并且退出。
四、详细设计
(1)数据结构设计
本程序中,运用了多种数据结构。
首先对于学生通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,在creat函数中,把保存在数组中的值再赋值给其中的一个结点,通过指针的后移,把多个数据连成一个链,形成一个链表。
在这过程当中,还运用了数据文件的方式,每一次从终端输入的数据都以数据文件的形式保存到了磁盘。
对于主要数据结构的举例如下:
结构数组:
structperson
{charname[10];
charaddr[30];
chartel[15];
};
(2)模块接口设计
由于本程序中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。
本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据以文件的方式进行读入。
接下来在while语句中再套用switch语句实现对各个函数的调用。
最后,再从main函数中结束整个程序的运行。
其中涉及到被调用的函数有:
voidcreat33();
voidoutput34();
voidsearch34();
voidappend36();
voidmodify35();
voiddelete37();
(3)流程图
creat函数:
voidcreat33()
{
structpersonone;
longs1;
printf("\n请输入通讯簿名:
");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立通讯簿!
");
exit();
}
fprintf(fp,"%-20s%-30s%-50s\n","姓名","电话号码","住址");
printf("\n请输入姓名、电话号码及住址(以0结束)\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
output函数:
voidoutput34()
{
structpersonone;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit();
}
printf("\n\n%20s\n","通讯簿");
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
}
fclose(fp);
}
append函数:
voidappend36()
{
structpersonone;
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit();
}
printf("\n请输入添加的姓名、电话号码及住址\n");
scanf("%s%s%s",one.name,one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
fclose(fp);
}
search函数:
voidsearch34()
{
intk=0;
charnamekey[8];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit();
}
while(!
feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!
strcmp(namekey,one.name))
{
printf("\n\n已查到,记录为:
");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
k=1;
}
}
if(!
k)
printf("\n\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
modify函数
voidmodify35()
{
intm,k=0;
longoffset;
charnamekey[8];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit();
}
while(!
feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为:
");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n请输入新姓名、电话号码及住址:
");
scanf("%s%s%s",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr);
}
else
printf("\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
XX文库-让每个人平等地提升自我}
delete函数
voiddelete37()
{
intm,k=0,flag;
longoffset1,offset2;
charnamekey[8],valid[4];
structpersonone;
printf("\n请输入姓名:
");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯簿!
");
exit();
}
while(!
feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!
strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已查到,记录为");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n确实要删除,按1;不删除,按0:
");
scanf("%d",&m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-50s\n","","","");
}
}
else
printf("\n对不起,通讯簿中没有此人的记录。
");
fclose(fp);
}
五、调试与测试
(1)调试过程中的主要问题
由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务,整个程序以文件形式读写,所以每次都可对输入的数据进行保存。
对于本程序的调试运行,总体上情况良好。
(2)测试结果的分析与讨论
1用户界面
2输入学生信息
3查找学生信息
4删除学生信息
5添加学生信息
6浏览学生信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)