基于C语言实现简单学生成绩管理系统攻略
1. 设计思路
学生成绩管理系统可以分为以下几个模块:
-
学生信息模块:包括学生信息的存储、读取和显示功能;
-
成绩信息模块:包括成绩的录入、修改和查询功能;
-
统计信息模块:包括成绩排名和平均成绩计算功能。
2. 模块设计与实现
2.1 学生信息模块
学生信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,文件内容存储学生的姓名、性别、年龄等信息。
#define STU_FILE "stuInfo.txt"//学生信息存储文件名
//定义学生信息结构体
typedef struct Student{
char num[15];//学号
char name[10];//姓名
char sex[5];//性别
int age;//年龄
}Student;
//学生信息读取函数
void readStuInfo(Student* stu){
FILE* fp = fopen(STU_FILE, "r");
if(fp == NULL){
printf("读取文件失败!\n");
return;
}
while(fscanf(fp,"%s%s%s%d",stu->num,stu->name,stu->sex,&stu->age)!=EOF){
printf("%s\t%s\t%s\t%d\n",stu->num,stu->name,stu->sex,stu->age);
}
fclose(fp);
}
//学生信息录入函数
void inputStuInfo(Student* stu){
printf("请输入学生学号:");
scanf("%s",stu->num);
printf("请输入学生姓名:");
scanf("%s",stu->name);
printf("请输入学生性别:");
scanf("%s",stu->sex);
printf("请输入学生年龄:");
scanf("%d",&stu->age);
FILE* fp = fopen(STU_FILE,"a+");
if(fp == NULL){
printf("保存文件失败!\n");
return;
}
fprintf(fp,"%s\t%s\t%s\t%d\n",stu->num,stu->name,stu->sex,stu->age);
fclose(fp);
}
2.2 成绩信息模块
成绩信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,文件内容存储学生的语文、数学、英语、总分和平均分等信息。
#define SCORE_FILE "score.txt"//成绩信息存储文件名
//定义成绩信息结构体
typedef struct Score{
char num[15];//学号
float chinese;//语文成绩
float math;//数学成绩
float english;//英语成绩
float total;//总成绩
float average;//平均成绩
}Score;
//成绩信息读取函数
void readScore(Score* score){
FILE* fp = fopen(SCORE_FILE, "r");
if(fp == NULL){
printf("读取文件失败!\n");
return;
}
while(fscanf(fp,"%s%f%f%f%f%f",score->num,&score->chinese,&score->math,&score->english,&score->total,&score->average)!=EOF){
printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score->num,score->chinese,score->math,score->english,score->total,score->average);
}
fclose(fp);
}
//成绩信息录入函数
void inputScore(Score* score){
printf("请输入学生学号:");
scanf("%s",score->num);
printf("请输入学生语文成绩:");
scanf("%f",&score->chinese);
printf("请输入学生数学成绩:");
scanf("%f",&score->math);
printf("请输入学生英语成绩:");
scanf("%f",&score->english);
score->total = score->chinese + score->math + score->english;
score->average = score->total / 3.0;
FILE* fp = fopen(SCORE_FILE,"a+");
if(fp == NULL){
printf("保存文件失败!\n");
return;
}
fprintf(fp,"%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score->num,score->chinese,score->math,score->english,score->total,score->average);
fclose(fp);
}
2.3 统计信息模块
统计信息包括按总分进行成绩排名和计算平均成绩。
//按总分降序排序并输出
void sortByTotal(){
Score score[100];
Score temp;
int count = 0;
FILE* fp = fopen(SCORE_FILE, "r");
if(fp == NULL){
printf("读取文件失败!\n");
return;
}
while(fscanf(fp,"%s%f%f%f%f%f",score[count].num,&score[count].chinese,&score[count].math,&score[count].english,&score[count].total,&score[count].average)!=EOF){
count++;
}
fclose(fp);
for(int i=0;i<count;i++){
for(int j=i+1;j<count;j++){
if(score[i].total<score[j].total){
temp = score[i];
score[i] = score[j];
score[j] = temp;
}
}
}
printf("学号\t语文\t数学\t英语\t总分\t平均分\n");
for(int i=0;i<count;i++){
printf("%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",score[i].num,score[i].chinese,score[i].math,score[i].english,score[i].total,score[i].average);
}
}
//计算平均成绩
void averageScore(){
Score score;
float chinese_sum=0,math_sum=0,english_sum=0;
int count=0;
FILE* fp = fopen(SCORE_FILE, "r");
if(fp == NULL){
printf("读取文件失败!\n");
return;
}
while(fscanf(fp,"%s%f%f%f%f%f",score.num,&score.chinese,&score.math,&score.english,&score.total,&score.average)!=EOF){
chinese_sum += score.chinese;
math_sum += score.math;
english_sum += score.english;
count++;
}
fclose(fp);
printf("语文平均分:%.2f\n",chinese_sum/count);
printf("数学平均分:%.2f\n",math_sum/count);
printf("英语平均分:%.2f\n",english_sum/count);
}
3. 实现示例
3.1 录入学生信息和成绩信息
int main(){
Student stu;
Score score;
int choice;
while(1){
printf("1. 录入学生信息;\n");
printf("2. 录入学生成绩;\n");
printf("0. 退出系统。\n");
printf("请选择操作:");
scanf("%d",&choice);
if(choice == 1){
inputStuInfo(&stu);
}
else if(choice == 2){
inputScore(&score);
}
else if(choice == 0){
printf("欢迎下次使用!\n");
break;
}
else{
printf("输入无效,请重新选择!\n");
}
}
return 0;
}
3.2 统计信息并按总分排名
int main(){
int choice;
while(1){
printf("1. 按总分排名并输出;\n");
printf("2. 计算平均成绩;\n");
printf("0. 退出系统。\n");
printf("请选择操作:");
scanf("%d",&choice);
if(choice == 1){
sortByTotal();
}
else if(choice == 2){
averageScore();
}
else if(choice == 0){
printf("欢迎下次使用!\n");
break;
}
else{
printf("输入无效,请重新选择!\n");
}
}
return 0;
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于C语言实现简单学生成绩管理系统 - Python技术站