2 选题系统分析与开发
2.1对学生选题子系统的分析
毕业设计选题系统,由于是面向多种用户,其中包含教师、学生、课题查询与审批和系统维护等不同模块。每个不同的用户有着不同的权限, 其中学生选题模块通过学生学号和密码登录系统后可以实现在线浏览、查询和选择所发布的毕业设计课题。
2.1.1选题系统功能介绍
本子系统由学生功能模块组成[5]。学生功能:
l.学生可以在任何能够连接Internet的计算机登录到毕业设计选题系统中。
2.学生可以在选题功能模块中浏览到自己专业的题目并且选择其中一个题目,之后等待出题老师录取。
3.在老师没有录取之前学生能退掉自己已经选择的题目并且重新选择。
4.学生能修改自己的个人信息{密码),保护个人信息。
图2-1 学生选题子系统图
2.1.2选题系统用例描述
2.1.2.1 选择课题用例的描述
表2-2 选择课题用例
用例名称 |
选择课题 |
参与者 |
学生 |
前置条件 |
学生成功登陆到选题系统,进入到“选择课题”页面 |
后置条件 |
将选题信息写入数据库中 |
基本事件流 |
1、系统显示公布的课题名称及基本信息 2、学生在其中选择一个课题 |
2.1.2.2 个人信息修改用例的描述
表2-3 修改个人信息
用例名称 |
修改个人信息 |
参与者 |
学生 |
前置条件 |
学生成功登陆,进入修改个人信息页面 |
后置条件 |
将修改后的个人信息存入数据库中 |
基本事件流 |
1、学生重置个人密码 2、系统验证新的个人信息 3、修改后的个人信息已经成功写入数据库,用新密码重新登录 |
扩展事件流 |
A1:该课题的老师已经录取了该学生 1、系统提示已录取,提示学生不能退选 2、转入退选课题事件流第4步 |
2.2 选题系统应用工具
2.2.1 IIS简介
Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS是一种Web(网页)服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。
2.2.2 SQL SERVER 2005简介
本系统采用的是SQL SEVER2005数据库,SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。SQL Server 2005 为IT专家和信息工作者带来了强大的、熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建、部署、管理及使用企业数据和分析应用程序的复杂度[6]。
2.2.3 Visual Studio 2008 简介
Visual Studio .NET为开发人员提供了高度集成统一的可视化环境,从而大大简化了开发Web应用程序的过程。此外,共享HTML、XML和样式表单编辑器,还会使开发人员能很容易地用任何Visual Studio语言开发Web应用程序。Visual Studio .NET包含了大量的Web表单,借助于这些表单,开发人员使用原来用于构建基于表单的桌面应用程序的工具,就可创建跨平台、跨浏览器、可编程的Web应用程序。这些Web表单运行在Web服务器上,提供了快速的运行性能,同时建立了可运行在任何浏览器上的与HTML3.2兼容的文Windows表单是新版Visual Studio .NET一个新的共享工具,它使那些创建基于Windows应用程序的开发人员能够充分利用微软Windows操作系统丰富的用户接口特性。Windows表单是软.NET战略的一部分,它利用了很多新技术,包括公共应用程序框架、管理执行环境、集成的安全性和面向对象的设计原则[7] 。
2.2.4 ASP技术
ASP即活动服务器页面(Active Server Pages),它是一种运行于服务器端的脚本编写模型,它使开发者可以使用几乎所有的脚本语言编写脚本,这些脚本可以执行应用程序逻辑,并能够调用ActiveX组件执行特殊任务,如数据库查询、文件输入输出等。利用ASP,可以很容易地把HTML标签和文本,脚本命令以及ActiveX控件混合在一起实现动态网页,创建交互式的WEB站点,而不需要进行复杂的编程。自从Microsoft IIS 3. 0 (Internet information Server 3.0)出现以来,微软提出并一直致力于发展ASP技术[8]。至今,ASP技术得到了进一步的发展,在IIS4. 0以后版本中提供了ASP脚本调试工具、事务处理、新的ActiveX组件、RDS等新特性,用到了它的几个内置对象:
(1) Request:可用来读取浏览器的信息。
(2) Response:可用来传输信息到浏览器。
(3) Server:可提供服务器的相关信息,例如提供访问服务器的方法(methods)和属性(properties)的功能。
(4) Application:可用来记录不同网页的共用信息,例如变量和对象。
(5) Session:可用来记录连接者的消息,而每个连接者的消息将由独立的session对象来记录。
2.3 数据库的开发与设计
2.3.1 数据库的开发
随着Internet/Intranet技术的发展,开发基于Web的应用程序势在必行,数据库技术更是需要和Web相结合,才有更为广阔的前景。ASP作为微软推出的新兴Web应用程序开发技术,可广泛适应各种系统平台,具有较强的可移植性,能够方便灵活地实现Web数据库访问强大功能,ASP技术将在更广泛的领域发挥其优势[9]。
2.3.2 数据库设计
对于管理信息系统来讲,数据库是所有功能的核心。数据库的设计是数据生存周期中一个重要的阶段,其质量对数据库系统影响颇大,因此数据库的设计是管理信息系统开发中一个至关重要的环节[10]。
2.3.2.1 数据库设计原则
数据库设计以降低数据冗余,保证数据完整性及一致性和提高数据并发性能力为原则。主要做到以下几点:
(1)数据库各关系子模式符合第三范式(3NF),消除数据冗余;
(2)利用事务级操作,保证数据的一致性和完整性;
(3)通过触发器机制保证数据引用的完整性;
(4)各表之间通过外键相连,根据具体情况保留一定的冗余,以提高访问
速度。
2.3.2.2 数据库主要信息
学生选题系统中学生主要包括:学生学号信息、学生专业信息、学生联系方式信息等属性。老师主要包括:老师身份证号码信息、老师联系方式、老师权限等属性。课题主要包括:课题编号、课题名称、课题针对专业、出题老师信息等属性。通过专业编码分析学生学号可以直接得到该学生的专业信息及通过单位编码得到院系级信息,从而减少冗余信息。
2.3.2.3 数据表设计
本系统建立的stdInfo数据库由5个数据表组成,分别用于存放学生基本信息,老师基本信息,课题信息,专业编码信息和单位编码信息。下面是几个主要数据表的设计:
(1)stdInfo表(学生基本信息表)
该表共由6个字段组成,用于记录学生的学号、密码、姓名、性别、专业和联系方式等详细信息。其中各个字段的数据类型、字段名称等信息如表3.1所示。
表 3.1 stdInfo
字段名 类型 是否允许为空 说明 |
stdXh Varchar(10) 否 学生学号 stdMm char(6) 否 学生密码 stdXm Varchar(6) 否 学生姓名 stdXb char(1) 否 学生性别 ① stdZy Varchar(10) 否 学生专业 stdLxdh Varchar(11) 是 学生联系电话 |
①注:用“1”表示男生,用“0”表示女生。
(2) tcInfo表(老师基本信息表)
该表共由6个字段组成,用于记录老师的身份证号码、密码、姓名、单位、联系电话和老师权限详细信息。其中各个字段的数据类型、字段名称等信息如表3.1所示。
tcInfo
字段名 类型 是否允许为空 说明 |
tcSfzhm Varchar(18) 否 老师身份证号码 tcMm char(6) 否 老师密码 tcXm Varchar(6) 否 老师姓名 dw Varchar(6) 否 老师单位 tcLxdh Varchar(11) 否 老师联系电话 tcQx char(1) 是 老师权限① |
①注“:用“0”表示普通老师,可以出题;“1”表示有审批权限的老师;“2”表示领导,只能浏览。
(3) Subject表(毕业论文课题基本信息表)
该表共由9个字段组成,用于记录毕业论文课题的序号、题目名称、单位、针对学生专业等详细信息。其中各个字段的数据类型、字段名称等信息如表3.1所示。
Subject
字段名 类型 是否允许为空 说明 |
xh int 否 题目序号 subMc Varchar(15) 否 题目名称 pzzt int 否 批准状态① tcSfzhm Varchar(18) 否 老师身份证号码 dw Varchar(15) 是 老师单位 tjrq datetime 否 提交日期 sprq datetime 是 审批日期 stdZy Varchar(15) 是 学生专业 stdXh Varchar(10) 是 学号 |
① 注:用“0”表示未批准,“1”表示批准,“2”表示待批准。
(4) Profession表(专业字典信息表)
该表共由2个字段组成,通过专业编码分析学生的学号得到该学生的专业信息。其中各个字段的数据类型、字段名称等信息如表3.1所示。
Profession
字段名 类型 是否允许为空 说明 |
proBm Varchar(2) 否 专业编码① proMc Varchar(15) 否 专业名称
|
①注:用“21”表示信工专业,用“22”表示通信专业。
(4) Unit表(单位字典信息表)
该表共由2个字段组成,通过单位编码可以分析出老师属于院系级哪个部门。其中各个字段的数据类型、字段名称等信息如表3.1所示。
Unit
字段名 类型 是否允许为空 说明 |
unitBm Varchar(3) 否 单位编码① unitMc Varchar(15) 否 单位名称
|
①注:用“990”表示工程技术学院,“991”表示电气信息系。
3 选题系统的实现
3.1 系统开发环境
本系统采用如下环境开发:
● 操作系统:Windows XP SP2
● 开发工具:Microsoft Visual Studio 2008
● UML建模工具:Rational Rose
● 数据库设计工具:PowerDesigner 12
● 数据库环境:SQL Server 2005 Express
3.2 数据访问层实现
3.1.1 公共数据库访问类SqlHelper的实现
为项目添加公用数据库访问类的步骤如下[11]。
(1) 在Microsoft Visual Studio 2008 工作区右边的“解决方案资源管理器”窗口中的App_Code目录上单击鼠标右键,在弹出的快捷菜单中选择“添加新项”命令,里面列出了所有可以创建在App_Code中的文件类型,如图3-1所示。
(2) 在“添加新项”对话框的“模板”列表框中选择“类”,在“文件名”文本框中输入“SqlHelper.cs”,单击“确定”按钮,如图3-2所示。
图3-1 “添加新项”对话框
图3-2 添加SQL新助手
(3)在SqlHelper.cs文件中输入如下所示的代码,完成数据库访问助手类的开发:
using System.Data.Sql;
using System.Data.SqlClient;
///
///数据库服务助手类
///
public class sqlHelp
{
//获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["StudentConnectionString"].ConnectionString;
///
///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
/// 使用参数数组形式提供参数列表
///
///
/// 使用示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// 存储过程的名字或者 T-SQL 语句
/// 以数组形式提供SqlCommand命令中用到的参数列表
///
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(connectionString))
{
//通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
int val = cmd.ExecuteNonQuery();
//清空SqlCommand中的参数列表
cmd.Parameters.Clear();
return val;
}
}
///
/// 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。
/// 使用参数数组提供参数
///
///
/// 使用示例:
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// 存储过程的名字或者 T-SQL 语句
/// 以数组形式提供SqlCommand命令中用到的参数列表
///
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
SqlConnection conn = new SqlConnection(connectionString);
// 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在,
//CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。
//关闭数据库连接,并通过throw再次引发捕捉到的异常。
try
{
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return rdr;
}
catch
{
conn.Close();
throw;
}
}
///
/// 执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串。
/// 使用参数数组提供参数
///
///
/// 使用示例:
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// 存储过程的名字或者 T-SQL 语句
/// 以数组形式提供SqlCommand命令中用到的参数列表
///
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
using (SqlConnection connection = new SqlConnection(connectionString))
{
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
///
/// 为执行命令准备参数
///
/// SqlCommand 命令
/// 已经存在的数据库连接
/// 数据库事物处理
/// SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)
/// Command text,T-SQL语句 例如 Select * from Products
/// 返回带参数的命令
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
//判断数据库连接状态
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
//判断是否需要事物处理
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
3.3 登录界面
学生登录界面主要是为学生提供毕业论文课题浏览、查看个人信息、密码修改服务,根据需求分析,学生选题系统包含三个页面。
● Default.aspx:学生登录界面。本系统要求学生根据自己的学号和密码登录系统后才能看到自己的选题信息。
● showSource.aspx:课题信息页面。读取登录时系统保存的学号,根据学号查询出该学生的成绩信息,并显示在页面上。
● ModifyInfo.aspx:学生信息修改页面。学生用户可以修改自己的登录密码。
3.3.1 学生登录
学生选题属于学生的个人信息,因此系统要求学生必须根据学号和密码登录系统后才能查询,下面首先设计登录页面。
(1) 在Microsoft Visual Studio 2008工作区右边的“解决方案资源管理器”窗口中,双击Default.aspx,打开系统已生成的默认首页。从工具箱中插入一个Login控件到页面上,如图3-3所示,用于编写用户登录界面.
图3-3 选择课题查看页面
(2) 选中登录控件,打开属性面板,在面板中选中DestinationPageUrl属性,在属性面板在找到UserNameLabelText属性,把用户名输入框前面的提示文字改为“学号:”,如图3-4所示。
图3-4 修改用户名 图3-5 重新登录验证事件
(3) 在“属性面板”中单击“事件”选项卡,打开事件重载面板,在Authenticate事件说双击鼠标,重载登录验证事件,如图3-5所示,弹出代码编辑窗口,可以在这里添加程序实现用户登录验证功能,如图3-6所示。
图3-6 登录页面代码视图
(4) 在代码部分的最上面添加两条using语句,导入实现登录功能需要的数据库访问ADO.NET类的命名空间:
//引入ADO.NET命名空间
using System.Data.Sql;
using System.Data.SqlClient;
(5) 在Authenticate方法中加入如下代码,完成登录验证:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
//获得登陆控件的各个属性值
string stdXh = Login1.UserName;
string password = Login1.Password;
//生成SQL语句和参数对象
string sql = "select count(*) from stdInfo where stdXh=@stdXh and stdMm=@stdMm";
SqlParameter[] param ={
new SqlParameter("@stdXh",SqlDbType.Char),
new SqlParameter("@stdMm",SqlDbType.VarChar)
};
param[0].Value = stdXh;
param[1].Value = password;
//执行SQL语句
int usercount = ((int)(sqlHelp.ExecuteScalar(sqlHelp.ConnectionStringLocalTransaction,
CommandType.Text, sql, param)));
//判断登陆成功
if (usercount > 0)
{
e.Authenticated = true;
Session["stdXh"] = stdXh;
}
else
e.Authenticated = false;
}
其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者