#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 100 //最大人数
int M; //实际人数
typedef int datatype ;
typedef char keytype;
struct student
{
keytype xuehao[10];
keytype xingming[10];
keytype xingbie[10];
keytype xuexiao[10];
datatype chengji;
}stu[maxsize];
typedef struct
{
datatype key;
}Datatype;
typedef struct
{
Datatype r[maxsize];
int length;
}seqlist;
void a(char ch,int n); //表头
void xianshi(); //显示
void daoru(); //导入
void baocun(); //保存
void chazhao(); //查找
void xinzeng(); //新增
void xiugai(); //修改
void shanchu(); //删除
void binsearch(); //zheban
void title() //标题
{
printf("%-10s%-10s%-10s%-10s%-5s\n","学号","姓名","性别","学校","成绩");
}
void a(char ch,int n) //表头
{
int i;
for(i=0;i<n;i++)
printf("%c",ch);
}
void b(struct student s) //导入一个学生的信息
{
printf("%-10s%-10s%-10s%-10s%-5d\n",s.xuehao,s.xingming,s.xingbie,s.xuexiao,s.chengji);
}
void daoru() //导入所有学生的信息
{
struct student s;
int i=0;
FILE *fp;
if((fp=fopen("a.txt","r"))==NULL)
{
printf("error\n");
exit(0);
}
while(fscanf(fp,"%s%s%s%s%d",s.xuehao,s.xingming,s.xingbie,s.xuexiao,&s.chengji)!=EOF)
{
stu[i]=s;
i++;
}
M=i;
printf("共有%d个学生的信息被导入\n",M);
}
void xianshi()
{
int i;
printf("\n");
a('*',80);
printf("\n");
title();
for(i=0;i<M;i++)
b(stu[i]);
a('*',80);
printf("\n\n");
printf("已经显示所有学生的信息,共有%d个学生\n",M);
printf("请按回车键继续");
getchar();
system("cls");
}
void baocun() //保存
{
int j=0;
FILE *fp;
if((fp=fopen("a.txt","w"))==NULL)
{
printf("error\n");
exit(0);
}
while(j<M+1)
{
if(stu[j].chengji!=0)
fprintf(fp,"%-10s %-10s %-10s %-10s %-5d\n",stu[j].xuehao,stu[j].xingming,stu[j].xingbie,stu[j].xuexiao,stu[j].chengji);
j++;
}
printf("学生信息已保存\n");
fclose(fp);
}
void xinzeng() //新增
{
int i;
char ch;
for(i=M;i<maxsize;i++)
{
printf("请输入新增的学生的学号:");
gets(stu[i].xuehao);
printf("请输入新增学生的姓名:");
gets(stu[i].xingming);
printf("请输入新增学生的性别:");
gets(stu[i].xingbie);
printf("请输入新增学生的学校:");
gets(stu[i].xuexiao);
printf("请输入新增学生的成绩:");
scanf("%d",&stu[i].chengji);
printf("新增学生的信息是:\n");
title();
b(stu[i]);
baocun();
printf("输入Y继续输入/输入N退出:");
getchar();
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
printf("请输入新增的学生的学号:");
gets(stu[i].xuehao);
printf("请输入学生的姓名:");
gets(stu[i].xingming);
printf("请输入学生的性别:");
gets(stu[i].xingbie);
printf("请输入学生的学校:");
gets(stu[i].xuexiao);
printf("请输入学生的成绩:");
scanf("%d",&stu[i].chengji);
title();
b(stu[i]);
baocun();
}
else if(ch=='N'||ch=='n')
{
system("cls");
break;
}
}
}
void chazhao() //查找
{
keytype xingming[10],xuehao[10];
int i,ch;
while(1)
{
a('*',80);
printf("\n");
a(' ',20);
printf("查找学生信息\n");
printf("\n");
a(' ',20);
printf("1.按名字查询\n");
a(' ',20);
printf("2.按学号查询\n");
a(' ',20);
printf("3.退出\n");
a('*',80);
printf("\n");
printf("请输入1,2或3:");
scanf("%d",&ch);
if(ch==1)
{
printf("请输入学生的姓名:");
scanf("%s",xingming);
printf("\n");
a('*',80);
printf("\n");
for(i=0;i<M;i++)
{
if(strcmp(stu[i].xingming,xingming)==0)
{
printf("姓名为%s学生的信息是:\n\n",xingming);
title();
b(stu[i]);
a('*',80);
printf("\n\n");
break;
}
else
printf("查无此人\n");
}
}
else if(ch==2)
{
printf("请输入学生的学号:");
scanf("%s",xuehao);
printf("\n");
a('*',80);
printf("\n");
for(i=0;i<M;i++)
{
if(strcmp(stu[i].xuehao,xuehao)==0)
{
printf("学号为%s学生的信息是:\n\n",xuehao);
title();
b(stu[i]);
a('*',80);
printf("\n\n");
break;
}
else
printf("查无此人\n");
}
}
else if(ch==3)
{
system("cls");
return;
}
}
}
void xiugai() //修改
{
int i;
keytype xuehao[10],num[10],ch;
a('*',80);
printf("\n");
printf("请输入需要修改的学生的学号:");
scanf("%s",xuehao);
for(i=0;i<M;i++)
{
if(strcmp(stu[i].xuehao,xuehao)==0)
{
printf("此学生的信息是:\n");
title();
b(stu[i]);
getchar();
printf("请输入学生的新信息:\n");
printf("请输入学号:");
gets(stu[i].xuehao);
printf("请输入姓名:");
gets(stu[i].xingming);
printf("请输入性别:");
gets(stu[i].xingbie);
printf("请输入学校:");
gets(stu[i].xuexiao);
printf("请输入成绩:");
scanf("%d",&stu[i].chengji);
getchar();
printf("修改后的学生的信息是:\n");
title();
b(stu[i]);
baocun();
printf("是否继续修改学生信息(Y继续输入/输入N退出):");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
printf("请输入需要修改的学生的学号:");
scanf("%s",xuehao);
if(strcmp(stu[i].xuehao,xuehao)==0)
{
printf("此学生的信息是:\n");
title();
b(stu[i]);
printf("请输入学生的新信息:\n");
printf("请输入学号:");
gets(stu[i].xuehao);
printf("请输入姓名:");
gets(stu[i].xingming);
printf("请输入性别:");
gets(stu[i].xingbie);
printf("请输入学校:");
gets(stu[i].xuexiao);
printf("请输入成绩:");
scanf("%d",&stu[i].chengji);
printf("修改后的学生的信息是:\n");
title();
b(stu[i]);
baocun();
}
}
else if(ch=='N'||ch=='n')
{
printf("输入回车键返回");
system("cls");
return;
}
}
else if(stu[i].xuehao,xuehao!=0)
{
printf("无学号为%s的学生\n",xuehao);
printf("是否继续修改学生信息(Y继续输入/输入N退出):");
getchar();
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
printf("请输入需要修改的学生的学号:");
scanf("%s",num);
if(strcmp(stu[i].xuehao,num)==0)
{
printf("此学生的信息是:\n");
title();
b(stu[i]);
getchar();
printf("请输入学生的新信息:\n");
printf("请输入学号:");
gets(stu[i].xuehao);
printf("请输入姓名:");
gets(stu[i].xingming);
printf("请输入性别:");
gets(stu[i].xingbie);
printf("请输入学校:");
gets(stu[i].xuexiao);
printf("请输入成绩:");
scanf("%d",&stu[i].chengji);
getchar();
printf("修改后的学生的信息是:\n");
title();
b(stu[i]);
baocun();
}
else if(ch=='N'||ch=='n')
{
printf("输入回车键返回");
system("cls");
return;
}
}
}
}
}
void shanchu() //删除
{
int i,j,m=0;
keytype xuehao[10];
char ch;
while(1)
{
printf("请输入需要删除的学生的学号:");
gets(xuehao);
for(i=0;i<M;i++)
if(strcmp(stu[i].xuehao,xuehao)==0)
{
m=1;
break;
}
if(m)
{
printf("该学生的信息是:\n");
a('*',80);
printf("\n");
title();
b(stu[i]);
a('*',80);
printf("\n\n");
printf("是否确定删除学生信息(按Y/y继续输入,N/n退出)");
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
for(j=i;j<M;j++)
stu[j]=stu[j+1];
M--;
printf("删除成功,按回车键继续\n");
getchar();
system("cls");
baocun();
}
break;
}
else
{
printf("不存在学号为%s学生\n",xuehao);
printf("请输入需要删除的学生的学号:");
gets(xuehao);
for(i=0;i<M;i++)
if(strcmp(stu[i].xuehao,xuehao)==0)
{
m=1;
break;
}
if(m)
{
printf("该学生的信息是:\n");
a('*',80);
printf("\n");
title();
b(stu[i]);
a('*',80);
printf("\n\n");
printf("是否确定删除学生信息(按Y/y继续输入,N/n退出)");
scanf("%c",&ch);
getchar();
if(ch=='Y'||ch=='y')
{
for(j=i;j<M;j++)
stu[j]=stu[j+1];
M--;
printf("删除成功,按回车键继续\n");
getchar();
system("cls");
baocun();
}
break;
}
}
}
}
void binsearch(seqlist s,datatype k)
{
int low,mid,high;
low=0;high=s.length-1;
while(low<=high)
{
mid=(low+high)/2;
if(s.r[mid].key=k)
return mid;
else if(s.r[mid].key<k)
high=mid-1;
else
low=mid+1;
}
return -1;
}
void main() //主函数
{
int choice;
a(' ',27);
printf("欢迎使用成绩管理系统\n");
daoru();
while(1)
{
printf("\n");
a(' ',30);
printf("成绩管理系统\n");
a('*',80);
printf("\n");
a(' ',30);
printf("1.显示成绩\n");
a(' ',30);
printf("2.新增成绩\n");
a(' ',30);
printf("3.查找学生成绩\n");
a(' ',30);
printf("4.修改成绩信息\n");
a(' ',30);
printf("5.删除成绩信息\n");
a(' ',30);
printf("6.退出\n");
a('*',80);
printf("\n\n");
printf("请输入1-6: ");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
xianshi();
break;
case 2:
xinzeng();
break;
case 3:
chazhao();
break;
case 4:
xiugai();
break;
case 5:
shanchu();
break;
case 6:
baocun();
printf("谢谢使用\n");
return;
default:
system("cls");
continue;
}
}
}