当前位置:首页 >> 其它考试 >>

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


长江大学 计算机上机实习报告

题 姓 学 专 班 学

目: 名: 院: 业: 级: 号:

学生成绩管理系统
吴磊 化学与环境工程 化学 化学 10902 200903117 熊老师

指导教师:

2010 年 12 月 27 日


/>一



设计目的…………………………………………………………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(hx1090221.txt)读取学生成绩 4. 编写第二个函数 ReadDat2( )读取文件 2(hx02KC.txt)读取课程学分 5. 编写第三个函数 function1( )计算各个同学的加权平均值和名次,同时创建 txt 文本文件 MC1090221.txt 写入数据,包括各个学生的学号、名次、姓名、 各科成绩、加权平均值。 6. 编写第四个函数 function2( )统计全班每门课程的平均分和标准差,并计算 各分数段(60 分以下;60~69;70~79;80~89;90 分以上的学生人数) 。课 程设计的计算公式为:
式中:y 为课程标准差,xi 为第 i 个学生成绩, 为本门课程的 算术平均成绩,N 为学生数。 创建 txt 文本文件 hx1090221.txt 写入数据,包括课程编号、课 程名称、标准差、分数段人数统计。
N

y=


i =1

( xi ? x ) 2 N

7.编写第五个函数 function3( )打印每名学生的成绩条,同时创建 txt 文本文 件 CJT1090221.txt 写入成绩条内容。 8.编写第六个函数 function4( )屏幕显示所有存在不及格课程的学生名单(含 学号、不及格课程名称、课程的学分及成绩) 。 9.编写第七个函数 function5( )屏幕显示优等生名单(含学号、N 门课程成绩、 平均分、名次) 。 三、程序设计的任务与数据 1.原始文件 ①用记事本新建一文本文件,文件名为: “班名+序号” ,将本班的 M 名学生 在本学期的 N 门考试课的成绩(要求用真实的课程名、假想的分数,并要求将 自己的学号假定为 1,将自己的每门课的分数都定在 90 分以上,而将别人的每 门课的分数都定在 95 分以下。 )输入到这个文件中,建议按如下形式存放(注:20 ≤M≤50、5≤N≤8,下文以 M=4,N=3 为例):

学号 姓名 1 我自己 2 张某 李某 3 4 王某 ………… hx1090221.txt

英语 96 76 91 75

C 语言 93 89 96 58

数学 99 89 67 56

② 用记事本新建另一文本文件,文件名为: “班名+KC” ,将本班本学期的 N 门真实的课 程名及其学分输入到这个数据文件中,建议按如下列形式存放: 编号 课程名称 课程学分 1 英语 6.0 2 C 语言 4.5 3 数学 5.5

hx02KC.txt

2.课设任务

在主函数中读入两个原始数据文件的内容,保存在对应的结构体数组中,并 根据以上内容计算每个学生 N 门课的加权平均分 (保留 1 位小数, 舍 5 入) 4 , 并按平均分排列名次,平均分相同则名次并列。然后显示菜单,利用菜单调 用各个函数,分别完成如下功能: 1) 用C语言创建一个数据文件,文件名为: “MC+班号+序号” ,如信计0901班 “MC1090221.txt” 。用来存放班级排名后的 的12号同学所建的文件名应为: 成绩表,要求按以下形式存放。 名次 学号 姓名 英语 C 语言 数学 ……平均成绩 1 1 我自己 96 93 99 …… 95.5 3 2 张某 76 89 89 …… 80.5 李某 91 96 67 …… 78.2 4 3 2 4 王某 75 58 56 …… 88.8 5 5 赵某 58 67 77 …… 68.5 N 2) 分别统计全班每门课的平均分和标准差,并计算各分数 ∑ ( xi ? x ) 2 段(60分以下;60~69;70~79;80~89;90分以上) y = i =1 的学生人数。 N x 课程标准差的计算公式为: 式中:y 为课程标准差,xi 为第 i 个学生成绩, 为本门课程的算术平均 成绩,N 为学生数。 “KC+班号+序号” hx1090121.txt , 3) 用C语言创建一个数据文件,文件名为: 编号 课程名称 课程学分 标准差 优秀 良好 中等 及格 不及格 英语 6.0 16.8 3 10 18 15 3 1 2 C 语言 4.5 11.7 1 5 20 13 8 3 数学 5.5 18.5 9 12 19 8 1 4) 打印每名学生成绩条,结果存放到用C语言创建的一个数据文件中,文件名 为: “CJT+班号+序号” CJT1090221.txt。成绩条的格式自定。 , 5) 屏幕显示所有存在不及格课程的学生的名单(含学号、不及格课程名称、课 程的学分及成绩) 。 6) 屏幕显示优等生名单(含学号、N门课成绩、平均分、名次) 优等生条件(只要满足三个条件中的任意一个条件即可) : a) 平均分 ≥ 92分 b) 名次在本班位于前五名 c) 平均分 ≥ 88分,并且至少有一门课的成绩 ≥ 99分 四、系统功能模块 模块二: 统计全班每门课的平 模块三: 打印每名 模块一:计 均分和标准差,并计算各分 学生成绩条,结 算加权平 数段(60 分以下;60~69; 果存放到用 C 语 均值,并排 70~79; 80~89; 分以上) 90 言创建的一个数 序 的学生人数。创建一个数据 据文件中,文件 文 件 , 文 件 名 为 : 名 hx1090121.txt CJT1090221.txt

主函数

模块四: 屏幕显示

所有存在不及格 课程的学生的名 单 五、详细设计(各功能模块的具体实现算法——流程图) 1.流程图

模块五:屏幕显 示优等生名单

2.源程序清单 #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 20 #define M 5 struct student { int num; char name[15]; int score[M],Condition[4]; float jqave;

int rank; }stu[N]; struct kecheng { int num; char kcname[20]; float xuefen,ave; int count[5]; }course[M]; void ReadDat1() { printf("读入原始数据文件“hx1090221”\n"); int i,j; char str1[100]; FILE *fp; if((fp=fopen("d:\\hx1090221.txt","r"))==NULL) { printf("Cannot open the file1!\n"); exit(0); }fgets(str1,100,fp); printf("%s",str1); for(i=0;i<N;i++) { fscanf(fp,"%d%s",&stu[i].num,stu[i].name); printf("%4d%10s",stu[i].num,stu[i].name); for(j=0;j<M;j++) { fscanf(fp,"%d",&stu[i].score[j]); printf("%9d",stu[i].score[j]); } printf("\n"); } fclose(fp); } void ReadDat2() { printf("读入原始文件“hx02KC”\n"); FILE *fp; int k; char str2[100]; fp=fopen("d:\\hx02KC.txt","r"); fgets(str2,100,fp); puts(str2); for(k=0;k<M;k++)

{ fscanf(fp,"%d%s%f",&course[k].num,course[k].kcname,&course[k].xuefen); printf("%-8d%-10s%10.1f\n",course[k].num,course[k].kcname,course[k].xuefen); } printf("\n"); fclose(fp); } void function1() { int i,j; float s=0,sum; for(i=0;i<M;i++) s+=course[i].xuefen; for(i=0;i<N;i++) { sum=0; stu[i].rank=1; for(j=0;j<M;j++) sum+=stu[i].score[j]*course[j].xuefen; stu[i].jqave=sum/s; } for(i=0;i<N;i++) { for(j=0;j<N;j++) if(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; } FILE *fp; if((fp=fopen("d:\\MC1090221.txt","w"))==NULL) { printf("Faile to build a new file!\n"); exit(0); } printf("创建 MC1090221.txt 数据文件\n"); printf("名次 学号 姓名 英语 C 语言 数学 物理 化学 平均成绩\n"); fprintf(fp,"名次 学号 姓名 英语 C 语言 数学 物理 化学 平均成绩\n"); for(i=0;i<N;i++) { printf("%3d%4d%7s",stu[i].rank,stu[i].num,stu[i].name); fprintf(fp,"%3d%4d%7s",stu[i].rank,stu[i].num,stu[i].name); for(j=0;j<M;j++) { printf("%5d",stu[i].score[j]); fprintf(fp,"%5d",stu[i].score[j]);

} printf("%6.1f\n",stu[i].jqave); fprintf(fp,"%6.1f\n",stu[i].jqave); } printf("\n"); fclose(fp); } void function2() { int i,j; float b[M]; for(i=0;i<M;i++) b[i]=0; float sum[M]; for(j=0;j<M;j++) { sum[j]=0; for(i=0;i<N;i++) sum[j]+=stu[i].score[j]; } for(j=0;j<M;j++) { for(i=0;i<N;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<M;j++) for(i=0;i<5;i++) course[j].count[i]=0; for(j=0;j<M;j++) { for(i=0;i<N;i++) { if(stu[i].score[j]>=90) course[j].count[0]+=1; else if(stu[i].score[j]>=80) course[j].count[1]+=1; else if(stu[i].score[j]>=70) course[j].count[2]+=1; else if(stu[i].score[j]>=60) course[j].count[3]+=1; else course[j].count[4]+=1; } } FILE *fp; if((fp=fopen("d:\\KC1090221.txt","w"))==NULL) { printf("Faile to build a new file!\n");

exit(0); } fprintf(fp,"编号 课程名称 及格\n"); for(i=0;i<M;i++) {

课程学分

标准差 优秀 良好 中等 及格 不

fprintf(fp,"%-6d%-10s%-7.1f%7.1f",i+1,course[i].kcname,course[i].xuefen,cours e[i].ave); for(j=0;j<5;j++) fprintf(fp,"%5d",course[i].count[j]); fprintf(fp,"\n"); } fclose(fp); } void function3() { int i,j; float s=0,sum; for(i=0;i<M;i++) s+=course[i].xuefen; for(i=0;i<N;i++) { sum=0; stu[i].rank=1; for(j=0;j<M;j++) sum+=stu[i].score[j]*course[j].xuefen; stu[i].jqave=sum/s; } for(i=0;i<N;i++) { for(j=0;j<N;j++) if(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; } FILE *fp; if((fp=fopen("d:\\CJT1090221.txt","w"))==NULL) { printf("Faile to build a new file!\n"); exit(0); } for(i=0;i<N;i++) { fprintf(fp,"名次 学号 姓名 英语 C 语言 数学 物理 化学 平均成绩\n"); fprintf(fp,"%3d%4d%7s",stu[i].rank,stu[i].num,stu[i].name);

for(j=0;j<M;j++) fprintf(fp,"%5d",stu[i].score[j]); fprintf(fp,"%6.1f\n",stu[i].jqave); fprintf(fp,"\n"); } fclose(fp); } void function4() { int i,j; printf("不及格课程学生名单\n"); printf("学号 姓名 不及格课程名称 课程学分 for(i=0;i<N;i++) for(j=0;j<M;j++) if(stu[i].score[j]<60) { printf("%-5d",stu[i].num); printf("%-8s",stu[i].name); printf("%10s",course[j].kcname); printf("%12.1f",course[j].xuefen); printf("%8d\n",stu[i].score[j]); } printf("\n"); } void function5() { int i,j; float s=0,sum; for(i=0;i<M;i++) s+=course[i].xuefen; for(i=0;i<N;i++) { sum=0; stu[i].rank=1; for(j=0;j<M;j++) sum+=stu[i].score[j]*course[j].xuefen; stu[i].jqave=sum/s; } for(i=0;i<N;i++) { for(j=0;j<N;j++) if(stu[j].jqave>stu[i].jqave)stu[i].rank+=1; } printf("优等生名单\n");

课程成绩\n");



printf("学号 学号 姓名 英语 C 语言 数学 物理 名次\n"); for(i=0;i<N;i++) for(j=0;j<4;j++) stu[i].Condition[j]=0; for(i=0;i<N;i++) { if(stu[i].jqave>=92) stu[i].Condition[0]=1; else if(stu[i].rank<=5) stu[i].Condition[1]=1; else if(stu[i].jqave>=88) stu[i].Condition[2]=1; for(j=0;j<M;j++) { if(stu[i].score[j]>=99)break; stu[i].Condition[3]=1; } } for(i=0;i<N;i++)

化学

平均

if(stu[i].Condition[0]||stu[i].Condition[1]||(stu[i].Condition[2]&&stu[i].Condition [3])) { printf("%-5d",stu[i].num); printf("%-10s",stu[i].name); for(j=0;j<5;j++) printf("%-8d",stu[i].score[j]); printf("%-8.1f",stu[i].jqave); printf("%-5d\n",stu[i].rank); } printf("\n"); } void main() { ReadDat1(); ReadDat2(); function1(); function2(); function3(); function4(); function5(); } 六、调试分析(包含各模块的测试用例及测试结果) 源文件

运行结果

C 程序新建的文本文件 MC1090221.txt

KC1090221.txt

CJT1090221.txt

七、总结 编程题目要求简单易懂,但实际操作却很难,主要是没有理清条理,通过编程各 个函数解决各个问题,题目变得简单易操作。通过编程解决实际问题,掌握了结 构体,数组,文件的使用,函数的各个调用,以及顺序结构、选择结构、循环结 构的应用。通过编程,进一步掌握了 C 语言的实践操作。


相关文章:
《C语言程序设计实践》课程报告
C语言程序设计实践课程报告_工学_高等教育_教育专区。C语言复习资料 北方民族大学 课课 程 程名 称: 报程序设计实践 软件工程(2)班 李思良 20152170 王晓...
长江大学工程技术学院C语言课程设计实习报告
长江大学工程技术学院 C 语言课程设计实习报告 学生成绩管理系统的设计 学生姓名:熊奇 学号:201160255 专业班级:测控 61101 指导老师:孟宪婷 报告日期:2012 年 7 ...
C语言课程设计实习报告
C 语言课程设计实习报告 班级:83121 姓名:张弛 学号:20121000491 2014-1 题目一、 题目描述: 已知银行整存整取存款不同期限的月息利率(采用复利 方式,即利滚利)...
C语言课程设计__学生选课系统实习报告
C语言课程设计__学生选课系统实习报告_工学_高等教育_教育专区。C 语言上机实习...编写程序代码,调试程序使其能正确运行,并且可以实现预期的功能; 设计完成的软件要...
C语言课程设计实习报告
C 语言课程设计实习报告 学姓班 号名级 : 201505987 :廖伯黎龙霞: 数学 1502 指导老师: 何 完成日期: 2016.06.16 学生成绩管理系统 一、摘要 二、系统设计...
C语言课程设计实习报告
长江大学工程技术学院 C 语言课程设计实习报告 学生成绩管理系统 学生姓名:潘志坤 学号:201160139 班类序号:14 专业班级:应化 61101 指导老师:孟宪婷 报告日期: ...
《C语言程序设计》实习报告
重庆城市管理职业学院 《C 语言程序设计实习报告 班专学 级业号 软件 A1501 软件技术 学生姓名 指导教师 评定成绩 信息工程学院 2016 年 06 月 21 日 题目...
C语言程序设计课程设计实习报告
长江大学 C 语言程序设计课程设计 实习报告 题姓学专班学 目: 名: 院: 业: 级: 号: 学生成绩管理系统陈桥 计算机科学学院 教育技术学 教技 11001 201003885...
c语言课程设计实习报告
c语言课程设计实习报告_理学_高等教育_教育专区。中国地质大学c语言实习报告,包含源程序C 语言课程设计实 习报告 题目二: 1.题目描述:学生信息管理系统设计,一, ...
C语言课程设计实习报告
C 语言课程设计实习报告 班级: 姓名: 学号: 2016-1 题目一、题目描述: 设计思路: 运行效果截图: 附源程序如下: 题目二、 文档贡献者 杂耍数分 贡献于2017-...
更多相关标签: