学生成绩管理系统.docx
- 文档编号:26271389
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:32
- 大小:517.84KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(32页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
洛阳理工学院
课程设计报告
课程名称高级语言程序设计
设计题目学生成绩管理系统设计
专业计算机科学与技术
班级
学号
姓名
完成日期2015-7-2
课程设计任务书
设计题目:
学生成绩管理系统设计
设计内容与要求:
设计一个学生成绩管理系统,假定每个学生有3门课程成绩。
能够录入、浏览、查询成绩,对成绩进行排序等。
(1)系统以菜单方式工作;
(2)学生成绩录入功能(成绩保存在文件);
(3)成绩浏览功能;
(4)成绩查询功能:
按学号查询、按课程名查询;
(5)修改成绩;
(6)添加/删除学生成绩;
(7)排序:
按总分和按课程成绩排序。
指导教师:
2015年7月2日
课程设计评语
成绩:
指导教师:
年月日
目录
1、程序总体设计1
1.1、程序实现的功能1
1.2、程序模块分级1
2、详细设计2
2.1、主界面2
2.2、各功能模块设计3
2.2.1、学生成绩录入模块3
2.2.2成绩浏览模块4
2.2.3成绩查询模块5
2.2.4成绩修改模块6
2.2.5学生成绩的删除与增加模块8
2.2.6排序模块11
3、设计总结12
4、附录(源程序)13
1、程序总体设计
1.1、程序实现的功能
(1)系统以菜单方式工作;
(2)学生成绩录入功能(成绩保存在文件);
(3)成绩浏览功能;
(4)成绩查询功能:
按学号查询、按课程名查询;
(5)修改成绩;
(6)添加/删除学生成绩;
(7)排序:
按总分和按课程成绩排序。
1.2、程序模块分级
学生成绩主要有学生成绩管理系统下几个同级功能模块组成,分为录入、浏览、修改、查询、添加和删除、排序组成、其中在查询模块中有按照学号和单一课程查询的子级模块,在排序中有按照总分和单一课程成绩排序的子级模块。
图1-1
2、详细设计
2.1、主界面
(1)运行界面如图2-1
图2-1
(2)模块功能说明如图2-2
主函数里调用菜单,各级模块使用完毕可以返回再次利用,为防止屏幕错乱,应先清屏。
图2-2
2.2、各功能模块设计
2.2.1、学生成绩录入模块
(1)运行界面如图2-3
图2-3
(2)模块功能说明如图2-4
首先要求输入多少个学生,输入学生成绩,然后把学生成绩保存在磁盘里录入完毕。
图2-4
2.2.2成绩浏览模块
(1)运行界面如图2-5
图2-5
(2)模块功能说明如图2-6
调取总人数依次输出m个人数的成绩
图2-6
2.2.3成绩查询模块
(1)运行界面如图2-7
图2-7
(2)模块功能说明如图2-8
调用查询模块,选择是课程查询还是学号查询,输入学号,利用循环寻找学号,输出该学号的或者该课程的学生成绩信息
图2-8
2.2.4成绩修改模块
(1)运行界面
先显示学生信息如图2-9-a,键入修改学号如图2-9-b,修改后成绩预览如图2-9-c。
图2-9-a
图2-9-b
图2-9-c
(2)模块功能说明如图2-10
先显示学生的全部信息,输入想要更改的学生学号,更改学生的信息,保存,重新把学生的成绩信息显示出来。
图2-10
2.2.5学生成绩的删除与增加模块
(1)运行结果如图2-11
选择增加学生信息如图2-11-a,增加完毕如图2-11-b,删除学生信息如图2-11-c,删除完毕如图2-11-d
图2-11-a
图2-11-b
图2-11-c
图2-11-d
(2)模块功能说明
利用删除和添加学生模块使程序可以循环使用提高了程序的可利用性。
删除学生成绩如图2-12
图2-12
添加学生成绩如图2-13
图2-13
2.2.6排序模块
(1)运行界面
总分排序如图2-14
图2-14
课程排序如图2-15
图2-15
(2)模块功能说明如图2-16
对学生成绩进行排序,可以根据学生的单一课程和总分自由排序。
图2-16
3、设计总结
4、附录(源程序)
#include
#include
#include
#defineM3//M门成绩
#defineN100//最大上限学生个数
voidmenu();//目录
voidInputStu();//输入学生成绩
voidbrowse();//浏览学生信息
voidinquire();//成绩查询
voidn_inquire();//按照学号查询
voidc_inquire();//按照课程查询
voidmodify();//成绩修改
voiddel_add();//删除添加学生信息
voidcount_score();//计算学生的总成绩和平均成绩
voidreorder();//选择需要哪种排序方法
voida_reorder(structstudentstu[]);//按照总分进行排序
voidb_reorder(structstudentstu[]);//按照课程进行排序
intload();//文件导入
voidsave(intm);//文件保存
intm;
structstudent{
intnum;
charname[10];
floatscore[M];
floatsore;//学生成绩的总分
}stu[N];
voidInputStu()//信息的录入
{
inti,j;
printf("请输入要录入的学生个数:
");
scanf("%d",&m);
for(i=0;i printf("请输入第%d位学生的信息: \n",i+1); printf("请输入学号: "); scanf("%ld",&stu[i].num); printf("请输入名字: "); scanf("%s",stu[i].name); for(j=0;j printf("请输入成绩%d: ",j+1); scanf("%f",&stu[i].score[j]); } } count_score(); save(m); return; } voidcount_score()//求总成绩 { inti,j; for(i=0;i for(j=0;j stu[i].sore=stu[i].sore+stu[i].score[j]; } } } voidreorder()//选择排序的方法 { intn,flag,i,j; printf("选择进行排序的方法: \n"); printf("\t1: 总分\n"); printf("\t2: 课程\n"); do//利用循环防止输入错误 { printf("请输入1~2进行选择\n"); scanf("%d",&n); if(n>=1&&n<=2) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择! "); } }while(flag==0); switch(n) { case1: a_reorder(stu);printf("对总分进行排序\n");break; case2: printf("对课程进行排序\n");b_reorder(stu);break; } for(i=0;i printf("学号为: %ld\n姓名为: %s\n",stu[i].num,stu[i].name); for(j=0;j printf("学生的课程%d为: %.1f\n",j+1,stu[i].score[j]); printf("平均分为: %.1f\n总分为: %.1f\n",stu[i].sore/M,stu[i].sore); } } voida_reorder(structstudentstu[])//按照总分进行排序 { structstudentk; inti,j; for(i=0;i for(j=0;j if(stu[j].sore k=stu[j]; stu[j]=stu[j+1]; stu[j+1]=k; } } voidb_reorder(structstudentstu[])//按照课程进行排序 { structstudentk; inti,j,n; printf("请输入要对哪门课程进行排序\n"); for(n=0;n } scanf("%d",&n); printf("您选择的是对课程%d进行排序,结果为: \n",n); for(i=0;i for(j=0;j if(stu[j].score[n-1] k=stu[j]; stu[j]=stu[j+1]; stu[j+1]=k; } } intload()//导入文件 { FILE*fp; intn=0; if((fp=fopen("score_list","rb"))==NULL)//检测是否缺失文件 { printf("无法打开文件\n"); exit(0); } else { do { fread(&stu[n],sizeof(structstudent),1,fp); n++; }while(feof(fp)==0);//导入文件直到成功 } fclose(fp); return(n-1); } voidsave(intm)//保存文件函数 { inti; FILE*fp; if((fp=fopen("score_list","wb"))==NULL) { printf("无法打开文件\n"); exit(0); } for(i=0;i if(fwrite(&stu[i],sizeof(structstudent),1,fp)! =1) printf("文件写入失败\n"); fclose(fp); } voidmenu()//菜单目录需要的功能 { printf("******************************************************************************\n");//打开时页面显示 printf("*学生成绩管理系统*\n"); printf("******************************************************************************\n"); printf("请选择需要的功能\n"); printf("\t\t1: 学生成绩录入"); printf("\t\t2: 成绩浏览\n"); printf("\t\t3: 成绩查询"); printf("\t\t4: 修改成绩\n"); printf("\t\t5: 添加/删除学生成绩"); printf("\t6: 排序\n"); printf("\t\t0: 退出\n"); } voidbrowse()//成绩浏览 { inti,j; for(i=0;i printf("第%d个学生: \n学号: %ld\n姓名: %s\n",i+1,stu[i].num,stu[i].name); for(j=0;j printf("成绩%d为: %.1f\n",j+1,stu[i].score[j]); } printf("平均分为: %.1f\n总分为: %.1f\n",stu[i].sore/M,stu[i].sore);//输出总分和平均分 } } voidinquire()//成绩查询 { intn,flag; printf("请输入需要按照哪种形式查询\n"); printf("\t\t1: 按学号查询\n"); printf("\t\t2: 按课程名\n"); do//利用循环防止输入错误 { printf("请输入1~2进行选择\n"); scanf("%d",&n); if(n>=1&&n<=2) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择! "); } }while(flag==0); switch(n) { case1: printf("您选择的为进行学号查询");n_inquire();break; case2: printf("您选择的为进行课程查询");c_inquire();break; } } voidn_inquire()//按照学号查询 { intnum1,i,j; scanf("%d",&num1);//输入学号显示该学生信息 system("cls"); printf("您要查看的学生的信息如下: \n"); for(i=0;i if(num1==stu[i].num){ printf("学号为: %d\n姓名为: %s\n",stu[i].num,stu[i].name); for(j=0;j printf("学生的成绩%d为: %.1f\n",j+1,stu[i].score[j]); printf("平均分为: %.1f\n总分为: %.1f\n",stu[i].sore/M,stu[i].sore); } } return; } voidc_inquire()//按照课程名查询 { inti,n,flag; printf("请选择你要对哪种课程进行查询: \n"); for(i=0;i printf("\t\t\t%d: 课程%d\n",i+1,i+1); do//利用循环防止输入错误 { printf("请输入1~%d\n",M); scanf("%d",&n); if(n>=1&&n<=M) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择! \n"); } }while(flag==0); for(i=0;i printf("学号为: %d\n姓名为: %s\n",stu[i].num,stu[i].name); printf("学生的成绩%d为: %.1f\n",n,stu[i].score[n-1]); } } voidmodify()//成绩修改 { inttemp,i,j; m=load(); browse(); printf("\n\t请输入要修改的学生的学号: "); scanf("%d",&temp);//输入学号 for(i=0;i { if(temp==stu[i].num) { printf("\n\t请输入新的学生的学号: "); scanf("%d",&stu[i].num); printf("\n\t请输入新的学生的姓名: "); scanf("%s",stu[i].name); printf("\n\t请输入新的学生的成绩: \n"); for(j=0;j printf("\t\t请输入课程%d的成绩: ",j+1); scanf("%f",&stu[i].score[j]); printf("\n"); } } } count_score();//修改后的学生求总分 save(m); browse(); printf("请输入任意键继续......");/*返回功能选择界面*/ getchar(); return; } voiddel_add()//选择删除或者增加学生成绩 { intn,flag; voidadd(); voiddele(); printf("请选择: \n"); printf("\t\t\t1: 增加学生信息\n"); printf("\t\t\t2: 删除学生信息\n"); do//利用循环防止输入错误 { printf("请输入1~%d\n",M); scanf("%d",&n); if(n>=1&&n<=M) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择! \n"); } }while(flag==0); if(n==1){ printf("您选择的为增加学生信息\n"); add(); } if(n==2){ printf("您选择的为删除学生信息\n"); dele(); } } voidadd()//增加学生成绩 { FILE*fp; intcount,i,j; if((fp=fopen("score_list","ab"))==NULL) { printf("无法打开文件\n"); exit(0); } printf("\n请输入增加的学生个数: "); scanf("%d",&count); for(i=m;i { printf("\n请输入所添加学生的学号: "); scanf("%d",&stu[i].num); printf("\n请输入所添加学生的姓名: "); scanf("%s",stu[i].name); for(j=0;j printf("\n请输入所添加学生的课程%d: ",j+1); scanf("%f",&stu[i].score[j]); } } for(i=m;i if(fwrite(&stu[i],sizeof(structstudent),1,fp)! =1) printf("文件写入失败\n"); printf("\n添加完毕! \n"); fclose(fp); m=m+count;//增加后的学生个数 count_score();//对增加后的学生进行求总分 printf("\n"); return; } voiddele()//删除学生成绩信息 { inttemp,i,j,n; m=load(); browse();//更改前的数据陈列 printf("\n请输入要删除的学生的学号: "); scanf("%d",&temp); printf("\n"); for(i=0;i { if(temp==stu[i].num)//循环寻找学生 { for(j=i;j { stu[j].num=stu[j+1].num; strcpy(stu[j].name,stu[j+1].name); for(n=0;n stu[j].score[n]=stu[j+1].score[n]; } } } m=m-1;//学生总量减少 count_score();//对删除后的学生进行求总分 save(m); browse();//更改后对数据进行陈列 return; } voidmain()//主函数,主菜单 { menu(); inta,n; m=load(); intflag=0;// do { printf("请输入0~6进行选择\n"); scanf("%d",&n); if(n>=0&&n<=6) { flag=1; break; } else { flag=0; printf("您输入有误,请重新选择! \n"); } }while(flag==0); while(flag==1){ switch(n) { case0: printf("欢迎使用本成绩管理程序\n");exit(0);break; case1: InputStu();break; case2: browse();break; case3: inquire();break; case4: modify();break; case5: del_add();break; case6: reorder();break; } printf("\n"); printf("是否继续进行: \n"); printf("\t\t1: 是\t\t2: 否\n"); scanf("%d",&a); if(a==1) { flag=1; system("cls");/*清屏*/ menu();/*调用菜单函数*/ printf("请再次选择你需要操作的步骤(0--6): \n"); scanf("%d",&n); printf("\n"); } else{ printf("欢迎使用本成绩管理程序\n");//结束页面
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统
![提示](https://static.bdocx.com/images/bang_tan.gif)