1、数据库图书管理系统课程设计 作者: 日期:30 个人收集整理 勿做商业用途课 程 设 计课程设计名称: 数据库应用课程设计 专 业 班 级 : 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间:2011。12.202010.12.24 计算机应用技术专业课程设计任务书学生姓名专业班级学号题 目图书管理系统课题性质A工程设计课题来源D自拟课题指导教师同组姓名无主要内容图书管理系统开发:互联网的不断发展使得网上售书越来越受现代人的欢迎,但好多的读者还是喜欢去书店浏览图书,借阅购买自己喜爱的书籍,但不能更方便、有效、快捷地实现店主、营业员、读者各自的功能,及相互之间的联系。针对这一问
2、题,我们开发了图书(销售)管理系统,该系统主要有四大模块:前台管理模块,图书管理模块,用户管理模块和订单管理模块,各模块提供了数据的查询、插入、删除等功能,从而满足了用户的需求。任务要求 综合运用所学的数据库基本知识,并能通过查阅相关文献材料,独立完成该课题的设计开发工作。要求根据本课题设计出合理的数据结构,并实现前台管理模块,图书管理模块,用户管理模块和订单管理模块等功能模块。前台开发工具采用VB.net开发工具;后台数据库选用SQL Server。 参考文献1 郑玲利, 数据库原理与应用案例教程 。北京:清华大学出版社,20082 宣小平,但正刚,张文毅,数据库系统开发实例导航。北京:人民
3、邮电出版社3 龚沛曾,袁科萍,杨志强。数据库技术与应用【M】北京:高等教育出版社,20084 施伯乐,丁宝康,汪伟.数据库系统教程【M】北京:高鞥教育出版社,2003审查意见指导教师签字:教研室主任签字: 2010年 11月 16 日 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页填 表 说 明1“课题性质一栏:A工程设计;B工程技术研究;C软件工程(如CAI课题等);D文献型综述;E其它。2“课题来源”一栏:A自然科学基金与部、省、市级以上科研课题;B企、事业单位委托课题;C校、院(系、部)级基金课题;D自拟课题。 国际学院 学院课程设计成绩评价表课程名称
4、:数据库应用课程设计设计题目: 图书管理系统 专业: 班级: 姓名: 学号:序号评审项目分 数满分标准说明1内 容思路清晰;语言表达准确,概念清楚,论点正确;实验方法科学,分析归纳合理;结论严谨,设计有应用价值。任务饱满,做了大量的工作。2创 新内容新颖,题目能反映新技术,对前人工作有改进或突破,或有独特见解3完整性、实用性整体构思合理,理论依据充分,设计完整,实用性强4数据准确、可靠数据准确,公式推导正确5规 范 性设计格式、绘图、图纸、实验数据、标准的运用等符合有关标准和规定6纪 律 性能很好的遵守各项纪律,设计过程认真;7答 辩准备工作充分,回答问题有理论依据,基本概念清楚.主要问题回答
5、简明准确。在规定的时间内作完报告。总 分综合意见 指导教师 2010年 11月28 日1、 需求分析1.1 课题背景图书管理系统开发:互联网的不断发展使得网上售书越来越受现代人的欢迎,但好多的读者还是喜欢去书店浏览图书,借阅购买自己喜爱的书籍,但不能更方便、有效、快捷地实现店主、营业员、读者各自的功能,及相互之间的联系.针对这一问题,我们开发了图书(销售)管理系统,该系统主要有四大模块:前台管理模块,图书管理模块,用户管理模块和订单管理模块,各模块提供了数据的查询、插入、删除等功能,从而满足了用户的需求。1。2 需完成的功能l 用户信息:包括用户名和用户密码;在该模块中针对不同的用户设置了权限
6、管理,并且对用户信息有查询、删除、修改的功能.l 有关图书信息的输入,包括图书编号、图书名称、作者、出版社、出版日期、价格;在该模块中可以分别按图书编号、图书名称实现数据的查询、录入、删除功能.l 图书类别信息:包括类别编号、类别名称;在该模块中可以按类别编号实现数据的插入、查询、删除功能。l 图书销售信息:包括图书编号、类别编号、价格、出售日期;在该模块中可以通过图书编号和类别编号实现数据的插入、查询、删除功能,1.3 运行环境(1)操作系统: Microsoft Windows2000/Windows xp (2)数 据 库: SQL Server数据库(3)编程环境: Visual St
7、udio 20082 概要设计2.1 系统功能分析图书管理系统分为四大模块:一前台管理:在该模块中再次细分,可划分为一下几个模块:用户注册登录,用户信息修改,图书搜索,图书详细信息查询,购物车,用户付款,用户帮助和联系管理员。网络用户进入该网站时,可以浏览图书主页面、查看页面提供的图书信息、搜索图书等.若网络用户需要购买、收藏图书时,他需要登录到系统(若未注册账号,他需要先进行注册再登录系统).系统用户分为管理员和一般用户。系统用户根据自己的注册邮箱和密码登录系统.登录到系统后,管理员可以对图书信息进行查看,添加、删除、修改等,同时可以查看所有一般用户的基本信息及图书订单信息;而一般用户只能查
8、看图书信息、搜索图书、购买图书、收藏图书,同时可以对自己的信息进行修改、完善等。除此之外,一般用户还可以付款,查看帮助,联系管理员。二订单管理:管理员可以对订单进行管理,判断用户是否确认购买购物车的图书,确认是否付款,是否发货,是否对该信息归档.三用户管理:管理员可以查询用户信息,并可以删除用户信息。四图书管理:管理员可以对图书进行添加、删除、修改;管理员还可以对图书进行分类。2.2 系统功能模块通过系统功能层次图可以直观地理解系统的功能,并且有助于实现模块与模块以及各模块内的密切联系。系统功能层次图如下: 用户注册登录图 书 管 理 用户信息修改图书搜索 图书详细信息购物车用户付款用户帮助联
9、系管理员 订单管理 用户管理 图书管理 是否已确认 订单查询 订单处理查询用户信息 删除用户信息 添加图书信息 删除图书信息 修改图书信息后台管理 用户充值2.3 数据库设计2.3。1 概念模型设计概念数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型,所以使用E-R图来建立数据模型,直观地反映了各实体的属性及实体间相互联系.所以开发者必须收集一些基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典。根据这些基本信息设计出功能齐全、使用方便的系统。系统所处理的E-R图如下:2。3.2 数据库逻辑设计 逻辑结构设计阶段的主要任务是把概念结构设计好的ER图转换为与DBMS产
10、品所支持的数据模型相符合的逻辑,即将实体型、实体的属性和实体型之间的联系转换为关系模式,为此建立了六个数据表:(1)图书信息表:包括的数据项有:图书ID、书名、作者、出版社、图书简介、出版日期、图书类别号、定价、封面、销售量和库存量;其中图书ID是主属性(2)用户信息表:包括的数据项有:邮箱、密码、昵称、性别、身份标号、头像、兴趣、居住地、自我介绍和管理员标示;其中邮箱是主属性。(3)用户身份表:包括的数据项有:身份标号和身份名;其中身份标号是主属性。(4)图书类别表:包括的数据项有:图书类别号和图书类别名;其中图书类别号是主属性。(5)订单表:包括的数据项有:邮箱、图书ID和订货数量;其中邮
11、箱和图书ID是主属性。(6)收藏表:包括的数据项有:邮箱和图书ID;二者都是主属性。1.。图书类别表列名数据类型长度说明图书类别号Smallint主键类别名Varchar10唯一约束,不为空2。图书信息表列名数据类型长度说明图书IDVarchar8主键书名Varchar20作者Varchar10出版社Varchar20图书简介Ntext出版日期Datetime图书类别号Smallint外键,参考图书类别表定价Float封面Varchar50具有唯一约束销售量Int默认为0,用来找出热销书浏览次数Int默认为0,用来找出重点关注书库存量Int大于等于0折扣价Float大于等于0折扣Float大于
12、0小于等于1上架时间Datetime用来区别新书问题:封面如何设为唯一约束3.用户登录表列名数据类型长度说明邮箱Varchar30主键密码Varchar15密码丢失验证码Varchar10默认为0000管理员标识Bit默认为0,表示一般用户; 1表示管理员4.用户信息表列名数据类型长度说明邮箱Varchar30主键昵称Varchar10性别Bit默认为0,表示男; 1表示女用户级别号Smallint外键,参考用户身份表,默认为1头像Varchar50兴趣Ntext居住地Varchar100自我介绍Ntext账户余额Float默认为0消费金额Float默认为03。用户身份表列名数据类型长度说明用
13、户级别号Smallint主键级别名Varchar10唯一约束5。订单表列名数据类型长度说明邮箱Varchar30外键,参考用户登录表图书IDVarchar8外键,参考图书信息表价钱Float不为空,默认为0订货数量Smallint大于等于0订购日期Datetime包含在主键中,避免不能多次购买统一ID的书是否处理Bit默认为0备注:邮箱、图书ID、订购日期为主键6。收藏表列名数据类型长度说明邮箱Varchar30外键,参考用户信息表图书IDVarchar8外键,参考图书信息表*备注:邮箱和图书ID为主键2.3.3 数据库表结构图三 详细设计3。1。 主要网页介绍母版页:MasterPage1.
14、master 用户未登录时母版页MasterPage2。master用户登录后母版页功能:(1):提供图书关键字搜索功能. (2):提供图书分类,个人中心等链接Master1.master 用户未登录时注册页面的母版页Master2.master 个人中心、用户信息修改页面的母版页Master3。master用户登录后注册页面的母版页Home。aspx 主页 enroll.aspx 用户注册页login。aspx 用户登录页 search_book.aspx 查询书籍页book_classify.aspx 图书分类页 bookmessage.aspx 图书详细信息页SelfCenter。asp
15、x 个人中心页 alter_user.aspx 用户修改个人信息页shopcar。aspx 购物车页 admin_login.aspx 管理员登录后台管理页管理页面admin_default。aspx,可用iFrame引用以下页面:bookmanager.aspx 图书管理页 addbook.aspx 添加图书页UserSearch。aspx 查询用户信息页 AddMoney。aspx 用户充值页deluser。aspx 删除用户页 order_manager.aspx 订单管理页top.ascx 用户控件,被个人中心页面等引用Validator.aspx 验证码页面,用来随机生成验证码,在用
16、户注册页面调用3.2 系统功能概述前台功能概述(1):一般用户进入Home.aspx后能够查询本站所有的图书及其详细信息。(2):当用户需要购买图书时可以暂时将需要购买的图书放入购物车,在离开本站时登录账户(无账户时需先注册)既可一起结账购买。(3):当用户提交订单,收藏书籍或者登录个人中心时系统提示需要登录,如果没有账号则需要注册。后台管理系统 管理员通过点击主页下方的管理入口进入管理员登录页面,输入用户名(admin)和密码(admin)之后登陆到后台管理页面,如下图:管理员可以在后台管理系统中进行添加、删除、修改图书信息,查询、删除用户,给用户充值,管理订单等操作,从而实现图书销售管理。
17、 3.3 主要实现代码(1)图书搜索、分类查询功能代码查询页面后台代码:protected void English_Click(object sender, EventArgs e) SessionBookClassify” = English.Text;/用来记录图书类别名 Response。Redirect(”book_classify.aspx”); .。 protected void Search_btn_Click(object sender, EventArgs e) /根据下拉列表来选择查询图书条件 if (Seach_tb。Text = ”)Lb_Search.Visible
18、 = true; return; else Lb_Search.Visible = false; Session”Search” = Seach_tb.Text; if (DDL_Search。SelectedIndex = 0) SessionBookClassify” = Seach_tb。Text; Session”flag” = ”图书类别”;/标示查询条件 else if (DDL_Search.SelectedIndex = 1) Session”flag” = ”作者”; else Session”flag = ”书名”; Response。Redirect(search_boo
19、k.aspx);查询结果页面后台代码:protected void Page_Load(object sender, EventArgs e) this。Page.Title = ”搜索结果” ; if (!IsPostBack) Datalistband(); private void Datalistband() string selectstr; if (Session”flag = null) return; if (Sessionflag” = 图书类别”)/用来选择selectstr的内容,以便按查询条件读取数据库 selectstr=select BookImage,BookNa
20、me,Price,DiscountMoney from BookInfo,BookCatalog where BookInfo。CatalogNum=BookCatalog.CatalogNum and CatalogName=”+SessionBookClassify”。ToString()+ ”; else if (Session”flag” = ”作者) selectstr=select BookImage,BookName,Price,DiscountMoney from BookInfo where Author=”+SessionSearch”。ToString()+ ”; els
21、e selectstr=”select BookImage,BookName,Price,DiscountMoney from BookInfo where BookName=”+SessionSearch”。ToString()+ ”; string sqlconnstr = ConfigurationManager。ConnectionStringsConnectionString.ConnectionString; DataSet ds = new DataSet(); using (SqlConnection sqlconn = new SqlConnection(sqlconnstr
22、) SqlDataAdapter sqld = new SqlDataAdapter(selectstr, sqlconn); sqld.Fill(ds, ”tabbook”); . this。DataList1。DataSource = pds; this.DataList1.DataBind();/数据邦定(2)用户登录页面代码:protected void loginButton_Click(object sender, ImageClickEventArgs e) if (TB_Mail.Text = ”) Lb_Message。Text = 请输入您的Email地址”; else i
23、f (TB_Password。Text = ”) Lb_Message.Text = ”请输入您的登录密码。”; else string sqlconnstr = ConfigurationManager。ConnectionStrings”ConnectionString。ConnectionString; SqlConnection sqlconn = new SqlConnection(sqlconnstr); SqlCommand sqlcomm = new SqlCommand(); sqlcomm.Connection = sqlconn; sqlconn.Open(); sqlc
24、omm.CommandText = select MailBox,PassWord from Login where (ManagerFlag=0)”; SqlDataReader sqldatareader = sqlcomm。ExecuteReader();while (sqldatareader.Read())if (TB_Mail。Text = sqldatareader.GetString(0) & TB_Password。Text = sqldatareader。GetString(1) Session”UserName” = TB_Mail.Text;/ SessionUserN
25、ame;/标示用户是否登录,从而切换母板 if (SessionUserName” != null) Sessionmasterpage” = MasterPage2.master”; if (SessionIsLogin” = ”true”) Response。Redirect(shopcar.aspx”); else Response.Redirect(”Home.aspx”); Lb_Message.Text = 账号或密码错误,请重新输入”;(3)用户注册页面代码protected void Bt_Sumbit_Click(object sender, EventArgs e) if
26、(Request.Cookiesyzmcode = null) return; if (String。Compare(Request.Cookies”yzmcode”.Value, Txt_Validation。Text, true) != 0) /判断注册码是否输入正确 Lb_Validate.Text = ”验证码错误,请输入正确的验证码.”; return; else if (!Cb_clause。Checked) Lb_Message.Visible = true;else insert(); if (Lb_error。Visible) MultiView1.ActiveViewInd
27、ex = 0; return; /判断邮箱是否注册过 MultiView1.ActiveViewIndex = 1; Lb_Mail。Text = Txt_Mail.Text; Session”UserName” = Txt_Mail。Text; Sessionmasterpage = MasterPage2.master”; Sessionmaster = /Master/Master3.master; protected void insert()/插入用户的注册数据到数据库 string sqlconnstr = ConfigurationManager.ConnectionString
28、sConnectionString。ConnectionString; SqlConnection sqlconn = new SqlConnection(sqlconnstr); SqlCommand sqlcommand = new SqlCommand(); sqlcommand。Connection = sqlconn; sqlcommand.CommandText = insert into Login(MailBox,PassWord) values(MailBox,PassWord); sqlcommand。Parameters。AddWithValue(”MailBox,Txt
29、_Mail。Text); sqlcommand。Parameters。AddWithValue(”PassWord”,Txt_Password.Text);trysqlconn.Open();sqlcommand.ExecuteNonQuery();Lb_error.Visible = false;catch (Exception ex) Lb_error。Visible = true; /邮箱注册过让Lb_error显示finallysqlcommand = null;sqlconn.Close();sqlconn = null;(4)个人中心代码protected void Page_Lo
30、ad(object sender, EventArgs e) if (Session”UserName” = null) Response。Redirect(”login。aspx”); else Lb_User。Text = Session”UserName.ToString(); if (!IsPostBack) bindgrid(); /邦定数据库 void bindgrid() string sqlconnstr = ConfigurationManager.ConnectionStringsConnectionString。ConnectionString; DataSet ds =
31、 new DataSet(); string strsql = select BookID,BuyNum,BuyTime,IsDispose from Purchase where MailBox=+SessionUserName+”; string selectstr =select AccountLeft,Cost,Photo,LevelName,Upgrade = UserInfo。LevelNum500cost from UserIdentity,UserInfo where UserIdentity.LevelNum=UserInfo。LevelNum and MailBox=”+S
32、essionUserName”+”; using (SqlConnection sqlconn = new SqlConnection(sqlconnstr)) SqlDataAdapter sqld = new SqlDataAdapter(strsql, sqlconn); sqld.Fill(ds, taborder); SqlCommand sqlcommand = new SqlCommand(selectstr, sqlconn); sqlconn。Open(); SqlDataReader sqldatareader = sqlcommand。ExecuteReader(); w
33、hile (sqldatareader.Read() Lb_LeftMoney.Text = sqldatareader.GetDouble(0).ToString(); Lb_Cost。Text = sqldatareader.GetDouble(1)。ToString(); Image_Photo。ImageUrl = ”/images/userimages/ + sqldatareader.GetString(2); Lb_UserLevel.Text = sqldatareader.GetString(3); Lb_Money.Text = sqldatareader.GetDoubl
34、e(4)。ToString(); if (Lb_UserLevel。Text = ”普通会员) Lb_LevelNext。Text = ”中级会员; else Lb_LevelNext.Text= 高级会员; /判断出下级会员的名称 if (ds。Tablestaborder。Rows。Count = 0) Lb_Message.Text = ”暂无订单”; return; Lb_Message。Visible = false; GridView1。DataSource = ds.Tables”taborder”.DefaultView; GridView1.DataBind(); (5)用户
35、信息修改代码protected void Btn_Ok_Click(object sender, EventArgs e) / 用selectstr来判断用户是在用户信息表,还是在注册表,进而选择command对象的CommmandText的值 bool sex=true; if (RB_Sex1.Checked) sex = false; string commandstr; string selectstr = ”select MailBox from UserInfo where MailBox=”+ Session”UserName.ToString() + ; string inse
36、rtstr = ”insert into UserInfo (MailBox,UserName,Sex,Habit,Address,SelfIntroduction,Photo) values(MailBox,UserName,Sex,Habit,Address,SelfIntroduction,Photo); string updatestr = Update UserInfo set UserName=UserName,Sex=Sex,Habit=Habit,Address=Address,SelfIntroduction=SelfIntroduction,Photo=Photo wher
37、e MailBox= + SessionUserName”.ToString() + ”; string sqlconnstr = ConfigurationManager。ConnectionStringsConnectionString。ConnectionString; SqlConnection sqlconn = new SqlConnection(sqlconnstr); SqlCommand sqlcommand = new SqlCommand(); sqlcommand。Connection = sqlconn; sqlcommand。CommandText = select
38、str; sqlconn.Open(); SqlDataReader sqldatareader = sqlcommand.ExecuteReader(); if (sqldatareader。Read() commandstr = updatestr; else commandstr = insertstr; sqlcommand = null; sqlconn。Close(); sqlcommand=new SqlCommand(commandstr,sqlconn); if(commandstr=insertstr) sqlcommand。Parameters。AddWithValue(
39、MailBox”,Session”UserName”。ToString(); sqlcommand.Parameters.AddWithValue(UserName, Txt_UserName。Text); sqlcommand。Parameters.AddWithValue(Sex”, sex); sqlcommand.Parameters.AddWithValue(”Habit”, Txt_Habit。Text); sqlcommand.Parameters。AddWithValue(Address, Txt_Address。Text); sqlcommand。Parameters。AddWithValue(”SelfIntroduction, Txt_SelfProfile。Text); sqlcommand。Parame