XXXXXX大学计算机科学与技术学院课程设计报告20 11 — 20 12 学年第一学期课程名称数据库课程设计设计题目图书管理系统学生姓名XXX学号专业班级指导教师2012 年 1 月 9 日目录1.需求分析............................. 错误!未定义书签。
1.1背景.............................. 错误!未定义书签。
1.2数据需求 ...................... 错误!未定义书签。
1.3功能需求 ...................... 错误!未定义书签。
2.概念结构设计.................... 错误!未定义书签。
2.1 E-R图 .......................... 错误!未定义书签。
3.逻辑结构设计...................... 错误!未定义书签。
3.1 E-R图向关系模式转化 . 错误!未定义书签。
3.2数据字典 ...................... 错误!未定义书签。
4.数据库实现 ......................... 错误!未定义书签。
4.1 表结构截图.................. 错误!未定义书签。
4.2表间关系截图 ............... 错误!未定义书签。
5.数据库功能模块图 .............. 错误!未定义书签。
5.1 数据库功能模块图....... 错误!未定义书签。
5.2 功能模块窗口截图....... 错误!未定义书签。
5.3 数据库具体代码 .......... 错误!未定义书签。
6.课程设计心得...................... 错误!未定义书签。
1.需求分析1.1背景随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。
另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。
提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
1.2数据需求图书馆管理信息系统需要完成功能主要有:1. 读者基本信息的输入,包括借书证编号、读者姓名、读者性别。
2.读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。
3.书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。
4.书籍类别信息的查询、修改,包括类别编号、类别名称。
5.书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、收录日期。
6.书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、收录日期等。
7.借书信息的输入,包括读者借书证编号、书籍编号、借书日期。
8.借书信息的查询、修改,包括借书证编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期等。
9.还书信息的输入,包括借书证编号、书籍编号、还书日期。
10.还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。
11.超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。
12.超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等1.3功能需求(1)在读者信息管理部分,要求:a.可以查询读者信息。
b.可以对读者信息进行添加及删除的操作。
(2 )在书籍信息管理部分,要求:a.可以浏览书籍信息,要求:b.可以对书籍信息进行维护,包括添加及删除的操作。
(3)在借阅信息管理部分,要求:。
a.可以浏览借阅信息。
b.可以对借阅信息进行维护操作。
c.可以浏览归还信息d.对归还信息可修改维护操作e.可以浏览罚款信息f.对罚款信息可以更新(4)在管理者信息管理部分,要求:a.显示当前数据库中管理者情况。
b.对管理者信息维护操作。
2.概念结构设计2.1 E-R图根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。
图书管理信息系统可以划分的实体有:用户信息实体、书籍信息实体、书籍借还记录信息实体。
用E-R图一一描述这些实体。
图2-3书籍信息实体E-R图图2-4 书籍借还记录信息实体E-R图图2-2 用户信息实体E-R图图2-7总的信息实体E-R图3.逻辑结构设计3.1 E-R图向关系模式转化(一)用户(借书证编号,用户姓名,用户性别,用户种类,注册时间)(二)书籍(书籍编号,书籍名称,种类编号,书籍作者,出版社,出版时间,收录时间,种类名称,是否借出)(三)书籍借还(借书证编号,书籍编号,书籍名称,借书时间,还书时间,借阅期限,超期时间,罚款金额)以上通过关系代数方法的进行运算得到所需要的结果,在实验结果中可以看到。
3.2数据字典表2.2-1 用户信息表表2.2-2 书籍信息表表2.2-3 书籍借还记录信息表4.数据库实现4.1 表结构截图表4.1-1 用户信息表表4.1-2 书籍信息表表4.1-3 书籍借还记录信息表4.2表间关系截图表4.2-1 各表之间的关系5.数据库功能模块图5.1 数据库功能模块图5.1-1 数据库总体功能模块图5.1-2 用户登录功能模块图5.2 功能模块窗口截图5.2-1 图书信息管理系统登陆首页5.2-2 用户登陆页面5.2-3 用户注册页面5.2-4 用户信息页面5.2-5 图书查询借阅页面5.3 数据库具体代码5.3.1 数据库创建源代码将已有书籍加入书籍信息表insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('002','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1')insertinto书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('003','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1')insertinto书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('00456456','数据库原理','6','萨师煊','高等教育出版社','2007-07-02','2007-09-15','1')insertinto书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('','C程序设计','6','谭浩强','清华大学出版社','2002-04-02','2004-03-14','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('20558','计算机体系结构','6','石教英','浙江大学出版社','2004-10-03','2006-11-15','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('414','数据结构(C语言版)','6','吴伟民,严蔚敏','清华大学出版社','2002-06-28','2004-01-21','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('5455515','中华历史年','1','吴强','北京大学出版社','2005-04-03','2006-05-15','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('015115','古代埃及','3','赵文华','北京大学出版社','2001-02-02','2002-09-15','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('1514514','日本文化','1','吴小鹏','北京大学出版社','2002-04-02','2004-03-14','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('','微观经济学','5','李小刚','北京大学出版社','2000-10-03','2001-11-15','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('5658','影视文学','4','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1')insert into书籍信息表(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期,是否借出)values('0','探索宇宙奥秘','2','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1')将已有用户信息插入用户信息表insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('X05620207','陈远鹏','男','学生','2005-9-23 14:23:56')insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('X05620206','陈特','男','学生','2005-09-30 13:24:54.623')insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('X05620204','赵铭静','女','学生','2005-09-27 11:24:54.123') insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('X05620202','潘虹','女','学生','2005-09-30 13:24:54.473')insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('008415','蒋伟','男','教师','2004-04-30 09:24:54.478')insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('001456','李叶风','女','教师','2004-04-30 09:24:54.478')insert into用户信息表(用户借书证号,用户姓名,用户性别,用户种类,登记日期) values('123456','李四','男','管理员','2004-04-30 09:24:54.478')将已有借阅信息加入书籍借还信息表insert into书籍借还信息表(书籍编号,借书证编号,借书时间)values('002','X05620202','2011-09-27 11:24:54.123')update书籍信息表set是否借出=0where书籍编号='002'and是否借出='1'insert into 书籍借还信息表(书籍编号,借书证编号,借书时间)values('003','X05620206','2011-12-27 08:26:51.452')update书籍信息表set是否借出=0where书籍编号='003'and是否借出='1'insert into 书籍借还信息表(书籍编号,借书证编号,借书时间)values('5455515','X05620207','2011-12-27 08:26:51.452')update书籍信息表set是否借出=0where书籍编号='5455515'and是否借出='1'insert into 书籍借还信息表(书籍编号,借书证编号,借书时间)values('015115','X05620204','2011-10-21 12:11:51.452') update书籍信息表set是否借出=0where书籍编号='015115'and是否借出='1'insert into 书籍借还信息表(书籍编号,借书证编号,借书时间)values('','001456','2011-12-28 14:11:51.312')update书籍信息表set是否借出=0where书籍编号=''and是否借出='1'insert into 书籍借还信息表(书籍编号,借书证编号,借书时间)values('0','008415','2011-08-28 15:11:31.512')update书籍信息表set是否借出=0where书籍编号='0'and是否借出='1'初始化书籍信息表中的书籍种类update [书籍信息表] set种类名称='人文艺术类'where种类编号='1' update [书籍信息表] set种类名称='自然科学类'where种类编号='2' update [书籍信息表] set种类名称='社会科学类'where种类编号='3' update [书籍信息表] set种类名称='图片艺术类'where种类编号='4' update [书籍信息表] set种类名称='政治经济类'where种类编号='5' update [书籍信息表] set种类名称='工程技术类'where种类编号='6' update [书籍信息表] set种类名称='语言技能类'where种类编号='7' 5.3.2 数据库操作源代码连接数据库代码SqlConnection con = new SqlConnection(@"Data Source=.\SQLExpress;AttachDbFileName=|DataDirectory|\LibraryDBMS.mdf;Integrated Security=True;User Instance=true");con.Open();SqlCommand cmd = con.CreateCommand();mandText = "/*此处假如SQL语句*/"con.Dispose();读者注册代码protected void Button1_Click(object sender, EventArgs e){if ( == "\0" || == "\0"|| == "\0" || == "\0"|| == "\0" || == "\0"){Label1.Text = "输入有空项,请重新输入";return;}else if ( != 0){Label1.Text = "两次输入的密码不同";return;}using (SqlConnection con = new SqlConnection(@"Data Source=.\SQLExpress;AttachDbFileName=|DataDirectory|\LibraryDBMS.mdf;Integrated Security=True;User Instance=true")){con.Open();using (SqlCommand cmd = con.CreateCommand()){mandText = "select * from T_ReaderInfo where T_ReaderInfo.ReaderId='" + + "'";//Label1.Text = cmd.ExecuteScalar().ToString();if (cmd.ExecuteScalar() != null)//这里写null,因为如果返回值是null时,再用tostring 的话//提示未将对象引用设置到对象的实例{Label1.Text = "用户名已存在,请输入你的学号";con.Dispose();return;}else{mandText = "Insert into T_ReaderInfo (ReaderId,ReaderName,ReaderAddress,PassWord,ReaderPhoneNumber) values('" + + "','" + + "','" + + "','" + + "','" + + "')";cmd.ExecuteNonQuery();con.Close();con.Open();mandText = "CREATE TABLE newReader" + + "(bookId char(15) NOT NULL,bookName nvarchar(50) not null,bookAuthor nvarchar(50) not null,borrowTime smalldatetime NOT NULL,rebackTime smalldatetime NOT NULL,prasentT char(1) NOT NULL,haveDays int not null,renewTimes int not null)";cmd.ExecuteNonQuery();string url;url = "~/login.aspx?id=" + + "&name=" + ;Response.Redirect(url);}}con.Dispose();}}(3)读者登陆代码using (SqlCommand cmd = con.CreateCommand()){if (RadioButtonList1.SelectedValue == "0"){mandText = "select * from T_ReaderInfo where T_ReaderInfo.ReaderId='" + + "' AND T_ReaderInfo.PassWord='" + T extBox2.Text + "'";}else{mandText = "select * from T_MessagerInfo where T_MessagerInfo.ReaderId='" + + "' AND T_MessagerInfo.PassWord='" + TextBox2.Text + "'";}cmd.ExecuteNonQuery();if (cmd.ExecuteScalar() == null){Label1.Text = "账户名或密码错误";con.Dispose();return;}else{Label1.Text = "登陆成功,正在为你跳转";using (SqlDataReader reader = cmd.ExecuteReader()){reader.Read();readerId = reader.GetString(reader.GetOrdinal("ReaderId"));readerName = reader.GetString(reader.GetOrdinal("ReaderName"));}}}con.Dispose();string url;url = "~/login.aspx?id=" + readerId + "&name=" + readerName;Response.Redirect(url);// Response.Redirect("login.aspx");}(4)根据书名或作者或书号检索书的代码,以及GridView空间数据的绑定DataSet ds = GetData(queryString);if ( > 0){GridView1.DataSource = ds;GridView1.DataBind();if ( == 0){Label1.Text = "OOPS!!,相关的书不存在";}}else{Message.Text = "Unable to connect to the database.";}DataSet GetData(String queryString){DataSet ds = new DataSet();try{// Connect to the database and run the query.SqlConnection connection = new SqlConnection(@"Data Source=.\SQLExpress;AttachDbFileName=|DataDirectory|\LibraryDBMS.mdf;Integrated Security=True;User Instance=true");SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);// Fill the DataSet.adapter.Fill(ds);}catch (Exception ex){Message.Text = "Unable to connect to the database.";}return ds;}(5)根据点击书号获得书号并完成借阅或预约或还书的代码protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {String str;switch (mandName){case"del1":str = "0";break;case"del2":str = "1";break;case"del3":str = "2";break;default: return;}string nSort = Convert.ToString(mandArgument);// Response.Write(nSort);Label1.Text = Convert.ToString(Request.QueryString["id"]);string url;url = "~/test.aspx?id="+ nSort + "&selectValue="+ str + "&ReaderId="+ Convert.ToString(Request.QueryString["id"]) + "&name="+ Convert.ToString(Request.QueryString["name"]);Response.Redirect(url);}(6)跳转到借阅历史记录页面的代码实现protected void LinkButton2_Click1(object sender, EventArgs e){string url;url = "~/BorrowHistory.aspx?ReaderId="+ Convert.ToString(Request.QueryString["ReaderId"]) + "&name="+ Convert.ToString(Request.QueryString["name"]);Response.Redirect(url);}6.课程设计心得通过此次数据库的课程设计,真正达到了学与用的结合,增强了对数据库方面应用的理解,对自己今后参与开发数据库系统积累了不少经验,在实验过程中,从建立数据开始,对灵据库设计理念及思想上有更高的认识,从需求分析,到概念设计和逻辑设计,E-R图的表示,数据字典的创建,懂得了不少有关数据库开发过程中的知识,在实验中建表,及其关系模式,关系代数的建立及理解,将SQL语的查询语句用得淋漓尽致,增强了自己在数据库中应用SQL语言的灵活性,其中包括,插入、删除、修改、查询,牵涉表和表之间的联系,主建与外主键的定义,约束项的设置,使逻辑更严密,在学习过程中,我也能过上网查了不少资料,也看了一些别人设计的图书馆管理信息系统的设计报告,学以致用,自我创新,独立完成了这份自己的报告,从中在学到用,从用又到学,不断修改,系统更新。