数据结构课程设计报告范超.docx
- 文档编号:11896790
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:32
- 大小:418.24KB
数据结构课程设计报告范超.docx
《数据结构课程设计报告范超.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告范超.docx(32页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告范超
海南大学信息科学技术学院
数据结构课程设计报告
设计题目:
学生成绩管理系统
专业班级:
12级通信工程3班
姓名:
范超
学号:
20120206310061
指导教师:
吴泽晖
摘要1
一、概述1
二、需求分析1
三、设计要求1
四、概要设计1
五、详细设计2
1、定义结构体2
2、模块设计3
六、源程序9
七、运行结果26
八、心得体会30
九、参考文献31
【摘要】随着科学的发展和社会的进步,许多过去由人工处理的繁杂事务开始交付计算机来完成。
学生成绩管理系统可以说是每个教育单位的得力助手,他利用计算机对学生成绩进行统一管理,实现学生成绩星系管理工作流程的系统化、自动化和规范化,提高广大教师的工作效率。
因此,学生成绩管理系统对教育不嫩或单位越来越重要。
此次成绩管理系统用C语言作为程序开发工具,设计一个简单的学生成绩管理系统,完成对学生成绩添加、修改、删除成绩统计功能。
【关键字】成绩管理系统C语言添加修改删除插入统计管理
一、概述
学生成绩管理系统主要是提供成绩查询,方便管理的一种网上的信息查阅平台,学生可以通过该系统查询自己的成绩,系统管理员可以通过该系统进行学生成绩添加、修改、删除成绩统计功能。
二、需求分析
传统的教务信息统计处理是用手工方式登记,填写,更改和查询,早已不能满足当今庞大的数据管理需求。
随着时代的进步和科技的飞速发展,计算机和网络应用已经越来越普及,以计算机网络为平台,设计一个有效的学生成绩管理系统,不仅能节省大量的人力物力,减少费用,而且极大的提高了查询效率,节省了大量的时间,并且成绩管理也变得系统化和自动化。
三、设计要求
对学生信息的输入完成后,实现如下功能:
1、对学生信息的查找、删除、修改。
2、显示每们课程的平均成绩。
3、任意抽取一门课程后,可以按该课程学生成绩对学生信息进行排序。
四、概要设计
此成绩管理系统主要由六大功能模块组成。
(1)输入模块。
输入模块主要完成将数据存入的工作。
在此成绩管理系统中,记录是从键盘逐个输入学生记录。
学生记录由学生基本信息和成绩信息组成。
(2)查询模块。
查询模块主要完成在输入的数据中查找满足要求的学生记录。
在此管理系统中提供了两种查询方法,一种是按学号查询,一种是按姓名查询。
(3)修改模块。
修改模块主要是将已输入的数据修改或者重新输入
(4)删除模块。
删除模块主要完成输入数据的删除,将不需要的数据删除。
(5)统计模块。
统计模块主要完成对各科平均成绩统计和各科成绩排名统计功能。
(6)输出模块。
输出记录模块主要是将存储的学生记录信息在屏幕上打印出来。
五、详细设计
1、定义结构体
为了对学生信息进行统一操作,使用了结构体这一数据结构,学生的各项数据信息都能用结构体来表示,具体如下:
structstudent/*定义结构体*/
{intnum;
charname[50];/*姓名,长度为50的字符串数组*/
charclasses[50];/*班级名称,长度为50的字符串数组*/
doublematchps;/*高等数学平时成绩,双精度实型变量*/
doublematchks;/*高等数学考试成绩,双精度实型变量*/
doublematchzh;/*高等数学综合成绩,双精度实型变量*/
doubleenglishps;/*英语平时成绩,双精度实型变量*/
doubleenglishks;/*英语考试成绩,双精度实型变量*/
doubleenglishzh;/*英语综合成绩,双精度实型变量*/
doubleclangugeps;/*C语言平时成绩,双精度实型变量*/
doubleclangugeks;/*C语言考试成绩,双精度实型变量*/
doubleclangugezh;/*C语言综合成绩,双精度实型变量*/
doublepoliticsps;/*政治平时成绩,双精度实型变量*/
doublepoliticsks;/*政治考试成绩,双精度实型变量*/
doublepoliticszh;/*政治综合成绩,双精度实型变量*/
doubleave;/*平均成绩,双精度实型变量*/
}student[1000];/*最多存储1000个学生数据*/
2、模块设计
结构化的程序设计主要靠设计和调用各模块的函数来实现。
此程序设计了多个函数,每个函数都能完成一个任务,有的函数和别的函数结合能完成更大的任务。
每一个模块功能的实现其实就是对函数的调用。
接下来首先介绍本程序所涉及的子函数,再介绍主函数,最后介绍程序整体的实现过程。
(1)输入模块
输入模块主要是由voidInputfun()和voidGetinformation()两个函数组合得到的模块。
voidInputfun()/*输入学生信息模块*/
此函数只进行输入操作,由于此函数较长并且经常需要被其他子函数调用,所以先进行说明。
此函数主要用来输入学生的基本数据,并判断输入是否正确。
比如在分数的输入中就限定了只能输入0至100之间的数值,如果输入其他则显示错误,这也符合分数录入规则。
需要特别注意的是,这个函数完成了本程序中要做的两个计算。
一是在每门课的考试成绩和平时成绩输入后完成了对这门课的综合成绩的计算(考试成绩*0.7+平时成绩*0.3);二是在最后一门课程的综合成绩算出后,计算了该学生四门课的平均成绩。
voidGetinformation()/*获得学生信息*/
此函数是为了得到输入的学生信息,它调用了Inputfun()函数,其实它的主体还是Inputfun()函数。
图输入模块流程图
(2)查找模块
查找模块提供了2种查找方式,该模块调用了voidSeekinformation()函数。
2种查找方式分别为按学号查找和按姓名查找,2种查找方式分别调用了intSearchbynum(intno)和intSearchbyname(charna[50])函数。
voidSeekinformation()/*查询学生信息*/
此函数主要是查询学生信息,它调用了intSearchbynum(intno)和intSearchbyname(charna[50]),提供了2种查询方法(1、按学号查询;2、按姓名查询)。
并通过调用voidPrintinformation(intx)(输出模块)将查询到的学生信息输出在屏幕上。
intSearchbynum(intno)/intSearchbyname(charna[50])
这两个函数是按学号查找和按姓名查询模块中的两个重要函数。
主要功能是根据用户输入的学号\姓名返回改学生所在的的数组下标。
利用for循环嵌套一个if语句实现,若找到学生该学生信息就返回数组下标,若找不到就返回-1。
图查找模块流程图
(3)输出模块
输出模块是所有模块中最简单,但也最重要的模块。
输出模块在查找模块、修改模块以及统计模块中都有使用。
调用voidPrintinformation(intx)函数。
voidPrintinformation(intx)/*输出学生信息*/
此函数较为简单,主要是将输入的学生信息输出至屏幕上。
它与其他的函数有紧密的联系,是各个模块中最为重要的函数。
(4)修改模块
修改模块主要调用voidModifyinformation()函数。
修改模块还调用了查找模块。
voidModifyinformation()/*修改学生信息*/
此函数用于修改学生信息。
基本原理就是用输入的新数据覆盖原来的老数据,达到修改的目的。
本函数还调用了查找模块的函数,使修改前能按学号或姓名找到要修改的学生信息。
修改过程中调用了Inputfun()函数。
图修改模块流程图
(5)删除模块
删除模块与修改模块原理基本一致,不同的是修改模块是将查找到的信息进行修改,而删除模块是将查找到的数据删除。
此模块调用了voidDeleteinformation()函数,同时,该模块也调用了查找模块。
voidDeleteinformation()/*删除学生信息*/
函数用于删除学生信息。
同样调用了查找模块的函数。
删除模块的关键语句是for(i=x;i<999;i++)student[i]=student[i+1];从要删除的那一个数据开始,用后一个数据覆盖它,一直循环到最后,相当于把开始的第一个数据删除了。
图删除模块流程图
(6)统计模块
此模块主要调用voidChengjitongji()函数。
voidChengjitongji()/*按要求统计成绩*/
此函数用于按要求统计成绩。
有分别统计每门课的平均成绩的功能;还能够按每门课程的成绩对学生进行排序,使学生在该门课的表现一目了然。
排序中用到了冒泡排序的方法。
图统计模块流程图
(7)程序主函数模块
voidmain()/*主函数*/
主函数是用Switch语句集成各个功能函数。
Switch语句是函数的主体:
switch(c)/*利用switch语句集成各个功能函数*/
{
case1:
Getinformation();break;/*获得学生信息*/
case2:
Seekinformation();break;/*查找学生信息*/
case3:
Modifyinformation();break;/*修改学生信息*/
case4:
Deleteinformation();break;/*删除学生信息*/
case5:
Chengjitongji();break;/*课程成绩的统计*/
case0:
exit(0);/*退出*/
default:
break;
}
图程序流程图
六、源程序
#include
#include
#include
#include
structstudent/*定义结构体*/
{intnum;
charname[50];/*姓名,长度为50的字符串数组*/
charclasses[50];/*班级名称,长度为50的字符串数组*/
doublematchps;/*高等数学平时成绩,双精度实型变量*/
doublematchks;/*高等数学考试成绩,双精度实型变量*/
doublematchzh;/*高等数学综合成绩,双精度实型变量*/
doubleenglishps;/*英语平时成绩,双精度实型变量*/
doubleenglishks;/*英语考试成绩,双精度实型变量*/
doubleenglishzh;/*英语综合成绩,双精度实型变量*/
doubleclangugeps;/*C语言平时成绩,双精度实型变量*/
doubleclangugeks;/*C语言考试成绩,双精度实型变量*/
doubleclangugezh;/*C语言综合成绩,双精度实型变量*/
doublepoliticsps;/*政治平时成绩,双精度实型变量*/
doublepoliticsks;/*政治考试成绩,双精度实型变量*/
doublepoliticszh;/*政治综合成绩,双精度实型变量*/
doubleave;/*平均成绩,双精度实型变量*/
}student[1000];/*最多存储1000个学生数据*/
inta,b,c,d,x,i,j,k;
chars1[50];
doublef;
voidInputfun()/*输入学生信息模块*/
{
for(;;)/*设计死循环以至于在输入格式错误时可以再次输入*/
{
printf("请输入班级名称:
\t");/*输入班级名称*/
scanf("%s",&s1);
if(strlen(s1)>20)
{
printf("您输入的班级名称过长!
\n");
continue;
}
strcpy(student[i].classes,s1);
break;/*格式正确后跳出死循环*/
}
for(;;)
{
printf("请输入学号:
\t");/*输入学号*/
scanf("%d",&b);
if(student[i].num<0)
{
printf("您输入的学号错误!
\n");
continue;
}
student[i].num=b;
break;
}
for(;;)
{
printf("请输入姓名:
\t");/*输入姓名*/
scanf("%s",&s1);
if(strlen(s1)>20)
{
printf("您输入的姓名过长!
\n");
continue;
}
strcpy(student[i].name,s1);
break;
}
for(;;)
{
printf("请输入该生高等数学平时成绩:
\t");/*输入各科平时成绩和考试成绩*/
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].matchps=f;
break;
}
for(;;)
{
printf("请输入该生高等数学考试成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].matchks=f;
student[i].matchzh=student[i].matchks*0.7+student[i].matchps*0.3;/*按考试成绩70%平时成绩30%算该门课程的最终成绩*/
break;
}
for(;;)
{
printf("请输入该生英语平时成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].englishps=f;
break;
}
for(;;)
{
printf("请输入该生英语考试成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].englishks=f;
student[i].englishzh=student[i].englishks*0.7+student[i].englishps*0.3;
break;
}
for(;;)
{
printf("请输入该生政治平时成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].politicsps=f;
break;
}
for(;;)
{
printf("请输入该生政治考试成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].politicsks=f;
student[i].politicszh=student[i].politicsks*0.7+student[i].politicsps*0.3;
break;
}
for(;;)
{
printf("请输入该生C语言平时成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}
student[i].clangugeps=f;
break;
}
for(;;)
{
printf("请输入该生C语言考试成绩:
\t");
scanf("%lf",&f);
if(f>100||f<0)
{
printf("成绩不合理!
请您输入合理的成绩.\n");
continue;
}student[i].clangugeks=f;student[i].clangugezh=student[i].clangugeks*0.7+student[i].clangugeps*0.3;
student[i].ave=(student[i].matchzh+student[i].englishzh+student[i].clangugezh+student[i].politicszh)/4;/*计算每个学生的平均成绩*/
break;
}
}
voidGetinformation()/*获得学生信息*/
{
for(i=0;i<1000;i++)/*利用循环连续输入学生信息*/
{
if(i==0)
{
system("cls");
printf("请根据提示输入学生的信息\n\n");
}
else
printf("请输入下一个学生的信息\n\n");
Inputfun();
printf("继续请按1,返回主菜单请按0.\n");
scanf("%d",&a);
if(a==0)
break;
}
}
intSearchbynum(intno)/*按学号查找*/
{
for(j=0;j<1000;j++)
{
if(student[j].num==no)
{
returnj;
}
}
return-1;
}
intSearchbyname(charna[50])/*按姓名查找*/
{
for(k=0;k<1000;k++)
{
if(strcmp(student[k].name,na)==0)
{
returnk;
}
}
return-1;
}
voidPrintinformation(intx)/*输出学生信息*/
{
if(x==-1)
printf("该学生信息不存在!
\n");
else
{
printf("班级:
%s\n",student[x].classes);
printf("学号:
%d\n",student[x].num);
printf("姓名:
%s\n\n",student[x].name);
printf("高数平时成绩:
%5.2f\n",student[x].matchps);
printf("高数考试成绩:
%5.2f\n",student[x].matchks);
printf("高数综合成绩:
%5.2f\n\n",student[x].matchzh);
printf("英语平时成绩:
%5.2f\n",student[x].englishps);
printf("英语考试成绩:
%5.2f\n",student[x].englishks);
printf("英语综合成绩:
%5.2f\n\n",student[x].englishzh);
printf("C语言平时成绩:
%5.2f\n",student[x].clangugeps);
printf("C语言考试成绩:
%5.2f\n",student[x].clangugeks);
printf("C语言综合成绩:
%5.2f\n\n",student[x].clangugezh);
printf("政治平时成绩:
%5.2f\n",student[x].politicsps);
printf("政治考试成绩:
%5.2f\n",student[x].politicsks);
printf("政治综合成绩:
%5.2f\n\n",student[x].politicszh);
printf("平均成绩:
%5.2f\n",student[x].ave);
}
}
voidSeekinformation()/*查询学生信息*/
{
for(;;)
{
system("cls");
printf("按学号查找请按1,按姓名查找请按2\n");/*提供两种查找方式*/
scanf("%d",&a);
if(a==1)
{
printf("请输入要查找的学生的学号\n");
scanf("%d",&d);
x=Searchbynum(d);/*调用按学号查找函数*/
Printinformation(x);
}
elseif(a==2)
{
printf("请输入要查找的学生的姓名\n");
scanf("%s",&s1);
x=Searchbyname(s1);/*调用按姓名查找函数*/
Printinformation(x);
}
printf("继续请按1,返回主菜单请按0.\n");
scanf("%d",&a);
if(a==0)
break;
}
}
voidModifyinformation()/*修改学生信息*/
{
for(;;)
{
system("cls");
printf("请先查找要修改的学生信息!
\n\n");
printf("按学号查找请按1,按姓名查找请按2\n");/*先查找后修改*/
scanf("%d",&a);
if(a==1)
{
printf("请输入要查找的学生的学号\n");
scanf("%d",&d);
x=Searchbynum(d);
}
elseif(a==2)
{
printf("请输入要查找的学生的姓名\n");
scanf("%s",&s1);
x=Searchbyname(s1);
}
if(x==-1)
printf("学生信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告