C语言程序设计实验报告.docx
- 文档编号:4373185
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:287.03KB
C语言程序设计实验报告.docx
《C语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验报告
C语言程序设计课程设计
实习报告
院系:
班级:
学号:
姓名:
序号:
指导老师:
实习日期:
2011.12.23
目录
一、系统题目································1
二、系统摘要································1
三、系统设计································1
1、系统功能模块概图···················1
2、菜单结构图·························2
3、数据结构说明·······················2
四、系统实现································4
五、系统使用说明····························4
六、测试数据································5
七、结论····································6
8、附录····································6
一、系统名称
简易教学管理系统的设计与实现
二、系统摘要
在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生N门课的加权平均分(保留1位小数,4舍5入)并按平均分排列名次,平均分相同则名次并列。
然后显示菜单,利用菜单调用各个函数,分别完成如下功能:
1)用C语言创建一个数据文件,文件名为:
“MC+班号+序号”,如信计0901班的12号同学所建的文件名应为:
“MC1090221.txt”。
用来存放班级排名后的成绩表,要求按以下形式存放。
名次学号姓名英语C语言数学……平均成绩
11我自己969399……95.5
32张某768989……80.5
43李某919667……78.2
24王某755856……88.8
55赵某586777……68.5
2)
分别统计全班每门课的平均分和标准差,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上)的学生人数。
课程标准差的计算公式为:
式中:
y为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。
3)用C语言创建一个数据文件,文件名为:
“KC+班号+序号”,hx1090121.txt
编号课程名称课程学分标准差优秀良好中等及格不及格
1英语6.016.831018153
2C语言4.511.71520138
3数学5.518.59121981
4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:
“CJT+班号+序号”,CJT1090221.txt。
5)屏幕显示所有存在不及格课程的学生的名单(含学号、不及格课程名称、课程的学分及成绩)。
6)屏幕显示优等生名单(含学号、N门课成绩、平均分、名次)
优等生条件(只要满足三个条件中的任意一个条件即可):
a)平均分92分
b)名次在本班位于前五名
c)平均分88分,并且至少有一门课的成绩99分
三、系统设计
1、系统功能模块框图
2、菜单结构图
1、创建班级成绩单
2、创建各课程成绩统计
3、打印每名学生成绩条
4、显示不及格学生名单
5、显示优等生名单
6、退出
3、数据结构说明
(1)struct结构体名
{类型名1结构体成员表1;
类型名2结构体成员表2;
}结构体变量名表;
structstudent
{
intrank,num;
charname[15];
intscore[M],Condition[4];
floatave;
}stu[N];
structkecheng
{
intnum,xuefen;
charkcname[20];
floatave;
intcount[5];
}course[M];
(2)#indefine是宏定义命令,标示符又称宏名。
宏定义的作用是用一个简单的标示符来代替一个字符串,方便程序的书写,一般格式为:
#indefine标示符字符串
如:
#defineN24
#defineM5
(3)FILE*文件指针名;
如:
FILE*fp;
C语言中所有对文件的操作都是通过文件指针进行的
四、系统实现
1、函数的实现
第一步原始数据(建立两个数据文件)
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.编写第六个函数Tongji()计算各分数段(60分以下;60~69;70~79;80~89;90分以上的学生人数)。
课程设计的计算公式为:
式中:
y为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。
创建txt文本文件hx1090221.txt写入数据,包括课程编号、课程名称、标准差、分数段人数统计。
7.编写第七个函数cjt()打印每名学生的成绩条,同时创建txt文本文件CJT1090221.txt写入成绩条内容。
8.编写第八个函数Fail()屏幕显示所有存在不及格课程的学生名单(含学号、不及格课程名称、课程的学分及成绩)。
9.编写第九个函数Excellent()屏幕显示优等生名单(含学号、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”,退出。
3、注意事项
如果输入1~6以外的数字,系统则会显示“输入有误”。
六、测试数据
原始数据——学生各课程成绩
原始数据——课程和学分
生成的班级成绩表
生成的各课程统计表
生成的每名学生的成绩条
不及格学生名单和优等生名单
七、结论
通过本次课程设计,我熟练掌握了结构体,数组,文件的使用,函数的各个调用,以及顺序结构、选择结构、循环结构的应用。
通过编程,进一步掌握了C语言的实践操作,来解决实际问题。
编程题目要求简单易懂,但自己实际操作却很难。
主要是开始没有理清思路,后来先将程序模块化。
通过编写各个函数来解决各个问题,题目变得简单易行。
整个程序的编写过程,充分体现了结构化程序设计的自顶向下、逐步求精、模块化的几大原则。
八、附录(程序清单)
#include
#include
#defineN24
#defineM5
structstudent
{
intrank,nums,core[M],Condition[4];
;
charname[15];
floatave;
}stu[N];
structkecheng
{
intnum,xuefen,count[5];;
charkcname[20];
floatave;
}course[M];
voidReadDat1()//读取成绩
{
inti,j;
charstr1[100];
FILE*fp;
if((fp=fopen("c:
\\jj100208.txt","r"))==NULL)
{
printf("Cannotopenthefile1!
\n");
exit(0);
}
fgets(str1,100,fp);
printf("%s",str1);
for(i=0;i { fscanf(fp,"%d%s",&stu[i].num,stu[i].name); printf("%3d%9s",stu[i].num,stu[i].name); for(j=0;j { fscanf(fp,"%d",&stu[i].score[j]); printf("%10d",stu[i].score[j]); } printf("\n"); } fclose(fp); printf("\n"); } voidReadDat2()//读取课程 { FILE*fp; intk; charstr2[100]; fp=fopen("c: \\jj02kc.txt","r"); fgets(str2,100,fp); printf("%6s",str2); for(k=0;k { fscanf(fp,"%d%s%d",&course[k].num,course[k].kcname,&course[k].xuefen); printf("%3d%12s%9d",course[k].num,course[k].kcname,course[k].xuefen); printf("\n"); } fclose(fp); } voidRank()//平均分和名次 { inti,j; floats=0,sum; for(i=0;i s+=course[i].xuefen; for(i=0;i { sum=0; stu[i].rank=1; for(j=0;j sum+=stu[i].score[j]*course[j].xuefen; stu[i].ave=sum/s; } for(i=0;i { for(j=0;j if(stu[j].ave>stu[i].ave) stu[i].rank+=1; } } voidWriteCJ()//打印成绩 { FILE*fp; inti,j; if((fp=fopen("C: \\MC100208.txt","w"))==NULL) { printf("Failtobuildanewfile! \n"); exit(0); } fprintf(fp,"名次学号姓名c语言线性代数普通物理电路与模电摄影技术平均成绩\n"); for(i=0;i { fprintf(fp,"%3d%6d%10s",stu[i].rank,stu[i].num,stu[i].name); for(j=0;j { fprintf(fp,"%10d",stu[i].score[j]); } fprintf(fp,"%11.1f\n",stu[i].ave); } fclose(fp); } voidClass()//标准差和分数段人数 { inti,j,sum[24]; floatb[M]; for(i=0;i for(j=0;j { sum[j]=0; for(i=0;i sum[j]+=stu[i].score[j]; } for(j=0;j { for(i=0;i b[j]+=(stu[i].score[j]-sum[j]/24.0)*(stu[i].score[j]-sum[j]/24.0); course[j].ave=(float)sqrt((double)(b[j]/24.0)); } for(j=0;j for(i=0;i<5;i++) course[j].count[i]=0; for(j=0;j { for(i=0;i { if(stu[i].score[j]>=90)course[j].count[0]+=1; elseif(stu[i].score[j]>=80)course[j].count[1]+=1; elseif(stu[i].score[j]>=70)course[j].count[2]+=1; elseif(stu[i].score[j]>=60)course[j].count[3]+=1; elsecourse[j].count[4]+=1; } } } voidTongji()//课程成绩统计 { inti,j; FILE*fp; if((fp=fopen("c: \\KCjj100208.txt","w"))==NULL) { printf("Failetobuildanewfile! \n"); exit(0); } fprintf(fp,"编号课程名称课程学分标准差优秀良好中等及格不及格\n"); for(i=0;i { fprintf(fp,"%2d%12s%7d%10.1f",i+1,course[i].kcname,course[i].xuefen,course[i].ave); for(j=0;j<5;j++) fprintf(fp,"%6d",course[i].count[j]); fprintf(fp,"\n"); } fclose(fp); } voidcjt()//打印成绩条 { inti,j; FILE*fp; if((fp=fopen("c: \\CJTjj100208.txt","w"))==NULL) { printf("Failetobuildanewfile! \n"); exit(0); } for(i=0;i { fprintf(fp,"\n名次学号姓名C语言线性代数普通物理电路与模电摄影技术平均成绩\n"); fprintf(fp,"%3d%5d%9s",stu[i].rank,stu[i].num,stu[i].name); for(j=0;j fprintf(fp,"%11d",stu[i].score[j]); fprintf(fp,"%12.1f",stu[i].ave); fprintf(fp,"\n"); } fclose(fp); } voidFail()//不及格学生名单 { inti,j; printf("\n不及格学生名单\n"); printf("\n学号姓名不及格课程名称课程学分课程成绩\n"); for(i=0;i for(j=0;j if(stu[i].score[j]<60) { printf("%-5d",stu[i].num); printf("%6s",stu[i].name); printf("%12s",course[j].kcname); printf("%11.1f",course[j].xuefen); printf("%9d\n",stu[i].score[j]); } printf("\n"); } voidExcellent()//优等生名单 { inti,j; floats=0,sum; for(i=0;i s+=course[i].xuefen; for(i=0;i { sum=0; stu[i].rank=1; for(j=0;j sum+=stu[i].score[j]*course[j].xuefen; stu[i].ave=sum/s; } for(i=0;i { for(j=0;j if(stu[j].ave>stu[i].ave)stu[i].rank+=1; } printf("\n优等生名单\n"); printf("\n学号姓名C语言线性代数普通物理电路与模电摄影技术平均分名次\n"); for(i=0;i for(j=0;j<4;j++) stu[i].Condition[j]=0; for(i=0;i { if(stu[i].ave>=92) stu[i].Condition[0]=1; elseif(stu[i].rank<=5)stu[i].Condition[1]=1; elseif(stu[i].ave>=88)stu[i].Condition[2]=1; for(j=0;j { if(stu[i].score[j]>=99)break; stu[i].Condition[3]=1; } } for(i=0;i if(stu[i].Condition[0]||stu[i].Condition[1]||(stu[i].Condition[2]&&stu[i].Condition[3])) { printf("%-5d",stu[i].num); printf("%-9s",stu[i].name); for(j=0;j<5;j++) printf("%-10d",stu[i].score[j]); printf("%-7.1f",stu[i].ave); printf("%-6d\n",stu[i].rank); } printf("\n"); } voidmainmenu() { intn; printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"); printf("\n简易教学管理系统\n"); printf("\n1.创建班级成绩单2.创建各课程成绩统计3.打印每名学生成绩条\n"); printf("4.显示不及格学生名单5.显示优等生名单6.退出\n"); printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n"); while (1) { printf("查询: "); scanf("%d",&n); switch(n) { case1: Rank();WriteCJ();break; case2: Class();Tongji();break; case3: cjt();break; case4: Fail();break; case5: Excellent();break; case6: exit(0); default: printf("输入有误! \n");break; } } } voidmain() { ReadDat1(); ReadDat2(); mainmenu(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 实验 报告