资源描述
课程设计汇报书
学生成绩管理系统
单 位: 分院
班 级:
学 号:
姓 名:
指导老师:
完成日期:7月14日
内容摘要
摘要:此次课程设计课题是学生成绩管理系统,本文介绍课程设计课题选题意义,说明了本系统提供关键功效,对设计思绪、功效模块、步骤图、功效模块、中心算法进行了具体说明,并画出步骤框图。本文提供了完整源程序代码,并展示了系统使用和运行效果。最终给出了在小学期高级语言程序设计过程中总结,其中包含本程序独特设计,作者设计收获、设计中碰到困难和问题,和作者对设计题目及功效改善意见,查阅参考文件等方面内容。
索引关键字
关键词:源程序代码,学生成绩管理,步骤框图
内容目录
1 题目要求------------------------------------4
1.1 内容要求--------------------------------------------------4
1.2 设计要求--------------------------------------------------4
2 设计思想------------------------------------5
3 功效模块及步骤图----------------------------5
4 数据结构------------------------------------7
5 中心算法代码说明----------------------------7
6 系统实现------------------------------------8
6.1 程序代码-------------------------------------------------8
6.2 系统使用-------------------------------------------------21
6.3 运行效果说明---------------------------------------------21
7 总结---------------------------------------24
8 致谢词-------------------------------------25
9 参考文件-----------------------------------25
.正文
1题目要求
1.1内容要求
要求能够实现输入统计、查询统计、更新统计、统计统计、输出统计等功效。
1. 输入统计。对每个学生学号、姓名、班级、数学、英语、计算机成绩进行输入并存放,在程序运行过程中,数据存放能够采取结构体数组或链表,不过最终应该存放在文件中。
2. 维护统计。能够实现添加、删除、修改学生统计,不过一定要将最终数据存放到文件中。
3. 查询统计。依据班级、学号、科目等查询学生成绩。假如查询时学生数据并没有读入到结构体数组或链表中,则应该先从文件中读出数据并存放在结构体数组或链表中,然后在结构体数组或链表中查询满足条件数据。
4. 统计统计。完成对各门功课最高分和不及格人数统计。
1.2设计要求
①各级菜单及功效间必需建立必需联络,要定义参考完整性规则。
②使用二进制文件方法存放数据。
③要求有菜单界面,结果显示时应达成界面友好。
④将完成全部内容连编成一个.exe文件。
。
2设计思想
1.在设计时考虑以下多个方面:
操作简单。因为使用者多为非计算机专业人员,所以该系统要求设计界面美观,操作方便。要充足考软件界面友好和操作方便,便愈使用人员快速上手。
易于维护。一个软件好坏,关键在于产品可靠,稳定,便于维护。
2.开发语言选择
针对世界上流行大量软件和开发工具,经过认真分析其优缺点,结合现在软硬件开发环境,选择微软WINDOWS平台下Visual C++作为软件开发工具。选择工含有几下几方面优点:
① C语言简练、紧凑、使用方便、灵活。有32个关键字。C语言程序比其它很多高级语言简练,源程序短,所以输入程序时工作量小。
② 运算符丰富。
③ 数据类型丰富,含有现代语言多种数据结构。
④ C语言是完全模块化和结构化语言。用函数作为程序模块单位,便于实现程序模块化。
⑤ 语法限制不太严格,程序设计自由度大。
⑥ 生成目标代码质量高,程序实施效率高。
⑦ 用C语言编写程序可移植性好。
总而言之,Visual C++能够满足学生成绩管理要求,所以用来开发学生成绩管理系统是很适宜。
3功效模块及步骤图
学生成绩管理系统对学校加强学生基础情况及学生成绩管理有着关键作用。为了能使该系统含有更为广泛功效:应该将该系统细分为学生操作系统、老师操作系统、教务处操作系统,以满足不一样身份人需求。总体来说,该系统应分为输入模块、维护模块、查询模块和统计模块。
因为本软件为学校中多个身份人定制开发。我们经过反复论证,最终确定了学生成绩管理系统设计方案,关键步骤图以下所表示:
系统主菜单
学生操作
老师操作
教务处操作
查询功效
录入功效
删除功效
修改功效
查询功效
查询功效
统计功效
统计功效
按班级
按学号
按科目
按班级
按学号
按科目
按班级
按学号
按科目
数学
英语
计算机
数学
英语
计算机
数学
英语
计算机
经过系统主菜单,能够使学校中不一样身份人选择不一样操作系统,从而合理使用不一样功效。
4数据结构
结构体 :
程序设计中用到结构体类型:
学生信息结构体类型:
struct student
{
int num;
char nam[20];
char clas[20];
float math;
float english;
float computer;
}stu[SIZE];
5中心算法代码说明说明
1. void save()
{
FILE *fp;
int j;
if((fp=fopen("stu_list","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(j=0;j<SIZE;j++)
if(fwrite(&stu[j],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
以上代码将数据存入文件中,操作起来避免了直接对内存进行操作,可对文件进行操作。
2. for(i=0;i<SIZE;i++)
for(j=0;j<SIZE-i;j++)
{ if(stu[i].math>stu[i+1].math)
{
t=stu[i].math;
stu[i].math=stu[i+1].math;
stu[i+1].math=t;
}
}
for(j=0,i=0;i<SIZE;i++)
{ if(stu[i].math<60)
j=j+1;
}
统计函数中使用起泡法排序再统计方法
6.系统实现
6.1 程序代码
代码以下:
#include <stdio.h>
#include <string.h>
#define SIZE 34
struct student
{
int num;
char nam[20];
char clas[20];
float math;
float english;
float computer;
}stu[SIZE];
void save() /*将数据储存于文件*/
{
FILE *fp;
int j;
if((fp=fopen("stu_list","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for(j=0;j<SIZE;j++)
if(fwrite(&stu[j],sizeof(struct student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
search(int n) /*查询学号函数*/
{ int j;
for(j=0;j<SIZE;j++)
if(n==stu[j].num)
return j; /*将j值返回,经过search带回调用处*/
if(j>SIZE)
return -1;
}
void function1() /*添加统计*/
{
void xt2();
int i;
char k;
printf(" ****************************添加学生信息********************************\n");
for(i=0;i<SIZE;i++)
{
printf("请输入该生学号:\n");
scanf("%d",&stu[i].num);
printf("请输入该生姓名:\n");
scanf("%s",&stu[i].nam);
printf("请输入该生所在班级:\n");
scanf("%s",&stu[i].clas);
printf("请输入该生数学成绩:\n");
scanf("%f",&stu[i].math);
printf("请输入该生英语成绩:\n");
scanf("%f",&stu[i].english);
printf("请输入该生计算机成绩:\n");
scanf("%f",&stu[i].computer);
getchar();
printf("完成此次操作!!!\n");
printf("是否返回上一菜单?y/n:\n");
k=getchar();
if(k=='n')
continue; /*判定*/
else
break;
}
save();
xt2();
}
void function2() /*删除学生统计*/
{
void xt2();
int i,j;
char a,k;
printf(" ****************************删除学生信息******************************\n");
printf("请输入要删除学生学号:\n");
scanf("%d",&i);
j=search(i);
if(j==-1)
{loop:printf("该学生不存在,请重新输入!\n");
printf("输入0退出\n");
for(j=0;j<SIZE;j++)
{
if(j==-1)
goto loop;
else break;
}
}
else
{for(i=0;i<SIZE;i++)
{printf("原数据为:\n");
printf("学号%d,姓名%s,班级%s,数学成绩%4.1f,英语成绩%4.1f,计算机成绩%4.1f\n",stu[j].num,stu[j].nam,stu[j].clas,stu[j].math,stu[j].english,stu[j].computer);
stu[j].num=0;
stu[j].nam[20]=0;
stu[j].clas[20]=0;
stu[j].math=0;
stu[j].english=0;
stu[j].computer=0;
printf("删除结果为\n");
printf("学号%d,姓名%s,班级%s,数学成绩%4.1f,英语成绩%4.1f,计算机成绩%4.1f\n",stu[j].num,stu[j].nam,stu[j].clas,stu[j].math,stu[j].english,stu[j].computer);
save();
printf("完成此次操作!!!\n");
k=getchar();
if(k=='y')
continue; /*判定*/
else
break;}
}
printf("是否返回主菜单y/n:\n");
scanf("%c",&a);
if(a=='y')
xt2();
else
function2();
}
void function3() /*修改*/
{ char name[20],phy[10];
void xt2();
printf("请输入要修改学生姓名:");
scanf("%s",name);
printf("\n");
int i;
float t;
for(i=0;i<SIZE;i++)
change:if(strcmp(stu[i].nam,name)==0)
{
printf("请输入要修改科目:");
scanf("%s",phy);
if(strcmp("math",phy)==0)
{
printf("输入成绩:");
scanf("%f",&t);
stu[i].math=t;
printf("成绩为:%4.2f\n",stu[i].math);
}
else if(strcmp("english",phy)==0)
{
printf("输入成绩:");
scanf("%f",&t);
stu[i].english=t;
printf("成绩为:%4.2f\n",stu[i].english);
}
else if(strcmp("computer",phy)==0)
{
printf("输入成绩:");
scanf("%f",&t);
stu[i].computer=t;
printf("成绩为:%4.2f\n",stu[i].computer);
}
else
{
printf("错误,请重新输入:");
goto change;}
}
save();
printf("完成此次操作!!!\n");
xt2();
}
void way1() /*按班级查询*/
{
void function4();
int i;
char clas[20];
char a;
loop:printf("请输入要查询学生班级:\n");
scanf("%s",clas);
for(i=0;i<SIZE;i++)
{
if(strcmp(clas,stu[i].clas)==0)
printf("学号%d,姓名%s,班级%s,数学成绩%f,英语成绩%f,计算机成绩%f\n",stu[i].num,stu[i].nam,stu[i].clas,stu[i].math,stu[i].english,stu[i].computer);
if(i==SIZE)
{printf("您所查询信息不存在,请重新输入");
goto loop;}
}
printf("完成此次操作!!!\n");
scanf("%c",&a);
if(a=='y')
way1();
else
function4();
}
void way2() /*按学号查询*/
{
void function4();
int i;
int number;
char a;
loop:printf("请输入要查询学生学号:\n");
scanf("%d",&number);
for(i=0;i<SIZE;i++)
{
if(number==stu[i].num)
printf("学号%d,姓名%s,班级%s,数学成绩%f,英语成绩%f,计算机成绩%f\n",stu[i].num,stu[i].nam,stu[i].clas,stu[i].math,stu[i].english,stu[i].computer);
if(i==SIZE)
{printf("您所查询信息不存在,请重新输入\n");
goto loop;}
}
printf("完成此次操作!!!\n");
scanf("%c",&a);
if(a=='y')
way2();
else
function4();
}
void check1() /*按学生数学成绩查询*/
{
void way3();
int i;
char a;
char name[20];
loop:printf("请输入要查询学生姓名\n");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{if(strcmp(name,stu[i].nam)==0)
printf("%s数学成绩是%f\n",name,stu[i].math);
}
printf("完成此次操作!!!\n");
scanf("%c",&a);
if(a=='y')
goto loop;
else
way3();
}
void check2() /*按学生英语成绩查询*/
{
void way3();
int i;
char a;
char name[20];
loop:printf("请输入要查询学生姓名\n");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{if(strcmp(name,stu[i].nam)==0)
printf("%s英语成绩是%f\n",name,stu[i].english);
}
printf("完成此次操作!!!\n");
scanf("%c",&a);
if(a=='y')
goto loop;
else
way3();
}
void check3() /*按学生计算机成绩查询*/
{
void way3();
int i;
char a;
char name[20];
printf("请输入要查询学生姓名\n");
scanf("%s",name);
for(i=0;i<SIZE;i++)
{if(strcmp(name,stu[i].nam)==0)
printf("%s计算机成绩是%f\n",name,stu[i].computer);
}
printf("完成此次操作!!!\n");
scanf("%c",&a);
if(a=='y')
check3();
else
way3();
}
void way3() /*按科目查询*/
{
void function4();
int check;
printf(" ***************************请输入要查询科目:**********************\n");
printf(" 1按学生数学成绩查询\n");
printf(" 2按学生英语成绩查询\n");
printf(" 3按学生计算机成绩查询\n");
printf(" 4.返回上一菜单\n");
printf("请选择:\n");
scanf("%d",&check);
switch(check)
{
case 1:check1();break;
case 2:check2();break;
case 3:check3();break;
case 4:function4();break;}
}
void function4() /*查询统计*/
{
void main();
int way;
printf(" **************************查询学生成绩********************************\n");
printf(" 1按班级查询\n");
printf(" 2按学号查询\n");
printf(" 3按科目查询\n");
printf(" 4返回主菜单\n");
printf(" **********************************************************************\n");
printf("请选择:\n");
scanf("%d",&way);
switch(way)
{
case 1:way1();break;
case 2:way2();break;
case 3:way3();break;
case 4:main();break;}
}
void function5() /*统计*/
{
void main();
char phy[10];
int a;
printf("请输入要统计科目:");
shuru:scanf("%s",phy);
if(strcmp("math",phy)==0)
{
int i,j;
float t;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE-i;j++)
{ if(stu[i].math>stu[i+1].math)
{
t=stu[i].math;
stu[i].math=stu[i+1].math;
stu[i+1].math=t;
}
}
for(j=0,i=0;i<SIZE;i++)
{{ if(stu[i].math<60)
j=j+1;
}}
printf("数学最高分为%4.1f,不及格人数为%d\n",stu[SIZE].math,j);
}
if(strcmp("english",phy)==0)
{
int i,j;
float t;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE-i;j++)
{ if(stu[i].english>stu[i+1].english)
{
t=stu[i].english;
stu[i].english=stu[i+1].english;
stu[i+1].english=t;
}
}
for(j=0,i=0;i<SIZE;i++)
{ if(stu[i].english<60)
{
j=j+1;
}
}
printf("英语最高分为%4.1f,不及格人数为%d\n",stu[SIZE].english,j);
}
if(strcmp("computer",phy)==0)
{
int i,j;
float t;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE-i;j++)
{ if(stu[i].computer>stu[i+1].computer)
{
t=stu[i].computer;
stu[i].computer=stu[i+1].computer;
stu[i+1].computer=t;
}
}
for(j=0,i=0;i<SIZE;i++)
if(stu[i].computer<60)
{
j=j+1;
}
printf("计算机最高分为%4.1f,不及格人数为%d\n",stu[SIZE].computer,j);
}
printf("1,继续统计\n");
printf("2,返回主菜单\n");
printf("请选择:\n");
scanf("%d",&a);
switch(a)
{
case 1:function5();break;
case 2:main();break;
}
}
void xt1()
{
void main();
printf(" ************************学生操作系统**********************************\n");
printf(" 1.查询统计\n");
printf(" 2.返回上一菜单\n");
printf(" **********************************************************************\n");
printf("\n");
int function;
printf("请输入要选择功效:");
scanf("%d",&function);
switch(function)
{
case 1:function4();break;
case 2:main();break;}
}
void xt2()
{
void main();
printf(" *************************老师操作系统**********************************\n");
printf(" 1.添加统计\n");
printf(" 2.删除统计\n");
printf(" 3.修改统计\n");
printf(" 4.查询统计\n");
printf(" 5.统计统计\n");
printf(" 6.返回上一菜单\n");
printf(" ***********************************************************************\n");
printf("\n");
int function;
printf("请输入要选择功效:");
scanf("%d",&function);
switch(function)
{
case 1:function1();break;
case 2:function2();break;
case 3:function3();break;
case 4:function4();break;
case 5:function5();break;
case 6:main();break;
}
}
void xt3()
{
void main();
printf(" **************************教务处操作系统*********************************\n");
printf(" 1.查询统计\n");
printf(" 2.统计统计\n");
printf(" 3.返回上一菜单\n");
printf(" *************************************************************************\n");
printf("\n");
int function;
printf("请输入要选择功效:");
scanf("%d",&function);
switch(function)
{
case 1:function4();break;
case 2:function5();break;
case 3:main();break;
}
}
void main()
{
int a;
printf(" ************************学生成绩管理系统***********************************\n");
printf("1.学生 2.老师 3.教务处\n");
printf(" ***************************************************************************\n");
printf("请选择运行身份:");
scanf("%d",&a);
if(a==1)
{xt1();}
if(a==2)
{xt2();}
if(a==3)
{xt3();}
}
6.2系统使用
①录入信息时,每一个项目全部必需输入对应内容,输入错误时,系统自动提供输入错误提醒,能够依据提醒重新输入。
②修改、增加、删除,查找统计前必需先打开一个文件修改完后必需记得保留信息。
6.3运行效果说明
主菜单:供使用人选择身份,进入对应管理系统。
添加学生信息:是老师能够录入添加学生信息。
查询功效:使使用人能够依据班级、学号、科目查询成绩。
删除功效:老师能够删除学生信息并储存。
修改功效:使老师能够依据学生姓名修改学生不一样科目标成绩。
统计功效:用来统计某科目在班级中最高分和不及格人数。
7.总结
经过此次C程序课程设计,我认为对自己提升很大:克服了懒惰,这在我以后学习和工作中心理定位和调整有很大帮助。我感受到了编程是一项很烦琐周密活动,她不仅需要一个人周密思索问题能力,处理问题能力,还需要有足够耐心和严谨治学作风,来不得半点马虎。
经过此次课程设计,我初步学会了程序设计基础方法,学会了怎样去借鉴她人方法和经验,知道怎样去查找资料和整合处理这些资料能力,这为以后大学毕业设计论文打下了一个初步基础使我收益最大是享受到了一个成功喜悦,在这九天之中从开始确实定课程设计题目,然后是上网和上图书馆查找资料,编写C语言原程序,然后是进行编译,这个步骤是一个很痛苦和艰苦,常常会因为一小点错误而在编译失败和再次修改漫漫循环之路中,但失败越多,对人考验就越多,在编译运行成功以后享受成功喜悦也就越多,另外在调试程序过程中不停思索和利用已经学到知识,这对于自己是有很大提升。
因为所学知识不多,自己编程经验不足,碰到了部分问题。比如:多个数据存放问题,返回上一菜单问题,未接收回车符而造成后面程序无法运行等问题,经过查询资料,小组讨论和向指导老师求援,我们顺利地处理了上述问题,从而积累了部分编程经验。
经过这几天地实践,发觉该管理系统存在升级空间,界面不是十分友好,这些方面有待完善。
8致谢辞
经过几天课程设计,我学会了很多东西。这次课程设计成功完成离不开同学和老师帮助。当自己在编程中碰到困难时候,有同学们共同商议,相互帮助,献计献策,使我能够比较分析多种方案,找出处理问题方法;当在课程设计过程中碰到模棱两可问题,同学们能过各抒己见,尊重她人见解,使我能够综合多种见解,取长补短,虚心借鉴,是程序做得更尽人意;当碰到我们全部无法处理问题时,有教导老师耐心讲解,具体地指出了程序中错误,不仅帮我处理了目前编程中问题,而且使我加深了对C语言认识,为以后学习铺平了道路。感谢她们,她们不仅是我收获了更多知识,丰富了学习经验,而且使我养成了“严谨治学”学习态度,使我拥有了面对困难勇气,而且体会到了浓浓师生情,体会到了同学之间难以忘怀友谊。这肯定是我人生中一笔宝贵财富,再次感谢她们!
7.参考文件
【1】 C语言程序设计实例精粹
【2】 C语言课程设计案例精编
【3】 C语言实战105例
【4】 《C程序设计(第三版)》 谭浩强 著 清华大学出版
【5】 《C语言程序设计——试验指导 课程设计 习题解答》 高涛 陆丽娜 著 西安交通大学出版
展开阅读全文