学生成绩管理系统.docx
- 文档编号:29060945
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:25
- 大小:19.54KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
/*学生成绩管理主要要求:
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
(5)系统以菜单方式工作
*/
/*
思路:
学生成绩包括主要包括3门成绩数学,英语,C语言,以及学生本人的信息:
即姓名以及班级号,同时需要用学期来定义每学期的成绩。
于是可以
定义结构体来实现上述信息。
采用模块化程序设计思想,按照题目要求,对功能模块进行划分,
设计多个函数分别实现各个功能,减少交叉使用,便于功能的实现和编程调试实现。
主要功能有:
voidPrint(char*File)//在屏幕上输出文件中的信息
voidInsert(char*File)//实现插入某个学生相关信息的功能
voidLuru(char*File)//实现对学生成绩的录入功能,并完成计算总分,和平均分的功能
voidDelete(char*File)//实现删除学生相关信息的功能
voidModify(char*File)//修改学生的信息
voidSearch_number(char*File)//按学号查找学生成绩
voidSearch_Fail(char*File)//查找出不及格学生的成绩
voidexport_class(char*File)//按班级输出学生信息
voidmain()//调用其他函数,实现各个功能选择
intIsEmpty(FILE*fp)//判断文件是否为空文件
voidPrintMenu()//输出修改选项菜单
voidMenu()//输出主程序选择菜单
voidSort(char*File)//按成绩由小到大排序并输出
*/
#include"stdio.h"
#include"malloc.h"
#include"string.h"
#include"stdlib.h"
#include"conio.h"
#defineN20
//函数的声明
voidPrintMenu();
voidPrint(char*File);
voidInsert(char*File);
voidLuru(char*File);
intIsEmpty(FILE*fp);
voidSort(char*File);
typedefstructstudent//定义结构体,记录学生信息
{
intterm[6];
longxuehao;
intClass[3];
charname[N];
floatscore[3];
doubleaverage;
floatsum;
}stu;//使用stu代表structstudent结构类型
voidPrint(char*File)//在屏幕上输出文件中的信息
{
stutemp;
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);
}
//实现排序功能
voidSort(char*File)
{
inti,j,k,len;
stus[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;i fread(s+i,sizeof(stu),1,fp); fclose(fp); for(i=0;i { k=i; for(j=i+1;j if(s[j].average k=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); } voidInsert(char*File)//实现插入某个学生相关信息的功能 { intcount; inti; intm; stutemp,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);//清除文件缓冲区 gotoRepeat; } fseek(fp,0,SEEK_SET); while(fread(&temp1,sizeof(stu),1,fp)) { if(temp1.xuehao==temp.xuehao) { printf("该学生的学号已经存在\n"); gotoRepeat; } } 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); } voidLuru(char*File)/*实现对学生成绩的录入功能,并完成计算总分,和平均分的功能*/ { intcount; inti; intm; stutemp,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);//清除文件缓冲区 gotoRepeat; } fseek(fp,0,SEEK_SET); while(fread(&temp1,sizeof(stu),1,fp)) { if(temp1.xuehao==temp.xuehao) { printf("该学生的学号已经存在\n"); gotoRepeat; } } 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); } voidDelete(char*File)//实现删除学生相关信息的功能 { inti=0,len,del; stus[N]; FILE*fp=fopen(File,"r"); if(fp==NULL) { printf("文件打开失败! "); return; } if(IsEmpty(fp)) { printf("文件为空,不需要查找,请先录入信息! "); return; } printf("请输入您要删除的学生的学号: "); scanf("%d",&del); fseek(fp,0,SEEK_SET); while(fread(s+i,sizeof(stu),1,fp)) { if(s[i].xuehao==del) { printf("下面的学号为%d的学生的信息: \n",del); printf("学号姓名高数英语C语言\n"); printf("%5d,%10s,%10.2f,%10.2f,%10.2f\n",s[i].xuehao,s[i].name,s[i].score[0], s[i].score[1],s[i].score[2]); i-=1; } i++; } fclose(fp); len=i; fp=fopen(File,"w"); fseek(fp,0,SEEK_SET); for(i=0;i fwrite(s+i,sizeof(stu),1,fp); fclose(fp); fp=fopen(File,"r"); printf("下面是剩余学生的信息\n"); Print(File);//输出删除后文件中的学生的信息 fclose(fp); } voidModify(char*File)//修改学生的信息 { inti=0,len,flag=1,m,stuxuehao,xuanze; stutemp,s[N]; FILE*fp=fopen(File,"r"); if(fp==NULL) { printf("文件打开失败! "); return; } if(IsEmpty(fp)) { printf("文件为空,不需要查找,请先录入信息! "); return; } printf("请输入需要修改的学生的学号\n"); m=scanf("%d",&stuxuehao); while(m==0) { printf("你输入的学号有误\n"); fflush(stdin); printf("请再次输入你要修改的学号\n"); m=scanf("%d",&stuxuehao); } fseek(fp,0,SEEK_SET); while(fread(s+i,sizeof(stu),1,fp)) { if(s[i].xuehao==stuxuehao) { flag=0; printf("以下是学号为%d的学生的信息: \n",stuxuehao); printf("学号姓名高数英语C语言\n"); printf("%5d,%10s,%10.2f,%10.2f,%10.2f\n",s[i].xuehao,s[i].name,s[i].score[0], s[i].score[1],s[i].score[2]); PrintMenu(); printf("请选择你要修改的项: \n"); scanf("%d",&xuanze); switch(xuanze) { case1: L1: printf("请输入新的学号\n"); scanf("%d",&s[i].xuehao); fseek(fp,0,SEEK_SET); while(fread(&temp,sizeof(stu),1,fp)&&temp.xuehao! =stuxuehao)//判断新输入的学号是否已经存在 { if(temp.xuehao==s[i].xuehao) { printf("该学生的学号已经存在! \n"); gotoL1; } } printf("请输入新的姓名: "); scanf("%s",s[i].name); printf("请输入新的高数成绩: "); scanf("%f",&s[i].score[0]); printf("请输入新的英语成绩: "); scanf("%f",&s[i].score[0]); printf("请输入新的C语言成绩: "); scanf("%f",&s[i].score[0]); break; case2: L2: printf("请输入新的学号: "); scanf("%d",&s[i].xuehao); fseek(fp,0,SEEK_SET); while(fread(&temp,sizeof(stu),1,fp)&&temp.xuehao! =stuxuehao)//判断新输入的学号是否已经存在 { if(temp.xuehao==s[i].xuehao) { printf("该学生的学号已经存在! \n"); gotoL2; } } break; case3: printf("请输入姓名: "); scanf("%s",s[i].name); break; case4: printf("请输入新的高数成绩: "); scanf("%f",&s[i].score[0]); break; case5: printf("请输入新的英语成绩: "); scanf("%f",&s[i].score[1]); break; case6: printf("请输入新的C语言成绩: "); scanf("%f",&s[i].score[2]); break; default: printf("未进行修改\n"); } } i++; } fclose(fp); if(flag==1) { printf("没有找到学号为%d的学生的相关信息",stuxuehao); return; } len=i; fp=fopen(File,"w"); fseek(fp,0,SEEK_SET); for(i=0;i { fwrite(s+i,sizeof(stu),1,fp); } fclose(fp); fp=fopen(File,"r"); Print(File); fclose(fp); } voidMenu()//输出主程序选择菜单 { printf("\n"); printf("--------------------------------------------------\n"); printf("学生信息管理系统\n"); printf("1.学生成绩录入2.在屏幕上输出文件中的信息\n"); printf("3.学号查询信息4.查询不及格科目及学生名单\n"); printf("5.删除学生信息6.输出排序后的学生成绩\n"); printf("7.修改学生信息8.插入某个学生相关信息\n"); printf("-------------0.退出系统--------------------------\n"); printf("请依照编号选择对应功能\n"); printf("--------------------------------------------------\n"); printf("\n"); } voidPrintMenu()//输出修改选项菜单 { printf("----------------------------------------\n"); printf("\n"); printf("*************修改选项菜单***************\n"); printf("\n"); printf("完全修改请选择: 1修改学号请选择: 2\n"); printf("修改姓名请选择: 3修改数学成绩请选: 3\n"); printf("修改英语成绩请选: 4修改C语言成绩请选: 5\n"); printf("-----------退出修改请选择: 0--------------\n"); printf("\n"); printf("----------------------------------------\n"); } intIsEmpty(FILE*fp)//判断文件是否为空文件 { intlen; fseek(fp,0,SEEK_END);//将指针定位到文件尾部 len=ftell(fp);//取指针的位置以测得长度,返回fp所指向的文件中的读写位置 return(len==0)? 1: 0;//len为0的话表示是空文件 } voidSearch_number(char*File)//按学号查找学生成绩 { intNumber; stutemp;//定义结构体变量temp FILE*fp=fopen(File,"r"); if(fp==NULL) { printf("无法打开文件"); return; } if(IsEmpty(fp)) { printf("文件为空,不需查找,请先录入信息! "); return; } printf("请输入需要查找的学生的学号: "); scanf("%d",&Number); fseek(fp,0,SEEK_SET);//从文件开始进行查找 while(fread(&temp,sizeof(stu),1,fp))//从fp所指向的文件读取一个数据块(sizeof(stu),并放到*temp所指向的内存地址中 { if(temp.xuehao==Number) { printf("以下为学号为%d的学生的信息: \n",Number); printf("%8s%8s%14s%14s%14s\n","学号","姓名","数学成绩","英语成绩","C语言成绩"); printf("%8d%8s%10.1f%15.1f%15.1f\n",temp.xuehao,temp.name,temp.score[0],temp.score[1],temp.score[2]); return;//结束程序 } } printf("没有找到学号为%d的学生的信息! ",Number); return; fclose(fp); } voidSearch_Fail(char*File)/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统