您的位置:首页 > 其它

学生成绩管理系统

2016-12-11 11:00 417 查看
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>

typedef struct Student
{
int id;//学号
char name[20];//名字
float a,b,c,sum,average;//三科分数,总和,平均数
}Student;

//#define size sizeof(Student)//结构体的大小,注释掉的文件操作需要使用
#define MAXSIZE 100 //最大限制

void savefile(Student student[],int n);//保存文件
int readfile(Student student[],int n);//读取文件,返回学生数量值
void mainmenu();//主菜单
void admistermenu();//管理学生信息二级菜单
void lookmenu();//查看学生信息二级菜单
int MainMenu(Student student[],int n);//主菜单处理函数
int AdmisterMenu(Student student[],int n);//管理学生信息二级菜单处理函数
void LookMenu(Student student[],int n);//查看学生信息二级菜单处理函数
int addstudent(Student student[],int n);//录入学生信息
void modifystudent(Student student[],int n);//修改学生信息
void showallstudent(Student student[],int n);//展示所有学生成绩
int deletestudent(Student student[],int n);//删除学生信息
void sortid(Student student[],int n);//按照学号排序
void sortaverage(Student student[],Student std[],int n);//按照平均分排序
void dengji(Student student[],int n);//成绩分析
void geren(Student student[],int n);//查看个人成绩
void last(Student student[],int n);//不及格学生名单

//展示学生成绩信息表头
void showtop()
{
printf("                      ----------------------------------------------------------------\n");
printf("\t\t\t序号\t学号\t姓名\tA\tB\tC\t总分\t平均分\n");
printf("                      ----------------------------------------------------------------\n");
}

//展示所有学生成绩信息
void showallstudent(Student student[],int n)
{
int i;
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("\t\t\t\t\t\t所有学生成绩表\n");
showtop();
for(i=0;i<n;i++)
{
printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);
printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");
}
}

//求所有人的学科总分
void zstudent(Student student[],int n)
{
int i;
float sum[3]={0};
float average[3];
for(i=0;i<n;i++)
{
sum[0]=sum[0]+student[i].a;
sum[1]=sum[1]+student[i].b;
sum[2]=sum[2]+student[i].c;
}
average[0]=sum[0]/n;
average[1]=sum[1]/n;
average[2]=sum[2]/n;
if(n==0){}
else{
printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科总分",sum[0],sum[1],sum[2]);
printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");
printf("\t\t\t%s\t\t\t%.1f\t%.1f\t%.1f\n","学科平均分",average[0],average[1],average[2]);
printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");
}
}

//主菜单
void mainmenu()
{
system("cls");//刷新页面
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("                                               ▉                  ▉\n");
printf("                                               ▉  1.管理学生信息  ▉\n");
printf("                                               ▉  2.查询学生信息  ▉\n");
printf("                                               ▉  0.退出系统      ▉\n");
printf("                                               ▉                  ▉\n");
printf("                                               ▉                  ▉\n\n\n");
}

//管理学生信息二级菜单
void admistermenu()
{
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("                                               ▉                  ▉\n");
printf("                                               ▉  1.录入学生信息  ▉\n");
printf("                                               ▉  2.修改学生信息  ▉\n");
printf("                                               ▉  3.删除学生信息  ▉\n");
printf("                                               ▉  0.返回主菜单    ▉\n");
printf("                                               ▉                  ▉\n\n\n");
}

//查看学生信息二级菜单
void lookmenu()
{
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("                                               ▉  1.查看学生成绩  ▉\n");
printf("                                               ▉  2.查看学生名次  ▉\n");
printf("                                               ▉  3.查看成绩分析  ▉\n");
printf("                                               ▉  4.查看个人成绩  ▉\n");
printf("                                               ▉  5.查看不及格科目▉\n");
printf("                                               ▉  0.返回主菜单    ▉\n\n\n");
}

//主菜单处理函数
int MainMenu(Student student[],int n)
{
system("COLOR 75");//控制台颜色
int select;
do{
mainmenu();
printf("请输入您的选项:");
scanf("%d",&select);
while(select<0||select>2){
fflush(stdin);//清空缓冲区
printf("输入错误,请重新输入:");
scanf("%d",&select);
}
switch(select)
{
case 1:
n=AdmisterMenu(student,n);//管理学生信息子菜单
break;
case 2:
LookMenu(student,n);
break;
}
}while(select!=0);
return n;
}

//管理学生信息二级菜单处理函数
int AdmisterMenu(Student student[],int n)
{
int select;
do{
admistermenu();
printf("请输入您的选项:");
scanf("%d",&select);
while(select<0||select>3){
fflush(stdin);
printf("输入错误,请重新输入:");
scanf("%d",&select);
}
switch(select)
{
case 1:
n=addstudent(student,n);//录入学生信息
break;
case 2:
modifystudent(student,n);
break;
case 3:
n=deletestudent(student,n);
break;
}
}while(select!=0);
return n;
}

//查看学生信息菜单处理函数
void LookMenu(Student student[],int n)
{
int select;
Student std
;
do{
lookmenu();
printf("请输入您的选项:");
scanf("%d",&select);
while(select<0||select>5){
fflush(stdin);
printf("输入错误,请重新输入:");
scanf("%d",&select);
}
switch(select)
{
case 1:
showallstudent(student,n);//学生成绩展示
zstudent(student,n);//总分平均分输出
system("pause");
break;
case 2:
sortaverage(student,std,n);//平均分排序展示
showallstudent(std,n);
zstudent(student,n);
system("pause");
break;
case 3:
dengji(student,n);//成绩分析展示
break;
case 4:
geren(student,n);//个人成绩查询
break;
case 5:
last(student,n);//不及格学生名单
break;
}
}while(select!=0);
}

//录入学生信息
int addstudent(Student student[],int n)
{
int ID,i;
char NAME[20];
float A,B,C;
printf("请输入学生的学号:");
scanf("%d",&ID);
for(i=0;i<n;i++)//防止学号重复
{
if(student[i].id==ID){//学号已存在
printf("您输入的学号已存在!\n");
break;
}
}
if(i==n)//输入的学号不存在
{
printf("请输入学生的姓名:");
scanf("%s",&NAME);
printf("请输入第一科的成绩:");
scanf("%f",&A);
printf("请输入第二科的成绩:");

4000
scanf("%f",&B);
printf("请输入第三科的成绩:");
scanf("%f",&C);
student
.id=ID;
strcpy(student
.name,NAME);
student
.a=A;
student
.b=B;
student
.c=C;
student
.sum=A+B+C;
student
.average=(A+B+C)/3.0;
n++;
printf("录入成功!\n");
}
sortid(student,n);
savefile(student,n);//保存学生信息
system("pause");//暂停一下
return n;
}

//修改学生信息
void modifystudent(Student student[],int n)
{
int ID,i,c;
char y,NAME[20];
float A,B,C;
printf("请输入您要修改的学生的学号:");
scanf("%d",&ID);
for(i=0;i<n;i++)
{
if(student[i].id==ID)//查找学号对应的位置
{
c=i;
break;
}
}
if(c==n)
{
printf("您输入的学号不存在!");
}
else{
printf("请输入修改后的信息:\n");
printf("请输入学生的学号:");
scanf("%d",&ID);
for(i=0;i<n;i++)//防止学号重复
{
if((student[i].id==ID)&&(i!=c)){//学号已存在
printf("您输入的学号已存在!\n");
break;
}
}
if(i==n)//输入的学号不存在
{
printf("请输入学生的姓名:");
scanf("%s",&NAME);
printf("请输入第一科的成绩:");
scanf("%f",&A);
printf("请输入第二科的成绩:");
scanf("%f",&B);
printf("请输入第三科的成绩:");
scanf("%f",&C);
student[c].id=ID;
strcpy(student[c].name,NAME);
student[c].a=A;
student[c].b=B;
student[c].c=C;
student[c].sum=A+B+C;
student[c].average=(A+B+C)/3.0;
printf("修改成功!\n");
sortid(student,n);
savefile(student,n);//保存学生信息
}
}
system("pause");
}

//删除学生信息
int deletestudent(Student student[],int n)
{
int ID,i,j;
printf("请输入您需要删除的学生学号:");
scanf("%d",&ID);
for(i=0;i<n;i++)
{
if(student[i].id==ID)
{
break;
}
}
if(i==n){
printf("您输入学生学号不存在!\n");
}
else{
for(j=i;j<n-1;j++){
student[j]=student[j+1];
}
n--;
printf("删除成功!\n");
savefile(student,n);//保存学生信息
}
system("pause");
return n;
}

//按照学号排序
void sortid(Student student[],int n)
{
Student temp;
int i,j,s;
for(i=0;i<n-1;i++)//简单选择排序
{
s=i;
for(j=i+1;j<n;j++)
{
if(student[s].id>student[j].id)
{
s=j;
}
}
if(s!=i)
{
temp=student[s];
student[s]=student[i];
student[i]=temp;
}
}
}

//按照平均分降序排序
void  sortaverage(Student student[],Student std[],int n)
{
Student temp;
int i,j,s;
for(i=0;i<n;i++)
{
std[i]=student[i];
}
for(i=0;i<n-1;i++)//简单选择排序
{
s=i;
for(j=i+1;j<n;j++)
{
if(std[s].average<std[j].average)
{
s=j;
}
}
if(s!=i)
{
temp=std[s];
std[s]=std[i];
std[i]=temp;
}
}
}

//成绩分析
void dengji(Student student[],int n)
{
int i;
int n1[5]={0};
int n2[5]={0};
int n3[5]={0};
char d[5][20]={"优秀","良好","中等","及格","不及格"};
for(i=0;i<n;i++)
{
if(student[i].a>=90&&student[i].a<=100){
n1[0]++;
}
else if(student[i].a>=80&&student[i].a<90){
n1[1]++;
}
else if(student[i].a>=70&&student[i].a<80){
n1[2]++;
}
else if(student[i].a>=60&&student[i].a<70){
n1[3]++;
}
else{
n1[4]++;
}
}
for(i=0;i<n;i++)
{
if(student[i].b>=90&&student[i].b<=100)
n2[0]++;
else if(student[i].b>=80&&student[i].b<90)
n2[1]++;
else if(student[i].b>=70&&student[i].b<80)
n2[2]++;
else if(student[i].b>=60&&student[i].b<70)
n2[3]++;
else
n2[4]++;
}
for(i=0;i<n;i++)
{
if(student[i].c>=90&&student[i].c<=100)
n3[0]++;
else if(student[i].c>=80&&student[i].c<90)
n3[1]++;
else if(student[i].c>=70&&student[i].c<80)
n3[2]++;
else if(student[i].c>=60&&student[i].c<70)
n3[3]++;
else
n3[4]++;
}
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("\t\t\t\t\t\t学生成绩分析表\n");
printf("                      ----------------------------------------------------------------\n");
printf("\t\t\t等级\t\tA\t\tB\t\tC\n");
printf("                      ----------------------------------------------------------------\n");
for(i=0;i<5;i++)
{
printf("\t\t\t%s\t\t%d\t\t%d\t\t%d\n",d[i],n1[i],n2[i],n3[i]);
printf("\t\t\t\t\t%d%%\t\t%d%%\t\t%d%%\n",100*n1[i]/n,100*n2[i]/n,100*n3[i]/n);
printf("                      ﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋﹋\n");
}
system("pause");
}

//个人成绩查询
void geren(Student student[],int n)
{
int ID;
printf("请输入要查询的学生学号:");
scanf("%d",&ID);
int i;
for(i=0;i<n;i++)
{
if(student[i].id==ID)
{
break;
}
}
if(i==n){
printf("您输入的学生学号不存在!\n");
}
else{
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("\t\t\t\t\t\t学生成绩表\n");
showtop();
printf("\t\t\t%d\t%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n\n",i+1,student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);
}
system("pause");
}

//不及格学生名单
void last(Student student[],int n)
{
char c[3][20]={"A","B","C"};
int nn[3]
;
int n1=0,n2=0,n3=0,i,max;//三科不及格人数
for(i=0;i<n;i++){
if(student[i].a<60)
{
nn[0][n1]=i;
n1++;
}
if(student[i].b<60)
{
nn[1][n2]=i;
n2++;
}
if(student[i].c<60)
{
nn[2][n3]=i;
n3++;
}
}
system("cls");
printf("\n\n                -----------------------------------学生信息管理系统---------------------------------\n\n\n");
printf("\t\t\t\t\t\t不及格学生名单\n");
printf("                      ----------------------------------------------------------------\n");
printf("\t\t\t\t\tA\t\tB\t\tC\n");
printf("                      ----------------------------------------------------------------\n");
max=n1;
if(max<n2){
max=n2;
}
if(max<n3){
max=n3;
}
for(i=0;i<max;i++)
{
if(i<n1){
printf("\t\t\t\t\t%s",student[nn[0][i]].name);
}
else{
printf("\t\t\t\t\t");
}
if(i<n2){
printf("\t\t%s",student[nn[1][i]].name);
}
else{
printf("\t\t");
}
if(i<n3)
{
printf("\t\t%s\n",student[nn[2][i]].name);
}
else{
printf("\t\t\t\n");
}
printf("                      ----------------------------------------------------------------\n");
}
system("pause");
}
//保存文件
void savefile(Student student[],int n)
{
FILE *fp;
int i;
if((fp=fopen("student.txt","w"))==0)
{
printf("ERROR!");
return ;
}
for(i=0;i<n;i++)
{
//写入到文件中
fprintf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",student[i].id,student[i].name,student[i].a,student[i].b,student[i].c,student[i].sum,student[i].average);
}
/*
if((fp=fopen("student.dat","wb"))==NULL)
{
printf("ERROR!");
return ;
}
for(i=0;i<n;i++)
{
fwrite(&student[i],size,1,fp);
}
fwrite(student,size,n,fp);//写入文件
*/
fclose(fp);
}

//读取文件
int readfile(Student student[],int n)
{
FILE *fp;
if((fp=fopen("student.txt","r"))==0)
{
printf("ERROR");
return 0;
}
//fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student
.id,student
.name,&student
.a,&student
.b,&student
.c,&student
.sum,&student
.average);
while(!feof(fp))
{
// n++;
fscanf(fp,"%d\t%s\t%f\t%f\t%f\t%f\t%f\n",&student
.id,student
.name,&student
.a,&student
.b,&student
.c,&student
.sum,&student
.average);
n++;
}
/*
if((fp=fopen("student.dat","rb"))==NULL)
{
printf("ERROR");
return 0;
}
fread(&student[i],size,1,fp);
while(!feof(fp))
{
n++;
fread(&student[i],size,1,fp);
}
*/
fclose(fp);
return n;
}
int main()
{
int n=0;//学生数量
Student student[MAXSIZE];
n=readfile(student,n);//读取学生信息
n=MainMenu(student,n);
savefile(student,n);//保存学生信息
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C