课程设计报告学生成绩管理系统.docx

上传人:b****8 文档编号:10939870 上传时间:2023-02-23 格式:DOCX 页数:37 大小:208.71KB
下载 相关 举报
课程设计报告学生成绩管理系统.docx_第1页
第1页 / 共37页
课程设计报告学生成绩管理系统.docx_第2页
第2页 / 共37页
课程设计报告学生成绩管理系统.docx_第3页
第3页 / 共37页
课程设计报告学生成绩管理系统.docx_第4页
第4页 / 共37页
课程设计报告学生成绩管理系统.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

课程设计报告学生成绩管理系统.docx

《课程设计报告学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计报告学生成绩管理系统.docx(37页珍藏版)》请在冰豆网上搜索。

课程设计报告学生成绩管理系统.docx

课程设计报告学生成绩管理系统

《高级语言程序设计》

课程设计报告

课题名称:

学生成绩管理管理

姓名:

田宇

班级:

通信1412

学号:

指导教师:

陶恂

电子信息学院

2015年07月10日

1课题分析1

1.1问题描述1

(1)录入每个学生的学号、姓名和各科考试成绩1

(2)计算每门课程的总分和平均分1

(3)计算每个学生的总分和平均分1

(4)按每个学生的总分由高到低排出名次表1

(5)按每个学生的总分由低到高排出名次表1

(6)按学号由小到大排出成绩表1

(7)按姓名的字典顺序排出成绩表1

(8)按学号查询学生排名及其考试成绩1

(9)按姓名查询学生排名及其考试成绩1

(10)按优秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比1

(11)输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分1

(12)将每个学生的记录信息写入文件1

(13)从文件中读出每个学生的记录信息并显示1

1.2功能需求分析1

2系统设计3

2.1数据结构设计3

2.2函数设计与说明3

2.3菜单设计3

2.4文件清单与说明4

3系统实现5

3.1管理系统菜单5

3.2学生成绩排名5

3.3学生成绩统计9

4测试数据与测试过程记录10

4.1菜单测试10

4.2系统功能测试13

4.2.1管理系统菜单13

4.2.2输入学生信息14

录入每个学生的学号、姓名和各科考试成绩14

4.2.3计算总分和平均分14

计算每门课程的总分和平均分测试14

计算每个学生的总分和平均分测试15

4.2.4学生成绩排名16

按每个学生总分由高到低排名16

按每个学生总分由低到高排名16

按学号由大到小排名17

按姓名的在字典顺序排名18

4.2.5查询学生成绩18

按学号查询学生排名及其考试成绩测试18

按姓名查询学生排名及其考试成绩测试19

4.2.6学生成绩统计20

各等级学生的百分比20

4.2.6学生信息的输入输出20

输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分测试20

将每个学生的记录信息写入文件测试21

从文件中读出每个学生的记录信息并显示测试22

5课程设计遇到的问题及解决方法22

6课程设计总结23

参考文献23

附录源代码23

1课题分析

1.1问题描述

某班有最多不超过30人(具体人数键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。

学生成绩管理系统是一个非常实用的程序,如果能够把用户输入的数据存盘,下次运行时读出,就更有用了。

编程实现如下菜单驱动的学生成绩管理系统

(1)录入每个学生的学号、姓名和各科考试成绩

(2)计算每门课程的总分和平均分

(3)计算每个学生的总分和平均分

(4)按每个学生的总分由高到低排出名次表

(5)按每个学生的总分由低到高排出名次表

(6)按学号由小到大排出成绩表

(7)按姓名的字典顺序排出成绩表

(8)按学号查询学生排名及其考试成绩

(9)按姓名查询学生排名及其考试成绩

(10)按优秀(90-100)、良好(89-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比

(11)输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分

(12)将每个学生的记录信息写入文件

(13)从文件中读出每个学生的记录信息并显示

1.2功能需求分析

图1系统功能模块图

表1.2.1

2系统设计

2.1数据结构设计

系统处理的数据主要是学生信息,由C语言数据体表示

structstudent

{

charname[NUM_N];//学生姓名

intscore[SCORE_N];//学生成绩(物理数学英语)

floataverstudent;//平均成绩

}STUDENT;

2.2函数设计与说明

序号

函数原型

功能说明

1

intInput()

输入学生信息

2

voidPrint()

输出学生信息

3

voidSum()

计算学生总成绩

4

voidAverage()

计算学生平均成绩

5

voidHigh()

按每个学生的总分由高到低排出名次表

6

voidDown()

按每个学生的总分由低到高排出名次表

7

voidScore()

将学生成绩由小到大排序

8

voidSortString()

按姓名的字典顺序排出成绩表

9

intRefernum()

按学号查询学生排名及其考试成绩

10

intRefername()

按姓名查询学生排名及其考试成绩

11

voidCount()

对每门课程分别统计每个类别的人数以及所占的百分比

12

voidWritetofile()

将每个学生的记录信息写入文件

13

voidReadfromfile()

从文件中读出每个学生的记录信息并显示

表2.3.1函数列表

2.3菜单设计

采用二级菜单设计,为保证程序有效性,先选择1项录入学生各项信息,再进入其他功能选择。

2.4文件清单与说明

序号

程序文件名

文件说明

1

16.c

主程序文件

2

Student.txt

存储学生信息的文本文件

表2.5.1

3系统实现

3.1管理系统菜单

进入菜单选择界面,进行成绩单录入和各项功能的选择

3.2学生成绩排名

按每个学生的总分由高到低排出名次表

进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。

再应用比较语句进行比较总分大小,按照从高到低进行输出显示

N

Y

按每个学生的总分由低到高排出名次表

进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。

再应用比较语句进行比较总分大小,按照从低到高进行输出显示

N

Y

按学号由小到大排出名次表

进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。

再应用比较语句进行比较学号大小,按照学号从小到大进行输出显示

N

Y

按姓名的在字典顺序排出成绩表

进入菜单后选择该功能,用循环语句计算出存储在不同结构体中每个学生各科的分数之和即为总分。

再应用比较语句进行比较姓名在字典顺序,按照姓名在字典顺序进行输出显示

N

Y

3.3学生成绩统计

进入菜单后选择该功能,用switch语句进行各项等级累加,在将各项累加的数量处于总人数算出百分比,输出显示

 

N

Y

4测试数据与测试过程记录

4.1菜单测试

进入菜单选择,可以有多项选择,选择录入学生信息后进行其他从菜单功能的选择进行该项功能。

进行完此项功能后有选择是否继续的功能,可以进行选择继续返回主菜单在进行其他功能的选择。

图4.1.1

图4.1.2

图4.1.3

图4.1.4

图4.2.5

4.2系统功能测试

4.2.1管理系统菜单

进入菜单选择界面,选择想要执行的功能

图4.2.1

录入每个学生的学号、姓名和各科考试成绩

先选择1进入录入信息界面,再按要求输入总人数,然后根据弹出的格式依次输入学生信息,按回车结束输入后可选择是否继续进行其他功能。

图4.2.2

4.2.3计算总分和平均分

计算每门课程的总分和平均分测试

输入成绩后,在菜单界面选择计算成绩功能进入二级菜单,选择计算每门课程的总分和平均分,则功能完成,然后可选择是否继续实现其他功能。

计算每个学生的总分和平均分测试

输入成绩后,在菜单界面选择计算成绩功能进入二级菜单,选择计算每个学生的总分和平均分,则功能完成,然后可选择是否继续实现其他功能。

4.2.4学生成绩排名

按每个学生总分由高到低排名

先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续

图4.2.4.1

按每个学生总分由低到高排名

先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续

图4.2.4.2

按学号由大到小排名

先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续

图4.2.4.3

按姓名的在字典顺序排名

先输入学生信息,在一级菜单选择排名,在二级菜单选择该功能,可以选择是否继续

图4.2.4.4

4.2.5查询学生成绩

按学号查询学生排名及其考试成绩测试

输入成绩后,在菜单界面选择查询功能进入二级菜单,选择按学号查询学生排名及其考试成绩,输入要查询的学号,则功能完成,然后可选择是否继续实现其他功能。

按姓名查询学生排名及其考试成绩测试

输入成绩后,在菜单界面选择查询功能进入二级菜单,选择按姓名查询学生排名及其考试成绩,输入要查询的姓名,则功能完成,然后可选择是否继续实现其他功能。

4.2.6学生成绩统计

各等级学生的百分比

先输入学生信息,在一级菜单选择统计进入该功能,可以选择是否继续

图4.2.6

输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分测试

输入学生个人信息后,进入菜单选择界面,选择菜单代码1,则完成此功能。

选择是否继续,进行其他操作。

将每个学生的记录信息写入文件测试

输入学生个人信息后,进入菜单选择界面,选择菜单代码2,则完成此功能。

选择是否继续,进行其他操作。

从文件中读出每个学生的记录信息并显示测试

输入学生个人信息后,进入菜单选择界面,选择菜单代码3,则完成此功能。

选择是否继续,进行其他操作。

5课程设计遇到的问题及解决方法

(1)在建立二级菜单是定义错误

问题内容:

在switch选择语句中定义变量,导致程序出错;

问题分析:

switch选择语句中不能定义变量;

解决方法:

重新定义变量在switch选择语句前,同时修改二级菜单选择的变量与一级菜单选择的变量不同。

(2)输出统计成绩百分比时错误

问题内容:

将第一门成绩输出错误,而后面课程的成绩百分比变为前一门成绩的百分比

问题分析:

学生成绩与学号的混淆,系统错将学号为学生成绩;

解决方法:

修改学生成绩的输出方式,将循环输出是定义的j=0改为j=1,输出的j<3改为j<4。

6课程设计总结

在结束了一个学年的C语言学习后,在下学期结束后我们迎来了为期一周的C语言程序设计的实训,尝试去编辑一个比以前复杂而且较长的程序。

在和同学讨论、分工合作,终于做出了这个让我们满意的成果。

短短的一个星期的设计让我有了和以前的不一样的感受。

以前做的程序短小而且内容少,就一两个知识点。

而这次的程序整整结合一个学年所学到知识,要在其中选择最好最方便的方法。

通过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。

不过,通过几天的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。

对于这次的实训,我有很大的收获,对于C语言有了更深度的了解,平时在课堂上学习的理论知识可以转化为一些实际的技能。

但一个程序出错时,会去仔细的观察,思考,找出程序的错误点并修改;但程序成功运行时会有一种自豪感。

通过短短的几天,我认识到了我以前学习的不足之处,处在的问题,在老师和同学的帮助下去改正。

我相信这将是我学习C语言中的一个里程碑,它将促进我以后的学习。

参考文献

1.吉顺如,陶恂,曾祥绪.C程序设计教程与实验.清华大学出版社.2011

2.吉顺如,计春雷.C程序设计习题集与课程设计指导.电子工业出版社.2012

3.程序设计语言.XX百科.

附录源代码

#include

#include

#include

#defineNUM_N30

#defineN100

#defineSCORE_N7

#defineCOURSE_N6

typedefstructstudent/*声明一个结构体模板STUDENT*/

{

charname[NUM_N];

intscore[SCORE_N];

floataverstudent;

}STUDENT;

intInput(STUDENTstu[],intn);/*函数原型声明*/

intRefernum(STUDENTstu[],intn);

intRefername(STUDENTstu[],intn);

voidPrint(STUDENTstu[],intn);

voidHigh(STUDENTstu[],STUDENTb[],intn);

voidDown(STUDENTstu[],STUDENTb[],intn);

voidScore(STUDENTstu[],STUDENTb[],intn);

voidSortString(STUDENTstu[],STUDENTb[],intn);

voidSum(STUDENTstu[],intn,intcoursesum[]);

voidCount(STUDENTstu[],intn);

voidPrintf(STUDENTstu[],intn,floatavercourse[],intcoursesum[]);

voidAverage(STUDENTstu[],intn,floatavercourse[],intcoursesum[]);

voidWritetofile(STUDENTstu[],FILE*fp,intn);

voidReadfromfile(FILE*fp,intn);

voidmain()

{

intcoursesum[COURSE_N]={0},count[NUM_N][COURSE_N]={0};

floatavercourse[NUM_N];

inti,j,p,n,op,r=0,m;

charanswer='Y';

FILE*fp;

STUDENTstu[NUM_N];

STUDENTb[NUM_N];

menu:

;

system("cls");

printf("*欢迎使用学生成绩管理系统*\n");

printf("\n");

printf("欢迎使用如下菜单\n");

printf("\n");

printf("1.录入每个学生的学号、姓名、各科考试成绩\n");

printf("2.计算成绩\n");

printf("3.排名\n");

printf("4.查询\n");

printf("5.统计\n");

printf("6.输入输出\n");

printf("0.退出\n");

printf("\n");

choose:

;

printf("请输入你的选择:

\n");

scanf("%d",&op);

if(op!

=1&&op!

=13&&r==0)

{

printf("请先输入学号、姓名、各科成绩!

");

r++;

gotochoose;

}

else

{

r++;

gotostart;

}

do{

answer='N';

printf("请输入你的选择:

\n");

scanf("%d",&op);

start:

;

switch(op)

{

case1:

n=Input(stu,n);break;/*调用Input函数*/

case2:

printf("1.计算每门课程的总分和平均分\n");

printf("2.计算每个学生的总分和平均分\n");

printf("请输入你的选择:

\n");

scanf("%d",&m);

switch(m)

{

case1:

printf("计算每门课程的总分和平均分\n");/*调用Sum和Average函数*/

Sum(stu,n,coursesum);

for(i=0;i<3;i++)

printf("课程[%d]总分=%d\n",i,coursesum[i]);

Average(stu,n,avercourse,coursesum);

for(i=0;i<3;i++)

printf("课程[%d]平均分=%f\n",i,avercourse[i]);

break;

case2:

printf("计算每个学生的总分和平均分\n");/*调用Sum和Average函数*/

Sum(stu,n,coursesum);

for(i=0;i

printf("学生%d总分=%d\n",i+1,stu[i].score[4]);

Average(stu,n,avercourse,coursesum);

for(i=0;i

printf("学生%d平均分=%f\n",i+1,stu[i].averstudent);

break;

}

break;

case3:

printf("1.按每个学生的总分由高到低排出名次表\n");

printf("2.按每个学生的总分由低到高排出名次表\n");

printf("3.按学号由小到大排出成绩表\n");

printf("4.按姓名的字典顺序排出成绩表\n");

printf("请输入你的选择:

\n");

scanf("%d",&m);

switch(m)

{

case1:

printf("按每个学生的总分由高到低排出名次表\n");/*调用Sum、High函数*/

Sum(stu,n,coursesum);

High(stu,b,n);

Print(stu,n);

break;

case2:

printf("按每个学生的总分由低到高排出名次表\n");/*调用Sum、Down函数*/

Sum(stu,n,coursesum);

Down(stu,b,n);

Print(stu,n);

break;

case3:

printf("按学号由小到大排出成绩表\n");/*调用Score函数*/

Score(stu,b,n);

Print(stu,n);

break;

case4:

printf("按姓名的字典顺序排出成绩表\n");/*调用Sum、SortString函数*/

Sum(stu,n,coursesum);

SortString(stu,b,n);

printf("姓名学号物理数学英语总分\n");

for(i=0;i

{

puts(stu[i].name);

for(j=0;j<5;j++)

{

printf("%6ld",stu[i].score[j]);

}

printf("\n");

}

break;

}

break;

case4:

printf("1.按学号查询学生排名及其考试成绩\n");

printf("2.按姓名查询学生排名及其考试成绩\n");

printf("请输入你的选择:

\n");

scanf("%d",&m);

switch(m)

{

case1:

Sum(stu,n,coursesum);/*调用Sum、High和Refernum函数*/

High(stu,b,n);

printf("按学号查询学生排名及其考试成绩\n");

i=Refernum(stu,n);

if(i!

=-1)

{

printf("姓名学号物理数学英语总分名次\n");

for(j=0;j<5;j++)

printf("%6ld",stu[i].score[j]);

printf("%6ld\n",i+1);

}

elseprintf("查无此人\n");

break;

case2:

printf("按姓名查询学生排名及其考试成绩\n");/*调用Sum、High和Refername函数*/

Sum(stu,n,coursesum);

High(stu,b,n);

i=Refername(stu,n);

if(i!

=-1)

{

printf("姓名学号物理数学英语总分名次\n");

printf("%s",stu[i].name);

for(j=0;j<5;j++)

printf("%6ld",stu[i].score[j]);

printf("%6ld\n",i+1);

}

elseprintf("查无此人\n");

break;

}

break;

case5:

printf("按优秀、良好、中等、及格、不及格对每门课程分别统计人数及其所占百分比\n");/*调用Count函数*/

Count(stu,n);

break;

case6:

printf("1.输出每个学生的学号、姓名、各科考试成绩,每门课程的总分和平均分\n");

printf("2.将每个学生的记录信息写入文件\n");

printf("3.文件中读出每个学生的记录信息并显示\n");

printf("请输入你的选择:

\n");

scanf("%d",&m);

switch(m)

{

case1:

printf("输出每个学生的学号、姓名、各科考试成绩,每门课程的总分和平均分\n");/*调用Sum、Average函数*/

Sum(stu,n,coursesum);

Average(stu,n,avercourse,coursesum);

Printf(stu,n,avercourse,coursesum);

break;

case2:

pri

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1