c语言课设报告.docx
- 文档编号:6659166
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:30
- 大小:81.11KB
c语言课设报告.docx
《c语言课设报告.docx》由会员分享,可在线阅读,更多相关《c语言课设报告.docx(30页珍藏版)》请在冰豆网上搜索。
c语言课设报告
答辩记录
运行情况
原始数据
成绩排名
分数段统计
不及格统计
优秀生统计
饼状图
解方程
作动画
回答问题
1.
2.
3.
4.
5.
计算机上机实习
实习报告
班级
学号
姓名
指导教师
完成日期2011-01-07
一.系统题目:
1学生成绩管理
2解线性方程组
3动画
二.摘要
分析设计与说明:
分别建立两个数据文件
文件1(原始数据.txt)用于存放学生成绩;
文件2(课程及学分.txt)用于存放课程及其学分。
程序设计思想
1)学生成绩管理系统
1.(定义两个结构体数组:
原始数据.txt存放学生成绩;课程及学分.txt存放课程及其学分)
2.读入原始数据并显示(将其读入另外的“成绩.txt”和”学分.txt”中);
3.编写函数用于计算平均分及名次(将其读入另外的”名次表.txt”中);
4.编写函数计算分数段人数(将其读入另外的”成绩分布.txt”中);
5.编写函数输出课程平均分(将其读入另外的课程平均分.txt中);
6.编写函数统计不及格情况(将其读入另外的”不及格表.txt”中);
7.编写函数输出优秀学生(将其读入另外的”优秀学生.txt”中);
8.编写函数作出每门课程各分数段人数分布的饼状图
(此处加入一个菜单,查看每一科分布图)
9.编写菜单,共有8个菜单项,其中7个为题目要求,第8个为退出函数。
(2)解线性方程组
用高斯消去法解线性方程组;
1)学生成绩管理系统
1.班级成绩单查看见文件(成绩.txt);
2.课程学分详情见(学分.txt);
3.班级成绩排名表单(名次表.txt);
4.成绩分数分布段见(成绩分布.txt)
5.课程平均分见(课程平均.txt)
6.不及格学生的名单(不及格表.txt);
7.优秀生的名单(优秀学生.txt);
8.每门课程各分数段人数分布的饼状图;
9.退出。
2)解线性方程组
1.解方程组;
2.返回上级菜单
三.系统设计
一.主菜单功能模块图
解线性方程
二.一级菜单结构图
8.返回上级菜单
3.计算分数段人数
三.数据结构说明
1.写入了两个数据文件,一个是学生各门课的成绩,另一个是每门课的学分;写入时不要在学号等中间有空格;
2.用C语言创建了7个数据文件。
系统实现
1.本程序在Win-TC环境下实现
用文本文件显示各种信息;
计算平均分及名次:
每个学生各科分数乘以相应的学分并相加除以学分总和;先令每个学生的名次都是1,在把一个学生的加权平均分与其他的所有学生的进行比较,遇到一个比该学生平均分高的,该学生的名次加1。
循环依次得出全班人的名次;并将这种结果输出到文本文件名次表.txt
计算分数段人数:
先令每一个分数段(>=90;>=80;>=70;>=60;<60)的人数都是0,然后利用循环结构,遇到一个在某个分数段的成绩,那个分数段的计数变量加1,最后可得每门科目每个分数段人数;并将这种结果输出到文本文件成绩分布.txt.
输出课程平均分:
利用循环结构,将所有人的同一科成绩相加,再除以总人数,课程平均.txt中;
统计不及格情况:
利用循环,将每个人的各科成绩和60相比较,若小于60,则输出名单(学号、姓名、不及格课程名称、课程学分及成绩)结果存放在文本文件:
不及格.txt
输出优秀学生:
利用循环,分别实现以下条件:
1平均分≥90
2.名次在本班前三名
3.平均分≥85,并且至少有一门课的成绩为100分
4平均分≥85,并且至少有二门课的成绩为≥90分
将上述条件作为逻辑或的判别式,找到符合条件的所有学生,输出并同时存放到优秀学生.txt中;
作分布图:
通过调用“计算分数段人数程序”内容的结果,将其与各科目参加考试的总人数相除,再乘以360转换成角度,用
arc(intx,inty,intstangle,intendangle,intradius);//以(x,y)为圆心,以//radius为半径,从角stangle到endangle(用度表示)处画一圆弧;来时先绘制饼状图;
2.编程中出现的问题
细节错误,如前后字符类型不相符,掉分号;
在读入数据时忘记读第一行文字导致读入的都是零;
不能在WIN-TC中运行动画;
在读入数据时带有格式导致不能读入;
程序调试中无错误,但运行没有结果;
循环发生错误,大括号没有将要循环的内容包含进去;
程序运行成绩条时屏幕上无法显示但保存到了新的文档中;
程序运行出后每执行一个功能时要重新运行才能执行其他的命令;
界面菜单都排在一行,不便于查询。
在各个菜单后加了一个换行的符号!
3.使用说明
使用前首先进入Win-TC环境;
启动并运行“1.5.c”;
按数字键1,进入“学生成绩管理系统”界面;
按数字键2,进入“解线性方程组”界面;
按数字键3,进入“破译密码”界面;
按数字键4,退出中文DOS环境并结束程序运行;
若按“1”进入“学生成绩管理系统”:
按数字键1,读入原始数据并显示;
按数字键2,计算平均分及名次;
按数字键3,计算分数段人数;
按数字键4,输出课程平均分;
按数字键5,统计不及格情况;
按数字键6,输出优秀学生;
按数字键7,作分布图;
按数字键8,返回上级菜单(主菜单);
若按“2”进入“解线性方程组”:
按数字键1,开始解线性方程组并输出结果;
按数字键2,返回上级菜单(主菜单);
若按“3”进入“动画”:
按数字键1,查看动画效果;
按数字键2,返回上级菜单(主菜单);
4.程序
1.源程序代码:
#include"stdio.h"
#include"conio.h"
#defineM42
#defineN5
#include"graphics.h"
structstudent
{
intnum;
charname[10];
intscore[N];
floataverage;
intrank;
}stud[M];
structxuefen
{
intnum;
charsubject[20];
floatxuefen;
}xf[N];
structstudnt2
{
charname[10];
intnum[N];
}stud2[5]={{">=90",0,0,0,0,0},{">=80",0,0,0,0,0},{">=70",0,0,0,0,0},{">=60",0,0,0,0,0},{"<60",0,0,0,0,0}};
floataverage[N];
charstr[100],str1[100];
inti,j,sum;
main()/*主菜单*/
{charch1;system("graftabl936");
do{
printf("\n\n\n\n\n\n\n\n\n");
printf("**************C语程序设计上机实习****************\n");
printf("---------------------------------------------------\n\n");
printf("1学生成绩管理\n\n");
printf("2解线性方程组\n\n");
printf("3动画\n\n");
printf("4退出\n\n");
printf("输入选择序号\n");
while((ch1=getchar(),ch1!
='1'&&ch1!
='2'&&ch1!
='3'&&ch1!
='4'));
switch(ch1)
{case'1':
section1();break;
case'2':
section2();break;
case'3':
section3();break;
case'4':
exit(0);}
}while
(1);
}
section1()/*第1个2级菜单*/
{charch21;
do{
printf("\n\n\n\n\n\n\n\n\n\n");
printf("************学生成绩管理系统****************\n");
printf("---------------------------------------------------\n\n");
printf("1.读入原始数据并显示2.计算平均分及名次\n\n");
printf("3.计算分数段人数4.输出课程平均分\n\n");
printf("5.统计不及格情况6.输出优秀学生\n\n");
printf("7.作分布图8.返回上级菜单\n\n");
printf("输入选择序号\n");
while((ch21=getchar(),ch21!
='1'&&ch21!
='2'&&ch21!
='3'&&ch21!
='4'&&ch21!
='5'&&ch21!
='6'
&&ch21!
='7'&&ch21!
='8'));
switch(ch21)
{case'1':
function1_1();break;
case'2':
function1_2();break;
case'3':
function1_3();break;
case'4':
function1_4();break;
case'5':
function1_5();break;
case'6':
function1_6();break;
case'7':
function1_7();break;
case'8':
return(0);}
}while
(1);
}
section2()/*第2个2级菜单*/
{charch22;
do{
printf("\n\n\n\n\n\n\n\n\n\n");
printf("*****************解线性方程组****************\n");
printf("-------------------------------------------------\n");
printf("1.解方程组\n\n");
printf("2.返回上级菜单\n\n");
printf("输入选择序号\n");
while((ch22=getchar(),ch22!
='1'&&ch22!
='2'));
switch(ch22)
{case'1':
function2_1();break;
case'2':
return(0);}
}while
(1);
}
section3()/*第3个2级菜单*/
{charch23;
do{
printf("\n\n\n\n\n\n\n\n\n\n");
printf("*****************作动画****************\n");
printf("-------------------------------------------------\n");
printf("1.作动画\n\n");
printf("2.返回上级菜单\n\n");
printf("输入选择序号\n");
while((ch23=getchar(),ch23!
='1'&&ch23!
='2'));
switch(ch23)
{case'1':
function3_1();break;
case'2':
return(0);}
}while
(1);
}
function1_1()
{inti,j;
FILE*fp,*fp1,*fp2,*fp3;
chartitle[130],title1[130];
printf("加入读原始数据并显示的程序内容\n");
if((fp=fopen("c:
\\jx10904.txt","r"))==NULL)
{printf("cannotopenfile1\n");
exit(0);
}
if((fp1=fopen("c:
\\xuefen.txt","r"))==NULL)
{printf("cannotopenfile1\n");
exit(0);
}
if((fp2=fopen("c:
\\成绩.txt","w"))==NULL)
{printf("cannotopenfile2\n");
exit(0);
}
if((fp3=fopen("c:
\\学分.txt","w"))==NULL)
{printf("cannotopenfile3\n");
exit(0);
}/*打开文件*/
fgets(title,130,fp);
fgets(title1,130,fp1);
for(i=0;i { fscanf(fp,"%d%s",&stud[i].num,stud[i].name); for(j=0;j fscanf(fp,"%d",&stud[i].score[j]); }/*向文件写入数据*/ for(j=0;j fscanf(fp1,"%d%s%f",&xf[j].num,&xf[j].subject,&xf[j].xuefen); printf("序号姓名英语线性代数大学物理机械制图C语言设计\n"); fprintf(fp2,"序号姓名英语线性代数大学物理机械制图C语言设计\n"); for(i=0;i { printf("%2d%8s",stud[i].num,stud[i].name); fprintf(fp2,"%2d%8s",stud[i].num,stud[i].name); for(j=0;j { printf("%8d",stud[i].score[j]); fprintf(fp2,"%8d",stud[i].score[j]);delay(10000); } printf("\n"); fprintf(fp2,"\n"); } printf("\n\n"); printf("编号课程名称课程学分\n"); fprintf(fp3,"编号课程名称课程学分\n"); for(j=0;j { printf("%-6d%10s%-.2f",xf[j].num,xf[j].subject,xf[j].xuefen); fprintf(fp3,"%-6d%-16s%.3f",xf[j].num,xf[j].subject,xf[j].xuefen); printf("\n"); fprintf(fp3,"\n"); } fclose(fp); fclose(fp1); fclose(fp2); fclose(fp3); printf("*********按Enter键继续**********\n"); getchar();getchar();} function1_2() { floatsum1,sum2; FILE*fp; for(i=0;i { for(j=0,sum1=0,sum2=0;j { sum1+=stud[i].score[j]*xf[j].xuefen; sum2+=xf[j].xuefen; } stud[i].average=sum1/sum2;/*求加权平均分算法*/ stud[i].average=(int)(stud[i].average*10+0.5)/10.0;/*平均分类型转换*/ } for(i=0;i { stud[i].rank=1; for(j=0;j { if(stud[i].average stud[i].rank++; } } if((fp=fopen("c: \\平均分.txt","w+"))==NULL) { printf("cannotopenthisfile\n"); exit(0); } fprintf(fp,"序号姓名英语线性代数大学物理机械制图C语言设计平均分名次\n"); printf("序号姓名英语线性代数大学物理机械制图C语言设计平均分名次\n\n"); for(i=0;i { fprintf(fp,"%3d%10s",stud[i].num,stud[i].name); printf("%4d%9s",stud[i].num,stud[i].name); for(j=0;j { fprintf(fp,"%10d",stud[i].score[j]); printf("%9d",stud[i].score[j]); } fprintf(fp,"%8.1f%8d\n",stud[i].average,stud[i].rank); printf("%12.1f%9d\n",stud[i].average,stud[i].rank); } fclose(fp); printf("*********按Enter键继续**********\n"); getchar();getchar();} function1_3() {FILE*fp; for(i=0,sum=0;i for(j=0;j if(stud[i].score[j]>=90)/*计算分数段*/ stud2[0].num[j]++; elseif(stud[i].score[j]>=80)/*此处j是科目,0,1,2,3,4是分数段*/ stud2[1].num[j]++; elseif(stud[i].score[j]>=70) stud2[2].num[j]++; elseif(stud[i].score[j]>=60) stud2[3].num[j]++; elsestud2[4].num[j]++; if((fp=fopen("c: \\成绩分布表.txt","w+"))==NULL) { printf("cannotopenthisfile\n"); exit(0); } fputs("范围英语线性代数大学物理机械制图C语言设计\n",fp); printf("范围英语线性代数大学物理机械制图C语言设计\n"); for(i=0;i { fprintf(fp,"%4s",stud2[i].name); printf("%4s",stud2[i].name); for(j=0;j { fprintf(fp,"%10d",stud2[i].num[j]); printf("%12d",stud2[i].num[j]); } fputs("\n",fp); printf("\n"); } fclose(fp); printf("*********按Enter键继续**********\n"); getchar();getchar();} function1_4() { intt; FILE*fp; if((fp=fopen("c: \\课程平均分.txt","w+"))==NULL) { printf("cannotopenthisfile\n"); exit(0); } fputs("课程英语线性代数大学物理机械制图C语言设计\n平均分",fp); printf("课程英语线性代数大学物理机械制图C语言设计\n平均分"); for(j=0;j { sum=0; for(i=0;i { t=stud[i].score[j]; sum+=t; average[j]=sum/(M*1.0); average[j]=(int)(average[j]*10+0.5)/10.0; } fprintf(fp,"%9.1f",average[j]); printf("%9.1f",average[j]); } fclose(fp); printf("\n\n"); printf("*********按Enter键继续**********\n"); getchar();getchar();} function1_5() { intk; FILE*fp; if((fp=fopen("c: \\不及格表单.txt","w+"))==NULL) { printf("cannotopenthisfile\n"); exit(0); } fputs("序号姓名不及格课程名称课程学分成绩\n",fp); printf("序号姓名不及格课程名称课程学分成绩\n\n"); for(i=0;i { k=0; for(j=0;j if(stud[i].score[j]<60) { if(k==0) { fprintf(fp,"%3d%8s%12s%10.1f%5d\n",stud[i].num,stud[i].name,xf[j].subject,xf[j].xuefen,stud[i].score[j]); printf("%4d%10s%12s%10.1f%4d\n",stud[i].num,stud[i].name,xf[j].subject,xf[j].xuefen,stud[i].score[j]); k++; } else { fprintf(fp,"%3d%8s%12s%10.1f%5d\n",stud[i].num,stud[i].name,xf[j].subject,xf[j].xuefen,stud[i].score[j]); printf("%4d%10s%12s%10.1f%4d\n",stud[i].num,stud[i].name,xf[j].subject
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告