大学自动排课算法设计与实现课设说明书.docx
《大学自动排课算法设计与实现课设说明书.docx》由会员分享,可在线阅读,更多相关《大学自动排课算法设计与实现课设说明书.docx(43页珍藏版)》请在冰豆网上搜索。
大学自动排课算法设计与实现课设说明书
中北大学
课程设计说明书
软件工程大型实验
学生姓名:
史东海
学号:
0706054208
学院:
电子与计算机科学技术学院
专业:
软件工程
题目:
大学自动排课算法设计与实现系统
——登陆及用户管理子系统
成绩
指导教师:
宋礼鹏职称:
讲师
2010年1月21日
1.设计目的
该系统并不是所有人都能随便使用的。
系统应该有不同的权限用于排课和课表的查询,通过登陆可以解决权限问题。
而用户是会经常变动的(比如毕业生的离校),所以需要对用户进行相应的管理(如添加、删除及密码的修改),所以需要实现用户管理功能。
2.设计内容
在整个系统中本人主要负责登陆和用户管理功能的实现,同时也参加算法的设计与实现。
本系统要涉及到管理人员、教师、学生三个不同的参与者,有两个不同的权限。
管理员可以录入教师、教室、班级等基本的信息然后进行排课,而教师和学生只具有查询课表的权限。
所以在登录的时候要把不同的权限划分出来。
程序在设计好后数据库中有一个默认的管理员的用户名和密码,通过该用户名和密码可以登陆系统,然后通过用户管理模块可以添加教师、学生或管理员。
为了防止用户忘记密码,管理员可以在不知道原始密码的情况下修改用户的密码。
而教师或学生若想修改自己的密码必须输入旧密码。
3.需求描述
图1登陆及用户管理子系统用例图
用例描述如下:
表1UserManagement用例描述表
用例编号
UC00
用例名称
UserManagement
用例概述
实现用户的添加、删除及密码修改
主参与者
管理员
次要参与者
教师、学生
前置条件
用户成功登陆
后置条件
显示出添加、修改用户及密码修改的子菜单
基本事件流
1.用户点击用户管理菜单项
2.用户管理菜单项显示添加用户、删除用户、修改密码三个子菜单
扩展事件流
无
表2Login用例描述表
用例编号
UC01
用例名称
Login
用例概述
用户输入账号和密码登陆
主参与者
管理员、教师、学生
次要参与者
无
前置条件
用户打开应用程序
后置条件
登陆失败时显示登陆失败信息,成功时进入系统
基本事件流
1.用户输入用户信息
2.用户合法则进入系统
扩展事件流
用户不合法时,则提示登陆失败消息
表3AddUser用例描述表
用例编号
UC000
用例名称
AddUser
用例概述
实现用户的添加
主参与者
管理员
次要参与者
无
前置条件
管理员成功登陆,并点击了添加用户菜单项
后置条件
弹出添加用户对话框,输入用户名及密码
基本事件流
1.管理员点击添加用户菜单项
2.管理员输入用户名、密码并选择所添加用户的身份,点击确定
扩展事件流
1.若用户存在则提示“用户名已存在”
2.若没有选择用户身份则提示“请选择用户身份”
3.若用户不存在且两次输入密码不同则提示“两次输入密码不同”
4.若用户名不存在且两次输入密码相同并选择了身份,则给出“添加成功”提示
表4DeleteUser用例描述表
用例编号
UC001
用例名称
DeleteUser
用例概述
实现用户的删除
主参与者
管理员
次要参与者
无
前置条件
管理员成功登陆,并点击了删除用户菜单项
后置条件
弹出删除用户对话框,输入用户名及密码
基本事件流
1.管理员点击删除用户菜单项
2.管理员输入用户名及密码,点击确定
扩展事件流
1.若用户名或密码错误则给出相应的提示
2.若用户名和密码正确则提示删除成功
表5ModifyPassword用例描述表
用例编号
UC002
用例名称
ModifyPassword
用例概述
实现用户密码的修改
主参与者
管理员、教室、学生
次要参与者
无
前置条件
用户成功登陆,并点击密码修改菜单项
后置条件
弹出密码修改对话框,输入用户名及密码
基本事件流
1.用户点击密码修改菜单项
2.用户输入用户名及密码,点击确定
扩展事件流
1.若用户名或旧密码错误则给出相应的提示
2.若用户名和密码正确则提示修改成功
4.系统详细分析设计
4.1顺序图
(1)登陆顺序图:
图2登陆顺序图
登陆首先输入用户名和密码,然后程序到数据库中查询用户名是否存在,密码是否正确,如果正确则登陆成功;不正确登陆失败,可以继续登陆或关闭登陆窗口。
(2)添加用户顺序图:
图3添加用户顺序图
管理员输用户名、密码和确认密码。
如果数据库对应表中有所输入的用户名则给出提示;没有则比较两次输入密码是否相同,相同条件成功;不同则给出相应提示。
删除用户顺序图:
图4删除用户顺序图
管理员输入用户名和密码。
如果数据库中不存在所输入的用户名则给出相应提示;存在则检查密码是否匹配,匹配则删除成功;不匹配则删除失败。
修改密码顺序图:
图5修改密码顺序图
用户输入用户名、旧密码(非管理员输入)、新密码。
程序检查数据库中所输入用户名是否存在,不存在则给出提示;存在则检查旧密码(非管理员)是否匹配,不匹配则给出提示;匹配则检查新密码是否为空,为空则给出提示;不为空则修改表中数据,密码修改成功。
4.2活动图
登陆活动图:
图6登陆活动图
登陆首先输入用户名和密码,然后程序到数据库中查询用户名是否存在,密码是否正确,如果正确则登陆成功;不正确登陆失败,可以继续登陆或关闭登陆窗口。
添加用户活动图:
图7添加用户活动图
管理员输用户名、密码和确认密码。
如果数据库对应表中有所输入的用户名则给出提示;没有则比较两次输入密码是否相同,相同条件成功;不同则给出相应提示。
删除用户活动图:
图8删除用户活动图
管理员输入用户名和密码。
如果数据库中不存在所输入的用户名则给出相应提示;存在则检查密码是否匹配,匹配则删除成功;不匹配则删除失败。
修改密码活动图:
图9修改密码活动图
用户输入用户名、旧密码(非管理员输入)、新密码。
程序检查数据库中所输入用户名是否存在,不存在则给出提示;存在则检查旧密码(非管理员)是否匹配,不匹配则给出提示;匹配则检查新密码是否为空,为空则给出提示;不为空则修改表中数据,密码修改成功。
4.3类图
图10登陆及用户管理模块类图
本系统有五个类,分别是Login、UserManagement、AddUser、DeleteUser和ModifyPassword,其中AddUser、DeleteUser、ModifyPassword是UserManagement的泛化。
4.4部署图
图11登陆及用户管理模块部署图
系统通过应用服务器与数据库连接,可分为四个模块,都可以单独编译执行。
四个模块的所有动作都需要连接到数据库并查询。
4.5构件图
图12登陆及用户管理模块构件图
本人将此系统分成了四个模块,分别是登录、添加用户、删除用户和修改密码。
在这四个子系统中,程序都是独立编写,每个程序之间通过对类的调用实现的联系。
4.6数据库表
表6教师信息表
字段名称
中文含义
字段类型
长度
是否为空
备注
Username
教师用户名
Char
20
否
主键
Password
教师密码
Char
20
否
表7学生信息表
字段名称
中文含义
字段类型
长度
是否为空
备注
Username
学生用户名
Char
20
否
主键
Password
教师密码
Char
20
否
表8管理员信息表
字段名称
中文含义
字段类型
长度
是否为空
备注
Username
管理员用户名
Char
20
否
主键
Password
管理员密码
Char
20
否
5.系统实现
5.1开发工具及系统运行环境
开发工具:
Java运行平台(JDK1.6.0_17)、MyEclipse、MicrosoftOfficeAccess2003。
运行环境:
装有Java运行平台的任何PC机。
5.2登陆及用户管理子系统实现
登陆模块伪代码如下:
Username=textfield.getText();
Password=textfield2.getText();
if(signA==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMguanliyuan");
while(rs.next())
{
getUsername=rs.getString
(1);
getPassword=rs.getString
(2);
if(getUsername.equals(Username)&&getPassword.equals(Password))
{
this.dispose();
ClassroomSchedulerFramewin=newClassroomSchedulerFrame("大学自动排课系统");
sign1=true;
break;
}
}
if(sign1==false)
{
JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新输入","信息提示",JOptionPane.WARNING_MESSAGE);
textfield2.setText(null);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
}
elseif(signT==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMteacher");
while(rs.next())
{
getUsername=rs.getString
(1);
getPassword=rs.getString
(2);
if(getUsername.equals(Username)&&getPassword.equals(Password))
{
this.dispose();
ClassroomSchedulerFramewin=newClassroomSchedulerFrame("大学自动排课系统");
sign2=true;
break;
}
}
if(sign2==false)
{
JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新输入","信息提示",JOptionPane.WARNING_MESSAGE);
textfield2.setText(null);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
}
elseif(signS==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMstudent");
while(rs.next())
{
getUsername=rs.getString
(1);
getPassword=rs.getString
(2);
if(getUsername.equals(Username)&&getPassword.equals(Password))
{
this.dispose();
ClassroomSchedulerFramewin=newClassroomSchedulerFrame("大学自动排课系统");
sign3=true;
break;
}
}
if(sign3==false)
{
JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新输入","信息提示",JOptionPane.WARNING_MESSAGE);
textfield2.setText(null);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
}
登陆模块窗口图如下:
图13登陆窗口图
登陆界面是运行排课程序或查课的入口,只有成功登陆才能做相应的一些操作。
当选择管理员、教师、学生不同身份登陆者的时候程序会到相应的表中查找用户名和密码,如果存在对应用户并且密码正确则登陆成功,进入系统;如果用户名或密码不正确则登陆失败并给出相应的错误提示。
添加用户的伪代码如下:
Username=textfield.getText();
Newpassword=textfield1.getText();
Newpassword2=textfield2.getText();
if(signA==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMguanliyuan");
sql=con.createStatement();
while(rs.next())
{
getUsername=rs.getString
(1);
if(getUsername.equals(Username))
{
JOptionPane.showMessageDialog(this,"用户名已存在!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
break;
}
}
if(Newpassword.equals(Newpassword2)&&sign==false)
{
if(Username.equals("")&&Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名和密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Username.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
else
{
sql.executeUpdate("INSERTINTOguanliyuanVALUES('"+Username+"','"+Newpassword+"')");
this.dispose();
JOptionPane.showMessageDialog(this,"添加成功!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
}
}
elseif(sign==false)
{
JOptionPane.showMessageDialog(this,"两次输入密码不同!
请重新输入!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
sign=false;
}
if(signT==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMteacher");
sql=con.createStatement();
while(rs.next())
{
getUsername=rs.getString
(1);
if(getUsername.equals(Username))
{
JOptionPane.showMessageDialog(this,"用户名已存在!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
break;
}
}
if(Newpassword.equals(Newpassword2)&&sign==false)
{
if(Username.equals("")&&Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名和密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Username.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
else
{
sql.executeUpdate("INSERTINTOteacherVALUES('"+Username+"','"+Newpassword+"')");
this.dispose();
JOptionPane.showMessageDialog(this,"添加成功!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
}
}
elseif(sign==false)
{
JOptionPane.showMessageDialog(this,"两次输入密码不同!
请重新输入!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
sign=false;
}
if(signS==true)
{
try
{
rs=sql.executeQuery("SELECT*FROMstudent");
sql=con.createStatement();
while(rs.next())
{
getUsername=rs.getString
(1);
if(getUsername.equals(Username))
{
JOptionPane.showMessageDialog(this,"用户名已存在!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
break;
}
}
if(Newpassword.equals(Newpassword2)&&sign==false)
{
if(Username.equals("")&&Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名和密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Username.equals(""))
{
JOptionPane.showMessageDialog(this,"用户名不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
elseif(Newpassword.equals(""))
{
JOptionPane.showMessageDialog(this,"密码不能为空!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
else
{
sql.executeUpdate("INSERTINTOstudentVALUES('"+Username+"','"+Newpassword+"')");
this.dispose();
JOptionPane.showMessageDialog(this,"添加成功!
","信息提示",JOptionPane.WARNING_MESSAGE);
sign=true;
}
}
elseif(sign==false)
{
JOptionPane.showMessageDialog(this,"两次输入密码不同!
请重新输入!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
}
catch(SQLExceptionee)
{
System.out.println(""+ee);
}
}
sign=false;
}
}
elseif(signC==false)
{
JOptionPane.showMessageDialog(this,"请选择要添加用户的身份!
","信息提示",JOptionPane.WARNING_MESSAGE);
}
添加用户模块窗口图如下:
图14添加用户窗口图
添加用户模块可以向数据库中对应的表中添加新的用户。
当选择添加不同身份的用户的时候程序会到相应的表中查找所添加的用户是否存在,如果存在则给出对应提示;如果不存在则检查两次输入的密码是否相同,如果相同则添加成功,不同则给出错误提示。
删除用户模块伪代码如下:
Username=textfield.getText();
Password=textfield1.getText();
try
{
rs=sql.executeQuery("SELECT*FROMguanliyuan");
sql=con.createStatement();
while(rs.next())
{
getUsername=rs.getString
(1);
getPassword=rs.getString
(2);
if(getUsername.equals(Username)&&getPassword.equals(Password))
{
sql.executeUpdate("DELETEFROMguanliyuanWHEREname='"+Username+"'");
this.dispose();
JOption