优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

运动会成绩管理系统

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

引  言
本课程设计主要解决在运动会上,将各个比赛项目所有获得名次的同学的成绩输入;成绩查询;成绩修改;成绩删除;以及成绩输出。 内容来自think58

[资料来源:THINK58.com]

1.1 课程设计目的
进一步巩固《C\C++程序》,《VC++》课程所学的知识,特别加强数组,指针,结构体,文件数据类型的应用,熟悉面向过程的结构化和面向对象可视化程序设计方法,通过本次课程设计的实践,锻炼程序设计的能力以及用C/C++ C++解决实际问题的能力,为以后后续课程的学习打好基础。
 1.2 程序功能说明
   该程序用于运动会上,涉及到比赛项目成绩的录入,某个学校在某个项目中获得成绩的查询,某个学校在某个运动项目中获得的成绩的修改,某个学校在某个运动项目中获得的成绩的删除,以及某个学校所有获得成绩的得分报表以及团体成绩的得分报表。其中比赛成绩的录入可以按照运动项目举行的次序输入,也可以输入自己指定的运动项目的成绩;自己扩展的功能是“某个学校在某个项目中获得成绩的查询,某个学校在某个运动项目中获得的成绩的修改,某个学校在某个运动项目中获得的成绩的删除”三项,这三项都要求输入学校以及运动项目编号,通过这两项作为参数具体的函数可以查询、修改成绩或者是删除某项成绩记录,进而影响到最后得分报表的输出。

[来源:http://www.think58.com]

2 原理分析
 2.1  开发语言
   本课程涉及主要采用了C++。C++语言是在C语言的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法[1]。C++改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程[2]。
C++语言代表着对以往语言之精华的发展和提炼,并能很好的与C语言兼容,既支持面向对象的程序设计,也支持结构化的程序设计。它修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字,出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。 函数重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。提供了模板机制。摸板包括类摸板和函数模板两种,它们将数据类型作为参数。对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。 内容来自think58

[来源:http://www.think58.com]

2.2 运行环境
      Microsoft Visual C++ 6.0。Visual C++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。Visual C++ 6.0提供的控制台应用程序对学习和掌握标准C++内容非常有利。“可视”的资源编辑器与MFC类以及应用程序向导,为快速高效地开发出功能强大的Windows应用程序提供了极大的方便。利用Visual C++ 6.0进行Internet、数据库及多媒体等多方面的程序开发也很容易[3]。
函数及变量说明
    void insertlist(int iterm,int n);  该函数用来添加成绩记录,iterm 是运动项目的编号,n为参加比赛的学校总数,需要注意地是根据运动项目是奇数还是偶数来判定最后结果取前三还是前五名,这里用(iterm%2)是否为零来判断。
   RE *findlist(int snum,int fiterm);   该函数用来查找指定的学校的某项目成绩并返回该成绩所在节点的前一个节点的地址,其中snum是要查找的学校的编号,而fiterm为要查找的运动项目编号,返回一个指向RE型的指针,RE为定义的一个结构体类型,用来存储获得名次的学生的基本信息(包括学生姓名,取得的名次,获得的分数,所在的学校编号以及运动项目编号)

think58.com

[版权所有:http://think58.com]


    RE *findend(int snum);  查找并返回每个学校的最后一个数据节点的地址,函数返回类型同上,snum为学校编号
    void printlist1(int snum);  输出每项具体的成绩,snum为学校编号
   void printlist2(int snum,int m,int w);   输出团体成绩 ,m为男生项目数,w为女生项目数
void modlist(int snum,int miterm);   修改成绩  miterm为要修改的项目编号
void deletelist(int snum,int diterm);  删除成绩记录,diterm为要删除的项目编号
  还有主函数void main( )里用一个嵌套在do—while循环语句中的switch语句来控制要执行操作的编号,用户可以有多种选择,根据不同的需要选择不同的操作,这个也很关键。 本文来自think58 [版权所有:http://think58.com]

4 程序调试 [版权所有:http://think58.com]

4.1 调试过程中出现的问题及处理方式
在void printlist1(int snum)函数中,当将要输出成绩的学校所在的链表的头结点所指向的下一个结点的地址赋给temp的时候,   RE *temp;
                                      temp=&sc[snum-1];
                                      temp=temp->next;
要检测temp是否为NULL,如果为NULL会发生溢出,程序无法向下继续进行
解决的方法是 加上     if(temp==NULL) 
        cout<<"该学校在该项目上没有取得任何成绩"<<endl;
此句可以有效的防止溢出发生
此类问题还发生在 void printlist2(int snum,int m,int w)和void modlist(int snum,int miterm)里面,在后面的那个函数里面  RE *curr=findlist(snum,miterm);在这个赋值语句后面也要跟上                  if(curr==NULL)  return; think58.com [来源:http://www.think58.com]
  curr=curr->next;
 if(curr==NULL) {
 cout<<"该学校在该项目上没有任何成绩记录"<<endl;
  return;}
这也是为了防止溢出的发生而设定的条件。 copyright think58

[资料来源:www.THINK58.com]

在插入结点的时候是将其直接插到该学校所在链表的最后,因此需要找到每个学校所在链表的最后一个结点的地址,而函数RE *findlist(int snum,int fiterm); 只是返回需要查找的结点的地址,不一定是最后一个结点
解决办法是重新定义一个函数,RE *findend(int snum);尽管这样在效率上可能会有些差,因为每次插入的时候都要从头结点开始查找,时间上的开销会大一些,但还是可以解决上述问题的
此外,还有一些就是细节问题了,如:主函数中的
if(num>6||num<0) {
    cout<<"输入有误,请重新输入要操作的项目编号"<<endl;
    cin>>num;}
这个if语句判断输入的操作编号是否在目录中,如果超出范围重新输入;
还有函数void insertlist(int iterm,int n)里面在用new申请空间的时候为防止内存分配空间错误用下面的语句来监控
if(temp==NULL) 
  cout<<"内存分配错误"<<endl;
以及函数void insertlist(int iterm,int n)里面在输入学校编号的时候用下面的if语句判断输入的学校编号是否符合要求,如果超出范围重新输入
if(temp->snum>n) {
       cout<<"输入的学校编号有误,请重新输入"<<endl;

本文来自think58 [资料来源:THINK58.com]


       cin>>temp->snum;}
内容来自think58
[版权所有:http://think58.com]