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