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

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

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

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

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

C语言程序设计课程设计实习报告

长江大学

C语言程序设计课程设计实习报告

题目:

学生成绩管理系统

姓名:

陈桥

学院:

计算机科学学院

专业:

教育技术学

班级:

教技11001

学号:

201003885

指导教师:

马老师康老师

 

2011年12月19日

 

目录

一设计目的…………………………………………………………1

二课程设计摘要…………………………………………………2

三课程设计的任务与数据…………………………………………3

四系统功能模块…………………………………………………4

五详细设计(各功能模块的具体实现算法——流程图)………5

六调试分析(包含各模块的测试用例及测试结果)……………6

七总结……………………………………………………………7

 

一、设计目的

1.进一步熟悉VC6.0的开发环境,掌握基本的编程方法,熟悉用C语言完成一个应用程序的设计过程、掌握有关编辑和调试程序的方法和技巧;

2.主要掌握C语言中的结果提、指针及文件操作等内容;

3.了解开发简单应用程序的全过程,包括:

分析、设计、编程、调试和编写报告。

二、课程设计摘要

第一步原始数据(建立两个数据文件)

1.文件1用来存放学生成绩

2.文件2用来存放课程学分

第二步程序设计思想

1.定义两个结构体数组用来存放文件1和文件2的内容。

2.编写各个函数对应各个应实现的功能。

3.编写第一个函数ReadDat1()读取文件1(jj110014.txt)读取学生成绩

4.编写第二个函数ReadDat2()读取文件2(jj01kc.txt)读取课程学分

5.编写第三个函数pj()计算各个同学的加权平均值

6.编写第四个函数writecj()计算每个同学的名次,同时创建文本文件ksMC110014.txt写入数据,包括各个学生的学号、名次、姓名、各科成绩、加权平均值。

7.

编写第五个函数kc()统计全班每门课程的平均分和标准差,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上的学生人数)。

课程设计的计算公式为:

式中:

y为课程标准差,xi为第i个学生成绩,为本门课程的算术平均成绩,N为学生数。

创建txt文本文件kskcjj110014.txt写入数据,包括课程编号、课程名称、课程学分、标准差、分数段人数统计。

7.编写第六个函数cjt()打印每名学生的成绩条,同时创建txt文本文件kscjt110014.txt写入成绩条内容。

8.编写第七个函数bjg()屏幕显示所有存在不及格课程的学生名单(含学号、不及格课程名称、课程的学分及成绩)。

9.编写第八个函数yxiu()屏幕显示优等生名单(含学号、N门课成绩、平均分、名次)。

三、程序设计的任务与数据

1.原始文件

①用记事本新建一文本文件,文件名为:

“班名+序号”,将本班的M名学生在本学期的N门考试课的成绩(要求用真实的课程名、假想的分数,并要求将自己的学号假定为1,将自己的每门课的分数都定在90分以上,而将别人的每门课的分数都定在95分以下。

)输入到这个文件中,建议按如下形式存放(注:

20≤M≤50、5≤N≤8,下文以M=4,N=3为例):

学号姓名英语C语言数学

1我自己969399

2张某768989

3李某919667

4王某755856

…………

jj110014.txt

②用记事本新建另一文本文件,文件名为:

“班名+KC”,将本班本学期的N门真实的课程名及其学分输入到这个数据文件中,建议按如下列形式存放:

编号课程名称课程学分

1英语6.0

2C语言4.5

3数学5.5

jj01kc.txt

2.课设任务

在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生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.流程图

#include

#include

structstu

{

intnum;

charname[10];

intscore[5];

floatave;

}stu[20];

structkecheng

{

intnum,count[5];

charkcname[10];

floatxuefen,ave;

}course[5];

voidReadDat1()

{

inti,j;

charstr1[100];

FILE*fp;

if((fp=fopen("jj110014.txt","r"))==NULL)

{

printf("Cannotopenthefile1!

\n");

exit(0);

}

fgets(str1,100,fp);

printf("%s",str1);

for(i=0;i<20;i++)

{

fscanf(fp,"%5d%s",&stu[i].num,stu[i].name);

printf("%2d%2s",stu[i].num,stu[i].name);

for(j=0;j<5;j++)

{

fscanf(fp,"%4d",&stu[i].score[j]);

printf("%6d",stu[i].score[j]);

}

printf("\n");

}

fclose(fp);

}

voidReadDat2()

{

FILE*fp;

intk;

charstr2[100];

fp=fopen("jj01kc.txt","r");

fgets(str2,100,fp);

puts(str2);

for(k=0;k<5;k++)

{

fscanf(fp,"%d%s%f",&course[k].num,course[k].kcname,&course[k].xuefen);

printf("%-8d%-10s%f\n",course[k].num,course[k].kcname,course[k].xuefen);

}

fclose(fp);

}

voidpj()

{

inti,j;

floats=0,sum;

for(i=0;i<5;i++)

s+=course[i].xuefen;

for(i=0;i<20;i++)

{

sum=0;

for(j=0;j<5;j++)

sum+=stu[i].score[j]*course[j].xuefen;

stu[i].ave=sum/s;

}

}

voidwritecj()

{

FILE*fp;

inti,j,a[20],k;

for(i=0;i<20;i++)

{

k=1;

for(j=0;j<20;j++)

{

if(stu[i].ave-stu[j].ave<0)

k++;

}

a[i]=k;

}

if((fp=fopen("e:

\ks\MC110014.txt","w"))==NULL)

{

printf("Failetobuildanewfile!

\n");

exit(0);

}

fprintf(fp,"名次学号姓名英语C语言数学体育物理平均成绩\n");

for(i=0;i<20;i++)

{

fprintf(fp,"%3d%4d%7s",a[i],stu[i].num,stu[i].name);

for(j=0;j<5;j++)

fprintf(fp,"%5d",stu[i].score[j]);

fprintf(fp,"%8.2f\n",stu[i].ave);

}

fclose(fp);

}

voidkc()

{

inti,j;

floatb[5],sum[5];

FILE*fp;

for(i=0;i<5;i++)

b[i]=0;

for(j=0;j<5;j++)

{

sum[j]=0;

for(i=0;i<20;i++)

sum[j]+=stu[i].score[j];

}

for(j=0;j<5;j++)

{

for(i=0;i<20;i++)

b[j]+=(stu[i].score[j]-sum[j]/20.0)*(stu[i].score[j]-sum[j]/20.0);

course[j].ave=(float)sqrt((double)b[j]/20.0);

}

for(j=0;j<5;j++)

for(i=0;i<5;i++)

course[j].count[i]=0;

for(j=0;j<5;j++)

{

for(i=0;i<20;i++)

{

if(stu[i].score[j]>=90)

course[j].count[0]++;

elseif(stu[i].score[j]>=80)

course[j].count[1]++;

elseif(stu[i].score[j]>=70)

course[j].count[2]++;

elseif(stu[i].score[j]>=60)

course[j].count[3]++;

elsecourse[j].count[4]++;

}

}

if((fp=fopen("e:

\ks\kcjj110014.txt","w"))==NULL)

{

printf("Failetobuildanewfile!

\n");

exit(0);

}

fprintf(fp,"编号课程名称课程学分标准差优秀良好中等及格不及格\n");

for(i=0;i<5;i++)

{

fprintf(fp,"%-6d%-10s%-7.1f%5.1f",i+1,course[i].kcname,course[i].xuefen,course[i].ave);

for(j=0;j<5;j++)

fprintf(fp,"%5d",course[i].count[j]);

fprintf(fp,"\n");

}

fclose(fp);

}

voidcjt()

{

inti,j,a[20],k;

floats=0,sum;

FILE*fp;

for(i=0;i<5;i++)

s+=course[i].xuefen;

for(i=0;i<20;i++)

{

sum=0;

for(j=0;j<5;j++)

sum+=stu[i].score[j]*course[j].xuefen;

stu[i].ave=sum/s;

}

for(i=0;i<20;i++)

{

k=1;

for(j=0;j<20;j++)

{

if(stu[i].ave-stu[j].ave<0)

k++;

}

a[i]=k;

}

if((fp=fopen("e:

\ks\cjt110014.txt","w"))==NULL)

{

printf("Failetobuildanewfile!

\n");

exit(0);

}

fprintf(fp,"名次学号姓名英语C语言数学体育物理平均成绩\n");

for(i=0;i<20;i++)

{

fprintf(fp,"%3d%4d%7s",a[i],stu[i].num,stu[i].name);

for(j=0;j<5;j++)

fprintf(fp,"%5d",stu[i].score[j]);

fprintf(fp,"%6.2f\n",stu[i].ave);

fprintf(fp,"\n");

while(i!

=19)

{

fprintf(fp,"名次学号姓名英语C语言数学体育物理平均成绩\n");

break;

}

}

fclose(fp);

}

voidbjg()

{

inti,j;

printf("不及格课程学生名单\n");

printf("学号姓名不及格课程名称课程学分课程成绩\n");

for(i=0;i<20;i++)

for(j=0;j<5;j++)

if(stu[i].score[j]<60)

{

printf("%-5d",stu[i].num);

printf("%-8s",stu[i].name);

printf("%7s",course[j].kcname);

printf("%11.1f",course[j].xuefen);

printf("%8d\n",stu[i].score[j]);

}

printf("\n");

}

voidyxiu()

{

inti,j,k,a[20],b[20],c[20];

floats=0,sum;

for(i=0;i<5;i++)

s+=course[i].xuefen;

for(i=0;i<20;i++)

{

sum=0;

for(j=0;j<5;j++)

sum+=stu[i].score[j]*course[j].xuefen;

stu[i].ave=sum/s;

}

for(i=0;i<20;i++)

{

k=1;

for(j=0;j<20;j++)

{

if(stu[i].ave-stu[j].ave<0)

k++;

}

a[i]=k;

}

printf("优等生名单\n");

printf("名次学号姓名英语C语言数学体育物理平均分\n");

for(i=0;i<20;i++)

{

b[i]=0;

c[i]=0;

}

for(j=0;j<20;j++)

{

if(stu[j].ave>=92)

b[j]++;

for(i=0;i<5;i++)

if(stu[j].ave>=88&&stu[j].score[i]>=99)

c[j]++;

}

for(i=0;i<20;i++)

if(a[i]<=5||b[i]||c[i])

{

printf("%-5d",a[i]);

printf("%-5d",stu[i].num);

printf("%-6s",stu[i].name);

for(j=0;j<5;j++)

printf("%-5d",stu[i].score[j]);

printf("%-7.2f\n",stu[i].ave);

}

printf("\n");

}

main()

{

ReadDat1();

ReadDat2();

pj();

writecj();

kc();

cjt();

bjg();

yxiu();

}

六、调试分析(包含各模块的测试用例及测试结果)

源文件

运行结果

C程序新建的文本文件

ksMC110014.txt

Kskcjj110014.txt

Kscjt110014.txt

七、总结

编程题目要求简单易懂,但实际操作却很难,主要是没有理清条理,通过编程各个函数解决各个问题,题目变得简单易操作。

通过编程解决实际问题,掌握了结构体,数组,文件的使用,函数的各个调用,以及顺序结构、选择结构、循环结构的应用。

通过编程,进一步掌握了C语言的实践操作。

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

当前位置:首页 > 小学教育 > 其它课程

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

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