成绩管理系统

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#define M 1000
//******结构体
struct student{
char name[30];// 学生姓名
char num[30];//学号
int zy;//专业
int bj;//班级
int math;//数学成绩
int yy;//英语成绩
int dl;//语文成绩
int cyy;//C语言成绩
int ty;//体育成绩
int s;//总分
double pj;//平均分
};
//开始函数声明
void fileread(struct student stu[M]);//*读取文件函数
void filesave(struct student stu[M]);//*保存文件函数
void input(struct student stu[M]);//****输入数据函数
void output(struct student stu[M]);//***输出函数
void del(struct student stu[M]);//******删除学生信息函数 (1 、2)
void gai(struct student stu[M]);//******改成绩函数
void chakang(struct student stu[M]);//**查询学生成绩信息函数
void name_(struct student stu[M]);//****使用学生姓名删其信息 1
void num_(struct student stu[M]);//*****使用学生学号删其信息 2
void order(struct student stu[M]);//****进行排序函数

int count=0;//输入学生成绩信息的个数,一开始为零
struct student t;
//这个t是进行order排序时用的
int main()
{
int sum=0,xuan;//an一开始进入界面进行选择 ,
system(“mode con: cols=369 lines=3690”); //控制编译器高和宽
struct student stu[M];
//*代码运行界面
printf("\t\t\t\t\t\t 欢迎使用学生成绩管理信息系统\n");
do{
printf("\t\t\t\t\t -------------------------------------------\n");
printf("\t\t\t\t\t\t 学生成绩信息管理系统\n");
printf("\t\t\t\t\t\t\t ****************\n");
printf("\t\t\t\t\t\t\t 1、 输入学生信息\n");
printf("\t\t\t\t\t\t\t 2、 浏览学生信息\n");
printf("\t\t\t\t\t\t\t 3、 查看学生信息\n");
printf("\t\t\t\t\t\t\t 4、 修改学生成绩\n");
printf("\t\t\t\t\t\t\t 5、 删除学生信息\n");
printf("\t\t\t\t\t\t\t 6、 学生信息排序\n");
printf("\t\t\t\t\t\t\t 7、 读取文件信息\n"); //从文件读取
printf("\t\t\t\t\t\t\t 8、 保存到文件\n"); //保存到文件
printf("\t\t\t\t\t\t\t 9、 退出系统\n");
printf("\t\t\t\t\t\t\t 10、帮助系统\n");
printf("\t\t\t\t\t\t\t ***************\n");
printf("\t\t\t\t\t\t\t 请输入你的选择\n");
scanf("%d",&xuan); //进行选择功能
fflush(stdin); //清除输入缓冲区
if (xuan>9||xuan<=0)
{
sum++;
if (sum>=8)
{
printf(“输入错误次数过8次,程序将重新开始\n”);
//通过限制错误输入,避免进入死胡同
system(“pause”); //程序暂停,重新选择
system(“cls”); //清屏语句
}
}
switch (xuan) //根据选择,调用不同的函数来完成不同的任务
{
case 1:input(stu);break; //输入
case 2:output(stu);break; //输出
case 3:chakang(stu);break; //查询
case 4:gai(stu);break; //修改
case 5:del(stu);break; //删除
case 6:order(stu);break; //排序
case 7:fileread(stu);break;//读取文件数据
case 8:filesave(stu);break;//保存文件数据
case 9:printf(“使用完毕,请关掉程序\n”);system(“pause”);break;
default:printf(“无效的选择,请重新输入\n”);break;
}
}while (xuan!=9);
printf(“本程序结束 over\n”);
return 0;
}
void filesave(struct student stu[M])//保存文件函数
{
int a=0;
char b;
FILE *fp;
printf(“请确认一边是否已经输入学生信息了:‘y’ or ‘n’?\n”);
scanf("%c",&b);
fflush(stdin);//清除输入缓冲区
while(b!=‘y’&&b!=‘n’)
{
if(b!=‘y’&&b!=‘n’)
printf(“输入错误,重新输入\n”);
printf(“确定请输入’y’ or ‘n’?\n”);
scanf("%c",&b);
fflush(stdin);//清除输入缓冲区
}
if(b==‘y’)
{
if((fp=fopen(“E:\123\新建文件夹”,“wb”))NULL)
{
printf(“文件打开错误,程序无法进行\n”);
exit(0);
}
for(a=0;a<count;a++)
{
fwrite(&stu[a],sizeof(struct student),1,fp);
}
fclose(fp);
if(count
0)
printf(“无学生成绩信息,不能保存\n”);
else
printf(“数据已经保存 ok\n”);
}
else
return;
}
void fileread(struct student stu[M])//读取文件函数
{
int a=0;
char b;
FILE fp;
system(“cls”);//清屏语句
printf(“请确认是否已经输入或存有学生信息:‘y’or’n’?\n”);
scanf("%c",&b);
fflush(stdin);//清除输入缓冲区
while(b!=‘y’&&b!=‘n’)
{
if(b!=‘y’&&b!=‘n’)
printf(“输入错误,重新输入\n”);
printf(“请确认是否已经输入或存有学生信息:‘y’or’n’?\n”);
scanf("%c",&b);
fflush(stdin);//清除输入缓冲区
}
if(b==‘y’)
{
if((fp=fopen(“E:\123\新建文件夹”,“rb”))==NULL)
{
printf(“文件打开错误,程序不能进行\n”);
exit(0);
}
fread(&stu[a],sizeof(struct student),1,fp);
count=0;
count++;
a++;
while(fread(&stu[a],sizeof(struct student),1,fp))
{
a++;
count++;
}
fclose(fp);
printf(“数据读取完毕!!!\n”);
system(“cls”);//清屏语句
system(“pause”);//系统重新开始 ,进行选择功能(1~9)
}
else
return;
}
void input(struct student stu[M]) //输入函数

{
int len;
system(“cls”);//清屏语句
printf(“请添加要输入学生的信息\n”);
do {
printf(“输入学生学号(6位数)\n”);
//do-while循环,输错时,有提示(学号为6个数字)
scanf("%s",&stu[count].num);
len=strlen(stu[count].num);

}while(len!=6);
printf("输入学生的姓名\n");
scanf("%s",stu[count].name);
printf("输入学生的专业代码:1电子信息工程 2计算机科学与技术 3自动化 4电气与自动化工程 \n");
//采用如此方法解决了专业输入难问题
scanf("%d",&stu[count].zy);
printf("输入学生班级号码:1、1601 2、1602 3、1603  \n");
scanf("%d",&stu[count].bj);
do {
printf("按顺序输入不大于100的学生各科成绩\n");
printf("数学、英语、语文、C语言、体育\n");
scanf("%d%d%d%d%d",&stu[count].math,&stu[count].yy,&stu[count].dl,&stu[count].cyy,&stu[count].ty);
}while(stu[count].math>100||stu[count].yy>100||stu[count].dl>100||stu[count].cyy>100||stu[count].ty>100);
//判断分数值是否超过100 ,若超过则重新输入 
stu[count].s=(stu[count].math+stu[count].yy+stu[count].dl+stu[count].cyy+stu[count].ty);
//先求总分
stu[count].pj=stu[count].s/5.0;      //求出平均值
count++;   //输入学生成绩信息的个数 

}
void output(struct student stu[M]) //*输出函数
{
int j;
system(“cls”);//清屏语句
if (count0)
{
printf(“目前没有学生信息记录\n”);
return;
}
for (j=0;j<count;j++)
{
for (j=0;j<count;j++)
{ //for循环控制输出的个数
printf("学号:%s ",stu[j].num);
printf("姓名:%s ",stu[j].name);
if (stu[j].zy
1)
printf("专业:电子信息工程 ");
else if (stu[j].zy2)
printf("专业:计算机科学与技术 ");
else if(stu[j].zy
3)
printf("专业:自动化 ");
else
printf("专业:电气与自动化工程 ");
printf("班级:184%d ",stu[j].bj);
printf("数学:%d ",stu[j].math);
printf("英语:%d ",stu[j].yy);
printf("语文:%d ",stu[j].dl);
printf(“C语言:%d “,stu[j].cyy);
printf(“体育:%d “,stu[j].ty);
printf(“总分:%d “,stu[j].s);
printf(“平均:%.1lf “,stu[j].pj);
printf(“顺序:%d \n”,j+1);
}
}
}
void chakang(struct student stu[M]) //*****查看函数 ***
{
int j=0;
char xh[25];//通过学号查找学生信息
system(“cls”);
if(count0)
{
printf(“目前没有学生信息\n”);
return;
}
else
{
printf(“请输入你想要查看的同学学号(12位数字)\n”);
scanf("%s",&xh);
fflush(stdin);//清除输入缓冲区
for(j=0;j<count;j++)
{
if(strcmp(stu[j].num,xh)0)//判断大小是否相等
{
printf("学号:%s ",stu[j].num);
printf("姓名:%s ",stu[j].name);
if (stu[j].zy
1)
printf("专业:电子信息工程 ");
else if (stu[j].zy
2)
printf(“专业:计算机科学与技术 “);
else if(stu[j].zy3)
printf("专业:自动化 ");
else
printf("专业:电气与自动化工程 ");
printf("班级:184%d ",stu[j].bj);
printf("数学:%d ",stu[j].math);
printf("英语:%d ",stu[j].yy);
printf("语文:%d ",stu[j].dl);
printf("C语言:%d ",stu[j].cyy);
printf("体育:%d ",stu[j].ty);
printf("总分:%d ",stu[j].s);
printf("平均:%.1lf ",stu[j].pj);
// **在查看个人学生成绩时,可以看到总分排名
int a,b,c=j;
for (a=0;a<count;a++) //**冒泡排序
{
for (b=a+1;b<count;b++)
{
if (stu[b].s>stu[a].s)
{
t=stu[b];
stu[b]=stu[a];
stu[a]=t;
}
}
}
int d=1;
for(a=0;a<count;a++)
{
if(stu[c].s<stu[a].s)
d++;
else
break;
}
printf(“总分排名:%d\n”,d);
}
}
if(j
count)//判断是否有学生成绩信息
printf(“没有你所查看的学生信息\n”);
}
}
void gai(struct student stu[M]) //修改成绩函数
{
int j,course;
char xh[25];
system(“cls”);//清屏语句
if (count==0)//判断是否有学生成绩信息
{
printf(“目前没有学生信息\n”);
return;
}
else
{
printf(“修改的学生学号为:\n”);
scanf(”%s”,&xh);
fflush(stdin);//清除输入缓冲区
for (j=0;j<count;j++)
if (strcmp(stu[j].num,xh)0) //
{
printf(“修改学生成绩\n”);
printf(“选择课程: 1、数学 2、英语 3、语文 4、C语言 5、体育\n”);
scanf("%d",&course);
printf(“改为多少分:\n”);
switch(course)
{ //进行修改所选学生的一门的成绩
case 1:scanf("%d",&stu[j].math);break;
case 2:scanf("%d",&stu[j].yy);break;
case 3:scanf("%d",&stu[j].dl);break;
case 4:scanf("%d",&stu[j].cyy);break;
case 5:scanf("%d",&stu[j].ty);break;
default:printf(“请重新输入\n”);break;
}
}
}
}
void del(struct student stu[M]) //自定义删除函数
{
int choice;
system(“cls”);//清屏语句
if (count
0)
{
printf(“目前没有学生信息\n”);
return;
}
else
{
printf(“请选择你所要删除的方式:1、学号 2、姓名 3、取消\n”);
scanf(”%d”,&choice);
switch(choice)
{
case 3:return;break;
case 2:name_(stu);break;
case 1:num_(stu);break;
default:printf(”,输入错误,重新输入\n”);break;
}
}
}
void num_(struct student stu[M]) //通过学号删除学生信息函数
{
int j,index=0,k=count;
char xh[25];
system(“cls”);//清屏语句
printf(“所要删除的学生学号为:\n”);
scanf(”%s”,xh);
fflush(stdin);//清除输入缓冲区
for (j=0;j<count;j++)
{
if (strcmp(stu[j].num,xh)0)
{
for (j=index;j<count;j++)
stu[j]=stu[j+1];
count–;
if (count<k)
printf(“删除成功\n”);
}
index++;}
if (j
count)
printf(“没有你所要删除的学生的信息\n”);
}
void name_(struct student stu[M]) //通过姓名方式删除学生信息函数
{
int flag=0,j,k=count;
char xm[25];
system(“cls”);//清屏语句
printf(“所要删除的学生学号为:\n”);
scanf(”%s”,xm);
fflush(stdin);//清除输入缓冲区
for (j=0;j<count;j++)
{
if (strcmp(stu[j].num,xm)==0)
{

for (j=flag-1;j<count;j++)             
stu[j]=stu[j+1];
count--;
if (count<k)
printf("删除成功\n");
}	
flag++;}
if (j==count)
printf("没有你所要删除的学生的信息\n");

}
void order(struct student stu[M]) //排序函数
{
int j,choice,i;
system(“cls”);//清屏语句
printf(“请输入你想要进行排序的方式(所有排序的方式均是降序)!!!\n”);
printf(“1、数学 2、英语 3、语文 4、C语言 5、体育 6、平均分 7、学号 \n”);
scanf("%d",&choice);
//以下都使用冒泡排序 *****
switch (choice)
{
case 1:for (i=0;i<count;i++) // ** 数学排名(高分–>低分)

{
for (j=i+1;j<count;j++)
{
if (stu[j].math>stu[i].math)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
};break;
case 2:for (i=0;i<count;i++) //
英语排名(高分–>低分)

{
for (j=i+1;j<count;j++)
{
if (stu[j].yy>stu[i].yy)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;
case 3:for (i=0;i<count;i++) // ** 专业课导论排名(高分–>低分)

{
for (j=i+1;j<count;j++)
{
if (stu[j].dl>stu[i].dl)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;
case 4:for (i=0;i<count;i++) // *** C语言排名(高分–>低分)**
{
for (j=i+1;j<count;j++)
{
if (stu[j].cyy>stu[i].cyy)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;
case 5:for (i=0;i<count;i++) // ** 体育排名(高分–>低分)**
{
for (j=i+1;j<count;j++)
{
if (stu[j].ty>stu[i].ty)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;
case 6:for (i=0;i<count;i++) //平均分(总分)排名(高分–>低分) ***
{
for (j=i+1;j<count;j++)
{
if (stu[j].pj>stu[i].pj)
{
t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;
case 7:for (i=0;i<count;i++) // ** 学号排名(小到大) **
{
for (j=i+1;j<count;j++)
{
if (strcmp(stu[j].num,stu[i].num)<0)
{ t=stu[j];
stu[j]=stu[i];
stu[i]=t;
}
}
}
break;

default:printf("请重新输入\n");break;
}

}

学生成绩管理系统是一个学校不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该为用户提供充足的信息和快捷的查询手段。当前成教学院没有一个完善的成绩信息管理平台,计算机使用主要基于Microsoft Office,不能发挥有效的作用。而且随着我国教育改革的不断深入以及自学教育的不断扩招,参加考试的人越来越多,考试科目的多样化,使得成教学院对自学考试成绩的管理越趋繁琐、复杂,工作业务繁杂,工作量大,这种传统的学生管理模式已经暴露出种种弊端:难以统一调配和处理,效率极低,缺乏科学性以及合理性。随着计算机应用的普及与深入,利用计算机能够对所有自学考试成绩进行统一管理,并进行分析,大大减少教学秘书的工作量,提高工作效率,为教学办公带来了极大的方便。通过操作手册,使用者可以了解本软件的基本工作原理及使用说明。操作人员只需输入一些简单的汉字、数字,就可以存储、查找、修改、打印学生成绩信息等。本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化、达到提高学生成绩管理效率的目的,本系统本着实用性、通用、开放和安全的原则,使数据库开发软件开发制作,实现了学生信息管理、课程信息管理、学生成绩管理、成绩查询等功能。该设计方法易于推广至其它信息化管理系统的设计,充分利用计算机作为辅助工具,实现学生考试成绩从传统的手工管理到计算机管理,对提高管理效率和节约大量的人力、物力有一定的推动作用。本系统一切从实际出发,充分考虑了成绩的内部管理、信息交流等方面的复杂需求,实现成绩的有效管理,真正为学生成绩管理提供一个电子平台。 因此为了充分利用成教学院现有的计算机硬件资源,做好 学生成绩管理工作,提高办事效率,实现全面的、相对集中的办公自动化,开发本系统就成了当务之急,其目的主要为了彻底改变这种繁杂的管理模式,实现全面的、相对集中的、智能化的信息综合管理,为成教学院的教学管理工作带来方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欢天喜地小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值