C语言程序设计实验报告.docx

上传人:b****6 文档编号:4373185 上传时间:2022-12-01 格式:DOCX 页数:21 大小:287.03KB
下载 相关 举报
C语言程序设计实验报告.docx_第1页
第1页 / 共21页
C语言程序设计实验报告.docx_第2页
第2页 / 共21页
C语言程序设计实验报告.docx_第3页
第3页 / 共21页
C语言程序设计实验报告.docx_第4页
第4页 / 共21页
C语言程序设计实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C语言程序设计实验报告.docx

《C语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

C语言程序设计实验报告.docx

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();

}

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

当前位置:首页 > 高中教育 > 初中教育

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

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