已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
简易教学管理系统的设计与实现【摘要】:本系统可以实现简易的学生成绩管理,功能有限,主要功能包括读取文件中存放的学生成绩单,并对其求每个人的平均分,然后按照平均分对其排名;另外还可以计算每门课程的平均分和标准差,并按照成绩对学生划分区段,将处理后的结果可以保存在新建的一个文件中,方便查看;通过此系统还可以将每个同学的成绩单单独的输出到文件中,保存在一个指定的文件夹中;值得一提的是次系统还可以按照特定的要求进行数据筛选,比如屏幕显示有不及格科目的同学的信息,屏幕显示符合设定的优等生的条件的学生;最后本系统还实现了显示每门课程的成绩分布图(横向的)。 一、设计思路 程序设计一般有两个部分组成,算法和数据结构,合理的选择和实现一个数据结构和车里这些数据结构具有同样的重要性。在这个学生成绩管理系统中,算法都很简单,基本上没有什么很复杂的算法,难点主要在数据结构上面,因为这个系统涉及到得数据比较多,很多数据很容易混淆,所以,我设计了三个数据结构,分别如下:/定义常数#define max 100#define kcs 5/实际课程数int k;struct stu_data_1char elem15;struct stu_data_2char cou10;double ave;double bzc;int best;int better;int good;int pass;int fail;struct stu_creditchar no10;char course10;char cerdit10;首先是定义常量,这些常量的目的主要是为了程序的通用性和易修改性设计,#define kcs 5; 的目的是预先估计课程数目,在次设计成常量,方便扩展和修改,使其实用性更强,#define max 100; 的目的是预先估计学生的人数。第一个数据结构是:stu_data_1,这个数据结构式本系统的核心,主要负责从文件中逐行读取数据放入其elem中,用这个数据结构定义一个二维的数组,就可以很方便的对文件中的数据进行管理了,使整个函数的设计容易了很多。第二个数据结构是:stu_data_2,这个数据结构的主要作用是用于存放对学生的成绩处理后的结果的。char cou10;存放课程名称,double ave;存放每科的平均分,double bzc;存放每科得标准差,下面的用于存放不同等级人数。第三个数据结构是:stu_credit,这个数据结构主要负责将存放在文件中的各门课程所对应的学分读取出来,方便在程序执行中使用,用,no来存放 课程编号,用 char course10来存放课程名称,用 char cerdit10; 在存放最重要的课程学分,此数据结构主要用于在主函数中计算每个学生的加权平均分,在其他函数中基本上很好调用。流程图开始读取成绩文件是否成功读取学分文件是否成功进入dowhile循环menu126534按平均分排名对学生成绩进行综合分析保存每位同学成绩显示不及格学生显示优等生名单打印成绩分布图退出程序q结束否否二、主要函数及其功能 1、void rank_list(int num,struct stu_data_1 stumaxkcs+2,double average ,int n),按平均分给每个同学进行排序,然后保存到另一个文件中; 2、void ave_sta_dev(struct stu_data_1 stumaxkcs+2,int n),求各科的总体均分和标准差,结果存放在新建的一个文件中; 3、void score_list(struct stu_data_1 stumaxkcs+2, int n,double average, int num),保存所有学生的成绩单,将所有的成绩单存放在一个指定的文件夹中; 4、void unpass_list(struct stu_data_1 stumaxkcs+2,struct stu_credit xuefen,int n),屏幕显示所有不及格的人的不及格科目; 5、void excellence_list(struct stu_data_1 stumaxkcs+2,int num,double average,int n),找出优等生,并将他们保存到新建的文件中; 6、void distribution(struct stu_data_1 stumaxkcs+2,int n),绘制学生成绩柱状分布图 7、void menu(),主菜单函数,主要用于调出主菜单;三、系统详细设计及实现过程 程序采用模块化设计,主函数是程序的入口,个模块独立,可分块调试。while()循环保证程序的循环运行;通过函数switch()使得到得返回值调用相应的各功能函数,程序的主菜单如下: 总体来说,这个系统可以分为七个功能模块,其分别是:计算每个学生的加权平均分并进行排名,计算每门课程的总体均分,标准差以及分组情况,打印出每个学生的成绩单,显示有不及格科目的学生,显示符合优等生条件的学生和绘制每门课程的分布图。1、主函数功能实现 主函数首先是要求输入存放学生成绩的文件,然后在读取每门课程所对应的学分,其界面如下: 如果输入的文件名不正确,则会提示重新输入文件名,知道输入正确的文件名,即读取文件中的数据成功,读取到数据后在主函数中会对其进行处理,分别计算出其平均分和排名。2、计算加权平均分模块 此模块的功能主要是通过函数void rank_list(int num,struct stu_data_1 stumaxkcs+2,double average ,int n),来实现的,其基本实现思路是: 直接将在主函数中计算好的排名,在加上一些信息保存到新建的一个文件中,其执行完后如下: 如果在这个界面选择y,则会通过系统调用打开对应的文件。关闭文件后可以进行下一步操作。3、计算各科均分及标准差和分组情况模块这个模块要实现的功能很多,主要是通过void ave_sta_dev(struct stu_data_1 stumaxkcs+2,int n),函数来实现的。其处理完后保存到文件中,其格式如下:4、打印出每个学生的成绩单这个模块相对比较难一点,主要是要建立一个文件夹,在本系统中通过:system(md score),来建立一个文件夹,建立好文件夹后然后按照一定得规则保存到这个新建的文件夹中,文件的前面的名字是自己输入的,其界面如下:5、显示不及格学生的信息这个功能很简单,主要是通过函数int check(int k ,struct stu_data_1 stumaxkcs+2)函数判断给定的数据是否存在不及格科目;然后通过void unpass_list(struct stu_data_1 stumaxkcs+2,struct stu_credit xuefen,int n)函数显示在屏幕上面;方便查看,这个部分不保存到文件中,显示界面如下: 6、显示优等生学生的信息这个模块和上面的基本上一样,首先通过:int yds(int k ,struct stu_data_1 stumaxkcs+2,int num,double average)来判断给定的学生是否满足优等生的条件。然后通过 void excellence_list(struct stu_data_1 stumaxkcs+2,int num,double average,int n)来显示在屏幕上,其见面如下: 7、绘制各科成绩的分布图 这个模块主要是通过一个简单的算法实现的,具体算法可以查看源代码,其基本实现思想是:先确定不同分数段的人数,然后按照人数的多少来打印特定的一个符号,其符号是:printf();其分布图如下: 四、数据测试 数据测试基本上在上面的实现中都已经说明的很清楚了,下面附上处理后的各个数据文件的截图: 按照加权平均分排名的结果:各科目的总体分布情况:各个学生的成绩单如下: stu_date.h#define max 100#define kcs 5/实际课程数int k;struct stu_data_1char elem15;struct stu_creditchar no10;char course10;char cerdit10;struct stu_data_2char cou10;double ave;double bzc;int best;int better;int good;int pass;int fail;void rank_list(int num,struct stu_data_1 stumaxkcs+2,double average ,int n)/按平均分排名file *fp;int j; if(fp=fopen(data1.txt,wb)=null) printf(此文件不可以打开,保存失败n); exit(1); fprintf(fp,名次 );for(j=0;jkcs+2;j+) fprintf(fp,%-9s,stu0j.elem ); fprintf(fp,平均分); fprintf(fp,rn); for(k=1;kn;k+) fprintf(fp,%-6d,numk); for(j=0;jkcs+2;j+) fprintf(fp,%-9s,stukj.elem ); fprintf(fp,%-6.1f,averagek); fprintf(fp,rn); fclose(fp); printf(保存成功n);/-void ave_sta_dev(struct stu_data_1 stumaxkcs+2,int n)/求各科平均分、标准差double ss,m;struct stu_data_2 dakcs+2; file *fp; if(fp=fopen(data2.txt,wb)=null) printf(此文件不可以打开,保存失败n); exit(1); int a; for(a=1;akcs+1;a+) strcpy(daa.cou,stu0a+1.elem); /-for(a=2;akcs+2;a+)for(k=1,m=0;kn;k+) m=m+atoi(stuka.elem);daa-1.ave=m/(n-1);/计算各科平均分/-for(k=1;kkcs+1;k+)dak.best=0;dak.better=0;dak.good=0;dak.fail=0;dak.pass=0;for(a=2;akcs+2;a+)for(k=1;k=90) daa-1.best+;/优秀if(atoi(stuka.elem)=80) daa-1.better+;/良好 if(atoi(stuka.elem)=70) daa-1.good+;/中等if(atoi(stuka.elem)=60) daa-1.pass+;/及格if(atoi(stuka.elem)60) daa-1.fail+;/不及格/科目分等级/- for(a=2;akcs+2;a+)for(k=1,ss=0;kn;k+)ss+=(atof(stuka.elem)-daa-1.ave)*(atof(stuka.elem)-daa-1.ave);daa-1.bzc=sqrt(ss/(n-1);/求出各科标准差/- fprintf(fp,编号 课程名称 平均分 标准差 优秀 良好 中等 及格 不及格n); fprintf(fp,rn); for(k=1;kkcs+1;k+) fprintf(fp,%-6d%-10s%-8.1f%-10.2f%-5d%-5d%-6d%-6d%-6dn,k,dak.cou,dak.ave,dak.bzc,dak.best,dak.better,dak.good,dak.pass,dak.fail ); fprintf(fp,rn); fclose(fp); printf(保存成功n);/- int check(int k ,struct stu_data_1 stumaxkcs+2) int a; for(a=2;akcs+2;a+)if(atof(stuka.elem)92) return 1;if(numk88)for(a=2;a=99) return 1;return 0;/-void score_list(struct stu_data_1 stumaxkcs+2, int n,double average, int num) int a;char no5; char clas10=; printf(请输入班级名:);scanf(%s,clas); system(md score); for(k=1;kn;k+) itoa(k,no,10); char filename20=; char add20=score; strcpy(add+strlen(add),clas); strcpy(filename+strlen(filename),add); strcpy(filename+strlen(filename),no); strcpy(filename+strlen(filename),.txt); file *fp; if(fp=fopen(filename,wb)=null) printf(此文件不可以打开,保存失败n); exit(1); for(int j=0;jkcs+2;j+) fprintf(fp,%-9s,stu0j.elem ); fprintf(fp,平均分 名次); fprintf(fp,rn); for(a=0;akcs+2;a+) fprintf(fp,%-9s,stuka.elem ); fprintf(fp,%-8.2f,averagek); fprintf(fp,%-6d,numk); fprintf(fp,rn); fclose(fp); printf(文件已保存到程序跟目录下score文件夹里.n);/打印每个学生的成绩单/-void unpass_list(struct stu_data_1 stumaxkcs+2,struct stu_credit xuefen,int n)int a,p;int check(int k ,struct stu_data_1 stumaxkcs+2);printf(学号 姓名 课程名称(学分):成绩 课程名称(学分):成绩 课程名称(学分):成绩n);for(k=1;kn;k+)if(check(k,stu)printf(%-6s%-8s,stuk0.elem,stuk1.elem);for(a=2,p=0;akcs+2;a+)if(atof(stuka.elem)3)printf(n );printf(%-9s(%s):%-5s,stu0a.elem,xuefena-1.cerdit,stuka.elem);p=p%3;printf(%-9s(%s):%-5s,stu0a.elem,xuefena-1.cerdit,stuka.elem);printf(n);/显示不及格的同学/-void excellence_list(struct stu_data_1 stumaxkcs+2,int num,double average,int n)int a;int yds(int k ,struct stu_data_1 stumaxkcs+2,int num,double average) ;/-if(kcs5)file *fp;if(fp=fopen(data3.txt,wb)=null) printf(此文件不可以打开,保存失败n); exit(1); fprintf(fp,名次 );for(int j=0;jkcs+2;j+) fprintf(fp,%-9s,stu0j.elem );fprintf(fp,平均分);fprintf(fp,rn);for(k=1;kn;k+)if(yds(k,stu,num,average)fprintf(fp,%-6d,numk);for(a=0;akcs+2;a+) fprintf(fp,%-9s,stuka.elem );fprintf(fp,%-6.1f,averagek);fprintf(fp,rn);fclose(fp);printf(n由于科目过多屏幕无法正常显示,数据以保存到文件data3.txt中,是否现在打开(y/n);char z;scanf(%c,&z);if(z=y) printf(n请关闭文件,使程序继续执行。n);system(data3.txt);return;/当科目大于5时执行该if/-printf(名次 );for(int j=0;jkcs+2;j+) printf(%-9s,stu0j.elem ); printf(平均分);printf(n);for(k=1;kn;k+)if(yds(k,stu,num,average)printf(%-6d,numk);for(a=0;akcs+2;a+) printf(%-9s,stuka.elem );printf(%-6.2f,averagek);printf(n);/显示优等生/-void menu() system(cls); printf (n -n); printf (| 1-保存学生排名后成绩单 |n); printf (| 2-保存学生成绩分布情况 |n); printf (| 3-打印每位同学的成绩 |n); printf (| 4-显示存在不及格科目同学 |n); printf (| 5-显示优等生名单 |n); printf (| 6-显示分布图 |n); printf (| q-quit |n); printf ( -n); printf (please input keyn);void distribution(struct stu_data_1 stumaxkcs+2,int n)int c,j,figure11=0;for(c=2;ckcs+2;c+)printf(= %s成绩分布图 =n,stu0c.elem );for(k=1;k11;k+) figurek=0;for(k=1;k-1;a-) if(a = 10)printf(100 :);elseprintf(%d-%d :,a*10,(a*10)+9);for(int b=0;bfigurea;b+)printf();printf(nn);printf(按任意键打印下一科的分布图.n);getch(); main.cpp#include stdio.h#include stdlib.h#include string.h#include conio.h#include math.h#include stu_data.h main()char x,z;int i,j,k,nummax;/num-存放名次double m,averagemax,qkcs+2;/average- 存放每位学生平均分 q-用于计算平均分struct stu_data_1 stumaxkcs+2;/stu-存放学生各科成绩struct stu_credit crekcs+2;/cre-存放个科学分char file_130,file_230;/-file *fp;printf(请输入存放学生成绩的文件的完整路径.nn例如c盘下tc文件夹的xx0702.txt,格式为:c:tcxx0702.txtnn);printf(若文件与程序在同一文件夹下可直接输入文件名。nn);lp:printf(文件路径:);scanf(%s,file_1);if(fp=fopen(file_1,rb)=null)printf(打开文件失败!nn);printf(请重新输入nn);goto lp;i=0;while(!feof(fp)for(j=0;jkcs+2;j+)fscanf(fp,%sn,stuij.elem );i+;fclose(fp);printf(n读取成功!nn);printf(按任意键继续.nn);getch();/-printf(请输入存放学科学分的文件的完整路径.nn例如c盘下tc文件夹的xx0702.txt,格式为:c:tcxx0702.txtnn);printf(若文件与程序在同一文件夹下可直接输入文件名。nn);lp:printf(文件路径:);scanf(%s,file_2);if(fp=fopen(file_2,rb)=null)printf(打开文件失败!nn);printf(请重新输入nn);goto lp; k=0;while(!feof(fp)fscanf(fp,%s%s%sn,&crek.no,&crek.course,&crek.cerdit);k+;fclose(fp);printf(n读取成功!n);printf(n按任意键进入主菜单.);getch();/-for(q0=0,k=1;kkcs+2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CCAA 92-2024低碳产品评价规范电梯用钢丝绳
- 初中语文教学改革:理念、策略与效果的全面审视
- 初一数学教学课件
- 毕业设计(论文)评阅人评语
- 会计专业论文选题方向
- 农村医疗保险存在的主要问题及对策
- 毕业论文任务书格式和要求
- 2025年上海市高考语文作文预测题及范文分析
- 临床试验风险获益再评估的时间节点
- 导师对论文的学术评语
- 消防演练费用协议书
- 环保的考试题目及答案
- 2024-2025学年北京市西城区初二语文(上)期末试卷附答案解析
- 2025福建清流县粮食购销有限公司招聘企业人员2人笔试历年常考点试题专练附带答案详解试卷2套
- 中职思政新课标培训
- 山西金刚石项目可行性研究报告
- 低能耗建筑幕墙施工方案
- 《临床营养学》试题库及答案(三)
- 年产30万吨高塔复合肥及年产20万吨掺混肥项目可行性研究报告模板-立项备案
- (2021-2025)五年高考语文真题分类汇编专题07 古代诗歌阅读(诗)(全国)(原卷版)
- (2021-2025)5年高考1年模拟政治真题分类汇编专题01 中国特色社会主义(山东专用)(解析版)
评论
0/150
提交评论