还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
HUBEIUNIVERSITYOFAUTOMOTIVETECHNOLOGYC语言程序设计课程设计报告课设题目宿舍管理系统系部电气与信息工程学院专业电子信息科学与技术(车联网工程)姓名李鑫完成日期:2014年6月25日-2014年7月5日目录TOC\o1-2\h\z\uC语言程序设计0课程设计报告
01.课程设计目的
22.需求分析
22.1要求
22.2任务描述
32.3运行环境
32.4__工具
33.总体设计
33.1系统模块设计
34.详细设计
44.1数据结构设计
44.2模块接口设计
54.3以下是几个主要模块的流程图
65.运行结果
125.1欢迎界面及文件信息导入
125.2主菜单界面
125.3新建学生住宿信息
135.4查询指定学号的学生住宿信息
145.5修改指定宿舍号及床位号的学生住宿信息
155.6删除指定宿舍号及床位号的学生住宿信息
155.7显示指定宿舍号的学生住宿信息
165.8统计空床位数
165.9保存学生住宿信息
175.10退出界面
176.程序前后文本
187.编程体会
188.程序源代码
189.____
281.课程设计目的1通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构2通过课程设计,进一步掌握C语言中重要的数据结构掌握并熟练运用指针、链表、结构体、文件等数据结构3通过课程设计,提高程序__能力,能运用合理的控制流编写清晰高效的程序4通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能__设计和实现一个小型系统5通过课程设计,加强了自己的程序分析能力
2.需求分析
2.1要求1遵循软件__过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力2运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程3学会利用数组、结构体、链表进行相关信息表示4功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确6所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰7界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析8程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果9学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现10掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法11C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象
2.2任务描述现学校要管理宿舍入住的学生,请设计一宿舍管理程序,以方便学校宿舍___对学生进行管理,该程序应该具有以下功能1能从键盘录入床位信息2指定学号,显示该学生的住宿的信息3指定宿舍号,显示住宿信息4给定宿舍号、床位号,修改住宿信息5给定宿舍号、床位号,删除住宿信息
2.3运行环境1WindowsXP/7系统2VC++
6.0编译环境
2.4__工具C语言
3.总体设计
3.1系统模块设计1欢迎及信息导入界面构造函数int__in,显示欢迎及制作信息构造函数voidloadRec从磁盘文件导入住宿信息到内存2主菜单界面构造函数intmenu_select实现系统主菜单的显示3住宿信息新建构造函数voidcreateRec,新建或录入学生住宿信息4住宿信息查询构造函数voidsearchRec查询指定学号的学生住宿信息5住宿信息修改构造函数voidmodifyRec修改指定宿舍号及床位号的学生住宿信息6住宿信息删除构造函数voiddeleteRec实现对指定宿舍号及床位号的学生住宿信息记录的删除并通过函数free,释放内存空间7住宿信息浏览构造函数voidlistRec,实现对指定宿舍住宿信息浏览界面的显示8住宿信息统计构造函数voidcountRec,实现对床位信息中空床位数的统计9住宿信息保存构造函数voidwriteInfo,保存学生住宿信息10退出界面构造函数voidexit0退出程序系统功能模块图
4.详细设计
4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下数据项名称数据项系统表示数据类型数据长度备注姓名p1-name字符串20学号p1-id字符串20班级p1-classs字符串10入住时间p1-intake.yearp1-intake.monthp1-intake.day整形床位信息p1-bed.dormp1-bed.bedidp1-bed.k字符型字符型整形105根据系统要求,系统中需要保存的类别信息,其结构如下类别代号charname
[20]charid
[20]charclasss
[10]DATEintake类别名称姓名学号班级入住时间类别代号INFObed类别名称住宿情况基本信息结构体Typedefstruct{intyear;intmonth;intday;}DATE;Typedefstruct{chardorm
[10];charbedid
[5];intk;}INFO;structstudent{charname
[20];charid
[20];charclasss
[20];DATEintake;INFObed;structstudent*next;};
4.2模块接口设计1所有函数模块声明如下voidcreateRec;/*新建住宿信息记录*/voidloadRec;/*从磁盘文件导入住宿信息到内存voidsearchRec;/*查询住宿记录*/voidmodifyRec;/*修改住宿记录*/voidcountRec;/*统计空床位记录*/voiddeleteRec;/*删除住宿记录*/voidlistRec;/*显示住宿信息*/voidwriteInfo;/*保存住宿记录*/voidexit0;/*退出*/intmenu_select;/*主菜单*/2定义一个全局变量以及结构体指针structstudent*head=NULL*p1*p2*p3;定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针p3为中间指针intwriteinfo_flag=0;保存住宿信息标志的全局变量标志3主要模块的实现系统以主函数int__in为入口调用voidloadRec函数导入住宿信息,然后调用intmenu_select;函数,进入主菜单界面系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作
4.3以下是几个主要模块的流程图1主菜单函数否是否是图1主函数流程图2查询指定学号学生住宿信息函数图2显示指定宿舍学生住宿信息结构框图3新建或添加学生住宿信息函数图3新建若干组学生住宿信息结构框图4修改(删除)指定宿舍号及床位号的学生住宿信息函数图4修改(删除)指定宿舍号及床位号的学生住宿信息结构框图5显示指定宿舍号学生住宿信息函数图5显示指定宿舍号学生住宿信息函数结构框图6保存学生住宿信息函数图6保存学生住宿信息函数结构框图
5.运行结果
5.1欢迎界面及文件信息导入图1欢迎界面及文件信息导入
5.2主菜单界面图2主菜单界面
5.3新建学生住宿信息图3新建学生住宿信息
5.4查询指定学号的学生住宿信息图4查询指定学号的学生住宿信息
5.5修改指定宿舍号及床位号的学生住宿信息图5修改指定宿舍号及床位号的学生住宿信息
5.6删除指定宿舍号及床位号的学生住宿信息图6删除指定宿舍号及床位号的学生住宿信息
5.7显示指定宿舍号的学生住宿信息图7显示指定宿舍号的学生住宿信息
5.8统计空床位数图8统计空床位数
5.9保存学生住宿信息图9保存学生住宿信息
5.10退出界面图10退出界面
6.程序前后文本1导入的文本路径
1.___张强1112012-08-0612511王阳明2112012-08-0612520陈超3112012-08-0612530李可4112012-08-06128412保存后的文本路径
1.___王阳明2112012-8-612520陈超3112012-8-612530李可4112012-8-612841陈东5112012-8-
6128107.编程体会本次课程设计总体感觉要较之去年的简单了不少但由于C语言初学较差,基础薄弱,感觉还是存在较大的问题所以这次的编程实现主要是对教师模板进行的在修改,使得其满足课设中所提众多要求编程中大体要满足的一般都是新建、修改、删除、保存、查询、文件读入等功能,其中的删除和文件读入较为复杂个人认为这次课设的一个难点是要求运用链表实现编程不得不说链表的运用会提高程序的清晰度和可读性但由于链表理解起来较难,这会在应用上存在极大的难度课设中信息较为复杂,如床位信息、入住时间,都是作为一个信息存在,但本省包含多个信息量所以在定义结构体时,对结构体进行了另命名和结构体嵌套在创建、删除等链表等功能的实现中,经常需要找到当前结点之前的结点,也就是前驱结点随着程序的进展,也需要更新前驱结点指针在真正的程序应用中,总是会有许多出错的地方,比如各函数对输入数据格式的限制文件读入时,文件不存在,文件读取错误等还有指针应用中,申请空间及对废弃指针存储内容的释放等细节决定成败,程序编写中一个微小的错误就会引发一系列的错误,造成修改难度大,程序无法运行的诸多麻烦所以在程序编写之初,便应保持良好的心态,认真对待,有条不紊通过这次课程设计,我可以说是获益匪浅,不仅使得我回顾了大量的C语言知识,巩固了已知,在此基础之上,我还了解理解了虚度哦故去不是很理解或根本不知道的东西而且从另一侧面锻炼了我的心性,让我在对待事物上可以统筹,又可以对每一个部分进行充分的认识以及耐心,认真,反复检查,精益求精等良好的品行等总之,本次课设于我意义重大,受益良多
8.程序源代码/*已知一个宿舍的信息为床位信息(宿舍号、床位号、是否入住)、学号、姓名、班级、入住时间,从键盘输入n个宿舍的信息,并将其保存在()文件中*//*所使用的有头文件*/#includestdio.h#includestring.h#include__lloc.h#includestdlib.h#includeconio.h#defineLENsizeofstructstudent/*结构体定义*/typedefstruct{intyear;/*年*/intmonth;/*月*/intday;/*日*/}DATE;typedefstruct{chardorm
[10];/*宿舍号*/charbedid
[5];/*床位号*/intk;/*入住情况k=(0/1)*/}INFO;structstudent{charname
[20];/*姓名*/charid
[20];/*学号*/charclasss
[10];/*班级*/DATEintake;/*入住时间*/INFObed;/*床位信息*/structstudent*next;};/*函数声明*/voidcreateRec;/*新建住宿信息记录*/voidloadRec;/*从磁盘文件导入住宿信息到内存*/voidsearchRec;/*查询住宿记录*/voidmodifyRec;/*修改住宿记录*/voidcountRec;/*统计空床位记录*/voiddeleteRec;/*删除住宿记录*/voidlistRec;/*显示住宿信息*/voidwriteInfo;/*保存住宿记录*/voidexit0;/*退出*/intmenu_select;/*主菜单*//*链表操作所用结构体指针*/structstudent*head=NULL*p1*p2*p3;/*定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针*//*宿舍记录保存标志全局变量*/intwriteinfo_flag=0;/*主函数*/int__in{printf\n\t\t\n;printf\n\t\t○●○●○●○\n;printf\n\t\tC语言课程设计--宿舍管理\n\n;printf\n\t\t☆◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆☆\n;printf\n\t\t\n;printf\n\t\t※指导老师张吴波\n;printf\n\t\t※制作人李鑫班级T1223-11\n;printf\n\t\t※__:1726160202\n;printf\n\t\t※printf\n\n\t\t***************************************************\n;getchar;systemcls;loadRec;for;;{switchmenu_select{case1:systemcls;createRec;break;case2:systemcls;searchRec;break;case3:systemcls;modifyRec;break;case4:systemcls;deleteRec;break;case5:systemcls;listRec;break;case6:systemcls;countRec;break;case7:systemcls;writeInfo;break;case0:systemcls;exit0;return0;default:{getchar;systemcls;printf\n选择错误,请正确输入你的选择0~7:\n;printf\n按任意键返回......\n;getchar;systemcls;/*清屏*/}}}return0;}/*主菜单*/intmenu_select{intc;printf\n\t\t○●○●○●○●○●○●○●○\n;printf\n\t\t★欢迎使用简易宿舍管理系统\n;printf\n\t\t*********************************\n\n;printf\t\t*
1.新建学生住宿信息\n;printf\t\t*
2.查询指定学号的学生住宿信息\n;printf\t\t*
3.修改指定宿舍号及床位号的学生住宿信息\n;printf\t\t*
4.删除指定宿舍号及床位号的学生住宿信息\n;printf\t\t*
5.显示指定宿舍号学生住宿信息\n;printf\t\t*
6.统计空床位数\n;printf\t\t*
7.保存学生住宿信息\n;printf\t\t*
0.退出任何情况下按Ctrl+C退出程序\n\n;printf\t\t**********************************\n;printf\n请输入相应选择0~7:\n;scanf%dc;returnc;}/*从磁盘文件导入学生住宿信息到内存*/voidloadRec{FILE*fp;intn=0;iffp=fopen
1.___r==NULL/*打开文件*/{printf文件不存在或无法打开!\n;return;}head=p1=structstudent*__llocLEN;/*开辟一个新单元*/p1-next=NULL;while!feoffp{n++;fscanffp%s%s%s%d-%d-%d%s%s%dp1-namep1-idp1-classsp1-intake.yearp1-intake.monthp1-intake.dayp1-bed.dormp1-bed.bedidp1-bed.k;ifp1-id
[0]0||p1-id
[0]9{n--;break;}p2=structstudent*__llocLEN;/*开辟一个新单元*/p1-next=p2;p3=p1;p1=p2;p1-next=NULL;}freep2;p3-next=NULL;printf\n\t\t%d项信息输入完毕,按任意键返回......\nn;getchar;systemcls;/*清屏*/writeinfo_flag=0;/*设置保存记录标志*/iffclosefp/*关闭文件*/{printfCannotclosethefile!\n;exit0;}}/*新建宿舍信息记录*/voidcreateRec{intni;ifhead!=0{p3=head;whilep3-next!=NULLp3=p3-next;getchar;printf\n住宿信息数据库已存在,新建住宿信息将接续在原信息库的后面,按任意键继续......:\n;getchar;systemcls;/*清屏*/p3-next=p1=structstudent*__llocLEN;/*开辟一个新单元*/}elsehead=p1=structstudent*__llocLEN;/*开辟一个新单元*/p1-next=NULL;printf\n\n请输入希望建立的住宿基本信息条数nn1n10:\n;do{scanf%dn;ifn1||n10printf\n\n输入范围有误,请重新输入希望建立的宿舍基本信息条数nn1n10:\n;}whilen1||n10;/*开始建立n条学生住宿基本信息记录*/printf\n\n请输入学生的住宿信息如\n姓名学号班级入住时间宿舍号床位号入住情况(0/1)\n;fori=0;in;i++{scanf%s%s%s%d-%d-%d%s%s%dp1-namep1-idp1-classsp1-intake.yearp1-intake.monthp1-intake.dayp1-bed.dormp1-bed.bedidp1-bed.k;p2=structstudent*__llocLEN;/*开辟一个新单元*/p1-next=p2;p3=p1;p1=p2;p1-next=NULL;}freep2;p3-next=NULL;printf\n%d项信息输入完毕,按任意键返回......\nn;getchar;systemcls;/*清屏*/writeinfo_flag=1;/*清除保存记录标志*/}/*查询指定学号的学生住宿信息记录*/voidsearchRec{charid
[20];p1=head;ifp1==NULL{printf\n\n住宿信息数据库为空!!!\n;printf\n按任意键返回......\n;getch;systemcls;/*清屏*/return;}printf\n\n请输入学生学号以便查证:\n;scanf%sid;whilep1!=NULL{ifstrcmpp1-idid==0{printf\t该学生住宿信息如下:\n\t姓名:;printf%s\np1-name;printf\t学号:;printf%s\np1-id;printf\t班级:;printf%s\np1-classs;printf\t入住时间:;printf%d-%d-%d\np1-intake.yearp1-intake.monthp1-intake.day;printf\t床位信息:;printf%s%s%d\np1-bed.dormp1-bed.bedidp1-bed.k;break;}else{p1=p1-next;}}ifp1==NULLprintf\n\n找不到该学生的相应住宿信息!!!\n;printf\n按任意键返回......\n;getch;systemcls;/*清屏*/}/*修改指定宿舍号及床位号的学生住宿记录*/voidmodifyRec{chardorm
[10]bedid
[5];ifhead==NULL{getchar;printf\n学生住宿信息数据库为空,不能修改按任意键将返回:\n;getchar;systemcls;/*清屏*/return;}p1=head;printf\n\n请输入要修改记录的宿舍号及床位号:\n;scanf%s%sdormbedid;whilestrcmpdormp1-bed.dorm!=NULLstrcmpbedidp1-bed.bedid!=NULLp1-next!=NULL{p1=p1-next;}ifstrcmpdormp1-bed.dorm==NULLstrcmpbedidp1-bed.bedid==NULL{strcpyp1-bed.dormdorm;strcpyp1-bed.bedidbedid;printf\n\n请输入该学生的姓名:;scanf%sp1-name;printf\n\n请输入该学生的学号:;scanf%sp1-id;printf\n\n请输入该学生的班级:;scanf%sp1-classs;printf\n\n请输入该学生的入住时间:;scanf%d-%d-%dp1-intake.yearp1-intake.monthp1-intake.day;printf\n\n请输入该学生的床位信息:;scanf%s%s%dp1-bed.dormp1-bed.bedidp1-bed.k;printf\n该项信息修改完毕,;}elseprintf\n\n找不到相应信息!;getchar;printf按任意键将返回:\n;getchar;systemcls;/*清屏*/writeinfo_flag=1;/*清除保存记录标志*/return;}/*删除指定宿舍号及床位号的学生住宿记录*/voiddeleteRec{chardorm
[10]bedid
[5];ifhead==NULL{getchar;printf\n学生住宿信息数据库为空,不能删除按任意键将返回:\n;getchar;systemcls;/*清屏*/return;}p1=head;printf\n\n请输入要删除记录的宿舍号及床位号:\n;scanf%s%sdormbedid;whilestrcmpdormp1-bed.dorm!=NULLstrcmpbedidp1-bed.bedid!=NULLp1-next!=NULL{p2=p1;p1=p1-next;}ifstrcmpdormp1-bed.dorm==NULLstrcmpbedidp1-bed.bedid==NULL{ifhead-next==NULL{freehead;head=NULL;}elseifhead==p1{head=p1-next;freep1;}else{p2-next=p1-next;freep1;}printf\n删除完毕;;}elseprintf\n\n找不到相应信息!;getchar;printf按任意键返回:\n;getchar;systemcls;/*清屏*/writeinfo_flag=1;/*清除保存记录标志*/return;}/*显示指定宿舍号学生住宿信息*/voidlistRec{chardorm
[10];ifhead==NULL{printf\n数据库中没有该宿舍信息按任意键返回\n;getch;systemcls;return;}printf\n\n请输入要显示的宿舍号以便查证:\n;scanf%sdorm;p1=head;printf\n该宿舍住宿信息如下:\n;printf\n姓名\t学号\t班级\t入住时间\t宿舍号\t床位号\t入住情况(0/1)\n;whilep1!=NULL{ifstrcmpp1-bed.dormdorm==0{printf%s\t%s\t%s\t%d-%d-%d\t%s\t%s\t%d\np1-namep1-idp1-classsp1-intake.yearp1-intake.monthp1-intake.dayp1-bed.dormp1-bed.bedidp1-bed.k;p1=p1-next;}elsep1=p1-next;}printf\n按任意键返回!......\n;getch;systemcls;/*清屏*/}/*保存学生住宿记录*/voidwriteInfo{FILE*fp;/*定义文件指针*/ifhead==NULL{printf\n数据库中没有学生住宿信息按任意键返回\n;getch;systemcls;return;}ifwriteinfo_flag==0{printf\n数据库中学生住宿信息已保存过按任意键返回\n;getch;systemcls;return;}iffp=fopen
1.___w==NULL/*打开文件*/{printf\n数据库中学生住宿信息无法保存按任意键返回\n;getch;systemcls;return;}p1=head;whilep1!=NULL{fprintffp%s%s%s%d-%d-%d%s%s%dp1-namep1-idp1-classsp1-intake.yearp1-intake.monthp1-intake.dayp1-bed.dormp1-bed.bedidp1-bed.k;p1=p1-next;}fclosefp;printf\n数据库中学生住宿信息保存完毕按任意键返回\n;getch;systemcls;writeinfo_flag=0;/*设置保存记录标志*/return;}/*统计空床位数*/voidcountRec{inti=0;ifhead==NULL{printf\n数据库中没有学生住宿信息按任意键返回\n;getch;systemcls;return;}p1=head;whilep1!=NULL{ifp1-bed.k==0{i++;}p1=p1-next;}printf\n\n\t空床位数为:%d\ni;printf\n按任意键返回!......\n;getch;systemcls;}/*退出*/voidexit0{ifwriteinfo_flag==1/*修改过记录时,先保存,再退出*/writeInfo;p1=head;whilep1!=NULL{p2=p1-next;freep1;p1=p2;}systemcls;printf\n\n\n\t\t***********再见!***********\n;printf\n\t\t*******欢迎再次使用!*******\n;printf\n\t\t*****************************\n;getch;}}
9.____
[1]廖湖声.C程序设计案例教程.人民邮电出版社
2010.9
[2]何钦铭.C语言程序设计.高等教育出版社,
2009.5.
[3]谭浩强.C程序设计(第
2、
3、4版).清华大学出版社,
2000.
1.
[4]《C语言程序设计教程》,杨路明著,北京邮电大学出版社.进入主界面信息添加模块信息查询模块信息修改模块信息修改模块信息显示模块信息保存模块文件读入住宿信息空床位统计模块系统退出模块开始显示主菜单界面接受用户选择是否合法是否为零匹配相应数值退出系统调用对应函数输入选项判断是否合法否是显示该学生住宿信息按任意键返回主菜单输入选项否判断是否合法是输入建立信息条数否判断是否合法是输入学生住宿信息按意键返回主菜单对相应学生住宿信息进行修改(删除)按任意键返回主菜单输入选项否是否正确是否是否有对应是宿舍号床位号显示相应宿舍所有学生住宿信息按任意键返回主菜单输入选项否是否正确是否是否有对应是输入宿舍号0判断全局变量writenflag的值1否判断数据库中是否有住宿信息是按任意键返回主菜单将学生住宿信息保存到文件信息保存完毕关闭文件判断文件路径是否正确是否数据库中是否有图书信息数据库中学生住宿信息无法保存。