1、课程设计报告( 2011-2012年度第2学期)名 称:数据库原理课程设计 题 目:图书管理信息系统院 系: 计算机系 班 级:学 号:学生姓名:指导教师: 阎蕾 设计周数:1周成 绩:日期:2012年7月4日数据库原理课程设计课程设计任 务 书一、 目的与要求1. 本实验是为网络工程、信息安全等专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力而设置的实践环节。通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力.为后继课程和毕业设计打下良好基础。2. 通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力.3. 通过对一个数据库系统的设计,培养学生对数据
2、库需求分析、数据库方案设计、系统编码、界面设计和软件调试等各方面的能力。是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。二、 主要内容针对一个具有实际应用场景的中小型系统(见题目附录)进行数据库设计,重点分析系统涉及的实体、实体之间的联系,实现增加、删除、更新、查询数据记录等基本操作。大致分为如下步骤:1。 理解系统的数据库需求,分析实体及实体间联系,画出E-R图:1 分析确定实体的属性和码,完成对该实体的实体完整性、用户自定义完整性的定义。2 设计实体之间的联系,包括联系类型和联系的属性。最后画出完整的E-R图。2根据设计好的ER图及关系数据库理论知
3、识设计数据库模式:1) 把ER图转换为逻辑模式;2) 规范化设计。使用关系范式理论证明所设计的关系至少属于3NF并写出证明过程;如果不属于3NF则进行模式分解,直到该关系满足3NF为止,要求写出分解过程。3) 设计关系模式间的参照完整性,要求实现级联删除和级联更新.4) 用SQL语言完成数据库内模式的设计。3数据库权限的设计:1) 根据系统分析,完成授权操作;2) 了解学习收回权限的操作.4完成用户界面的设计,对重要数据进行加密。5连接数据库,用宿主语言实现系统所需的各种操作:1) 实现数据记录的录入、删除、查询和修改.2) 以视图的形式完成复杂查询,比如多表、多条件等.三、 进度计划序号设计
4、(实验)内容完成时间备注1根据任务书完成信息模型(概念模型、逻辑模型、完整性、规范化)的设计,并基于选用的DBMS实现该信息模型,然后录入初始数据2根据任务书完成各种数据定义和数据操作,并保留所有SQL语句。3数据库权限设计,用户界面设计4用可视化开发工具环境开发学生选定的信息系统(C/S或者B/S模式)5系统的完善与验收四、 设计(实验)成果要求1 在DBMS(如oracle,SQL Server 2005/2008,DB2等)上完成完整的数据库的设计;2 使用可视化开发平台完成信息系统,要求可以正确运行;3 完成实验报告。五、 考核方式1 在微机上检查数据库模式的设计、三大完整性的设计、关
5、系属于几范式等;2 在微机上检查系统的运行结果,要求学生阐述使用的相关技术;3 实验报告的检查。六、 题目附录1 学生信息管理信息系统2 学生成绩管理信息系统3 图书管理信息系统4 物资管理信息系统5 汽车销售管理信息系统6 超市管理信息系统7 通讯录管理信息系统8 工资管理信息系统9 酒店管理信息系统10 小区物业管理信息系统学生姓名: 指导教师: 年 月 日一、课程设计的目的与要求1. 本实验是为网络工程、信息安全等专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力而设置的实践环节.通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力。为后继课程和毕业设计打下良好
6、基础。2. 通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力。3. 通过对一个数据库系统的设计,培养学生对数据库需求分析、数据库方案设计、系统编码、界面设计和软件调试等各方面的能力.是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。二、设计正文1 需求分析11 图书管理信息系统就是实现图书的管理12 可分为三种用户:管理员,其权限最大,有增删图书信息,更改图书种类,增加图书,修改普通用户信息;普通用户,对图书进行查阅,借书和还书.2 系统功能设计,可以用模块结构图、功能结构图来描述。功能结构图:用户登录普通用户系统管理员修改用户信息增删图
7、书借阅记录还书查询图书借阅图书增删图书增删用户3 数据库概念设计(含ER图)管理借阅管理员书籍用户 1 N M 1 1 1 1从属拥有拥有 1 N 1分类账户 管理员账户4 数据库逻辑设计4。1图书管理员表:admin:普通用户表:Reader:借阅图书信息用户表:IssueBook:图书表:Book:图书所属大类表:SmallClassOfBook:图书所属小类表:BigClassOfBook:4.2数据库关系图:5 系统编码与实现.主要功能截图和部分核心代码:5。1登录界面:部分代码:using System;using System。Collections。Generic;using S
8、ystem。ComponentModel;using System.Data;using System。Drawing;using System。Text;using System。Windows。Forms;namespace BookManagementSystem public partial class frmLogin : Form private Boolean IsPass; private int count = 0; public frmLogin() InitializeComponent(); private void frmLogin_FormClosing(objec
9、t sender, FormClosingEventArgs e) Program。DataOperator。CloseConnection(); Environment.Exit(1); private void BtnLogin_Click(object sender, EventArgs e) if (account。Text。Equals(”) MessageBox。Show(”帐号不能为空); return; if (checkBox.Checked) Program。IsAdministrator = true; IsPass = Program.DataOperator.Chec
10、kAdmin(account.Text, password.Text); if (IsPass) Program。CurrentAccount = account。Text; this.Dispose(); else Program。IsAdministrator = false; IsPass = Program.DataOperator。CheckUser(account.Text, password。Text); if (IsPass) Program。CurrentAccount = account。Text; this.Dispose(); MessageBox。Show(帐号或密码
11、错误”); count+; if (count = 5) MessageBox.Show(”错误登录次数太多!”, ”错误”,MessageBoxButtons。OK,MessageBoxIcon.Error); Program。DataOperator。CloseConnection(); Environment。Exit(1); return; private void name_KeyPress(object sender, KeyPressEventArgs e) BtnLogin。Enabled = true; private void BtnExit_Click(object se
12、nder, EventArgs e) Program。DataOperator.CloseConnection(); Environment。Exit(1); private void frmLogin_Load(object sender, EventArgs e) account.Focus(); 5.2图书查询:部分代码如下:private void BookManagementSystem_Load(object sender, EventArgs e) this。Activate(); listView1.Select(); ClassOfBook = Program。DataOpe
13、rator.GetBigClassOfBook(); IssueBook。Add(”借书”); IssueBook。Add(”还书”); IssueBook。Add(所有借还记录”); BookManage.Add(”书籍管理); BookManage。Add(人员管理”); BookManage.Add(”书籍类别管理”); SetBtn1(); private void SetBtn1() currbtn = btn1; listView1。Select(); listView1.Dock = DockStyle.None; button1.Dock = DockStyle.Top; bu
14、tton2。Dock = DockStyle。Bottom; button3。SendToBack(); button3。Dock = DockStyle.Bottom; listView1.BringToFront(); listView1。Dock = DockStyle。Bottom; listView1。Dock = DockStyle。Fill; listView1。Clear(); listView1。Items。Add(”, ”所有书籍”, 0); AddItemTolistView(0, ClassOfBook); 5.3借书界面:借书部分代码:public frmIssueB
15、ook(string no, string name, string CountOfBook, string txt) this.b = true; InitializeComponent(); this。BookNo。Text = no; this.BookName。Text = name; this。CountOfBook.Text = CountOfBook; this。synopsis.Text = txt; private void frmIssueBook_Load(object sender, EventArgs e) NoOfPersonal.Text = Program。Cu
16、rrentAccount; BookNo。ReadOnly = b; BookName。ReadOnly = b; button3.Enabled = !b; /MessageBox。Show(IssueOfDate.Text); this。AcceptButton = button1; private void button1_Click(object sender, EventArgs e) string sdata = new string4; sdata0 = BookNo。Text; sdata1 = NoOfPersonal。Text; sdata2 = NameOfPersona
17、l。Text; sdata3 = IssueOfDate。Text; if (sdata0 = ” sdata1 = ” | sdata2 = ” sdata3=”) MessageBox。Show(”资料不完整!”); return; / MessageBox。Show(sdata0+” ”+sdata1+” +sdata2+” ”+sdata3); switch (Program.DataOperator.IssueBook(sdata)) case 1: MessageBox。Show(”你已借了这本书!); break; case 2: MessageBox。Show(借书成功!”);
18、 this。Close(); break; case 3: MessageBox.Show(失败!); this。Close(); break; 5.4借书提示信息:5.5管理员界面:管理员进行书籍,人员管理部分代码如下: private void bookBindingNavigatorSaveItem_Click(object sender, EventArgs e) if (MessageBox。Show(确定要保存吗?, ”保存确定”, MessageBoxButtons。YesNo, MessageBoxIcon。Question) = DialogResult。No) return
19、; this.Validate(); this。bookBindingSource。EndEdit(); this.bookTableAdapter.Update(this。mydata2DataSet。Book); private void frmBookManager_Load(object sender, EventArgs e) / TODO: 这行代码将数据加载到表“mydata2DataSet。Book”中.您可以根据需要移动或移除它。 this.bookTableAdapter。Fill(this。mydata2DataSet。Book); 图片PictureBox.SizeMo
20、de = PictureBoxSizeMode。StretchImage; private void InImage_Click(object sender, EventArgs e) if (openFileDialog。ShowDialog() = DialogResult.OK) 图片PictureBox。Image = Program。DataProcessor.GetImageFromFilePath(openFileDialog.FileName); private void GetBookClass_Click(object sender, EventArgs e) 大类Comb
21、oBox。Items.Clear(); foreach (string sdata in pBigClassOfBook) 大类ComboBox。Items。Add(sdata); private void 大类ComboBox_SelectedIndexChanged(object sender, EventArgs e) ArrayList SmallClassOfBook = Program。DataOperator。GetSmallClassOfBook(大类ComboBox.Text); 小类ComboBox。Items。Clear(); foreach (string sdata
22、in SmallClassOfBook) 小类ComboBox。Items。Add(sdata); private void SerchBox_Click(object sender, EventArgs e) try string SerchData=new string3; for (int i = 0; i SerchData。Length; i+) SerchDatai = ”; if(SerchBoxNo。Text!=”) SerchData0 = SerchBoxNo。Text; if(SerchBoxName。Text!=”) SerchData1 = SerchBoxName。
23、Text; string CmdString = SELECT 书籍编号, 书名, 作者, 出版社, 现有数量, 小类, 大类, 内容简介, 入库时间, 图片 FROM dbo。Book + where 书籍编号 like ” + SerchData0 + ” + and 书名 like %” + SerchData1 + ”%”; / MessageBox。Show(CmdString); Program。SerchCmd1。CommandText = CmdString; try this。bookTableAdapter。FillBy(this。mydata2DataSet。Book);
24、 catch (System。Exception ex) System。Windows.Forms.MessageBox。Show(ex.Message); catch (Exception ex) / MessageBox。Show(ex.Message); 5。6管理员观察看借还信息:部分代码如下:private void issueBookBindingNavigatorSaveItem_Click(object sender, EventArgs e) if (MessageBox。Show(”确定要保存吗?”, 保存确定, MessageBoxButtons.YesNo, Messa
25、geBoxIcon.Question) = DialogResult.No) return; this.Validate(); this。issueBookBindingSource。EndEdit(); this。issueBookTableAdapter.Update(this。mydata2DataSet。IssueBook); private void frmIssueReturnManager_Load(object sender, EventArgs e) / TODO: 这行代码将数据加载到表“mydata2DataSet。IssueBook”中。您可以根据需要移动或移除它。 t
26、his。issueBookTableAdapter。Fill(this.mydata2DataSet。IssueBook); 5.7本实验中将所有的数据库查询,更新,删除等操作设置成方法,组合在一个类中。代码如下:using System;using System.Collections。Generic;using System。Text;using System.Data;using System。Data。SqlClient;using System。Windows。Forms;using System。Collections;using System。IO;using System。Dr
27、awing ;namespace BookManagementSystem public class DataOperation SqlConnection sqlconn; SqlCommand cmd; SqlParameter para; public DataOperation() try sqlconn = new SqlConnection(Data Source=LENOVOPC;Initial Catalog=MYDATA2;Persist Security Info=True;User ID=sa;Password=123456123); sqlconn.Open(); cm
28、d = sqlconn。CreateCommand(); catch (Exception ex) MessageBox.Show(ex。Message); public void CloseConnection() sqlconn.Close(); public Boolean CheckAdmin(string account, string password) cmd.CommandText = ”select * from admin where account=” + account + ” and password=” + password + ”; SqlDataReader t
29、hisReader = cmd。ExecuteReader(); if (thisReader.Read()) thisReader。Close(); return true; else thisReader.Close(); return false; public DataSet GetAllBookData() SqlDataAdapter thisAdapter = new SqlDataAdapter(”Select from Book”, sqlconn); DataSet thisDataSet=new DataSet(); thisAdapter。Fill(thisDataSe
30、t, Book); return thisDataSet; / thisAdapter.Fill(thisDataSet,Boo public ArrayList GetBigClassOfBook() cmd。CommandText = ”select from BigClassOfBook; SqlDataReader thisReader = cmd。ExecuteReader(); ArrayList p = new ArrayList(); while (thisReader。Read()) p。Add(thisReader”大类”); thisReader。Close(); ret
31、urn p; public ArrayList GetSmallClassOfBook(string BigClassOfBook) cmd.CommandText = ”select from SmallClassOfBook where 小类 LIKE ”+BigClassOfBook+”; SqlDataReader thisReader = cmd.ExecuteReader(); ArrayList p = new ArrayList(); while (thisReader。Read() p.Add(thisReader小类.ToString().Split(new Char +
32、)1); thisReader.Close(); return p; /public public ArrayList GetSmallClassOfBook() cmd。CommandText = select from SmallClassOfBook ”; SqlDataReader thisReader = cmd。ExecuteReader(); ArrayList p = new ArrayList(); while (thisReader。Read() p.Add(thisReader小类”.ToString()); thisReader。Close(); return p; p
33、ublic int IssueBook(string Insert) try cmd。CommandText = ”select from IssueBook where 图书编号=”+Insert0+” and +”借书人编号=+Insert1+” and ”+”还书日期=None; SqlDataReader thisReader = cmd。ExecuteReader(); if (thisReader。Read()) thisReader.Close(); return 1; thisReader.Close(); cmd。CommandText = ”insert into IssueBook values(图书编号,借书人编号,借书人姓名,借书日期,还书日期); para = new SqlParameter(”图书编号”, SqlDbType。NVarChar,50); para。Value = Insert0; cmd。Parameters。Add(para); para = new SqlParameter(”借书人编号”