软件工程课程设计说明书课表生成子系统.docx
《软件工程课程设计说明书课表生成子系统.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计说明书课表生成子系统.docx(13页珍藏版)》请在冰豆网上搜索。
![软件工程课程设计说明书课表生成子系统.docx](https://file1.bdocx.com/fileroot1/2023-1/8/33f2ae5a-5a4c-4a74-88c4-a69f9d113847/33f2ae5a-5a4c-4a74-88c4-a69f9d1138471.gif)
软件工程课程设计说明书课表生成子系统
XX大学
课程设计说明书
软件工程实训周
学生姓名:
学号:
学院:
专业:
软件工程
题目:
大学课表管理系统(课表生成子系统)
成绩
指导教师:
2012年月日
一.设计目的
制定一个学校的排课计划是一项非常耗时且相当辛苦的工作。
在一所高校一个课程表的制定是一个难题,因为在有关课程表的问题上有很多的限制条件得考虑,还有大量的数据空间被挖掘。
课程编排系统是一个学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以自动排课系统应该能够为用户提供充足的信息和快捷的查询手段。
按照软件工程基本原理,运用UML中所学的知识,设计开发一个大学排课系统。
通过对排课系统的分析、设计与实现,将原理与应用相结合,让自己学会如何把书本上学到的知识用于解决实际问题,培养自己的动手能力;另一方面,使自己能深入理解和灵活掌握教学内容。
二.设计内容和要求
设计内容:
1.教学秘书输入教师代课信息和班级上课信息,并进行自动排课
2.教师可以预先在网上提交对上课时间、地点的特殊要求,排课后可以查看自己所带课程信息
3.排课后学生可以看自己所上课程信息
4.教学秘书可以看本院全部课表信息
为了简化排课算法难度,本次课程设计中,作如下假定:
(1)排课中以班级为单位排,不考虑选修课;
(2)教室分为多媒体教室和非多媒体教室;
(3)假定只有周一到周五有课,一天只上四大节课,每大节两个学时;
(4)班级学生人数固定为50人,教室容量只考虑60、120、200人三种,相应合班上课只考虑2个和3个班上课的情况。
设计要求:
(1)采用UML完成需求分析、设计文档和测试文档;
(2)采用图形化界面;
(3)操作方便、界面友好。
三.需求分析
在整个系统中本人主要负责课表生成和修改密码功能的实现,同时也参加算法的设计与实现。
本系统要涉及到管理人员、教师、学生三个不同的参与者,有两个不同的权限。
管理员可以录入教师、教室、班级等基本的信息然后进行排课,而教师和学生只具有查询课表的权限。
所以在登录的时候要把不同的权限划分出来。
程序在设计好后数据库中有一个默认的管理员的用户名和密码,通过该用户名和密码可以登陆系统,然后通过用户管理模块可以添加教师、学生或管理员。
图1课表生成子系统用例图
表1课表生成用例描述
用例名称
自动排课
用例概述
根据课程时间、教师的基本信息、班级课程设置的信息、多媒体使用情况、座位数与上课班级人数协调情况合理的安排上课教室、时间及代课教师,使得资源充分利用而且不冲突
主要参与者
教学秘书、教师、学生
前置条件
教师、班级和教室信息全部添加完
后置条件
生成课表
基本事件流
(1)收集教师、班级、教室的信息
(2)根据多媒体的需求、教室座位数等优先为上课班级总人数多的班级安排上课教室和时间
(3)根据教师的基本信息和代课意向,优先考虑安排教师的代课要求
(4)为已安排教室和时间的课程的代课教师安排其他教学任务的教室和时间。
(5)合理调整教师每周授课的学时数
(6)重复以上操作,直到所有的课程安排完
图2课表查询子系统用例图
表2课表查询用例描述
用例名称
课表查询
用例概述
教师、学生、教学秘书根据自己的需求对课表进行不同类型的查询
主要参与者
教师、学生、教学秘书
基本事件流
(1)用户启动课表查询用例
(2)学生选择学生课表查询用例,查询学生课表
(3)教师选择教师课表查询用例,查询教师课表
(4)院管理员和校管理员根据需求选择不同课表查询用例,查询课表
四.系统设计
4.1开发工具
开发工具:
EclipsePHP、XAMPP。
4.2数据库结构
表3教师信息表
字段名称
中文含义
字段类型
长度
是否可为空
备注
id
教师工号
varchar
25
否
主键
name
教师姓名
varchar
25
否
username
登录帐号
varchar
25
否
password
登录密码
varchar
25
否
表4学生信息表
字段名称
中文含义
字段类型
长度
是否可为空
备注
id
学号
varchar
25
否
主键
name
学生姓名
varchar
25
否
password
登录密码
varchar
25
否
classid
班号
varchar
25
否
表5管理员信息表
字段名称
中文含义
字段类型
长度
是否可为空
备注
username
管理员用户名
varchar
25
否
主键
password
管理员密码
varchar
25
否
表6班级信息表
字段名称
中文含义
字段类型
长度
是否可为空
备注
id
班号
varchar
25
否
主键
name
班级名称
varchar
25
是
表7课程信息表
字段名称
中文含义
字段类型
长度
是否可为空
备注
id
课程id
int
11
否
主键、自增
teaname
任课教师
varchar
25
否
teaid
教师工号
int
11
否
class
班号
varchar
25
否
name
课程名称
varchar
25
否
room
上课教室
varchar
25
否
time
上课时间
varchar
25
否
remarks
备注
varchar
25
是
4.3程序界面及核心代码
图3添加课程信息界面
添加信息核心代码如下:
require_once("../config.php");
require_once("../function.php");
if(!
empty($_GET['action'])){
switch($_GET['action']){
case'addTeacher':
$id=$_POST['id'];
$name=$_POST['name'];
$sql="insertintoteachervalues('$id','$name','$id'
'$id')";
forward("$sql","addTeacher.html");
break;
case'addClass':
$id=$_POST['id'];
$name=$_POST['name'];
$sql="insertintoclassvalues('$id','$name')";
forward("$sql","addClass.html");
break;
case'addStudent':
$id=$_POST['id'];
$name=$_POST['name'];
$classid=$_POST['selclass'];
$pwd=$_POST['id'];
$sql="insertintostudentvalues('$id','$name','$pwd'
'$classid')";
forward("$sql","addStudent.php");break;
case'addCourse':
$selteacher=$_POST['selteacher'];
$sql="selectnamefromteacherwhereid=$selteacher";
$result=mysql_query($sql,$conn);
$array=mysql_fetch_array($result);
$tname=$array['name'];
$selclass=$_POST['selclass'];
$name=$_POST['courseName'];
$room=$_POST['courseRoom'];
$week=$_POST['selweek'];
$time=$_POST['seltime'];
$t=$week._.$time;
$remarks=$_POST['remarks'];
$sql="insertintocourse(teaid,teaname,class,name,room,time
remarks)values('$selteacher','$tname','$selclass'
'$name','$room','$t','$remarks')";
forward("$sql","addCourse.php");break;
case'addUser':
$newUser=$_POST['userName'];
$pwd1=$_POST['pwd1'];
$pwd2=$_POST['pwd2'];
if($_POST['pwd1']!
=$_POST['pwd2'])
{$message="两次密码输入不相同!
";
url_go($message,"addUser.html");
}else{
$sql="insertintoadmin(username,password)values('$newUser'
'$pwd1')";
forward("$sql","addUser.html");
}break;
default:
echo"";
break;
}
}else{
echo"出错了!
";
}
mysql_close($conn);
?
>
图4修改密码界面
修改密码核心代码如下:
php
session_start();
require_once("../config.php");
require_once("../function.php");
$oldPwd=$_POST['oldPwd'];
$newPwd=$_POST['newPwd'];
$cfmPwd=$_POST['cfmPwd'];
$id=$_SESSION['id'];
functionsetPwd($id,$oldPwd,$newPwd)
{$sql="SELECTidFROMadminWHEREpassword='$oldPwd'";
$result=mysql_query($sql);
if($resnum=(mysql_num_rows($result)==0))return2;
$sql="UPDATEadminSETpassword='$newPwd'WHEREid='$id'";
if(mysql_query($sql))
return1;
else
return0;
}
if($_POST['newPwd']!
=$_POST['cfmPwd'])
{
$message="两次密码输入不相同!
";
url_go($message,"setPwd.html");
}else{
$res=setPwd($id,$oldPwd,$newPwd);
switch($res){
case'0':
$message="密码修改失败,请重试.";
url_go($message,"setPwd.html");
break;
case'1':
$message="密码修改成功.";
url_go($message,"setPwd.html");
break;
case'2':
$message="原始密码错误.";
url_go($message,"setPwd.html");
break;
default:
echo"出错了!
";
}
}
mysql_close($conn);
?
>
五.系统测试
5.1测试方法
黑盒测试法
5.2测试用例及测试结果
测试用例:
添加新课程
(1)测试内容:
添加新课程信息
(2)测试数据:
教师:
张三老师
班级:
09210A01
课程名称:
大学英语
教室:
09303
时间:
周三第三大节
(3)预期结果:
在添加课程信息页面输入相应课程信息。
成功添加后,点击“管理课程”可以找到新添加的课程信息。
(4)测试结果:
当输入测试数据并提交。
图5添加课程信息
操作成功提示。
图6操作成功提示
添加成功后,点击“管理课表”可以看到新添加的课程信息。
图7查询课表
测试通过。
六.个人体会
在这次的课程设计中,让我学到了很多在课堂上和书本上学不到的知识,让我真真体验到了软件开发的乐趣。
首先,我领略到了数据库设计在计算机领域的重要性,数据库设计不是范式越高越好的,我们要根据我们的应用来决定,一切应该以需求为首要选择;其次,对编程环境、一些控件的使用和界面的美化方面也要懂,一个很好的界面呈现在用户面前,对用户是否满意起着很好的作用。
利用软件工程学开发系统。
虽然这个《课表管理系统》只是一个普通的课程设计,但从这个项目中也让我了解的软件开发的流程,在开发系统设计和实现中学到和总结了很多经验和教训。
我所做的这个系统功能不是很完善,但我相信以后的设计中我会再接再厉的。