ASP.NET网上图书预约系统的设计

news2024/12/26 21:30:48

摘  要

《网上图书预约系统的设计》是以为读者提供便利为前提而开发的一个信息管理系统,它不仅要求建立数据的一致性和完整性,而且还需要应用程序功能的完备、易用等特点。系统主要采用VB.NET作为前端的应用开发工具,利用SQL Server2000数据库作为后台的数据库,利用WINDOWS XP作为系统平台,采用VB.NET的ADO.NET数据访问规范来访问和操作数据库进行开发的供用户管理和操作图书的桌面数据库系统。它的主要功能是实现用户在网上进行图书的预约以及管理员对图书和用户的管理。系统的使用对象可以是高校或者其他单位的图书馆的读者和管理人员。

本文主要讲述了VB.NET的基本概述及设计方法,紧接着以此系统为例,逐一介绍系统的设计开发,系统分为六个模块:用户身份验证模块、用户个人信息管理模块、图书查询预约模块、信息发布模块、图书管理模块、系统管理模块。在系统分析中先后用系统的功能结构图、数据库的E-R图、数据库表分析了系统所需的各种数据。在系统的设计中,详细的展现了系统的各个功能模块及核心代码。

关键词图书;预约;VB.NET;数据库

3.1  功能设计

通过对用户需求调研及分析,确定系统应具备的功能,包括:安全管理,用户个人信息管理,图书查询及预约,信息发布,图书信息管理,用户信息管理,用户角色权限管理。其具体功能设计如下:

1、安全管理

提供用户登录、注销以及修改密码等功能。

2、用户个人信息管理

每个用户可以对自己的信息进行查看以及修改密码等操作,还可以查看和删除自己的预约信息。

3、图书查询及预约

根据一定的条件对图书进行查询,并可以查看图书的详细信息。用户登录后可以对查询到的图书进行预约操作。

4、信息发布

用户可以查看当前最新图书信息以及当前预约信息和历史预约信息。

5、图书信息管理

图书管理员可以对图书进行添加、更新及删除操作。在图书管理员录入图书信息时,需要输入图书名称、图书作者、出版社及价格等信息,同时还需要选择图书状态。对于已存在的图书信息同样可以对其进行修改和删除操作。

6、用户信息管理

系统管理员可以添加新用户,并对用户的信息进行修改更新操作。在用户编辑修改页面,可以更改用户类别和用户状态等,但不可以对用户的ID进行修改。

7、系统角色权限管理

系统管理员可以添加、修改和删除某一角色。对应于某一种角色,有类别名称、是否允许预约、是否允许管理图书信息、是否允许管理系统等参数。

3.2  系统功能结构图

图2 系统功能结构图

4.3   用户个人信息模块

4.3.1  功能描述

在用户个人信息管理模块里主要包括了用户信息页面和个人预约信息页面。用户信息页面包括用户的用户名、姓名、性别、E-Mail、单位、电话、当前状态、是否为图书管理员或系统管理员等信息;个人预约信息页面做成加载控件的形式,通过传递参数在ListContent.aspx页面动态加载控件。

4.3.2  个人预约信息控件BookingList.ascx的设计

个人预约信息控件中,Page_Load()函数在首次加载页面时绑定DataGrid,通过加载控件后显示图书的相关信息及预约时间、到书时间、是否到书的通知、预约状态等信息,并且根据参数不同进行相应的删除预约信息等操作。其主要后台处理代码如下:

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

        If Not IsPostBack Then

            BindDBGrid ()

        End If

End Sub

Private Sub BindDBGrid ()

Dim sqlstr As String = String.Empty

sqlstr += "select b.BookID, b.BookName, b.BookAuthor,"

sqlstr += " b.ISBN, b.SearchNO, a.BookingDate, returnDate = case b.isBorrow"

sqlstr += " when 0 then b.UploadDate"

sqlstr += " when 1 then dbo.f_GetReturnDate (a.BookID) end ,"

sqlstr += " stateMsg = case a.State when 1 then '有效' when 2 then '已过期' end,"

sqlstr += " isReturned = dbo.f_GetIsReturned (a.BookID, getDate ())"

sqlstr += " from BookingInfo a inner join BookInfo b"

sqlstr += " on a.BookID = b.BookID where a.State <> 0 and a.UserID = '" + Session ("UserID").ToString () + "'"

Dim obj As DBController = New DBController

obj.BindDBGrd (sqlstr, BookingGrid)

End Sub

4.3.3  个人预约信息的主界面图

图8 个人预约信息界面

​​​​​​​4.4   图书查询预约模块的设计

4.4.1  功能描述

图书查询模块主要包含了简单查询页面(SimpleSearch.aspx)、普通查询页面(NormalSearch.aspx)和高级查询页面(AdvSearch.aspx)。特别要注意的是,用户预约成功的书在登录后不能查询出来。

4.4.2  预约流程图

图9 预约流程图

4.4.3  简单查询页面SimpleSearch.aspx的设计

在Page_Load()函数中,首先判断用户是否允许预约,如果不允许预约操作,则隐藏预约按钮。

MisBtn_Click()函数处理“模糊查询”按钮的单击事件,获取查询条件,组成查询的SQL语句,然后进行数据绑定,其主要处理代码如下:

Private Sub MisBtn_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MisBtn.Click

     QuerySql ()

     If txtContent.Text.ToString.Trim <> "" Then

         Dim str As String = txtContent.Text.ToString.Trim

         sqlstr += " where a.BookAuthor like '%" + str + "%' or a.Subject like '%" + str + "%' or a.BookName like '%" + str + "%'"

     End If

     Session ("sqlstr") = sqlstr

     BindGrid ()

End Sub

BookingBtn_Click()函数处理“预约”按钮单击事件,其处理函数首先获取所有被选中的图书ID,然后组成SQL语句插入到预约信息表中。如果用户预约成功后,则弹出“预约成功”的提示框。其主要处理代码如下:

Private Sub BookingBtn_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BookingBtn.Click

Dim i As Integer

Dim userID As String = Session ("UserID")

Dim str As String = ""

Dim myCheckBox As CheckBox

For i = 0 To ResultGrid.Items.Count - 1

myCheckBox = CType (ResultGrid.Items (i).FindControl ("ChckBox"), CheckBox)

If myCheckBox.Checked = True Then

         str += "if(not exists(select 1 from BookingInfo where bookid=" + ResultGrid.Items(i).Cells(6).Text + " and userid='" + userID + "')) insert into BookingInfo (UserID,BookID,BookingDate,BookingState) values('" + userID + "'," + ResultGrid.Items(i).Cells(6).Text + ",getdate(),0)"

End If

Next

Dim obj As DBController = New DBController

obj.ExecNonSql (str)

Response.Write("<script>javascript:alert('预约成功!!!');</script>")

End Sub

4.4.4  普通查询页面和高级查询页面的设计

这两个页面与简单查询页面的设计只是其查询的条件有所不同。

4.4.5  简单查询页面的主界面图

图10 简单查询界面

​​​​​​​4.5  信息发布模块的设计

4.5.1  功能描述

信息发布模块包括查看最近上架的图书信息页面(NewBook.aspx)、当前预约信息控件(BookingIn.ascx)和历史预约信息控件(HisBooking.ascx)通过MsgContainer.aspx页面加载。

4.5.2  新书查询页面NewBook.aspx的设计

在该页面中,只需添加一个下拉框,让用户在下拉框中选择时间,提供查询按钮,在Datagram中显示出来,对DataGrid进行数据绑定函数以提供调用,在此DataGrid中实现分页、排序、查看图书信息等功能。SearchBtn_Click()函数处理“查询”按钮单击事件,获取查询条件,其中需要对时间进行特别的处理。

4.5.4  控件加载页面MsgContainer.aspx的设计

控件加载页面中通过table的单元格来控制控件的加载,在<TD>中加runat="server",并为其添加ID。在Page_Load()函数中通过识别type传递参数来加载不同控件,1表示加载当前预约信息控件,2表示加载历史预约信息控件。

当前预约信息控件(BookingIn.ascx)主要用来显示用户的有效预约信息。通过对DataGrid进行数据绑定,显示有效预约状态的用户的用户名、姓名及单位,有效预约的图书的书名、著者、预约时间及到书时间和当前预约状态。其主要处理代码如下:

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

        If Not IsPostBack Then

        Dim sqlstr As String = String.Empty

        sqlstr += "update BookingInfo set State = 2 where State = 1 and dateadd (day, 2, dbo.f_GetBookingDate (BookID, BookingDate)) < getDate ()”

        sqlstr += "select a.UserID, a.UserName, a.Unit, b.BookingDate,"

        sqlstr += "c.BookName, c.BookAuthor, returnDate = case c.isBorrow "

        sqlstr += "when 0 then c.UploadDate "

        sqlstr += "when 1 then dbo.f_GetReturnDate (c.BookID) end,"

sqlstr += "State = case b.State when 0 then '失效' when 1 then '有效' when 2 then '已过期' end "

        sqlstr += "from UserInfo a inner join BookingInfo b on a.UserID=b.UserID inner join BookInfo c "

        sqlstr += "on b.BookID = c.BookID where b.State <> 0 order by b.State desc "

        Dim obj As DBController = New DBController

        obj.BindDBGrd (sqlstr, BookingGrid)

        End If

End Sub

历史预约信息控件(HisBooking.ascx)主要用来显示用户的失效和过期预约信息。通过对DataGrid进行数据绑定,显示失效和过期预约状态的用户的用户名、姓名及单位、历史预约的图书的书名、著者及预约时间和当前预约状态。用户在规定时间内去借阅已经预约成功的图书后,其预约状态将修改为“失效”;反之,如果用户没有在规定时间内去借阅已经预约成功的图书,则他的预约状态将修改为“过期”。

4.5.5  当前预约信息的主界面图

图11 当前预约信息界面

4.5.6  历史预约信息的主界面图

图12 历史预约信息界面

​​​​​​​4.6   图书管理模块的设计

4.6.1  功能描述

图书管理模块主要实现对图书信息的管理,包括了图书添加页面(AddBook.aspx)和图书编辑页面(EditBook.aspx)。 添加图书页面主要是在AddBtn_Click()函数处理用户单击“添加”按钮事件,将用户输入的图书信息组成SQL语句,然后插入数据库中;图书编辑页面将该页面左侧的ListBox控件跟数据库进行绑定,用以显示所有图书列表,当用户单击某一图书后,自动将图书信息填充到右边的图书信息明细中,用户可对其进行更新和删除操作。在该模块中,图书管理员还能够根据用户名和图书条码号对图书进行借、还操作,对于某用户预约成功的图书进行借阅后,该用户的预约状态将修改为“失效”。

4.6.2  图书编辑页面的主界面图

图13 图书编辑界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1646066.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7zip如何只压缩文件不带上级目录?

在使用7zip进行文件压缩的时候&#xff0c;如果直接选择要压缩的文件进行压缩&#xff0c;得到的压缩包则会多包含一层顶层目录&#xff0c;解压缩之后需要点击两次才能进入到实际目录中&#xff0c;为了解决这个问题&#xff0c;本文根据探索找到了一种解决办法。 如下是一个演…

【星海随笔】windows 上跑MySQL

step one 使用 WSL 在 Windows 上安装 Linux wsl官方文档 在管理员模式下打开 PowerShell windows上安装wsl wsl --install查看哪些是可用的 wsl --list --onlineC:\Windows\System32\drivers\hosts docker-desktop下载官网&#xff1a;Install Docker Desktop on Windows …

Java苍穹外卖04-

一、缓存菜品 1.问题说明 2.实现思路 就是点击到这个分类的时候就可以展示相应的菜品数据 3.代码实现 在user的菜品的contoller中&#xff1a;增加判断redis中是否存在所需数据&#xff0c;不存在添加&#xff0c;存在直接取得 这里注意&#xff1a;你放进去用的是List<Di…

数码管的显示

静态数码管显示 数码管有两种一种的负电压促发,一种是正电压促发,上图是单数码管的引脚 上图是数码管模组的引脚,采用了引脚复用技术 咱们这个单片机由8个单数码管,所以要用上38译码器,如下图 74138使能端,单片机上电直接就默认接通了 74HC245的作用是稳定输入输出,数据缓冲作…

memory consistency

memory consistency model 定义了对于programmer和implementor来说&#xff0c;访问shared memory system的行为&#xff1b; 对于programmer而言&#xff0c;他知道期望值是什么&#xff0c; 知道会返回什么样的数据&#xff1b;&#xff1b; 对于implementro而言&#xff0c;…

npy文件如何追加数据?

.npy 文件是 NumPy 库用于存储数组数据的二进制格式&#xff0c;它包含一个描述数组结构的头部信息和实际的数据部分。直接追加数据到现有的 .npy 文件并不像文本文件那样直接&#xff0c;因为需要手动修改文件头部以反映新增数据后的数组尺寸&#xff0c;并且要确保数据正确地…

电子信息工程专业就业前景怎么样

电子信息工程专业的就业前景十分广阔&#xff0c;主要得益于现代社会对信息技术的依赖不断加深以及科技的快速发展&#xff0c;以下是上大学网&#xff08;www.sdaxue.com&#xff09;对该专业就业前景的具体分析&#xff0c;供大家参考&#xff01; 行业需求广泛&#xff1a;随…

Partisia Blockchain 生态zk跨链DEX上线,加密资产将无缝转移

在 5 月 1 日&#xff0c;由 Partisia Blockchain 与 zkCross 创建合作推出的 Partisia zkCrossDEX 在 Partisia Blockchain 生态正式上线。Partisia zkCrossDEX 是 Partisia Blockchain 上重要的互操作枢纽&#xff0c;其融合了 zkCross 的 zk 技术跨链互操作方案&#xff0c;…

vue2实现生成二维码和复制保存图片功能(复制的同时会给图片加文字)

<template><divstyle"display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;"><div><!-- 生成二维码按钮和输入二维码的输入框 --><input v-model"url" placeholder"输入链接" ty…

重写muduo之EPollPoller

1、EPollPoller.h EPollPoller的主要实现&#xff1a;作为poller的派生类&#xff0c;把基类给派生类保留的这些纯虚函数的接口实现出来。 override表示在派生类里面&#xff0c;这些方法是覆盖方法。必须由编译器来保证在基类里面一定有这些函数的接口的声明。在派生类要重写…

[蓝桥杯2024]-PWN:ezheap解析(堆glibc2.31,glibc2.31下的double free)

查看保护 查看ida 大致就是只能创建0x60大小的堆块&#xff0c;并且uaf只能利用一次 完整exp&#xff1a; from pwn import* #context(log_leveldebug) pprocess(./ezheap2.31)def alloc(content):p.sendlineafter(b4.exit,b1)p.send(content) def free(index):p.sendlineaft…

代码随想录算法训练营DAY46|C++动态规划Part8|139.单词拆分、多重背包理论基础、背包问题总结篇

文章目录 139.单词拆分思路CPP代码 多重背包理论基础处理输入把所有个数大于1的物品展开成1个开始迭代&#xff0c;计算dp数组代码优化 背包问题总结篇 139.单词拆分 力扣题目链接 文章讲解&#xff1a;139.单词拆分 视频讲解&#xff1a;你的背包如何装满&#xff1f;| LeetCo…

体育老师工资高吗,奖金有吗

教师的薪资水平与多种因素相关&#xff0c;包括教育经验、工作地点、学校类型以及个人的教学成果等。在讨论体育教师的工资问题时&#xff0c;不能仅仅关注数字&#xff0c;更应了解教育价值和个人发展。 初中体育教师的工资水平受多种因素影响。根据网络统计的数据&#xff0c…

STM32F4xx开发学习—GPIO

GPIO 学习使用STM32F407VET6GPIO外设 寄存器和标准外设库 1. 寄存器 存储器映射 存储器本身是不具有地址的&#xff0c;是一块具有特定功能的内存单元&#xff0c;它的地址是由芯片厂商或用户分配&#xff0c;给存储器分配地址的过程就叫做存储区映射。给内存单元分配地址之后…

页面多开、谷歌浏览器解决不能批量打开问题、批量打开被限制

目录 问题原因谷歌浏览器解决办法来看效果 问题 我们使用批量打开页面的时候 只能打开第一个页面 原因 这种问题是因为 浏览器限制了浏览器的弹出 并不是人家页面功能不能用 谷歌浏览器解决办法 在浏览器输入这个路径 chrome://settings/content/popups?search%E9%87%…

Vue MVVM这一篇就够啦!

Vue vs React 相似之处: 它们都有使用 Virtual DOM虚拟DOM-CSDN博客&#xff1b;提供了响应式&#xff08;Reactive&#xff09;和组件化&#xff08;Composable&#xff09;的视图组件。将注意力集中保持在核心库&#xff0c;而将其他功能如路由和全局状态管理交给相关的库。R…

Python安装以及环境配置

目录 一、下载安装包二级目录三级目录 一、下载安装包 方式网址Python官网python.org镜像下载地址Download pythonpycharmDownload PyCharm https://blog.csdn.net/sun80760/article/details/135256627 二级目录 三级目录

Spring+SpringMVC+Jsp实现校园二手交易系统

前言介绍 在社会快速发展的影响下&#xff0c;使校园二手交易系统的管理和运营比过去十年更加理性化。依照这一现实为基础&#xff0c;设计一个快捷而又方便的网上校园二手交易系统是一项十分重要并且有价值的事情。对于传统的管理控制模型来说&#xff0c;网上校园二手交易系…

C++构造函数和析构函数的调用顺序

一般情况下&#xff0c;调用析构函数的次序正好与调用构造函数的次序相反&#xff0c;也就是最先被调用的构造函数&#xff0c;其对应的析构函数最后被调用&#xff0c;而最后被调用的构造函数&#xff0c;其对应的析构函数最先被调用。 当然对象的构造函数和析构函数调用时机和…

图片浏览器-PicView

一、前言 PicView 是一款适用于 Windows 10 或 11 的快速高效的图像查看器&#xff0c;配备了干净简洁的用户界面&#xff0c;可以在不需要时方便地隐藏。 二、支持类型 它支持广泛的图像文件类型&#xff0c;包括&#xff1a;WEBP、GIF、SVG、PNG、JXL、HEIC、PSD 三、软件特…