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
posted @ 2013-06-17 16:11  接近  阅读(150)  评论(0)    收藏  举报