课程设计报告-正文参考模板(共34页).doc
精选优质文档-倾情为你奉上目 录1 前言学生宿舍管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生宿舍管理系统。学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的报表生成、修改功能,能够快速的查询学校所需的住宿信息。2 需求分析2.1 要求1开发环境要求:Turbo C 3.0。2提交课程设计报告一份,包括以下内容:(1)系统分析:包括设计题目、设计内容以及系统功能需求分析;(2)系统设计:包括总体设计(主要功能模块的划分)及详细设计(各功能模块的算法设计以及对应的流程图);(3)系统实现:包括使用的所有变量、自定义函数、结构体的说明,以及完整源程序清单,关键代码应加注释。(4)系统运行:包括系统操作使用的简单说明,使用测试数据运行的结果。(5)总结。包括课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C语言和本次课程设计的认识以及自己的建议等内容。2.2 任务1进行需求分析,将系统划分为多个模块;2为每个模块设计算法及流程;3编写代码实现各模块功能;4运行调试程序;5撰写课程设计报告。2.3 运行环境(1)WINDOWS2000/XP系统(2)Visual C+ 6.0编译环境或TC编译环境2.4 开发工具C语言3 分析和设计3.1系统分析及设计思路按学号进行查询、按姓名进行查询、按班级查询、按寝室号查询这四个功能模块在具体编程实现上基本上是一样的。因此我们仅以按姓名进行查询为例来说明一下这四个功能模块的详细实现过程。开始输入姓名(学号、班级、宿舍、)N判断条件?显示查询结果 Y结束图3.9 信息查询流程图1.按学号进行查询图3.10 信息查询界面设计思想:按学号查询是具体的查询某学生的详细信息,包括学生的基本信息及其住宿情况。在需要调查学生的详细情况时,可以采用该功能来实现。具体实现:(1).首先通过TADOQuery控件实现数据库和该功能模块的关联,再通过TDatasourse实现学生信息表(Student)和TDBGrid的关联,把学生信息显示在下面的表格中。(2).其次我还为窗体添加了一个TDBNavigator控件,可以实现数据的最上一条、上一条、下一条、最下一条浏览查看。当然像按学号来查询的话也许用不到该控件,但要是按班级查询或姓名等其他查询,这个控件是非常有用的。因为通过班级或姓名查出来的学生信息数据量会非常大,所以需要通过该按钮来方便、快捷的查看。(3).在按学号查询时首先要通过编程判断一下,数据库的学生信息表中是否存在该编号的学生,如果没有系统会提醒你学号不存在是不是输入错误,检查一下再重新输入,所以只有存在学号才能进行查询。(4).上述完成之后,输入所查询的学号,那么所需学生信息就会在下面表格中显示出来了。上图所显示的是所有学生信息情况。2.按姓名进行查询设计思想:按学生姓名实现的查询,虽然这样查出来的学生有可能不止一名,但在有些情况下(比如家人、朋友来访时,只记得学生姓名,在不清楚其学号、宿舍号的情况下,可以通过学生信息中的其它信息确定所要找的学生)可以调用此功能来实现。3.按班级进行查询设计思想:实现某个班级所有学生基本信息及住宿情况的查询。通过该功能模块我们可以统计某个班级的宿舍分配情况,这个班级的学生都住在哪些寝室中。4.按寝室号查询设计思想:在输入寝室号时可以把该宿舍所住的所有学生的信息都统计出来,方便详细了解某宿舍的学生住宿情况。5.住宿情况查询图3.11 住宿情况查询界面设计思想:点击多选框里的按楼房号查询按钮可以查看某栋楼房所有宿舍的住宿情况,看看还有哪些宿舍还有空的床位,可以入住学生。还可以查看某个宿舍的详细情况。同时该模块还能够统计某栋楼房的所有学生人数。具体实现:(1).首先通过TADOQuery控件实现数据库和该功能模块的关联,再通过TDatasourse实现寝室表(Dorm)和TDBGrid显示表格的关联,把宿舍信息显示在下面的表格中。(2).其次放置一个复选按钮键,可以方便实现按楼房号和按宿舍号两种方式的查询。在右边放置一个查询框,进行查询条件的输入。在按楼房号查询时,用到了模糊查询。模糊查询的在本部分的基本原理就是:我们在刚开始建库时考虑到管理方便和减少冗余,在对学生进行宿舍号登记时是这么描述的如:6-502,将其楼房号和宿舍号放一个字段中,并没有将其分开操作。所以在查询这部分当需要按楼房号进行查询时,就要注意了。假如我们要查5号楼的住宿情况,那么在TDBGrid表格中的显示就应该是5-*,而6-502虽然也包含了5这个字符,但它不属于5号楼,所以要将其排除在外。因此我们采用了模糊查询,查询结果只显示所需信息。(3).在住宿统计的实现上,我们使用的SQL集函数SUM()来实现的。它的主要功能就是计算一列值得总和(此列必须是数值型)。将要查的楼房号,输入到查询条件中时,还需要判断该楼房号到底存不存在,如果存在在点击该模块中的住宿统计按钮,那么该楼房所有学生的总人数会在住宿统计按钮右边的Memo文本显示控件里面进行显示了,同时该楼房的详细住宿情况会在表格中进行具体显示。综合以上分析,要实现上面的所有功能模块,共需要设计九个表,它们分别是:学生基本情况表、寝室表、员工表、楼房表、人员来访表、学生财产表、学期注册表、权限表、物品出入楼表。系统表如下:1.用户表:登记管理人员的用户名、密码及登录权限。2.学生基本情况表:详细登记学生基本信息及学生住宿情况。3.寝室表:登记所有宿舍的详细情况。4.员工表:登记所有管理人员的详细情况。5.人员来访表:登记所有来访人员的详细情况。6.物品出入表:详细登记学生物品出楼信息。7.楼房表:登记所有住宿楼情况。8.学期注册表:登记学生每学期的注册情况。9.学生财产表:登记学生物品情况。表3.1 用户表(LoginIn)字段名描述数据类型数据长度NULLPrimarykeyUserName用户名char10NYUserId用户密码char10NYUserPower用户权限char20NN表3.2 学生基本情况表(Student)字段名描述数据类型数据长度NULLPrimarykeyStu_Id学号char20NY and FStu_Name姓名char10YNStu_Sex性别char10YNDor_Id寝室号char10NFStu_Enr入学日期datetime10YNStu_Birth出生日期datetime10YNStu_Study所学专业char10YNStu_Class班级char10YNStu_Polit政治面貌char10YNStu_Add家庭住址char50YNStu_Tel联系方式char10YNStu_Sta状态char10YNStu_Des备注char50YN表3.3 寝室表(Dorm)字段名描述数据类型数据长度NULLPrimarykeyDor_Id寝室号char10NYDor_Sex居住性别char10YNDor_Num应住人数char10YNDor_Fact实住人数char10YNDor_Price住宿费用char10YNDor_Tel电话char10YNDor_Des备注char50YN表3.4 员工表(Employee)字段名描述数据类型数据长度NULLPrimarykeyEmp_Id员工号char20NYEmp_Name姓名char10YNEmp_Age年龄char10YNEmp_Sex性别char10YNHou_Id楼房号char10NFEmp_Job职位char10YNEmp_Add家庭住址char50YNEmp_Tel联系方式char10YNEmp_Des备注char50YN表3.5 人员来访表(Visit)字段名描述数据类型数据长度NULLPrimarykeyVis_Name来访人姓名char10NNVis_Host被访人姓名char10YNDor_Id宿舍char10NFRelation所属关系char10YNVis_Data来访日期datetime10YNVis_Time来访时间datetime10YNLea_Time离开时间datetime10YNVis_Watch值班人char10YNVis_Cred证件名称char10YNVis_Des备注char50YN表3.6 物品出入楼表(Goodsmove)字段名描述数据类型数据长度NULLPrimarykeyStu_Id学号char20NYG_In进楼物品char10YNG_Out出楼物品char10YNG_Date时间datetime10YNWatch值班人char10YNG_Des备注char50YN表3.7 楼房表(House)字段名描述数据类型数据长度NULLPrimarykeyHou_Id楼房号char20NYHou_Num楼层数char10YNHou_Rom房间数char10YNHou_Peo应住人数char10YNHou_Des备注char50YN表3.8 学期注册表 (Enroll)字段名描述数据类型数据长度NULLPrimarykeyStu_Id学号char20NYDor_Id寝室char10NFEnr_Date注册日期datetime10YNEnr_Price所交费用char10YNEnr_Sta交费情况char10YNEnr_Year所交年度datetime10YYEnr_Des备注char50YN表3.9 学生财产表(Riches)字段名描述数据类型数据长度NULLPrimarykeyStu_Id学号char20NYDor_Id寝室char10YFBed床位char10YNStool凳子号Char10YNDesk桌子号char10YNTelphone电话char10YNKeySend钥匙发否char10YNBox箱子char10YNBedding被子char10YNDescription备注char50YN3.2 主要数据结构及算法本管理系统共用到九个表:用户表(LoginIn)、学生基本情况表(Student)、寝室表(Dorm)、员工表(Employee)、人员来访表(Visit)、物品出入楼表(Goodsmove)、楼房表(House)、学生财产表(Riches)、学期注册表 (Enroll),各表之间均有一定的关系,可以进行关联。1.学生基本情况表(Student)、学生财产表(Riches)、学期注册表 (Enroll)、物品出入楼表(Goodsmove)这四个表里面都有一个相同的字段:学号(Stu_Id),通过学号这个字段就可以将系统的这四个表关联了起来。当某个表发生插入、修改、删除等方面的改动时,相联的表之间也要进行相应的改动。学生基本情况表(Student)和寝室表(Dorm)也有一个相同的字段:寝室号(Dor_Id)将两表相关联。.由于员工是负责管理某栋楼房的,因此员工表(Employee),楼房表(House)这两个表之间有一个相同的字段:楼房号(Hou_Id)来进行关联。3.3 函数流程图图3.1 系统功能流程图4 具体代码实现1.增加用户源代码procedure TAddUserForm.BitBtn1Click(Sender: TObject);beginif Edit1.Text ='' then begin MessageBox(handle,'请输入用户名!','',MB_OK+MB_ICONWARNING); Edit1.SetFocus ; exit; end;if Edit2.Text ='' then begin MessageBox(handle,'请输入用户密码!',',MB_OK+MB_ICONWARNING); Edit2.SetFocus ; exit; end; if ComboBox1.Text ='' then begin MessageBox(handle,'请选择用户权限!','',MB_OK+MB_ICONWARNING); Edit2.SetFocus ; exit; end;With DataMD.ADOAddUser dobegindatamd.ADOAddUser.Insert; / 插入一条空白记录 datamd.ADOAddUser.FieldByName('UserName').AsString:=trim(edit1.Text);datamd.ADOAddUser.FieldByName('UserId').AsString:=trim(edit2.Text); datamd.ADOAddUser.FieldByName('UserPower').AsString:=trim(ComboBox1.Text);If MessageDlg('确定要添加吗 ?!',mtconfirmation,mbYes,mbNo,0)=mrYes then begin post; edit1.Text:='' edit2.Text:='' MessageBox(handle,'用户信加!','!',MB_OK+MB_ICONWARNING); end else begin cancel; edit1.Text:='' edit2.Text:='' end; end ;end;procedure TAddUserForm.BitBtn2Click(Sender: TObject);beginclose;end;end;2.删除用户源代码procedure TAddUserForm.BitBtn3Click(Sender: TObject);vardeleteName:string;deletePass:string;deletePower:string;beginif Edit1.Text ='' then begin MessageBox(handle,'输入所删用户名',MB_OK+MB_ICONWARNING); Edit1.SetFocus ; exit; end;if Edit2.Text ='' then begin MessageBox(handle,'输入所删用户密码',MB_OK+MB_ICONWARNING); Edit2.SetFocus ; exit; end;if ComboBox1.Text ='' then beginMessageBox(handle,'输入所删用户权限!',MB_OK+MB_ICONWARNING); Edit2.SetFocus ; exit; end;Datamd.ADOAdduer.Close ;Datamd.ADOAdduer.SQL.Clear ;Datamd.ADOAdduer.SQL.Add(' select * from LoginIn where username = '''+Edit1.Text +'''and');Datamd.ADOAdduer.SQL.Add('userId='''+Edit2.text+'''');Datamd.ADOAdduer.Prepared ;Datamd.ADOAdduer.Open ;if Datamd.ADOAdduer.Eof then begin MessageBox(handle,'该用户信息不存在,请确认后再输入!','警告',MB_OK+MB_ICONWARNING); Edit1.SelectAll; edit1.Text:='' edit2.Text:='' exit; end;deleteName:=edit1.Text ;deletePass:=edit2.Text ;deletePower:= ComboBox1.Text ;With DataMD.ADOAddUser doIf MessageDlg('确定删除?!',mtconfirmation,mbYes,mbNo,0)=mryes thenbegindatamd.ADOCommand1.CommandText:='delete from loginIn where (username='''+deleteName+''')and(useriD='''+deletepass+''')and(userpower='''+deletepower+''')'datamd.ADOCommand1.Execute ;edit1.Text:=''edit2.Text:=''MessageBox(handle,'用户信息已删除!','!',MB_OK+MB_ICONWARNING);endelse begin cancel; edit1.Text:='' edit2.Text:='' end ;end;procedure TAddUserForm.BitBtn4Click(Sender: TObject);beginclose;end;-密码修改源代码-procedure TUserChange.BtsubmitClick(Sender: TObject);beginif UserNameEdit.Text ='' then begin messagedlg('请输入用户名',mtwarning,mbok,0); UserNameEdit.SetFocus ; exit; end; if OldPassWordEdit.Text ='' then begin messagedlg('请输入原始密码',mtwarning,mbok,0); OldPassWordEdit.SetFocus ; exit; end; if NewPasswordEdit.Text ='' then begin messagedlg('请输入新密码',mtwarning,mbok,0); NewPasswordEdit.SetFocus ; exit; end; if submitEdit.Text ='' then begin messagedlg('请输入确认密码',mtwarning,mbok,0); submitEdit.SetFocus ; exit; end;/判断两次输入的新密码是否相同if trim(newpasswordedit.Text)<>trim(submitedit.Text) thenbeginmessagedlg('请重新输入,新密码与确认密码不一致!',mtinformation,mbok,0); NewPasswordEdit.Text:='' submitEdit.Text:='' newpasswordedit.SetFocus;endelsebeginwith datamd.ADOchange do begin close; sql.Clear; sql.Add('select * from LoginIn where sername='''+usernameedit.Text+''''+'anduserId='''+oldpasswordedit.Text+''''); open; if eof then /当没有查询到该记录时,就说明当前为空 begin showmessage('对不起,您所输入的用户名或密码错误,请重新输'); UserNameEdit.Text:='' OldPassWordEdit.Text:='' NewPasswordEdit.Text:='' submitEdit.Text:='' end else begin edit; fieldbyname('UserId').AsString:=newpasswordedit.Text; post; showmessage('新密码修改成功,请记牢!'); UserNameEdit.Text:='' OldPassWordEdit.Text:='' NewPasswordEdit.Text:='' submitEdit.Text:='' end; end;end;end;procedure TUserChange.BtCancelClick(Sender: TObject);beginclose;end;end;-公寓管理模块源代码-1.楼房管理源代码procedure THouseForm.Button1Click(Sender: TObject);beginif edit1.Text='' then beginMessageBox(handle,'楼房编号不能为空 !','警告',MB_OK+MB_ICONWARNING); edit1.SetFocus ; exit;end;/检查系统中是否存在该学号的学生 datamd.ADOHouse.Close ; datamd.ADOHouse.SQL.Clear ; datamd.ADOHouse.SQL.Text :='select hou_Id from house where hou_Id='''+edit1.Text+'''' datamd.ADOHouse.Prepared ; datamd.ADOHouse.Open ; if not datamd.ADOHouse.IsEmpty then begin MessageBox(handle,'该楼房信息已经存入数据库!','警告',MB _OK+MB_ICONWARNING); edit1.Text:='' edit2.Text:='' edit3.Text:='' edit4.Text:='' edit5.Text:='' edit1.SetFocus ; exit; end; datamd.ADOHouse.Close ; datamd.ADOHouse.SQL.Clear ; datamd.ADOHouse.SQL.Text:='select* from house ' datamd.ADOHouse.Prepared ; datamd.ADOHouse.Open ; datamd.ADOHouse.Insert; datamd.ADOHouse.FieldByName('hou_id').AsString:=trim(edit1.Text); datamd.ADOHouse.FieldByName('hou_Num').AsString:=trim(edit2.Text); datamd.ADOHouse.FieldByName('hou_Rom').AsString:=trim(edit3.Text); datamd.ADOHouse.FieldByName('hou_Peo').AsString:=trim(edit4.Text); datamd.ADOHouse.FieldByName('hou_Des').AsString:=trim(edit5.Text); if messagedlg('请确认输入的数据无误!',mtconfirmation,mbYes,mbNO,1)=mryes then begin datamd.ADOHouse.Post; ShowMessage('楼房信息登记完毕!'); edit1.Text:='' edit2.Text:='' edit3.Text:='' edit4.Text:='' edit5.Text:='' end else begin showmessage('操作已取消,请重新输入'); datamd.ADOHouse.cancel; edit1.Text:='' edit2.Text:='' edit3.Text:='' edit4.Text:='' edit5.Text:='' end; end;procedure THouseForm.Button2Click(Sender: TObject);beginclose;end;end.2.宿舍管理源代码procedure TDormForm.BitBtn1Click(Sender: TObject);beginif edit1.Text='' then begin messagedlg('请输入寝室号!',mtinformation,mbok,0); exit; end;if edit2.Text='' then begin messagedlg('请输入寝室应住人数!',mtinformation,mbok,0); exit; end; if edit4.Text='' then begin messagedlg('请为该寝室确定住宿费用!',mtinformation,mbok,0); exit; end; if ComboBox2.Text='' then begin messagedlg('请选择居住性别!',mtinformation,mbok,0); exit; end; /检查系统中是否存在该寝室号 datamd.ADODorm.Close ; datamd.ADODorm.SQL.Clear ; datamd.ADODorm.SQL.Text:='select Dor_Id from Dorm where Dor_Id='''+Edit1.Text+'''' datamd.ADODorm.Prepared ; datamd.ADODorm.Open ; if not datamd.ADODorm.IsEmpty then begin MessageBox(handle,'该寝室号已录入!','警告',MB_OK+MB_ICONWARNING); Edit1.SetFocus ; exit; end;/寝室信息录入 datamd.ADODorm.Close ; datamd.ADODorm.SQL.Clear ; datamd.ADODorm.SQL.Add('select * from dorm'); datamd.ADODorm.Open ; datamd.ADODorm.Insert; datamd.ADODorm.FieldByName('Dor_Id').AsString:=trim(edit1.Text); datamd.ADODorm.FieldByName('Dor_Num').AsString:=trim(edit2.Text); datamd.ADODorm.FieldByName('Dor_Price').AsString:=trim(edit4.Text); datamd.ADODorm.FieldByName('Dor_sex').AsString:=trim(ComboBox2.Text); datamd.ADODorm.FieldByName('Dor_Tel').AsString:=trim(edit5.Text); datamd.ADODorm.FieldByName('Dor_Des').AsString:=trim(edit6.Text); datamd.ADODorm.Post; ShowMessage('宿舍信息插入完毕!'); edit1.Text:='' edit2.Text:='' edit4.Text:='' edit5.Text:='' edit6.Text:=''end;procedure TDormForm.BitBtn2Click(Sender: TObject);beginclose;end;procedure TDormForm.FormShow(Sender: TObject);begin datamd.ADODorm.Close ; datamd.ADODorm.SQL.Clear ; datamd.ADODorm.SQL.Add('select * from dorm order by dor_id asc' ); datamd.ADODorm.Open ;end;end.-信息查询模块源代码-1.按学号进行查询procedure TDemandForm.Button1Click(Sender: TObject)