学生宿舍管理系统的设计.docx
《学生宿舍管理系统的设计.docx》由会员分享,可在线阅读,更多相关《学生宿舍管理系统的设计.docx(34页珍藏版)》请在冰豆网上搜索。
学生宿舍管理系统的设计
数据库课程设计报告
学生宿舍管理系统的设计
专业
学生姓名
班级
学号
指导教师
完成日期
学生宿舍管理系统的设计
1课程设计目的及要求
设计目的:
1)简化宿舍管理人员手工记录数据的繁琐;
2)提高记录查询速度,缩短查询时间;
3)实现数据的安全存储。
设计要求:
1)要求用户必须输入正确的密码才能进入系统;
2)实现按宿舍号、学生学号的查询。
3)实现分别按宿舍号、学生学号的统计。
2课程设计的主要内容
2.1经济可行性分析
系统的经济可行性分析是指对组织的经济状况和投资能力进行分析,对系统的建设运营和维护费用进行估算,对系统建成后可能取得的社会及经济效益进行估计。
由于本系统作为毕业设计,所以在资金上没有太多的需求,只是需要系统开发者投入较多的时间,去进行研究和分析,以及思考问题的所在。
2.2技术可行性分析
学生公寓管理系统使用SQLSever2000以及Java6.0进行开发,由于Netbeans6.0的可视化模块比较强大,所以在系统的设计过程中不会有太大问题,同该系统使用MacroSoftware的SQLserver2000对后台的数据进行操作,使得数据完整性得以保证,同时数据操作简单化。
通过上述分析得出该系统在技术上是可行的。
2.3操作可行性分析
本系统直观易懂,使用非常方便,管理员经过简单的培训就可以熟练的使用,因此系统的操作没有什么太大困难。
3数据库设计
3.1概念设计
3.1.1
3.1.2
数据字典是各类数据描述的集合,它是进行详细的数据收集和数据分析后所收获得的主要成果。
数据字典通常包括以下5个部分:
A.数据项:
数据项是不可再分的数据单位。
B.数据结构:
数据结构反映了数据之间的组合关系。
一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干数据项和数据结构混合组成。
C.数据流:
数据流是数据结构在系统内传输的路径。
D.数据存储:
数据存储是数据及其结构停留或保存的地方,也是数据流的来源和去向之一。
E.处理过程:
处理过程的具体处理逻辑一般用判定表或判定树来描述。
数据字典是关于数据库中数据的描述,即对元数据的描述。
数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。
a.数据项编号:
E01
数据项:
管理员信息表
描述:
宿舍管理员的相关信息
定义:
管理员信息表=员工姓名+性别+员工号+管理的楼号
b.数据项编号:
E02
数据项:
宿舍楼信息表
描述:
宿舍楼的相关信息
定义:
宿舍楼信息表=宿舍楼号+宿舍数目
c.数据项编号:
E03
数据项:
寝室信息表
描述:
学生寝室的相关信息
定义:
寝室信息表=寝室号+居住性别+寝室人数+楼号
d.数据项编号:
E04
数据项:
学生信息表
描述:
学生的个人信息
定义:
学生信息表=学号+性别+姓名+年龄+所属学院+居住楼号+寝室号
3.2逻辑设计
分析后达到三范式后建立以下4个表:
MANAGER_INFO表管理员信息
FLOOR_INFO表宿舍楼信息
ROOM_INFO表寝室信息
STUDENT_INFO表学生信息
一、管理员信息表(MANAGER_INFO)
管理员信息表
字段名
数据类型
长度
说明
描述
mname
Char
10
不空,主键
管理员姓名
msex
Char
10
不空
性别
mnumber
Int
4
不空
编号
mlou
Int
4
不空
楼号
二、宿舍楼信息表(FLOOR_INFO)
宿舍楼信息
字段名
数据类型
长度
说明
描述
mlou
Int
4
不空
楼号
room
Int
4
不空
房间数
三、寝室信息表(ROOM_INFO)
寝室信息
字段名
数据类型
长度
说明
描述
qnumber
Int
4
不空,主键
寝室号
qsex
Char
10
不空
居住性别
qcount
Int
4
不空
寝室人数
mlou
Int
4
不空
楼号
四、学生信息表(STUDENT_INFO)
学生信息
字段名
数据类型
长度
说明
描述
snumber
Int
4
不空,主键
学号
sname
Char
10
不空
姓名
ssex
Char
10
不空
性别
sage
Int
4
不空
年龄
scollege
Char
10
不空
所属学院
mlou
Int
4
不空
楼号
qnumber
Int
4
不空
寝室号
3.3物理设计
数据库的物理设计就是为逻辑数据模型选取一个最合适应用要求的物理结构的过程,在这个阶段中要完成两大任务:
(1)确定数据库的物理结构,在关系数据库中主要是存取方法和存储结构;
(2)对物理结构进行评价,评价的重点是时间和空间效率。
1、CREATEDATABASEdata_base
ON(
NAME=data_base_Data,
’C:
\ProgrameFiles\MicrosoftSQLServer\MSSQL\data\data_base_Data.MDF’,
SIZE=10MB,
MAXSIZE=50MB,
)
LOGON(
NAME=data_base_Log,
’C:
\ProgramFiles\MicrosoftSQLServer\MSSQL\data\data_base_Log.LDF’,
SIZE=10MB,
MAXSIZE=20MB,
)
2、CREATETABLEMANAGER_INFO
(mnamechar(10)notnullprimarykey,
msexchar(10)notnull,
mnumberint(4)notnull,
mlouint(4)notnull
)
Go
3、CREATETABLEFLOOT_INFO
(mlouint(4)notnullprimarykey,
roomint(4)notnull
)
Go
4、CREATETABLEROOM_INFO
(qnumberint(4)notnullprimarykey,
qsexint(10)notnull,
qcountint(4)notnull,
mlouint(4)notnull
)
Go
5、CREATETABLESTUDENT_INFO
(snumberint(4)notnullprimarykey,
snamechar(10)notnull,
ssexchar(10)notnull,
sageint(4)notnull,
scollegechar(10)notnull,
mlouint(4)notnull,
qnumberint(4)notnull
)
4程序模块设计
4.1登录界面模块设计
功能需求:
实现密码正确时才可使用此系统。
用户界面设计:
程序代码设计和分析:
程序主界面由6个部分怎么组成,菜单栏5个按钮分别三“按学号查询”、“按宿舍号查询”、“按学院统计”、“按宿舍号统计”、“帮助”,分别对应各自的功能。
初始状态下5个按钮都是无效的,只有输入正确的口令,功能才被激活。
口令出错时会出现“您输入的密码不正确”这样的提示窗口。
如果三次输入错误,用户会被禁用。
运行结果:
口令正确,窗口如下:
口令错误,窗口如下:
口令三次错误,用户被禁用,窗口如下:
4.2按宿舍号、学生学号的查询模块设计
功能需求:
实现分别按宿舍号、学生学号查询学生的相关信息。
用户界面设计:
程序代码设计和分析:
由于按学号查询跟按宿舍号查询功能类似,所以以学号举例。
查询之前首先需要建立与SQL的连接。
连接成功以后,使用Stringsql="select*fromSTUDENT_INFOwheresnumber="+t1.getText();进行查询,使用System.out.println(“”);在命令行中输出。
运行结果:
按宿舍号查询结果如下:
按学号查询结果如下:
4.3按宿舍号、学生学号的统计模块设计
功能需求:
实现分别按宿舍号、学院进行统计。
用户界面设计:
程序代码设计和分析:
在文本框中输入学院代号,1表示博雅学院,2表示化生学院,3表示机械学院,
设置一个变量x表示相应学院的住宿生人数。
然后使用java命令行输出表达式在DOS界面进行设计。
运行结果:
按宿舍号统计住宿生,结果如下:
按学院统计住宿生,结果如下:
5小结
这次数据库课程设计收获颇丰。
由于很多知识书本上没有,所以使得我学要在网络上寻找相应的内容,提高了我的知识查询能力。
在java程序与sql数据库连接上花了不少时间。
首先安装了SQLSever2000JDBC驱动程序,接着有对电脑本来的SQLSever2000打上SP3补丁,安装SP3驱动程序。
另外,还得在java的目录下粘贴msbase.jar,mssqlserver.jar,msutil.jar文件。
最后在DOS环境中使用“netstat–an”查看端口1433是否打开,打开后才可以进行数据库的连接。
1433端口是java和sql数据库进行连接的主要端口,该端口打开后也就意味着计算机给网络中的不法分子提供了一个入侵漏洞,计算机受到不断入侵会把用户的cmd.exe进行拦截,以至于用户不能打开DOS界面。
附录
附录1源程序清单
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
importjavax.swing.JOptionPane;
importjava.sql.*;
publicclassZuextendsFrameimplementsActionListener
{
staticinti=0;
staticintm=1;
Labela1,a2;
TextFieldtext1;
Buttonbutton1,m1,m2,m3,m4,m5;Fontf;
Zu(Strings)
{
super(s);
setLayout(null);
f=newFont("黑体",Font.BOLD,20);
m1=newButton("按学号查询");
m2=newButton("按宿舍号查询");
m3=newButton("按学院统计");
m4=newButton("按宿舍号统计");
m5=newButton("帮助");
m1.addActionListener(this);
m2.addActionListener(this);
m3.addActionListener(this);
m4.addActionListener(this);
m5.addActionListener(this);
m1.setBounds(10,30,120,25);
m2.setBounds(140,30,140,25);
m3.setBounds(290,30,120,25);
m4.setBounds(420,30,80,25);
m5.setBounds(510,30,80,25);
add(m1);add(m2);add(m3);add(m4);add(m5);
a1=newLabel("数据库课程设计",Label.CENTER);
a2=newLabel("输入口令:
");
a1.setBounds(180,100,300,40);
a1.setBackground(Color.white);a1.setFont(f);
a2.setBounds(180,200,90,25);
a2.setBackground(Color.white);
text1=newTextField(18);
text1.setBounds(280,200,200,25);
button1=newButton("确认");
button1.setBounds(300,250,70,30);
button1.addActionListener(this);
add(a1);add(a2);add(text1);add(button1);
setBackground(Color.white);
setBounds(100,100,600,400);
setVisible(true);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);}
});
}
publicvoidactionPerformed(ActionEvente)
{
Strings=newString("0851401102");
if(e.getSource()==button1)
{
while(i==0&&m<=3&&(!
(text1.getText().equals(""))))
{
if(text1.getText().equals(s))
{
JOptionPane.showMessageDialog(this,"口令正确,欢迎使用","成功登录对话框",JOptionPane.INFORMATION_MESSAGE);
i=1;
}
else{
m++;
JOptionPane.showMessageDialog(this,"您输入的密码不正确","警告对话框",JOptionPane.WARNING_MESSAGE);
text1.setText(null);
}
}
if(m>=3)
{
JOptionPane.showMessageDialog(this,"您已被禁用","错误对话框",JOptionPane.ERROR_MESSAGE);
}
}
if(i==1)
{
if(e.getSource()==m1)
{
Shows1=newShow("按学号查询信息");
s1.setVisible(true);
}
elseif(e.getSource()==m2)
{
Form3f1=newForm3();
f1.setTitle("按宿舍号查询信息");
f1.setVisible(true);
}
elseif(e.getSource()==m3)
{
Form4f2=newForm4();
f2.setTitle("按学院统计");
f2.setVisible(true);
}
elseif(e.getSource()==m4)
{
Form5f5=newForm5();
f5.setTitle("按宿舍号统计");
f5.setVisible(true);
}
elseif(e.getSource()==m5)
{
Helph1=newHelp("帮助信息");
h1.setVisible(true);
}
}
}
}
classJavaConnectSQLServer{
publicstaticConnectiongetConnection()
{
Connectionconn=null;
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
try{
StringconnURL="jdbc:
microsoft:
sqlserver:
//localhost:
1433;databaseName=data_base";
conn=DriverManager.getConnection(connURL,"sa","");
returnconn;
}catch(SQLExceptione){
e.printStackTrace();
}
returnconn;
}
}
classShowextendsFrameimplementsActionListener
{
Labelb1,b2;Fontf;
TextFieldt1;
Buttonbutton1,button2;
Show(Strings)
{
super(s);setLayout(null);
f=newFont("黑体",Font.BOLD,20);
b1=newLabel("按学号查询信息");
b2=newLabel("请输入学号:
");
t1=newTextField(18);
t1.setBounds(280,200,200,25);
b1.setBounds(180,100,250,40);
b1.setFont(f);
b1.setBackground(Color.white);
b2.setBounds(100,200,120,25);
b2.setBackground(Color.white);
t1=newTextField(15);
t1.setBounds(250,200,200,25);
button1=newButton("确定");button2=newButton("返回");
button1.setBounds(200,350,70,25);button2.setBounds(360,350,70,25);
setBounds(100,100,600,400);
setBackground(Color.white);
add(b1);add(b2);add(button1);add(button2);add(t1);
button1.addActionListener(this);
button2.addActionListener(this);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{setVisible(false);}
});
}
publicvoidactionPerformed(ActionEvente)
{
if(e.getSource()==button1)
{
t1.requestFocusInWindow();
Connectionconn=JavaConnectSQLServer.getConnection();
Statementstm=null;
try{
stm=conn.createStatement();
Stringsql="select*fromSTUDENT_INFOwheresnumber="+t1.getText();
ResultSetrs=stm.executeQuery(sql);
while(rs.next()){
System.out.print("学号");System.out.print("");
System.out.print("姓名");System.out.print("");
System.out.print("性别");System.out.print("");
System.out.print("年龄");System.out.print("");
System.out.print("所属学院");System.out.print("");
System.out.print("寝室楼号");System.out.print("");
System.out.print("寝室号");System.out.print("");
System.out.println();
System.out.print(rs.getString("snumber"));System.out.print("");
System.out.print(rs.getString("sname"));
System.out.print(rs.getString("ssex"));
System.out.print(rs.getString("sage"));System.out.print("");
System.out.print(rs.getString("scollege"));
System.out.print(rs.getString("mlou"));System.out.print("");
System.out.print(rs.getString("qnumber"));
}
System.out.println();System.out.println();
}catch(SQLExceptionk){
k.printStackTrace();
}
}
elseif(e.getSource()==button2)
{
setVisible(false);
}
}
}
classForm3extendsFrameimplementsActionListener
{
Labelb1,b2;Fontf;
TextFieldt1;
Buttonbutton1,button2;
Form3()
{
setLayout(null);
f=newFont("黑体",Font.BOLD,20)