C语言课程设计简易教学管理系统的设计与实现_第1页
C语言课程设计简易教学管理系统的设计与实现_第2页
C语言课程设计简易教学管理系统的设计与实现_第3页
C语言课程设计简易教学管理系统的设计与实现_第4页
C语言课程设计简易教学管理系统的设计与实现_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c语言实习报告姓 名:学 号:200702927班 级:化工10705指导老师:完成日期:2009年1月6日1.1题目内容简易教学管理系统的设计与实现 1.2功能要求(1)该系统实现了从已创建的文本文件中读取原始数据并且执行后在屏幕上打印输出文本文件中的原始数据表格。(2)在实现此功能后,该系统通过对函数的调用算出了班上所有学生的加权平均分,并对班上所有学生成绩进行排名。(3)该系统还对每门课程的平均分进行统计,还算出了每门课程的标准差,并对班上所有学生的每门课程分数在60分以下,6070,7080,8090,和90分以上的人数进行统计。(4)该系统还通过写入文件函数使其在指定的路径生成txt

2、文件并且在屏幕上显示出文件内容。(5)该系统通过写入文件函数在指定的路径下生成用来存放学生成绩条的txt文件,并且在屏幕上显示文件中的内容。(6)最后该系统还实现了对不及格学生名单和优等生名单的统计。1.3系统功能模块框图设计教学管理系统1用c语言创建文件,文件名为“huagong10705”,用来存放学生成绩。2分别统计全班每门课程的平均分和标准差,并计算各分数段的人数。4打印每名学生成绩条,结果放到一个数据文件中,文件名为“cjhg10705.txt”。5屏幕显示所有存放 不及格课程的学生的名单。3用c语言创建一个数据文件,文件名为“kec10705.txt”。6屏幕显示优等生名单。1简易

3、教学管理系统2菜单结构图:1用c语言创建文件,文件名为“huagong10705”,用来存放学生成绩。2分别统计全班每门课程的平均分和标准差,并计算各分数段的人数。3用c语言创建一个数据文件,文件名为“kec10705”。4打印每名学生成绩条,结果放到一个数据文件中,文件名为“cjhg10705.txt”。5屏幕显示所有存放 不及格课程的学生的名单。6屏幕显示优等生名单。0退出1.4数据结构说明1、结构体的定义,方便程序设计过程中描述每本书的属性以及统计信息。struct结构体名类型名1结构体成员表1;类型名2结构体成员表2;struct student int arrange; int nu

4、m; char name8; int score6; float ave; stum;struct courseint num;char kechengname8;float xuefen; coursen;类型名n结构体成员表n;结构体变量名表;结构体成员数据类型float 单精度型。由于学生的平均分需要保留一位小数,因此用单精度类型定义。int 整型。由于学生的序号,名次,分数,课程的数量都是整型,因此定义整型变量值。char 字符型。因为学生的姓名,课程的名称都是字符型,因此定义字符型。结构体定义了三个结构体数组name8, score6,kechengname82、#define是宏定

5、义命令,标识符又称宏名。宏定义的作用是用一个简单的标识符(宏名)来代替一个字符串,方便程序的书写,一般格式为:#define 标识符字符串 如程序中:#definem20 #define n 63、float k6=0,y6=0;int c65=0,0,0,0,0,0; 定义全局字符数组,存放学生课程的平均分和标准差,统计成绩的结果,增加了函数的数据通道,在一个函数中修改了全局变量的值到另一个函数中仍然有效。作用范围是从定义的位置开始到本文件结束。4、file *为文件指针名; 如:file*fp;c语言中所有对文件的操作都是通过文件指针进行的。1.5功能及函数调用1函数调用关系图:void

6、main() void read1();void read2();void jiaquan();void write();void arrange();void menu();void averageand();void kec10705();void printchengji();void bujige();void youxiu(); read1();read2(); jiaquan();arrange();menu();2模块功能说明:(1)void read1() /*读文件huagong10705*/ void read1()file *fp;char title80;int i,j

7、;if(fp=fopen(e:作业huagong10705.txt,r)=null)printf(cannot open !);exit(0);fgets(title,80,fp);for(i=0;im;i+)fscanf(fp,%d%s,&stui.num,);for(j=0;jn;j+)fscanf(fp,%d,&stui.scorej);fclose(fp);是读取文件函数,其功能是打开文件并读取文件huagong10705.txt,把关于学生信息的数据到内存中,以便后来引用,函数参数为空,返回值为void类型。 (2) void read2() /*读文件hg1070

8、5*/void read2() file *fp;int k;if(fp=fopen(e:作业hg10705.txt,r)=null) printf(cannot open!);char title280;fgets(title2,40,fp); for(k=0;kn;k+)fscanf(fp,%d%s%f,&coursek.num,coursek.kechengname,&coursek.xuefen); fclose(fp);是读取文件函数,其功能是打开文件并读取文件hg10705.txt,把关于课程信息的数据到内存中,以便后来其他函数调用,其参数为空,返回值为void类型。(3)void

9、 jiaquan() /*求加权平均分*/void jiaquan()int i,j;float s=0.0,sum;for(i=0;in;i+)s+=coursei.xuefen;for(i=0;im;i+)sum=0.0;for(j=0;jn;j+)sum+=stui.scorej*coursej.xuefen;/printf(%f,sum);stui.ave=(int)(sum*10.0/s+0.5)/10.0;是求学生的加权平均分的函数,其功能是算出学生的成绩的加权平均分并保存在内存中,以方便后来其他函数调用,其参数为空,返回值为void类型。 第一个循环用于求总的学分; 第二个是一个

10、双重循环,是用来求成绩的和并求加权平均值。(4)void write() /*输出文件到e:作业wj10705.txt*/ void write() file *fp; int i,j; if(fp=fopen(e:作业wj10705.txt,w)=null) printf(cannot open!); exit(0); fprintf(fp,名次 学号 姓名 物理 c语言 数学 实验 合教 化学 平均分n); for(i=0;im;i+) fprintf(fp,%2d %2d %6s,stui.order,stui.num,); for(j=0;jn;j+) fprintf

11、(fp,%5d,stui.scorej); fprintf(fp,%7.1fn,stui.ave); fclose(fp); 是文件输出函数,其功能是把把学生的成绩信息存到文件e:作业wj10705中,返回值为void类型。(5)void arrange()/*排序*/ void arrange() int i,j,k; for(i=0;im;i+) stui.arrange=1; for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave) stuj.arrange+;/*前面第加一次,名次倒退一名!*/ 是按学生的加权平均值排序的函数,其功能是按照

12、学生的加权平均值由高到低进行排序。函数参数为空,返回值为void类型。for(i=0;im;i+) stui.arrange=1;用来令每个学生的名次相同,均为1,以方便后面的比较。 for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave)将所有的同学一个个分别与其他所有人比较,当其他同学的平均分比该生高时,该生的名次自加1。最后即可得到排名。(6)void averageand() /*统计平均值和标准差,计算分数段的人数*/ void averageand() int i,j; for(j=0;j6;j+) for(i=0;im;i+) kj+

13、=stui.scorej; kj=kj/m; /*算标准差*/ for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj); for(j=0;jn;j+) for(i=0;i=90) cj0+;else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69)cj3+;else if(stui.scorej60) cj4+;是用来算每门课程的平均值及其标准差,统计各分数段的人数,这些结果均放在全局变量中,以方便后来其他函数的调用

14、。for(j=0;j6;j+) for(i=0;im;i+) kj+=stui.scorej; kj=kj/m; 循环算出每门课程的平均值;for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj);循环算出每门课程的标准差;for(j=0;jn;j+) for(i=0;i=90) cj0+;else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69)cj3+; else if(stui.scorej60) cj4+;通过

15、二重循环算出各分数段的人数;(7)void kec10705()/*创建文件存放学生数据文件kec10705*/ void kec10705() file *fp; int i,j; if(fp=fopen(e:作业kec10705.txt,w)=null) printf(cannot open !);exit(0); fprintf(fp,编号 课程名称 课程平均分 标准差 优秀 良好 中等 及格 不及格n); for(i=0;in;i+) fprintf(fp,%3d %6s %7.2f %7.2f ,coursei.num,coursei.coursename,ki,yi); for(j

16、=0;j5;j+) fprintf(fp,%7d,cij); fprintf(fp,n); fclose(fp); 是用来把通过函数void averageand()算得的结果存放到创建的新文件e:作业kec10705.txt中去。(8) void printchengji()/*找印分数条到文件cjhg10705*/ void printchengji() file *fp; int i,j; if(fp=fopen(e:作业cjhg10705.txt,w)=null) printf(cannot open !);exit(0); for(i=0;im;i+) fprintf(fp,名次 学

17、号 姓名 物理 c语言 数学 实验 合教 化学 平均分n); fprintf(fp,%2d%8d%12s ,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%8d,stui.scorej); fprintf(fp,%9.1fnn,stui.ave); fprintf(fp,nn); fclose(fp); 是把每名学生的成绩条打印出来,结果存放到文件e:作业cjhg0705.txt中去。(9) void bujige()/*屏幕上显示所有不及格的学生的名单*/ void bujige() int i,j; printf(不及格

18、的名单如下:nn); printf( 姓名 学号 课程 学分 成绩n); for(i=0;im;i+) for(j=0;jn;j+)if(stui.scorej60) printf(%6s%6d%7s%6.1f%5dn,,stui.num,coursej.kechengname,coursej.arrange,stui.scorej); 是把不及格的学生的名单显示到屏幕上,包括其学号,不及格课程名称,课程的学分及成绩。(10) void youxiu()/*显示优等生的名单*/ void youxiu() int i,j; printf(优等生的名单如下:n); printf

19、( 名次 学号 姓名 物理 c语言 数学 实验 合教 化学 平均分n); for(i=0;i=91) printf(%5d%5d%7s,stui.order,stui.num,); for(j=0;jn;j+) printf(%6d,stui.scorej); printf(%8.1fn,stui.ave); else if(stui.order=4) printf(%5d%5d%7s,stui.order,stui.num,); for(j=0;j=85) for(j=0;j=99) break; printf(%5d%5d%7s,stui.arrange

20、,stui.num,); for(j=0;jn;j+) printf(%6d,stui.scorej); printf(%8.1fn,stui.ave); 是将优等生的名单,含学号,n门课程的成绩,平均分,名次均输出到屏幕上。(11)void menu()/*菜单*/ void menu() int xuanze; int flag=1; do printf(*nn); printf( 学生成绩统计系统简易版nn); printf( * 请选择您所要进行的操作:nn); printf( * 1.创建学生成绩表kec10705!nn); printf( * 2.统计全班每门课程

21、平均分和标准差,并计算各分数段的人数!nn); printf( * 3.创建文件kc10705.txt用于存放操作2中产生的文件!nn); printf( * 4.打印学生成绩条,成绩条存放在文件cjhg10705.txt中!nn); printf( * 5.屏幕显示所有不及格的学生的名单!nn); printf( * 6.屏幕显示优等生的名单!nn); printf( * 0.退出 !nn); printf(*nn); printf( * 请您做出选择:n); scanf(%d,&xuanze); switch(xuanze) case 1:rrite(); printf( 已经创建学生成绩

22、表kec10705 !nn); break; case 2:averageand(); printf( 操作已完成,如果需要具体成绩,请选择3 !nn); break; case 3:kec10705(); printf( 已经创建课程的具体数据到文件kec10705.txt! nn); break; case 4:printchengji(); printf( 已经打印学生的分数条到文件cjhg10705.txt中 !nn); break; case 5:bujige(); break; case 6:youxiu(); break; case 0: printf( 系统即将退出,谢谢使用

23、!nn); flag=0; while(flag=1); 是显示菜单的函数,并可以通过它来调用其他的函数。1.6程序的调试与测试1、测试结果运行程序后出现主菜单界面,如图选择菜单下选择项1后,运行结果如图选择选择菜单下选择项2后,运行结果如图 选择选择菜单下选择项3后,运行结果如图 选择菜单下选择项4后,运行结果如图选择菜单下选择项5后,运行结果如图选择菜单下选择项6后,运选择菜单下选择项0后,运行结果如图课程设计总结通过本次课程设计,心中的感触良多,感觉到了vc编程的灵活性与复杂性,程序的编写还是在于不断地练习,不断地调试,只有这样才能不断地进步。要真正地编写一个系统,会碰到很多困难,不仅要

24、将所学的知识运用到实际中,同时也要有耐心与决心,这次课程设计,我感到既然痛苦又快乐,虽然学习c语言已经有一个学期了,但是自己的知识掌握得并不牢固,而且也没有经验,到了真正实验时,发现了有很多问题需要解决,心中感到很害怕,但是经过指导老师的指导,明白要将整个系统化为一个个功能模块,然后根据需要编写相应的函数,化整为零,一个一个的去实现。在设计过程中,也遇到了许多的问题,比如:刚开刚没有定义全局变量时,用函数调用相应的数据时,发现数据没有定义,后来明白需要扩大变量的作用域,于是将其定义为全局变量;后来定义了全局变量后,结果打印的结果全为零,说明数据没有读进去,经过老师的调试,发现原来又在函数内部重

25、新定义了相同的变量,导致在调用函数时,只将数据存进临时变量中,将其删除后,恢复正常现在想想,问题虽然小,可是要做起来还是有一定的难度的。最后经过几个晚上的奋斗,在指导老师帮助下,最终完成了“简易图书管理系统的设计”。我认为,应该将程序转化为exe文件来运行,那样便于系统的维护与运行。 在这个课程设计中,学到了很多。能够将所学活学活用,这是最令人兴奋的事,我会继续努力学习,学习更多关于vc的知识。能够完成这次的课程设计,再次感谢老师的教诲,以及同学的热情帮助。附录 程序清单/*先定义结构体数组用以存放文件huagong10705与hg10705*/#define m 20#define n 6#

26、include stdio.h#include stdlib.h#include math.hfloat k6=0,y6=0;int c65=0,0,0,0,0,0;struct studentint arrange;int num;char name8;int score6;float ave; stum;struct courseint num;char kechengname8;float xuefen; coursen; void main() void read1();void read2();void jiaquan();void write();void arrange();vo

27、id menu();void averageand();void kec10705();void printchengji();void bujige();void youxiu(); read1();read2(); jiaquan();arrange();menu();/*读文件huagong10705*/ void read1()file *fp;char title80;int i,j;if(fp=fopen(e:作业huagong10705.txt,r)=null)printf(cannot open !);exit(0);fgets(title,80,fp);for(i=0;im;

28、i+)fscanf(fp,%d%s,&stui.num,);for(j=0;jn;j+)fscanf(fp,%d,&stui.scorej);fclose(fp);/*读文件hg10705*/void read2() file *fp;int k;if(fp=fopen(e:作业hg10705.txt,r)=null) printf(cannot open!);char title280;fgets(title2,40,fp); for(k=0;kn;k+)fscanf(fp,%d%s%f,&coursek.num,coursek.kechengname,&coursek.x

29、uefen); fclose(fp);/*求加权平均分*/void jiaquan()int i,j;float s=0.0,sum;for(i=0;in;i+)s+=coursei.arrange;/printf(%f,s);for(i=0;im;i+)sum=0.0;for(j=0;jn;j+)sum+=stui.scorej*coursej.xuefen;/printf(%f,sum);stui.ave=(int)(sum*10.0/s+0.5)/10.0;/*输出文件到c:作业wj10705.txt*/ void write() file *fp; int i,j; if(fp=fop

30、en(e:作业wj10705.txt,w)=null) printf(cannot open!); exit(0); fprintf(fp,名次 学号 姓名 物理 c语言 数学 实验 合教 化学 平均分n); for(i=0;im;i+) fprintf(fp,%2d %2d %6s,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%5d,stui.scorej); fprintf(fp,%7.1fn,stui.ave); fclose(fp); /*排序*/ void arrange() int i,j,k; for(i=0

31、;im;i+) stui.arrange=1; for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave) stuj.arrange+; /*统计平均值和标准差,计算分数段的人数*/ void averageand() int i,j; for(j=0;j6;j+) for(i=0;im;i+) kj+=stui.scorej; kj=kj/m; /*算标准差*/ for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj);for(j=0;jn;j+)f

32、or(i=0;i=90) cj0+; else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69) cj3+; else if(stui.scorej60) cj4+; /*创建文件存放学生数据文件kec10705*/ void kec10705() file *fp; int i,j; if(fp=fopen(e:作业kec10705.txt,w)=null) printf(cannot open !);exit(0); fprintf(fp,编号 课程名称 课程平均分 标准差 优秀 良好 中等 及格 不及格n);

33、for(i=0;in;i+) fprintf(fp,%3d%6s%7.2f %7.2f ,coursei.num,coursei.coursename,ki,yi); for(j=0;j5;j+) fprintf(fp,%7d,cij); fprintf(fp,n); fclose(fp); /*找印分数条到文件cjhg10705*/ void printchengji() file *fp; int i,j; if(fp=fopen(e:作业cjhg10705.txt,w)=null) printf(cannot open !);exit(0); for(i=0;im;i+) fprintf

34、(fp,名次 学号 姓名 物理 c语言 数学 实验 合教 化学 平均分n); fprintf(fp,%2d%8d%12s ,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%8d,stui.scorej); fprintf(fp,%9.1fnn,stui.ave); fprintf(fp,nn); fclose(fp); /*屏幕上显示所有不及格的学生的名单*/ void bujige() int i,j; printf(不及格的名单如下:nn); printf( 姓名 学号 课程 学分 成绩n); for(i=0;im;i+) for(j=0;jn;j+)if(stui.scorej60) printf(%6s%6d%7s%6.1f%5dn,,stui.num,coursej.kechengname,coursej.xuefen,stui.scorej); /*显示优等生的名单*/ void youxiu() int i,j,loop; printf(优等生的名单如下:n); printf( 名次 学号 姓名 物理 c语言 数学 实验 制图 化学 平均分n); for(i=0;i=91) /&stui.arrange=85|s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论