1.从键盘输入n名学生数据,包括(姓名、学号、三门课程成绩),分别计算出平均成绩,将原有数据和平均分数保存在文件1;
2.将文件1中的学生数据,按平均分数升序排列,将排好的学生数据保存到文件2;
3.插入1个学生数据,计算出平均分数,按平均分升序插入该学生数据,保存到文件3;
1.声明结构体类型、定义结构体数组
struct Student//声明一个结构体类型 struct Student
{
int num;//学号
char name[20];//姓名
float score[3];//3门课成绩
float average; //3门课平均分
}stu[N];//定义结构体数组
2.从键盘输入学生数据,计算平均分数、将学生数据保存至文件1
for(i=0;i<N;i++)
{
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;//计算每个学生3门平均分
}
for(i=0;i<N;i++)
fwrite(&stu[i],LEN,1,fp)//循环N次,每次向文件中写入一个学生信息
3.将文件1中的学生数据按平均分升序排列、保存至文件2
/*冒泡法*/
for(i=0;i<N-1;i++)//N个结构体变量两两比较N-1趟
{
for(j=0;j<N-1-i;j++)//每一趟比较N-1-i次
{
if(stu[j].average>stu[j+1].average)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
}
/*写入文件*/
for(i=0;i<N;i++)
fwrite(&stu[i],LEN,1,fp)//循环N次,每次向文件中写入一个学生信息
4.按平均分升序插入一名学生数据,保存至文件3
struct Student a;//定义结构体变量存放插入学生信息
scanf("%d%s%f%f%f",&a.num,a.name,&a.score[0],&a.score[1],&a.score[2]);
a.average=(a.score[0]+a.score[1]+a.score[2])/3;//计算新插入学生的3门平均分
/*插在开头*/
fwrite(b,LEN,1,fp);
for(i=0;i<N;i++)
fwrite(&stu[i],LEN,1,fp);
/*插在末尾*/
for(i=0;i<N;i++)
fwrite(&stu[i],LEN,1,fp);
fwrite(b,LEN,1,fp);
/*插在中间某处*/
for(i=0;i<m+1;i++)
fwrite(&stu[i],LEN,1,fp);
fwrite(b,LEN,1,fp);
for(i=m+1;i<N;i++)
fwrite(&stu[i],LEN,1,fp);
注:以上仅为部分代码,具体代码已以文本形式上传,用户可自行下载
5.运行结果:
1.运行界面
2.输入学生数据(以3名学生为例),保存至文件1、并在屏幕显示
3.按平均分升序排列,保存至文件2、并在屏幕显示
4.按平均分升序插入一名学生数据,保存至文件3、并在屏幕显示
视频演示如下:
C语言程序设计:学生成绩管理系统