//文件读取需要自己在电脑中添加相应的文件名称
#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);
}