软件工程课程设计报告
( 2007 -- 2008 年度第 二 学期)
课程名称: 软件工程课程设计 题 目: 学生选课系统 院 系: 计算机科学与技术系 班 级: 计算0503 组 号: 2 组 长: 李英龙 组 员: 潘贵生 刘罡 吴志洁 指导教师: *** 设计周数: 两周
小组成绩:
日期:2008 年 7月 4日
《软件工程》课程设计
任 务 书
一、 目的、要求
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
具体如下:
1. 学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编
码和测试方面的知识;
2. 熟悉自动化的软件开发工具Rational Rose 2003,并将其运用于软件开发的全过程; 3. 进一步加强和提高软件工程文档的编写能力; 4. 培养协作能力和团队精神。
二、 主要内容
1. 课题题目:学生选课系统,本系统要实现学生选课的基本功能,包括学生退选课,查看自己的
选课信息;教师查看选课学生的信息,提交成绩;管理员添加学生、管理学生、管理成绩、添加教师、管理教师和管理课程等。
2. 运用面向对象技术、UML及可视化的建模工具完成系统的需求分析与设计。
3. 使用Rational Rose作为需求分析与设计的建模工具,包括静态建模和动态建模,并利用对象
模型自动生成数据模型,自动建立数据库。
4. 采用分层模式的应用设计模式进行系统的设计实现。
5. 系统要实现四个模块功能:教师模块、学生模块、管理员模块和公用模块。 6. 初步建立系统原型,实现关键的功能,并对系统进行测试。 7. 编写课程设计报告。
三、任务分配
任务 负责人 参与人 备注 需求分析 总体设计 详细设计 系统实现与测试 潘贵生 刘罡 吴志浩 李英龙 李英龙 刘罡 吴志浩 李英龙 潘贵生 吴志浩 李英龙 刘罡 潘贵生 潘贵生 刘罡 吴志浩 四、 进度计划
序号 设计内容名称 分组及确定题目 初步的需求分析与设计建模 详细的需求分析与设计建模 关键模块的实现与测试 编写课程设计报告 验收检查及评定成绩 完成时间 2008.6.23 2008.6.23~6.25 2008.6.26~6.27 2008.6.30~7.2 2008.7.2~7.3 2008.7.4 备注 1 2 3 4 5 6
五、 设计成果要求
1. 建立系统分析与设计模型;
2. 初步建立系统原型,实现关键的功能; 3. 编写课程设计报告。
六、 考核方式
1. 模型及代码检查
占50%。 2. 设计报告
占50%。
指导教师: 马素霞
日 期: 2008 年 6 月 23 日
《软件工程》课程设计
成 绩 评定
一、 指导教师评语
二、 成绩
学号 姓名 成绩 备注 1051220308 李英龙 1051220316 潘贵生 1051220311 刘罡 1051220321 吴志浩
指导教师:
日 期: 年 月 日
软件工程课程设计报告
摘要:
本系统实现学生选课的基本功能,包括学生退选课,查看自己的选课信息;教师查看选课学生的信息,提交成绩;管理员添加学生、管理学生、管理成绩、添加教师、管理教师和管理课程等。系统利用.Net平台技术进行开发,实现学生选课的动态管理,使得对信息的管理更加及时、高效,提高了效率。同时还对系统的开发原理、功能特点和设计方案进行了介绍。 关键词:学生选课 数据库 管理 ASP.NET
一、课程设计的目的与要求
通过软件开发的实践训练,进一步掌握软件工程的方法和技术,提高软件开发的实际能力,培养工程设计能力和综合分析、解决问题的能力。
具体如下:
1. 学习和实践在分析和设计计算机应用系统所需要的知识,包括面向对象的系统分析与设计,编
码和测试方面的知识;
2. 熟悉自动化的软件开发工具Rational Rose 2003,并将其运用于软件开发的全过程; 3. 进一步加强和提高软件工程文档的编写能力; 4. 培养协作能力和团队精神。
二、设计正文
1. 概述
1.1课题题目:学生选课系统 1.2系统的主要目标:
本系统目标是实现选课系统所需的各种基本功能,包括学生选课、退课功能和教师查看选修课程、提交课程成绩功能以及管理员添加学生、维护学生信息、成绩管理、添加教师、维护教师信息、维护选修课程,还有公用的修改密码等功能。 1.3 系统的开发环境及运行环境:
操作系统: Windows XP Pro SP2 建模工具: Rational Rose 2003 数据库系统:SQL Server2000 开发工具: Visual Studio 2005 Web服务器:IIS+ASP.NET 2.0平台
2. 系统需求分析
学生选课系统主要满足来自三方面的需求,这三个方面分别是学生用户、教师用户和管理员用户,也即是三类用户角色。
(1)学生用户是主要的需求者,主要需求功能是查询可选课程、查看自己选课情况及进行选课、退课操作等;
(2)教师用户主要需求功能是查看自己所教授的课程、课程有哪些学生选修、以及利用本系统提交学生的成绩;
(3)管理员用户的功能需求较为复杂,包括对学生信息、教师信息、课程信息进行管理。在学生信息管理子模块中,实现对学生信息的添加、修改、删除操作,还可以输入查询条件进行查询操作。在教师管理子模块中,实现对教师信息的添加、修改、删除、查询等操作。在课程管理子模块中,实
1
软件工程课程设计报告
现对课程信息的添加,添加时为其分配任课教师、上课时间和地点,实现对课程的修改、删除、查看某个课程的详细信息等。
本系统将管理员用户、教师用户、学生用户的身份及权限进行严格的划分,让管理员拥有最高权限,可以查看、维护系统中的所有信息,如添加学生,添加课程,修改课程信息等;让教师拥有查看自己开设的课程的信息,以及提交所开设课程成绩的权限;让学生拥有选课和退选的权限;而修改密码模块的权限每个用户都可拥有,用以修改自己的密码信息。通过进行严格的权限划分,可以更好地进行管理,也可更好地保护用户信息安全。
2.1 用例图 < 修改教师信息删除教师删除课程 用例图说明: (1)系统的外部角色有:学生用户、教师用户和管理员。 (2)系统主要用例的文档描述: ①学生管理用例:学生用户可见的功能,包含了选课、退课和查看选课三个用例功能。 ②教师管理用例:教师用户可见的功能,包含了查看学生选课和提交成绩两个用例功能。 ③信息管理用例:管理员可见的功能,这个用例进一步分为三个用例:学生信息管理用例、教师信息管理用例和课程信息管理用例。 2 软件工程课程设计报告 ④学生信息管理用例:信息管理用例可见的功能,实现学生信息的管理功能,包含了添加学生、修改学生信息和删除学生三个用例。 ⑤教师信息管理用例:信息管理用例可见的功能,实现教师信息的管理功能,包含了添加教师、修改教师信息和删除教师三个用例。 ⑥课程信息管理用例:信息管理用例可见的功能,实现课程信息的管理功能,包含了添加课程、修改课程信息和删除课程三个用例。 ⑦修改密码用例:所有用户都可见的功能,用于修改用户的密码信息。 (3)系统用例之间的关系: ①学生管理用例与选课、查看选课、退课三用例之间是包含关系。 ②教师管理用例与查看学生选课、提交成绩两用例之间是包含关系。 ③信息管理用例与学生信息管理用例、教师信息管理用例和课程信息管理用例之间是包含关系。 ④学生信息管理用例与添加学生、修改学生信息和删除学生三个用例之间是包含关系。 ⑤教师信息管理用例与添加教师、修改教师信息和删除教师三个用例之间是包含关系。 ⑥课程信息管理用例与添加课程、修改课程信息和删除课程三个用例之间是包含关系。 (4)系统关键用例的正常事件流图和异常事件流图 表2-1 修改密码用例的正常事件流图和异常事件流图 用例名称 参与者 描述 启动 前置条件 管理员、教师、学生 管理员、教师、学生用户进行密码修改 单击“修改密码”链接 用户成功登录 主事件流 用户 1.进入用户修改密码界面,输入旧密码一次 ,新密码两次 2.系统检查密码格式是否相符 3.系统检查旧密码是否正确 4.如果正确,进行密码修改,转入密码修改成功界面 异常流 异常流 系统 密码检查未通过 返回密码修改界面,提示旧密码不正确,新密码格式不符,两次不同等密码 异常 3 用户旧密码错误 系统 修改密码 软件工程课程设计报告 表2-2 提交成绩用例的正常事件流图和异常事件流图 用例名称 参与者 描述 启动 前置条件 后置条件 教师用户 提交选自己开设课程的学生的成绩 进入提交成绩界面 用户成功登录 尚未提交过成绩 主事件流 用户 1.单击提交成绩 系统 提交成绩用例 2.系统提交成绩页面 3.填写学生成绩,单击提交成绩 5.更新学生成绩,提示提交成功 异常流 异常流 系统 用户已经提交过该门课程成绩 提示该课程成绩已提交,不能再次提交 2.2 类图 图2-2 学生选课系统类图 4 软件工程课程设计报告 类图说明: (1)BaseUser类是一个系统角色用户的基类,主要方法有两个: modifyPWD() 用于修改用户的密码; loginCheck() 用于用户登录验证。 (2)Admin类继承自BaseUser类。 (3)Student类继承自BaseUser类,主要方法有: studentAdd() 用于添加学生; studentDel() 用于删除学生; studentUpdate() 用于更新学生信息; getStudents() 用于获取学生列表。 (4)Teacher类继承自BaseUser类,主要方法有: teacherAdd() 用于添加教师; teacherDel() 用于删除教师; teacherUpdate() 用于更新教师信息; getTeachers() 用于获取教师列表。 (5)Course类是一个课程类,主要方法有: courseAdd() 用于添加课程; courseDel() 用于删除课程; courseUpdate() 用于修改课程信息; getCourses() 用于获取课程列表。 (6)Elect类是一个选课表类,主要方法有: elect() 选修课程; electDel() 退选课程; getElectInfo() 获取选课信息; haveSubmit() 检测是否已提交过成绩; submitScore() 提交成绩。 2.3 顺序图 (1) 管理员修改课程信息顺序图 图2-3 管理员修改课程信息顺序图 5 : BaseUser : 管理员1: 登录2: 验证登录3: 进入管理员界面4: 点击“修改课程” : Admin : Course5: 修改课程信息6: 提示修改成功 软件工程课程设计报告 (2) 学生用户退选课的顺序图 图2-4 学生用户退选课的顺序图 6: 提示退课成功4: 点击“退课”5: 退选课程3: 进入学生界面1: 登录2: 登录验证 : 学生用户 : BaseUser : Student : Elect (3) 教师提交成绩顺序图 图2-5 教师提交成绩顺序图 8: 提示提交成功7: 提交成绩6: 验证是否已提交成绩 : 教师用户1: 登录 : BaseUser : Teacher : Elect2: 验证登录3: 进入老师界面4: 点击“提交成绩”5: 准备提交成绩 6 软件工程课程设计报告 2.4 协作图(可选) (1) 学生用户选课协作图 图2-6 学生用户选课协作图 : Student3: 点击选课6: 提示选课成功4: 提交选课信息验证是否课程时间冲突5: 选课成功 : Elect : 学生用户1: 输入账户、密码验证用户身份2: 登录成功 : BaseUser (2) 教师提交成绩协作图 : 教师用户1: 输入用户名、密码 图2-7 教师提交成绩协作图 : Teacher3: 点击提交成绩6: 提示提交成功4: 准备提交成绩验证是否已提交5: 提交成功 : Elect2: 登录成功验证用户身份 : BaseUser 7 软件工程课程设计报告 3. 系统总体设计 3.1 设计问题域子系统 学生选课系统是实现学生选课退课、教师提交成绩以及学校教务管理员维护信息的一个平台,整个学生选课系统有前台和后台两部分,共分为4个模块:管理员模块,教师模块,学生模块和公有模块,分别用于完成各自的功能。以下为学生选课系统总体设计图和各功能模块说明: (1)总体设计图 (2)各模块功能 表3-1 学生选课系统功能模块表 功能模块 包含子功能模块 学生管理子模块 功能 对学生信息的添加、修改,删除操作 图3-1学生选课系统总体设计图 学生登录模块 教师登录模块 管理员登录模块 学生处理模块 教师处理模块 管理员处理模块 公共模块 前台模块 后台模块 学生选课系统 教师管理子模块 管理员模块 对教师的添加,修改,删除,查询操作 对课程的添加,添加时为其分配任课教师,上课程管理子模块 课时间和地点,实现对课程的修改,删除,查看某个课程的详细信息等 教师模块 实现查看自己所教授的课程,课程有哪些学生选修,以及利用本系统提交学生的成绩 实现学生选课,查看所选课程,修改自己的选课信息 实现用户的身份验证,密码修改,退出系统等功能 学生模块 公有模块 8 软件工程课程设计报告 3.2 设计数据管理子系统 (1)数据库表 表3-2 数据库表 序号 1 2 3 4 5 6 Student Teacher Users Elect Cource Depart 数据库表 存储学生的信息 存储教师的信息 存储管理员的信息 存储选课的信息 存储课程的信息 存储学校系院信息 数据表存储的内容 (2)数据表之间的关系 图3-2 数据表之间的关系图 9 软件工程课程设计报告 (3)数据库表结构 ①学生表Student的详细数据字段: 表3-3 Student学生用户表 序号 1 2 3 4 5 6 字段名 stuID stuPwd stuName stuDepart stuGrade stuClass 字段类型 nvarchar(20)not null nvarchar(20)not nul nvarchar(20)not nul Int int int 学生学号 学生密码 学生姓名 学生系院号 学生年级 学生班级 说明 备注 关键字 ②教师表Teacher的详细数据字段: 表3-4 Teacher教师用户表 序号 1 2 3 4 字段名 teaID teaPwd teaName teaDepart 字段类型 nvarchar(20)not null nvarchar(20)not null nvarchar(100)not null Int(4) 说明 教师编号 教师密码 教师姓名 教师系院号 备注 关键字 ③课程表Course的详细数据字段: 表3-5 Cource课程信息表 序号 1 2 3 4 5 6 字段名 courseID teaID courseName courseTime courseAddress courseInfo 字段类型 nvarchar(20)not null nvarchar(20)not null nvarchar(100) not null nvarchar(20) nvarchar(50) Text 说明 课程编号 教师编号 课程名称 上课时间 上课地点 课程简介 备注 关键字 关键字 10 软件工程课程设计报告 ④选课表Elect的详细数据字段: 表3-6 Elect选课信息表 序号 1 2 3 4 字段名 stuID courseID teaID Score 字段类型 nvarchar(20)not null nvarchar(20)not null nvarchar(20)not null int 说明 学生学号 课程编号 教师编号 课程成绩 备注 关键字 关键字 关键字 ⑤系统管理员表Users的详细数据字段: 表3-7 Users管理员表 序号 1 2 字段名 adminName adminPwd 字段类型 nvarchar(20)not null nvarchar(20) 说明 系统管理员用户名 系统管理员密码 备注 关键字 ⑥系院表Depart的详细数据字段: 表3-8 Depart系院表 序号 1 2 字段名 departID departName 字段类型 Int not null nvarchar(100) 说明 系院号 系院名称 备注 关键字 3.3 设计人机交互子系统 (1)用户分类 本系统的用户可分为三类: ①管理员用户; ②教师用户; ③学生用户。 (2)用户描述 ①管理员用户的描述: 管理员用户在整个选课系统中起到管理和维护的作用,对学生和教师的信息进行管理和维护以及开设课设等职责。 ②教师用户的描述: 教师用户在本系统中具有管理选修了自己开设的课程的学生的权限,查看选修了自己开设课程的学生信息有及提交学生成绩。 ③学生用户的描述: 选课系统主要是针对管理学生的,学生在本系统中具有修改自己的信息,以及选课和退选的功能。 11 软件工程课程设计报告 (3)设计命令层次 ①系统的人机交互子系统的内容和准则: 本学生选课系统的人机交互子系统在根据不同的用户身份登陆到不同的页面,然后按照不同的用户只能进行用户权限内的操作,其结构图如下: ②通过采用树形结构,细化命令的组织方式,如下: 选课 学生用户 管理员用户 教师用户 主系统界面 图3-3 人机交互子系统结构图 学生用户界面 教师用户界面 管理员用户界面 主系统界面 查 看 选 课 添加学生 退课 学生管理 教师管理 课程管理 查看选课信息 提交成绩 修改学生信息 删除学生 添加教师 修改教师信息 删除信息 添加课程 修改课程信息 删除课程 图3-4 细化命令组织方式 12 软件工程课程设计报告 4. 详细设计 学生选课系统是实现学生网上选课、教师提交成绩以及学校教务管理员维护信息的一个平台,整个学生选课系统共分为4个大模块:管理员模块,教师模块,学生模块和公有模块,其中复杂的方法和模块的详细设计流程图如下。 4.1系统用户登录流程图 开始 输入用户名、密码 验证用户名、密码 否 验证正确 是 进入相应的用户页面 提示用户登录失败 选择相关管理操作 安全退出系统 结束 图4-1 系统用户登录流程图 13 软件工程课程设计报告 4.2 用户密码修改流程图 开始 输入用户旧密码、新密码 验证用户密码是否合法 否 是否合法? 是 修改用户密码 输入不合法,重新输入 提示修改成功 结束 图4-2 用户密码修改流程图 4.3教师提交成绩流程图 开始 点击成绩提交 检查是否已提交过 否 填写学生成绩 是 提示已提交,不能再提交 点击提交 否 确认提交? 是 提交成绩,并提示成功 结束 图4-3教师提交成绩流程图 14 软件工程课程设计报告 4.4管理员添加课程流程图 开始 转到添加课程 填写课程信息 点击添加 填写编号 提示重新填写编号 课程编号是否重复? 否 添加课程 提示添加成功 是 退出 图4-4 管理员添加课程流程图 4.5学生选修课程流程图 开始 点击选修 是 上课时间冲突 否 选修成功 提示时间冲突,不能选修 更新选、退课课表 是 继续选课? 否 结束 图4-5 学生选修课程流程图 15 软件工程课程设计报告 5. 系统实现 本系统采用了三层架构来实现,即分为用户界面层(UI)、业务逻辑层(BLL)和数据访问层(DAL),用户界面层是展示给用户的界面,方便用户与系统进行交互;业务逻辑层是对系统业务实体的封装,完成系统业务功能;数据访问层直接与数据库打交道,为业务逻辑层提供底层的数据库操作。 5.1 Database类主要是与数据库连接,提供数据库操作功能,代码如下: namespace MyElectCourse.DAL { public class Database { protected string connectionString; protected SqlConnection connection = null; public Database() { connectionString = ConfigurationManager.ConnectionStrings[\"ConnectionString\"].ConnectionString.ToString(); } ~Database() { if (connection != null) { connection = null; } } protected void Open() { if (connection == null) { connection = new SqlConnection(connectionString); } if (connection.State.Equals(ConnectionState.Closed)) { connection.Open(); } } protected void Close() { if (connection != null) { connection.Close(); } } 16 软件工程课程设计报告 public int ExecuteSQL(string sqlstr) { int count = -1; this.Open(); SqlCommand cmd = new SqlCommand(sqlstr, connection); count = cmd.ExecuteNonQuery(); this.Close(); return count; } public DataSet GetDataSet(string sqlstr) { this.Open(); DataSet ds = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(sqlstr,connection); adapter.Fill(ds); this.Close(); return ds; } public DataTable GetDataTable(string sqlstr) { DataSet ds = this.GetDataSet(sqlstr); DataTable dt = new DataTable(); if (ds.Tables.Count > 0) { dt = ds.Tables[0]; } return dt; } public SqlDataReader GetDataReader(string sqlstr) { this.Open(); SqlCommand cmd = new SqlCommand(sqlstr, connection); SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); //this.Close(); return sdr; } } } 5.2 UserBase类是所有系统角色用户的基类,完成用户登录验证与修改密码的功能,代码如下: namespace MyElectCourse.BLL { 17 软件工程课程设计报告 public class UserBase { private string userID; public string UserID { get { return userID; } set { userID = value; } } private string userPSW; public string UserPSW { get { return userPSW; } set { userPSW = value; } } public string loginCheck(string uid, string upwd, string urole) { String selectStr = String.Empty; switch (urole) { case \"0\": //身份为教师时 selectStr = \"Select * from Teacher where teaID = '\" + uid + \"'\"; break; case \"1\": //身份为学生时 selectStr = \"Select * from Student where stuID = '\" + uid + \"'\"; break; case \"2\": //身份为管理员时 selectStr = \"Select * from Users where adminName = '\" + uid + \"'\"; break; default: return null; } Database db = new Database(); DataTable dt = db.GetDataTable(selectStr); if (dt.Rows.Count > 0) //如果该用户存在 { if (dt.Rows[0][1].ToString().Equals(upwd)) //密码正确 { switch (urole) { case \"0\": //身份为教师时 return \"0\"; case \"1\": //身份为学生时 return \"1\"; 18 软件工程课程设计报告 case \"2\": //身份为管理员时 return \"2\"; default: return null; } } else //密码错误,给出提示信息! { return \"-1\"; } } else //用户不存在或用户名输入错误 { return \"-2\"; } } public string modifyPWD(String urole, String uid, String oldPwd, String newPwd) { String updateStr = String.Empty; switch (urole) { case \"0\": //身份为教师时 updateStr = \"update Teacher set teaPwd='\" + newPwd + \"' where teaID='\" + uid + \"'\"; break; case \"1\": //身份为学生时 updateStr = \"update Student set stuPwd='\" + newPwd + \"' where stuID='\" + uid + \"'\"; break; case \"2\": //身份为管理员时 updateStr = \"update Users set adminPwd='\" + newPwd + \"' where adminName='\" break; } string ucheck = this.loginCheck(uid, oldPwd, urole); if (ucheck.Equals(\"0\") || ucheck.Equals(\"1\") || ucheck.Equals(\"2\")) { int t = new Database().ExecuteSQL(updateStr); //根据修改后返回的结果给出提示 if (t > 0) { return \"1\"; } else { return \"0\"; } } else { 19 软件工程课程设计报告 return \"-1\"; } } }} 5.3 系统登录页面,代码及运行效果如下: