ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:379.16KB ,
资源ID:24543755      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24543755.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言程序设计报告 学生成绩管理系统.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计报告 学生成绩管理系统.docx

1、C语言程序设计报告 学生成绩管理系统*大学物联网工程学院课程设计报告课程名称: 计算机综合实践 设计题目: 学生成绩管理系统 班 级: 自动化1001班 姓 名: 学 号: 指导教师: 评 分: 2011 年 11 月15日目 录一、设计目的和任务 3二、总体设计 3三、详细设计 5四、调试与测试 5五、源程序清单和执行结果 6六、体会与心得 17七、参考文献 17一、 设计目的和任务设计目的:(1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题。程序功能:(1) 计算各个学生的总分及平均分,并

2、按平均分排出名次。(2) 统计全班学生平均分成绩,输出60分以下、6079、8089、90分以上各分数人数。(3) 能按学号、姓名查询学生成绩,并能输出学生的成绩单。(4) 输出不及格科目及学生名单。(5) 在屏幕打印优等生名单(学号,三门课程成绩,平均成绩,名次),优等生必须满足下列条件:1平均成绩大于90分;或平均分大于85分且至少有一门功课为100分;或者平均分大于85分且至少两门课程成绩为95分以上;2名次在前三名; 3每门功课及格以上。二、总体设计(1)程序设计组成框图:(2)程序设计流程图:54321三、 详细设计1) 初始化结构体数组:初始化学生的学号、姓名,数学、英语、计算机三

3、科的成绩,暂定学生的排名、总分、平均分为0。2) 建立文本文件:可用函数void wenjian1()和void wenjian2()来实现,将系统查询的结果全部写入文本文件中。3) 求总分和平均分:可用函数void modify(struct Student stuN)来实现,将计算的结果赋给结构体数组中的学生的总分和平均分。4) 按平均分排名:先调用函数void modify(struct Student stuN),再用函数void rank(struct Student stuN)来实现,将计算的结果赋给结构体数组中的学生的排名。调用函数void print(struct Studen

4、t stuN)按表格形式输出学生所有信息,调用函数void wenjian1()将其写入文本文件。5) 统计各个分数段的人数:在第(4)步基础上用函数void grade(struct Student stuN) 来实现,将统计的结果输出并调用函数void wenjian2()写入文本文件中。6) 查找学生的信息:在第(4)步基础上用函数void search(struct Student stuN)来实现,用switch语句读入用户的选择,若读入1,则按学号查找;若读入2,则按姓名查找。调用函数void wenjian2()将查找结果写入文本文件。7) 查找不及格科目及学生:在第(4)步基础

5、上用函数void insert(struct Student stuN)来实现,依次输出数学、英语、计算机不及格的学生姓名和该科不及格成绩并调用函数void wenjian2()写入文本文件中。8) 查找优等生:在第(4)步基础上用函数void excellent(struct Student stuN)来实现,找出同时满足优等生三个条件的学生即为优等生,输出他们的所有信息并调用函数void wenjian2()写入文本文件。9) 系统的欢迎界面:可用函数void system(struct Student stuN)来实现。10) 菜单选择:可用函数void menu(struct Stud

6、ent stuN)来实现,一共有5个功能,用switch语句读入用户的选择。四、 调试与测试1) 文件模块问题:这个系统总共有5个功能,也就是有5个结果,可是运行完了之后发现后一次的结果会覆盖前一次的结果,打开文本文件查看的时候发现里面的内容混乱。解决办法:设置两个子函数,一个是读入第一个结果的子函数void wenjian1(),文件类型设置为“wb”型,另一个是读入后四个结果的子函数void wenjian2(),文件类型设置为“ab+”型,实现为刚刚建立的文本文件续写的功能。这样在下面的程序中只需要调用自己需要的子函数就可以将结果正确无误的保存到文本文件中。2) 排名模块 问题:可用vo

7、id rank(struct Student stuN)来实现。可是在设计“若平均分相同则并列名次”这个算法的时候遇到了困难,试验了好几次都不成功。解决办法:1、最开始只是简单的以为用选择法对结构体里每名学生的平均分stui.aver从大到小排好序,然后再从一到十的赋给排名stui.rank就行,后来发现这解决不了名次并列的问题。于是想到了用for循环将结构体里学生的成绩stui.aver与已排好名的数组averagem从大到小一个一个比较,若遇到几个学生的分数与averagek相同,则给stui.rank赋相同的值。2、可是再次调试的时候问题又来了,因为当初排名的时候数组里averagem也

8、有相同的值,结果导致给stui.rank赋值出现了重复,后一次的排名会覆盖上一次的排名。于是,我又想了一个办法,那就是在用选择法对averagem进行排名的时候,若遇到几个值相同的元素,则只保留一个元素,这样在给stui.rank赋值的时候就不会出现重复了。于是这个问题顺利解决。五、 源程序清单和执行结果(1)源程序清单如下:/*头文件*/#include#include/*宏定义*/#define N 10/*全局指针变量*/FILE *fp;/*定义结构体数组*/struct Student int ranking; int num; char name20; float score3;

9、float aver; float total;/*初始化结构体数组*/struct Student stuN=0,1001,Yang Shengqian,99,80,85,0,0,0,1002,Xiang Jing,80,90,78,0,0,0,1003,Wang Minghui,60,70,59,0,0,0,1004,Dong Qiang,91,90,90,0,0,0,1005,Zheng Kai,85,76,90,0,0,0,1006,He Yunling,90,91,90,0,0,0,1007,Wang Yao,69,47,67,0,0,0,1008,Gou Huan,45,76,56

10、,0,0,0,1009,Ma Yuling,89,78,67,0,0,0,1010,Ran Dongdu,100,100,98,0,0;/*子函数功能:建立文本文件*/void wenjian1() if(fp=fopen(xscjglxt.txt,wb)=NULL)/*用“wb”建立一个二进制文件*/ printf(cannot open filen); return; /*子函数功能:续写文本文件*/void wenjian2() if(fp=fopen(xscjglxt.txt,ab+)=NULL)/*用“ab+”为刚刚建立的文件实现续写*/ printf(cannot open fil

11、en); return; /*子函数功能:求总分和平均分*/void modify(struct Student stuN) int i; for(i=0;iN;i+) stui.total=stui.score0+stui.score1+stui.score2; /*求总分*/ stui.aver=stui.total/3.0;/*求平均分*/ /*子函数功能:根据平均分排名*/void rank(struct Student stuN) int i,j,k,m,n; float averageN,t; modify(stu);/*调用子函数modify()*/ for(i=0;iN;i+)

12、 averagei=stui.aver; for(i=0;iN-1;i+)/*用选择法对平均分排名*/ k=i; for(j=i+1;javeragek) k=j; t=averagek; averagek=averagei; averagei=t; for(m=0,n=1;mN;m+,n+)/*把排好的名次赋给结构体里的元素*/ for(i=0;iN;i+) if(stui.aver=averagem) stui.ranking=n;/*子函数功能:统计各个分数段人数*/void grade(struct Student stuN) int A,B,C,D,E,i; wenjian2();/

13、*打开文件*/ A=B=C=D=E=0; for(i=0;iN;i+) if(stui.aver=60&stui.aver=70&stui.aver=80&stui.aver=90) /*平均分大于89的人数*/ A+; printf(90t80-89t70-79t60-69t90t80-89t70-79t60-69t60rn);/*在文件中输出各分数段人数*/ printf(%dt%dt%dt%dt%dn,E,D,C,B,A); fprintf(fp,%dt%dt%dt%dt%drn,E,D,C,B,A); fclose(fp);/*关闭文件*/ /*子函数功能:用姓名或者学号查找学生信息*

14、/void search(struct Student stuN) int num1,i,n; char name120; wenjian2();/*打开文件*/ /*说明若是按学号查找,则输入1;若是按姓名查找,则输入2*/ printf(if you want to search by number,please input 1.nif you want to search by name,please input 2.nn); printf(please input your choice:);/ *提示用户输入自己的选择*/ scanf(%d,&n);/*读入用户的选择*/ print

15、f(n); switch(n) /*用学号查找*/ case 1:printf(please input the number:); scanf(%d,&num1); printf(n); for(i=0;iN;i+)/*一个一个比较学号是否相符*/ if(stui.num=num1) printf(RanktNumbertNamettMathtEnglishtComputertTotaltAveragen); fprintf(fp,rnRanktNumbertNamettMathtEnglishtComputertTotaltAveragern); printf(%-4dt%-5dt%st%

16、5.2ft%5.2ft%5.2ft%14.2ft%5.2fn, stui.ranking,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.total,stui.aver); fprintf(fp,%-4dt%-5dt%st%5.2ft%5.2ft%5.2ft%14.2ft%5.2frn, stui.ranking,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.total,stui.aver); if(num11010)/*如果用户输入不正确则提示出错

17、*/ printf(ERROR!n); break; /*用姓名查找*/ case 2:printf(please input the name:); gets(name1); gets(name1); printf(n); for(i=0;iN;i+)/*一个一个比较名字是否相符*/ if(strcmp(stui.name,name1)=0) printf(RanktNumbertNamettMathtEnglishtComputertTotaltAveragen); fprintf(fp,rnRanktNumbertNamettMathtEnglishtComputertTotaltAve

18、ragern); printf(%-4dt%-5dt%st%5.2ft%5.2ft%5.2ft%14.2ft%5.2fn, stui.ranking,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.total,stui.aver); fprintf(fp,%-4dt%-5dt%st%5.2ft%5.2ft%5.2ft%14.2ft%5.2frn, stui.ranking,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.total,stui.aver)

19、; if(strcmp(stui.name,name1)=0) break; if(i=N&strcmp(stui.name,name1)!=0)/ *如果用户输入不正确则提示出错*/ printf(ERROR!); break; default:printf(ERROR!n);/*如果用户输入选择键错误则提示出错*/ fclose(fp);/*关闭文件*/ /*子函数功能:输出不及格科目和学生及其不及格分数*/void insert(struct Student stuN) int i,j=0; wenjian2();/*打开文件*/ printf(Math:); fprintf(fp,rn

20、Math:);/* *查找数学不及格的学生*/ for(i=0;iN;i+) if(stui.score060) printf(tt%st%5.2ft,stui.name,stui.score0); fprintf(fp,tt%st%5.2ft,stui.name,stui.score0); printf(nEnglish:);/*查找英语不及格的学生*/ fprintf(fp,rnEnglish:); for(i=0;iN;i+) if(stui.score160) printf(t%st%5.2ft,stui.name,stui.score1); fprintf(fp,t%st%5.2fr

21、,stui.name,stui.score1); printf(nComputer:);/*查找计算机不及格的学生*/ fprintf(fp,rnComputer:); for(i=0;iN;i+) if(stui.score260) printf(t%st%5.2fnt,stui.name,stui.score2); fprintf(fp,t%st%5.2ft,stui.name,stui.score2); printf(n); fclose(fp);/*关闭文件*/*输出优等生的信息*/void excellent(struct Student stuN) int i,j,k,t,m,a,

22、b,c; j=k=t=m=a=b=c=0; wenjian2();/*打开文件*/ modify(stu); rank(stu); printf(RanktNumbertNamettMathtEnglishtComputertTotaltAveragen); fprintf(fp,rn); fprintf(fp,rnRanktNumbertNamettMathtEnglishtComputertTotaltAveragern); for(i=0;i90) j=1; if(stui.aver85&(stui.score0=100|stui.score1=100|stui.score2=100)

23、k=1; if(stui.score095&stui.score195)|(stui.score095&stui.score295)|(stui.score195&stui.score295) t=1; if(stui.aver85&t) m=1; if(j|k|m)/*优等生平均成绩大于90分;或平均分大于85分且至少有一门功课为100分;或平均分大于85分且至少两门课程成绩为95分以上*/ a=1; if(stui.ranking60&stui.score160&stui.score260) c=1; if(a&b&c)/*必须同时满足三个条件*/ printf(%-4dt%-5dt%st%5.2ft%5.2ft%5.2ft%14.2ft%5.2fn, stui.ranking,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.total,stui.ave

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1