你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / 数据库开发
3.18 Web的课题申报系统(中)
 

 


 

 

用户E-R图如图6所示。

 


 

                                                                             

6 用户E-R

管理员E-R图,如图7所示。


 

 公告E-R图,如图8所示。

 

 


 

8公告E-R

申报时间设置

完成截止时间

完成开始时间

申报开始时间

申报截止时间

 

 

申报时间设置ER图,如图9所示。

 


 

 

                                        9申报时间设置ER

 


申报信息E-R图,如图10所示。

 

 


 

10申报信息E-R

 

课题申报系统中所涉及到的主要实体集及属性如下。

用户﹛自动编号,用户ID,密码,密码提示问题,问题答案,Email,性别,联系地址,邮政编码,电话,注册日期,是否被锁定﹜;管理员﹛自动编号,管理员用户名,密码,权限级别,EmailQQ,联系电话﹜;申报时间设置﹛自动编号,年度,申报开始时间,申报截止时间,完成提交开始时间,完成提交截止时间﹜;申报信息﹛自动编号,课题编号,类别,课题名称,学科分类,负责人,工作单位,办公电话,家庭电话,通讯地址,邮编,成员,评审序号,是否立项,立项编号,申报年度,结项与获奖,用户名,是否已被校对﹜;系统公告﹛自动编号,公告标题,公告内容,发布时间﹜。

3.逻辑结构

    ER图向关系模型的转化要解决的问题是如何将实体和实体间的联系转换为关系模式,如何确定这些关系横式的属性和码。 可将前面的E-R图转换为关系模型。每个关系的码可以用下划线表示。

用户﹛自动编号,用户ID,密码,密码提示问题,问题答案,Email,性别,联系地址,邮政编码,电话,注册日期,是否被锁定﹜;管理员﹛自动编号,管理员用户名,密码,权限级别,EmailQQ,联系电话﹜;申报时间设置﹛自动编号,年度,申报开始时间,申报截止时间,完成提交开始时间,完成提交截止时间﹜;申报信息﹛自动编号,课题编号,类别,课题名称,学科分类,负责人,工作单位,办公电话,家庭电话,通讯地址,邮编,成员,评审序号,是否立项,立项编号,申报年度,结项与获奖,用户名,是否已被校对﹜;系统公告﹛自动编号,公告标题,公告内容,发布时间﹜。

4.物理结构

根据以上分析,系统数据库中各个表的设计结果如表1至表5所示。每个表格表示在数据库中的一个表。本系统中关于数据库表结构设计如下:普通用户信息表(User),管理员信息表(Admin),系统公告表(Announce),申报时间设置表(ExpiredTime),申报信息表(Report)。下面将具体介绍数据库中各个表的结构。

1普通用户信息表(User

 



 

 

四、系统实现

1.数据库连接的建立

本系统使用的数据库为Access2003首先需要在系统的相应目录下建立一个Access数据库,名为LuoHe_Data#KW.mdb然后在Web.config(系统配置文件)中的  <appSettings>节中添加数据库所在路径如数据库在E:\KeWei\database\设置如下代码

 <appSettings>

 <!-- 这里是系统数据库文件,可以根据实际情况修改 -->

 <!--add key="data" value="database\new_baoming.asax" /-->

<add key="ConnectionStr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\KeWei\database\LuoHe_Data#KW.mdb"/>

 </appSettings>

2.系统主页面default.aspx的设计

页面结构如图1所示。此页为用户进入本系统进行申报提供了唯一的入口,用户在输入用户名、密码、图形效验码都正确后才能通过,否则将给出提示出错信息。后台代码如下:

Imports System.Data.OleDb'由于要使用到数据操作故引入System.Data.OleDb

Imports System.Configuration'web.config文件中的有关数据连接的节引入

Imports System.Web.Security'由于要使用到MD5加密,因此引入Security

Partial Class UserLogin

    Inherits System.Web.UI.Page

    Dim myConnection As OleDbConnection'声明一个全局的数据连接变量,供后面使用

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

myConnection=New

OleDbConnection(ConfigurationSettings.AppSettings("ConnectionStr"))

'当页面加载时,将一个数据连接实例化

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

  If Not TextBox_CheckNum.Text = Session("vali") Then

    Response.Write("<script>alert('提示:\n\n你输入的验证码错误!');</script>")

  Else

Dim Loginname As String

Dim LoginPassword As String

LoginPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(TextBox_userpass.Text.ToString.Trim, "MD5")

'把用户输入的密码加密

Dim myCommand As OleDbCommand

Dim SqlStr As String

Dim myReader As OleDbDataReader

Loginname = Server.HtmlEncode(TextBox_username.Text.ToString.Trim)

'过滤用户输入HTML代码

SqlStr = "Select UserName,Password,LockUser  from [user] Where UserName=@UserName"

myCommand = New OleDbCommand(SqlStr, myConnection)

yCommand.Parameters.Add(New OleDbParameter("@UserName", OleDbType.VarChar))

myCommand.Parameters("@UserName").Value = Loginname

 Try

    myCommand.Connection.Open()

    myReader = myCommand.ExecuteReader

    If myReader.Read Then

       If myReader("Password") = LoginPassword Then

          If myReader("LockUser") = True Then

            Response.Write("<script>alert('提示:\n\n该用户已被系统管理员锁定,请与系统管理员联系!');</script>")

           Else

             Session("UserName") = myReader("UserName")

             Session("UserType") = "CommonUser"

             Response.Redirect("User/indexUser.aspx")

            End If

    Else

    Response.Write("<script>alert('提示:\n\n你输入的密码不正确!');</script>")

   End If

 Else

       Response.Write("<script>alert('提示:\n\n此用户不存在!');</script>")

End If

            Catch ex As Exception

                Response.Write(ex.Message.ToString)

            Finally

                myCommand.Connection.Close()

            End Try

        End If

    End Sub

End Class

3.通用模块的设计

通用模块是系统运行时经常调用或访问的模块。它包括数据库的连接访问、页面操作数据库以及程序运行过程中的异常处理。

1)生成随机验证码的一个类 

在许多Web应用中,要求用户登录时不仅要输入用户名和密码,还要输入随机验证码,以防止非法用户进行暴力破解,在本系统中,普通用户登录和管理员登录时都要求输入随机验证码,这里将生成随机验证码的操作封装成为一个类Validate.vb,当需要更换、移植系统时,只要对代码做少量的修改即可。Validate.vb类的代码如下:

Imports System

Imports System.Drawing.Drawing2D

Imports System.Drawing.imaging

Imports System.Drawing

Imports System.Web.UI

Imports System.IO

Public Class Validate

Public Class CreatValidateNumber

'生成验证码

Public Function CreatValidateNumber(ByVal length As Integer)

Dim vchar As String =

"0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,w,x,y,z"

Dim vcarray() As String = Split(vchar, ",") '将字符串生成数组

Dim vnum As String = ""

Dim i As Byte

For i = 1 To length

Randomize()

vnum = vnum & vcarray(Int(35 * Rnd()))

'数组一般从0开始读取,所以这里为35*rnd

Next

Return vnum

End Function

'创建验证码图片

Public Sub CreatevalidateGraphic(ByVal page As Page, ByVal validatenum As String)

Dim image As Bitmap = New Bitmap(CInt(Math.Ceiling(validatenum.Length * 12.5)), 2)

Dim g As Graphics = Graphics.FromImage(image)

    Try

         '生成随机生成器

         Dim random As New Random

         '清空图片背景色

         g.Clear(Color.White)

         '画图片的干扰线

         Dim i As Integer

         For i = 0 To 24

                    Dim x1 As Integer = random.Next(image.Width)

                    Dim x2 As Integer = random.Next(image.Width)

                    Dim y1 As Integer = random.Next(image.Height)

                    Dim y2 As Integer = random.Next(image.Height)

                    g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)

         Next

        '画验证码

         Dim font As Font = New Font("Arial", 12, (FontStyle.Bold And FontStyle.Italic))

         Dim brush As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)

                g.DrawString(validatenum, font, brush, 3, 2)

                '画前景干扰点

                For i = 0 To 24

                    Dim x As Integer = random.Next(image.Width)

                    Dim y As Integer = random.Next(image.Height)

                    image.SetPixel(x, y, Color.FromArgb(random.Next()))

                Next

                '画图片的边框线

                g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)

                '保存图片

                Dim stream As New MemoryStream

                image.Save(stream, ImageFormat.Jpeg)

                '输出图片

                page.Response.Clear()

                page.Response.ContentType = "image/jpeg"

                page.Response.BinaryWrite(stream.ToArray())

                Catch ex As Exception

                Finally

                g.Dispose()

                image.Dispose()

            End Try

        End Sub

    End Class

End Class

当上面的类被实例化以后我们就能使用它了

Public validates As New Validate.CreatValidateNumber

Public vali As String

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        vali = validates.CreatValidateNumber(5)

        validates.CreatevalidateGraphic(Me, vali)

        Session("vali") = vali

    End Sub

 

1.1.1  2)用户身份识别的一个类

在本系统中,由于各个页面都必须是具有合法身份的用户才能有权限查看,显然不可能在各个页面里面都写一段关于用户身份检测的代码,因此,有必要建立一个简单的类来实现,然后就可以直接引用过来使用,本系统中的用户身份检测类为CheckUser.aspx.vb。其代码如下:

Public Class CheckUser

    Inherits System.Web.UI.Page

#Region " Web 窗体设计器生成的代码 "

#End Region

    '检查普通用户

    Public Function CheckUser()

 If (Session("UserName") <> "" And Session("UserType") = "CommonUser") Then

'普通用户验证

            Return True

        Else

            Return False

        End If

    End Function

    '检查管理员

    Public Function CheckAdmin()

      If (Session("AdminName") <> "") And (Session("AdminType") <> "") Then

            If (Session("AdminType") = "0") Then

                Return "0" '一般管理员

            ElseIf (Session("AdminType") = "1") Then

                Return "1" '超级管理员

            End If

      Else

            Return "False" 'False代表没有登录

      End If

    End Function

End Class

4.各子模块程序设计举例

1)项目申报管理

在本次设计中,项目申报管理模块是调研课题申报系统的核心功能部分,现在将有关部分加以介绍,其余代码参考系统源码。

1)打印校对报表(ReportCheckPrint.aspx

打印校对报表是系统的核心功能之一,主要用于将该年度已经提交但尚未确认信息的课题申报情况打印出来,然后供用户亲笔签名确认,类似于现场确认的形式,管理员在用户确认信息之后,再进入系统管理后台,逐一进行校对,以使得通过校对的信息是真实准确的课题申报。效果如图11所示。

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089