南京邮电大学
程序设计(上机)报告题目: P014M
专业信息管理与信息系统
学生姓名缪海涛
班级学号 10004335
指导教师
日期
评分项优秀良好中等及格不及格遵守机房规章制度
上机表现
学习态度
基础知识水平
程序设计能力
课题功能实现情况
算法设计合理性
用户界面友好性
报告书写认真程度
报告内容完整性
文字表达清楚程度
问题回答准确性
评
分等级教师签名:
年月日
备
注
注:评分等级分为五种:优秀、良好、中等、及格、不及格
学生成绩管理信息系统程序设计报告
1、问题描述
设计一个程序,统计一个班(最多有35人)的学生成绩,要求能实现如下四个功能:
(1)由键盘输入每个学生的学号和四门课程的成绩。
(2)计算每个学生的平均分和总分。
(3)按总分从高到低排出名(4)次,(5)并按名(6)次输出每个学生的情况,(7)包括学号、各科成绩、平均分和总分。
(8)根据用户要求输出某门课程(由键盘输入课程号)成绩在90分以上(含90分)且总分在前五名(9)的学生情况,(10)包括:学号、各科成绩、
平均分和总分。
具体要求如下:
(1)每个功能为一个独立的函数。
所有的输入之前都要有提示。
二、流程图(略)
源程序
见附件
程序测试过程
(一)登录: ****************************************************** * 欢迎来到南京邮电大学学生信息管理系统 * * 1.教师登录 * * 2.学生登录 * * 0.退出 * ****************************************************** 当输入5时系统将提示:非法输入,请重试
当输入1时:请输入用户名:
请输入密码:
(二)进入:
当输入:请输入用户名:10004332
请输入密码:miaohaitao
系统将提示:用户名或密码错误,请重试
当输入:请输入用户名:10004335
请输入密码:miaohaitao
系统将进入: ****************************************************** * 1.查询 * * 2.输入数据 * * 0.退出 * ****************************************************** 操作选项:
当输入:6
系统将提示:非法输入,请重试
当输入:1
系统将显示:******************************************************
* 题目无此要求 *
* 此项功能不予开通,请重试 *
******************************************************
******************************************************
* 1.查询 *
* 2.输入数据 *
* 0.退出 *
******************************************************
当输入:2
系统将显示:
******************************************************************
* 该程序支持100人以内的排序 *
* *
* 若有问题请与作者联系QQ:1335304336 手机:153******** *
* *
* 作者:缪海涛 10004335 *
* *
* 提示:要终止成绩输入,请在学生姓名处输入END *
******************************************************************
第1位请输入学生姓名:
请输入学生学号:
请输入学生成绩(按语、数、英、物的顺序):
输入完一位学生的数据后,系统将提示输入下一位,如果想要结束输入,在学生姓名后输入END即可。
筛选
输入END后,系统将显示排名情况和以下操作选项:
******************************************************
* 1.继续筛选 *
* 0.退出 *
******************************************************
当输入:3
系统将提示:非法输入,请重试
当输入:1
系统将显示:
******************************************
* 请选择筛选科目 *
* 1.语文学科 *
* 2.数学学科 *
* 3.英语学科 *
* 4.物理学科 *
******************************************
当输入:5
系统将提示:非法输入,请重试
当输入:1或2或3或4
系统将显示筛选情况
调试记录与注意事项
、编程时要注重程序的灵活性,要在输入出错时有提示,并继续进行程序。
、为了简化筛选过程,我在定义结构体时加入了int m;一组数字,它的作用是记录每位学生的名次,所以筛选程序中的判断条件直接写成:if((st[i].grade[c-1]>=90)&&(st[i].m<=5)),十分简洁。
、起初我在运行程序时,假设输入10名同学的资料,屏幕将显示出100条记录,前十名是同学的资料,以下全是零。原来,for循环没有被有效的条件终止,所以我在函数开始处定义了:char str[]="END",string[8];在for循环中加入了if(strcmp(st[i].name,str)==0)
break;条件,这样就只输出输入的学生资料了。
六、课程设计总结
这次的课程设计是我进入大学以来第一次自己动手制作比较大的程序,经过了一段时间的不断研究、分析、尝试,我对C语言有了更加深入的了解,也掌握了不少编程的小技巧。比如:
我在编这套学生信息查询系统的时候是先把程序分成几个小的模块:1.学生信息输入模块2.学生成绩排序模块3.成绩筛选模块4.主函数模块及调用顺序构架。
先编写子程序,再将子程序连接起来。
在连接子程序时,我采用了自下而上的的顺序,先从主程序开始写,一步一步调用子程序。
编程时一定要细心,要顾首顾尾。在这次编程中我好几次改了上面的数据类型而忘了下面的赋值。
总之,虽然程序不是太复杂,但还是锻炼了我的思维能力。使我有了很大的收获。
源程序
#include
#define N 100
#include
struct stu{ float grade[4];
char name[5];
int number;
float average;
float sum;
int m;
}st[N];
void jmfour();
void jmone2();
void tuichu()
{ printf("再次按任意键退出\n");
}
void jmfive()
{ { int c,i,k;
printf("\n\n\n");
printf(" ******************************************\n");
printf(" * 请选择筛选科目 *\n");
printf(" * 1.语文学科 *\n");
printf(" * 2.数学学科 *\n");
printf(" * 3.英语学科 *\n");
printf(" * 4.物理学科 *\n");
printf(" ******************************************\n");
scanf("%d",&c);
if(c!=1&&c!=2&&c!=3&&c!=4)
printf("非法输入,请重试\n");
Jmfive();
for(i=0;i { if((st[i].grade[c-1]>=90)&&(st[i].m<=5)) { printf("\n\n"); printf("\n名次姓名总分语数英物均分\n"); printf("第%d名 ",st[i].m); printf("%s ",st[i].name); printf(" %7.1f",st[i].sum); for(k=0;k<4;k++) printf(" %7.1f",st[i].grade[k]); printf(" %7.1f\n",st[i].average); } } jmfour(); } } void jmfour() { int c; printf("\n\n\n"); printf(" ******************************************************\n"); printf(" * 1.继续筛选 *\n"); printf(" * 0.退出 *\n"); printf(" ******************************************************\n"); scanf("%d",&c); if(c==1) jmfive(); else if(c==0) tuichu(); else { printf("非法输入,请重试\n"); jmfour(); } } void jmthree1() { int i,j,p,k; float q,s1,s2,s4; int s3; char str[]="END",string[8]; printf("\n\n\n"); printf(" ******************************************************************\n"); printf(" * 该程序支持100人以内的排序 *\n"); printf(" * *\n"); printf(" * 若有问题请与作者联系QQ:1335304336 手机:153******** *\n"); printf(" * *\n"); printf(" * 作者:缪海涛10004335 *\n"); printf(" * *\n"); printf(" * 提示:要终止成绩输入,请在学生姓名处输入END *\n"); printf(" ******************************************************************\n"); printf("\n\n\n\n"); for(i=0;i { printf("第%d位: ",i+1); printf("请输入学生姓名:"); scanf("%s",st[i].name); if(strcmp(st[i].name,str)==0) break; printf(" 请输入学生学号:"); scanf("%d",&st[i].number); printf(" 请输入学生成绩(按语、数、英、物的顺序):"); for(j=0;j<4;j++) scanf("%f",&st[i].grade[j]); printf("\n\n"); } for(i=0;i { st[i].sum=st[i].grade[0]+st[i].grade[1]+st[i].grade[2]+st[i].grade[3] ; st[i].average=(st[i].sum)/4; } printf("\n名次姓名总分语数英物均分 \n"); for(i=0;i { p=i;q=st[i].sum; for(j=i+1;j if(q { p=j; q=st[j].sum; } if(p!=i) { s1=st[i].sum; st[i].sum=st[p].sum; st[p].sum=s1; strcpy(string,st[i].name); strcpy(st[i].name,st[p].name); strcpy(st[p].name,string); s2=st[i].average; st[i].average=st[p].average; st[p].average=s2; s3=st[i].number; st[i].number=st[p].number; st[p].number=s3; for(k=0;k<4;k++) { s4=st[i].grade[k]; st[i].grade[k]=st[p].grade[k]; st[p].grade[k]=s4; } } if(strcmp(st[i].name,str)==0) break; st[i].m=i+1; printf("第%d名 ",i+1); printf("%-3s ",st[i].name); printf("%7.1f",st[i].sum); for(k=0;k<4;k++) printf("%7.1f",st[i].grade[k]); printf("%7.1f",st[i].average); printf("\n\n"); } jmfour(); } void jmtwo1() { int c; printf("\n\n\n"); printf(" ******************************************************\n"); printf(" * 1.查询*\n"); printf(" * 2.输入数据 *\n"); printf(" * 0.退出 *\n"); printf(" ******************************************************\n"); printf("\n\n\n"); printf("请选择操作选项:"); scanf("%d",&c); if(c==1) { jmone2(); jmtwo1(); } else if(c==2) jmthree1(); else if(c==0) tuichu(); else { printf("非法输入,请重试\n"); jmtwo1(); } } void jmone1() { int yhm; char mm[10]; printf("\n\n\n"); printf("请输入用户名:"); scanf("%d",&yhm); printf("请输入密码:"); scanf("%s",mm); if((yhm==10004335)&&(strcmp(mm,"miaohaitao")==0)) jmtwo1(); else { printf("用户名或密码错误,请重试\n"); jmone1(); } } void jmone2() { printf(" ******************************************************\n"); printf(" * 题目无此要求 *\n"); printf(" * 此项功能不予开通,请重试*\n"); printf(" ******************************************************\n"); } void main() { int c; printf(" ******************************************************\n"); printf(" * 欢迎来到南京邮电大学学生信息管理系统*\n"); printf(" * 1.教师登录*\n"); printf(" * 2.学生登录*\n"); printf(" * 0.退出*\n"); printf(" ******************************************************\n"); printf("\n\n\n"); printf("请选择操作选项:"); scanf("%d",&c); if(c==1) jmone1(); else if(c==2) { jmone2(); main(); } else if(c==0) tuichu(); else { printf("非法输入,请重试\n"); main(); } }