logo资料库

学生成绩管理系统课程设计报告书(C语言).doc

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
五、核心技术的实现说明及相应程序段
课程设计报告书 课程名称: 学 班 学 姓 院: 级: 号: 名: 指导老师: 设计时间:
学生成绩管理课程设计 一、设计题目 用 C 语言编写程序完成以下任务: (1)能按学期、按班级完成对学生成绩的录入、修改 (2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的 平时成绩进行查询 (3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单 二、设计要求 (1)贯彻结构化的程序设计思想。 (2)用户界面友好,功能明确,操作方便。 (3)用户界面中的菜单至少应包括“统计各班总分及平均分”、“平均成绩 排 序”、“成绩单显示”和“退出”4 项。 (4)代码应适当缩进,并给出必要的注释,以增强程序的可读性。 三、设计需求分析 经过对程序设计题目的分析可知,整个程序的设计实现大致分为十个 模块,每一个模块对应一个函数。在这些函数当中,按学期对学生信息查询 函数、按班级对学生信息查询函数、按平均成绩排序函数、按班级显示学生 成绩单函数、统计全部学生总分及平均分函数、按总成绩排序函数、统计成 绩不及格学生信息函数、显示全部学生信息并统计人数函数的实现严格按照 题目的要求。读取文件函数对其它函数的实现起辅助作用,主函数及菜单函 数控制程序的整体运行。 1.显示全部学生信息并统计人数 这里要用到文件打开函数和文件 读取数据函数,再加入人数的统计语句,以实现将文件内容显示到窗体并统
计总人数。 2.统计全部学生总分及平均分 这一步在第一项功能的基础上稍加改 动,添加求学生总分和平均分的函数就可以实现预期的功能。 3.按学期对学生信息查询 实现的功能是按照学期对学生的成绩和数据 进行查询,要求输入正确学期实现该功能。 4.按班级对学生信息查询 实现的功能是按照班级对学生的成绩和数据 进行查询,要求输入正确班级实现该功能。 5.按总成绩排序 该项为附加功能实现的是总成绩的递减排序以及名次 显示,其中总成绩相同者名次相同。 6.按平均成绩排序 按照题目的具体要求实现的是平均成绩的递减排序 以及名次显示,其中平均成绩相同者名次相同。 7.统计成绩不及格学生信息 该项即统计所有学生中各科中至少有一科 不及格的学生的所有信息 。 8.按班级显示学生成绩单 该项即显示所有学生的基本信息及在总体 中成绩排序信息。 除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运 行当中循环执行所有的功能,并根据需要终止程序,这使整个程序更加完善。 每一个学生记录都包含学期、班级、学号、姓名,以及英语、计算机两 门成绩,在程序当中将学生记录类型定义为结构体类型,函数每次对学生记 录的访问,其数据来源都是 file.txt 文件,这样做保证学生数据的一致性, 每次运行程序都可以采用原来的数据。 四、程序流程图 1. 程序总体结构图
图 1 程序总体结构图 2. 具体功能框图 (1)显示全部学生信息并统计学生人数函数 图 2 读取学生数据 (2)按平均分排序函数
图 3 按平均分排序 五、核心技术的实现说明及相应程序段 本程序主要由十个自定义函数和一个主函数组成,其中主函数以菜单的 形式调用其它函数来实现要求的所有功能。在这些函数当中,按学期对学生 信息查询、按班级对学生信息查询函数、按平均成绩排序函数、统计成绩不 及格学生信息函数等是程序中较为核心的部分,下面分别进行说明。 1. 按学期、班级对学生信息查询函数 首先调用 reads 函数读取文件中的 信息,利用 for 循环按照班级号循环查找,通过 strcmp 函数比较所查找学 期、班级和已知学期、班级字符,利用 if 语句对所输入的待查找学期、班 级与已知学期、班级字符进行判断,如果所查学期、班级字符不是已知,则 显示无此学期、班级信息,在符合条件的情况下则输出该学期学生所有信息。 具体的程序段如下: /*按学期对学生信息查询*/
void xueqi () { struct student stud[N]; char number[20]; int i,n; n=reads(stud); printf("\n 请输入待查询的学生学期号,按回车键确认:\n",number); scanf("%s",number); printf("*********************** 所 查 学 生 信 息 如 下 ************************\n"); printf("学期 班级 学号 姓名 计算机 英语 总分 平均分 \n"); printf("********************************************************* ******\n"); for(i=0;i=n) { printf("没有找到该学期信息!\n"); return; } else printf("%s\t%s\t%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\n",stud[i].xq, stud[i].cla,stud[i].num,stud[i].name,stud[i].computer,stud[i].eng lish,stud[i].computer+stud[i].english,(stud[i].computer+stud[i].e nglish)/2); } } }} /*按班级对学生信息查询*/ void query() { struct student stud[N]; char number[20]; int i,n; n=reads(stud); printf("\n 请输入待查询的学生班级号,按回车键确认:\n",number);
scanf("%s",number); printf("*************************** 所 查 学 生 信 息 如 下 **********************\n"); printf("班级 学期 学号 姓名 计算机 英语 总分 平均分 \n"); printf("********************************************************* ********\n"); for(i=0;i=n) { else printf("没有找到该班级信息!\n"); return;} printf("%s\t%s\t%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\n",stud[i].cla, stud[i].xq,stud[i].num,stud[i].name,stud[i].computer,stud[i].engl ish,stud[i].computer+stud[i].english,(stud[i].computer+stud[i].en glish)/2); } } 2. 按平均成绩排序函数 该函数的核心内容是求平均成绩并对所有人进行排序。采用冒泡法对 平均分进行排序,并记录对于总分的排序采用的排序算法是冒泡法排序,其 中平均分的求得是在排序的过程中实现的,这部分程序仍然调用了 reads 函数,整个排序过程在结构体数组 stud 中实现,由于排序算法涉及到两个 数组元素的信息交换,因此还需要定义一个中间变量来协助。对于学生排序 后名次的确定在结果输出时予以显示。具体程序段如下: /*按平均成绩排序*/ void sort2() { struct student stud[N],temp; int i,j,n; n=reads(stud); for(i=0;i
if((stud[j].english+stud[j].computer)/2<(stud[j+1].english+stud[j +1].computer)/2) { temp=stud[j]; stud[j]=stud[j+1]; stud[j+1]=temp; } } j=1; printf("*********************** 平 均 成 绩 排 序 结 果 如 下 *************************\n\n"); printf("名次 学期 班级 学号 姓名 英语 计算机 平均成绩 \n"); printf("********************************************************* ******************\n"); for(i=0;i
分享到:
收藏