C语言课程设计简易教学管理系统的设计与实现 .doc

上传人:laozhun 文档编号:2384858 上传时间:2023-02-17 格式:DOC 页数:17 大小:210KB
返回 下载 相关 举报
C语言课程设计简易教学管理系统的设计与实现 .doc_第1页
第1页 / 共17页
C语言课程设计简易教学管理系统的设计与实现 .doc_第2页
第2页 / 共17页
C语言课程设计简易教学管理系统的设计与实现 .doc_第3页
第3页 / 共17页
C语言课程设计简易教学管理系统的设计与实现 .doc_第4页
第4页 / 共17页
C语言课程设计简易教学管理系统的设计与实现 .doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《C语言课程设计简易教学管理系统的设计与实现 .doc》由会员分享,可在线阅读,更多相关《C语言课程设计简易教学管理系统的设计与实现 .doc(17页珍藏版)》请在三一办公上搜索。

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,stui.name);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,stui.name); 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,stui.name); 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.name,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,stui.name); 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,stui.name); for(j=0;j=85) for(j=0;j=99) break; printf(%5d%5d%7s,stui.arrange

20、,stui.num,stui.name); 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,stui.name);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,stui.name); 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); for(i=0;iN;i+)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号