课设报告班级成绩管理系统.docx

上传人:b****5 文档编号:3429863 上传时间:2022-11-23 格式:DOCX 页数:24 大小:178.31KB
下载 相关 举报
课设报告班级成绩管理系统.docx_第1页
第1页 / 共24页
课设报告班级成绩管理系统.docx_第2页
第2页 / 共24页
课设报告班级成绩管理系统.docx_第3页
第3页 / 共24页
课设报告班级成绩管理系统.docx_第4页
第4页 / 共24页
课设报告班级成绩管理系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

课设报告班级成绩管理系统.docx

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

课设报告班级成绩管理系统.docx

课设报告班级成绩管理系统

课程设计报告

课程名称《C语言程序设计》

课题名称班级成绩管理系统

专业信息管理与信息系统

班级

学号

姓名

指导教师

2011年6月22日

 

湖南工程学院

课程设计任务书

课程名称《C语言程序设》

课题班级成绩管理系统

专业班级

学生姓名

学号

指导老师

审批

 

任务书下达日期2011年6月4日

任务完成日期2011年6月22日

一、设计内容与设计要求

1.课程设计目的

全面熟悉、掌握C语言基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为后继课程(数据结构和数据库等课程)的实验以及课程设计打下较扎实的基础。

2.课题题目

⑴班级成绩管理系统

⑵班级档案管理系统

⑶飞机订票系统

⑷猜数字游戏

⑸电子英汉词典设计

⑹通讯录管理系统

3.设计要求

(1)掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。

具体要求如下:

设计课题题目:

每位同学根据自己学号除以6所得的余数加一选择相应题号的课题。

原则上不予换提,私自换题者不记成绩。

(2)根据自己对应的课题完成以下主要工作:

①完成系统需求分析:

包括系统设计目的与意义;系统功能需求;输入输出的要求。

②完成系统概要设计:

程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

③完成系统详细设计:

包括采用C语言定义相关的数据类型;写出各模块的类C码算法;画出函数的调用关系图。

④调试分析、设计体会、测试数据:

准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果;程序调试中遇到的问题以及解决问题的方法;课程设计过程经验教训、心得体会。

⑤关键源程序(带注释)

⑶按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。

⑷不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。

二、进度安排

第17周星期一8时:

00分——11时:

30分

星期二8时:

00分——11时:

30分

星期四8时:

00分——11时:

30分

星期五8时:

00分——11时:

30分

第18周星期一8时:

00分——11时:

30分

第18周星期二14时:

30分——18时:

00分

 

目录

1.系统需求分析1

1.1问题描述1

1.2功能需求1

1.3算法提示:

1

1.4测试数据:

2

1.5其它2

2.概要设计2

2.1程序的模块组成2

2.2各模块的功能2

3.详细设计3

3.1采用C语言定义相关的数据类型3

3.2显示主界面的函数4

3.3成绩录入函数5

3.4成绩显示函数5

3.5成绩保存函数5

3.6成绩排序函数6

3.7成绩修改函数6

3.8成绩统计函数7

4.系统调试8

4.1函数关系调用图8

4.2程序中出现的问题及解决方法9

5.运行结果10

5.1主界面、成绩录入10

5.2成绩显示、保存11

5.3成绩排序12

5.4成绩修改以及修改后保存13

5.5成绩统计14

6.心得体会15

7.附录16

7.1源代码16

7.2参考文献22

8评分表23

1.系统需求分析

1.1问题描述

对一个有N个学生的班级,每个学生有M门课程。

该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

1.2功能需求

(1)本系统采用一个结构体数组,每个数据的结构应当包括:

学号、姓名、M门课程名称。

(2)本系统显示这样的菜单:

请选择系统功能项:

a、成绩录入

b、成绩显示

c、成绩保存

d、成绩排序

e、成绩修改(要求先输入密码)

f、成绩统计

(1)显示每门课程成绩最高的学生的基本信息

(2)显示每门课程的平均成绩

(3)显示超过某门课程平均成绩的学生人数

g、退出系统

(3)执行一个具体的功能之后,程序将重新显示菜单。

(4)将学生成绩保存到文件中。

1.3算法提示:

1、数据结构:

结构体类型数组。

2、数据库结构:

下表构成该系统的基本数据库。

姓名学号课程名称1课程名称2●●●●●●

charCharfloatfloat

1.4测试数据:

学生人数N=10

课程门数M=4

课程名:

数学、语文、英语、政治

1.5其它

对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。

 

2.概要设计

2.1程序的模块组成

整个系统除了主函数外,另外还有7个函数,实现七大功能:

成绩录入功能、成绩显示功能、成绩保存功能、成绩排序功能、成绩修改功能、成绩统计功能、退出系统功能。

2.2各模块的功能

(1)主函数main()

利用while()输出函数主界面和swithch()实现选择函数以及各函数的调用,系统根据输入的数字选项来调用相应的函数。

a、主界面函数利用while(xz)语句,只要输入的xz!

=0,就会输出主界面。

b、菜单选择函数

用switch(XZ)开关语句,进入“功能选择”的界面,在这个界面里有显示系统的七大功能,当XZ=?

时,根据每个功能前面的序号(XZ=)进行选择。

等执行完每一个函数功能后,返回菜单。

(2)成绩录入函数(xxlr)

voidxxlr(structstudentstu[],intn)实现对每个学生学号,姓名,四门课程的成绩,总成绩,平均成绩的录入。

(3)成绩显示函数(xxxs)

voidxxxs(structstudentstu[],intn)实现对每个学生的学生信息的输出。

(4)成绩保存函数(xxbc)

voidxxbc(structstudentstu[],intn)实现对输入的信息保存在c\\student.txt中,并且能从中读取学生的信息。

(5)成绩排序函数(xxpx)

voidxxpx(structstudentstu[],intn)实现对学生总成绩的从大到小的排序。

(6)成绩修改函数(xxxg)

voidxxxg(structstudentstu[],intn)实现对几个学生信息修改,再次选择xz=3,4可将修改的程序重新保存。

(7)成绩统计函数(xxtj)

voidxxtj(structstudentstu[],intn)实现以下三个分功能:

a、每门课程成绩最高的学生信息;

b、每门课程的平均成绩;

c、显示超过某门课程平均成绩的人数。

(8)退出系统函数

用if语句表示if(xz=0)break;即选择0时就表示退出系统了。

3.详细设计

3.1采用C语言定义相关的数据类型

对要输入的学生信息采用结构体数组的形式,这样既方便又明了,而且也使我自己对这种方式的表达更加熟悉。

Structstudent//结构体数组关于学生的信息

{charnum[11];

charname[10];

floatscore[4];

floattotal;

floataver;

}stu[11];

本程序对要定义的学生信息中不同的信息采用了不同的数据类型,例如:

在对学生的学号和名称用字符型(charnum[11];charname[10];),在对学生的四门成绩,总成绩和平均成绩采用浮点型(floatscore[4];floattotal;floataver;)。

并且对后文程序中要定义的采用了相对应的类型(inti,j;)。

3.2显示主界面的函数

用while()语句实现,如:

while

(1)

{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");

printf("choose1,2,3,4,5,6,0:

\n");

}

只要括号中的数不为0,就输出主界面。

3.3成绩录入函数

inti;

for(i=0;i

{printf("输入学号姓名:

\n");

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

printf("\n数学成绩,语文成绩,英语成绩,政治成绩\n");

scanf("%f,%f,%f,%f",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);

}

利用循环语句,分别对每个学生的信息进行录入

3.4成绩显示函数

{inti;

printf("\n学生信息:

学号姓名数学成绩语文成绩英语成绩政治成绩总成绩平均成绩\n");

for(i=0;i

printf("\n");

}

和3.3一样,只是让成绩整体输出,在屏幕上显现出来而已。

3.5成绩保存函数

fp=fopen("c:

\\student.txt","w");先定义一个文件fp,把要输入的信息保存在c:

\\student.txt中。

for(i=0;i

{

fprintf(fp,"\n%s,%s,%f,%f,%f,%f,%f,%f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].total,stu[i].aver);

}

fclose(fp);用fprintf语句使信息输入到文件中,并保存。

fp=fopen("c:

\\student.txt","r");

for(i=0;i

{

fscanf(fp,"\n%[^,]%[^,]%f,%f,%f,%f,%f,%f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].total,stu[i].aver);}

再次用只读的形式打开文件,在fscanf语句后再用printf输出学生信息。

3.6成绩排序函数

structstudentt;//定义结构体变量,用于下面的交换

for(i=0;i

{for(j=i+1;j

if(stu[j].total>stu[i].total)

{t=stu[j];

stu[j]=stu[i];

stu[i]=t;

}

}用选择法的方式将总成绩最高的学生放在最前面,实现从大到小的排序。

3.7成绩修改函数

首先对密码的设置,用语句if(strcmp(pass,password)==0),如果正确就进行下步操作。

输入要修改的学生学号,gets(no);再次进行stu[i].num和no的比较if(strcmp(stu[i].num,no)==0),就对此学生的成绩进行修改,并输出。

3.8成绩统计函数

此函数对三个进行统计:

(1)for(j=0;j<4;j++)

{max=stu[0].score[j];//先赋初值

k=0;//k表示第k+1个学生

for(i=0;i

if(stu[i].score[j]>max)

{max=stu[i].score[j];

k=i;

}这样就得到了每门课成绩最高分的学生,然后在输出他的全部信息。

(2)for(j=0;j<4;j++)

{sum=0;

for(i=0;i

sum=sum+stu[i].score[j];

aver_cour[j]=sum/n;

printf("第%d门课,课程的平均成绩为%f\n",j+1,aver_cour[j]);

}对每门课程求取平均分。

(3)for(j=0;j<4;j++)

{k=0;//k表示超过某门课平均成绩的人数

for(i=0;i

if(stu[i].score[j]>aver_cour[j])

k++;

printf("第%d门课有%d个同学超过平均分\n",j+1,k);

}实现了计算超过某门课平均成绩的人数。

总之,在一个函数中,用三个循环语句就实现了所要求的。

4.系统调试

4.1函数关系调用图

4.2程序中出现的问题及解决方法

(1)在信息保存在文件中的时候,未使用恰当的输入输出语句,应将printf语句改为fprintf语句,将scanf语句改为fscanf语句,才解决了学生信息可在我保存的c\\student.txt中显示出来,而不是一些乱码。

(2)在排序的时候,没有定义结构体变量(structstudentt),而是定义为float型(floatt),以至于成绩交换没有实现(t=stu[i].total;stu[i].total=stu[i+1].total;stu[i+1].total=t;)在我改变这一个小小的地方后,这个子函数就可以正常运行了。

(3)在求平均成绩时,aver_cour[j]=sum/n;因for循环语句中n的值没弄清,一下就出现了错误。

(4)在if语句中,将数组的比较和值得比较弄混了:

如:

charpass[10],password[10];

if(stracmp(pass,password)=0)

printf("请输入要修改的学生信息的学号");

只有用上面的if语句而不是if(pass=password)才能输出正确的结果。

(5)在下面的语句中,scanf("%s%s\n",stu[i].num,stu[i].name);这条语句是错误的。

因为scanf语句是从电脑键盘上输入,不能直接输入换行符(\n)。

scanf语句有严格的格式要求,你只能按照它的输出要求来办。

另外,输入数据时,企图规定精度。

scanf("%7.2f",&a);这样做是不合法的,输入数据时不能规定精度。

再者,在不应加地址运算符&的位置加了地址运算符,scanf("%s",&str);

C语言编译系统对数组名的处理是:

数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。

应改为:

scanf("%s",str);

(6)switch语句中,每一个case之后又应有一个berak;,但最后一个应没有。

就是由于漏写了break语句,case只起标号的作用,而不起判断作用。

5.运行结果

5.1主界面、成绩录入

5.1-主界面显示图

5.2成绩录入

5.1-成绩录入图

5.3成绩显示、保存

5.3-成绩显示,保存显示图

在显示和保存界面中,出现的是一样的,只是保存的时候在c\\student.txt中可以体现出来。

5.4成绩排序

5.4-成绩排序显示图

5.5成绩修改以及修改后保存

5.5-成绩修改及保存后的显示图

5.6成绩统计

5.6-成绩统计显示图

图中包括

(1)每门课成绩最高分的学生信息;

(2)每门课的平均分;

(3)超过某门课程平均分的人数。

 

6.心得体会

回顾起此次课程设计,至今我仍感慨颇多,的确,从拿到题目到完成整个编程这短短的一个多星期内,从理论到实践的转变,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,而且更加锻炼了我的动手能力以及串联知识和思维的转换能力。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……当然,在最后完成的程序中,有许多模块是借鉴的,毕竟我还是处于初学者阶段,离高手还有很多路要走,但是我不会灰心的。

通过这次课程设计之后,我了解到设计程序也并非想象中的那么复杂,只要多花点功夫就会有收获,其实很多内容都是老师上课时就讲了的,但我们就是没有用心,缺少了那么一点灵动,所以,我们除了要扎实的学好基础知识之外,那一点点小聪明还是必要的。

此外,在不懂得的知识方面,应该及时向老师提出问题或者跟同学一起讨论,以求能得出结论,不要不懂装懂。

本次课程设计结束了,对于我的影响很大。

我通过这次实践学到了许多知识,学到了设计一个简单的系统,要注意哪些方面,也使我知道自己哪些方面做得还不够。

但我出总结出了一点点的经验如下:

(1)要对系统的功能和要求做出详细的分析,并合理分解任务。

(2)把分解出来的子任务,做给一个相对独立的模块。

(3)在设计一个模块之前,要简单构想一下总界面的显视情况。

(4)针对构想出来的界面进行程序的编写。

(5)对整体和细节方面都要考虑全面,不忽视每一个小地方。

最后,感谢老师您对我的指导和从百忙中抽空看我的设计,谢谢!

7.附录

7.1源代码

#include

#include

#include

voidlr(structstudentstu[],intn);//成绩录入

voidxs(structstudentstu[],intn);//成绩显示

voidbc(structstudentstu[],intn);//成绩保存

voidpx(structstudentstu[],intn);//成绩排序

voidxg(structstudentstu[],intn);//成绩修改

voidtj(structstudentstu[],intn);//成绩统计

voidtc(structstudentstu[],intn);//退出系统

structstudent

{charnum[11];

charname[16];

floatscore[4];

floattotal;

floataver;

}stu[11];

voidmain()

{

intxz,n;

printf("输入学生数:

");

scanf("%d",&n);

while

(1)

{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");

printf("choose1,2,3,4,5,6,0:

\n");

scanf("%d",&xz);

switch(xz)

{case1:

lr(stu,n);break;

case2:

xs(stu,n);break;

case3:

bc(stu,n);break;

case4:

px(stu,n);break;

case5:

xg(stu,n);break;

case6:

tj(stu,n);break;

case0:

break;

default:

printf("enterdataerror!

\n");

}

if(xz==0)break;

}

}

//*1.学生成绩录入程序(xxlr.c)*//

voidlr(structstudentstu[],intn)

{inti;

for(i=0;i

{printf("输入学号姓名:

\n");

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

printf("\n数学成绩,语文成绩,英语成绩,政治成绩\n");

scanf("%f,%f,%f,%f",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);

stu[i].total=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];

stu[i].aver=stu[i].total/4;

}

}

//*2.学生成绩显示程序(xxxs.c)*//

voidxs(structstudentstu[],intn)

{inti;

printf("\n学生信息:

学号姓名数学成绩语文成绩英语成绩政治成绩总成绩平均成绩\n");

for(i=0;i

printf("\n%s,%s,%f,%f,%f,%f,%f,%f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].total,stu[i]

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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