1、题目名称: 学生信息管理系统 算法分析: 1用结构体标出信息系统的成员:学生学号,学生姓名,班级,成绩,排名2 运用c语言的文献知识将系统的信息存放在c盘下的“zuoye.txt”的文献夹下3 定义各个子函数(1)定义输入信息函数,将学生信息按一定格式用scanf函数输入(记录M个学生的信息);(2)定义输出函数,每两个表一页直到最后一个;(3)定义信息查询函数。a,定义按学号查询函数,假如输入的学号等于学生学号则输出要查询的信息;b,定义按姓名查询函数,假如输入的姓名字符串等于其中一个学生的姓名字符串则输出信息;c,定义按班级查找函数,假如输入的数字等于其中学生的班级数,则输出该信息;d,定
2、义按成绩查找函数,假如输入的数字等于其中学生的成绩数,则输出该信息;e,定义查找总函数,输入一个数选择查找方式,1-4分别相应调用abcd四个函数。(4)定义删除信息函数。输入的数字作为要删除的学生学号,输出要删除的学生信息后选择是否删除,删除后将第g+1个的信息赋给第g个,输出删除后的信息表。(5)定义信息修改函数。输入的数字等于要修改的学生学号,输出要修改的学生信息后选择是否修改,用switch,case语句选择要修改的项目,输入n,y决定是否继续直到不继续修改,输出学生信息。(6)定义信息记录函数。输入一个数字作为成绩,比较M个学生成绩是否等于输入的数字,记录相等的个数n输出。(7)定义
3、成绩排序函数。用冒泡排序法将M个学生的成绩按从大到小的顺序排列后输出。4 定义主函数。调用读取文献函数,输入数字1-5分别相应调用修改学生信息函数,删除学生信息函数,查找学生信息函数,记录学生信息函数,学生成绩排行信息函数,0表达退出系统。最后调用保存文献函数。结束程序。流程设计:学生信息管理系统程序用结构体说明各个成员定义各个子函数定义成绩排序函数定义记录函数定义删除信息函数定义修改信息函数定义输入输出函数定义信息查询函数用冒泡排序法将M个学生的成绩按从大到小排列比较成绩数是否等于输入数选择要删除的学号,判断是否删除switch,case语句选择查询方式选择要修改的信息1-4定义按学号,姓名
4、,班级,成绩的函数计数,输出n将第g+1个信息赋给第g个判断是否继续修改直到不继续,结束定义主函数,用switch case选择要调用的子函数保存文献退出系统结束程序代码设计:#include#include#include#define M 2#define PAGE 2 /*学生信息结构体类型*/ typedef struct int num; /*学号*/ char name20; /*姓名*/ int banji; /*班级*/ int chengji; /*成绩*/ int paiming; /*排名*/ STUDENTS; int read_file(STUDENTS studen
5、ts)/*文献的读取*/ FILE *fp;/*定义一个文献指针变量*/ int i=0; if(fp=fopen(zuoye.txt,r)=NULL)/*文献空判断,fopen打开一个文献*/ printf(nn*库存文献不存在!请创建); return 0; while(feof(fp)!=1)/*文献是否结束*/ fread(&studentsi,sizeof(STUDENTS),1,fp);/*读取文献*/ if(studentsi.num=0)/*学号是否为零*/ break; else i+; fclose(fp);/*关闭文献*/ return i; void save_file
6、(STUDENTS students,int sum)/*保存文献*/ FILE *fp; int i; if(fp=fopen(zuoye.txt,wb)=NULL)/*判断文献是否为空*/ printf(读文献错误!n); return; for(i=0;isum;i+) if(fwrite(&studentsi,sizeof(STUDENTS),1,fp)!=1)/*向文献写入的数据块不等于1*/ printf(写文献错误!n); fclose(fp); /*输入模块*/ int input(STUDENTS students) int i=0; printf(nn 录入学生信息 (最多
7、%d人)n,M); printf(-n); do printf(n 第%d人,i+1); printf(n 学生学号:); scanf(%d,&studentsi.num); if(studentsi.num=0) break; printf(n 学生姓名:); scanf(%s,studentsi.name); printf(n 班级:); scanf(%d,&studentsi.banji); printf(n 成绩:); scanf(%d,&studentsi.chengji); printf(n 排名:); scanf(%d,&studentsi.paiming); i+; while
8、(iM); printf(n -%d个学生信息输入完毕!-n,i); printf(n 按任意键返回主菜单!); getchar(); return i; /*输出模块*/ void output(STUDENTS students) int i=0,j=0,page=1;printf(nn -学生信息表- 第%d页nn,page);/*每两个一页*/ printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); do if(studentsi.num!=0) j+; if(j%PAGE!=0) printf(%12d %10s %2d %3d %4d n,studentsi
9、.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); else printf(按任意键继续!); getchar(); printf(nn -学生信息表- 第%d页nn,+page); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.
10、paiming); printf(-n); i+; while(studentsi.numM); printf(按任意键返回主菜单!); getchar( ); /*学生信息查询*/ void find_by_num(STUDENTS students,int sum) /*按学号查找*/ int i,find_num; printf(n 请输入要查找的学生学号:); scanf(%d,&find_num); for(i=0;isum;i+) if(studentsi.num=find_num) printf(这是您所查找到的学生信息:n); printf(学生学号-姓名-班级- 成绩-排名n
11、); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); break; else printf(n 未找到要查找的学生信息,按任意键返回!); getchar(); void find_by_name(STUDENTS students,int sum)/*按姓名查找*/ int i; char find_name20; printf(n 请输入要查找的学生姓名:);
12、scanf(%s,find_name); for(i=0;isum;i+); if(strcmp(studentsi.name,find_name)=0) /*字符串比较相等返回0*/ printf(这是您所查找到属于该学生的信息:);printf(学生学号-姓名-班级- 成绩-排名n);printf(-n);printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming);printf(-n); else printf(n 未找到
13、要查找的学生信息,按任意键返回!);getchar(); void find_by_banji(STUDENTS students,int sum)/*按班级查找*/ int i; int find_banji; printf(n 请输入要查找的学生班级:); scanf(%d,&find_banji); for(i=0;isum;i+)if(studentsi.banji=find_banji)printf(这是您所查找到属于该班级的学生:); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,stu
14、dentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.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;isum;i+) if(studentsi
15、.chengji=find_chengji) printf(这是您所查找到有该成绩的学生:); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); else printf(n 未找到要查找的学生信息,按任意键返回!);getchar(); void find(STUDENTS students,int sum)/*
16、定义查找总函数*/ 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,s
17、um); 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;isum;i+) if(studentsi.num=del_num)/*通过学号判断*/ printf(这是您所要删除学生信息:n)
18、; printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); printf(您确认要删除吗?); printf(按任意键继续!); getchar(); printf(已成功删除学生信息!); for(g=i;gsum;g+) studentsg=studentsg+1; printf(删除后的信息表:n); print
19、f(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.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
20、;isum;i+) if(studentsi.num=modify_num) printf(nn -学生信息- nn); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); printf(n 您要修改哪一项?n); printf(n 1.学生姓名n); printf(n 2.学生班级n); printf(n 3.成
21、绩n); printf(n 4.排名n); printf(n 请选择(1-4):n); scanf(%d,&choice); switch(choice) case 1: printf(n 请输入修改后的学生姓名:); scanf(%s,studentsi.name); break; case 2: printf(n 请输入修改后的学生班级:); scanf(%s,studentsi.banji); break; case 3: printf(n 请输入修改后的成绩:); scanf(%s,studentsi.chengji); break; case 4: printf(n 请输入修改后的排
22、名:); scanf(%d,&studentsi.paiming); break; printf(nn -学生信息- nn); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); break; else printf(n 该学生不存在!); printf(n 修改成功!n); printf(您要继续修改吗?(Y/N
23、); 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;isum;i+) if(students
24、i.chengji=count_chengji)/*计数*/ n+; break; printf(记录出属于该成绩的一共有%d个人n,n);/*成绩排序模块*/ void sort(STUDENTS students,int sum) STUDENTS t; int i,j; printf(nn -学生信息- nn); printf(学生学号-姓名-班级- 成绩-排名n); printf(-n); for(i=1;isum;i+) for(j=i+1;jstudentsi.chengji)/*冒泡排序法*/ t=studentsj; studentsj=studentsi; studentsi
25、=t; for(i=0;isum;i+) printf(%12d %10s %2d %3d %4d n,studentsi.num,studentsi.name, studentsi.banji, studentsi.chengji,studentsi.paiming); printf(-n); void main() STUDENTS studentsM; int choice,sum; sum=read_file(students);/*文献读取*/ if (sum=0) printf(请录入学生信息!*n); sum=input(students);/*输入信息*/ do printf(
26、nnn *学生信息管理系统* nn); printf( 1.修改学生信息 nn); printf( 2.删除学生信息nn); printf( 3.查找学生信息nn); printf( 4.记录学生信息nn); printf( 5.学生成绩排行信息nn); printf( 0.退出系统nn); printf( 请选择nn); 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); 运营结果:
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100