课程设计文档格式.docx
- 文档编号:1009199
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:28
- 大小:194.86KB
课程设计文档格式.docx
《课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
2.输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分;
3.根据输入文件得到各学校总分,
4.可以按学校编号或名称、学校总分、男女团体总分排序;
5.可以按学校编号查询学校某个项目的情况;
可以按项目编号查询取得前三或前五名的学校。
6.实现数据的增加、删除、修改,并将相关数据进行保存;
7.各操作结果能保存到文件,以便查询。
计划与进步的安排
1.1-2日:
查找资料
2.3-4日:
编写代码
3.5-6日:
程序测试
目录
摘要I
1题目分析1
2 概要设计1
3 详细设计2
4 调试分析3
5 用户使用说明4
6 测试结果6
7结论体会10
8参考文献11
9源程序11
摘要
针对运动会分数统计系统通过运用结构体、文件读取以及数据保存、定义运动会类、以及调用函数、运用库函数实现了指定的输入文本读取数据;
根据输入文件得到各学校的总分;
按学校编号、学校总分、男女团体总分排序;
查询功能按学校编号查询某个项目的情况、按项目编号查询取得前三或前五名的学校;
实现了数据的增加、删除、修改以及对数据的保存的功能。
该系统的用户主要是提供给管理、学校的。
对于管理用户提供了所有的操作,而对学校拥护只提供查询和查看操作,这样安全性能比较高,该系统是通过输入文本读取来获取数据,较少了输入数据的繁杂通过运用定义运动会类,进行对函数的定义,使整个代码看起来清晰整洁,通过调用库函数,使代码更简洁。
该系统为用户提供了总分计算,排序方便,为学校用户提供了查询和查看的方便。
关键词:
运动会分数统计系统;
结构体;
排序;
查询
1、题目分析
该系统实现了简单的运动会分数统计,是一个面向对象的设计,使用了结构体,输入文本读取数据以及库函数的调用来完成整个系统的设计,是繁多的数据操作变得简单。
该系统为联合运动会提供服务减少了不必要的人力物力的浪费,通过写一段程序实现简单运动会分数统计系统的设计来实现几个功能。
该系统实现了以下几个功能:
(1)根据指定的输入文件读取数据;
(2)输入文件数据格式和文件数目由学生自行设计,主体体现学校名称、项目编号、项目名称、男子女子项目类别、前三或前五名积分;
(3)根据输入文件得到各学校总分,
(4)可以按学校编号或名称、学校总分、男女团体总分排序;
(5)可以按学校编号查询学校某个项目的情况;
(6)实现数据的增加、删除、修改,并将相关数据进行保存;
(7)各操作结果能保存到文件,以便查询。
通过这次的课程设计,可以加深对库函数,以及结构体的了解,以及各个函数的功能以及实现,更进一步了解其原理。
2、概要设计
本课程涉及主要采用了C++。
C++语言是在C语言的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法。
C++改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程。
C++语言代表着对以往语言之精华的发展和提炼,既支持面向对象的程序设计,也支持结构化的程序设计。
它修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字,提高了程序的可靠性和可读性。
函数重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。
提供了模板机制。
模板包括类模板和函数模板两种,它们将数据类型作为参数。
3、详细设计
本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表:
3.1项目数据表:
运动会开始前必须详细制定本次运动会所需的参赛项目为接下来报名、场地的准备提供依据。
本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。
这也有利于以后项目情况的查询。
typedefstruct
{
intitemnum;
//项目编号
inttop;
//取名次的数目
intrange[5];
//名次
intmark[5];
//分数
}itemnode;
//定义项目结点的类型
3.2学校数据表:
本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。
其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。
intschoolnum;
//学校编号
intscore;
//学校总分
intmscore;
//男团体总分
intwscore;
//女团体总分
itemnodec[m+w];
//项目数组
}headnode;
//定义头结点类型
3.3单项数据表:
本数据表是对各个学校的报名情况及成绩进行汇总,为了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中的成绩。
typedefstruct/*单项成绩*/
{
/*学校编号*/
/*项目编号*/
intxmch;
/*项目成绩*/
}danx;
danxdx[Y];
这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整体。
4、调试问题
4.1调试过程中出现的问题和处理方式:
为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输入数据,如:
printf("
要查询的项目编号:
"
);
scanf("
%d"
&
s);
if(s>
m+w||s==0)
printf("
此次运动会不包括这个项目.\n\n\n"
想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如:
switch(choice)
{
case1:
inputinformation();
writedata();
readdata();
main();
case2:
output();
case3:
inquiry();
case4:
readdata();
程序出现语法错误,发现是输入名次信息的地方忘带地址符&
,或是程序不完整,只写了一个大括号。
如:
printf("
*****名次:
4.2调试分析的过程:
(1).函数调用。
函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。
(2).对结构体的不熟练。
刚开始对结构体不太了解,使调试程序时费了我不少的时间。
结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。
结构体在我的实习中站了很大的比重,我也很重视它。
通过与线性表,循环等的有机搭配,我完成了实习任务。
(3).循环的问题。
这是我很苦恼,大量的循环语句的应用,分析。
使我很头疼,循环是计算机语言中很重要的部分,什么程序也离不开循环,这个问题的解决使我有了坚实的基础。
对多层循环的应用也有了深刻的理解。
5、用户使用
5.1主界面说明
当运行系统时,首先进入的是主界面,显示了整个系统所提供的用户选项,在最后一行有提示让您输入你所要选择的功能项。
如下所示:
5.2显示用户选择界面说明
键入1后,选择是管理用户,进入下面界面中:
对于管理用户来说是要密码输入的,密码输入后进入下面管理用户可以操作的功能界面中:
如果在主界面中键入2,用户选择中你选择学校用户,将直接进入学校用户的功能操作界面。
5.3管理用户信息界面说明
从管理用户功能操作界面选择第1个功能时,则会出现下面的界面:
根据数据说明书进行数据的的输入,输入你要修改的项目编号如:
10001
根据提示一次进行下列修改操作:
按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。
选择“2”进行项目添加操作,进入添加界面,根据提示一次进行添加操作:
选择“3”进行项目删除操作,进入删除界面,根据提示一次进行删除操作:
按任意键回到管理用户功能操作界面,再进行其他的操作,如果按“0”,则退出系统,操作数据将保存在文本item_info.txt中。
选择“4”进行查询操作,进入查询界面,根据你的需要选择,再根据提示一次进行查询操作:
选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面:
如果选择“2”则是根据项目编号来查询获得前三或前五的学校情况,根据提示完成本次查询操作,出现界面如下:
选择“5”进行排序操作,进入排序界面,根据你的需要选择,再根据提示一次进行排序操作:
(下面的排序进过数据的改变后进行的排序)
(1)如果选择“1”是根据学校编号排序,查看学校总分,男女团体总分:
(2)如果选择的是“2”是根据学校总分排序:
(3)如果选择的是“3”是根据男子团体总分排序:
(4)如果选择的是“4”是根据女子团体总分排序:
5.4学校用户操作信息界面说明
从主界面键入2选项,则直接进入学校用户信息操作界面:
如果选择“1”则进行的是查询操作,进入查询界面:
选择1,则是根据学校的编号来查询学校某个项目的情况,根据提示完成查询操作,出现如下界面:
按任意键回到学校用户功能操作界面,再进行其他的操作,如果按“2”,则进行查看操作,进入下列查看排名操作界面:
(1)如果选择“1”是根据学校编号排序,查看学校总分,男女团体总分:
(2)如果选择的是“2”是根据学校总分排序:
6、测试结果
(1)首先运行文件运动会统计分数系统
图1运动会统计系统首页面
(2)输入信息:
程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。
输入1得到进入输入信息模块。
图2输入信息
(3)输出信息:
输入2进入输出信息模块,该模块分四项:
图3输出模块
图4按学校编号输出
图5按学校总分输出
图6按男团总分输出
图7按女团总分输出
(4)查询信息:
图8信息查询模块
图9按学校编号查询
图10按项目编号查询
图11输入错误信息时给出提示
图12输入2继续查询,输入0返回主菜单
7、结论
经过几天的忙碌,最终把课程设计任务完成了。
要做好一件事,只能一步一步的去做,不可能一下子就完成。
本来以为简单的几个功能,要实现以为很容易,首先还构思着,要用链表来做,觉得比较的容易,可是在真正实现起来才知道有些东西用链表实现有些困难,后面还是改用结构体和库函数写比较容易实现、有些库函数是我接触比较少的,为了了解它们我还花了一些时间,在编写的过程中还把题意理解错误,让自己困死在里面,最后还是和其他人一起讨论进一步深刻了解了题目的意思。
在写函数的时候,由于对map容器不是很熟悉,以致定义的map类型的变量出错,虽然程序中没有错误但是执行的结果有错误,经过改正,自己对其进一步的了解,是执行结果正确。
要做好一个系统,一个严谨的思维是不可以或缺的,每一个联系都要考虑,每个细节都需要注意,每一种错误都要会解决。
只有把每一种问题都解决了,才能做出一个完善的系统出来。
每做一个项目都会让我学到很多的东西,这些东西是日常的学习中无法获得的。
本次课程设计,使我对数据结构线性表,栈的设计方法、步骤、思路、有一定的了解与认识。
它相当于实际设计工作的模拟。
在课程设计过程中,基本能按照规定的程序进行,先针对表达式算法为背景,建立系统模型;
收集、调查有关资料,其间与老师和同学进行几次讨论、修改,再讨论、再修改,最后定案。
通过此次课程设计,我了解了编写应用软件的一般步骤,获得了很多宝贵的经验。
特别是怎么样通过理论与实践相结合,把书本上的内容应用到我们做的程序上去。
怎样使各个子模块实施其的详细功能,特别是各个子模块之间的接口,一定要相当清晰,达到相互协调的作用其次,我熟悉了数据结构知识。
学会了很多关于程序设计的经验和技巧,明白了程序的使用性和通用性是程序生存周期长短的关键,学会了调试程序的一般方法。
知道应如何在困难重重中一步一步细心的发现问题,解决问题。
本次课程设计检验了我的实践能力,感觉自己还有许多东西要学习,并不仅限于课本上的知识,实践才是真理,在学习中实践,实践中去学习。
学习的路很长。
8、参考文献
[1]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2005
[2]严蔚敏著.吴伟民.数据结构(C语言版).北京:
清华大学出版社,2007
[3]谭浩强著.C++程序设计.北京:
清华大学出版社,2004.6
9、源代码
源代码:
#include<
stdio.h>
math.h>
#include<
conio.h>
process.h>
#definen2//学校数目
#definem1//男子项目数目
#definew1//女子项目数目
#definenull0
intitemnum;
inttop;
intrange[5];
intmark[5];
intschoolnum;
intscore;
intmscore;
intwscore;
itemnodec[m+w];
headnodeh[n];
//定义一个头结点数组
voidinputinformation()//输入信息,建立系统
inti,j,k,s;
for(i=0;
i<
n;
i++)
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}//初始化头结点
printf("
*****学校编号:
scanf("
h[i].schoolnum);
//输入头结点信息
for(j=0;
j<
m+w;
j++)
{
printf("
*****项目编号:
h[i].c[j].itemnum);
*****取前3名or前5名:
h[i].c[j].top);
*****获得几个名次:
k);
//输入项目信息
for(s=0;
s<
5;
s++)
h[i].c[j].range[s]=0,h[i].c[j].mark[s]=0;
//初始化排名和分数
k;
{
h[i].c[j].range[s]);
//输入所获名次信息
if(h[i].c[j].top==3)
switch(h[i].c[j].range[s])
{
case0:
h[i].c[j].mark[s]=0;
break;
h[i].c[j].mark[s]=5;
h[i].c[j].mark[s]=3;
h[i].c[j].mark[s]=2;
}
else
{
h[i].c[j].mark[s]=7;
case5:
h[i].c[j].mark[s]=1;
h[i].score=h[i].score+h[i].c[j].mark[s];
//按取前三名还是取前五名分别记分
if(j<
=m-1)
h[i].mscore=h[i].mscore+h[i].c[j].mark[s];
//是男子项目则记到男子分数里面去
h[i].wscore=h[i].wscore+h[i].c[j].mark[s];
//是女子项目则记到女子项目里面去
}
\n"
}
voidoutput()//输出函数
intchoice,i,j,k;
intremember[n];
intsign;
do
*******************1.按学校编号输出.*******************\n"
*******************2.按学校总分输出.*******************\n"
*******************3.按男团总分输出.*******************\n"
*******************4.按女团总分输出.*******************\n"
\n\n*******************请选择编号*************************\n\n:
choice);
case1:
for(i=0;
\n\n*****学校编号:
%d\n"
h[i].schoolnum);
*****学校总分:
h[i].score);
*****男团总分:
h[i].mscore);
*****女团总分:
%d\n\n\n"
h[i].wscore);
}//按编号顺序输出
break;
remember[i]=i;
for(j=i+1;
if(h[remember[i]].score<
h[j].score)
k=remember[i];
remember[i]=remember[j],remember[j]=k;
}//用冒泡排序方法,用辅助数组记住头结点下标
\n\n*****学校编号:
h[remember[i]].schoolnum);
h[remember[i]].score);
h[remember[i]].mscore);
h[remember[i]].wscore);
//按所记下标顺序输出
}//按学校总分输出
remember[i]=i;
if(h[remember[i]].mscore<
h[j].mscore)
k=remember[i];
remember[i]=remember[j];
remember[j]=k;
}//按男团总分输出
for(i=0;
remember[i]=i;
for(j=i+1;
if(h[remember[i]].wscore<
h[j].wscore)
remember[i]=re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计