学生晚归与考勤管理信息系统的开发_第1页
学生晚归与考勤管理信息系统的开发_第2页
学生晚归与考勤管理信息系统的开发_第3页
学生晚归与考勤管理信息系统的开发_第4页
学生晚归与考勤管理信息系统的开发_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学生晚归与考勤管理信息系统开发系统分析及设计3.1 系统预期用户本系统的预期用户是任何想了解学生在校的考勤情况的用户。3.2 功能说明学生晚归与考勤管理系统是目前广西机电职业技术校园网在线系统之一。本软件将各个学院各个部门联系到一起,便于学生晚归、考勤的管理,同时,还可以让学生通过查询自己的晚归与考勤记录,了解到自己的纪律情况。在线图书销售系统要实现的功能模块主要有:该系统分为晚归情况管理、考勤情况管理与后台管理三大功能模块。 系统功能模块的划分图1 系统功能架构图(2) 基本处理流程下图是系统基本处理流程图。图2 系统基本处理流程3.3 数据库设计本系统采用SQL Server2005作为后台数据库。根据以上功能,新建一名为Attendance的数据库,其中共包括9个数据表,分别是部门表(department):专业信息表(special):班级信息表(class):学生信息表(stuInfo):区/门信息表(region):晚归情况表(late):考勤情况表(attendance):考勤类型表(attendtype):用户信息表(admin):各个数据表的关系(主要是主键与外键的约束关系)如下图所示:数据库创建脚本参考文件:“学生晚归与考勤管理信息系统数据库建库脚步.sql” 3.4 数据库连接1、建议将数据库拷入网站内的App_Data目录内,然后将数据库连接字符串写入到Web.config,参考代码如下:测试数据库连接是否正常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;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class DBConnTest : System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) string constr = ConfigurationManager.AppSettingsConnectionStr; SqlConnection conn = new SqlConnection(constr); conn.Open();/打开数据库连接 Response.Write(数据库连接成功!); 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.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;/ / DB类为一个专门进行数据库操作的类/ 包括连接数据库,更新数据库,查询数据库这些操作/ public class DB / / DB()为DB类的构造方法 / public DB() / / 定义返回数据库连接对象SqlConnection方法 / / / SqlConnection对象 / public SqlConnection getCon() String strCon = ConfigurationManager.AppSettingsConnectionStr;/从配置文件web.cofig里面读取数据库的连接字符串 return new SqlConnection(strCon);/返回数据库连接对象 / / 定义更新数据库的方法 / / / 参数cmdStr为要执行更新数据库的SQL语句,包含增加,修改,删除这三种SQL语句 / / / 数据库更新成功则返回1,更新失败则返回0 / public int sqlEx(string cmdStr) SqlConnection con = getCon(); con.Open();/打开数据库连接 SqlCommand cmd = new SqlCommand(cmdStr,con);/创建执行SQL语句的命令对象SqlCommand try cmd.ExecuteNonQuery(); return 1;/成功返回1 catch return 0;/失败返回0 finally con.Dispose();/释放资源 / / 定义查询数据库信息的方法 / / / 参数cmdStr为执行查询时的书写的SQL语句 / / public DataTable reDt(string cmdStr) SqlConnection con = getCon();/连接数据库 con.Open(); SqlDataAdapter da = new SqlDataAdapter(cmdStr,con);/创建数据适配器对象 DataSet ds = new DataSet();/创建数据集对象 da.Fill(ds);/将保存在数据适配器对象中的数据填充到数据集对象中 return (ds.Tables0);/返回数据集对象中有记录的那个表 / / 定义阅读数据的方法 / / / 参数str为执行查询操作时的SQL语句 / / / 返回一个数据阅读对象 / public SqlDataReader reDr(string str) SqlConnection con = getCon(); con.Open(); SqlCommand cmd = new SqlCommand(str,con); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);/通过调用Command对象的ExecuteReader()方法创建DataReader对象,CommandBehavior.CloseConnection表示? return dr; 功能模块的实现用户注册功能的实现:实现逻辑:用户注册信息写入到admin表,此注册功能是专门针对本校的学生开发注册的,如果不是本校的学生,是没有注册的权限的,所有注册时要根据学生输入的真实姓名和学号进行注册,如果找不到对应的学生的名字,就不允许用户进行注册,如果用户已经注册过一次了,就直接告诉用户已经注册过了,无需再次注册了,并自动为用户跳转到登录页面,如果用户是第一次注册,就把用户的注册信息写入到admin表中,注册成功后也跳转到登录页面让用户进行登录。用户注册页面Register.aspx如下图所示:学生进入此页面进行注册,正确填写了学生姓名和学生学号以及验证码了以后,点击提交按钮完成帐户注册,而在后台,要进行数据的合法性判断,首先进行的是验证码的正确性判断,把用户输入的验证码和保存的Session对象中的验证码取出来作比较,如果验证码输入正确才继续执行检查该注册用户是否是本校的学生,以及该用户是否已经被注册了,后台的处理代码如下所示:Register.aspx.csusing 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;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, EventArgs 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)Sessionimage) Response.Write(alert(验证码输入错误,请检查后重新输入!); / Response.Redirect(Register.aspx);如果使用这种跳转方式,那么上面的javascript是无法运行的,因为还没有来得及运行就页面就已经跳转了 Response.Write(window.location.href=Register.aspx); else string stu_Name = 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() dr.Close();/关闭SqlDataReader string sq = select * from admin where login_name= + stu_Name + ;/如果已经证实是本校的学生,就再判断该学生是否已经注册过了 dr=db.reDr(sq);/再次使用SqlDataReader if (dr.Read() Response.Write(alert(你已经注册过了,不需要再次注册了!直接为您跳转到登录页面进行登录); Response.Write(window.location.href=logion.aspx); else int power = 3;/如果已经证实要注册的人是本校的学生,就直接给该学生赋予使用权限 string sql = insert into admin(login_name,login_pwd,admin_power) values( + stu_Name + , + stu_Id + ,+power+); /Response.Write(sql); /Response.End(); try int flag = db.sqlEx(sql); if (flag 0) Response.Write(alert(注册成功了!马上为您跳转到登录页面进行登录); Response.Write(window.location.href=login.aspx); else Response.Write(alert(注册失败!); catch (System.Exception ee) Response.Write(alert(+ee.Message.ToString()+);); else Response.Write(alert(你不是本校的学生,没有注册的权限!); txtUserName.Text = ; txtstuID.Text = ; protected void btn_reset_Click(object sender, EventArgs e) txtstuID.Text = ; txtUserName.Text = ; 用户登录功能的实现实现逻辑:用户进入登录页面后,输入相关的用户名和密码进行登录,如果用户名和密码都正确了,表示该用户是合法用户,就允许其进入系统的主页进行相关的系统操作,如果用户名和密码的验证不通过,就不允许其进入系统,用户输入用户名和密码后,在后台的处理过程中首先会从数据库Attendance.mdf的admin表取出相应的用户名和用户输入的用户名进行匹配,如果用户名匹配成功了,就把数据表中存储的密码和用户输入的密码进行比对,如果密码也验证通过了,才允许用户进入系统首页,用户名和密码中任意一项匹配如果不通过,都不允许其登录。登录该系统时,有三种不同身份的使用者,分别为管理员,记录员和学生,不同的身份就对应着不同的使用权限。使用权限的限制根据不同身份的登录者生成不同的动态导航,以此到达限定使用者的权限的目的。登录页面的设计如下:如果登录的身份是管理员,则显示如下的导航:如果登录的身份是记录员,则显示如下的导航:如果登录的身份是学生,则显示如下的导航:对于管理员而言,其拥有的使用权限是最多的,但没有晚归登记和考勤登记的权限,登记权限只有记录员才有,而对于学生而言,只有查看相关记录的权限,别的权限都没有,因此通过这种根据不同登录者的身份生成不同的导航就可以限定了登录者的使用权限了。这里难就难在了如果根据登录者的身份动态生成不同的导航信息。相关代码如下:用户登录的后台代码:login.aspx.csusing 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;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_Load(object sender, EventArgs e) ImageButton1.ImageUrl = image.aspx;/让页面加载时就显示验证码图片 protected void btnRegister_Click(object sender, EventArgs e) Response.Redirect(Register.aspx);/点击注册按钮后,直接跳转到注册页面,这里需要注意一个小问题,由于文本框已经使用了验证控件,因此要想让按钮的触发事件不触发验证控件时,把按钮的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 (code != (string)Sessionimage)/先进行验证码的判断,验证码输入正确后在执行其他的操作 Response.Write(alert(验证码输入有误!); Response.Write(window.location.href=login.aspx); else string sql = select login_name,login_pwd,admin_power from admin where login_name=+username+; SqlDataReader dr = db.reDr(sql); if (dr.Read() if (string)drlogin_pwd = password) Response.Write(alert(用户名和密码正确!登录成功!); Response.Write(window.location.href=Index.aspx); SessionPower = dradmin_power;/使用Session存储用户的使用权限 Sessionusername = username;/存储用户名 else Response.Write(alert(密码错误!); Response.Write(window.location.href=login.aspx); else Response.Write(alert(该用户不存在,请先去注册一个帐户后再进行登录操作,即将为你跳转到注册页面!); Response.Write(window.location.href=Register.aspx); 在用户进行登录的时候,使用Session对象存储用户名,并且根据用户名从数据库中取出该用户的使用权限,也使用Session对象保存用户的使用权限,登录成功后,在系统的主页的后台处理代码中取出保存在Session对象中的用户名的相关的用户权限,然后根据用户权限来动态生成导航,相关的代码如下:系统主页的后台处理代码:index.aspx.csusing 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;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 (Sessionusername != null)/这里使用Session对象对用户是否已经进行登录进行判断,如果Session中的内容不为空,则表示用户已经登录 string userStr = (string)Sessionusername;/取出保存在Session对象中的用户名 int power = int.Parse(SessionPower.ToString();/取出保存在Session对象中的用户使用权限标识 string nav = ; if (power = 1)/根据登录者的身份动态变化导航的显示,以此限定不同身份的登录者的使用权限 nav = 晚归查询|; nav += 晚归汇总|; nav += 考勤查询|; nav += 考勤汇总|; nav += 系/班级/专业维护|; nav += 区/门维护|; nav += 用户管理|; nav += 注销用户; else if (power = 2) nav = 晚归查询|; nav += 晚归汇总|; nav += 晚归登记|; nav += 考勤查询|; nav += 考勤汇总|; nav += 考勤登记|; nav += 注销用户; else if (power = 3) nav = 晚归查询|; nav += 晚归汇总|; nav += 考勤查询|; nav += 考勤汇总|; nav += 注销用户; lblNav.Text = +nav+; lblNav.Text += 欢迎 + userStr + 登录; else /如果用户没有进行登录,则直接跳转到登录页面 Response.Write(alert(你还没有进行系统的登录,请先登录后再使用本系统!); Response.Write(window.location.href=login.aspx); /Response.Write();向网页中输出一个框架 lblContent.Text = ;/让框架在指定的Lable中显示 到此,用户注册和登录的功能模块就全部实现了接下来将进入系统开发中的最核心的功能模块部分的开发:晚归情况管理和考勤情况管理,这两个部分是系统功能中最核心的两个部分,也是最难实现的两个部分,这两个部分难就难在了查询的部分,如何根据用户的选择查询操作动态拼凑出SQL语句对数据库进行操作,从而查询出用户想要的记录。晚归情况管理功能模块的实现晚归情况管理功能模块主要有三部分,分别为晚归登记,晚归查询,晚归汇总。如下图所示:晚归情况管理晚归登记晚归查询晚归汇总实现晚归登记功能latewrite.aspx页面设计如下:在数据库的设计中,存储晚归情况的表为late表,late表的设计如下图所示:从表中可以看到,late表存储的信息为学生的学号(stu_id)、区/门编号(region_id)以及晚归时间(late_time)和晚归事由(late_intro)。记录员在进行晚归情况记录时,首先要选择的系部,专业,班级,区/门,姓名这些相关的学生的信息,然后写上晚归时间和晚归事由后,点击【记录】按钮,完成晚归情况的登记。这里需要注意的地方是,记录员选择的系部名称,专业名称,班级名称以及学生名称这些信息是早就已经随着数据库的创建插入到相关的表中存放了,因此没有必要再次把这些重复的信息写入到数据库中,而且从存储晚归情况记录的late表中也可以看出,late表并没有定义有可以存储系部,专业,班级、区/门和姓名的字段,但可以看到,late表中存放有学生的学号(stu_id),区门的编号(region_id),当初进行数据库设计时,就已经定义了late表中的stu_id(外键)字段和stuInfo表的stu_id(主键)字段之间的约束关系,因此可以通过late表的stu_id找到stuInfo表中对应着的stu_id所表示的学生,而stuInfo表的设计如下图所示:从学生信息表(stuInfo)的定义中可以看出,学生信息表中存放有系部的编号(dept_id)、专业编号(spc_id)以及(class_id),这三个字段都作为外键与相应的department表的dept_id(主键)、spcieal表的spc_id(主键)以及class表的class_id(主键)建立起主键外键的约束关系,因此通过stuInfo表就可以找到与该晚归学生相关的系部,专业以及所在的班级,这样有关该晚归学生的全部信息就可以通过多表联合查询从stuInfo表(得到学生姓名),class表(得到班级),spceial表(得到专业)和department表(得到系部)得到。这就是建立起主键外键约束的好处,可以把表和表通过某种关系关联起来,使之成为有一定依赖关系的表,从而保持了数据的完整性。晚归情况记录表(late)中的region_id记录了学生晚归的区/门编号,通过该编号就可以找到存放在region表中对应的区/门信息。做这个功能模块时,容易产生一个误区,会很自然地认为记录员选择的系部,专业,班级,姓名,区/门以及填写的晚归时间和晚归事由这些有关晚归的信息全部都要写入到数据库里面,如果这样想,那么这个功能模块就没有办法做了,而且会越做越复杂,会产生很多重复的数据,可能有的人会想到再创建一个表,专门用来存放这些信息,其实是完全没有必要这样做的。使用一个late表存放晚归情况记录即已经可以了。其它的系部,班级,专业等相关信息在别的表已经存放有了,因此没有必要再次把这些信息写入到数据库中存放,造成数据的冗余以及存储空间的浪费。latewrite.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;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class latewrite : System.Web.UI.Page DB db = new DB(); protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) string sql = select dept_id,dept_name from department; SqlDataReader dr = db.reDr(sql);/获取数据源,数据源来源于department表 dp_dept.DataSource = dr;/绑定数据源到dp_selectDept中 dp_dept.DataValueField = dept_id;/给DropDownList1的下拉列表的项赋值 dp_dept.DataTextField = dept_name;/显示给用户看的文本 dp_dept.DataBind();/显示数据 dp_dept.Items.Insert(0, new ListItem(=请选择系部=, );/在第0个位置插入一个下拉项,显示的DataTextField为=请选择系部=,下拉项的DataValueField为空 dp_spc.Items.Insert(0, new ListItem(=请选择专业=, ); dp_class.Items.Insert(0, new ListItem(=请选择班级=, ); dp_name.Items.Insert(0,new ListItem(=请选择姓名=); sql = select region_id,region_name from region; dr = db.reDr(sql); dp_region.DataSource = dr; dp_region.DataValueField = region_id; dp_region.DataTextField = region_name; dp_region.DataBind(); dp_region.Items.Insert(0, new ListItem(=请选择区/门=, ); protected void dp_dept_SelectedIndexChanged(object sender, EventArgs e) string dept_id = dp_dept.SelectedValue;/获取中选定的项的value,SelectedValue的意思很明显,意思为选中的值 /注意:这里的判断不要写成if(dept_id!=null)这样写会出错的 if (dept_id != )/这里要进行判断,如果选中的是第一项,即显示文本为“=请选择系部=”这一项时,dept_id是没有值的,即为空 string sql = select spc_id,spc_name from spe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论