软件工程大型实验课程设计说明书-大学自动排课算法设计与实现系统——登陆及用户管理子系统.doc_第1页
软件工程大型实验课程设计说明书-大学自动排课算法设计与实现系统——登陆及用户管理子系统.doc_第2页
软件工程大型实验课程设计说明书-大学自动排课算法设计与实现系统——登陆及用户管理子系统.doc_第3页
软件工程大型实验课程设计说明书-大学自动排课算法设计与实现系统——登陆及用户管理子系统.doc_第4页
软件工程大型实验课程设计说明书-大学自动排课算法设计与实现系统——登陆及用户管理子系统.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中北大学课 程 设 计 说 明 书软件工程大型实验学生姓名:史东海学 号:0706054208学 院:电子与计算机科学技术学院专 业:软件工程题 目:大学自动排课算法设计与实现系统登陆及用户管理子系统成绩指导教师: 职称: 讲师 2010 年 1 月 21 日351.设计目的该系统并不是所有人都能随便使用的。系统应该有不同的权限用于排课和课表的查询,通过登陆可以解决权限问题。而用户是会经常变动的(比如毕业生的离校),所以需要对用户进行相应的管理(如添加、删除及密码的修改),所以需要实现用户管理功能。2.设计内容在整个系统中本人主要负责登陆和用户管理功能的实现,同时也参加算法的设计与实现。本系统要涉及到管理人员、教师、学生三个不同的参与者,有两个不同的权限。管理员可以录入教师、教室、班级等基本的信息然后进行排课,而教师和学生只具有查询课表的权限。所以在登录的时候要把不同的权限划分出来。程序在设计好后数据库中有一个默认的管理员的用户名和密码,通过该用户名和密码可以登陆系统,然后通过用户管理模块可以添加教师、学生或管理员。为了防止用户忘记密码,管理员可以在不知道原始密码的情况下修改用户的密码。而教师或学生若想修改自己的密码必须输入旧密码。3.需求描述图1 登陆及用户管理子系统用例图用例描述如下:表1 UserManagement用例描述表用例编号UC00用例名称UserManagement用例概述实现用户的添加、删除及密码修改主参与者管理员次要参与者教师、学生前置条件用户成功登陆后置条件显示出添加、修改用户及密码修改的子菜单基本事件流1.用户点击用户管理菜单项2.用户管理菜单项显示添加用户、删除用户、修改密码三个子菜单扩展事件流无表2 Login用例描述表用例编号UC01用例名称Login用例概述用户输入账号和密码登陆主参与者管理员、教师、学生次要参与者无前置条件用户打开应用程序后置条件登陆失败时显示登陆失败信息,成功时进入系统基本事件流1.用户输入用户信息2.用户合法则进入系统扩展事件流用户不合法时,则提示登陆失败消息表3 AddUser用例描述表用例编号UC000用例名称AddUser用例概述实现用户的添加主参与者管理员次要参与者无前置条件管理员成功登陆,并点击了添加用户菜单项后置条件弹出添加用户对话框,输入用户名及密码基本事件流1.管理员点击添加用户菜单项2.管理员输入用户名、密码并选择所添加用户的身份,点击确定扩展事件流1.若用户存在则提示“用户名已存在”2.若没有选择用户身份则提示“请选择用户身份”3.若用户不存在且两次输入密码不同则提示“两次输入密码不同”4.若用户名不存在且两次输入密码相同并选择了身份,则给出“添加成功”提示表4 DeleteUser用例描述表用例编号UC001用例名称DeleteUser用例概述实现用户的删除主参与者管理员次要参与者无前置条件管理员成功登陆,并点击了删除用户菜单项后置条件弹出删除用户对话框,输入用户名及密码基本事件流1.管理员点击删除用户菜单项2.管理员输入用户名及密码,点击确定扩展事件流1.若用户名或密码错误则给出相应的提示2.若用户名和密码正确则提示删除成功表5 ModifyPassword用例描述表用例编号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教师用户名Char20否主键Password教师密码Char20否表7 学生信息表字段名称中文含义字段类型长度是否为空备注Username学生用户名Char20否主键Password教师密码Char20否表8 管理员信息表字段名称中文含义字段类型长度是否为空备注Username管理员用户名Char20否主键Password管理员密码Char20否5.系统实现5.1开发工具及系统运行环境 开发工具:Java运行平台(JDK 1.6.0_17)、MyEclipse、Microsoft Office Access 2003。 运行环境:装有Java运行平台的任何PC机。5.2 登陆及用户管理子系统实现登陆模块伪代码如下: Username=textfield.getText(); Password=textfield2.getText(); if(signA=true) try rs=sql.executeQuery(SELECT * FROM guanliyuan); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) this.dispose(); ClassroomSchedulerFrame win=new ClassroomSchedulerFrame(大学自动排课系统); sign1=true; break; if(sign1=false) JOptionPane.showMessageDialog(this,用户名或密码错误,请重新输入,信息提示,JOptionPane.WARNING_MESSAGE); textfield2.setText(null); catch(SQLException ee) System.out.println(+ee); else if(signT=true) try rs=sql.executeQuery(SELECT * FROM teacher); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) this.dispose(); ClassroomSchedulerFrame win=new ClassroomSchedulerFrame(大学自动排课系统); sign2=true; break; if(sign2=false) JOptionPane.showMessageDialog(this,用户名或密码错误,请重新输入,信息提示,JOptionPane.WARNING_MESSAGE); textfield2.setText(null); catch(SQLException ee) System.out.println(+ee); else if(signS=true) try rs=sql.executeQuery(SELECT * FROM student); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) this.dispose(); ClassroomSchedulerFrame win=new ClassroomSchedulerFrame(大学自动排课系统); sign3=true; break; if(sign3=false) JOptionPane.showMessageDialog(this,用户名或密码错误,请重新输入,信息提示,JOptionPane.WARNING_MESSAGE); textfield2.setText(null); catch(SQLException ee) System.out.println(+ee); 登陆模块窗口图如下:图13 登陆窗口图 登陆界面是运行排课程序或查课的入口,只有成功登陆才能做相应的一些操作。当选择管理员、教师、学生不同身份登陆者的时候程序会到相应的表中查找用户名和密码,如果存在对应用户并且密码正确则登陆成功,进入系统;如果用户名或密码不正确则登陆失败并给出相应的错误提示。添加用户的伪代码如下:Username=textfield.getText(); Newpassword=textfield1.getText(); Newpassword2=textfield2.getText(); if(signA=true) try rs=sql.executeQuery(SELECT * FROM guanliyuan); 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); else if(Username.equals() JOptionPane.showMessageDialog(this,用户名不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else if(Newpassword.equals() JOptionPane.showMessageDialog(this,密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else sql.executeUpdate(INSERT INTO guanliyuan VALUES(+Username+,+Newpassword+); this.dispose(); JOptionPane.showMessageDialog(this,添加成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else if(sign=false) JOptionPane.showMessageDialog(this,两次输入密码不同!请重新输入!,信息提示,JOptionPane.WARNING_MESSAGE); catch(SQLException ee) System.out.println(+ee); sign=false; if(signT=true) try rs=sql.executeQuery(SELECT * FROM teacher); 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); else if(Username.equals() JOptionPane.showMessageDialog(this,用户名不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else if(Newpassword.equals() JOptionPane.showMessageDialog(this,密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else sql.executeUpdate(INSERT INTO teacher VALUES(+Username+,+Newpassword+); this.dispose(); JOptionPane.showMessageDialog(this,添加成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else if(sign=false) JOptionPane.showMessageDialog(this,两次输入密码不同!请重新输入!,信息提示,JOptionPane.WARNING_MESSAGE); catch(SQLException ee) System.out.println(+ee); sign=false; if(signS=true) try rs=sql.executeQuery(SELECT * FROM student); 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); else if(Username.equals() JOptionPane.showMessageDialog(this,用户名不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else if(Newpassword.equals() JOptionPane.showMessageDialog(this,密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); else sql.executeUpdate(INSERT INTO student VALUES(+Username+,+Newpassword+); this.dispose(); JOptionPane.showMessageDialog(this,添加成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else if(sign=false) JOptionPane.showMessageDialog(this,两次输入密码不同!请重新输入!,信息提示,JOptionPane.WARNING_MESSAGE); catch(SQLException ee) System.out.println(+ee); sign=false; else if(signC=false) JOptionPane.showMessageDialog(this,请选择要添加用户的身份!,信息提示,JOptionPane.WARNING_MESSAGE); 添加用户模块窗口图如下:图14 添加用户窗口图添加用户模块可以向数据库中对应的表中添加新的用户。当选择添加不同身份的用户的时候程序会到相应的表中查找所添加的用户是否存在,如果存在则给出对应提示;如果不存在则检查两次输入的密码是否相同,如果相同则添加成功,不同则给出错误提示。删除用户模块伪代码如下:Username=textfield.getText(); Password=textfield1.getText(); try rs=sql.executeQuery(SELECT * FROM guanliyuan); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) sql.executeUpdate(DELETE FROM guanliyuan WHERE name = +Username+ ); this.dispose(); JOptionPane.showMessageDialog(this,删除成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; catch(SQLException ee) System.out.println(+ee); try rs=sql.executeQuery(SELECT * FROM teacher); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) sql.executeUpdate(DELETE FROM teacher WHERE name = +Username+ ); this.dispose(); JOptionPane.showMessageDialog(this,删除成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; catch(SQLException ee) System.out.println(+ee); try rs=sql.executeQuery(SELECT * FROM student); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getPassword=rs.getString(2); if(getUsername.equals(Username)&getPassword.equals(Password) sql.executeUpdate(DELETE FROM student WHERE name = +Username+ ); this.dispose(); JOptionPane.showMessageDialog(this,删除成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; if(sign=false) JOptionPane.showMessageDialog(this,用户名或密码错误!,信息提示,JOptionPane.WARNING_MESSAGE); catch(SQLException ee) System.out.println(+ee); sign=false; 删除用户模块窗口图如下:图15 删除用户窗口图 删除用户模块可以从数据库对应表中删除用户。程序首先在三张表中查找是否存在所要删除的用户,如果不存在则给出提示;存在则检查所输入的密码是否为该用户密码,如果密码匹配则删除成功;不匹配则给出对应提示。修改密码模块伪代码如下:Username=textfield.getText(); if(Login.signA=false) Oldpassword=textfield1.getText(); Newpassword=textfield2.getText(); try rs=sql.executeQuery(SELECT * FROM guanliyuan); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getOldpassword=rs.getString(2); if(Login.signA=true) if(getUsername.equals(Username) if(Newpassword.equals() JOptionPane.showMessageDialog(this,新密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else sign=false; sql.executeUpdate(UPDATE guanliyuan SET password = +Newpassword+ WHERE name = +Username+); this.dispose(); JOptionPane.showMessageDialog(this,修改成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; catch(SQLException ee) System.out.println(+ee); try rs=sql.executeQuery(SELECT * FROM teacher); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getOldpassword=rs.getString(2); if(Login.signA=true) if(getUsername.equals(Username) if(Newpassword.equals() JOptionPane.showMessageDialog(this,新密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else sign=false; sql.executeUpdate(UPDATE teacher SET password = +Newpassword+ WHERE name = +Username+); this.dispose(); JOptionPane.showMessageDialog(this,修改成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; if(Login.signA=false) if(getUsername.equals(Username)&getOldpassword.equals(Oldpassword) if(Newpassword.equals() JOptionPane.showMessageDialog(this,新密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else sign=false; sql.executeUpdate(UPDATE teacher SET password = +Newpassword+ WHERE name = +Username+); this.dispose(); JOptionPane.showMessageDialog(this,修改成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; catch(SQLException ee) System.out.println(+ee); try rs=sql.executeQuery(SELECT * FROM student); sql=con.createStatement(); while(rs.next() getUsername=rs.getString(1); getOldpassword=rs.getString(2); if(Login.signA=true) if(getUsername.equals(Username) if(Newpassword.equals() JOptionPane.showMessageDialog(this,新密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else sign=false; sql.executeUpdate(UPDATE student SET password = +Newpassword+ WHERE name = +Username+); this.dispose(); JOptionPane.showMessageDialog(this,修改成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; if(Login.signA=false) if(getUsername.equals(Username)&getOldpassword.equals(Oldpassword) if(Newpassword.equals() JOptionPane.showMessageDialog(this,新密码不能为空!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; else sign=false; sql.executeUpdate(UPDATE student SET password = +Newpassword+ WHERE name = +Username+); this.dispose(); JOptionPane.showMessageDialog(this,修改成功!,信息提示,JOptionPane.WARNING_MESSAGE); sign=true; break; catch(SQLException ee) System.out.println(+ee); if(sign=false) JOptionPane.showMessageDialog(this,用户名或密码错误!,信息提示,JOptionPane.WARNING_MESSAGE); 管理员修改密码窗口图如下:图16 管理员修改密码窗口图 为了防止用户丢失或忘记自己的登录密码,管理员可以在不知道旧密码的情况下直接修改用户的密码。程序首先到表中查找该用户是否存在,如果不存在给出相应提示;存在则直接将新密码保存到数据库中替换原密码。教师和学生修改密码窗口图如下:图17 教师和学生修改密码窗口图 为保证安全,非管理员用户修改密码必须输入旧密码,否则无法修改密码。程序先到表中查找所所入用户是否存在,不存在则给出提示;存在则检查所输入的旧密码和表中数据是否匹配,不匹配则给出对应提示;存在则检查新密码是否为空,为空则给出提示;不为空则修改表中数据,给出密码修改成功提示。6系统测试6.1测试方法黑盒测试法6.2测试环境操作系统:Windows 7 Home Premium(32bit)内存:4GBCPU:Inter(R) Core(TM)2 Duo CPU P8700 2.53GHz 2.53GHz6.3测试用例及测试结果测试用例1:登陆(1) 测试内容:输入用户名、密码并选择身份,登陆系统(2) 测试数据:正常数据:user user 身份选择管理员 异常数据:user user 身份选择教师或学生 user user 不选择身份 user password 身份选择管理员(3) 预期结果:对于正常的数据成功登陆系统,异常的数据登陆失败并给出相应的错误提示。(4) 测试结果:当输入正常数据时登陆成功进入主界面,效果如下图所示:图18 主界面窗口图当没有选择身份时给出提示,效果如下图所示:图19 提示选择身份窗口图当用户名或密码错误时给出提示,效果如下图所示:图2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论