《C语言大作业学生信息管理系统完稿电子教案.doc》由会员分享,可在线阅读,更多相关《C语言大作业学生信息管理系统完稿电子教案.doc(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。C语言大作业学生信息管理系统完稿-武汉工业学院语言学院电气与电子工程学院班级英才班1101学号111204525姓名刘兴目录摘要3第一章综合设计概述31.1综合设计名称31.2任务要求31.3开发环境41.4应用平台4第二章总体设计42.1系统功能需求分析42.2系统总体设计框架42.3系统功能模块图及各功能模块的目的与意义6第三章详细设计73.1N-S流程图73.1.1主函数main()73.1.2录入学生基本信息函数student_new()83.1.3修改学生档案函数student_edit()8
2、3.1.4注销学生基本信息函数student_del()83.1.5查找学生基本信息函数search_num()93.1.6录入成绩函数score_input()93.1.7修改成绩函数score_edit()93.1.8浏览学生成绩函数browser()103.1.9学生成绩排序函数sort_it()10第四章调试分析过程描述114.1调试过程114.2调试发现的问题与解决15第五章源程序代码21参考文献30摘要大作业为程序设计的第六题“学生信息管理系统的设计”。在设计中用到了一个主函数和12个自定义函数。主函数实现了菜单操作,可根据数据的输入,控制操作选项。自定义函数则完成了对数据的处理和
3、学生管理的各种功能。如学生信息的录入,查找,修改,成绩的录入,修改和排序,在程序设计中尽量使用模块化,结构化设计,追求功能齐全,界面完整,简洁易读的设计理念。但是,限于内存局限与设计时间限制,本程序的学生人数设计最大为32人,而且不具备读取上次已录入学生信息档案功能。但总体来说,该程序已能满足要求的功能需求。因为本人学识有限,若有未发现的缺陷,敬请谅解第一章综合设计概述1.1 综合设计名称学生信息管理系统的设计1.2 任务要求学生信息包括学号、姓名、年龄、性别、电话等。试设计一学生的信息管理系统,使之能提供以下功能:(1) 系统以菜单方式工作。(2) 学生信息录入功能(学生信息用文件保存)-输
4、入。(3) 学生信息浏览功能-输出。(4) 查询排序功能:n 按学号查询。n 按学号排序。n 按成绩与总分排序。(5) 学生信息的删除与修改(可选项)。1.3 开发环境开发工具为MicrosoftVisualC+6.0.1.4 应用平台WindowsXP32位。第二章总体设计2.1 系统功能需求分析(1)建立学生信息,每个学生的信息包括:学号、姓名、年龄、性别、电话等。(2)求出每个学生的总分和平均分。(3)查找:根据学号、姓名中任一项查询该生的基本信息。(4)排序:根据学号、各科分数或总分将学生的信息按照一定的顺序进行排序。(5)根据需要修改学生的基本信息。(6)根据实际情况注销某生的信息。
5、(7)根据实际情况插入某生的信息。(8)将学生信息输出至文本文件中。2.2 系统总体设计框架(1)利用switch语句设计如图所示的主菜单。主选单选项编号1输入学生信息2修改学生信息3注销学生信息4查询学生信息5录入成绩6修改成绩7浏览8输出0退出图1学生信息管理系统主菜单(2)选择1后,调用录入函数student_new,进入录入函数后利用输入学生基本信息。(3)选项2后,调用修改信息函数student_edit,先进入查找函数后查找到学生信息并进行修改。(4)选择3后,调用查找函数student_del,查找某个学生的信息。(5)选择4后,调用删除函数search_num,根据需要删除某个
6、学生的信息。(6)选择5后,调用浏览函数score_input,浏览所有学生的信息。(7)选择6后,调用修改成绩函数score_edit,将每个学生的信息排序并全部输出。(6)选择7后,调用浏览函数student_browser,浏览所有学生的信息。(7)选择8后,调用输出函数save,将每个学生的信息全部输出。(8)选择0后,退出学生信息管理系统。(9)根据所选菜单编号编写相应代码。排序菜单输入选项编号1按学号排序2按语文分数查找3按高数分数查找4按外语分数查找5按总分查找6按平均分查找0退出图2排序子菜单系统功能模块图及各功能模块的目的与意义录入学生信息修改学生信息查找学生信息录入学生成绩
7、删除学生信息浏览学生成绩修改学生成绩主模块修改学生信息删除学生信息修改学生成绩按学号排序按语文排序按数学排序按外语排序按总分排序按平均分排序找按学号查询输出至文件退出第三章详细设计3.1 N-S流程图3.1.1 主函数main()主函数主要通过switch()循环语句,实现菜单界面的操作控制,并且发挥了界面友好,模块化等特点,追求语句简洁,调用简单函数,通俗易懂。但是,由于switch语句的局限性,因而在菜单操作过程中使用了goto语句,这与结构化程序设计理念相悖,也是主函数中的最大缺陷。主函数的N-S流程图如下:3.1.2 录入学生基本信息函数student_new()在编写student_
8、new()函数时,主要设计思路就是通过判断语句进行递归嵌套,以此达到循环连续输入的效果,减少了操作复杂性。录入学生基本信息函数N-S流程图如下:当N输入错误!);return_confirm();修改后代码:scanf(%d,&s0);if(s0=1)student_add();elseif(s0=0)return_confirm();elseprintf(nntt输入错误!);return_confirm();(1) 修改学生成绩score_edit函数,在执行时学号不存在时仍然修改问题原代码:if(n=student_search()!=-1)printf(tt语文:%d数学:%d英语:%
9、dn,studentsn.chinese,studentsn.math,studentsn.english);printf(tt请重新输入成绩:nntt语文:);scanf(%d,&studentsn.chinese);printf(tt数学:);scanf(%s,&studentsn.math);printf(tt英语:);scanf(%d,&studentsn.english);return_confirm();修改后代码:if(n=student_search()!=-1&n!=33)printf(tt语文:%d数学:%d英语:%dn,studentsn.chinese,students
10、n.math,studentsn.english);printf(tt请重新输入成绩:nntt语文:);scanf(%d,&studentsn.chinese);printf(tt数学:);scanf(%s,&studentsn.math);printf(tt英语:);scanf(%d,&studentsn.english);return_confirm();if(n=33)return_confirm();浏览函数中由于学号太长而引起的打印不齐问题原代码:sort_it(1);while(1)page_title(tt-*浏览*);printf(按数字键选择排序方式或按0返回n);print
11、f(学号-1tt姓名tt年龄t语文-2t数学-3t英语-4t总分-5n);for(n=0;n32;n+)if(INDEXn!=-1)x=INDEXn;printf(%dtt%stt,studentsx.num,studentsx.name);printf(%dt%dt,studentsx.age,studentsx.chinese);printf(%dt%dt,studentsx.math,studentsx.english);printf(%dn,studentsx.chinese+studentsx.math+studentsx.english);修改后代码:sort_it(1);whil
12、e(1)page_title(tt-*浏览*-);printf(按数字键选择排序方式或按0返回n);printf(t学号-1|姓名|年龄|语文-2|数学-3|英语-4|总分-5|平均分-6|n);for(n=0;n请用数字键选择科目nntt1-语文2-数学3-英语nnntt);scanf(%d,&s);for(n=0;n输入错误!ttnn);break;if(studentsn.num!=0)printf(tt学号:%dntt姓名:%sntt成绩:,studentsn.num,studentsn.name);scanf(%d,&t);printf(n);switch(s)case1:stude
13、ntsn.chinese=t;break;case2:studentsn.math=t;break;case3:studentsn.english=t;break;printf(tt若需继续录入,请按1,退出录入请按0.nnntt);scanf(%d,&s1);if(s1=1)score_input();elseif(s1=0)return_confirm();elseprintf(nntt输入错误!);return_confirm();修改后代码:printf(ntt请用数字键选择科目nntt1-语文2-数学3-英语nnntt);scanf(%d,&s);for(n=0;n输入错误!ttnn
14、);break;if(studentsn.num!=0)printf(tt学号:%dntt姓名:%sntt成绩:,studentsn.num,studentsn.name);scanf(%d,&t);printf(n);switch(s)case1:studentsn.chinese=t;break;case2:studentsn.math=t;break;case3:studentsn.english=t;break;printf(tt若需继续录入,请按1,退出录入请按0.nnntt);scanf(%d,&s1);if(s1=1)score_input();elseif(s1=0)retur
15、n_confirm();elseprintf(nntt输入错误!);return_confirm();第五章源程序代码/*学生成绩管理系统刘兴*/*microsoftvisualC+6.0下编译通过*/#include#include#include/用于动态单元分配,如malloc(),calloc(),rand()等#include/字符串输入输出,如出现getch(),clrscr()等#defineN32;intINDEX32;/定义学生信息数组,学生数目最大为32/*定义学生信息结构体*/structSTUDENTintnum,age,chinese,math,english;cha
16、rname21,sex16,tele20;students32;/结构体变量为数组students,数目为32/*打印标题函数*/voidpage_title(char*menu_item)system(cls);/清屏,包含于conio,h函数中printf(*欢迎进入学生信息管理系统按任意键返回nn);getch();/*操作完成后的返回函数*/voidreturn_con(void)printf(ntt按回车进行下步nn);getch();/*录入学生基本信息函数*/voidstudent_add(void)ints0;intn;page_title(tt-*录入学生基本信息*-);fo
17、r(n=0;n学号:);scanf(%d,&studentsn.num);printf(tt姓名:);scanf(%s,&studentsn.name);printf(tt年龄:);scanf(%d,&studentsn.age);printf(tt性别:);scanf(%s,&studentsn.sex);printf(tt电话:);scanf(%s,&studentsn.tele);break;printf(nntt如需继续请按1,返回请按0.nnnntt);/次步骤方便了学生信息的连续录入scanf(%d,&s0);if(s0=1)student_add();elseif(s0=0)re
18、turn_confirm();elseprintf(nntt输入错误!);return_confirm();/*查找学生档案函数*/intstudent_search(void)intn,i;printf(tt-*请输入学生学号*-nnntt学号:);scanf(%d,&i);for(n=0;n姓名:%sn,studentsn.name);printf(tt年龄:%dn,studentsn.age);printf(tt性别:%sn,studentsn.sex);printf(tt电话:%sn,studentsn.tele);if(studentsn.chinese=0)printf(tt语文:
19、%sn,尚未录入);elseprintf(tt语文:%dn,studentsn.chinese);if(studentsn.math=0)printf(tt数学:%sn,尚未录入);elseprintf(tt数学:%dn,studentsn.math);if(studentsn.english=0)printf(tt英语:%sn,尚未录入);elseprintf(tt英语:%dn,studentsn.english);return_con();returnn;printf(ntt输入错误或学号不存在.n);return_con();return33;/*注销学生基本信息函数*/voidstud
20、ent_delete(void)intn;page_title(tt-*注销学生基本信息*-);if(n=student_search()!=-1)studentsn.num=0;printf(ntt该学生已注销.n);return_confirm();/*修改学生基本信息函数*/voidstudent_edit(void)intn;page_title(tt-*查找学生基本信息*-);n=student_search();if(n!=33)printf(ntt请重新输入新信息:ntt学号:);scanf(%d,&studentsn.num);printf(tt姓名:);scanf(%s,&s
21、tudentsn.name);printf(tt年龄:);scanf(%d,&studentsn.age);printf(tt性别:);scanf(%s,&studentsn.sex);printf(tt电话:);scanf(%s,&studentsn.tele);return_confirm();/录入成绩函数voidscore_input(void)ints1;ints,n,t;page_title(tt-*录入成绩*-);printf(ntt请用数字键选择科目nntt1-语文2-数学3-英语nnntt);scanf(%d,&s);for(n=0;n输入错误!ttnn);break;if(
22、studentsn.num!=0)printf(tt学号:%dntt姓名:%sntt成绩:,studentsn.num,studentsn.name);scanf(%d,&t);printf(n);switch(s)case1:studentsn.chinese=t;break;case2:studentsn.math=t;break;case3:studentsn.english=t;break;printf(tt若需继续录入,请按1,退出录入请按0.nnntt);scanf(%d,&s1);if(s1=1)score_input();elseif(s1=0)return_confirm()
23、;elseprintf(nntt输入错误!);return_confirm();/*修改成绩函数*/voidscore_edit(void)intn;page_title(tt-*修改成绩*-);if(n=student_search()!=-1&n!=33)printf(tt语文:%d数学:%d英语:%dn,studentsn.chinese,studentsn.math,studentsn.english);printf(tt请重新输入成绩:nntt语文:);scanf(%d,&studentsn.chinese);printf(tt数学:);scanf(%s,&studentsn.mat
24、h);printf(tt英语:);scanf(%d,&studentsn.english);/return_confirm();if(n=33)return_confirm();/*学生成绩排序函数*/voidsort_it(charnn)intn,m,p,x,t32;for(n=0;n32;n+)switch(nn)/不同排序方式的选择结构case1:tn=studentsn.num;break;case2:tn=studentsn.chinese;break;case3:tn=studentsn.math;break;case4:tn=studentsn.english;break;cas
25、e5:tn=studentsn.chinese+studentsn.math+studentsn.english;break;case6:tn=(studentsn.chinese+studentsn.math+studentsn.english)/5;break;for(n=0;n32;n+)/对结构体的序号数进行排序x=0;p=-1;for(m=0;mx)x=tm;p=m;tp=-1;INDEXn=p;/*浏览学生成绩*/voidscore_browser(void)intn,x;chark;sort_it(1);/初始时按学号降序排序while(1)page_title(tt-*浏览*-
26、);printf(按数字键选择排序方式或按0返回n);printf(t学号-1|姓名|年龄|语文-2|数学-3|英语-4|总分-5|平均分-6|n);/提醒排序输入的命令for(n=0;n32;n+)/循环打印学生成绩if(INDEXn!=-1)x=INDEXn;printf(%14d|%10s|,studentsx.num,studentsx.name);printf(%5d|%7d|,studentsx.age,studentsx.chinese);printf(%7d|%7d|,studentsx.math,studentsx.english);printf(%7d|,studentsx
27、.chinese+studentsx.math+studentsx.english);printf(%9d|n,(studentsx.chinese+studentsx.math+studentsx.english)/5);k=getch();if(k0)sort_it(k);elseif(k=0)break;elsecontinue;/数据储存函数voidsave(structSTUDENT*students)/将数据保存到文件inti;FILE*fp;fp=fopen(成绩统计表.txt,w);fprintf(fp,%32s,tt学生基本信息数据库文件已保存到成绩统计表.txt);getc
28、har();getchar();/主函数voidmain(void)/生成操作选单menu:page_title(-*操作选单*-);printf(*请用数字键选择操作*n);printf(*1录入学生基本信息*n);printf(*2修改学生基本信息*n);printf(*3注销学生基本信息*n);printf(*4查询学生基本信息*n);printf(*5录入学生成绩*n);printf(*6修改学生成绩*n);printf(*7浏览学生成绩*n);printf(*8保存数据到文件*n);printf(*0退出系统*nnn);/确定输入的操作选项switch(getch()case1:student_add();break;case2:student_edit();break;case3:student_delete();break;case4:student_search();break;ca