1、 南京信息工程大学 课程设计报告 课程名称 数据库系统基础 设计题目 图书管理系统 姓名 学号 专业班级 2011级计科2班 2013年12月26号 1 引 言 1.1 问题的提出 图书管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。
2、 编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加借书证、查询借书证、删除借书证、借书信息、借书限制等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书管理系统。 1.2任务与分析 本课题主要的目的是: 1.强化和巩固理论基础,掌握数据库编程的基本技巧; 2.要求用C#语言或其它语言及相应开发环境,实现一个小型完整程序的设计与开发; 系统概述: 1.图书管理: 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。图书信息登入、查询和维护。 2.读者管理,包括增加读者、修改读者信息,查
3、询借书证持有人,删除读者信息等功能 4.借还图书、资料的登记、超期处理等。 5.图书、资料查询,借、还图书和资料情况查询。 6.图书、资料借阅情况的统计分析,以此作为图书馆图书、资料订够的依据之一。 设计要求: 1.进行需求分析,编写数据字典。 2.设计E-R图。 3.实现新进图书的数据录入。 4.实现对所有购进图书的分类查询和分类统计。 5.能够按图书编号、图书名等分类查询现有图书的数量。 6.记录借阅者的个人资料和所借图书的书名、书号数据等。 2程序的主要功能 2.1添加功能 添加一本图书的基本信息,包括书名、书
4、号、名作者(译者)、出版社和图书简介。 添加读者的相关信息 添加图书借阅的基本信息,包括书号,借书证号,借书日期,应还书日期。 2.2删除功能 删除一本图书的基本信息,删除读者的基本信息,删除图书借阅基本信息。 删除读者相关信息 2.3显示功能 显示所有图书信息,包括图书代码,图书名称,作者,出版社和简介。 显示所有借阅信息,包括读者号,图书号,借书日期,应还书日期。 2.4查找功能 图书信息查找,可以更具图书代码,图书名称,作者,出版日期和出版社进行查找。 读者信息查找,可更具读者姓名,读者编号,年龄,性别和所在系进行查找。 借阅信息查询,可更具图书编号和读者编号
5、进行查询。 2.5修改功能 对图书和读者的信息进行修改。 2.6备份和还原功能 对数据库数据进行备份和还原,保护数据库的安全 3 系统的总体结构 3.1模块描述 图书馆信息管理系统可以分为四个模块,“综合查询模块”,“读者登陆模块”,“借还图书模块”,和“系统维护模块’。 为了区分不同的用户,我们设置管理员和普通用户的登录,分别对管理员和普通用户进行不同的用户权限设置,对他们的所能进行的操作进行不同的限制 图书馆信息管理系统的功能模块如下图(2-1)所示 备份与还原
6、管理员信息维护 图书信息维护 读者信息维护 借阅查询 修改密码 密码修改 还书管理 借书管理 读者登录 管理员登录 多条件查询 图书信息查询 系统维护 借还管理 综合查询 图书管理系统 图2-1 2.2 系统总体流程图 用户进入图书馆管理系统,成功登陆后,首先进行权限验证,对于普通管理员可以进行借书处理,还书处理,逾期处理,。读者可以进行图书信息查询,修改自己的密码,查阅自己的借阅记录,图书续借,罚金信息查询
7、系统管理员可以进行图书,读者信息维护,系统维护等操作 开始 退出 安全管理 管理员信息 密码修改 用户信息管理 图书信息管理 密码修改 借阅查询 图书查询 管理员登录 普通用户登录 判断 登录 第3章 数据库设计 3.1 数据库需求分析 用户的需求具体体现在各种信息的提供、保存、
8、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入,收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后而后具体设计打下基础。根据分析,可以列出以下数据项和数据结构: 图书信息,包括的数据项有:ISBN号,索书号,书名,作者,价格,出版日期,出版社, 管理员信息:管理员号,姓名,电话,身份证号,密码,权限。 借阅信息:,读者账号,借出时间,应还时间。 罚金信息:读者账号,金额。 读者信息:读者账号,姓名,性别,身份证号,系别,密码。 3.2 数据库物理结构设计 得到上面的数据项和数据结构后,就可以设计出能够满足用户需求的各种实体,以及它们之间的
9、关系,为后面的逻辑结构设计打下基础。 以下分别是读者E-R图,图书E-R图,借阅信息E-R图,出版社E-R图,书库E-R图 读者E-R图 读者 性别 读者证号 姓名 押金 身份证号 出生日期 登录密码 身份 图书E-R图 图书 价格 ISBN编号 图书类型 书名 作者 出版时间 图书译者 出版社 借阅信息E-R图 借阅信息 读者证号 借出时间 归还时间 借阅状态 图书条形码 类别 出版日期 价格 出版社 图书名 ISBN 作者 身份证 生日 密码 编号 姓
10、名 性别 类别 译者 管理 图书 管理员 管理 借阅 图书借阅 读者 出生日期 姓名 编号 押金 性别 读者证号 密码 身份证号 借阅状态 归还时间 借出时间 图书ISBN 职业 3.3数据库逻辑结构设计 在上面的实体以及实体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。图书管理系统数据库中各个表格的设计结果如下面的几个
11、表格所示。每个表格表示在数据库中的一个表。 表(3-2)图书数据表 字段名 类型 长度 是否为空 主键 外键 说明 ISBN varchar 20 否 是 否 ISBN号 date varchar 20 否 否 否 bookname varchar 40 否 否 否 书名 writer varchar 20 否 否 否 作者 Price numeric 否 否 否 单价 Publisher varchar 40 是 否 是(出版社) 出版社 publishdate date
12、time 4 是 否 否 出版日期 表(3-6)读者数据表 字段名 类型 长度 是否为空 主键 外键 说明 ISBN varchar 20 否 是 否 读者账号 name varchar 8 否 否 否 姓名 sex char 2 否 否 否 性别 identityCard char 18 否 否 否 身份证号 tel varchar 20 是 否 否 电话 keepmoney money 10 是 否 否 押金 zy varchar 20 是 否 否 职业 d
13、ate varchar 20 是 否 否 出生日期 表(3-3)图书借阅数据表 字段名 类型 长度 是否为空 主键 外键 说明 bookisbn char 20 否 是 否 图书编号 readerisbn char 20 否 否 示(读者) 读者账号 borrowdate datetime 否 是 否 借出时间 shouldbackdate datetime 否 否 否 应还时间 bookprice money 4 否 否 否 价格 bookname vatchar 20
14、 否 否 否 书名 表(3-8)用户数据表 字段名 类型 长度 是否为空 主键 外键 说明 id char 4 否 是 否 管理员编号 name varchar 8 否 否 否 姓名 tel varchar 11 否 否 否 电话 admin char 1 否 否 否 用户类别 password varchar 20 否 否 否 密码 sex char 2 否 否 否 性别 identityCard char 18 否 否 否 身份证号 age int 2
15、否 否 否 年龄 第 4 章 详细设计 4.1 用户界面设计 当今软件界的所有软件无不是可视化的用户界面,它的好处不外乎它有美观、直接、操作者易懂和操作方便等好处。本系统设计思想:“为用户设计,而不是设计者”本系统设计原则:界面美观、操作方便并能高效率地完成工作。界面根据用户需求设计。界面能引导用户操作的功能,并能提供一些帮助功能。 4.1.1 登录界面 系统登录界面截图如下: 在用户登录界面,我们设置一个用户类别的选项,来判断登录系统的用户身份,不同的身份具有不同的权限,以此来保障系统的安全 代码如下: str
16、ing str = "server=Lenovo-Y470;uid=sa;pwd=123;database=db_library;"; SqlConnection con=new SqlConnection(str); string sql="select name,password,admin from tb_users where name='"+textBox1.Text+"'and password='"+textBox2.Text+"'and admin='"+comboBox1.Text+"'"; SqlCommand cmd = new SqlCommand();//
17、打开数据库连接 cmd.CommandText = sql; cmd.Connection = con; con.Open(); SqlDataReader rd = cmd.ExecuteReader(); if (rd.Read()) { if(comboBox1.Text=="1") { //MessageBox.Show("正在登陆"); a = textBox2.Text; MainForm mForm = new MainForm();
18、 mForm.Show();//显示管理员登录界面 con.Close(); this.Visible = false; } // if (radioButton1.Text == "0") else { a = textBox2.Text; ViceMa
19、inForm mForm = new ViceMainForm(); mForm.Show();//显示普通用户的登录界面 con.Close(); this.Visible = false; } } else { MessageBox.Show("请输入正确的账户和密码");
20、 } } private void button2_Click(object sender, EventArgs e) { this.Close();//关闭窗口 } 4.1.2 主界面显示 管理员主界面截图如下 代码如下 namespace WindowsFormsApplication1 { public partial class MainForm : Form {
21、 public MainForm() { InitializeComponent(); } private void 图书数据维护ToolStripMenuItem_Click(object sender, EventArgs e) { FmDataTS TS = new FmDataTS(); TS.Show(); } private void 读者数据维护ToolStripMenuItem_Cl
22、ick(object sender, EventArgs e) { FmDataDZ DZ = new FmDataDZ(); DZ.Show(); } private void 用户数据维护ToolStripMenuItem_Click(object sender, EventArgs e) { FmDataYH YH = new FmDataYH(); YH.Show(); }
23、 private void 用户密码修改ToolStripMenuItem_Click(object sender, EventArgs e) { FmDataMM MM = new FmDataMM(); MM.Show(); } private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e) { FmJY JY=new FmJY();
24、 JY.Show(); } private void 图书搜索ToolStripMenuItem_Click(object sender, EventArgs e) { FmCX CX = new FmCX(); CX.Show(); } private void 图书归还ToolStripMenuItem_Click(object sender, EventArgs e) { FmGH
25、GH = new FmGH(); GH.Show(); } private void 数据库还原ToolStripMenuItem_Click(object sender, EventArgs e) { ; SqlConnection conn = new SqlConnection(" Server=Lenovo-Y470;Database=master;uid=sa;pwd=123;"); SqlC
26、onnection c = new SqlConnection("Server=Lenovo-Y470.;Database=master;uid=sa;pwd=123;Trusted_Connection=False"); c.Open(); //c.Close(); SqlCommand cmdRT=new SqlCommand(); cmdRT.CommandType=CommandType.Text; cmdRT.Connection=c;
27、 cmdRT.CommandText=@"use master restore database tb_library from disk='C:/ba.bak' with replace"; try { cmdRT.ExecuteNonQuery(); MessageBox.Show("Restore successed."); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { c.Close(); } } p
28、rivate void 数据库备份oolStripMenuItem_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(" Server=Lenovo-Y470;Database=master;uid=sa;pwd=123;"); SqlCommand cmdBK = new SqlCommand(); cmdBK.CommandType = CommandType.Text;
29、 cmdBK.Connection = conn; cmdBK.CommandText = @"backup database db_library to disk='C:/ba.bak' with init"; try { conn.Open(); cmdBK.ExecuteNonQuery(); MessageBox.Show("Backup successed.");
30、MessageBox.Show("已备份于c盘根目录下."); conn.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { conn.Close(); conn.Dispose();
31、 } } private void 退出ToolStripMenuItem1_Click(object sender, EventArgs e) { this.Close(); } } } 4.1.3 图书数据维护模块界面如下 代码如下: namespace WindowsFormsApplication1 { public partial class FmDataTS : Form { public FmD
32、ataTS() { InitializeComponent(); } private void groupBox1_Enter(object sender, EventArgs e) { } private void TxtTSBH_TextChanged(object sender, EventArgs e) { } private void FormDataTS_Load(object
33、 sender, EventArgs e) { try { SqlConnection con = DBConnect.con(); String sql = "SELECT *FROM tb_bookInfo"; SqlDataAdapter Adpt = new SqlDataAdapter(sql, con); DataSet ds = new DataSet();
34、 Adpt.Fill(ds, "tb_bookInfo"); dataGridView1.DataSource = ds.Tables[0].DefaultView; con.Close(); } catch (Exception cw) { MessageBox.Show(cw.Message); } } public void b
35、inding() { try { TxtTSBH.Text = dataGridView1.SelectedCells[0].Value.ToString(); TxtTSLB.Text = dataGridView1.SelectedCells[1].Value.ToString(); TxtTSMC.Text = dataGridView1.SelectedCells[2].Value.ToString();
36、 TxtTSZZ.Text = dataGridView1.SelectedCells[3].Value.ToString(); //TxtTSYZ.Text = dataGridView1.SelectedCells[4].Value.ToString(); TxtTSCBS.Text = dataGridView1.SelectedCells[4].Value.ToString(); TxtCBRQ.Text = dataGridView1.SelectedCells
37、[5].Value.ToString(); TxtTSJG.Text = dataGridView1.SelectedCells[6].Value.ToString(); } catch (Exception cw) { MessageBox.Show(cw.Message); } } private void dataGridView1_CellContentClick(object
38、 sender, DataGridViewCellEventArgs e) { binding(); } private Boolean Check(string TSid) { SqlConnection con = DBConnect.con(); con.Open(); String sql = "select *from tb_bookInfo where ISBN='" + TSid + "'";
39、 SqlCommand cmd = new SqlCommand(sql, con); SqlDataReader rd; rd = cmd.ExecuteReader(); int x = 0; while (rd.Read()) x++; con.Close(); if (x > 0) { return true;
40、 } else { return false; } } private void BtnAdd_Click(object sender, EventArgs e) { if (TxtTSBH.Text != "") if (!Check(TxtTSBH.Text)) { Sql
41、Connection con = DBConnect.con(); con.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = "INSERT INTO tb_bookInfo VALUES('" + TxtTSBH.Text + "','" + TxtTSLB.Text + "','" + TxtTSMC.Text + "','" + TxtTSZZ.Text + "','" + TxtTSCBS.
42、Text + "','" + TxtCBRQ.Text + "','" + TxtTSJG.Text + "')"; cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show("输入数据成功!"); String sql = "SELECT *FROM tb_bookInfo"; SqlDataAdapter Adpt =
43、 new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); Adpt.Fill(ds, "tb_bookInfo"); dataGridView1.DataSource = ds.Tables[0].DefaultView; con.Close(); } else {
44、 MessageBox.Show("图书编号不能重复"); } else { MessageBox.Show("图书编号不能为空"); } } private void BtnUpdate_Click(object sender, EventArgs e) { if (MessageBox.Show("你确定要修改
45、图书数据吗!", "消息框", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.OK) { if (TxtTSBH.Text != "") if (Check(TxtTSBH.Text)) { try
46、 { SqlConnection con = DBConnect.con(); con.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = "UPDATE tb_bookInfo SET typeId='" + TxtTSLB.Text + "',bookname='" + TxtTSM
47、C.Text + "',writer='" + TxtTSZZ.Text + "',publisher='" + TxtTSCBS.Text + "',date='" + TxtCBRQ.Text+ "',price='" + TxtTSJG.Text + "'where ISBN='"+TxtTSBH.Text+"'"; cmd.Connection = con; cmd.ExecuteNonQuery(); Messa
48、geBox.Show("修改数据成功!"); String sql = "SELECT *FROM tb_bookInfo"; SqlDataAdapter Adpt = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); Adpt.Fill(ds, "tb_bookInfo");
49、 dataGridView1.DataSource = ds.Tables[0].DefaultView; con.Close(); } catch (Exception cw) { MessageBox.Show(cw.Message);
50、} } else { MessageBox.Show("图书编号不存在"); } else { MessageBox.Show("图书编号不能为空"); } }






