C语言程序设计课程设计实习报告.docx
- 文档编号:6715599
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:20
- 大小:346.28KB
C语言程序设计课程设计实习报告.docx
《C语言程序设计课程设计实习报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计实习报告.docx(20页珍藏版)》请在冰豆网上搜索。
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 我自己 96 93 99
2 张某 76 89 89
3 李某 91 9667
4 王某 75 58 56
…………
jj110014.txt
②用记事本新建另一文本文件,文件名为:
“班名+KC”,将本班本学期的N门真实的课程名及其学分输入到这个数据文件中,建议按如下列形式存放:
编号 课程名称 课程学分
1 英语 6.0
2 C语言 4。
5
3 数学 5。
5
jj01kc。
txt
2。
课设任务
在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并根据以上内容计算每个学生N门课的加权平均分(保留1位小数,4舍5入),并按平均分排列名次,平均分相同则名次并列。
然后显示菜单,利用菜单调用各个函数,分别完成如下功能:
1)用C语言创建一个数据文件,文件名为:
“MC+班号+序号”,如信计0901班的12号同学所建的文件名应为:
“MC1090221.txt”。
用来存放班级排名后的成绩表,要求按以下形式存放。
名次 学号姓名 英语 C语言数学……平均成绩
1 1 我自己 96 93 99 ……95。
5
3 2 张某 76 89 89 ……80。
5
4 3 李某91 9667 ……78.2
2 4 王某 75 58 56 ……88.8
5 5 赵某58 67 77 ……68.5
2)
分别统计全班每门课的平均分和标准差,并计算各分数段(60分以下;60~69;70~79;80~89;90分以上)的学生人数。
课程标准差的计算公式为:
式中:
y为课程标准差,xi为第i个学生成绩, 为本门课程的算术平均成绩,N为学生数.
3)用C语言创建一个数据文件,文件名为:
“KC+班号+序号”,hx1090121。
txt
编号 课程名称课程学分标准差 优秀 良好 中等 及格不及格
1 英语 6。
0 16.8 3 10 18 153
2 C语言 4.5 11。
7 1520138
3 数学 5。
5 18.5 912 19 8 1
4)打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名为:
“CJT+班号+序号”,CJT1090221。
txt。
成绩条的格式自定。
5)屏幕显示所有存在不及格课程的学生的名单(含学号、不及格课程名称、课程的学分及成绩).
6)屏幕显示优等生名单(含学号、N门课成绩、平均分、名次)
优等生条件(只要满足三个条件中的任意一个条件即可):
a)平均分≥92分
b)名次在本班位于前五名
c)平均分≥88分,并且至少有一门课的成绩 ≥99分
四、系统功能模块
五、详细设计(各功能模块的具体实现算法-—流程图)
1.流程图ﻩ
#include 〈stdio.h〉
#include<math.h〉
structstu
{
ﻩintnum;
charname[10];
intscore[5];
float ave;
}stu[20];
struct kecheng
{
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);
}
void pj()
{
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;
ﻩ}
}
void writecj()
{
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(”Faile tobuild a newfile!
\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);
}
void kc()
{
ﻩint i,j;
float b[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]++;
ﻩﻩﻩﻩelse if(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("Failetobuild anew file!
\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);
}
void bjg()
{
ﻩ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];
ﻩfloat s=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语言的实践操作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课程设计 实习 报告