学生成绩管理系统.docx

上传人:b****4 文档编号:24364645 上传时间:2023-05-26 格式:DOCX 页数:25 大小:19.54KB
下载 相关 举报
学生成绩管理系统.docx_第1页
第1页 / 共25页
学生成绩管理系统.docx_第2页
第2页 / 共25页
学生成绩管理系统.docx_第3页
第3页 / 共25页
学生成绩管理系统.docx_第4页
第4页 / 共25页
学生成绩管理系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统.docx

《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(25页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统.docx

学生成绩管理系统

/*学生成绩管理主要要求:

(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)/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1