刚做完的课程设计(用C编译的学生成绩管理系统)
#include <stdio.h>//实现库函数的调用#include <stdlib.h>
#include <string.h>//调用STRCPY函数的字符串连接功能
#define N 8
typedef struct //对结构体进行声明,声明类型名为DATATYPE,它代表int,char,float等指定变量
{ //在下面的程序中就可以用DATATYPE定义变量了
int number;
char name[10];
float score[5];
}
DATATYPE;
void input_stu(DATATYPE s1[]);
void output_stu(DATATYPE s1[]);
void stu_avg(DATATYPE s1[]);
void score_avg(DATATYPE s1[]);
void main()//主函数实现对各个子函数的调用
{
DATATYPE s[N];
input_stu(s);
stu_avg(s);
score_avg(s);
output_stu(s);
}
void input_stu(DATATYPE s1[])//实现学生信息的输入
{
int i,j;//变量声明i表示学生人数 j表示学生科目数
char t[8];//t表示输入的字符串数
float x;//x表示输入的分数
for(i=0;i<N;i++)//for循环语句实现N个学生成绩的录入
{
printf("\输入学生的学号:");
gets(t);//此函数接收有键盘输入的字符串
s1[i].number=atoi(t);
if(s1[i].number<=0) break;//学生数目是大于等于0的数
printf("输入学生的姓名:");
gets(t);
strcpy(s1[i].name,t);//此函数实现字符串的复制
for(j=1;j<5;j++)//for循环语句实现对每个学生5门课的连续输入
{
printf("\nscore of %d:",j);
scanf("%f",&x);//scanf函数
s1[i].score[j] =x;
}
j=getchar();//定义j为getchar函数实现对5门课的同时接收
}
printf("\ninput students data end!!!");
}
void output_stu(DATATYPE s1[])//实现学生信息的输出
{
int i,j;
printf("\nThe students score list");
printf("\number\tname\t\ts1\ts2\ts3\ts4\tavg");
for(i=0;i<N;i++)
{
if(s1[i].number<=0) break;
printf("\n%d\t",s1[i].number);
printf("%s\t\t",s1[i].name);
for(j=1;j<5;j++)
{
printf("\t%3.1f",s1[i].score[j]);
}
printf("\t%3.1f",s1[i].score[0]);
}
printf("\noutput students data end!!!");
}
void stu_avg(DATATYPE s1[])//实现全部学生一门课成绩的平均
{
int i,j;
float x;
for(i=0;i<N;i++)
{
if(s1[i].number<=0) break;
x=0;
for(j=1;j<5;j++)
{
x+=s1[i].score[j];//实现对学生各门课的成绩的求和
}
x=x/4;//实现对每个学生成绩的求平均
s1[i].score[0]=x;
}
printf("\ncalulate students averge score end!!!");
}
void score_avg(DATATYPE s1[])//此函数实现每个学生各门课的求平均
{
float savg[5]={0};
int i,j;
for(i=0;i<N;i++)
{
if(s1[i].number<=0) break;
for(j=0;j<5;j++)
{
savg[j]+=s1[i].score[j];//实现对全部学生各门课成绩的求和
}
}
for(j=0;j<5;j++)
{
savg[j]/=i;
}
printf("\ncalculate averge of score list\n");
for(j=0;j<5;j++)
{
printf("%3.1f\t",savg[j]);
}
printf("\此程序运行结束");
}