#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define M 3
#define N 100
typedef struct student
{
char xuehao[20];
char xingming[20];
int score[M];
int sum;
}STU;
STU stu[N];
int renshu=0;
void menu();
void fhzjm()
{
char biaozhi[20];
printf("\n");
printf("还需要操作么?如果需要操作请输入:yes,否则请输入:no\n");
scanf("%s",biaozhi);
if(strcmp(biaozhi,"yes")==0)
{
menu();
}
else if(strcmp(biaozhi,"no")==0)
exit(0);
else
{
printf("请输入正确的字符,谢谢!\n");
fhzjm();
}
}
void DengJi()
{
int rs;
int i,j,k=1;
system("CLS");
printf("请输入需要输入几个学生信息:");
scanf("%d",&rs);
for(i=renshu;i<renshu+rs;i++,k++)
{
printf("请输入第%d个学生的学号:",k);
scanf("%s",stu[i].xuehao);
printf("请输入学生的姓名:");
scanf("%s",stu[i].xingming);
printf("请输入学生%d门课的成绩",M);
for(j=0;j<M;j++)
{
printf("请输入第%d门课的成绩:",j+1);
scanf("%d",&stu[i].score[j]);
stu[i].sum += stu[i].score[j];
}
}
renshu=renshu+rs;
fhzjm();
}
void ShanChu()
{
char shanchuinfo[10];
system("CLS");
printf("删除全部学生信息请输入\"all\",删除指定学号的学生信息请输入\"one\"\n");
scanf("%s",shanchuinfo);
if(strcmp(shanchuinfo,"all")==0)
{
renshu=0;
printf("删除成功\n\n");
}
else if(strcmp(shanchuinfo,"one")==0)
{
struct student *p=NULL;
char choice[20];
int i,j,k=0;
printf("请输入你要删除的人的学号:");
scanf("%s",choice);
for(i=0;i<renshu;i++)
{
if(strcmp(choice,stu[i].xuehao)==0)
{
k=1;j=i;break;
}
}
if(k)
{
if(renshu==1)
{
p=&stu[0];
free(p);
renshu=0;
}
else
{
for(i=j;i<renshu;i++)
{
stu[i]=stu[i+1];
}
renshu=renshu-1;
}
printf("删除成功\n\n");
}
}
else
{
printf("输入数据错误!\n");
ShanChu();
}
fhzjm();
}
void LiuLan()
{
int i,j;
system("CLS");
if(renshu==0)
{
printf("系统里面没有任何学生的信息!\n");
}
else
{
for(i=0;i<renshu;i++)
{
printf("第%d个学生的学号为:%s\n",i+1,stu[i].xuehao);
printf("第%d个学生的姓名为:%s\n",i+1,stu[i].xingming);
for(j=0;j<M;j++)
{
printf("第%d个学生的第%d门课的成绩:%d\n",i+1,j+1,stu[i].score[j]);
}
printf("第%d个学生的总成绩为:%d\n",i+1,stu[i].sum);
}
}
fhzjm();
}
void ChaZhao()
{
char choice[10],xx[20];
int i,j,k=0;
system("CLS");
if(renshu==0)
{
printf("系统里面没有任何学生的信息!\n");
fhzjm();
}
printf("三种查找方式:学号,姓名,成绩,请输入查找方式:");
scanf("%s",choice);
if(strcmp(choice,"学号")==0)
{
printf("请输入需要查找学生的学号:");
scanf("%s",xx);
for(i=0;i<renshu;i++)
{
if(strcmp(xx,stu[i].xuehao)==0)
{
j=i;k=1;break;
}
}
if(k==0)
printf("输入信息有误:\n");
else
{
printf("您所查找的学生的信息为:\n");
printf("----学号----姓名----英语成绩----高数成绩----计算机成绩\t\n");
printf("------%s------%s-------%d---------%d-------------%d\t\n",stu[j].xuehao,stu[j].xingming,stu[j].score[0],stu[j].score[1],stu[j].score[2]);
}
}
else if(strcmp(choice,"姓名")==0)
{
printf("请输入需要查找学生的姓名:\n");
scanf("%s",xx);
for(i=0;i<renshu;i++)
{
if(strcmp(xx,stu[i].xingming)==0)
{
j=i;k=1;break;
}
}
if(k==0)
printf("输入信息有误:\n");
else
{
printf("您所查找的学生的信息为:\n");
printf("----学号-----姓名-----英语成绩-----高数成绩-------计算机成绩---\n");
printf("----%s-----%s-----------%d-----------%d---------------%d---\n",stu[j].xuehao,stu[j].xingming,stu[j].score[0],stu[j].score[1],stu[j].score[2]);
}
}
else if(strcmp(choice,"成绩")==0)
{
printf("请输入需要查找学生的成绩:\n");
scanf("%s",xx);
for(i=0;i<renshu;i++)
{
if(strcmp(xx,stu[i].xingming)==0)
{
j=i;k=1;break;
}
}
if(k==0)
printf("输入信息有误:\n");
else
{
printf("您所查找的学生的信息为:\n");
printf("----学号-----姓名-----英语成绩-----高数成绩-------计算机成绩---\n");
printf("----%s-----%s-----------%d-----------%d---------------%d---\n",stu[j].xuehao,stu[j].xingming,stu[j].score[0],stu[j].score[1],stu[j].score[2]);
}
}
fhzjm();
}
void PaiXu()
{
struct student *p1[N],**p2,*temp;
int i,j;
system("CLS");
p2=p1;
for( i=0;i<renshu;i++)
{
p1[i]=stu+i;
}
for( i=0;i<renshu;i++)
{
for( j=i+1;j<renshu;j++)
{
if((*(p2+i))->sum<(*(p2+j))->sum)
{
temp=*(p2+i);
*(p2+i)=*(p2+j);
*(p2+j)=temp;
}
}
}
printf("按照总成绩排序之后的信息为:\n");
printf("----学号-----姓名------总成绩----\n");
for( i=0;i<renshu;i++)
{
printf("----%s-----%s---------%d\n",(*(p2+i))->xuehao,(*(p2+i))->xingming,(*(p2+i))->sum);
}
fhzjm();
}
void CunChu()
{
int i;
FILE *rs;
if((rs=fopen("card.dat","wb"))==NULL)
{
printf("not open");
exit(0);
}
for(i=0;i<renshu;i++)
{
fwrite(&stu[i], sizeof(stu[i]), 1, rs);
}
if(ferror(rs))
{
fclose(rs);
perror("写文件失败!\n");
return;
}
printf("存储文件成功!\n");
fclose(rs);
fhzjm();
}
void DaoChu()
{
struct student t;
int i=0;
FILE* fp = fopen("card.dat", "rb");
renshu=0;
if(NULL==fp)
{
perror("读取文件打开失败!\n");
return;
}
memset(stu,0x0,sizeof(stu));
while(1)
{
fread(&t,sizeof(t),1,fp);
if(ferror(fp))
{
fclose(fp);
perror("读文件过程失败!\n");
return;
}
if(feof(fp))
{
break;
}
stu[i]=t;
i++;
}
fclose(fp);
renshu=i;
printf("导出文件成功!\n");
fhzjm();
}
void menu()
{
int n;
system("CLS");
printf(" 学生信息管理系统\n");
printf(" 作者:****\n");
printf("-------------------MENU-----------------\n");
printf(" 1.登记学生信息\n");
printf(" 2.删除学生信息\n");
printf(" 3.浏览所有已经登记的学生\n");
printf(" 4.查找\n");
printf(" 4.1.按学号查找\n");
printf(" 4.2按姓名查找\n");
printf(" 4.3按成绩查找\n");
printf(" 5.根据总成绩排序\n");
printf(" 6.存储到文件\n");
printf(" 7.从文件导出\n");
printf(" 8.退出系统\n");
a: printf(" 请选择:");
scanf("%d",&n);
switch (n)
{
case 1:
DengJi();break;
case 2:
ShanChu();break;
case 3:
LiuLan();break;
case 4:
ChaZhao();break;
case 5:
PaiXu();break;
case 6:
CunChu();break;
case 7:
DaoChu();break;
case 8:
exit(0);break;
default:
{
printf("请输入1-8之间的数字,谢谢!\n");
goto a;
}
}
}
main()
{
menu();
}
/