1、学生晚归与考勤管理信息系统开发 系统分析及设计 3.1 系统预期用户 本系统的预期用户是任何想了解学生在校的考勤情况的用户。 3.2 功能说明 学生晚归与考勤管理系统是目前广西机电职业技术校园网在线系统之一。本软件将各个学院各个部门联系到一起,便于学生晚归、考勤的管理,同时,还可以让学生通过查询自己的晚归与考勤记录,了解到自己的纪律情况。 在线图书销售系统要实现的功能模块主要有: 该系统分为晚归情况管理、考勤情况管理与后台管理三大功能模块。 系统功能模块的划分 图1 系统功能架构图 (2) 基本处理流程 下图是系统基本处理流程图。 图2 系统基本处理流程 3
2、3 数据库设计 本系统采用SQL Server2005作为后台数据库。根据以上功能,新建一名为Attendance的数据库,其中共包括9个数据表,分别是 部门表(department): 专业信息表(special): 班级信息表(class): 学生信息表(stuInfo): 区/门信息表(region): 晚归情况表(late): 考勤情况表(attendance): 考勤类型表(attendtype): 用户信息表(admin): 各个数据表的关系(主要是主键与外键的约束关系)如下图所示: 数据库创建脚
3、本参考文件:“学生晚归与考勤管理信息系统数据库建库脚步.sql”
3.4 数据库连接
1、建议将数据库拷入网站内的App_Data目录内,然后将数据库连接字符串写入到Web.config,参考代码如下:
4、ta; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; public partial class DBCon
5、nTest : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string constr = ConfigurationManager.AppSettings["ConnectionStr"]; SqlConnection conn = new SqlConnection(constr); conn.Open();//打开数据库连接 Response.Write("数据库连接成功!");
6、 conn.Close();//关闭数据库连接 Response.Write("数据库关闭成功!"); } } 经验证,Attendance.mdf数据库连接正常 2、将常用数据库操作代码写入公共类DB中,其中包含以下各自定义方法,参考代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.W
7、ebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
///
8、
{
}
///
9、
return new SqlConnection(strCon);//返回数据库连接对象
}
///
10、 public int sqlEx(string cmdStr) { SqlConnection con = getCon(); con.Open();//打开数据库连接 SqlCommand cmd = new SqlCommand(cmdStr,con);//创建执行SQL语句的命令对象SqlCommand try { cmd.ExecuteNonQuery(); return 1;//成功返回1 } c
11、atch
{
return 0;//失败返回0
}
finally
{
con.Dispose();//释放资源
}
}
/// 12、rns>
public DataTable reDt(string cmdStr) {
SqlConnection con = getCon();//连接数据库
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmdStr,con);//创建数据适配器对象
DataSet ds = new DataSet();//创建数据集对象
da.Fill(ds);//将保存在数据适配器对象中的数据填充到数据集对象中
13、return (ds.Tables[0]);//返回数据集对象中有记录的那个表
}
/// 14、 SqlConnection con = getCon();
con.Open();
SqlCommand cmd = new SqlCommand(str,con);
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//通过调用Command对象的ExecuteReader()方法创建DataReader对象,CommandBehavior.CloseConnection表示?
return dr;
}
}
功能 15、模块的实现
用户注册功能的实现:
实现逻辑:
用户注册信息写入到admin表,此注册功能是专门针对本校的学生开发注册的,如果不是本校的学生,是没有注册的权限的,所有注册时要根据学生输入的真实姓名和学号进行注册,如果找不到对应的学生的名字,就不允许用户进行注册,如果用户已经注册过一次了,就直接告诉用户已经注册过了,无需再次注册了,并自动为用户跳转到登录页面,如果用户是第一次注册,就把用户的注册信息写入到admin表中,注册成功后也跳转到登录页面让用户进行登录。
用户注册页面Register.aspx如下图所示:
学生进入此页面进行注册,正确填写了学生姓名和学生学号以及验证码了以 16、后,点击提交按钮完成帐户注册,而在后台,要进行数据的合法性判断,首先进行的是验证码的正确性判断,把用户输入的验证码和保存的Session对象中的验证码取出来作比较,如果验证码输入正确才继续执行检查该注册用户是否是本校的学生,以及该用户是否已经被注册了,后台的处理代码如下所示:
Register.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
usin 17、g System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class student_Register : System.Web.UI.Page
{
DB db = new DB();
protected void Page_Load(object sender, EventArg 18、s e)
{
this.ImageButton1.ImageUrl = "image.aspx";//image.aspx是一个显示验证码的Web页面
}
protected void btn_submit_Click(object sender, EventArgs e)
{
string code = txtCheckCode.Text.Trim();
if (code != (string)Session["image"])
{
Respon 19、se.Write("");
// Response.Redirect("Register.aspx");如果使用这种跳转方式,那么上面的javascript是无法运行的,因为还没有来得及运行就页面就已经跳转了
Response.Write("");
}
else {
string stu_N 20、ame = txtUserName.Text.Trim();
string stu_Id = txtstuID.Text.Trim();
string sql2 = "select stu_name from stuInfo where stu_name='"+stu_Name+"'";//使用这条SQL语句检查要注册的人是否是本校的学生,如果是,才允许其注册,如果不是,就不允许其注册
SqlDataReader dr = db.reDr(sql2);
if (dr.Read())
21、 {
dr.Close();//关闭SqlDataReader
string sq = "select * from admin where login_name='" + stu_Name + "'";//如果已经证实是本校的学生,就再判断该学生是否已经注册过了
dr=db.reDr(sq);//再次使用SqlDataReader
if (dr.Read())
{
R 22、esponse.Write("");
Response.Write("");
}
else {
int power = 3;//如果已经证实要注册的人是本校的学生,就直接给该学生赋予使用权 23、限
string sql = "insert into admin(login_name,login_pwd,admin_power) values('" + stu_Name + "','" + stu_Id + "',"+power+")";
//Response.Write(sql);
//Response.End();
try
{
24、 int flag = db.sqlEx(sql);
if (flag > 0)
{
Response.Write("");
Response.Write("");
25、 }
else {
Response.Write("");
}
}
catch (System.Exception ee) {
Response.Write("");
}
}
}
else {
Response.Write("");
txtUserName.Text = "";
txtstuID.Text = "";
}
27、}
}
protected void btn_reset_Click(object sender, EventArgs e)
{
txtstuID.Text = "";
txtUserName.Text = "";
}
}
用户登录功能的实现
实现逻辑:用户进入登录页面后,输入相关的用户名和密码进行登录,如果用户名和密码都正确了,表示该用户是合法用户,就允许其进入系统的主页进行相关的系统操作,如果用户名和密码的验证不通过,就不允许其进入系统,用户输入用户名和密码后,在后台的处理过程中首先 28、会从数据库Attendance.mdf的admin表取出相应的用户名和用户输入的用户名进行匹配,如果用户名匹配成功了,就把数据表中存储的密码和用户输入的密码进行比对,如果密码也验证通过了,才允许用户进入系统首页,用户名和密码中任意一项匹配如果不通过,都不允许其登录。登录该系统时,有三种不同身份的使用者,分别为管理员,记录员和学生,不同的身份就对应着不同的使用权限。使用权限的限制根据不同身份的登录者生成不同的动态导航,以此到达限定使用者的权限的目的。
登录页面的设计如下:
如果登录的身份是管理员,则显示如下的导航:
如果登录的身份是记录员,则显示如下的导航:
如果登录的身份 29、是学生,则显示如下的导航:
对于管理员而言,其拥有的使用权限是最多的,但没有晚归登记和考勤登记的权限,登记权限只有记录员才有,而对于学生而言,只有查看相关记录的权限,别的权限都没有,因此通过这种根据不同登录者的身份生成不同的导航就可以限定了登录者的使用权限了。这里难就难在了如果根据登录者的身份动态生成不同的导航信息。相关代码如下:
用户登录的后台代码:
login.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using Syste 30、m.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class login : System.Web.UI.Page
{
DB db = new DB();
protected void Page 31、Load(object sender, EventArgs e)
{
ImageButton1.ImageUrl = "image.aspx";//让页面加载时就显示验证码图片
}
protected void btnRegister_Click(object sender, EventArgs e)
{
Response.Redirect("Register.aspx");//点击注册按钮后,直接跳转到注册页面,这里需要注意一个小问题,由于文本框已经使用了验证控件,因此要想让按钮的触发事件不触发验证控件时,把按钮的 32、CausesValidation属性设置为false即可
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string code = txtCheckCode.Text.Trim();//获取输入的验证码
string username = txtUserName.Text.Trim();//获取输入的用户名
string password = txtPassword.Text.Trim();//获取输入的密码
if 33、code != (string)Session["image"])//先进行验证码的判断,验证码输入正确后在执行其他的操作
{
Response.Write("");
Response.Write("");
}
else
{
string sql 34、 = "select login_name,login_pwd,admin_power from admin where login_name='"+username+"'";
SqlDataReader dr = db.reDr(sql);
if (dr.Read())
{
if ((string)dr["login_pwd"] == password)
{
35、Response.Write("");
Response.Write("");
Session["Power"] = dr["admin_power"];//使用Session存储用户的使用权限
Session["username"] = username;//存储用户 36、名
}
else {
Response.Write("");
Response.Write("");
}
}
else {
37、 Response.Write("");
Response.Write("");
}
}
}
}
在用户进行登录的时候,使用Session对象存储用户名,并且根据用户名从数据库中取出该用户的使用权限,也使用Session对象保存用户的使 38、用权限,登录成功后,在系统的主页的后台处理代码中取出保存在Session对象中的用户名的相关的用户权限,然后根据用户权限来动态生成导航,相关的代码如下:
系统主页的后台处理代码:
index.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
39、
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["username"] != null)//这里使用Session对象对用户是否已经进行登录进行判断,如果Session中的内容不为空,则表示用户已经登录
40、 {
string userStr = (string)Session["username"];//取出保存在Session对象中的用户名
int power = int.Parse(Session["Power"].ToString());//取出保存在Session对象中的用户使用权限标识
string nav = "";
if (power == 1)//根据登录者的身份动态变化导航的显示,以此限定不同身份的登录者的使用权限
41、{
nav = "晚归查询| ";
nav += "晚归汇总| ";
nav += "考勤查询| ";
na
42、v += "
43、td>用户管理|"; nav += "
44、 nav += "
45、a href='attendcount.aspx' target='show_Content'>考勤汇总|
46、 nav = "
47、 href='attendcount.aspx' target='show_Content'>考勤汇总
|48、 + "
登录"; } else {//如果用户没有进行登录,则直接跳转到登录页面 Response.Write(""); Response.Write(""); } //Response.Write("49、me name='show_Content' frameborder='1' width='800px' height='600px' scroll='no'>");向网页中输出一个框架 lblContent.Text = "";//让框架在指定的Lable中显示 } } 到此,用户注册和登录
50、的功能模块就全部实现了 接下来将进入系统开发中的最核心的功能模块部分的开发:晚归情况管理和考勤情况管理,这两个部分是系统功能中最核心的两个部分,也是最难实现的两个部分,这两个部分难就难在了查询的部分,如何根据用户的选择查询操作动态拼凑出SQL语句对数据库进行操作,从而查询出用户想要的记录。 晚归情况管理功能模块的实现 晚归情况管理功能模块主要有三部分,分别为晚归登记,晚归查询,晚归汇总。如下图所示: 晚归情况管理 晚归登记 晚归查询 晚归汇总 实现晚归登记功能 latewrite.aspx页面设计如下: 在数据库的设计中,存储晚归






