1、 南京信息工程大学课程设计报告 课程名称 数据库系统基础 设计题目 图书管理系统 姓名 学号 专业班级 2011级计科2班2013年12月26号 1 引 言 1.1 问题的提出图书管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。 编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加借书证、查询借书证、删除借书证、借书信息、借书限制等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书管理系统。1.2任务与分析 本课题主要的目的是:1
2、强化和巩固理论基础,掌握数据库编程的基本技巧; 2要求用C#语言或其它语言及相应开发环境,实现一个小型完整程序的设计与开发; 系统概述:1.图书管理: 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。图书信息登入、查询和维护。2.读者管理,包括增加读者、修改读者信息,查询借书证持有人,删除读者信息等功能4.借还图书、资料的登记、超期处理等。5.图书、资料查询,借、还图书和资料情况查询。 6.图书、资料借阅情况的统计分析,以此作为图书馆图书、资料订够的依据之一。设计要求:1.进行需求分析,编写数据字典。2.设计E-R图。3.实现新进图书的数据录入。4.实现对所
3、有购进图书的分类查询和分类统计。5.能够按图书编号、图书名等分类查询现有图书的数量。6.记录借阅者的个人资料和所借图书的书名、书号数据等。 2程序的主要功能2.1添加功能添加一本图书的基本信息,包括书名、书号、名作者(译者)、出版社和图书简介。添加读者的相关信息添加图书借阅的基本信息,包括书号,借书证号,借书日期,应还书日期。2.2删除功能删除一本图书的基本信息,删除读者的基本信息,删除图书借阅基本信息。删除读者相关信息2.3显示功能显示所有图书信息,包括图书代码,图书名称,作者,出版社和简介。显示所有借阅信息,包括读者号,图书号,借书日期,应还书日期。2.4查找功能图书信息查找,可以更具图书
4、代码,图书名称,作者,出版日期和出版社进行查找。读者信息查找,可更具读者姓名,读者编号,年龄,性别和所在系进行查找。借阅信息查询,可更具图书编号和读者编号进行查询。2.5修改功能对图书和读者的信息进行修改。2.6备份和还原功能对数据库数据进行备份和还原,保护数据库的安全 3 系统的总体结构3.1模块描述图书馆信息管理系统可以分为四个模块,“综合查询模块”,“读者登陆模块”,“借还图书模块”,和“系统维护模块。为了区分不同的用户,我们设置管理员和普通用户的登录,分别对管理员和普通用户进行不同的用户权限设置,对他们的所能进行的操作进行不同的限制图书馆信息管理系统的功能模块如下图(2-1)所示 备份
5、与还原管理员信息维护图书信息维护读者信息维护借阅查询修改密码密码修改还书管理借书管理 读者登录管理员登录多条件查询图书信息查询 系统维护 借还管理 综合查询 图书管理系统 图2-12.2 系统总体流程图用户进入图书馆管理系统,成功登陆后,首先进行权限验证,对于普通管理员可以进行借书处理,还书处理,逾期处理,。读者可以进行图书信息查询,修改自己的密码,查阅自己的借阅记录,图书续借,罚金信息查询。系统管理员可以进行图书,读者信息维护,系统维护等操作 开始 退出安全管理管理员信息密码修改用户信息管理图书信息管理密码修改借阅查询图书查询 管理员登录普通用户登录 判断 登录 第3章 数据库设计3.1 数
6、据库需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入,收集基本数据、数据结构以及数据处理的流程,组成一份详尽的数据字典,为后而后具体设计打下基础。根据分析,可以列出以下数据项和数据结构:图书信息,包括的数据项有:ISBN号,索书号,书名,作者,价格,出版日期,出版社,管理员信息:管理员号,姓名,电话,身份证号,密码,权限。借阅信息:,读者账号,借出时间,应还时间。罚金信息:读者账号,金额。读者信息:读者账号,姓名,性别,身份证号,系别,密码。3.2 数据库物理结构设计得到上面的数据项和数据结构后,就可以设计出能够满足用户需求的各种实
7、体,以及它们之间的关系,为后面的逻辑结构设计打下基础。 以下分别是读者E-R图,图书E-R图,借阅信息E-R图,出版社E-R图,书库E-R图读者E-R图 读者性别读者证号姓名押金身份证号出生日期登录密码身份图书E-R图图书价格ISBN编号图书类型书名作者出版时间图书译者出版社借阅信息E-R图借阅信息读者证号借出时间归还时间借阅状态图书条形码类别出版日期价格出版社图书名ISBN作者身份证生日密码编号姓名性别类别译者管理图书管理员管理借阅图书借阅读者出生日期姓名编号押金性别读者证号密码身份证号借阅状态归还时间借出时间图书ISBN职业 3.3数据库逻辑结构设计在上面的实体以及实体之间关系的基础上,形
8、成数据库中的表格以及各个表格之间的关系。图书管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表示在数据库中的一个表。 表(3-2)图书数据表字段名类型长度是否为空主键外键说明ISBNvarchar20否是否ISBN号datevarchar20否否否booknamevarchar40否否否书名writervarchar20否否否作者Pricenumeric否否否单价Publishervarchar40是否是(出版社)出版社publishdatedatetime4是否否出版日期表(3-6)读者数据表字段名类型长度是否为空主键外键说明ISBNvarchar20否是否读者账号namev
9、archar8否否否姓名sexchar2否否否性别identityCardchar18否否否身份证号telvarchar20是否否电话keepmoneymoney10是否否押金zyvarchar20是否否职业datevarchar20是否否出生日期表(3-3)图书借阅数据表字段名类型长度是否为空主键外键说明bookisbnchar20否是否图书编号readerisbnchar20否否示(读者)读者账号borrowdatedatetime否是否借出时间shouldbackdatedatetime否否否应还时间bookpricemoney4否否否价格booknamevatchar20否否否书名表(
10、3-8)用户数据表字段名类型长度是否为空主键外键说明idchar4否是否管理员编号namevarchar8否否否姓名telvarchar11否否否电话adminchar1否否否用户类别passwordvarchar20否否否密码sexchar2否否否性别identityCardchar18否否否身份证号ageint2否否否年龄 第 4 章 详细设计4.1 用户界面设计当今软件界的所有软件无不是可视化的用户界面,它的好处不外乎它有美观、直接、操作者易懂和操作方便等好处。本系统设计思想:“为用户设计,而不是设计者”本系统设计原则:界面美观、操作方便并能高效率地完成工作。界面根据用户需求设计。界面能
11、引导用户操作的功能,并能提供一些帮助功能。4.1.1 登录界面系统登录界面截图如下:在用户登录界面,我们设置一个用户类别的选项,来判断登录系统的用户身份,不同的身份具有不同的权限,以此来保障系统的安全代码如下:string 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 passw
12、ord=+textBox2.Text+and admin=+comboBox1.Text+;SqlCommand cmd = new SqlCommand();/打开数据库连接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(); mForm.Sh
13、ow();/显示管理员登录界面 con.Close(); this.Visible = false; / if (radioButton1.Text = 0) else a = textBox2.Text; ViceMainForm mForm = new ViceMainForm(); mForm.Show();/显示普通用户的登录界面 con.Close(); this.Visible = false; else MessageBox.Show(请输入正确的账户和密码); private void button2_Click(object sender, EventArgs e) this
14、.Close();/关闭窗口 4.1.2 主界面显示 管理员主界面截图如下代码如下namespace WindowsFormsApplication1 public partial class MainForm : Form public MainForm() InitializeComponent(); private void 图书数据维护ToolStripMenuItem_Click(object sender, EventArgs e) FmDataTS TS = new FmDataTS(); TS.Show(); private void 读者数据维护ToolStripMenuIt
15、em_Click(object sender, EventArgs e) FmDataDZ DZ = new FmDataDZ(); DZ.Show(); private void 用户数据维护ToolStripMenuItem_Click(object sender, EventArgs e) FmDataYH YH = new FmDataYH(); YH.Show(); private void 用户密码修改ToolStripMenuItem_Click(object sender, EventArgs e) FmDataMM MM = new FmDataMM(); MM.Show()
16、; private void 图书借阅ToolStripMenuItem_Click(object sender, EventArgs e) FmJY JY=new FmJY(); 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 GH = new FmGH(); GH.Sh
17、ow(); private void 数据库还原ToolStripMenuItem_Click(object sender, EventArgs e) ; SqlConnection conn = new SqlConnection( Server=Lenovo-Y470;Database=master;uid=sa;pwd=123;); SqlConnection c = new SqlConnection(Server=Lenovo-Y470.;Database=master;uid=sa;pwd=123;Trusted_Connection=False); c.Open(); /c.Cl
18、ose(); SqlCommand cmdRT=new SqlCommand(); cmdRT.CommandType=CommandType.Text; cmdRT.Connection=c; 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
19、);finally c.Close(); private 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; cmdBK.Connection = conn; cmdBK.CommandText
20、 = backup database db_library to disk=C:/ba.bak with init; try conn.Open(); cmdBK.ExecuteNonQuery(); MessageBox.Show(Backup successed.); MessageBox.Show(已备份于c盘根目录下.); conn.Close(); catch (Exception ex) MessageBox.Show(ex.Message); finally conn.Close(); conn.Dispose(); private void 退出ToolStripMenuIte
21、m1_Click(object sender, EventArgs e) this.Close(); 4.1.3图书数据维护模块界面如下代码如下:namespace WindowsFormsApplication1 public partial class FmDataTS : Form public FmDataTS() InitializeComponent(); private void groupBox1_Enter(object sender, EventArgs e) private void TxtTSBH_TextChanged(object sender, EventArgs
22、 e) private void FormDataTS_Load(object sender, EventArgs e) try SqlConnection con = DBConnect.con(); String sql = SELECT *FROM tb_bookInfo; SqlDataAdapter Adpt = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); Adpt.Fill(ds, tb_bookInfo); dataGridView1.DataSource = ds.Tables0.DefaultView;
23、con.Close(); catch (Exception cw) MessageBox.Show(cw.Message); public void binding() try TxtTSBH.Text = dataGridView1.SelectedCells0.Value.ToString(); TxtTSLB.Text = dataGridView1.SelectedCells1.Value.ToString(); TxtTSMC.Text = dataGridView1.SelectedCells2.Value.ToString(); TxtTSZZ.Text = dataGridVi
24、ew1.SelectedCells3.Value.ToString(); /TxtTSYZ.Text = dataGridView1.SelectedCells4.Value.ToString(); TxtTSCBS.Text = dataGridView1.SelectedCells4.Value.ToString(); TxtCBRQ.Text = dataGridView1.SelectedCells5.Value.ToString(); TxtTSJG.Text = dataGridView1.SelectedCells6.Value.ToString(); catch (Except
25、ion cw) MessageBox.Show(cw.Message); private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) binding(); private Boolean Check(string TSid) SqlConnection con = DBConnect.con(); con.Open(); String sql = select *from tb_bookInfo where ISBN= + TSid + ; SqlCommand cmd = ne
26、w SqlCommand(sql, con); SqlDataReader rd; rd = cmd.ExecuteReader(); int x = 0; while (rd.Read() x+; con.Close(); if (x 0) return true; else return false; private void BtnAdd_Click(object sender, EventArgs e) if (TxtTSBH.Text != ) if (!Check(TxtTSBH.Text) SqlConnection con = DBConnect.con(); con.Open
27、(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = INSERT INTO tb_bookInfo VALUES( + TxtTSBH.Text + , + TxtTSLB.Text + , + TxtTSMC.Text + , + TxtTSZZ.Text + , + TxtTSCBS.Text + , + TxtCBRQ.Text + , + TxtTSJG.Text + ); cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show(输入数据成功!); Strin
28、g sql = SELECT *FROM tb_bookInfo; SqlDataAdapter Adpt = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); Adpt.Fill(ds, tb_bookInfo); dataGridView1.DataSource = ds.Tables0.DefaultView; con.Close(); else MessageBox.Show(图书编号不能重复); else MessageBox.Show(图书编号不能为空); private void BtnUpdate_Click(o
29、bject sender, EventArgs e) if (MessageBox.Show(你确定要修改图书数据吗!, 消息框, MessageBoxButtons.OKCancel, MessageBoxIcon.Information) = DialogResult.OK) if (TxtTSBH.Text != ) if (Check(TxtTSBH.Text) try SqlConnection con = DBConnect.con(); con.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandText = UPDATE
30、tb_bookInfo SET typeId= + TxtTSLB.Text + ,bookname= + TxtTSMC.Text + ,writer= + TxtTSZZ.Text + ,publisher= + TxtTSCBS.Text + ,date= + TxtCBRQ.Text+ ,price= + TxtTSJG.Text + where ISBN=+TxtTSBH.Text+; cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show(修改数据成功!); String sql = SELECT *FROM tb_bookInfo; SqlDataAdapter Adpt = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); Adpt.Fill(ds, tb_bookInfo); dataGridView1.DataSource = ds.Tables0.DefaultView; con.Close(); catch (Exception cw) MessageBox.Show(cw.Message); else MessageBox.Show(图书编号不存在); else MessageBox.Show(图书编号不能为空);