赞
踩
大家好,今天给大家介绍基于C#+asp.net+sqlserver的网上图书订阅系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:7432个字24页
包含内容:整套源码+完整毕业论文
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
1 引言
1.1 选题背景
省略
1.2 国内研究现状
省略
1.3 课题研究的意义
根据对图书订阅系统现状的调查与分析,我深刻地认识到人工订阅的传统模式必须被淘汰,取而代之的将是结合了计算机与网络技术的、更加自动化的网上图书订阅系统。因此,我选择了网上图书订阅系统作为我的研究课题。
这种系统采用B/S结构模式,实现了足不出户订阅读书。它利用计算机和数据库技术实现动态改变数据库信息,使用户的订阅和查询等服务请求都能在瞬间完成,节省了用户时间,同时方便、准确地更新了数据库,大大减轻了管理员的工作量;它顺应了当今信息化发展趋势,实现了科学化、信息化、合理化的图书订阅管理。
2 理论基础
2.1 数据库技术
省略
2.2 面向对象技术
面向对象技术(OOT)是一种软件开发和程序设计技术,C#具有面向对象编程语言的所有特性,它是微软公司专门为.NET量身定做的编程语言,与.NET有着密不可分的联系。C#的类型就是.NET框架所提供的类型,C#本身并无类库,而是直接使用.NET框架所提供的类库。另外,类型安全检查、结构化异常处理也都是交给CLR处理的。因此,C#是最适合开发.NET应用的编程语言。
C#不仅具有C++的强大功能,而且具有Visual Basic简单易用的特性。具有以下三个典型的特点:
默认情况下,C#代码在.NET框架提供的受控环境下运行,不允许直接操作内存。
C#具有面向对象编程语言所应有的一切特性,如封装、继承和多态。在C#中,每种类型都可以看作一个对象。但C#只允许单继承,从而避免了类型定义的混乱。
C#没有全局函数,没有全局变量和常量,所有的都必须封装在一个类中。因此,用C#编写的代码具有更好的可读性,而且减少了发生命名冲突的可能。
2.3 B/S架构的WEB程序设计技术
B/S(Browser/Server)结构即浏览器和服务器结构。它是随着 Internet技术的兴起,对C/S结构的一种变化或者改进的结构。目前,B/S架构主要使用4种语言:ASP、ASP.NET、PHP、JSP,其中ASP.NET功能强大,编写容易。与ASP相比,ASP.NET增加了很多特性,功能也更为强大:
使用NET提供的所有类库,可以执行以往ASP所不能实现的许多功能。
引入了服务器端控件的概念,这样使开发交互式网站更加方便。
引入了ADO.NET数据访问接口,大大提高了数据访问效率。
提供ASP.NET的可视化开发环境Visual Studio. NET,进一步提高编程效率。
保持对ASP的全面兼容,ASP.NET运行速度快。
ASP.NET全面支持面向对象程序设计。
3 需求分析
3.1 图书订阅系统现状描述
在当今社会不断朝信息化、网络化发展的大背景下,我国很多地方的图书订阅却仍停留在纸介质的基础上,用户的借阅、归还、查询服务都是由管理员进行人工分析处理,工作流程大致如图所示:
图3-1 工作流程图
3.2 现行系统存在的主要问题分析
图书订阅系统的使用是否方便,运行速度是否迅速,信息处理是否准确,直接影响到人们能否及时获得图书信息,然而,现在系统显然不能人们的需求,它存在的主要问题有:
(1) 用户使用很不方便。用户为了借阅或归还图书,可能会排很长的队,这显然是对时间很大的浪费;另外,用户还必须记住所借每本书的借阅时间,并要经常提醒自己及时归还,以免超期,而在生活节奏越来越快的今天,人们日常事务已很繁琐,这种事情会很容易被遗忘。
(2) 管理图书信息相当困难。图书的馆藏量越来越大,管理员要对馆藏的图书信息进行人工管理,工作量相当大,如用户借阅时,要查找厚重的记录册,然后对馆藏数量进行修改;归还时,又要再次修改相应的图书信息。
(3) 处理效率低,准确度差。采用人工方式,不但增加了工作量,浪费了人力,更重要的是不可避免地会降低处理效率,且出错机率大。
3.3 提出解决方案
根据对现有图书现状及存在问题的分析,特提出以下解决方案:
(1) 利用ASP.NET和C#编程语言,结合SQL Server 2000数据库技术。建立一个网上图书订阅系统。
(2) 利用网络技术,通过IIS配置服务器的站点属性,使用户在家就可登录到图书订阅系统,实现网上图书订阅和查询。
(3) 采用SQL Server 2000数据库技术,将图书信息,用户预订信息,用户借阅信息存储在不同的数据表内,实现信息分类管理,并通过编程技术动态改变数据信息。
(4) 通过编程对数据库相关数据表的访问,实现用户对不同信息进行查询。如:用户查询其借阅信息,只需访问借阅信息表,找到该用户的借阅信息,然后在用户端的浏览器上显示出来。
所有功能的后台处理对用户都是透明的,用户只需向服务器提出请求,系统就会迅速、及时提供所需信息,大大地方便了用户。同时,由于采用了计算机和数据库技术,极大减轻了管理员工作量,提高了处理准确度。
4 系统设计
4.1 系统总体架构
本系统的总体功能结构如图:
图4-1 系统模块图
4.2 数据库的设计
根据前面功能模块的设计,系统数据库表包括有“用户信息表”,“用户类别表”,“图书信息表”,“图书类别表”,“图书缓存表”,“添加图书表”,“新书表”,“当前借阅信息表”,“预订信息表”,“借阅历史表”,“还书记录表”,“借阅超期表”, “借阅排行表”,“留言信息表”。
表1:tb_user
功能说明:存放用户信息,包括一般用户和管理员
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
………………
预订超期处理:系统打开后,对数据库中的预订信息表进行查找,找到预订超期的图书(预订允许时间为3天),并取消,取消即是将该条预订信息删除,同时图书信息表作数量更新。关键代码如下:
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");
5 系统实施及测试
5.1 实施概况
本系统的运行环境是Windows +IIS,IIS是Internet Information Server的缩写,它是微软公司主推的服务器,它与WindowNT Server完全集成在一起,因而用户能够利用Windows NT Server和NTFS(NT File System,NT的文件系统)内置的安全特性,建立强大,灵活而安全的Internet和Intranet站点。
本系统配置站点的配置如下:
网站IP地址:127.0.0.1
TCP端口:80
虚拟目录名称:mysite
本地路径:C:\InetPub\wwwroot\bkorder
默认文档:login.aspx
系统的编程环境为C#.NET,数据库为 SQL Server 2000。
为检验系统功能的实现情况,数据准备情况大体如下:
用户信息表中有一个管理员和一个用户;图书信息表中有各类别图书,数量最少为1;预订、借阅信息表中都有超期图书。
5.2 测试方案
本系统几乎所有功能都是对数据库操作,因此,检验功能实现与否是通过检查数据库中数据的变化情况。以“图书借阅”为例,设账号为“2003215026”用户,学历为“本科”,已借阅信息如图:
图5-1 借阅信息
系统规定,本科生可借阅4本图书,该用户已借3本,因此,可再借一本,如图示:
图5-2 借阅成功
现在该用户已借阅4本书,达到可借数量,不能继续借阅,如图示:
图5-3 借阅失败
可见,已达到了预期目标!
5.3 测试结果
该系统经过多次测试,预期功能都能正常实现,能够实现图书的预订和借阅,并能根据用户需要提供相关查询信息,但系统还存在一些不完善的地方,比如:系统运行速度较慢,实际应用中,由于数据量的增加,这种缺陷更加明显;有些界面在使用时不是很友好,如查看图书信息时,不能在页面加载时就显示,而必须通过“点击查看”按钮;系统没有对某些信息形成必要的统计报表,如超期图书信息,管理员如果能将超期信息打印并公布出来,对用户是一种很好的提醒;另外,可能是程序设计方面的问题,系统在运行过程中,偶尔会出现一些意想不到的错误。
结 论
网上图书订阅系统实现了读者随时登录系统,都可方便地进行图书预订、借阅,查询馆藏图书和当前的预订、借阅信息等功能;解决了人工订阅图书时,操作繁琐,订阅信息查询困难,出错率高的问题,极大地方便了读者的订阅和查询。
参考文献
[1] 东方人华.C#编程技术[M].北京:清华大学出版,2001。
[2] (美)威克斯.C#和.NET架构[M].北京:人民邮电出版社,2002。
[3] 黎卫东.ASP.NET网络开发入门与实践[M].北京:人民邮电出版社,2004。
[4] 方睿.网络数据库原理及应用[M].成都:四川大学出版社,2005。
[5] 王晟.Visual C#.NET数据库开发经典案例解析[M].北京:清华大学出版社,2005。
[6] 王保健.ASP.NET网站建设专家[M].北京:清华大学出版社,2005。
[7] 桂思强.ASP.NET与数据库程序设计[M].北京:中国铁道出版社,2002。
致 谢
省略
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于C#+asp.net+sqlserver的网上图书订阅系统设计与实现(源码+文档)_C#_BS架构_网上图书订阅系统.zip |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。