课程设计报告正文参考模板.docx
《课程设计报告正文参考模板.docx》由会员分享,可在线阅读,更多相关《课程设计报告正文参考模板.docx(41页珍藏版)》请在冰点文库上搜索。
课程设计报告正文参考模板
1前言
学生宿舍管理系统对于一个学校来说是必不可少的组成部分。
目前好多学校还停留在宿舍管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。
而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。
当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。
信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。
21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。
我们针对如此,设计了一套学生宿舍管理系统。
学生宿舍管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。
由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。
这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。
本系统具有运行速度快、安全性高、稳定性好的优点,并且具备完善的报表生成、修改功能,能够快速的查询学校所需的住宿信息。
2需求分析
2.1要求
1.开发环境要求:
TurboC3.0。
2.提交课程设计报告一份,包括以下内容:
(1)系统分析:
包括设计题目、设计内容以及系统功能需求分析;
(2)系统设计:
包括总体设计(主要功能模块的划分)及详细设计(各功能模块的算法设计以及对应的流程图);
(3)系统实现:
包括使用的所有变量、自定义函数、结构体的说明,以及完整源程序清单,关键代码应加注释。
(4)系统运行:
包括系统操作使用的简单说明,使用测试数据运行的结果。
(5)总结。
包括课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C语言和本次课程设计的认识以及自己的建议等内容。
2.2任务
1.进行需求分析,将系统划分为多个模块;
2.为每个模块设计算法及流程;
3.编写代码实现各模块功能;
4.运行调试程序;
5.撰写课程设计报告。
2.3运行环境
(1)WINDOWS2000/XP系统
(2)VisualC++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)
字段名
描述
数据类型
数据长度
NULL
Primarykey
UserName
用户名
char
10
N
Y
UserId
用户密码
char
10
N
Y
UserPower
用户权限
char
20
N
N
表3.2学生基本情况表(Student)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Stu_Id
学号
char
20
N
YandF
Stu_Name
姓名
char
10
Y
N
Stu_Sex
性别
char
10
Y
N
Dor_Id
寝室号
char
10
N
F
Stu_Enr
入学日期
datetime
10
Y
N
Stu_Birth
出生日期
datetime
10
Y
N
Stu_Study
所学专业
char
10
Y
N
Stu_Class
班级
char
10
Y
N
Stu_Polit
政治面貌
char
10
Y
N
Stu_Add
家庭住址
char
50
Y
N
Stu_Tel
联系方式
char
10
Y
N
Stu_Sta
状态
char
10
Y
N
Stu_Des
备注
char
50
Y
N
表3.3寝室表(Dorm)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Dor_Id
寝室号
char
10
N
Y
Dor_Sex
居住性别
char
10
Y
N
Dor_Num
应住人数
char
10
Y
N
Dor_Fact
实住人数
char
10
Y
N
Dor_Price
住宿费用
char
10
Y
N
Dor_Tel
电话
char
10
Y
N
Dor_Des
备注
char
50
Y
N
表3.4员工表(Employee)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Emp_Id
员工号
char
20
N
Y
Emp_Name
姓名
char
10
Y
N
Emp_Age
年龄
char
10
Y
N
Emp_Sex
性别
char
10
Y
N
Hou_Id
楼房号
char
10
N
F
Emp_Job
职位
char
10
Y
N
Emp_Add
家庭住址
char
50
Y
N
Emp_Tel
联系方式
char
10
Y
N
Emp_Des
备注
char
50
Y
N
表3.5人员来访表(Visit)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Vis_Name
来访人姓名
char
10
N
N
Vis_Host
被访人姓名
char
10
Y
N
Dor_Id
宿舍
char
10
N
F
Relation
所属关系
char
10
Y
N
Vis_Data
来访日期
datetime
10
Y
N
Vis_Time
来访时间
datetime
10
Y
N
Lea_Time
离开时间
datetime
10
Y
N
Vis_Watch
值班人
char
10
Y
N
Vis_Cred
证件名称
char
10
Y
N
Vis_Des
备注
char
50
Y
N
表3.6物品出入楼表(Goodsmove)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Stu_Id
学号
char
20
N
Y
G_In
进楼物品
char
10
Y
N
G_Out
出楼物品
char
10
Y
N
G_Date
时间
datetime
10
Y
N
Watch
值班人
char
10
Y
N
G_Des
备注
char
50
Y
N
表3.7楼房表(House)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Hou_Id
楼房号
char
20
N
Y
Hou_Num
楼层数
char
10
Y
N
Hou_Rom
房间数
char
10
Y
N
Hou_Peo
应住人数
char
10
Y
N
Hou_Des
备注
char
50
Y
N
表3.8学期注册表(Enroll)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Stu_Id
学号
char
20
N
Y
Dor_Id
寝室
char
10
N
F
Enr_Date
注册日期
datetime
10
Y
N
Enr_Price
所交费用
char
10
Y
N
Enr_Sta
交费情况
char
10
Y
N
Enr_Year
所交年度
datetime
10
Y
Y
Enr_Des
备注
char
50
Y
N
表3.9学生财产表(Riches)
字段名
描述
数据类型
数据长度
NULL
Primarykey
Stu_Id
学号
char
20
N
Y
Dor_Id
寝室
char
10
Y
F
Bed
床位
char
10
Y
N
Stool
凳子号
Char
10
Y
N
Desk
桌子号
char
10
Y
N
Telphone
电话
char
10
Y
N
KeySend
钥匙发否
char
10
Y
N
Box
箱子
char
10
Y
N
Bedding
被子
char
10
Y
N
Description
备注
char
50
Y
N
3.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.增加用户源代码
procedureTAddUserForm.BitBtn1Click(Sender:
TObject);
begin
ifEdit1.Text=''then
begin
MessageBox(handle,'请输入用户名!
','',MB_OK+MB_ICONWARNING);
Edit1.SetFocus;
exit;
end;
ifEdit2.Text=''then
begin
MessageBox(handle,'请输入用户密码!
',',MB_OK+MB_ICONWARNING);
Edit2.SetFocus;
exit;
end;
ifComboBox1.Text=''then
begin
MessageBox(handle,'请选择用户权限!
','',MB_OK+MB_ICONWARNING);
Edit2.SetFocus;
exit;
end;
WithDataMD.ADOAddUserdo
begin
datamd.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);
IfMessageDlg('确定要添加吗?
!
',mtconfirmation,[mbYes,mbNo],0)=mrYesthen
begin
post;
edit1.Text:
='';
edit2.Text:
='';
MessageBox(handle,'用户信加!
','!
',MB_OK+MB_ICONWARNING);
end
else
begin
cancel;
edit1.Text:
='';
edit2.Text:
='';
end;
end;
end;
procedureTAddUserForm.BitBtn2Click(Sender:
TObject);
begin
close;
end;
end;
2.删除用户源代码
procedureTAddUserForm.BitBtn3Click(Sender:
TObject);
var
deleteName:
string;
deletePass:
string;
deletePower:
string;
begin
ifEdit1.Text=''then
begin
MessageBox(handle,'输入所删用户名',MB_OK+MB_ICONWARNING);
Edit1.SetFocus;
exit;
end;
ifEdit2.Text=''then
begin
MessageBox(handle,'输入所删用户密码',MB_OK+MB_ICONWARNING);
Edit2.SetFocus;
exit;
end;
ifComboBox1.Text=''then
begin
MessageBox(handle,'输入所删用户权限!
',MB_OK+MB_ICONWARNING);
Edit2.SetFocus;
exit;
end;
Datamd.ADOAdduer.Close;
Datamd.ADOAdduer.SQL.Clear;
Datamd.ADOAdduer.SQL.Add('select*fromLoginInwhereusername='''+Edit1.Text+'''and');
Datamd.ADOAdduer.SQL.Add('userId='''+Edit2.text+'''');
Datamd.ADOAdduer.Prepared;
Datamd.ADOAdduer.Open;
ifDatamd.ADOAdduer.Eofthen
begin
MessageBox(handle,'该用户信息不存在,请确认后再输入!
','警告',MB_OK+MB_ICONWARNING);
Edit1.SelectAll;
edit1.Text:
='';
edit2.Text:
='';
exit;
end;
deleteName:
=edit1.Text;
deletePass:
=edit2.Text;
deletePower:
=ComboBox1.Text;
WithDataMD.ADOAddUserdo
IfMessageDlg('确定删除?
!
',mtconfirmation,[mbYes,mbNo],0)=mryesthen
begin
datamd.ADOCommand1.CommandText:
='deletefromloginInwhere(username='''+deleteName+''')and(useriD='''+deletepass+''')and(userpower='''+deletepower+''')';
datamd.ADOCommand1.Execute;
edit1.Text:
='';
edit2.Text:
='';
MessageBox(handle,'用户信息已删除!
','!
',MB_OK+MB_ICONWARNING);
end
else
begin
cancel;
edit1.Text:
='';
edit2.Text:
='';
end;
end;
procedureTAddUserForm.BitBtn4Click(Sender:
TObject);
begin
close;
end;
-------------------------------密码修改源代码---------------------------------
procedureTUserChange.BtsubmitClick(Sender:
TObject);
begin
ifUserNameEdit.Text=''then
begin
messagedlg('请输入用户名',mtwarning,[mbok],0);
UserNameEdit.SetFocus;
exit;
end;
ifOldPassWordEdit.Text=''then
begin
messagedlg('请输入原始密码',mtwarning,[mbok],0);
OldPassWordEdit.SetFocus;
exit;
end;
ifNewPasswordEdit.Text=''then
begin
messagedlg('请输入新密码',mtwarning,[mbok],0);
NewPasswordEdit.SetFocus;
exit;
end;
ifsubmitEdit.Text=''then
begin
messagedlg('请输入确认密码',mtwarning,[mbok],0);
submitEdit.SetFocus;
exit;
end;
//判断两次输入的新密码是否相同
iftrim(newpasswordedit.Text)<>trim(submitedit.Text)then
begin
messagedlg('请重新输入,新密码与确认密码不一致!
',mtinformation,[mbok],0);
NewPasswordEdit.Text:
='';
submitEdit.Text:
='';
newpasswordedit.SetFocus;
end
else
begin
withdatamd.ADOchangedo
begin
close;
sql.Clear;
sql.Add('select*fromLoginInwheresername='''+usernameedit.Text+''''+'anduserId='''+oldpasswordedit.Text+'''');
open;
ifeofthen//当没有查询到该记录时,就说明当前为空
b