当前位置:文档之家› c语言课程设计学生信息管理系统

c语言课程设计学生信息管理系统

题目名称:学生信息管理系统算法分析:1用结构体标出信息系统的成员:学生学号,学生姓名,班级,成绩,排名2 利用c语言的文件知识将系统的信息存放在c盘下的“”的文件夹下3 定义各个子函数(1)定义输入信息函数,将学生信息按一定格式用scanf函数输入(统计M个学生的信息);(2)定义输出函数,每两个表一页直到最后一个;(3)定义信息查询函数。

a,定义按学号查询函数,如果输入的学号等于学生学号则输出要查询的信息;b,定义按姓名查询函数,如果输入的姓名字符串等于其中一个学生的姓名字符串则输出信息;c,定义按班级查找函数,如果输入的数字等于其中学生的班级数,则输出该信息;d,定义按成绩查找函数,如果输入的数字等于其中学生的成绩数,则输出该信息;e,定义查找总函数,输入一个数选择查找方式,1-4分别对应调用abcd四个函数。

(4)定义删除信息函数。

输入的数字作为要删除的学生学号,输出要删除的学生信息后选择是否删除,删除后将第g+1个的信息赋给第g个,输出删除后的信息表。

(5)定义信息修改函数。

输入的数字等于要修改的学生学号,输出要修改的学生信息后选择是否修改,用switch,case语句选择要修改的项目,输入n,y决定是否继续直到不继续修改,输出学生信息。

(6)定义信息统计函数。

输入一个数字作为成绩,比较M个学生成绩是否等于输入的数字,统计相等的个数n输出。

(7)定义成绩排序函数。

用冒泡排序法将M个学生的成绩按从大到小的顺序排列后输出。

4 定义主函数。

调用读取文件函数,输入数字1-5分别对应调用修改学生信息函数,删除学生信息函数,查找学生信息函数,统计学生信息函数,学生成绩排行信息函数,0表示退出系统。

最后调用保存文件函数。

结束程序。

流程设计:代码设计:#include<>#include<>#include<>#define M 2#define PAGE 2/*学生信息结构体类型*/typedef struct{int num; /*学号*/char name[20]; /*姓名*/int banji; /*班级*/int chengji; /*成绩*/int paiming; /*排名*/}STUDENTS;int read_file(STUDENTS students[])/*文件的读取*/{ FILE *fp;/*定义一个文件指针变量*/int i=0;if((fp=fopen("","r"))==NULL)/*文件空判断,fopen打开一个文件*/ { printf("\n\n*****库存文件不存在!请创建");return 0;}while(feof(fp)!=1)/*文件是否结束*/{ fread(&students[i],sizeof(STUDENTS),1,fp);/*读取文件*/if(students[i].num==0)/*学号是否为零*/break;elsei++;}fclose(fp);/*关闭文件*/return i;}void save_file(STUDENTS students[],int sum)/*保存文件*/{ FILE *fp;int i;if((fp=fopen("","wb"))==NULL)/*判断文件是否为空*/{ printf("读文件错误!\n");return;}for(i=0;i<sum;i++)if(fwrite(&students[i],sizeof(STUDENTS),1,fp)!=1)/*向文件写入的数据块不等于1*/printf("写文件错误!\n");fclose(fp);}/*输入模块*/int input(STUDENTS students[]){ int i=0;printf("\n\n 录入学生信息(最多%d 人)\n",M);printf("----------------------------------------------------\n");do{ printf("\n 第%d人",i+1);printf("\n 学生学号:");scanf("%d",&students[i].num);if(students[i].num==0) break;printf("\n 学生姓名:");scanf("%s",students[i].name);printf("\n 班级:");scanf("%d",&students[i].banji);printf("\n 成绩:");scanf("%d",&students[i].chengji);printf("\n 排名:");scanf("%d",&students[i].paiming);i++;}while(i<M);printf("\n --%d个学生信息输入完毕!--\n",i);printf("\n 按任意键返回主菜单!");getchar();return i;}/*输出模块*/void output(STUDENTS students[]){int i=0,j=0,page=1;printf("\n\n --学生信息表-- 第%d页\n\n",page);/*每两个一页*/printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("-------------------------------------------------------\n"); do{ if(students[i].num!=0){ j++;if(j%PAGE!=0){ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("------------------------------------------------------\n");}}else{ printf("按任意键继续!");getchar();printf("\n\n --学生信息表-- 第%d页\n\n",++page);printf("学生学号----姓名-----班级----- 成绩-----排名\n"); printf("------------------------------------------\n");{ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}}i++;}while(students[i].num<M);printf("按任意键返回主菜单!");getchar( );}/*学生信息查询*/void find_by_num(STUDENTS students[],int sum) /*按学号查找*/{ int i,find_num;printf("\n 请输入要查找的学生学号:");scanf("%d",&find_num);for(i=0;i<sum;i++)if(students[i].num==find_num){printf("这是您所查找到的学生信息:\n");printf("学生学号----姓名-----班级----- 成绩-----排名\n"); printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");break;}else{printf("\n 未找到要查找的学生信息,按任意键返回!"); getchar();}}void find_by_name(STUDENTS students[],int sum)/*按姓名查找*/ {int i;char find_name[20];printf("\n 请输入要查找的学生姓名:");scanf("%s",find_name);for(i=0;i<sum;i++);if(strcmp(students[i].name,find_name)==0) /*字符串比较相等返回0*/{printf("这是您所查找到属于该学生的信息:");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}else{printf("\n 未找到要查找的学生信息,按任意键返回!");getchar();}}void find_by_banji(STUDENTS students[],int sum)/*按班级查找*/{int i;int find_banji;printf("\n 请输入要查找的学生班级:");scanf("%d",&find_banji);for(i=0;i<sum;i++)if(students[i].banji==find_banji){printf("这是您所查找到属于该班级的学生:");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}else{printf("\n 未找到要查找的班级信息,按任意键返回!");getchar();}}void find_by_chengji(STUDENTS students[],int sum)/*按成级查找*/{int i;int find_chengji;printf("\n 请输入要查找的学生成绩:");scanf("%d",&find_chengji);for(i=0;i<sum;i++){if(students[i].chengji==find_chengji){printf("这是您所查找到有该成绩的学生:");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}else{printf("\n 未找到要查找的学生信息,按任意键返回!");getchar();}}}void find(STUDENTS students[],int sum)/*定义查找总函数*/{ int choice;printf("\n 您要按照哪种方式查找 \n");/*用switch语句*/printf("\n 1.按学生学号查找 \n");printf("\n 2.按学生姓名查找 \n");printf("\n 3.按学生班级查找 \n");printf("\n 4.按学生成绩查找 \n");printf("\n 0. 退出\n");printf("\n 请选择(0-4): \n");scanf("%d",&choice);switch(choice){ case 1: find_by_num(students,sum); break;case 2: find_by_name(students,sum); break;case 3: find_by_banji(students,sum); break;case 4: find_by_chengji(students,sum); break;case 0: break;}}/*删除信息模块*/void del(STUDENTS students[]){ int i,g,sum;int del_num;printf("\n 请输入要删除的学生学号:");scanf("%d",&del_num);for(i=0;i<sum;i++)if(students[i].num==del_num)/*通过学号判断*/{printf("这是您所要删除学生信息:\n");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d\n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");printf("您确认要删除吗");printf("按任意键继续!");getchar();printf("已成功删除学生信息!");}for(g=i;g<sum;g++){ students[g]=students[g+1];printf("删除后的信息表:\n");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}}/*信息修改模块*/void modify(STUDENTS students[],int sum){int i=0,choice,modify_num,flag;do{printf("请输入要修改的学生学号:");scanf("%d",&modify_num);for(i=0;i<sum;i++)if(students[i].num==modify_num){ printf("\n\n --学生信息-- \n\n"); printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n"); printf("\n 您要修改哪一项\n");printf("\n 1.学生姓名\n");printf("\n 2.学生班级\n");printf("\n 3.成绩\n");printf("\n 4.排名\n");printf("\n 请选择(1-4):\n");scanf("%d",&choice);switch(choice){ case 1: printf("\n 请输入修改后的学生姓名:");scanf("%s",students[i].name); break;case 2: printf("\n 请输入修改后的学生班级:");scanf("%s",students[i].banji); break;case 3: printf("\n 请输入修改后的成绩:");scanf("%s",students[i].chengji); break;case 4: printf("\n 请输入修改后的排名:");scanf("%d",&students[i].paiming); break;}printf("\n\n --学生信息-- \n\n"); printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");break;}else{printf("\n 该学生不存在!");}printf("\n 修改成功!\n");printf("您要继续修改吗(Y/N)");if (choice=='Y'||choice=='y'){ flag=1;printf("\n 继续!\n");}else flag=0;}while( flag==1); /*直到不修改结束循环*/printf("\n 按任意键返回主菜单!");getchar();}/*学生信息统计模块*/void count(STUDENTS students[],int sum) /*统计某个成绩的学生个数*/ {int i;int count_chengji;int n=0;printf("请输入一个成绩:\n");scanf("%d",&count_chengji);for(i=0;i<sum;i++){if(students[i].chengji==count_chengji)/*计数*/n++;break;}printf("统计出属于该成绩的一共有%d个人\n",n);}/*成绩排序模块*/void sort(STUDENTS students[],int sum){STUDENTS t;int i,j;printf("\n\n --学生信息-- \n\n");printf("学生学号----姓名-----班级----- 成绩-----排名\n");printf("------------------------------------------\n");for(i=1;i<sum;i++){ for(j=i+1;j<sum;j++)if(students[j].chengji>students[i].chengji)/*冒泡排序法*/ {t=students[j];students[j]=students[i];students[i]=t;}}for(i=0;i<sum;i++){ printf("%12d %10s %2d %3d %4d \n",students[i].num,students[i].name,students[i].banji,students[i].chengji,students[i].paiming);printf("---------------------------------------------\n");}}void main(){STUDENTS students[M];int choice,sum;sum=read_file(students);/*文件读取*/if (sum==0){printf("请录入学生信息!*******\n");sum=input(students);/*输入信息*/}do{printf("\n\n\n *******学生信息管理系统******* \n\n");printf(" 1.修改学生信息 \n\n");printf(" 2.删除学生信息\n\n");printf(" 3.查找学生信息\n\n");printf(" 4.统计学生信息\n\n");printf(" 5.学生成绩排行信息\n\n");printf(" 0.退出系统\n\n");printf(" 请选择\n\n");scanf("%d",&choice);switch(choice){ case 1 : modify(students,sum); break;case 2 : del(students); break;case 3 : find(students,sum); break;case 4 : count(students,sum); break;case 5 : sort(students,sum); break;case 0 : break;}}while(choice!=0); /*直到选择退出系统*/ save_file(students,sum);}运行结果:。

相关主题