资源描述
课程设计报告
( 2011-—2012年度第2学期)
名 称:数据库原理课程设计
题 目:图书管理信息系统
院 系: 计算机系
班 级:
学 号:
学生姓名:
指导教师: 阎蕾
设计周数:1周
成 绩:
日期:2012年7月4日
《数据库原理课程设计》课程设计
任 务 书
一、 目的与要求
1. 本实验是为网络工程、信息安全等专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力而设置的实践环节。通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力.为后继课程和毕业设计打下良好基础。
2. 通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力.
3. 通过对一个数据库系统的设计,培养学生对数据库需求分析、数据库方案设计、系统编码、界面设计和软件调试等各方面的能力。是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。
二、 主要内容
针对一个具有实际应用场景的中小型系统(见题目附录)进行数据库设计,重点分析系统涉及的实体、实体之间的联系,实现增加、删除、更新、查询数据记录等基本操作。大致分为如下步骤:
1。 理解系统的数据库需求,分析实体及实体间联系,画出E-R图:
1. 分析确定实体的属性和码,完成对该实体的实体完整性、用户自定义完整性的定义。
2. 设计实体之间的联系,包括联系类型和联系的属性。最后画出完整的E-R图。
2.根据设计好的E—R图及关系数据库理论知识设计数据库模式:
1) 把E—R图转换为逻辑模式;
2) 规范化设计。使用关系范式理论证明所设计的关系至少属于3NF并写出证明过程;如果不属于3NF则进行模式分解,直到该关系满足3NF为止,要求写出分解过程。
3) 设计关系模式间的参照完整性,要求实现级联删除和级联更新.
4) 用SQL语言完成数据库内模式的设计。
3.数据库权限的设计:
1) 根据系统分析,完成授权操作;
2) 了解学习收回权限的操作.
4.完成用户界面的设计,对重要数据进行加密。
5.连接数据库,用宿主语言实现系统所需的各种操作:
1) 实现数据记录的录入、删除、查询和修改.
2) 以视图的形式完成复杂查询,比如多表、多条件等.
三、 进度计划
序号
设计(实验)内容
完成时间
备注
1
根据任务书完成信息模型(概念模型、逻辑模型、完整性、规范化)的设计,并基于选用的DBMS实现该信息模型,然后录入初始数据
2
根据任务书完成各种数据定义和数据操作,并保留所有SQL语句。
3
数据库权限设计,用户界面设计
4
用可视化开发工具环境开发学生选定的信息系统(C/S或者B/S模式)
5
系统的完善与验收
四、 设计(实验)成果要求
1. 在DBMS(如oracle,SQL Server 2005/2008,DB2等)上完成完整的数据库的设计;
2. 使用可视化开发平台完成信息系统,要求可以正确运行;
3. 完成实验报告。
五、 考核方式
1. 在微机上检查数据库模式的设计、三大完整性的设计、关系属于几范式等;
2. 在微机上检查系统的运行结果,要求学生阐述使用的相关技术;
3. 实验报告的检查。
六、 题目附录
1. 学生信息管理信息系统
2. 学生成绩管理信息系统
3. 图书管理信息系统
4. 物资管理信息系统
5. 汽车销售管理信息系统
6. 超市管理信息系统
7. 通讯录管理信息系统
8. 工资管理信息系统
9. 酒店管理信息系统
10. 小区物业管理信息系统
学生姓名:
指导教师:
年 月 日
一、课程设计的目的与要求
1. 本实验是为网络工程、信息安全等专业的学生在学习数据库原理后,为培养更好的解决问题和实际动手能力而设置的实践环节.通过这个环节,使学生具备应用数据库原理对数据库系统进行设计的能力。为后继课程和毕业设计打下良好基础。
2. 通过该实验,培养学生在建立数据库系统过程中使用关系数据理论的能力。
3. 通过对一个数据库系统的设计,培养学生对数据库需求分析、数据库方案设计、系统编码、界面设计和软件调试等各方面的能力.是一门考查学生数据库原理、面向对象设计方法、软件工程和信息系统分析与设计等课程的综合实验。
二、设计正文
1. 需求分析
1.1 图书管理信息系统就是实现图书的管理
1.2 可分为三种用户:管理员,其权限最大,有增删图书信息,更改图书种类,增加图书,修改普通用户信息;普通用户,对图书进行查阅,借书和还书.
2. 系统功能设计,可以用模块结构图、功能结构图来描述。
功能结构图:
用户登录
普通用户
系统管理员
修改用户信息
增删图书借阅记录
还书
查询图书
借阅图书
增删图书
增删用户
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 System。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(object 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.CheckAdmin(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("帐号或密码错误”);
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 sender, 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。DataOperator.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;
button2。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 frmIssueBook(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。CurrentAccount;
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 string[4];
sdata[0] = BookNo。Text;
sdata[1] = NoOfPersonal。Text;
sdata[2] = NameOfPersonal。Text;
sdata[3] = IssueOfDate。Text;
if (sdata[0] == ”" || sdata[1] == ”” || sdata[2] == ”" || sdata[3]==””)
{
MessageBox。Show(”资料不完整!”);
return;
}
// MessageBox。Show(sdata[0]+” ”+sdata[1]+” "+sdata[2]+” ”+sdata[3]);
switch (Program.DataOperator.IssueBook(sdata))
{
case 1:
MessageBox。Show(”你已借了这本书!");
break;
case 2:
MessageBox。Show("借书成功!”);
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;
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.SizeMode = 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)
{
大类ComboBox。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 in SmallClassOfBook)
小类ComboBox。Items。Add(sdata);
}
private void SerchBox_Click(object sender, EventArgs e)
{
try
{
string []SerchData=new string[3];
for (int i = 0; i 〈 SerchData。Length; i++)
SerchData[i] = "%”;
if(SerchBoxNo。Text!="”)
SerchData[0] = SerchBoxNo。Text;
if(SerchBoxName。Text!=”")
SerchData[1] = SerchBoxName。Text;
string CmdString = "SELECT 书籍编号, 书名, 作者, 出版社, 现有数量, 小类, 大类, 内容简介, 入库时间, 图片 FROM dbo。Book "
+ " where 书籍编号 like ’” + SerchData[0] + ”'" + " and 书名 like ’%” + SerchData[1] + ”%’”;
// MessageBox。Show(CmdString);
Program。SerchCmd[1]。CommandText = CmdString;
try
{
this。bookTableAdapter。FillBy(this。mydata2DataSet。Book);
}
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, MessageBoxIcon.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”中。您可以根据需要移动或移除它。
this。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。Drawing ;
namespace BookManagementSystem
{
public class DataOperation
{
SqlConnection sqlconn;
SqlCommand cmd;
SqlParameter para;
public DataOperation()
{
try
{
sqlconn = new SqlConnection(@"Data Source=LENOVO—PC;Initial Catalog=MYDATA2;Persist Security Info=True;User ID=sa;Password=123456123");
sqlconn.Open();
cmd = 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 thisReader = 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(thisDataSet, "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();
return 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[] { ’+' })[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;
}
public int IssueBook(string []Insert)
{
try
{
cmd。CommandText = ”select * from IssueBook where 图书编号=’”+Insert[0]+”’ and "+”借书人编号='"+Insert[1]+”' 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 = Insert[0];
cmd。Parameters。Add(para);
para = new SqlParameter(”@借书人编号”
展开阅读全文