1、C语言课程设计学生宿舍管理系统HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言实训报告班 级 : k1223-5 * * 学 号: *18 1.课程实训目的1)通过课程实训,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2)通过课程实训,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3)通过课程实训,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4)通过课程实训,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小
2、型系统。5)通过课程实训,加强了自己的程序分析能力。2.需求分析2.1要求1)遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2)运用结构化程序设计方法,按照课程实训题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3)学会利用数组、结构体、链表进行相关信息表示。4)功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5)各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6)所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7)界面友好(良好的人机互交),
3、凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8)程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9)学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10)掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11)C语言课程实训报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述此系统以计算机系的学生为背景,提供对学生个人住宿信息的录入、编辑、查找、统计等功能。具体功能实现如下:1)信息录入:实现学生住宿信息的录入功能,并能将其以文件形式加以保存。2)编辑功能:实现对学生住宿信息的添加,并
4、对指定学生的住宿信息进行删除或修改等功能。3)信息浏览功能:实现对指定学生的学生住宿信息浏览。4)查询功能:实现按学生入住时间、按收费标准查询学生住宿信息的功能。5)系统以菜单方式工作,界面清晰,易于操作。2.3运行环境1)WindowsXP/7系统2)VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流程设计本系统的功能模块如图1所示,主要有以下模块:图1系统功能模块图3.2系统模块设计1)课程名称界面:运用printf函数,实现课程实训名称以及作者的显示。2)系统欢迎界面:运用printf函数,实现欢迎使用学生简历管理系统的显示。3)主菜单界面:构造函数menu_select(
5、);,实现系统主菜单的显示。4)学生住宿信息录入:构造函数void create(),实现学生简历信息的录入。5)学生住宿信息浏览:构造函数void xianshi();,实现对学生整体住宿情况的浏览。6)学生住宿信息保存: 构造函数void baocun();,实现对学生整体住宿情况的保存。7)学生住宿信息查询: int findByIndex(int index)函数,实现按入住时间查询, 调用int findBybiaozhun(int biaozhun);函数,实现按收费标准查询。8)学生住宿信息修改:构造函数int replace(char name,int p,int q);,实现
6、对指定学生的学号对其入住时间、收费标准。9)学生住宿信息删除:构造函数int findBybiaozhun(int biaozhun);,实现对学生整体住宿情况的删除。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度(字节)备注学生姓名stui.name字符串50学生住宿层号stui.cenghao整型4学生住宿房号stui.fanghao整型4学生住宿床位号stui.chuanghao整型4学生学号stui.xuehao整型4住宿收费标准stui.shoefei整型4缴费状态stui.zhuangtai字符串20学生入
7、住时间stui.shijian整型4根据系统要求,系统中需要保存的类别信息,其结构如下:类别代号文本文档类别名称a.txt先声明一个类型为typedef struct student的结构体,其成员为学生的住宿信息。然后通过对结构体成员、文件等数据结构的操作,实现对学生住宿信息的录入,浏览,查询,存盘,修改,删除等一系列操作。其中,结构体定义如下:typedef struct student char name50; int cenghao; int fanghao; int chuanghao; int xuehao; int shoufei; char zhuangtai20; int s
8、hijian;STUDENT; 4.2模块接口设计1)所有函数模块声明如下:menu_select();/*主菜单函数*/void create();/*录入学生简历信息*/void xianshi();/*显示浏览界面*/int findByIndex(int index);*实现按学号查询*/int findBybiaozhun(int biaozhun);/*实现按入住时间查询*/void baocun();/*向磁盘写入学生信息加以保存*/int removebyxuehao(int sxh);/*实现指定学生的信息删除*/int replace(char name,int p,int
9、 q); /*实现学生信息的修改*/2)并定义需要使用的全局变量:3)#define NUM 30 int flag=0;STUDENT stuNUMchar name20;int i,n,m,b,c,d,e,f,j,g,p,q,y,x,a1,a2;char A612;4)主要模块的实现系统以主函数int main()为入口,首先通过system(color 1e);将汉字界面置为黄色。然后调用menu_select();函数,进入主菜单界面。系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。4.3 以下是几个主要模块的流程图:1)主菜单函数: 2)信息浏览函数:图3 信息
10、浏览流程图3)信息修改函数:图4 信息修改流程图5.运行结果5.1主菜单界面:图5主菜单界面输入功能选择,系统自动进入相应功能界面。图6 信息录入界面5.2息浏览界面: 图7 全部信息浏览 5.3信息查询界面: 从键盘中输入选择,可以按学号和姓名进行查询,并显示结果。 图8 按姓名查询的结果5.4修改界面:从键盘中输入需要修改的信息代码,自动提示输入新的信息。图9 按姓名查询的结果6.程序调试与测试6.1程序调试与分析(1)各模块分别调试过程、出现的错误原因,纠正错误的方法及结果: 主菜单显示界面: 刚开始主菜单显示的时候参差不齐,视觉效果混乱。 通过插入“n,t,空格等来使主菜单显示清爽,合
11、理。宿舍整体情况浏览: 开始试图用“空闲,居住”来表示某房间的空闲状态。但由于能力有限,无法用汉字表示,就分别用了“T” 和“F”表示某房间的空闲状态。可以表示出每个房间的空闲状态。按入住时间查询: 最初对“for”循环的用法不熟悉,造成查询功能无法实现,通过上网查询相关资料解决了这一问题,使按入住时间查询这一功能实现。按入住时间查询:由于在输入入住时间时,限制了只能输入800/年或1200元/年,在测试查询功能时,老是出现程序错误,后来通过一步步的检查找出这一问题,按入住时间查询功能得以实现。修改功能: 最初无用了“for”循环,造成数据无法修改。通过请教同学解决了这一问题。删除功能: 最初
12、无用了“for”循环,造成数据无法删除。通过请教同学解决了这一问题。 6.2程序测试及结果(1)各模块测试用例数据的确定测试数据姓名层号房间号床位号学号收费标准缴费状态入住时间孙飞11111200是2011曹钰2222800否2012测试结果 数据正确。(2)测试中出现的问题的原因和分析在保存文件时,由于未及时关闭文件,造成下面的数据乱码,及时关闭文件的操作。7.问题与不足 (1) 需求分析中存在的问题和分析: 因为不能很好的掌握主菜单的循环,无法实现再次录入学生信息。(2概要设计中存在的问题和分析 没能很好的结合实际情况,使程序的某些功能未能符合实际情况。(3详细设计中存在的问题和分析 查询
13、的功能太少,只有按入住时间和缴费状态查询。(4)代码编制中存在的问题和分析 在定义结构体时,姓名和缴费状态的数组定义过大,造成内存浪费。(5)调试和测试中存在的问题和分析 在输入层号、房间号、床位号、学号、入住时间时未加以保护,输入不是数字时,程序也可运行,存在漏洞。8.建议课设内容的内容应更加符合实际,时间给的太过充裕,老师辅导最好在详细一点。建议老师能从根本上教会学生一些简单的编程。9.编程体会经过二周的课程设计,我学到了很多东西:巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
14、过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的
15、帮助,给我及时指出错误,提出许多宝贵意见。在此对老师和同学们表示感谢!10.程序源代码:#include#define NUM 30int flag=0;typedef struct student char name50; int cenghao; int fanghao; int chuanghao; int xuehao; int shoufei; char zhuangtai20; int shijian;STUDENT; STUDENT stuNUM;void create();void xianshi();void baocun();int findByIndex(int inde
16、x);int removebyxuehao(int sxh);int findBybiaozhun(int biaozhun);int replace(char name,int p,int q);char name20;int i,n,m,b,c,d,e,f,j,g,p,q,y,x,a1,a2;char A612;int main() int menuchoice; system(color 1e); do menu_select(); printf(请输入你的选择:); scanf(%d,&menuchoice); switch(menuchoice) case 1: if(flag=0)
17、 printf(请输入要录入的学生个数); scanf(%d,&n); rewind(stdin); while(n30|n1) printf(您的输入有误请重新输入:n); scanf(%d,&n); rewind(stdin); create(); printf(n学生信息录入成功.n); flag=1; system(pause); system(cls); break; else printf(学生信息已录入,不需录入.n); system(pause); system(cls); break; case 2:if(flag=1) printf(您输入的学生信息为n); xianshi
18、(); system(pause); system(cls); break; else printf(请先录入学生信息 再浏览!.n); system(pause); system(cls); break; case 3: if(flag=1) printf(学生信息查询(按入住时间查询)n); scanf(%d,&y); findByIndex(y); system(pause); system(cls); break; else printf(请先录入学生信息 再查询!.n); system(pause); system(cls); break; case 4: if(flag=1) pr
19、intf(学生信息查询(按收费标准查询)n); scanf(%d,&x); findBybiaozhun(x); system(pause); system(cls); break; else printf(请先录入学生信息 再查询!.n); system(pause); system(cls); break; case 5: if(flag=1) printf(学生信息修改n); printf(请输入要被修改的姓名和新的入住时间,收费标准n); scanf(%s%d%d,name,&a1,&a2); replace(name,a1,a2); system(pause); system(cls
20、); break; else printf(请先录入学生信息 再修改!.n); system(pause); system(cls); break; case 6: if(flag=1) printf(学生信息删除); printf(请输入您要删除的学生的学号); scanf(%d,&g); removebyxuehao(g); system(pause); system(cls); break; else printf(请先录入学生信息 再删除.n); system(pause); system(cls); break; case 7: printf(程序退出,欢迎再次使用!n); exit
21、(0); system(pause); system(cls); default : printf(您的输入有误请重新输入n); rewind(stdin); system(pause); system(cls); break; while(1); int menu_select() printf(tttttt注释:F代表该房间为空闲n); printf(tttttt注释:T代表该房间有学生居住n); printf(ttt 学生宿舍管理系统n); printf(ttt作者:赵荷n); printf(ttt指导老师:胡宁亚n); printf(tt*); printf(ttttt 1.录入学生住
22、宿信息n); printf(ttt 2.宿舍信息整体浏览n); printf(ttt 3.按入住时间查询n); printf(ttt 4.按收费标准查询n); printf(ttt 5.修改功能n); printf(ttt 6.删除n); printf(ttt 7.退出n); printf(tt*nnn); printf(tt欢迎使用!nnn); void create() for(i=0;i6;i+) for(j=0;j12;j+) Aij=F; printf(请输入%d个学生的信息(姓名,层号,房间号,床位号,学号,收费标准,缴费状态,入住时间)n,n); for(i=0;in;i+) d
23、o scanf(%s%d%d%d%d%d%s%d,stui.name,&stui.cenghao,&stui.fanghao,&stui.chuanghao,&stui.xuehao,&stui.shoufei,stui.zhuangtai,&stui.shijian); if(stui.shoufei!=800)&(stui.shoufei!=1200) printf(输入错误,请重新输入); while(stui.shoufei!=800&stui.shoufei!=1200); Astui.cenghao-1stui.fanghao-1=T; flag=1; void xianshi()
24、 printf(姓名 层号 房间号 床位号 学号 收费标准 缴费状态 入住时间n); for(i=0;in;i+) printf(%s %d %d %d %d %d %s %dn,stui.name,stui.cenghao,stui.fanghao,stui.chuanghao,stui.xuehao,stui.shoufei,stui.zhuangtai,stui.shijian); printf(nnnn); printf( ); for(j=0;j12;j+) printf( %d ,j+1); printf(n); for(i=0;i6;i+) printf(第%d层,i+1); f
25、or(j=0;j10;j+) printf(%3c,Aij); for(j=10;j12;j+) printf(%4c,Aij); printf(n); printf(保存文件); baocun(); printf(nn); void baocun() char a100; FILE *fp; printf(请输入文件名:n); rewind(stdin); gets(a); if(fp=fopen(a,w)=NULL) printf(文件不能打开n); exit(0); fp=fopen(a,w); for(i=0;in;i+) fprintf(fp,%s %d %d %d %d %d %s %d,stui.name,stui.cenghao,stui.fanghao,stui.chuanghao,stui.xuehao,stui.shoufei,stui.zhuangtai,stui
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1