C 学生成绩管理 源码
#include
#include
int N;
typedef struct
{
char no[20];
char name[20];
float math;
float physi;
float engl;
float comp;
}Student;
void ReadFile(Student stu[]);//读文件
void DispStudent(Student stu[],int n);//显示
void DispMainMenu();//显示主菜单
char InputMenuIterm();//输入菜单选项
void DispSortMenu();
void DispGradeSortMenu();
void Sort();
void SortOnName(Student stu[],int n);//按姓名排序
void SortOnMath(Student stu[],int n);
void SortOnPhysi(Student stu[],int n);
void SortOnEngl(Student stu[],int n);
void SortOnComp(Student stu[],int n);
void SortOnNo(Student stu[],int n);
void WriteFile(Student stu[]);
void FindMenu();
void FindByNo(Student stu[],int n);
void FindByName(Student stu[],int n);
void delete(Student stu[],int n);
void insert(Student stu[],int n);
void Add(Student stu[],int n);
void update(Student stu[],int n);
int main()
{
int i,j;
char MenuIterm;
Student stus[50];//结构体数组
ReadFile(stus);
printf("原始数据:\n");
DispStudent(stus,N);
Menu1:
do{
DispMainMenu();
MenuIterm=InputMenuIterm();
switch(MenuIterm)
{
case '0':
exit(0);
break;
case '1':
Menu2:
do{
DispSortMenu();
MenuIterm=InputMenuIterm();
switch(MenuIterm)
{
case '0':
printf("已退出二级菜单!\n");
goto Menu1;
case '1':
printf("按学号排序:\n");
SortOnNo(stus,N);
DispStudent(stus,N);
goto Menu2;
break;
case '2':
printf("按姓名排序:\n");
SortOnName(stus,N);
DispStudent(stus,N);
goto Menu2;
break;
case '3':
Menu3:
do{
DispGradeSortMenu();
MenuIterm=InputMenuIterm();
switch(MenuIterm)
{
case '0':
printf("已退出三级菜单!\n");
goto Menu2;
case '1':
printf("按数学成绩排序:\n");
SortOnMath(stus,N);
DispStudent(stus,N);
goto Menu3;
break;
case '2':
printf("按物理成绩排序:\n");
SortOnPhysi(stus,N);
DispStudent(stus,N);
goto Menu3;
break;
case '3':
printf("按英语成绩排序:\n");
SortOnEngl(stus,N);
DispStudent(stus,N);
goto Menu3;
break;
case '4':
printf("按计算机成绩排序:\n");
SortOnComp(stus,N);
DispStudent(stus,N);
goto Menu3;
break;
default:
printf("----选择错误!---");
goto Menu3;
break;
}
}while(3);
default:
printf("----选择错误!----");
goto Menu2;
break;
}
}while(2);
case '2':
Menu4:
do{
FindMenu();
MenuIterm=InputMenuIterm();
switch(MenuIterm)
{
case '0':
goto Menu1;
break;
case '1':
FindByNo(stus,N);
goto Menu4;
break;
case '2':
FindByName(stus,N);
goto Menu4;
break;
default:
printf("----选择错误!----");
goto Menu4;
break;
}
}while(4);
break;
case '3':
//printf("删除!!");
delete(stus,N);
WriteFile(stus);
DispStudent(stus,N);
goto Menu1;
break;
case '4':
insert(stus,N);
DispStudent(stus,N);
goto Menu1;
break;
case '5':
Add(stus,N);
DispStudent(stus,N);
goto Menu1;
break;
case '6':
update(stus,N);
DispStudent(stus,N);
goto Menu1;
break;
case '7':
WriteFile(stus);
break;
default:
printf("----选项错误!---");
break;
}
}while(1);
getch();
system("pause");
return 0;
}
void DispMainMenu()
{
printf("********************主菜单*************************\n");
printf("* 1排序 2查询 3删除 4插入 5添加 6修改 7写文件 0退出\n");
printf("*请输入选择(0-7)\n");
printf("****************************************************\n");
}
void DispSortMenu()
{
printf(" ***********排序菜单************\n");
printf(" **1按学号排序\n");
printf(" **2按姓名排序\n");
printf(" **3按成绩排序\n");
printf(" **0退出\n");
printf(" **请输入选择(0-3):\n");
printf(" ******************************\n");
}
void DispGradeSortMenu()
{
printf(" ********按成绩排序菜单********\n");
printf(" * 1按数学成绩排序\n");
printf(" * 2按物理成绩排序\n");
printf(" * 3按英语成绩排序\n");
printf(" * 4按计算机成绩排序\n");
printf(" * 0退出");
printf(" *请输入选择(0-4):\n");
printf(" ******************************\n");
}
void FindMenu()
{
printf(" ***********查询菜单************\n");
printf(" **1按学号查找\n");
printf(" **2按姓名查找\n");
printf(" **0退出\n");
printf(" **请输入选择(0-2):\n");
printf(" ******************************\n");
}
char InputMenuIterm()
{
char SubMenuIterm;
printf("请输入菜单选择:");
fflush(stdin);
scanf("%c",&SubMenuIterm);
getchar();
return SubMenuIterm;
}
void delete(Student stu[],int n)
{
int i,j;
char StuNo[20];
printf("请输入要学生信息的学号:");
gets(StuNo);
for(i=0;inumber-1;j--)
{
stu[j]=stu[j-1];
}
strcpy(stu[number-1].no,No);
strcpy(stu[number-1].name,Name);
stu[number-1].math=Math;
stu[number-1].physi=Physi;
stu[number-1].engl=Engl;
stu[number-1].comp=Comp;
N++;
}
}
void Add(Student stu[],int n)
{
printf("请输入学生学号:");
gets(stu[n].no);
printf("请输入学生姓名:");
gets(stu[n].name);
printf("请输入学生的数学成绩:");
scanf("%f",&stu[n].math);
printf("请输入学生的物理成绩:");
scanf("%f",&stu[n].physi);
printf("请输入学生的英语成绩:");
scanf("%f",&stu[n].engl);
printf("请输入学生的计算机成绩:");
scanf("%f",&stu[n].comp);
printf("添加成功!\n");
N=N+1;
}
void ReadFile(Student stu[])
{
int i;
FILE *in;
char f1[20];
printf("请输入源文件名(file.in):");
gets(f1);
if((in=fopen(f1,"r"))==NULL)
{
printf("打开文件%s出错\n",f1);
getch();
exit(1);//出错退出
}
fscanf(in,"%d",&N);//读出学生人数,作为循环次数
for(i=0;i0)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
//按学号排序
void SortOnNo(Student stu[],int n)
{
int i,j;
Student st;
for(i=0;i0)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
//按数学成绩排序
void SortOnMath(Student stu[],int n)
{
int i,j;
Student st;
for(i=0;istu[j+1].math)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
//按物理成绩排序
void SortOnPhysi(Student stu[],int n)
{
int i,j;
Student st;
for(i=0;istu[j+1].physi)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
//按英语成绩排序
void SortOnEngl(Student stu[],int n)
{
int i,j;
Student st;
for(i=0;istu[j+1].engl)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
//按计算机成绩排序
void SortOnComp(Student stu[],int n)
{
int i,j;
Student st;
for(i=0;istu[j+1].comp)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
void WriteFile(Student stu[])
{
int i;
FILE *out;//输出文件指针
char f2[20];//输入、输出文件名
printf("请输入目的文件名(file.out):");
gets(f2);
out=fopen(f2,"w");//写方式打开输出文件(若不存在则新建)
if(out==NULL)
{
printf("打开文件出错\n",f2);
exit(1);
}
fprintf(out,"%d\n",N);//将学生人数写入输出文件中
for(i=0;i

浙公网安备 33010602011771号