ASP.NET网上图书订阅系统的设计

news2024/11/25 0:47:37

 

网上图书订阅系统基于 Microsoft SQL Server 2000和ASP.NET平台,以C#为编程语言开发,实现了网上图书预订和借阅,订阅信息查询,图书和用户信息的修改,借阅排行和新到图书的查询等功能,这样不但可将管理员从繁重的劳动中解脱出来,提高管理图书的效率,更重要的是可以使每一位读者足不出户就能够通过上网来轻松订阅图书,查询相关订阅信息。

关键词图书预订;图书借阅;订阅信息查询;图书管理

4.1  系统总体架构

本系统的总体功能结构如图:

图4-1 系统模块图

4.3  系统功能模块设计

4.3.1  登录模块

图4-2 登录页面

用户在登录框内输入登录信息,系统账号信息记录到Session变量,并判断该密码和账号是否匹配,如果匹配则登录成功,进一步判断该用户是一般用户还是管理员,然后跳转到对应的用户页面。关键代码如下:

string strComm="select * from tb_user where userid='"+userid+"'";//查找用户信息表

         …………

                  if((sdr["userpassword"].ToString()==userpwd))//密码正确

                      {

                          string strComm1="select * from tb_userkind where kindid='"+sdr["userkind"].ToString()+"'";//查找该用户权限

…………

    if(sdr1["kindname"].ToString()=="管理员")//如果身分是管理员,则跳转到管理员页面

    Response.Redirect("admin.aspx?name="+ System.Web.HttpUtility.UrlEncode(sdr["username"].ToString()));

4.3.2  信息查询模块

图4-3 信息查询模块图

管理员可输入账号查看用户信息,也可以浏览的方式查看所有用户信息。以浏览方式查看信息效果图:

图4-4 用户信息浏览

采用数据绑定,将用户信息表中一般用户的账号绑定到DataGrid控件,关键代码如下:

string strComm="select userid,username,userkind  from tb_user where userkind='002'";

             SqlDataAdapter sda=new SqlDataAdapter(strComm,Conn);

             DataSet ds=new DataSet();

             sda.Fill(ds,"tb_user");

             dg.DataSource=ds.Tables["tb_user"].DefaultView;

             dg.DataBind();

细息:

图4-5 用户详细信息

查询馆藏图书信息:

图4-6 图书信息查询

从上图可知,用户根据四种关键字类型选择进行精确或模糊查询,以“编号”,“模糊查询”为例,输入“a”,查询结果如下:

图4-7 查询结果

关键代码如下:

…………

if(rd_id.Checked)//如果关键字类型为编号

…………     

else  //如果为模糊查询

…………

string strComm="select * from tb_book where bookid like '%"+srchkey+"%'";//查找编号类似的图书

…………

if(ds.Tables["tb_book"].Rows.Count>0)//查找的图书存在,绑定到控件

{

dg_bk.DataSource=ds.Tables["tb_book"].DefaultView;

    dg_bk.DataBind();

}

else

Response.Write("<script>alert(\"类似编号不存在!\");</script");

…………

借阅排行查询:需要访问tb_cntborrow表,这是用来记录所借图书借阅量的表,表中记录的产生是在用户借阅图书时,同时更新tb_cntborrow表中,该图书编号对应的借阅数量。当用户点击“借阅排行”时,按借阅量降序显示。

更新借阅量关键代码如下:

string strcnt="select * from tb_cntborrow where bookid='"+id+"'";//表中是否已存在该图书

                          …………//如果有,则借阅量+1更新

                          {

                          ……………………

                               string ordnum=sdrstr["ordernum"].ToString();

                               int ordtim=int.Parse(ordnum)+1;

                               string updtcnt="Update tb_cntborrow set ordernum='"+ordtim+"' where bookid='"+id+"'";

……………………}

                          Else//如果该编号图书不存在,插入图书信息,借阅量设为1

                          {…………

string strin="insert into tb_cntborrow (bookid,bookname,ordernum)values('"+id+"','"+bkname+"','1')";

…………

                         

                                 

     借阅超期查询:访问超期信息表tb_overborrow,该表的产生在后面的章节中介绍。新书查询:访问新书信息表tb_newbook。系统规定15天内到馆的图书为新书,新书入库时,系统将新书信息加入该表,在用户页面加载时,删除表内到馆时间超过15天的图书,剩下的即为新书,关键代码如下:

    string strComm="select * from tb_newbook";………………

DateTime t1=DateTime.Parse(tim);

                  TimeSpan ts=DateTime.Now-t1;

                  int n=ts.Days;

                  if(n>15)

                  { string strComm1="delete  from tb_newbook where intime='"+tim+"'";

………………   }

4.3.3  数据管理模块

该模块主要是系统在实现特定功能时,对相关数据表的更新操作,以及根据需要对数据库中的数据进行删除或修改。

图4-8 数据管理模块

预订:首先查找tb_book表中是否有该图书,如果没有,弹出提示信息;如果有,下一步就在tb_user表中查找登录用户,即Session[“User”]的学历,不同的学历允许不同的预订数量,再从tb_reserve预订信息表中查找到该用户的预订数量,如果已达到允许量,则不能继续预订;否则可预订,首先根据需要更新图书暂存信息表tb_bkcache,再将相关信息插入tb_reserve表,并对tb_book表中该编号图书的信息作更新。

以用户学历是本科为例,允许预订数量为2本,实现预订的关键代码如下:

…………

string strsel="select * from tb_book where bookid='"+id+"' ";

//判断该书是否已被预订、借阅完

         …………

             if(!sd.Read())

             {

                  Response.Write("<script>alert(\"书已借完\");</script");

              }

…………

string strdgr=ds.Tables["tb_user"].Rows[0]["degree"].ToString();//用户学历

……

         int num=(int)Comm3.ExecuteScalar();//已预订数量

                  …………

                      if(strdgr=="本科") {

                          if(num<2)//满足预订条件,对相关表进行操作

…………

                           lb_msg.Text="您已预订";//已达到允许预订量

                          txb_msg.Text=num.ToString();

                          lb_msg2.Visible=true;

                          lb_msg2.Text="本!";

…………

借阅:不同学历有借阅数量限制,功能实现部分代码跟预订类似,不再累述。所不同的是,借阅后,会更新借阅数量表tb_cntbook,同时,将相关信息插入用户借阅历史表tb_brohistory。更新tb_cntborrow的关键代码如下:

……………

string strcnt="select * from tb_cntborrow where bookid='"+id+"'";//表中是否已存在该图书

                          …………//如果有,则借阅量+1更新

                          {

                          ……………………

                               string ordnum=sdrstr["ordernum"].ToString();

                               int ordtim=int.Parse(ordnum)+1;

string updtcnt="Update tb_cntborrow set ordernum='"+ordtim+"' where bookid='"+id+"'";

……………………}

Else//如果该编号图书不存在,插入图书信息,借阅量设为1

                          {……………………

String   strin="insert into tb_cntborrow (bookid,bookname,ordernum)values('"+id+"','"+bkname+"','1')";

……………………}

归还图书:如果是超期图书,用户不能自行归还,须由管理员处理,借阅时间超过30天,为超期图书;如果没有超期,需做以下处理:将相关信息插入还书记录表tb_return,更新图书信息表tb_book,如果表中该书没借完,则数量+1更新,否则,从tb_bkcache中,找到该图书信息,插入到tb_book,数量设为1,最后,删除tb_borrow中,该条借阅信息。

判断是否超期、超期提示关键代码:

…………

string tim=ds.Tables["tb_borrow"].Rows[0]["ordertime"].ToString();//获取借阅时间

……

DateTime t1=DateTime.Parse(tim);

    TimeSpan ts=DateTime.Now-t1;

…………

             if(tover<=3&&tover>0)//如果没有超期,但离超期时间小于3天

             {

                  Label1.Text="离超期还有";

                  txb_over.Text=tover.ToString();//显示离超期还有几天

              }

    …………

                  if(ndays>30)

                  {……

                  Label1.Text="借阅超期";

                 txb_over.Text=over.ToString();//显示超期时间

归还不能完成,显示提示信息:

if(ndays>30)//如果超期

             {

                  Response.Write("<script>alert(\"书已超期,需由管理员退还!\");</script");

}

Else//没有超期

             {……

    string strCm="insert into tb_return(userid,bookid,bookname,returntime)values('"+usrid+"','"+bookid+"','"+bknm+"','"+notim+"')";//插入到归还记录表

…………}        

图4-9 新书入库

后台处理时,查找图书类别表tb_bookkind,自动将类别名转换为类别编号,同时将该类别图书编号自动加1更新;入馆时间,默认为系统当前时间,新书信息需要插入到图书信息表和新书表,即tb_book和tb_newbook。

设置新书编号的关键代码如下:

………………

int d=Convert.ToInt32(Comm1.ExecuteScalar());//将该类编号总数转化为整形

int n=d-1;

………………

string num=ds.Tables["tb_book"].Rows[n]["bookid"].ToString();//找到最后一条记录的图书编号bookid

string str1=num.Substring(1,4);//取最后4个字母,如编号为A0006,则取0006

string str2=num.Substring(0,1);//取第一个字母,如编号为A0006,则取A

…………接下页…………

string str3=(int.Parse(str1)+1).ToString().PadLeft(4,'0');//先将0006转化为整形,加1,得到7,再在7前添0,补足4位

string bkid=str2+str3;//将第一个字母与后4位字母相加,如A+0007得到A0007,即新书编号为A0007

………………

string strComm="select * from tb_reserve";

string rsvtim=sdr["reservetime"].ToString();//获取预订时间

                  DateTime rsvt1=DateTime.Parse(rsvtim);

                  TimeSpan rsvts=DateTime.Now-rsvt1;//到当前时间为止,计算预订时间

                  int rsvn=3;//允许预订时间为三天

                  int rsvndays=rsvts.Days;//将预订时间转换为天数

             //  int rsvover=rsvndays-rsvn;

                  if(rsvndays>3)//如果大于三天,则为预订超期图书,作处理

…………

    string strq=sdr1["quantity"].ToString();//如果馆内还有该书,则数量加1

                          int quan=Int32.Parse(strq)+1;

string strUpdate="update tb_book set quantity='"+quan+"'where bookid='"+bkid+"'";

…………

    string strIns1="insert into tb_book (bookid,bookname,bookkind,author,publisher,intime,quantity)values('"+bkid+"','"+bknam+"','"+bkknd+"','"+bkaut+"','"+bkpub+"','"+bkinti+"','1')";//如果馆内无该书,则插入图书信息,数量为1

…………

借阅超期:这是管理员需要了解的信息,因此,在管理员主页加载时,系统将借阅信息表tb_borrow中超期记录插入到超期信息表tb_overborrow。

4.3.4  系统管理模块

该模块主要是为了更好的地管理系统而设计的。

图4-10 系统管理模块

网站计数器:个记录网站访问量,代码如下:

             Application.Lock();//锁定

             Application["Count"]=Convert.ToInt32(Application["Count"])+1;

             Application.UnLock();//解锁

             lbct.Text=Application["Count"].ToString();

留。

图4-11 留言板

注销: Session值清空,返回登录页面。关键代码为:

    Session.Abandon();

    Response.Redirect("login.aspx");

系统实施及

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

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

相关文章

鸿蒙ArkUI-X跨平台开发电商应用

一、ArkUI-X 简介 ArkUI-X 是由 OpenHarmony TSC - 跨平台应用开发框架 TSG 所孵化的开源项目,使用ArkUI-X可以让开发者基于一套主代码, 就可以构建支持多平台的精美、高性能应用。目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。 ArKUI跨平台…

5款AI工具推荐

当下AI大行其道&#xff0c;各种神奇的工具层出不穷。除了ChatGPT、Midjourney等耳熟能详的明星产品&#xff0c;还有不少可圈可点的AI应用值得一提。 Kimi 这是一款基于GPT技术的国产对话AI&#xff0c;对中文的理解和生成能力相当出色。不管是闲聊对话&#xff0c;还是应对…

SQL编程 (变量的定义与使用)

一、标识符的命名规范 1不能数字开头 2不允许保留关键字 3符号只允许_或$ 二、变量的声明 set用于声明变量&#xff0c;update声明修改的表&#xff0c;set是声明修改的列。 set userName大聪明; select userName as 名称; 可以简便的统写为 set userName:大聪明; 先建…

Hive Windows Functions 窗口函数

Hive Windows Functions 窗口函数 在 Hive 中&#xff0c;窗口函数&#xff08;Window Functions&#xff09;用于在查询结果中执行聚合、排序和分析操作&#xff0c;而无需将数据分组。窗口函数允许你在查询结果中的一组行上执行计算&#xff0c;而不会改变原始数据的行数&am…

如何做好产业园运营?树莓集团成都数字产业园运营模式全解析

如何做好产业园运营&#xff1f;本篇将对树莓集团产业园运营模式进行介绍&#xff0c;并详情分析旗下运营代表案例&#xff0c;成都数字产业园运营——国际数字影像产业园。 树莓集团作为数字产业生态链建设者&#xff0c;秉持高效、友善、敢为的集团核心文化&#xff0c;有效链…

免费的国内版 GPT 推荐,5个国产ai工具

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

ImportError: cannot import name ‘compare_mse‘ from ‘skimage.measure‘

问题描述 在复现模型代码的时候遇到错误&#xff1a;ImportError: cannot import name compare_mse from skimage.measure 。 解决方案 这是由于 scikit-image 的版本问题&#xff0c;由于scikit-image版本升级后就修改了库函数。 方法1&#xff08;修改scikit-image版本&…

【数据分析面试】40.20个数据开发治理基础问题

在当今数字化时代&#xff0c;数据已成为企业最重要的资产之一 。如何管理数据、确保数据的安全性和质量&#xff0c;以及如何有效地利用数据来推动业务发展&#xff0c;这些都是我们面临的挑战。 目录 数据开发基础概念1. **什么是数据字典&#xff1f;它在数据管理和数据开发…

Excel——项目管理,设置时间到期自动提醒及颜色高亮

效果图 第一步、自动获取合同到期日期 1、首先合同【签约日期】和【到期日期】下面的数据必须是日期格式&#xff0c;不能是其它的格式否则无法计算&#xff0c;如果是其它格式需要转换成标准的日期格式&#xff0c;如下图所示。 2、在“到期日期”下面的第一个单元格中输入公…

地埋式可燃气体监测终端,地下燃气管网安全“哨兵”

在现代都市的繁华之下&#xff0c;一条条地下燃气管网承载着城市的生命与活力&#xff0c;但管网老化腐蚀&#xff0c;第三方施工破坏&#xff0c;巡检维修不到位等问题&#xff0c;时刻影响着燃气管网安全运行&#xff0c;甚至威胁人民群众的生命财产安全。 为实现对燃气管网…

Mac YOLO V9推理测试(基于ultralytics)

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 使用YOLO一般都会接触ultralytics这个框架&#xff0c;今天来试试用该框架进行YOLO V9模型的推理。 YOLOv9目前提供了四种模型下载&#xff1a;yolov9-c.pt、yolov9-e.pt、gelan-c.p…

C++ 多态的相关问题

目录 1. 第一题 2. 第二题 3. inline 函数可以是虚函数吗 4. 静态成员函数可以是虚函数吗 5. 构造函数可以是虚函数吗 6. 析构函数可以是虚函数吗 7. 拷贝构造和赋值运算符重载可以是虚函数吗 8. 对象访问普通函数快还是访问虚函数快 9. 虚函数表是什么阶段生成的&…

Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案

文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…

安卓开发--环境配置

本次项目选择使用 Andrio Studio 进行开发。虽然这款软件版本更新也很快。不过开发一款APP的技术流程是大差不差的。我几年前的安卓笔记放到现在还是能用。 现在CSDN网上写一个笔记留作以后参考&#xff0c;开始吧&#xff01;&#xff01;&#xff01; 1 安装 Andrio Studio …

大数据------JavaWeb------Tomcat(完整知识点汇总)

Web服务器——Tomcat Web服务器定义 它是一个应用程序&#xff08;软件&#xff09;&#xff0c;对HTTP协议的操作进行封装&#xff0c;使得程序员不必直接对协议进行操作&#xff0c;让Web开发更便捷 Web服务器主要功能 封装HTTP协议操作&#xff0c;简化开发将Web项目部署到…

ECO 视频分类模型

ECO分类模型 ECO 分类模型&#xff0c;可以对视频进行分类&#xff0c;视频是静止画面的集合&#xff0c;并短时间内进行播放&#xff0c;在人眼中形成了视频&#xff0c;通过 FPS 单位进行计算&#xff0c;指的是每秒显示多少张图片。如果直接把图片组合一张大图&#xff0c;…

whisper使用

whisper使用 1. 直接调用 语音识别2. 语种识别 whisper.detect_language()和whisper.decode()3. 指定要识别的语种做语音识别**whisper 源码的transcribe函数** 函数解析1. transcript.py2. tokenizer.py3. audio.py4. __ init__.py github: https://gitcode.com/openai/whispe…

JAVA排序相关习题7

1.插入排序 1.1 基本思想 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&#xff0c;得到一个新的有序序列 。 /*** 时间复杂度&…

(附Git的cherry pick神操作)GitLab远程分支多次合并后发现其中一次有问题该如何解决和回滚?

目录 问题现象&#xff1a; 问题分析&#xff1a; 1、不需回滚 2、需要回滚 解决方法&#xff1a; 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 步骤4&#xff1a; 步骤5&#xff1a; 拓展&#xff1a;git代码回滚的可视化操作和命令操作 可视化操作步…

利用OpenShift的ImageStream部署临时版本

公司是港企&#xff0c;项目都部署在OpenShift上统一管理&#xff0c;因为运行环境为香港网络(外网)&#xff0c;配置、中间件等大陆无法直接访问联通。因此在大陆开发时&#xff0c;测试是个很大的问题。为了避免往Git上频繁提交未确定可用的版本&#xff0c;选择用利用OpenSh…