目录
前言:
大一期中老师给了个文件项目的作业如下图:很简单我用结构体两天晚上就写完了,不过没有优化,程度就是刚学文件操作的小白,作为完全的小白希望能和别人分享一下我做的项目完全手打没有复制,如有意见希望大家轻喷,轻喷!
题目如下:
课题名称: 学生成绩管理
I、题目的目的和要求(2-3 人组)
在现代,高科技的飞跃发展,计算机的大量普及,使得人们生活节奏越来越快。因此对 教育行业的多元信息进行有效的管理工作,也成为教育行业的重中之重。目前,学校工作繁 杂,资料众多,为各高校教务工作人员减轻负担,提高工作效率,要求开放一套学生成绩管 理系统。
系统的具体需求:
总人数定义为宏(#define);
输入学生姓名学号,及三门成绩并存入 d:\st.txt 文件中;
从文件 d:\st.txt 中读数据并计算每个学生三门功课的平均分,按平均分排 列名次,若平均分相同则名次并列;结果写入文件 d:\st.txt 并按格式输出;
统计全班每门课程的平均分,并计算各分数段(60以下,60~69, 70~79,80~89,90 以上)的学生人数;结果写入 d:\average.txt 文件,并按格式 打印。
代码如下:
// creat by c0re.
#include <stdio.h>
#include <stdlib.h>//定义头文件
#define N 5 //使用宏定义定义学生个数
int count1 [5]={0};
int count2 [5]={0};
int count3 [5]={0};//使用数组来记录各分数段的人数情况
double subject[4]={0};//使用数组来记录平均分情况
struct student//使用结构体来定义学生信息
{
char student_name[20][4];
char student_num[30];//定义学生学号
double grade1;
double grade2;
double grade3;//依次定义学生学科1、2、3的成绩
double avg_grade;//定义学生平均分
int rank;
}stu[N+1];
void preserve();//将学生信息保存到d:/st.txt文件中
void preserve()
{
FILE * fpreserve;
char ch='\n';
int i;
fpreserve=fopen("d://st.txt","wt+");
fprintf(fpreserve,"\t\t\t\t\t\t\t 成绩单 \t\t\t\t\t%c",ch);//格式化输出
fprintf(fpreserve,"\t排名\t\t学生姓名\t\t学生学号\t\t课程一成绩\t课程二成绩\t课程三成绩\t平均分\t%c",ch);//格式化输出
for(i=1;i<=N;i++)
{
fprintf(fpreserve,"\t%4d\t\t%7s\t %15s \t%10.1f\t\t%10.1f\t\t%10.1f\t %10.1f\t%c",stu[i].rank,stu[i].student_name,stu[i].student_num,stu[i].grade1,stu[i].grade2,stu[i].grade3,stu[i].avg_grade,ch);//格式化输出
}
printf("<保存完毕!数据已传入d:/st.txt文件中>\n");
fclose(fpreserve);
}
void score1 ();//统计各课程分数段人数
void score1 ()
{
int i;
for (i=1;i<N+1;i++)
{
if(stu[i].grade1<60) count1[4]++;
if(stu[i].grade1>=60&&stu[i].grade1<70) count1[3]++;
if(stu[i].grade1>=70&&stu[i].grade1<80) count1[2]++;
if(stu[i].grade1>=80&&stu[i].grade1<90) count1[1]++;
if(stu[i].grade1>=90) count1[0]++;//记录课程一各分数段人数
if(stu[i].grade2<60) count2[4]++;
if(stu[i].grade2>=60&&stu[i].grade2<70) count2[3]++;
if(stu[i].grade2>=70&&stu[i].grade2<80) count2[2]++;
if(stu[i].grade2>=80&&stu[i].grade2<90) count2[1]++;
if(stu[i].grade2>=90) count2[0]++;//记录课程二各分数段人数
if(stu[i].grade3<60) count3[4]++;
if(stu[i].grade3>=60&&stu[i].grade2<70) count3[3]++;
if(stu[i].grade3>=70&&stu[i].grade2<80) count3[2]++;
if(stu[i].grade3>=80&&stu[i].grade2<90) count3[1]++;
if(stu[i].grade3>=90) count3[0]++;//记录课程二各分数段人数
}
}
void save_avg();
void save_avg() //将保存到d:/average.txt文件中
{
FILE * fpreserve;
char ch='\n';
int i;
fpreserve=fopen("d://average.txt","wt+");
fprintf(fpreserve,"\t\t\t\t\t 各课程平均分情况 \t\t%c",ch);//格式化输出
fprintf(fpreserve,"\t\t\t\t 课程一平均分\t课程二平均分\t课程三平均分\t%c",ch);
fprintf(fpreserve,"\t\t\t\t%10.1f\t\t%10.1f\t\t%10.1f\t%c",subject[1],subject[2],subject[3],ch);
printf("<平均分计算完毕!数据已传入d:/average.txt文件中>,如果显示不全要放大查看哦!\n");
fprintf(fpreserve,"\t\t\t\t 各课程等级分布情况 \t%c",ch);
fprintf(fpreserve,"\t课程一等级分布情况\t90分以上:%d人\t80~90分:%d人\t70~80分:%d人\t60~70分:%d人\t60分一下:%d人\t\t%c",count1[0],count1[1],count1[2],count1[3],count1[4],ch);//格式化输出课程等级分布情况
fprintf(fpreserve,"\t课程二等级分布情况\t90分以上:%d人\t80~90分:%d人\t70~80分:%d人\t60~70分:%d人\t60分一下:%d人\t\t%c",count2[0],count2[1],count2[2],count2[3],count2[4],ch);//格式化输出课程等级分布情况
fprintf(fpreserve,"\t课程三等级分布情况\t90分以上:%d人\t80~90分:%d人\t70~80分:%d人\t60~70分:%d人\t60分一下:%d人\t\t%c",count3[0],count3[1],count3[2],count3[3],count3[4],ch);//格式化输出课程等级分布情况
printf("<课程等级分布情况统计完毕!数据已传入d:/average.txt文件中>,如果显示不全要放大查看哦!\n");
fclose(fpreserve);
}
void bubble_sort();//冒泡排序平均分函数
void bubble_sort()
{
int i,j;
struct student t;
for (i=1;i<=N;i++)
{
for(j=1;j<=N-i;j++)
{
if(stu[j].avg_grade<stu[j+1].avg_grade)
{
t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;
}
}
}
}
void rank_student();
void rank_student()
{
int m=N;
int i;
int ra=1;
for (i=1;i<=N;i++)
{
if(stu[i].avg_grade==stu[i+1].avg_grade)
{
stu[i].rank=ra;
continue;
}
stu[i].rank=ra;
ra++;
}
}
void add_student ();//通过函数进行输入学生信息的操作函数
void add_student ()
{
int i;
for (i=1;i<N+1;i++)
{
printf("|| <请录入本班学生信息> ||\n");
printf("|| 【请输入第%d位学生的信息】 ||\n",i);//指示信息
printf("||<姓名>:");
scanf("%s",stu[i].student_name);
printf("||<学号>:");
scanf("%s",stu[i].student_num);
printf("||<课程1成绩>:");
scanf("%lf",&stu[i].grade1);
printf("||<课程2成绩>:");
scanf("%lf",&stu[i].grade2);
printf("||<课程3成绩>:");
scanf("%lf",&stu[i].grade3);//输入学生各项信息
stu[i].avg_grade=(stu[i].grade1+stu[i].grade2+stu[i].grade3)/3.0;//计算各位学生科目的平均分
}
}
void avg_subject();// 统计各科目的平均分
void avg_subject()
{
int i;
double sum[4]={0};
for (i=1;i<=N;i++)
{
sum[1]=sum[1]+stu[i].grade1;
sum[2]=sum[2]+stu[i].grade2;
sum[3]=sum[3]+stu[i].grade3;// 统计各科目的总分
}
for (i=1;i<=3;i++)
{
subject[i]=sum[i]/(double)N;// 统计各科目的平均分
}
}
int main()
{
FILE *fp;
printf("*==================欢迎使用学生信息管理系统!==================*\n");
printf("|| <请录入本班学生信息> ||\n");
printf("|| <请依次输入本班学生的姓名、学号、三门考试成绩> ||\n");
printf("|| <本系统将自动将按平均分排名的信息导入d:\\st.txt文件中> ||\n");
printf("|| <本系统将自动将平均分等级导入d:\\average.txt文件中> ||\n");
printf("*====================下面请依次输入学生信息====================*\n");//系统介绍
add_student();//调用函数输入学生信息。
bubble_sort();//冒泡排序平均分函数
score1();
rank_student();
preserve();
avg_subject();// 统计各科目的平均分
save_avg();
return 0;
}
测试用例:
core1
123123
100
80
23
core2
123123
100
81
24
core3
123123
100
84
24
core4
123123
100
80
22
core5
123123
100
80
22
代码测试结果如下:
average.txt的文件内输出情况
st.txt的文件内输出情况
嘿嘿,写作业水博客一举两得嘿嘿!:】