学生成绩排名系统

来源:互联网 发布:在线端口 编辑:程序博客网 时间:2024/05/07 08:13

//文件读取需要自己在电脑中添加相应的文件名称

#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream>
using namespace std;
void showmeanu();
void add(struct student *a,int *n);                //添加函数
void del(struct student *a,int *n);                 //删除函数
void change(struct student *a,int n);              //修改函数
void search1(struct student *a,int n);             //查询单个函数
void allrank(struct student *a,int n);             //排序所有信息
void printfall(struct student *a,int n);           //打印所有信息
void printf1(struct student *a,int n);             //打印单个信息
void mutirank(struct student *a,int n);            //多重排名函数
void ffprintf(struct student *a,int n);             //写入函数
void fail(struct student *a,int n);
struct student
{
char number[15];
char name [15];
int c;
int math;
int gym;
int all;
int english;
};
int main()
{
struct student a[50];
int n=0,i=0;
char m;
int flag=0;
printf("                    欢迎来到学生成绩排名系统\n");
printf("                    请选择你要执行的项目\n");
FILE *fp;
fp=fopen("H:\\student.txt","r");
if(fp==NULL)
{
printf("文件读取失败\n");
exit(1);
}
int k;
i=0;
while(( fscanf(fp,"%d%s%s%d%d%d%d%d",&k,a[i].number,a[i].name,&a[i].c,&a[i].math,&a[i].english,&a[i].gym,&a[i].all))!=EOF)
i++;
fclose(fp);
n=i;
while(1)
{
system("cls");
showmeanu();
m=getch();
switch(m)
{
case '1':
add(a,&n);
break;
case '2':
if(n==0)
{
printf("亲,还没有联系人呢,按1添加联系人\n");
break;
}
change(a,n);
break;
case '3':
if(n==0)
{
printf("亲,还没有联系人呢,按1添加联系人\n");
break;
}
del(a,&n);
break;
case '4':
if(n==0)
{
printf("亲,还没有联系人呢,按1添加联系人\n");
break;
}
search1(a,n);
printf("\n");
break;
case '5':
if(n==0)
{
printf("亲,还没有联系人呢,按1添加联系人\n");
break;
}
printfall(a,n);
char k;
        printf("按任意键返回……………………\n");
        k=getch();
break;
case '6':
if(n==0)
{
printf("亲,还没有联系人呢,按1添加联系人\n");
break;
}
mutirank(a,n); 
break;
case '7':
fail(a,n);
break;
case '0':
ffprintf(a,n);
return 0;
default :
break;
}
}

//排序函数
void allrank(struct student *a,int n)    
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].all<a[j].all)         //总成绩排名
{
swap(a[i],a[j]);
}
}
}
}
//多重排序
void mutirank(struct student *a,int n)    
{
int i,j;
char k;
printf("                                    请选择你要查询的项目\n");
printf("                                  1---总成绩排名\n");
printf("                                  2---c语言单科成绩排名\n");
printf("                                  3---高数单科成绩排名\n");
printf("                                  4---体育单科成绩排名\n");
k=getch();
switch(k)
{
case '1':
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].all<a[j].all)         //默认总成绩排名
{
swap(a[i],a[j]);
}
}
}
break;
case '2':
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].c<a[j].c)            //c单科排名
{
swap(a[i],a[j]);
}
}
}
break;
case '3':
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].math<a[j].math)    //高数单科排名
{
swap(a[i],a[j]);
}
}
}
break;
case '4':
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].gym<a[j].gym)    //体育单科排名
{
swap(a[i],a[j]);
}
}
}
break;
}
printfall(a,n);
char kk;
printf("按任意键返回……………………\n");
kk=getch();
}
//添加函数
void add(struct student *a,int *n)
{
int i,j;
i=*n;
int flag=0;
printf("请输入你要添加的学号\n");
scanf("%s",a[i].number);
for(j=0;j<*n;j++)
{
if(strcmp(a[i].number,a[j].number)==0)
{
flag=1;
printf("此学生已存在\n");
}
}
if(flag==0)
{
printf("请输入他(她)的姓名:\n");
scanf("%s",a[i].name);
printf("请输入%s的c语言成绩:\n",a[i].name);
scanf("%d",&a[i].c);
printf("请输入%s的数学成绩\n",a[i].name);
scanf("%d",&a[i].math);
printf("请输入%s的体育成绩\n",a[i].name);
scanf("%d",&a[i].gym);
printf("请输入%s的英语成绩\n",a[i].name);
scanf("%d",&a[i].english);
a[i].all=a[i].gym+a[i].english+a[i].c+a[i].math;
printf("添加成功!!\n");
(*n)++;
allrank(a,*n);
}
}
//修改函数
void change(struct student *a,int n)
{
int i;
char k;
int flag=0;
char number[15];
printfall(a,n);
printf("请输入你要修改的学号\n");
scanf("%s",number);
for(i=0;i<n;i++)
{
if(strcmp(number,a[i].number)==0)
{
printf("              请输入你要修改的信息\n\n");
printf("                1---修改姓名\n");
printf("                2---修改学号\n");
printf("                3---修改c成绩\n");
printf("                4---修改高数成绩\n");
printf("                5---修改英语成绩\n");
printf("                6---修改体育成绩\n");
flag=1;
k=getch();
switch (k)
{
case '1':
printf("      输入姓名:\n");
scanf("%s",a[i].name);
break;
case '2':
printf("      输入学号:\n");
scanf("%s",a[i].number);
break;
case '3':
printf("     输入c成绩:\n");
scanf("%d",&a[i].c);
break;
case '4':
printf("     输入高数成绩:\n");
scanf("%d",&a[i].math);
break;
case '5':
printf("     输入英语成绩:\n");
scanf("%d",&a[i].english);
break;
case '6':
printf("     输入体育成绩:\n");
scanf("%d",&a[i].gym);
break;
default :
break;
}

}
if(flag==1)
break;
}
if(flag==1) 
{
a[i].all=a[i].gym+a[i].english+a[i].c+a[i].math;
allrank(a,n);
printf("修改成功!!\n");
}
if(flag==0)
{
printf("没有找到你要修改的学生,是否要添加\n");
printf("1--是        2--否\n");
int xx;
scanf("%d",&xx);
if(xx==1)
add(a,&n);
}
}
//查找单个信息函数
void search1(struct student *a,int n)
{
int i,flag=0;
int xx;
char name[15];
printf("请输入你要查找的姓名\n");
scanf("%s",name);
for(i=0;i<n;i++)
{
if(strcmp(name,a[i].name)==0)
{
printf1(a,i);
flag=1;
}
if(i+1==n&&flag==0)
{
printf("没有你要查询的信息,是否要添加\n");
printf("1--是          2--否\n");
scanf("%d",&xx);
if(xx==1)
add(a,&n);
}
}
}
//删除函数
void del(struct student *a,int *n)
{
int i;
int flag=0;
char name[15];
printf("请输入你要删除的姓名\n");
scanf("%s",name);
for(i=0;i<*n;i++)
{
if(strcmp(name,a[i].name)==0)
{
for(;i<*n;i++)
a[i]=a[i+1];
flag=1;
}
if(flag==1)
{
(*n)--;
printf("删除成功!!\n");
}
if(i+1==*n)
{
printf("没有你要删除的信息\n");
}
}
}
//打印函数
void printf1(struct student *a,int i)
{
printf("排名  学号        姓名  c成绩   高数成绩   英语成绩   体育成绩  总成绩\n");
printf("%2d   %9s %6s %5d %8d %8d   %8d   %8d\n",i+1,a[i].number,a[i].name,a[i].c,a[i].math,a[i].english,a[i].gym,a[i].all);
char k;
printf("按任意键返回……………………\n");
k=getch();
}


void printfall(struct student *a,int n)
{
int i;
printf("排名  学号        姓名  c成绩   高数成绩   英语成绩   体育成绩  总成绩\n");
for(i=0;i<n;i++)
{
printf("%2d   %9s %6s %5d %8d %8d   %8d   %8d\n",i+1,a[i].number,a[i].name,a[i].c,a[i].math,a[i].english,a[i].gym,a[i].all);
}
}
//各科及格情况函数
void fail(struct student *a,int n)
{
int i;
int math=0,english=0,c=0,gym=0;
for(i=0;i<n;i++)
{
if(a[i].math<60)
math++;
if(a[i].c<60)
c++;
if(a[i].gym<60)
gym++;
if(a[i].english<60)
english++;
}
printf("                          高数不及格的人数为:%d\n",math);
printf("                          c语言不及格的人数为:%d\n",c);
printf("                          英语不及格的人数为:%d\n",english);
printf("                          体育不及格的人数为:%d\n",gym);
printf("按任意键返回………………\n");
    char k;
k=getch();
// kbhit();
}


//显示主菜单函数
void showmeanu()
{
printf("                   …………………………………………………………\n");
printf("                   …             1--添加学生信息            …\n");
printf("                   …             2--修改学生信息            …\n");
printf("                   …             3--删除学生信息            …\n");
printf("                   …             4--查看单个学生信息        …\n");
printf("                   …             5--查看所有学生信息        …\n");
    printf("                   …             6--查看学生排名            …\n");
printf("                   …             7--查看各科及格情况        …\n");
printf("                   …             0--退出管理系统            …\n");
printf("                   …………………………………………………………\n");
}
void  ffprintf(struct student *a,int n)
{
FILE *fp;
int i;
fp=fopen("H:\\student.txt","w");
if(fp==NULL)
{
printf("文件打开失败\n");
fclose(fp);
exit(1);
}
for(i=0;i<n;i++)
{
fprintf(fp,"%2d   %9s %6s %5d %8d %8d   %8d   %8d\n",i+1,a[i].number,a[i].name,a[i].c,a[i].math,a[i].english,a[i].gym,a[i].all);
}
fclose(fp);
}



 
0 0
原创粉丝点击