




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
此文档收集于网络,如有侵权,请联系网站删除7.5选课系统的设计本节将在Microsoft Visual Studio 2008中实现学生选课管理系统的主要功能。其主要内容包括公共类的编写和使用,管理员的登录,管理员首页的制作,管理员对教师信息的修改和添加,管理员对自己信息的修改。7.5.1 Web.Config文件配置 为了使应用程序方便引用,需要在应用程序配置文件(Web.Config文件)中设置数据库连接信息。连接数据库代码(代码位置:光盘/ElectiveSystem/web.config)如下: . 7.5.2 公共类的编写 开发项目中以类的形式来组织、封装一些常用的方法和事件,不仅可以提高代码的复用率,也大大方便了代码的管理。在学生选课系统中共建了4个公共类,具体如下。 Alert:用于管理在项目中用到的多种页面跳转提示框, 如直接跳转。提示信息并跳转等。 Common:用于管理在项目中用的公共类,如MD5加密,清除脚本等。 DBBase:用于管理在项目中对库的各种操作,如连接数据库、获取数据表DataTable等。(详细信息请查看第六章的Web.Config文件配置) RandomImg:用于管理在项目组用到的获取随机验证码。 因为数据库操作类DBBase类在本书第六章(6.2.7 数据库操作类DBBase简介和使用)中已经进行了详细的介绍。下面主要介绍RandomImg类、Alert类和Common类的创建过程。1.类的创建在创建类时,用户可以在该项目中找到App_Code文件夹,如果项目中没有App_Code文件夹,用户可以在项目上单击鼠标右键,在弹出的菜单中选择“添加ASP.NET文件夹”,添加一个App_Code文件夹。新建好文件夹后点击鼠标右键,在弹出菜单中选择“添加新项”,在弹出的“添加新项”对话框中选择“类”,并将其命名,单击“添加”按钮即可创建一个新类。出现得窗口如图 7.1所示(此处以创建RandomImg为例)。2.RamdomImg类(代码位置:光盘/ElectiveSystem/App_Code/RandomImg.cs)RamdomImg类主要完成一些与验证嘛相关的功能,比如生成随机验证码字符串、生成验证码的图片等等,其中主要方法包括GenerateCheckCode()、CreateCheckCodeImage(),下面我们将对这些方法分别进行详细讲解。l GenerateCheckCode()方法GenerateCheckCode方法用于在登入页面自动生成随机验证码。其代码如下: public static string GenerateCheckCode() int number; char code; string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i 5; i+) number = random.Next(); if (number % 2 = 0) code = (char)(0 + (char)(number % 10); else code = (char)(A + (char)(number % 26); checkCode += code.ToString(); return checkCode; 图 7.1 “添加新项”对话框l CreateCheckCodeImage(string checkCode)方法CreateCheckCodeImage方法用于给生成的随机验证码加上背景图片。其代码如下: public static void CreateCheckCodeImage(string checkCode) if (checkCode = null | checkCode.Trim() = String.Empty) return; System.Drawing.Bitmap image = new System.Drawing.Bitmap(int)Math.Ceiling(checkCode.Length * 12.5), 22); Graphics g = Graphics.FromImage(image); /生成随机生成器 Random random = new Random(); /清空图片背景色 g.Clear(Color.White); /画图片的背景噪音线 for (int i = 0; i 25; i+) int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); Font font = new System.Drawing.Font(Arial, 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); /画图片的前景噪音点 for (int i = 0; i 100; i+) int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next(); /画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); System.Web.HttpContext.Current.Response.ClearContent(); System.Web.HttpContext.Current.Response.ContentType = image/Gif; System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray(); 3. Alert类(代码位置:光盘/ElectiveSystem/App_Code/Alert.cs)Alert类用于管理在项目中用到的多种页面跳转,主要包括Show方法、ShowAndFramGo方法、FramGo方法,下面进行详细介绍。l show方法Show方法用于提示信息并返回原页面。其代码如下: public static void Show(string text) HttpContext.Current.Response.Write(alert( + text + );window.history.back();); HttpContext.Current.Response.End();l ShowAndFramGo方法ShowAndFramGo方法用于提示信息并跳转页面(用于框架页)。其代码如下: public static void ShowAndFramGo(string text, string url) HttpContext.Current.Response.Write(alert( + text + );window.top.location = + url + ;);l FramGo方法FramGo方法用于跳转页面(用于框架页)。其代码如下: public static void FramGo(string url) HttpContext.Current.Response.Write(window.top.location = + url + ;);4. Common类(代码位置:光盘/ElectiveSystem/App_Code/Common.cs)Common类主要用于管理在项目中用到的公共方法,主要包括MD5方法、InputText方法、GetMapPath方法、UploadPicFile方法下面详细介绍Common类中的方法。l MD5(string Input, bool Half)方法MD5类用于字符串加密。其代码如下:/ / MD5加密字符串处理 / / 加密是16位还是32位;如果为true为16位 / 待加密码字符串 / public static string MD5(string Input, bool Half) string output =System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(Input, MD5).ToLower(); if (Half)/16位MD5加密(取32位加密的925字符) output = output.Substring(8, 16); return output;l InputText(string text)方法InputText类用于删除脚本。其代码如下:/ / 清除所有脚本 / / / public static string InputText(string text) if (string.IsNullOrEmpty(text) return string.Empty; text = Regex.Replace(text, s2, ); /two or more spaces text = Regex.Replace(text, ()+|(),n);/ text = Regex.Replace(text, (s*&n|Nb|Bs|Sp|P;s*)+, );/ text = Regex.Replace(text, , string.Empty); /any other tags text = text.Replace(, ); return text;l GetMapPath(string strPath)方法GetMapPath类用于获取当前的绝对地址。其代码如下: / / 获得当前绝对路径 / / 指定的路径 / 绝对路径 public static string GetMapPath(string strPath) if (HttpContext.Current != null) return HttpContext.Current.Server.MapPath(strPath); else /非web程序引用 strPath = strPath.Replace(/, ); if (strPath.StartsWith() strPath = strPath.Substring(strPath.IndexOf(,1).TrimStart(); ReturnSystem.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath); l UploadPicFile(System.Web.UI.WebControls.FileUpload fileUpload, string pathDir,string firstMark)方法UploadPicFile类用于上传图片。其代码如下:/ / / / 图片路径 / 保存图片路径 / 前缀名 / public static string UploadPicFile(System.Web.UI.WebControls.FileUploadfileUpload, string pathDir, string firstMark) string fileName = ; string retValue = ; try string type =image/pjpeg|image/jpeg|image/bmp|image/gif|application/x-shockwave-flash|image/png|application/msword|application/vnd.ms-excel;bool allowType =type.Contains(fileUpload.PostedFile.ContentType.ToString(); string localExp =fileUpload.PostedFile.ContentType.ToString().Substring(fileUpload.PostedFile.ContentType.ToString().LastIndexOf(/) + 1); if (allowType) if (fileUpload.PostedFile.ContentLength / 1024) ImagesMaxSize) retValue = error:对不起!你上传的文件大小大于了 +ImagesMaxSize.ToString()+ KB; else string expStr =fileUpload.PostedFile.FileName.Substring(fileUpload.PostedFile.FileName.LastIndexOf(.);/后缀名 Random rd = new Random(); fileName = firstMark + sjname() + rd.Next().ToString() +expStr; try string path = HttpContext.Current.Server.MapPath(/ +pathDir); fileUpload.SaveAs(string.Concat(path, , fileName); catch (Exception e) throw e; retValue = pathDir + / + fileName; else retValue = error:对不起!暂不支持你所上传的文件类型: + localExp; catch (Exception ex) throw new Exception(ex.Message); return retValue; / / 产生随机文件名,以免出现文件重名时覆盖掉原文件的情况 / / public static string sjname() string sj = null; sj = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +DateTime.Now.Day.ToString() +DateTime.Now.TimeOfDay.Hours.ToString()+DateTime.Now.TimeOfDay.Minutes.ToString() +DateTime.Now.TimeOfDay.Milliseconds.ToString(); return sj; 7.5.3管理员模块的设计 管理员是系统的管理者和维护者,管理员可随时对选课系统进行课程信息、学生信息、教师信息进行管理,同时管理员可以对自己的信息进行修改和更新。l 管理员登陆管理员登录页面是管理员进入系统的唯一接口,只有用户账号和密码准确无误才能进入选课系统。当管理员通过了信息验证就可以对选课系统进行管理和维护了。登录页面要实现的主要功能有防止暴力破解程序的不断尝试登录、MD5加密、防止SQL注入式攻击。管理员登录页面的运行结果如图7.1所示: 图7.1管理员登录界面关键技术:l 防止暴力破解程序的不断尝试登录为了防止不良用户利用暴力破解程序不断的尝试登录造成用户信息泄露,我们引进了验证码技术。验证码就是通过调用系统的自定义函数随机产生的一串字符。我们可以引用公共类RandomImg类中的GenerateCheckCode()函数返回值为一个随机字符串。调用方法如下: string code = RandomImg.GenerateCheckCode();l MD5加密为了防止用户密码在数据库中以明文显示,用户的密码都进行了MD5加密。所以要先将用户输入的密码进行MD5加密,然后到数据库中验证用户的账号和密码是否存在。MD5加密我们调用公共类Common的MD5()方法将用户输入的密码进行加密。使用方法如下: Common.MD5(this.txtPwd.Text.ToString().Trim();l 防止SQL注入式攻击所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。例如:比如在用户名中输入admin在用户密码的文本框中输入or 1 = 1 ,那么查询语句就成为Select count(*) from tbAdmin where userName = admin or 1 = 1;执行之后的返回值为所有的用户总数。为了防止此类的攻击,登录过程一般都是用存储过程。调用公共类DBBase中的RunProcedureDatatable()函数返回查询到的用户记录。下面是调用DBBase使用存储过程: DataTable dt = DBBase.RunProcedureDatatable(loginAdmin, parameters);loginAdmin为管理员登录的存储过程名,parameters为参数列表。具体实现:(代码位置 光盘ElectiveSystemElectiveSystemadminadminLogin.aspx)(1)、新建一个网站命名为ElectiveSystem,默认主页是adminLogin.aspx。(2)、根据图7.1管理员登录界面所示,我们在主页中添加两个文本框分别命名为txtName和txtPwd,和两个图片按钮分别命名为ibtnInto和ibtnCancle,主要控件及用途如下表。控件类型控件名称用途TextBox控件txtName用于输入用户名txtPwd用于输入用户密码ImageButton 控件ibtnInto提交的图片按钮ibtnCancle重置登录信息 主要代码如下:protected void ibtnInto_Click(object sender, ImageClickEventArgs e) string userName = Common.InputText(txtName.Text.ToString().Trim(); string passWord = Common.InputText(txtPwd.Text.ToString().Trim(); string checkCode = txtCheck.Text.ToUpper().ToString().Trim(); string code = ViewStatecode.ToString().Trim() ; if (checkCode = code) SqlParameter parameters = new SqlParameter(userName, SqlDbType.VarChar, 20), new SqlParameter(apwd, SqlDbType.VarChar, 50) ;/新建存储过程参数 /给存储过程参数赋值 parameters0.Value=txtName.Text.ToString().Trim(); parameters1.Value = Common.MD5(txtPwd.Text.ToString().Trim(); /调用DBBase使用存储过程 DataTable dt = DBBase.RunProcedureDatatable(loginAdmin, parameters); int count = Convert.ToInt32(dt.Rows00); if (count = 1)/若count为1则登录成功,为0则失败 Sessionadmin = userName; /用Session保存用户名 Alert.FramGo(adminIndex.aspx); /跳转到管理员首页 else Alert.Show(用户名或密码错误); else Alert.Show(验证码错误); l 管理员首页当管理员成功的通过账户认证后就自动跳到管理员首页如图 7.2所示。图 7.2 管理员首页首页实现过程: (代码位置 光盘ElectiveSystemadminadminLogin.aspx)(1)页面相关控件的属性设置及用途如下表所示。 控件类型控件名称控件用途TreeViewtvTeacher树形导航条lablelblUserName显示当前用户名(2)网站ElectiveSystem右键点击解决方案,选择添加新页并将页面命名为adminIndex.aspx,继续新建页面命名为main.aspx。(3)在adminIndex.aspx窗体中新建一个div用于页面的布局,在此div中添加一个三行一列Table表格,在表格的第一行拆分成三列,在表格的第一行中的列中依次插入三张背景图片如上图7.2管理员首页所示,图片位置为光盘ElectiveSystemadminimages中的header_left.jpg、header_bg.jpg和header_right.jpg,并在中间列中添加labUserName控件。在表格的第二行中添加图片header_bg.jpg。(4)接着新建一个一行两列的表格,在第一列中添加TreeView控件,第二列中添加一个iframe 并将其链接地址设为main.aspx,id设为main。将第一列中的TreeView命名为tvTeacher,选定tvTeacher控件单击其右上角的小三角形,然后选择编辑节点,如图7.3所示。图 7.3编辑TreeView节点比如:查看学生节点的NavigateUrl设置为admin/studentManage.aspx,Target属性设为main,表示点击查看学生节点时将studentManage.aspx显示在id为main的iframe中。其他节点的NavigateUrl和Target属性如下表。节点名NavigateUrlTarget查看学生信息/admin/studentManage.aspxmain学生选课信息/admin/studentElective.aspxmain添加学生/admin/studentAdd.aspxmain查看教师信息/admin/teacherManage.aspxmain添加教师/admin/teacherAdd.aspxmain查看课程信息/admin/courseAdd.aspxmain添加课程/admin/courseManage.aspxmain修改密码/admin/modifyPwd.aspxmain退出index.aspx为空接下来用户自己参照光盘/ElectiveSystem/ admin/mian.aspx页面自己练习一下mian页面制作。做好之后,运行页面,我们的首页就完成了。l 教师管理因为本系统中管理员对教师、学生、课程的管理几乎完全一样,所以我们就挑选教师管理进行详细的介绍。管理员对教师的管理包括添加教师,删除教师,和修改教师信息。下面给大家详细介绍每一个功能的具体实现。v 添加教师该功能功能主要是添加教师个人的详细信息,添加页面运行结果如图7.4。 图7.4 添加教师页面运行结果具体实现:(代码位置 光盘ElectiveSystemadminTeacherAdd.aspx)(1) 打开上一节新建的网站ElectiveSystem右键点击解决方案,选择添加新页并将页面命名为TeacherAdd.aspx。在本页面添加主要按钮如下表: 控件类型控件名称用途TextBoxtxtNumber用于输入教师编号txtName用于输入教师名txtdept用于输入教师系别RequiredFieldValidatorvalrTno验证教师编号是否为空valrTname验证教师姓名是否为空valrTdept验证教师系别是否为空RadioButtonrbtnSex1设置教师性别为男rbtnSex2设置教师性别为女Button btnSure提交按钮 (2)为了防止管理员在添加教师时忘记填写一些重要信息,我们可以添加验证控件,并将属性ControlToValidate的值设为对应的文本框。比如:valrTno属性ControlToValidate的值为txtNumber。 (3)在页面上编辑好控件后,只要再编辑btnSure按钮的点击事件,当用户填好信息后单击提交按钮就可以添加新的教师了。btnSure按钮的点击事件代码如下。protected void btnSure_Click(object sender, EventArgs e) string number = txtNumber.Text.ToString().Trim(); string name = txtName.Text.ToString().Trim(); string sex = 男; if (rbtnSex2.Checked) sex = 女; /如果rbtnSex2被选中则,教师的性别为女 string dept = txtDept.Text.ToString().Trim(); string passWord = Common.MD5(888888);/默认添加教师的初始密码为6个8 /根据教师号判断该教师是否存在。 string sqlText1 = select * from tbTeacher where tno = + number + ; bool state = DBBase.Exists(sqlText1); if (state) Alert.Show(此教师已存在!); else /添加教师信息。 string sqlText2 = insert into tbTeacher(tno,tname,tsex,tdept,tpwd) values ( + number + , + name + , + sex + , + dept + , + passWord + ); int tag = DBBase.ExecuteSql(sqlText2); if (tag 0) Alert.Show(添加成功); else Alert.Show(添加失败!); v 查看和更新教师信息该功能主要是主要是查看和管理已添加教师的信息,管理员可以按照教师编号、教师姓名、教师系别等条件查找指定的教师信息,也可以查看所有教师的信息。如果有需要管理员可以对教师信息进行修改删除操作。当管理员点击左边导航栏中管理教师菜单下的查看教师信息,页面运行结果如图 7.3所示:图 7.5 查看教师信息页面运行结果具体实现(代码位置 光盘ElectiveSystemadminteacherManage.aspx)(1)打开上一节新建的网站ElectiveSystem右键点击解决方案,选择添加新页并将页面命名为teacherManage.aspx。在本页面添加主要控件如下表:控件类型控件名称用途TextBoxtxtSearch用于输入查询的关键字DropDownListddlCondition用于选择查询条件GridViewgvTeacherInfo显示教师信息Button btnSearch提交按钮btnCheckAll查看全部按钮 (2)首先我们介绍最上面的按条件搜索教师功能,点击DropDownList控件的右上方的三角形选择“编辑项”添加三个成员如图 7.4。点击添加分别将属性Text和Value设为教师号、tno,教师名、tname,教师系别、tdept;7.6 DropDownList编辑项给btnSearch提交按钮的点击事件中写上如下代码,就可以完成教师的按条件查询了。 protected void btnSearch_Click(object sender, EventArgs e) SearchTeacher();/调用自定义的查询函数/定义的查询函数protected void SearchTeacher() string strWhereCondition = ; string sqlText = ; if (txtSearch.Text.ToString().Trim() != )/如果查询文本框不为为空 /构造SQL查询语句的查询条件 strWhereCondition = ddlCondition.SelectedValue.ToString().Trim() + = + txtSearch.Text.ToString().Trim() + ; strWhereCondition = where + strWhereCondition; /按教师号,教师名或者教师系别查询课程 sqlText = select * from tbTeacher + strWhereCondition; DataTable dt = new DataTable(); dt = DBBase.GetDataTable(sqlText); /运行SQL查询语句 gvTeacherInfo.DataSource = dt; gvTeacherInfo.DataBind(); /将查询结构绑定到Gridview上(3) gvTeacherinfo的属性设定在本书6.3.2Gridview数据控件的应用中已经详细的介绍过了,大家可以参照前面的内容进行复习,其主要代码如下: protected void gvTeacherInfo_RowCommand(object sender, GridViewCommandEventArgs e) string tno = e.CommandArgument.ToString(); string type = e.CommandName.ToString(); if (type = edit) Response.Redirect(teacherEdit.aspx?Num= + tno + ); return; if (type = dlt) /查询要删除教师的信息 string sqlText1 = select * from tbCourse , tbTeacher, tbSC where tbSC.cno = tbCo and tbCourse.tno = tbT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年五年级数学下册 二 分数2.1 分数的意义(二)说课稿 西师大版
- 第四节 热机教学设计-2025-2026学年初中物理九年级全册(2024)北师大版(2024·郭玉英)
- 2.3配位化合物和超分子说课稿-2025-2026学年高中化学沪科版2020选择性必修2 物质结构与性质-沪科版2020
- 2023二年级数学上册 4 表内乘法(一)2 2~6的乘法口诀第3课时 4的乘法口诀配套说课稿 新人教版
- 公司监理工作总结(15篇)
- 中医学员考试题及答案解析
- 2025秋季云南省教育厅招募基础教育银龄教师719人笔试备考题库及答案解析
- 汽车维修保养服务企业股权收购与品牌整合合同
- 矿产资源开发区国有土地租赁及环境治理合同
- 每日一读:新能源产业项目贷款合同设计与风险控制
- YY/T 1437-2023医疗器械GB/T 42062应用指南
- 梦想课程《去远方》(版)分享课程
- 年6万吨废植物油回收利用项目立项申请报告
- 富贵包形成原因及治疗方法
- 电动起子使用教程
- 10000中国普通人名大全
- 钢铁冶金学(炼钢学)课件
- 历史虚无主义课件
- 毕业论文范文3000字(精选十六篇)
- 南京力学小学苏教版六年级上册数学《分数乘分数》公开课课件
- 陶艺制作过程介绍教学课件(共48张)
评论
0/150
提交评论