C 语言课程设计实验报告
一 问题描述:编辑一个学生成绩统计软件 二 基本要求:
1) 每条记录由学号、姓名、若干门课程的成绩组成; 2) 能计算每个学生的总分和平均分并显示;
3) 能按平均分统计各分数段的人数,并以分布图显示,如右
图所示。
4) 在此基础上,可进行文件操作。
三 系统分析和设计
函数的设计,其最终目的是要实现所需要的功能。本例中,是用main 函
数调用两个子函数来实现的! 1)文件的建立:
要想实现对学生成绩的统计,首先要建立一个文件用来存放学生信息,要用到FILE 文件指针。fp1=fopen("c:\\turboc2\\","w+"); 2)程序的设计:
学生的信息放在结构体数组struct student_score s[N]中。
通过for 循环,调用子函数getdata ,从键盘接收学生信息(num ,name ,score[0],score[1],score[2],score[3]),并计算总分与平均分,返回学生信息return st 到调用处。用fprintf 函数向文件中逐一写入学生的信息,通过rewend(fp1)函数使文件指针回到文件头,用fscanf 读学生信息,并显示在屏幕上。同时根据所读学生信息,统计各分数段的人数s1++,s2++,s3++,s4++,s5++,然后调用一个子函数putsgraph 用来输出图表!
四 结构图
主函数
五 流程图:
(背面)
具体程序如下:
#define N 5
#include"stdio.h"
#include"stdlib.h"
struct student_score
{
long num;
char name[20];
float score[4];
float total;
float aver;
}s[N];
main()
{
FILE *fp1;
struct student_score getdata(struct student_score st,int x);
int putsgraph(int sa, int sb,int sc,int sd,int se);
int i=0,s1=0,s2=0,s3=0,s4=0,s5=0;
fp1=fopen("c:\\turboc2\\","w+");
for(i=0;i<N;i++)
s[i]=getdata(s[i],i);
for(i=0;i<N;i++)
fprintf(fp1,"%-7ld%-10s%10.1f%10.1f%10.1f%10.1f%10.1f%10.1f
\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].scor
e[3],s[i].total,s[i].aver);
rewind(fp1);
{
long num;
char name[20];
float e,f,g,h,total,aver;
for(i=0;i<N;i++)
{
fscanf(fp1,"%ld%s%f%f%f%f%f%f\n",&num,name,&e,&f,
编写c语言的软件
&g,&h,&total,&aver);
printf("%-7ld%-20s%10.1f%10.1f\n",num,name,total,aver);
if(aver<60) s1++;
else if(aver<70) s2++;
else if(aver<80) s3++;
else if(aver<90) s4++;
else if(aver<=100) s5++;
}
}
fclose(fp1);
putsgraph(s1,s2,s3,s4,s5);
}
struct student_score getdata(struct student_score st,int x)
{
int y;
printf("\nEnter student%d\'s num:\n",x+1);
scanf("%ld",&st.num); getchar();
printf("\nEnter name:\n");
gets(st.name);
printf("\nEnter 4 scores:\n");
for(y=0;y<4;y++)
{
scanf("%f",&st.score[y]);
getchar();
}
st.al/4;
return st;
}
int putsgraph(int sa, int sb,int sc,int sd,int se)
{
int i,j;
char graph[16][80];
for(i=0;i<16;i++)
{
for(j=0;j<79;j++) graph[i][j]=' ';
graph[i][79]='\0';
}
for(j=0;j<79;j++) graph[11][j]='-';
for(j=3;j<=15;j+=4)
{ graph[12][j]='<'; graph[12][j+2]='0'; }
graph[12][4]='6';graph[12][8]='7';
graph[12][12]='8';graph[12][16]='9';
graph[12][19]='<'; graph[12][20]='=';
graph[12][21]='1';
graph[12][22]='0'; graph[12][23]='0';
for(i=10;i>(10-sa);i--) graph[i][4]='o';
for(i=10;i>(10-sb);i--) graph[i][8]='o';
for(i=10;i>(10-sc);i--) graph[i][12]='o';
for(i=10;i>(10-sd);i--) graph[i][16]='o';
for(i=10;i>(10-se);i--) graph[i][20]='o';
for(i=0;i<16;i++) puts(graph[i]);
}
六测试数据
Entrer student1’ num:
7879366
Enter name:
wuhao
Enter 4 scores:
66
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论