1、一问题描述二基本要求三数据结构struct student char num10;/*学号*/ char name20;/*姓名*/ int fgrade;/*佛学成绩*/ int cgrade;/*C语言成绩*/ int egrade;/*英语成绩*/ int total;/*总分*/st100;四总体设计学生信息管理系统菜单选择信息录入信息浏览信息排序信息查询按学号查询按姓名查询1.结构图图4.12.流程图2.1录入函数开始创建文件输入信息保存关闭文件返回菜单图4.22.2 排序函数图4.32.3 查询函数图4.42.4 按学号查询函数图4.52.5 按姓名查询函数(同上)五 详细设计1.
2、录入模块定义一个结构struct student和数组stN用来储存N个学生的所有信息(学号sti.num、姓名sti.name、佛学成绩sti.fgrade、C语言成绩sti.cgrade、英语成绩sti.egrade)。通过for循环输入所有学生信息。用printf语句提示需要输入的内容,接着用scanf语句输入相应内容。输入完毕后套用保存函数save(m)将所输入的信息写入指定文件。2.浏览模块声明整形变量i和count,其中记录输出的学生序数,count用来接收调用浏览函数时所传递过来的实参,将其值传递给导出函数load(m),使得导出的学生人数与浏览的学生人数保持一致。通过调用loa
3、d函数后(即给em数组赋值),用for循环输出每一个学生的各种信息。3.排序模块声明整形变量i,j和结构体变量struct student temp,用for循环实现排序功能,利用冒泡法,以sti.totalstj.total为条件进行排序。最后用printf输出排序结果。4.查找模块声明整型变量k,先用printf语句显示查询菜单,用scanf输入选择的查询方式的代号,用switch(k)进入所选择的具体查询函数,包括学号查询,姓名查询两种方式。学号查询中,用scanf语句输入需要查询的学号,并赋值给num。用for循环,循环主体判断emi.num中是否有输入的学号。如果有,用printf语
4、句输出与学号相对应的该学生的所有信息,再跳出循环。按姓名查询与此方法类似,不再叙述。六 测试与调试1. 运行程序,进入主菜单图6.1 主菜单2输入数字“1”,创建学生信息图6.2 输入职工信息3.输入数字“2”,浏览学生信息图6.3 浏览职工信息4.输入数字“3”,按总分排序图6.4 按总分排序5.输入数字“4”,查询学生信息5.1 选择查询方式“1”图6.5 按学号查询5.2 选择查询方式“2”图6.6 按姓名查询七 源程序清单#include stdlib.hstring.hvoid menu();void input();void save(int m);void save();void
5、 display();void search();void search_num();void search_name();void sort_total();int load();/*定义各函数*/int m;void main() menu(); int n=0,flag; char a; do printf(请选择你需要操作的步骤(1-4):n); scanf(%d,&n); if(n=0&n=4) flag=1; break; else flag=0; printf(您输入有误,请重新选择! while(flag=0); while(flag=1) switch(n) case 1:p
6、rintf(n 输入学生信息ninput();break; case 2:n 浏览学生信息ndisplay(); case 3:n 按总分排序nsort_total(); case 4:n 查询学生信息nsearch(); case 0:exit(0); default: getchar();是否继续运行(y or n):%ca); if(a=y) system(cls /*清屏*/ menu(); /*调用菜单函数*/请再次选择你需要操作的步骤(1-4): scanf( exit(0);void menu() /*菜单函数*/ printf( *欢迎进入学生信息管理系统*n 1.录入学生信息
7、n 2.浏览学生信息n 3.按总分排序n 4.查询学生信息n 0.退出n *谢谢使用*nvoid input() /*输入学生信息并保存*/ int i;请输入需要创建信息的学生人数(1-10): scanf(m); for(i=0;im;i+)请输入学号:%s,sti.num);请输入姓名:,sti.name);请输入佛学成绩:sti.fgrade);请输入C语言成绩:sti.cgrade);请输入英语成绩:sti.egrade); sti.total=sti.fgrade+sti.cgrade+sti.egrade; /*信息输入已经完成*/ save(m); return;/*返回主界面
8、*/void display()/*浏览学生信息*/ int count=0; m=load();n学号t姓名t佛学成绩tC语言成绩t英语成绩t总分n/*输出学生信息*/m+count;i+) n%st%st%dtt%dtt%dtt%dn,sti.num,sti.name,sti.fgrade,sti.cgrade,sti.egrade,sti.total);void sort_total() /*按总分排序*/ int i,j; struct student temp; /*声明结构体变量*/t学号t姓名t佛学成绩tC语言成绩t英语成绩t总分n for(i=0;i+)/*对数据进行排序*/
9、for(j=i+1;jj+) if(sti.totalstj.total) temp=sti; sti= stj; stj=temp; nt%st%st%dtt%dtt%dtt%dnvoid search() /*查询函数*/ int k; /*定义局部变量*/n按学号查询请按1,t按姓名查询请按2nn请输入查询方式:k); switch(k)/*查询方式的选择*/search_num();/*按学号查询*/ case 2:search_name();/*按姓名查询*/nPress any key to enter menu. getchar(); /*返回主界面*/void search_n
10、um()/*(1)按学号查找*/ char temp30;n 请输入要查找的学号:,temp); for( i=0; if(strcmp(temp,sti.num)=0)void search_name()/*(2)按姓名查找*/n 请输入要查找的姓名: if(strcmp(temp,sti.name)=0)int load() /*导入函数*/ FILE*fp; int n=0; if(fp=fopen(student_list,rb)=NULL)cannot open filen exit(0); else do fread(&stn,sizeof(struct student),1,fp); n+; while(feof(fp)=0); fclose(fp); return(n-1);void save(int m)/*保存文件函数*/wb)=NULL)/*创建文件并判断是否能打开*/i+)/*将内存中学生的信息输出到磁盘文件中去*/ if(fwrite(&sti,sizeof(struct student),1,fp)!=1)file write errorn fclose(fp);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1