1、C语言程序设计实验报告C语言程序设计课程设计实习报告院系:班级:学号:姓名:序号:指导老师: 实习日期:2011.12.23 目 录一、系统题目1二、系统摘要1三、系统设计1 1、系统功能模块概图1 2、菜单结构图2 3、数据结构说明2四、系统实现4五、系统使用说明4六、测试数据5七、结论68、附录6一、系统名称 简易教学管理系统的设计与实现二、系统摘要 在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生N门课的加权平均分(保留1位小数,4舍5入)并按平均分排列名次,平均分相同则名次并列。然后显示菜单,利用菜单调用各个函数,分别完成如下功能: 1) 用C
2、语言创建一个数据文件,文件名为:“MC+班号+序号”,如信计0901班的12号同学所建的文件名应为:“MC1090221.txt”。用来存放班级排名后的成绩表,要求按以下形式存放。 名次 学号 姓名 英语 C语言 数学 平均成绩 1 1 我自己 96 93 99 95.5 3 2 张某 76 89 89 80.5 4 3 李某 91 96 67 78.2 2 4 王某 75 58 56 88.8 5 5 赵某 58 67 77 68.5 2) 分别统计全班每门课的平均分和标准差,并计算各分数段(60分以下;6069;7079;8089;90分以上)的学生人数。 课程标准差的计算公式为:式中:y
3、为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。3) 用C语言创建一个数据文件,文件名为:“KC+班号+序号”, hx1090121.txt 编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格1 英语 6.0 16.8 3 10 18 15 3 2 C语言 4.5 11.7 1 5 20 13 83 数学 5.5 18.5 9 12 19 8 14) 打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:“CJT+班号+序号”, CJT1090221.txt。5) 屏幕显示所有存在不及格课程的学生的名单(含学号、不及格课程名称、课程的学分
4、及成绩)。6) 屏幕显示优等生名单(含学号、门课成绩、平均分、名次) 优等生条件(只要满足三个条件中的任意一个条件即可):a) 平均分 92分b) 名次在本班位于前五名c) 平均分 88分,并且至少有一门课的成绩 99分三、系统设计1、系统功能模块框图 2、菜单结构图 1、创建班级成绩单 2、创建各课程成绩统计 3、打印每名学生成绩条 4、显示不及格学生名单 5、显示优等生名单 6、退出3、数据结构说明 (1)struct 结构体名 类型名1 结构体成员表1; 类型名2 结构体成员表2; 结构体变量名表; struct student int rank,num; char name15; in
5、t scoreM,Condition4; float ave;stuN;struct kecheng int num,xuefen; char kcname20; float ave; int count5;courseM; (2)#indefine是宏定义命令,标示符又称宏名。宏定义的作用是用一个简单的标示符来代替一个字符串,方便程序的书写,一般格式为: #indefine 标示符 字符串 如:#define N 24 #define M 5 (3)FILE *文件指针名; 如:FILE *fp; C语言中所有对文件的操作都是通过文件指针进行的四、系统实现1、函数的实现 第一步 原始数据(建
6、立两个数据文件)1. 文件1用来存放学生成绩2. 文件2用来存放课程学分 第二步 系统设计1. 定义两个结构体数组用来存放文件1和文件2的内容。2. 编写第一个函数ReadDat1( )读取文件1(jj100208.txt)读取学生成绩。3. 编写第二个函数ReadDat2( )读取文件2(jj02kc.txt)读取课程学分。4. 编写第三个函数Rank( )计算各个同学的加权平均值和名次。5. 编写第四个函数WriteCJ( )创建文本文件MC1090221.txt写入数据,包括各个学生的名次、学号、姓名、各科成绩、加权平均值。6. 编写第五个函数Class( )统计全班每门课程的平均分和标
7、准差。7. 编写第六个函数Tongji( )计算各分数段(60分以下;6069;7079;8089;90分以上的学生人数)。课程设计的计算公式为: 式中:y为课程标准差,xi 为第i个学生成绩, 为本门课程的算术平均成绩,N为学生数。 创建txt文本文件hx1090221.txt写入数据,包括课程编号、课程名称、标准差、分数段人数统计。7编写第七个函数cjt( )打印每名学生的成绩条,同时创建txt文本文件CJT1090221.txt写入成绩条内容。8编写第八个函数Fail( )屏幕显示所有存在不及格课程的学生名单(含学号、不及格课程名称、课程的学分及成绩)。9编写第九个函数Excellent
8、( )屏幕显示优等生名单(含学号、N门课程成绩、平均分、名次)。2、流程图函数1:读取原始数据 主菜单函数7:屏幕显示不及格学生名单函数8:屏幕显示优等生名单函数6:打印每名学生成绩条函数2:计算平均分并排名函数4:计算课程平均分和标准差函数5:进行分数段人数统计,并打印函数3:打印成绩表5、系统的使用说明1、系统的主菜单2、在“查询”的位置,用户根据自己的需求,输入对应的数字。 (1)输入“1”,创建班级成绩单。 (2)输入“2”,创建各课程成绩统计。 (3)输入“3”,打印每名学生成绩条。 (4)输入“4”,显示不不及格学生名单。 (5)输入“5”,显示优等生名单。 (6)输入“6”,退出
9、。3、注意事项 如果输入16以外的数字,系统则会显示“输入有误”。六、测试数据原始数据学生各课程成绩原始数据课程和学分生成的班级成绩表生成的各课程统计表生成的每名学生的成绩条不及格学生名单和优等生名单七、结论通过本次课程设计,我熟练掌握了结构体,数组,文件的使用,函数的各个调用,以及顺序结构、选择结构、循环结构的应用。通过编程,进一步掌握了C语言的实践操作,来解决实际问题。编程题目要求简单易懂,但自己实际操作却很难。主要是开始没有理清思路,后来先将程序模块化。通过编写各个函数来解决各个问题,题目变得简单易行。整个程序的编写过程,充分体现了结构化程序设计的自顶向下、逐步求精、模块化的几大原则。八
10、、附录(程序清单)#include #include #define N 24#define M 5struct student int rank,nums,coreM,Condition4; char name15; float ave;stuN;struct kecheng int num,xuefen,count5; char kcname20; float ave;courseM;void ReadDat1() /读取成绩 int i,j; char str1100; FILE *fp; if(fp=fopen(c:jj100208.txt,r)=NULL) printf(Cannot
11、 open the file1!n); exit(0); fgets(str1,100,fp); printf(%s,str1); for(i=0;iN;i+) fscanf(fp,%d%s,&stui.num,stui.name); printf(%3d%9s,stui.num,stui.name); for(j=0;jM;j+) fscanf(fp,%d,&stui.scorej); printf(%10d,stui.scorej); printf(n); fclose(fp); printf(n);void ReadDat2() /读取课程 FILE *fp; int k; char s
12、tr2100; fp=fopen(c:jj02kc.txt,r); fgets(str2,100,fp); printf(%6s,str2); for(k=0;kM;k+) fscanf(fp,%d%s%d,&coursek.num,coursek.kcname,&coursek.xuefen); printf(%3d%12s%9d,coursek.num,coursek.kcname,coursek.xuefen); printf(n); fclose(fp);void Rank() /平均分和名次 int i,j; float s=0,sum; for(i=0;iM;i+) s+=cour
13、sei.xuefen; for(i=0;iN;i+) sum=0; stui.rank=1; for(j=0;jM;j+) sum+=stui.scorej*coursej.xuefen; stui.ave=sum/s; for(i=0;iN;i+) for(j=0;jstui.ave) stui.rank+=1; void WriteCJ() /打印成绩 FILE *fp; int i,j; if(fp=fopen(C:MC100208.txt,w)=NULL) printf(Fail to build a new file!n); exit(0); fprintf(fp,名次 学号 姓名
14、c语言 线性代数 普通物理 电路与模电 摄影技术 平均成绩n); for(i=0;iN;i+) fprintf(fp,%3d%6d%10s,stui.rank,stui.num,stui.name); for(j=0;jM;j+) fprintf(fp,%10d,stui.scorej); fprintf(fp,%11.1fn,stui.ave); fclose(fp);void Class() /标准差和分数段人数 int i,j,sum24; float bM; for(i=0;iM;i+) bi=0; for(j=0;jM;j+) sumj=0; for(i=0;iN;i+) sumj+
15、=stui.scorej; for(j=0;jM;j+) for(i=0;iN;i+) bj+=(stui.scorej-sumj/24.0)*(stui.scorej-sumj/24.0); coursej.ave=(float)sqrt(double)(bj/24.0); for(j=0;jM;j+) for(i=0;i5;i+) coursej.counti=0; for(j=0;jM;j+) for(i=0;i=90) coursej.count0+=1; else if(stui.scorej=80) coursej.count1+=1; else if(stui.scorej=70
16、) coursej.count2+=1; else if(stui.scorej=60) coursej.count3+=1; else coursej.count4+=1; void Tongji() /课程成绩统计 int i,j; FILE *fp; if(fp=fopen(c:KCjj100208.txt,w)=NULL) printf(Faile to build a new file!n); exit(0); fprintf(fp,编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格n); for(i=0;iM;i+) fprintf(fp,%2d%12s%7d%10.
17、1f,i+1,coursei.kcname,coursei.xuefen,coursei.ave); for(j=0;j5;j+) fprintf(fp,%6d,coursei.countj); fprintf(fp,n); fclose(fp);void cjt() /打印成绩条 int i,j; FILE *fp; if(fp=fopen(c:CJTjj100208.txt,w)=NULL) printf(Faile to build a new file!n); exit(0); for(i=0;iN;i+) fprintf(fp,n名次 学号 姓名 C语言 线性代数 普通物理 电路与模
18、电 摄影技术 平均成绩n); fprintf(fp,%3d%5d%9s,stui.rank,stui.num,stui.name); for(j=0;jM;j+) fprintf(fp,%11d,stui.scorej); fprintf(fp,%12.1f,stui.ave); fprintf(fp,n); fclose(fp);void Fail() /不及格学生名单 int i,j; printf(n 不及格学生名单n); printf(n学号 姓名 不及格课程名称 课程学分 课程成绩n); for(i=0;iN;i+) for(j=0;jM;j+) if(stui.scorej60)
19、printf(%-5d,stui.num); printf(%6s,stui.name); printf(%12s,coursej.kcname); printf(%11.1f,coursej.xuefen); printf(%9dn,stui.scorej); printf(n);void Excellent() /优等生名单 int i,j; float s=0,sum; for(i=0;iM;i+) s+=coursei.xuefen; for(i=0;iN;i+) sum=0; stui.rank=1; for(j=0;jM;j+) sum+=stui.scorej*coursej.x
20、uefen; stui.ave=sum/s; for(i=0;iN;i+) for(j=0;jstui.ave)stui.rank+=1; printf(n 优等生名单n); printf(n学号 姓名 C语言 线性代数 普通物理 电路与模电 摄影技术 平均分 名次n); for(i=0;iN;i+) for(j=0;j4;j+) stui.Conditionj=0; for(i=0;i=92) stui.Condition0=1; else if(stui.rank=88) stui.Condition2=1; for(j=0;j=99)break; stui.Condition3=1; f
21、or(i=0;iN;i+) if(stui.Condition0|stui.Condition1|(stui.Condition2&stui.Condition3) printf(%-5d,stui.num); printf(%-9s,stui.name); for(j=0;j5;j+) printf(%-10d,stui.scorej); printf(%-7.1f,stui.ave); printf(%-6dn,stui.rank); printf(n);void mainmenu() int n; printf(n&); printf(n 简易教学管理系统n); printf(n 1.创
22、建班级成绩单 2.创建各课程成绩统计 3.打印每名学生成绩条n); printf( 4.显示不及格学生名单 5.显示优等生名单 6.退出n); printf(n&n); while(1) printf(查询:); scanf(%d,&n); switch(n) case 1:Rank();WriteCJ();break; case 2:Class();Tongji();break; case 3:cjt();break; case 4:Fail();break; case 5:Excellent();break; case 6:exit(0); default:printf( 输入有误!n);break; void main() ReadDat1(); ReadDat2(); mainmenu();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1