1图书系统罗生存组李建武何月甫.docx
《1图书系统罗生存组李建武何月甫.docx》由会员分享,可在线阅读,更多相关《1图书系统罗生存组李建武何月甫.docx(10页珍藏版)》请在冰豆网上搜索。
1图书系统罗生存组李建武何月甫
数据结构课程设计报告
图书管理系统
题目:
图书管理系统
组长:
罗生存成员:
李建武何月甫
开发日期:
2018-12-30
图书管理网站
团队构成及分工:
职能
成员
任务分工
组长
罗生存
组员
李建武
何月甫
1.统总体分析
实训意义:
本文主要介绍这套基于ASP.NET的图书管理系统,详细介绍了系统分析、系统设计和数据库设计的一些思路和方法。
另外,在系统设计这一章节列出了实现图书管理过程的详细算法。
该系统凭借WEB服务器和客户的浏览器,利用电子工具高效率、低成本的特点,为客户提供交易平台,使用户可以查阅图书、搜索各类图书,为用户提供便捷的服务。
关键词:
图书管理、校园图书查询、ASP.NET
实训目标、内容、准备解决的问题:
1、目标:
针对传统购物模式中耗费人力、物力的弊端,开发出基于ASP.NET的图书管理系统,实现用户对图书的快速查询。
(1>.提供良好的用户界面,减少了用户及网站管理员的工作量;
<2)系统代码精简,运行效率高;
<3)系统扩展性强;
<4)锻炼队伍,提高团队的开发能力和工程管理能力;
2、内容:
对基于图书查询过程进行分析,列出逻辑实现过程,对系统进行逻辑设计和数据库设计,模拟出包括对图书进行浏览、搜索、添加、修改以及对用户信息进行查看、添加、修改等管理功能。
3.准备解决的问题:
减少以往借书时出现的种种尴尬局面<价格、详细信息的不了解)进行的系统的改善,使用户可以轻轻松松地看到自己想要用的图书。
拟采取的方法、技术或设计<开发)工具:
课题的开发环境采用MicrosoftVisualStudio2008+MicrosoftSqlServer2005的开发模式,开发语言是C#。
设计要求
1、认真分析图书系统实现的功能,熟悉其主要操作,充分做好需求分析、设计的内容;依据数据库设计的原则对数据库进行设计。
2、本系统完成后应该初步模拟出对图书管理等功能的全部过程,对于图书信息能够方便快速地录入,以及对不同类别的信息进行相应的管理。
通过本系统,最终实现图书管理的便利化和快捷化。
3、依据所开发的系统撰写相应论文。
2系统功能需求分析
为了实现校园里学生借书时出现的种种尴尬局面,所以开发出了图书管理系统,本系统可以让读者方便地查看到所需图书的详细信息。
根据图书管理系统的逻辑过程,同时参考、分析目前高校里已有的相关图书管理系统,本系统的主要功能需求分为图书查询和系统管理两大模块。
其中图书查询模块的功能由读者使用,可以进行各类图书信息的浏览,如果是注册会员那么可以对本系统进行相应的操作。
系统管理功能由管理员使用,可以实现注册会员管理、图书信息管理。
3.系统设计
3.1总体结构设计
系统结构和功能是系统设计的核心部分,通过系统结构图可以清楚的看出整个系统的结构。
针对每个结构模块分别做分析,为以后的设计和实现打下基础。
根据功能需求,本系统总体上图书查询和系统管理模块,图书查询模块功能读者使用,系统管理模块功能供管理员使用。
系统总体结构如图3-1所示。
3.2模块功能设计
本系统分图书管理模块和系统管理模块,每个模块又有若干个子模块构成,其中图书管理模块主要包括:
图书浏览、图书查询等子模块。
系统管理模块主要包括:
用户信息浏览、用户信息管理等子模块。
3.3数据库设计
系统分析结束后进入设计阶段,抽象地分析数据,理解数据之间的关系,建立E-R模型,然后对数据库进行概念结构设计和逻辑结构设计。
因为SQLServer2005能够以极高的效率完成各种数据库查询,并能方便的使用存储过程,同时它的图形化用户界面,使系统管理和数据库管理更加直观、简单。
另外因为对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。
所以本系统采用了SQLServer2005进行数据库的存储管理与维护。
3.3.1概念结构设计
将需求分析得到的用户需求抽象为信息结构即概念结构设计,这一步是数据库设计的关键。
一般采用自底向上的方法进行数据抽象和结构设计。
在本系统中涉及到的实体如下所示:
1.图书表(ID、Bookname、Author、Publisher、Email、bookType、price、hyprice、imgurl>
2.会员表(userName、Pwd、Email>
3.3.2逻辑结构设计
系统数据库设计的优劣直接影响到以后网站与数据连接的速度和更新查询的复杂度。
本节介绍本系统基于关系数据库的数据库总体结构设计及数据表的设计。
本系统的数据库设计是在系统功能分析后,依据系统的需求目标而做出的设计。
本系统为基于ASP.NET的图书管理系统,所以最重要的数据表就是存放图书信息数据表、注册会员信息表。
表3-1为本系统所涉及到的数据表
3.3.3数据表详细设计
各个数据表之间主键和外键之间存在某种关系
4章系统实现
总体设计阶段完成了软件的结构设计,划分了模块,并规定了各个模块的功能及他们之间的联系。
在此之后,按软件开发工程化的观点,应进入系统的详细设计阶段,即系统实现。
该阶段的根本目标是确定应该怎样实现所要求的系统,给出软件模块结构中各个模块的内部过程描述。
本章将分模块对系统的实现给予介绍。
4.1系统公共类的实现
本节介绍系统使用的公共类,如数据库访问通用类(用于返回数据集、对象、受影响行数等>、用于完成购物功能的类等。
编写公共类可以在其他页面中直接调用公共类的方法、属性,避免重复代码的编写,有利于系统代码的维护和日后系统的升级。
4.1.1数据库操作类的实现
数据库操作类用于根据系统功能的要求返回一个数据集、一个object对象(即:
返回首行首列>、受影响行数(适合于对数据库的增删改操作>、SqlDataReader等。
实现这些功能的是四个静态函数,其中每个静态函数又根据是否传入SqlParameter参数进行了重载。
因为它们都是静态函数,而静态函数成员不能作用于具体的实例,所以在调用这些方法的时候可以直接用类名加函数名即可。
下面仅列出返回数据集方法的实现算法,其他方法的实现逻辑大致相同:
publicclassDataBase
{
声明一个数据库连接对象dbStrCon。
publicstaticDataSetReDataSet(传入的Sql语句参数FillSql,传入的Sql参数列表commandParameters>
{
利用在web.config配置文件中定义的全局变量为dbStrCon新分配一个数据库连接对象。
if(数据库连接处于关闭状态>
{
打开数据库连接dbStrCon。
}
声明一个数据库命令对象cmd。
指定cmd的数据库连接对象为dbStrCon,命令文本为FillSql,命令类型为文本型。
if(commandParameters不为空>
{
foreach(声明一个临时Sql参数incommandParameters>
{
为Sql命令对象添加commandParameters中的所有Sql参数
}
}
声明一个Sql数据适配器ada,并指定其Sql命令为cmd。
声明一个DataSet数据集dsResul。
利用数据适配器ada填充数据集dsResul
清空Sql命令cmd里面的所有Sql参数。
if(数据库连接处于打开状态>
{
关闭数据库连接dbStrCon。
}
返回执行查询后的数据集dsResult。
}
publicstaticDataSetReDataSet(传入的Sql语句参数FillSql>
{
为dbStrCon新分配一个数据库连接对象。
if(数据库连接处于关闭状态>
{
打开数据库连接dbStrCon。
}
声明一个数据适配器ada,并指定其Sql语句为FillSql,数据库连接对象为dbStrCon。
声明一个DataSet数据集dsResul。
利用数据适配器ada填充数据集dsResul
if(数据库连接处于打开状态>
{
关闭数据库连接dbStrCon。
}
返回执行查询后的数据集dsResult。
}
}
4.1.2购物车类的实现
在线购物网站中购买者可以在不同的页面进行购物,而在不同页面所选购的货物最终都是放到同一个购物车里。
所以要编写一个购物车类进行处理用户的购物过程,这样可以节省不必要的重复编写代码的时间,有利于维护和功能上的扩充。
当用户在购物页面点击了”购买”按钮之后,将该商品的ID传入类中进行处理,根据用户单击的次数和商品的ID确定要购买的数量和商品,同样可以直接在购物车页面中编辑所需货物的数量。
系统将这些信息使用Hashtable类进行存储,在用户提交购物车信息之前,Hashtable中的数据将暂时保存在Session会话变量中。
在提交购物车之后,将写入数据库,实现过程的伪代码如下所示:
publicclassShopCar:
System.Web.UI.Page
{
声明一个购物的DataSet数据集goodSet。
声明一个静态的String对象hh。
publicvoidgodataset(stringid>//向Hashtable中添加购商品id和数量
{
if(如果Session会话中变量bus的值为空>
{
声明一个哈希表变量ht。
往ht中加入一个”键为id、值为1”的键值对。
将ht赋值给Session会话中的变量bus。
调用dafill(>方法将商品信息添加到ht中。
}
else
{
定义一个哈希表ht,并将其赋值为Session会话中的变量bus。
if(哈希表ht中键为id的键值对为空>
{
将ht中键为id的键值对的值设定为1。
}
else
{
将ht中键为id的键值对的值+1
}
将ht赋值给Session会话中的变量bus。
调用dafill(>方法将商品信息添加到ht中。
}
}
publicvoiddafill(Hashtableht>//查询商品信息添加到数据集中
{
清空购物的DataSet数据集goodSet。
foreach(字典键值对deinht>
{
将hh赋值为字典键值对de中键。
声明一个数据适配器datap,并指定其Sql语句为”从商品信息表中查出”,数据库连接对象为根据web.config文件中的连接字符串新建的数据库连接对象。
if(如果数据适配器datap不为空>
{
用datap填充DataSet数据集goodSet。
}
}
}
}
4.2销售模块的实现
系统销售模块主要包括:
商品展台、购物车、会员管理、新闻管理、注销登录等子模块。
在本节中将以首页、购物车和特价商品的展示为例介绍系统销售模块各个子模块的实现过程。
4.2.1销售模块基本框架的实现
本系统采用户控件来保持每个页面风格的一致性,其中销售模块首页布局如图4-1所示。
4-1模块首页界面图
4.2.2销售模块购物车功能的实现
购物车如同生活中用到的购物清单,通过它可以清晰的知道已购的商品名称、数量、价格等信息,当用户以会员身份登陆后,单击商品中的”购买”按钮,就可以将商品信息添加到购物车中去,购物车中需要存储所有已选购商品的ID号、商品名称、数量和单价等信息。
购物车根据用户单击”购买”按钮的次数或者提交购物车信息之前手动修改的数量来确定购买商品的数量。
购物车页面设计效果如图4-2示
4-3销售模块购物车截面图
在本模块中主要是通过DataList控件来显示商品已选购信息的,通过在DataList控件的项模板中添加表格来控制购物车显示的内容,同时在后台代码中为DataList控件的ItemDataBound事件手动添加响应代码,用来计算各种商品的合计金额和购买商品的总金额,并在DataList控件中使用FindControl方法查找DataList控件中的显示控件显示信息。
核心代码如下:
if(row["id"].ToString(>==((Label>e.Item.FindControl("id">>.Text.ToString(>>
{
((Label>e.Item.FindControl("count">>.Text=((Hashtable>(Session["bus"]>>[row["id"].ToString(>].ToString(>。
4.3系统管理模块的实现
系统管理模块主要包括:
商品管理、订单管理、会员管理、新闻管理、注销登录等子模块。
在本节中将以系统登录、商品管理和会员管理为例介绍系统管理模块各个子模块的实现过程。
4.3.1系统登录功能的实现
为了系统的安全性,系统管理模块必须由成功输入管理员信息的用户才能进入,同时在管理员成功登录后将其登录信息存入Session会话变量。
同时在系统管理模块的非登录页面,当页面第一次加载的时候判断Session中是否存在管理员的登录信息,这样就可防止用户通过在地址栏中直接键入系统管理页面的地址、绕过登录页面直接进入系统管理模块。
系统登录页面的设计如图4-3示。
4-3统管理模块登陆界面图
4.3.2商品管理功能的实现
在线购物系统中,对于商品信息的管理是系统管理模块中最主要的子模块。
一个好的在线购物系统必须要有一个强大的商品管理模块,主要实现对商品信息的管理,包括分页显示商品信息、添加商品信息、修改商品信息和删除商品信息等功能。
下面以添加商品信息为例介绍本模块的实现过程,系统管理模块添加商品信息页面的设计如图4-4示。
4-4统管理模块添加商品界面图
4.3.3会员管理功能的实现
在线购物系统中,对会员信息的有效管理是保证会员数据不丢失、维护会员合法权益的重要保证。
本系统中会员管理功能包括增加会员和删除会员信息。
下面以增加会员信息为例说明会员管理功能的实现过程,增加会员信息页面的设计如图4-5示。
4-5统管理模块增加会员界面图
总结
从本系统的开发过程中,我受益匪浅。
首先,我认识到了代码规范的重要性,特别是在一些大型工程中,用到的函数可能有数百个,如果编写的代码不规范会给后期的检查带来极大的麻烦。
而且完整的代码考试也非常重要,有些错误可能在很久以后才能发现。
其次,我意识到了软件设计的重要性,原来接触的工程往往是快速开发类型的,几乎不需要在软件的逻辑设计上花费太多时间,往往可以边开发边进行下一步的设计。
但是这一次我意识到做软件设计很重要,当初一个设计没注意,可能造成后来的编码大面积的返工。
最后就是调试方法的重要性,系统的调试过程要比开发过程繁琐的多。
每个操作、每次向服务器提交请求,其实都包括了很多小段代码的执行,如果不能够采用正确的调试方法,就很难找出程序中的错误。
系统开发过程中主要遇到了下列问题:
忽略了每次向服务器提交请求后客户端页面都将重新加载的情况,以致无法将预期的数据提交到服务器。
在本系统编写的过程中主要遇到的问题有:
第一设计文档的重要性。
在系统开发之前一定要把系统的设计做好,包括系统数据库设计、系统的架构、业务逻辑分析、抽象出基本类和他们的关系、系统的功能模块划分等。
因为时间比较紧张,前期设计工作没有做到位,导致开发工程中重复修改,系统代码有点冗余,部分代码没有有效重用。
第二,考试的尴尬。
我们三人在做完每个功能块后,一定考试一下,因为时间比较紧张,后来的部分代码没来得及考试,,因为我们前期设计方面的工作没做到位,竟然发现有的功能还没有实现,比如为老师分配课程和某些验证。
痛定思痛,一是因为前期系统设计考虑不到位,另一方面也是自己没有做好考试,没有对系统的设计做考试,对于系统的考试有惯性思维,用自己的开发思路考试,结果发现不了一些bug。
考试最好还是让别人来做,这就是旁观者清吧。
应该对自己的整体设计做好考试之后再进行开发,尽量避免后期因为系统设计的不足带来的bug。