学生成绩管理系统

  • 格式:doc
  • 大小:95.50 KB
  • 文档页数:17

/*学生成绩管理 主要要求: (1)能按学期、按班级完成对学生成绩的录入、修改 (2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序 (3)能查询学生成绩,不及格科目及学生名单 (4)能按班级输出学生的成绩单 (5)系统以菜单方式工作 */

/* 思路:学生成绩包括主要包括3门成绩 数学,英语,C语言,以及学生本人的信息: 即 姓名以及班级号,同时需要用学期来定义每学期的成绩。于是可以 定义结构体来实现上述信息。

采用模块化程序设计思想,按照题目要求,对功能模块进行划分, 设计多个函数分别实现各个功能,减少交叉使用,便于功能的实现和编程调试实现。

主要功能有: void Print(char *File)//在屏幕上输出文件中的信息 void Insert(char *File)//实现插入某个学生相关信息的功能 void Luru(char *File)//实现对学生成绩的录入功能,并完成计算总分,和平均分的功能 void Delete(char *File)//实现删除学生相关信息的功能 void Modify(char *File) //修改学生的信息

void Search_number(char *File)//按学号查找学生成绩 void Search_Fail(char *File)//查找出不及格学生的成绩 void export_class(char * File)//按班级输出学生信息 void main()//调用其他函数,实现各个功能选择 int IsEmpty(FILE *fp)//判断文件是否为空文件 void PrintMenu()//输出修改选项菜单 void Menu() //输出主程序选择菜单 void Sort(char *File) //按成绩由小到大排序并输出

*/

#include"stdio.h" #include"malloc.h" #include"string.h" #include"stdlib.h" #include"conio.h" #define N 20 //函数的声明 void PrintMenu(); void Print(char *File); void Insert(char *File); void Luru(char *File); int IsEmpty(FILE *fp); void Sort(char *File);

typedef struct student //定义结构体,记录学生信息 { int term[6]; long xuehao; int Class[3]; char name[N]; float score[3]; double average; float sum;

}stu;//使用stu代表 struct student 结构类型

void Print(char *File)//在屏幕上输出文件中的信息 { stu temp; FILE *fp=fopen(File,"r"); if(fp==NULL) { printf("打开文件%s失败!\n",File); return; }

fseek(fp,0,SEEK_SET); //从文件开始读取 printf(" 学号 姓名 高数 英语 C语言 平均分 总分:\n"); while(fread(&temp,sizeof(stu),1,fp))

printf("%10d%10s%10.2f%10.2f%10.2f%10.2lf%10.2f\n",temp.xuehao,temp.name,temp.score[0],temp.score[1],temp.score[2],temp.average,temp.sum); printf("\n"); fclose(fp); } //实现排序功能 void Sort(char *File) { int i,j,k,len; stu s[N],temp; FILE *fp=fopen(File,"r"); if(fp==NULL) { printf("文件打开失败!"); return; }

if(IsEmpty(fp)) { printf("文件为空,不需要排名,请先录入信息!"); return;

} fseek(fp,0,SEEK_END); len=ftell(fp)/sizeof(stu); fseek(fp,0,SEEK_SET); for(i=0;ifread(s+i,sizeof(stu),1,fp); fclose(fp); for(i=0;i{ k=i; for(j=i+1;j

if(s[j].averagek=j;

if(k!=i) { temp=s[i]; s[i]=s[k]; s[k]=temp; } } printf("以下是按学生平均成绩排序的学生信息:\n"); printf(" 学号 姓名 高数 英语 C语言\n"); for(i=0;i{ printf("%10d%10s%10.2f%10.2f%10.2f%10.2lf%10.2f\n", s[i].xuehao,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].average,s[i].sum); } remove("学生成绩管理"); fp=fopen(File,"w"); for(i=0;i

fwrite(s+i,sizeof(stu),1,fp); fclose(fp);

} void Insert(char *File)//实现插入某个学生相关信息的功能 { int count; int i; int m; stu temp,temp1; FILE *fp=fopen(File,"a+");//以追加的方式打开 if(fp==NULL) { printf("打开文件%s失败!\n",File); return; }

printf("您本次要插入几名学生的信息\n"); scanf("%d",&count); for(i=0;i{ printf("您现在录入的是第%d名学生的信息\n",i+1); Repeat:printf("请输入学号:\n"); m=scanf("%d",&temp.xuehao); if(m==0) { printf("您输入的学号有误\n"); fflush(stdin); //清除文件缓冲区 goto Repeat; } fseek(fp,0,SEEK_SET); while(fread(&temp1,sizeof(stu),1,fp)) { if(temp1.xuehao==temp.xuehao) { printf("该学生的学号已经存在\n"); goto Repeat; } }

printf("请输入学生姓名\n"); scanf("%s",temp.name); printf("请输入高数成绩\n"); scanf("%f",&temp.score[0]); printf("请输入英语成绩\n"); scanf("%f",&temp.score[1]); printf("请输入C语言成绩\n"); scanf("%f",&temp.score[2]);

temp.average=0; temp.sum=0;

temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3; temp.sum=temp.score[0]+temp.score[1]+temp.score[2]; if(!fwrite(&temp,sizeof(stu),1,fp)) { printf("向文件%s写入信息失败\n",File); return; }

} printf("向文件%s写入信息成功\n",File); fclose(fp);

}

void Luru(char *File)/*实现对学生成绩的录入功能,并完成计算总分,和平均分的功能*/ { int count; int i; int m; stu temp,temp1; FILE *fp=fopen(File,"a+");//以写的方式打开 if(fp==NULL) { printf("打开文件%s失败!\n",File); return; }

printf("您本次要输入几名学生的信息\n"); scanf("%d",&count); for(i=0;i{ printf("您现在录入的是第%d名学生的信息\n",i+1); Repeat:printf("请输入学号:\n"); m=scanf("%d",&temp.xuehao); if(m==0) { printf("您输入的学号有误\n"); fflush(stdin); //清除文件缓冲区 goto Repeat; } fseek(fp,0,SEEK_SET); while(fread(&temp1,sizeof(stu),1,fp)) { if(temp1.xuehao==temp.xuehao) { printf("该学生的学号已经存在\n"); goto Repeat; } }

printf("请输入学生姓名\n"); scanf("%s",temp.name); printf("请输入高数成绩\n"); scanf("%f",&temp.score[0]); printf("请输入英语成绩\n"); scanf("%f",&temp.score[1]); printf("请输入C语言成绩\n"); scanf("%f",&temp.score[2]); temp.average=0; temp.sum=0; temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3; temp.sum=temp.score[0]+temp.score[1]+temp.score[2]; if(!fwrite(&temp,sizeof(stu),1,fp)) {