资源描述
成
绩
课 程 设 计
课程名称_ 数据库系统课程设计__
题目名称 图书馆借阅管理系统
学生学院 计算机学院
专业班级 12级网络工程1班
学 号_____311323_______
学生姓名 丁 晗
指导老师____ 宋 玮_________
年 1 月17日
评价标准
分数百分比(%)
成绩
论文
论文结构包含:相关技术介绍、需求分析、概念结构设计、逻辑结构设计、数据库物理设计、数据库实施、系统测试方案和测试汇报、系统关键功效和使用说明、系统安装说明。
要求论文完整、内容具体,格式规范。
40
程序
系统运行正确;
功效完善:有增、删、改、查功效,有基础报表、查询、统计和输入、输出功效;
工作量充足;
系统实现技术难度。
30
数据
库设
计
E-R图设计正确;
数据库逻辑结构设计规范化;
数据库物理设计合理。
30
总评成绩
优
良
中
及格
不及格
总分
目录
一. 相关技术介绍····················1
二. 需求分析······················1
三. 概念结构设计····················2
四. 逻辑结构设计····················3
五. 数据库物理设计···················4
六. 数据库实施·····················7
七. 课程设计心得··················17
八. 参考文件·····················17
一.相关技术介绍
1.1 C++Builder 6 介绍
C++ Builder是由Borland企业推出一款可视化集成开发工具。C++ Builder含有快速可视化开发环境:只要简单地把控件(Component)拖到窗体(Form)上,定义一下它属性,设置一下它外观,就能够快速地建立应用程序界面;C++ Builder内置了100多个完全封装了Windows公用特征且含有完全可扩展性(包含全方面支持ActiveX控件)可重用控件;C++ Builder含有一个专业C++开发环境所能提供全部功效:快速、高效、灵活编译器优化,逐步连接,CPU透视,命令行工具等。它实现了可视化编程环境和功效强大编程语言(C++)完美结合。
1.2 Microsoft SQL Server 介绍
Microsoft SQL Server 是一个全方面数据库平台,使用集成商业智能 (BI)工具提供了企业级数据管理。Microsoft SQL Server 数据库引擎为关系型数据和结构化数据提供了更安全可靠存放功效,使您能够构建和管理用于业务高可用和高性能数据应用程序。
Microsoft SQL Server 数据引擎是该企业数据管了处理方案关键。另外 Microsoft SQL Server 结合了分析、报表、集成和通知功效。这使您企业能够构建和布署经济有效 BI 处理方案,帮助您团体经过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务各个领域。
二. 需求分析
2.1系统功效模块图
图书借阅管理系统
登录和账号管理
用户注册和注销
借阅管理
工作人员注册和注销
读者注册和注销
旧书淘汰
新书入库
还书
借书
账号管理
系统登录
2.2系统数据步骤图
图书管理员
入库/出库
注册/注销
还书
借书
用户信息库存
图书和借阅信息库存
读者
2.3系统功效设计
(1)密码和权限管理
(2)书目查询
(3)借书和还书
(4)读者注册和注销
(5)新书入库和淘汰
(6)账号管理
(7)窗口管理
三.概念结构设计
3.1 E-R图
图书
图书工作人员
n
用户
1
注册和注销 借书
读者
3.2属性描述
l 读者:{读者编号,读者姓名,用户名,密码,性别,工作地点,身份,已借书数量,备注};
l 图书:{书号,书名,作者,出版社,出版日期,索引书号,价格,状态(1为借出&0为在馆)};
l 图书馆工作人员:{工作人员编号,姓名,登录密码};
l 借书信息:{借书单编号,读者编号,读者姓名,书号,书名,作者,借出日期,应还日期,工作人员编号};
四. 逻辑结构设计
4.1表
(1)读者信息表
名称
数据类型
是否为空
说明
ReaderID
Char(7)
Not null
读者编号(主键)
Name
Varchar(8)
Not null
读者姓名
UserName
Varchar(12)
Not null
用户名
Password
Varchar(12)
密码
Gender
Char(2)
性别
Unit
Varchar(50)
工作单位
Ident
Varchar(10)
身份
Number
Char(2)
Not null
已借数量
Remark
Varchar(500)
备注
(2)图书信息表
名称
数据类型
是否为空
说明
BookID
Char(5)
Not null
书号(主键)
BookName
Varchar(50)
Not null
书名
Editor
Varchar(8)
作者
Publisher
Varchar(50)
出版社
PubDate
DateTime
出版日期
BookIndex
Varchar(20)
索引书号
Price
money
价格
State
Char(2)
Not null
状态(1.借出,0.在馆)
(3)工作人员表
名称
数据类型
是否为空
说明
LibrarianID
Char(5)
Not null
工作人员编号(主键)
Name
Varchar(50)
Not null
工作人员姓名(登录用户名)
Password
Varchar(12)
Not null
密码
(4) 借书信息表
名称
数据类型
是否为空
说明
TaskID
Int Identity(1000,1)
Not null
借书信息编号(主键)
ReaderID
Char(7)
Not null
读者编号
ReaderName
Varchar(8)
读者姓名
BookID
Char(5)
Not null
书号
BookName
Varchar(50)
书名
Editor
Varchar(8)
作者
BorrowDate
DateTime
Not null
借出日期
ReturnDate
DateTime
Not null
应还日期
LibrarianID
Char(5)
Not null
工作人员编号
五. 数据库物理设计
5.1创建数据库
开启SQL Server 企业管理器,创建一个名为BookBorrowingManager数据库
5.2关系图
5.3使用ODBC连接数据库
(1)点击“开始”->“搜索”,输入ODBC,打开ODBC数据源管理器,单击“添加”按钮,选择SQL Server。
(2) 单击“完成”按钮,出现下图所表示界面。分别设置数据库别名和运行SQL Server数据库计算机名。
(3)单击“下一步”按钮,在此界面设置数据库登录方法,一个是使用网络ID放式,一个是使用Windows系统登录方法,此课设使用网络ID方法。
(4)单击“下一步”按钮,在新界面选择对应数据库。在此选择创建好BookBorrowingManager数据库。
(5)单击“下一步”按钮,在出现界面设置语言种类、日志文件等。单击“完成”按钮,出现数据库连接测试界面。单击“测试”按钮,检验所创建别名是否能成功连接数据库。成功则创建完成,失败则返回检验。
六.数据库实施
6.1创建数据库
6.2实施SQL语句创建表
create table Reader
(
ReaderID char(7) not null primary key,
Name varchar(8) not null,
UserName varchar(8) not null,
Password varchar(12),
Gender char(2),
Unit varchar(50),
Ident varchar(10),
Number char(2) not null,
Remark varchar(500)
);
create table book
(
BookID char(5) not null primary key,
BookName varchar(50) not null,
Editor varchar(8),
Publisher varchar(50),
PubDate datetime,
BookIndex varchar(20),
Price money,
state char not null
);
create table Librarian
(
LibrarianID char(5) not null primary key,
Name varchar(50) not null,
Password varchar(12) not null
);
create table borrowing
(
TaskID int identity(1000,1)not null primary key,
ReaderID char(7) not null,
ReaderName varchar(8),
BookID char(5)not null,
BookName varchar (50),
Editor varchar(8),
BorrowDate datetime not null,
ReturnDate datetime not null,
LibrarianID char(5) not null
);
6.3写入数据
直接在表中加入数据
读者信息表
图书信息表
借书信息表
工作人员表
6.4数据库备份方案
(1)开启SQL Server 企业管理器,登录到指定数据库服务器,打开数据库文件夹,右击要进行备份数据库图标,在弹出快捷菜单中选择“全部任务”、“备份数据库”命令,打开“SQL Sever备份”对话框。
(2) 在“备份”选项中,选择备份类型(完全或差异);在“目标”选项
组中,单击“添加”,打开“选择备份目标”对话框。
(3)在“重写”选项中,选择“追加到媒体”单选按钮,可将备份追加到设备上任何现有设备中;选择“重写现有媒体”单选按钮,可重写设备中现有备份。
(4)假如需要定时进行备份操作,能够选择“调度”复选框,然后选择路径,在打开“编辑调度”对话框中对设置备份时间。
(5)设置完成后,则在“SQL Sever 备份”,对话框中单击“确定”,备
份成功。
6.5数据库还原方案
(1)开启SQL Sever企业管理器,登录到指定数据库服务器,打开数据库文件夹,右击要进行备份数据库图标在弹出快捷菜单中选择“全部任务”、“备份数据库”命令,打开“还原数据库”对话框。
(2)在“还原为数据库”下拉列表框中选择要恢复数据库,在“还原”选项组中选择对应数据库备份类型。
(3)先中“选项”选项卡,能够进行其它选项设置。
(4)设置完成,单击“确定”按钮即可开始还原数据。
6.6输出已连接好数据库中数据方法
在c++builder 6.0中建立界面,拉入Query组件。把databasename属性值设为borrowing,以让她连接已连接好数据库;把SQL属性值设置为select * from xxx,查询语句查询xxx表(xxx为表名);最终将Active属性值设置为true。以使此组件运行。
假如需要让所查询表显示出来,需要拉入DataSourse和DBGrid组件。
例: Query name属性:ReaderTable Query1
Databasename属性:borrowing
SQL属性:select * from Reader
Active属性:true
DataSource DataSet属性:ReaderTable Query1
DBGrid DataSourse属性:BorrowingTableDataSource3
此时,就能够使DBGrid组件显示出Reader表内容。
6.7关键代码
(1)登录代码
void __fastcall TMainForm::NLoginClick(TObject *Sender)
{
IdentityStr="";
UserName="";
PassStr="";
Login();
if(IdentityStr=="")
{
ShowMessage("请选择身份");
}
else if(IdentityStr=="读者")
{
NBrowsingBook->Enabled=true;
NAlterUserPass->Enabled=true;
}
else if(IdentityStr=="工作人员")
{
NBrowsingBook->Enabled=true;
BorrowingManage->Enabled=true;
NAlterUserPass->Enabled=true;
}
else if(IdentityStr=="系统管理员")
{
NAlterUserPass->Enabled=true;
NBrowsingBook->Enabled=true;
BorrowingManage->Enabled=true;
SystemManage->Enabled=true;
}
bool TMainForm::Login()
{
int flag=-1;
TLoginForm *LoginForm;
LoginForm=new TLoginForm(this);
flag=LoginForm->ShowModal();
while (flag!=mrYes)
{
int msg=MessageDlg("您还没有登录,不能进入系统,放弃登录吗?",mtConfirmation,TMsgDlgButtons()<<mbYes<<mbNo,0);
if(msg==6){IdentityStr="";return false;}
flag=LoginForm->ShowModal();
}
String strSQL;
IdentityStr=LoginForm->IdentityComboBox->Text;
if(IdentityStr=="读者")
strSQL="select * from Reader where UserName='"+LoginForm->UserEdit->Text+"'";
else if(IdentityStr=="工作人员")
strSQL="select * from Librarian where LibrarianID='"+LoginForm->UserEdit->Text+"'";
else
{
if((LoginForm->UserEdit->Text!="boss")||
(LoginForm->PassEdit->Text!="boss"))
{
ShowMessage("非法管理员");
IdentityStr="";
return false;
}
else
{
UserName=LoginForm->UserEdit->Text;
PassStr=LoginForm->PassEdit->Text;
IdentityStr=LoginForm->IdentityComboBox->Text;
return true;
}
}
LoginQuery->SQL->Text=strSQL;
LoginQuery->ExecSQL();
LoginQuery->Active=true;
if(LoginQuery->RecordCount==0)
{
ShowMessage("该用户不存在,请先注册!");
IdentityStr="";
return false;
}
if(LoginQuery->Fields->FieldByName("Password")->AsString!=LoginForm->PassEdit->Text)
{
ShowMessage("密码错误");
return false;
}
UserName=LoginForm->UserEdit->Text;
PassStr=LoginForm->PassEdit->Text;
IdentityStr=LoginForm->IdentityComboBox->Text;
LoginForm->Free();
return true;
}
(2)借书代码
void __fastcall TBorrowingBook::BitBtn1Click(TObject *Sender)
{
int BookNumber;
ReaderTableQuery1->SQL->Text="select * from Reader where ReaderID='"+ReaderIDEdit->Text+"'";
ReaderTableQuery1->ExecSQL();
ReaderTableQuery1->Active=true;
if(ReaderTableQuery1->RecordCount==1)
{
ReaderNameEdit->Text=ReaderTableQuery1->Fields->FieldByName("Name")->AsString;
BookNumber=ReaderTableQuery1->Fields->FieldByName("Number")->AsInteger;
if(BookNumber>=MaxBookNumber)
{
ShowMessage("读者已借满");
return;
}
}
else
{
ShowMessage("读者没有注册,借书失败");
return;
}
BookTableQuery2->SQL->Text="select * from book where BookID='"+BookIDEdit->Text+"'";
BookTableQuery2->ExecSQL();
BookTableQuery2->Active=true;
if(BookTableQuery2->RecordCount==1)
{
BookNameEdit->Text=BookTableQuery2->Fields->FieldByName("BookName")->AsString;
EditorEdit->Text=BookTableQuery2->Fields->FieldByName("Editor")->AsString;
if(BookTableQuery2->Fields->FieldByName("State")->AsString=="1")
{
ShowMessage("该书已被借出,操作失败!");
return;
}
}
else
{
ShowMessage("没有这本书,操作失败!");
return;
}
BorrowDateEdit->Text=DateToStr(Date());
ReturnDateEdit->Text=DateToStr(Date()+30);
//LibrarianIDEdit->Text=LibrarianID;
String strSQL="";
strSQL="Insert into borrowing(ReaderID,ReaderName,BookID,BookName,Editor,BorrowDate,ReturnDate,LibrarianID) values(";
strSQL=strSQL+"'"+ReaderIDEdit->Text;
strSQL=strSQL+"','"+ReaderNameEdit->Text;
strSQL=strSQL+"','"+BookIDEdit->Text;
strSQL=strSQL+"','"+BookNameEdit->Text;
strSQL=strSQL+"','"+EditorEdit->Text;
strSQL=strSQL+"','"+BorrowDateEdit->Text;
strSQL=strSQL+"','"+ReturnDateEdit->Text;
strSQL=strSQL+"','"+LibrarianIDEdit->Text+"')";
BorrowingTableQuery3->SQL->Text=strSQL;
BorrowingTableQuery3->ExecSQL();
strSQL="Update book set state='1' where BookID='"+BookIDEdit->Text+"'";
//书状态置为1,借出状态
BorrowingTableQuery3->SQL->Text=strSQL;
BorrowingTableQuery3->ExecSQL();
strSQL="Update Reader set Number=Number+1 where ReaderID='"+ReaderIDEdit->Text+"'";
//读者能借书减一
BorrowingTableQuery3->SQL->Text=strSQL;
BorrowingTableQuery3->ExecSQL();
ShowMessage("借书成功");
BorrowingTableQuery3->SQL->Text="select * from borrowing";
BorrowingTableQuery3->Active=true;
BorrowingTableQuery3->Last();
}
6.8界面(1个主窗体,10个子窗体,子窗体不一一列出)
主界面
系统登录界面
书目查询界面
借书界面
还书界面
新书入库界面
6.9操作说明
(1) 打开系统,点击“系统”菜单,选择“登录系统”,输入用户名和密码,并选择身份。身份有读者、工作人员和系统管理员。
(2) 读者只能进行书目查询和更改自己账户信息操作;工作人员以自己编号为用户名,登录后能够进行书目查询、借书、还书、读者注册、读者注销、新书入库、旧书淘汰和更改自己账户等操作(工作人员只能改密码,不能改用户名);系统管理员只有一个,用户名和密码全部是boss,用此身份登录后能进行读者和工作人员全部操作,而且能够对工作人员信息进行添加和删除。
七.课程设计心得
此次课程设计我选择了图书借阅管理系统。因为编程知识不足,刚开始毫无头绪,以后我数次去图书馆查阅书籍,选择了c++builder作为界面开发软件,并用Microsoft SQL Server 开发了数据库。在课程设计时,我花了大量时间,完成了一个包含10个子窗体比较完善图书借阅管理系统。即使其中还有很多小瑕疵,不过总体上对自己课设满意。
八. 参考文件
1 魏俊鹏,于秋生. C++ Builder 6实用编程100例 中国铁道出版社
2 吴逸贤. 出色C++ Builder 6程序设计 科学出版社
展开阅读全文