内蒙古科技大学软件工程课程设计论文软件工程设计论文题 目:学生管理系统软件工程设计说明书指导教师:赵宇红小组成员:郝睿(组长) 1076807418李志宏 1076807421张琪 1076807424韩德慧 1076807426富佳 1076807428班 级:10 计 算 机 4 班目录第一章 问题分析 21.1软件性质 21.2规模和目标 3第二章 可行性研究 32.1分析可行性 32.1.1经济可行性 42.1.2技术可行性 42.2操作可行性 4第三章 需求规格说明书 43.1总体陈述 43.2系统功能 53.3运行需求 63.4系统具体分析 6第四章 项目开发计划 194.1系统分析 194.2项目成本 194.3进度安排 194.4任务分解及人员分工 194.5进度和完成期限 20第五章 总体设计说明书 215.1网上选课的具体流程 215.2网上书店的类图,构件图设计 225.3数据库的设计 23第六章 详细设计说明书 276.1 概要设计 276.2 展示 276.3 系统测试 32第七章 代码 33总结 46参考文献 49第一章 问题分析 1.1软件性质 当今时代是飞速发展的信息时代,在各行各业中离不开互联网。
浩瀚的资讯资源、方便快捷的通信方式以及强大的多媒体功能,使越来越多的人都已经感受到网际网路对社会发展的巨大推动力量,及其对传统观念的冲击正是由于网际网路的飞速发展,才使得基于网络的B/S架构的应用程序成为现在的主流而本书店正是基于B/S架构和面向对象分析的,实现网上购书功能的应用程序在此软件中需要庞大的数据库其目的用来存储本软件运行的各类信息等等,另外还离不开ASP.NET和前台技术,由此确定系统的具体的实现方案,确定软件结构及模块的组成和它们的联系其运行所需的环境是要求Win7、Win2000、WinXP等操作系统的支持下,同时要求ASP.NET、HTML、PWS等软件的支持 1.2规模和目标每年开学,都有大量的学生需要进行课程选修,这其中的首要关节就是课程的选择,以往指导都是采用人工手写方式给学生们提供相关的课程供学生选择,如果指导老师带的学生比较多,这样就容易造成学生的课程选择很混乱,指导教师难于统计学生的课程选择情况等一系列问题,基于这些传统问题,需要一个能够自动统计,实时分配课程的管理平台来帮助学生指导教师此系统的开发,主要的目的是使老师能更好地管理课程设计,也能使学生更好的把自己想要选的课程正确无误的选出来,使处在选课时期的学生有条不絮的进行。
第二章 可行性研究2.1分析可行性可行性分析(Feasibility Analysis)是在经过对系统进行调查研究后得出的,以此来说明系统开发的可能性和必要性这个环节是一个非常重要的环节,因为它决定了是否该进行项目的投资,有没有开发的必要性本次设计的学生选课,面对的是在校学生,而在校学生大部分寝室都装有宽带配有电脑,校园网络遍布在学校各个角落,所以任何学生都可以轻松的在网上选课,而目前网络拥有重多优势:网络全年无休,信息更新快速;网上选课方便,易于管理网上选课借助计算机科技的帮助,能够快速准确地查询,配合相关信息的索引,提供给学生们更便捷的选择综上所述,校园网上选课的开发是可行的2.1.1经济可行性网上选课主要以课程、代课教师、学生为主与传统选课相比,不用浪废纸张的财力物力网上选课可以大大降低成本,从经济角度是可行的2.1.2技术可行性技术可行性:jsp+mysql的技术已经成熟运行可行性:该系统需要搭建末myeslipse和tomcat服务器及mysql,在此环境下系统,并且正确连接数据库后可以正常运行2.2操作可行性对选课的管理、工作制度、人员素质等能否满足要求市场、法律、环境条件的可行性,项目完成所需的时间、预计时间是否足够第三章 需求规格说明书3.1总体陈述随着网络的普及,校园生活质量的提高。
传统选课的方式也逐渐被网上选课这一方便快捷的购书方式所取代从最初的传达室,到现在的课程展示、师生交流等等,传统选课到能够提供的服务网上选课电子化的高效运作网上选课冲破了时间限制、人力物力限制,减少了师生交流的困难在此次网上选课的系统设计中,我们的设计目标是提供一个方便安全的选课环境,符合目前校内盛行的电子信息模式用户可以在系统中实现注册,浏览,搜索,点击选课等功能,管理员也可以通过用户管理,选课管理等功能来进行维护更新3.2系统功能网上选课系统是一个复杂的电子信息系统,它必须提供学生的接口以供学生登录并选择喜好的学科;同时还必须提供系统的管理接口以供管理员和一般的网站工作人员处理学生选课并维护网站正常运作学生选课管理系统网主要是选题系统它提供了学生的基本信息的存储与管理,教师的基本信息管理,留言管理,主要为学院学生提供方便,提高学院的工作效率功能性需求分类:角色功能用例名称、标识符概述前台学生登陆学号用学生的学号登陆信息浏览浏览信息学生可以根据自己的需要浏览信息信息查询信息查询学生可以根据自己的需要对信息进行查询选课管理选课管理学生可以结合自己的喜好进行选课教师登陆教师信息使用教师编号进行登陆上报课程上报课程教师对课程进行上报课程查询课程查询对课程进行查询教师浏览信息浏览信息对课程信息进行浏览后台管理学生信息管理学生信息系统管理员对学生进行管理管理教师信息管理教师信息系统管理员对教师进行管理。
课程管理课程管理系统管理员对课程进行管理管理留言管理留言系统管理员对留言信息进行管理管理员添加管理员添加对管理员进行添加院系班级管理院系班级管理管理员对院系班级进行管理安全退出安全退出安全退出到主界面 3.3运行需求3.3.1用户界面人性化界面,要简洁大方,操作简便,一目了然,视图优美等特点并且采用菜单界面驱动方式,给操作用户带来了极大的便利,对用户友好3.3.2服务器软硬件需求 操作系统:Windows XP/windows 2003/windows7;数据库:MySql;开发工具:Myeclipse,MySql, DreamWeaver3.4系统具体分析 系统架构分析,首先业务逻辑层中间层的组件是用Myeslipse 组建的,在底层数据和应用用户之间起着“中间人”作用所有用户通过中间层发送请求数据(例如查看购物车东西),与数据库进行交互,同样,对请求的响应通过中间层反应给用户 web表示层的实现 客户可以登录系统进行选课,成功注册后,可以查看想选的课程,对所选的课程进行部分浏览 身份验证过程登陆界面的用户名和密码与后台数据库一致总之选课使用三层结构,具有更好的逻辑层次和可扩展性。
系统主要包括(1)选课系统 :选课系统为学生提供课程 ,消费则通过登录浏览、查询,对课程进行选修,后续功能由代课老师对课程打分(2)管理系统:管理学生,管理开设课程,教师管理第一步:需求架构(1) 需求结构化广义功能质量约束教师需求浏览学生上任课程易用性最便捷的选择方式学生需求浏览教师选修课程易用性最便捷的选择方式开发需求新组建的团队考虑建设网站发展路线图图3.4.2 需求结构化分析表(2)确定关键质量持续可用性不停机可互操作性学生与老师对课程操作可靠性数据库的安全易用性用户便捷的操作可测试性无可重用性无可维护性无可扩展性无可移植性操作平台(一般是windows)性能速度(图片多容易造成网页卡)图3.4.2 确定关键质量表(3)确定关键功能核心功能选课,浏览必要功能打分功能高风险功能最快的全库搜索独特功能无图3.4.3 确定关键功能表第二步:概念架构(1) 初步设计学生选课系统学生端用例图学号登陆信息查询浏览信息进行选修退出学生教师端用例图登录上报课表课程查询退出浏览信息教师登陆管理员用例图管理员管理后台管理教师管理学生管理留言管理管理员添加课程管理班级管理退出图1-1后台管理教师管理教师管理添加教师信息查询教师信息删除教师信息编辑教师信息图1-2教师管理学生管理学生管理添加信息查询信息修改删除信息图1-3学生管理管理员添加管理员添加添加管理员图1-4管理员添加班级管理班级管理添加信息修改删除信息图1-5院系班级管理课程管理课程管理添加管理信息编辑课程信息修改删除课程信息查询课程信息课程审核图1-6课题管理管理留言查看留言回复留言删除恶意留言留言管理图1-7管理留言用例图(2)建立系统动态模型(1) 时序图,状态图: 学生选课子系统时序图:学生选课子系统状态图:教师系统时序图:教师系统状态图: 管理员系统顺序图:管理员系统状态图:活动图:第四章 项目开发计划4.1系统分析学生浏览喜欢选修的课程,老师浏览能上任选修的课程,确认后系统自动生成选课表,然后记录,学生去上课,老师授课。
4.2项目成本维护网站及开发策划、网站页面制作、网站后台管理4.3进度安排需求分析1天概要设计2天详细设计4天编码5天测试1天验收1天项目启动时间2012年5月27日4.4任务分解及人员分工Dame姓名职务PostTask Division任务分工Date参与时间郝睿组长编写需求分析,画用例图,详细设计2012/5/27富佳组员ER图,流程图,数据库设计,总体设计2012/5/27张琪组员排版文档2012/6/18韩德慧组员后勤2012/5/27李志宏组员前台,界面设计2012/5/274.5进度和完成期限Date日期Revision Version修订版本CR ID /Defect IDCR/ Defect号Sec No.修改章节Change Description修改描述Author作者2012/5/27No.1完善er图完善总体图2012/5/27No.2改善流程图增加流程图2012/6/18No.3数据库添加表2012/6/19No.4需求分析增加用例图2012/6/19No.5文档完善文档排版 2012/6/19No.6总体设计完善总体设计第五章 总体设计说明书系统部署图:5.1网上选课的具体流程在选课系统上学生可以浏览和选修课程、教师通过管理员去上任选修课,信息浏览。
由管理员向学生进行课表的生成,向教师进行汇总统计及排课表前台的界面设计:<1> 显示给用户的界面jsp,html,photoshop 后台的逻辑处理:<1>用例控制层:对前台传递的数据进行初步的校验以及整理<2>业务逻辑层:所有的业务逻辑处理都在这一层中处理<3>数据访问层:对数据库的链接本系统采用三层架构,如图:图1 三层架构模型图5.2网上书店的类图,构件图设计构件图:类图:5.3数据库的设计根据系统功能需求,本系统由以下存储数据信息实体属性表组成:实体属性教师教师ID,教师姓名,登录密码课程课程号,课程名称,教师ID管理员管理员ID,登录密码班级班级号,班级名称,总人数学籍学号,姓名,性别,班级号,籍贯,登录密码成绩学号,课程号,成绩系统的总体E-R图如图所示教师ID课程号教师教师姓名课程名称课程登录密码教师ID学号课程号成绩姓名成绩学号管理员ID性别学籍管理员籍贯密码班级号班级籍贯密码总人数班级号班级名称总体表关系设计:图5.3.2数据库总体关系表教师信息表:字段名 类型空值约束条件教师ID varchar(8)not null主键教师姓名varchar(8)not null登录密码varchar(8)not null课程信息表:字段名 类型空值约束条件课程号 varchar(8)not null主键课程名称varchar(12)not null教师IDvarchar(8)not null外键班级信息表:字段名 类型空值约束条件班级号 varchar(8)not null主键班级名称varchar(8)not null所属学院varchar(6)班级人数nchar(4)管理员信息表:字段名 类型空值约束条件管理员ID varchar(10)not null主键登录密码varchar(10)not null成绩信息表:字段名 类型空值约束条件班级号 varchar(15)not null主键,外键班级名称varchar(8)not null主键,外键所属学院smallintnot null学籍信息表:字段名 类型空值约束条件学号int not null主键姓名varchar(30)not null性别char(2)班级号varchar(30)not null 外键籍贯char(10) 登录密码intnot null第六章 详细设计说明书6.1 概要设计 1、注册2、登陆3、浏览4、确定5、查询已选课程6、告知教师课程安排6.2 展示登录模块:各用户操作模块教师操作模块 学生操作模块:教师登录: 在登录界面选择“教师”按钮,并输入正确的ID号和密码,即可登录成功!输入错误则会弹出提示! ID号输入正确,登录成功!进入教师管理的操作界面: (1)修改密码 学生登录:输入正确的ID号和密码,即可正常登录!(1) 显示学生信息(2) 选定课程 (3) (3)查询课程 (4)修改密码修改密码后会更新学生学籍表里面的登录密码,下次就可以用新密码登录。
点击 后,就可以安全退出学生管理系统了!6.3 系统测试 测试的方法有两种,(1)黑盒测试(功能测试),(2)白盒测试(结构测试),本次测试采用黑盒测试测试步骤把整个系统作为个单独实体进行测试,测试过程可分模块、分阶段来进行测试模块举例,管理员模块、注册用户模块一:登陆测试(1):输入空账号(2):输入不存在的账号或密码(3):输入正确账号和密码(4):正确输入账号和空密码二:创建用户测试(1):创建已存在用户(2):创建每种用户类型的空密码账户(3):正常创建每种用户类型账号(非空密码)(4):创建每种用户类型的空账号且空密码账号(5):创建每种用户类型的账号且空密码账号三:更改用户测试(1):更改每种用户类型已存在的用户(2):更改每种用户类型一个不存在的用户(3):每种用户类型将一个非空密码的用户改为空密码(4):每种用户类型将一个空密码的用户改为空密码(5):每种用户类型将一个用户个该权限(6):每种用户类型将一个空账号密码的用户(7):每种用户类型将一个空账号但密码非空四:删除用户测试(1):删除一个不存在的用户(2):删除一个已存在的账户(3):删除一个空账户五:数据录入测试(1):录入一条空记录(2):录入一条以上数据项非空记录(3):录入一条以上只填必填数据项记录(4):录入一条以上只填非必填数据项记录(5):对具有外间关联的表录入一条以上检测外键约束的记录(6):录入一条以上正确的记录(7):录入一条以上检测其它自定义完整性约束的记录六:查询测试(1):正常查询一条以上记录(2):查询各种查非所查的记录(3):查询各种不对应选项的查询第七章 代码登陆界面与主功能界面:<%@ page language="java" pageEncoding="utf-8"%><%response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setDateHeader("expires",0); %>
用户登录
package inter;import ado.Dbc;import antity.Student;import antity.Teacher;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Vector;public class Userinter { private String type; private int i=0; public int getI() { return i; } public void setI(int i) { this.i = i; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Vector seclect(String ID,String password) throws SQLException { Vector v=new Vector(); Dbc db=new Dbc(); if(type.equals("student")){ String sql="select * from stu where ID= '"+ID+"' and password= '"+password+"'"; System.out.println("dkjgnkfdgnk"); db.setSql(sql); ResultSet rs=db.getRs(); String a = null; while(rs.next()) { a=rs.getString("name"); Student s=new Student(); s.setId(rs.getString("ID")); s.setYuanxi(rs.getString("yuanxi")); s.setZhuanye(rs.getString("zhuanye")); s.setBanji(rs.getString("banji")); s.setNianji(rs.getString("nianji")); s.setName(rs.getString("name")); v.add(s); } if(!a.equals("")){ i=1; }else{ i=0; } db.getRs().close(); db.getConn().close(); db.getStmt().close(); } if(type.equals("teacher")){ String sql="select * from teacher where tno= '"+ID+"' and password= '"+password+"'"; db.setSql(sql); ResultSet rs=db.getRs(); String a = null; while(rs.next()) { a=rs.getString("tname"); Teacher t=new Teacher(); t.setTdept(rs.getString("tdept")); t.setTname(rs.getString("tname")); t.setTno(rs.getString("tno")); v.add(t); } if(!a.equals("")){ i=1; }else{ i=0; } db.getRs().close(); db.getConn().close(); db.getStmt().close(); } if(type.equals("manager")){ } return v; }}package inter;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Vector;import ado.Dbc;import antity.Course;import antity.Student;import antity.Stugrade;public class Stufuntion { private int kexuan; public Vector selectstu(String sid) throws SQLException{ Dbc db=new Dbc(); String sql="select * from stu where ID= '"+sid+"'"; db.setSql(sql); ResultSet rs=db.getRs(); Vector vct=new Vector(); while(rs.next()){ Student stu=new Student(); stu.setId(rs.getString(1)); stu.setName(rs.getString(2)); stu.setAge(rs.getString(3)); stu.setSex(rs.getString(4)); stu.setMinzu(rs.getString(5)); stu.setAddress(rs.getString(6)); stu.setYuanxi(rs.getString(7)); stu.setNianji(rs.getString(8)); stu.setZhuanye(rs.getString(9)); stu.setBanji(rs.getString(10)); vct.add(stu); } db.getRs().close(); db.getConn().close(); db.getStmt().close(); return vct; } public void xuanke(String sno,String cno,String cxuhao) throws SQLException{ Dbc db=new Dbc(); String sql,ncno =null,kcno =null; sql="select distinct cno,cxuhao from courseinfo where cno='"+cno+"' and cxuhao='"+cxuhao+"'"; db.setSql(sql); ResultSet rs; rs=db.getRs(); while(rs.next()){ ncno=rs.getString("cno"); } if(ncno==null){ kexuan=4; return; } sql="select cno from selcourse where sno= '"+sno+"' and cno= '"+cno+"'"; db.setSql(sql); rs=db.getRs(); while(rs.next()){ kcno=rs.getString("cno"); System.out.println(kcno); } if(kcno!=null){ kexuan=2; return; } String rcsj[]=new String[100]; sql="select distinct cshijian from courseinfo where (cno,cxuhao) in ( select cno,cxuhao from selcourse where sno='"+sno+"')"; db.setSql(sql); rs=db.getRs(); int i=0; while(rs.next()){ rcsj[i]=rs.getString("cshijian"); i=i+1; } sql="select distinct cshijian from courseinfo where cno='"+cno+"' and cxuhao='"+cxuhao+"'"; db.setSql(sql); rs=db.getRs(); int j=0; String csj[]=new String[100]; while(rs.next()){ csj[j]=rs.getString("cshijian"); j=j+1; } for(int m=0;m