实例图书管理信息系统的设计与开发.docx
- 文档编号:24457782
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:75
- 大小:865.74KB
实例图书管理信息系统的设计与开发.docx
《实例图书管理信息系统的设计与开发.docx》由会员分享,可在线阅读,更多相关《实例图书管理信息系统的设计与开发.docx(75页珍藏版)》请在冰豆网上搜索。
实例图书管理信息系统的设计与开发
第四部分:
实例操作----基于ADO的图书管理信息系统
从Delphi5开始,Borland公司引入Microsoft的ADO(ActiveXDataObject,即ActiveX数据对象)技术。
ADO是微软提供的可以访问数据库的一种接口方式。
ADO已经封装在Windows2000开始的Microsoft操作系统中,这使得数据库应用程序不需要捆绑数据引擎。
3.1ADO组件简介
在Delphi7组件面板上有ADO组件页,其中前6个是ADO组件,如图所示:
1.ADOConnection组件
用来建立与ADO数据库之间联系的组件,各种ADO的数据集及操作组件可以共用这种联系来执行命令、读取数据并执行相应的操作。
在6个ADO组件中,ADOConnection组件起一个桥梁的作用,其他5个组件都可以通过它来操作数据库,这样就避免每个组件都要建立自己的连接字符串。
ADOConnection组件对其他5个组件来说就相当于数据库别名。
它的优点是:
如果你的数据库的后台连接发生了变化,那么在程序里只需要将ADOConnection组件的连接属性改变以下就可以了;否则,需要修改所有数据对象组件的连接属性。
ADOConnection组件有两个重要属性:
◆ConnectionString
◆LoginPrompt(登录提醒)
●ConnectionString属性
ADOConnectoin组件及每一个ADO组件都有一个ConnectionString属性,利用该属性可以指定一个到数据库的连接。
给该属性提供一个值的方式是使用属性编辑器:
单击ObjectInspector中ConnectionString属性项右边的…按钮来调用属性编辑器,如图所示:
单击Build…按钮,弹出“数据链接属性”会话框
ConnectionString属性
数据链接属性窗口有4页。
在第一页即提供者(Provider)中列出了可以使用的各种数据库驱动程序,在该页中选择要连接的OLEDB提供者。
例如,为了通过OLEDB连接一个ACCESS2000数据库文件的驱动程序,可以选择对话框中的“MicrosoftJet4.0OLEDBProvider”
MicrosoftJet4.0OLEDBProvider
单击“下一步”按钮
单击此按钮,弹出下面的会话框,从中选择要连接的数据库名
单击“打开”按钮
打开C:
\ProgramFiles\Common\BorlandShared\Data\DBDEMOS.MDB
被选中的数据库名加入到此框中
单击此按钮,完成数据库连接测试
如果连接成功,会弹出下面的会话框:
这样单击“确定”按钮,就会发现在下面的会话框中自动生成了“ConnectionString”.
ConnectionString的值也可以手工输入或在程序运行时再赋值。
ConnectionString:
Provider=MicroSoft.JetOLEDB.4.0;ID=Adimin;DataSource=C:
\ProgramFiles\CommonFiles\BorlandShared\Data\DBDEMOS.mdb;Mode=SharaDenyNone…
利用数据连接属性窗口上的高级(Adanced)页和“所有”(All)页可以设置多个连接属性,例如连接超时、访问许可、本地ID等。
●LoginPrompt属性
该属性决定是否弹出密码输入框。
默认值是True,即弹出密码输入框,用手工输入密码。
如果应用程序使用的数据库有密码,并且在上面的“连接”页面中输入了密码且选中“允许保存密码”,那么此属性社顶为False后,应用程序在运行时将不会弹出密码输入框了。
数据库设置了密码,并在此选中了“允许保存密码”,LoginPrompt属性设为False.
程序在运行时就不会弹出密码输入框了。
3.2图书管理信息系统的实现
3.2.1系统总体设计
3.2.2系统数据库设计
(1)Access数据库
本系统采用Microsoft公司的Access文件数据库来存放数据。
一个Access数据文件中可以包含多个数据表。
图书信息管理系统Access数据文件的名字是:
BookManage.mdb
三个数据表的名字:
1.Book
2.Reader
3.Lend
▲用MS-Access创建数据表,如下图所示
保存数据文件的路径:
C:
\ProgramFiles\
Borland\Delphi7
Projects\DataBase
自己建立的文件夹夹
数据文件名
点击“创建”按钮
单击
改为Memo1,
Memo为保留字字字!
Reader表
Lend表
▲给数据文件设置密码
从MS-Access的菜单“工具”|“安全”|“设置数据库密码”
设置密码:
(2)SQLServer2000数据库
数据库的四张数据表:
表1图书数据表—Book
表2读者数据表--Reader
表3借阅数据表–Lend
表4用户数据表–User(登录用)
列名
数据类型
长度
允许为空
说明
UserName
Varchar
10
操作员名称
UserPow
Varchar
10
操作员密码
UserLev
Varchar
2
操作员级别
在该数据表中先保存一条记录,作为系统启动后的初始用户和密码。
例如:
3.2.3工程窗体设计
共有5个窗体。
这5个窗体的Name属性及其单元文件如下:
序号
Name属性
单元文件名
Caption属性
1
MainForm
Main.pas
图书管理系统
2
BookForm
Book.pas
图书管理
3
ReaderForm
Reader.pas
读者管理
4
LendForm
Lend.pas
借阅管理
5
QueryForm
InfoQuery.pas
信息查询
工程文件名
BookManage.dpr
注意:
主窗口要Use其余4个窗口的单元文件。
即在主窗口的单元文件中加入usesBook,Reader,Lend,InfoQuery;
▲设计5个空白窗体,并按照上面表格中的名称命名:
记住:
主窗口(MainForm)要Use其余4个窗口的单元文件
3.2.4主窗体设计
主窗体的代码部分:
▲在主窗体创建时,要得到应用程序的当前路径并设置时间格式,为此,在主窗口单元文件“Main.pas”的变量定义处定义两个变量:
Mypath、MypathW(数据库文件的密码)。
具体程序如下所示:
unitMain;
public
{Publicdeclarations}
end;
var
MainForm:
TMainForm;
implementation
usesBook,Reader,Lend,InfoQuery;
主窗口要用到另外4个窗口
{$R*.dfm}
procedureTMainForm.BitBtn1Click(Sender:
TObject);
begin
BookForm.Show;
显示“图书管理”窗口
end;
procedureTMainForm.BitBtn2Click(Sender:
TObject);
显示“读者管理”窗口
begin
ReaderForm.Show;
end;
procedureTMainForm.BitBtn3Click(Sender:
TObject);
begin
LendForm.Show;
end;
显示“借阅管理”窗口
procedureTMainForm.BitBtn4Click(Sender:
TObject);
begin
关闭主窗口
Close;
end;
procedureTMainForm.BitBtn5Click(Sender:
TObject);
begin
这是第2页“信息查询”页上的“图书查询”按钮
QueryForm.Show;
end;
显示“信息查询窗口”
end.
3.2.5数据模块设计
建立数据模块–DataModule用来存放ADO组件对象,便于各窗体统一使用ADO组件对象访问数据库,同时也使得对数据库文件的修改和维护变得简单。
Name属性:
DataModuleADO
▲打开BookManege.dpr工程文件
▲从菜单File|New|Other点选DataModule.
▲放置3个ADO组件对象
▲单元文件名:
DataModule.pas
保存该单元文件DataModule.pas后,调出其余4个窗口,Use该DataModule.pas。
文件名:
DataModule.pas,是工程文件BookManage.mdb的一个Unit成员。
现在,该工程文件有如下成员:
DataModuleADO的代码:
unitDataModule;
interface
uses
Windows,SysUtils,Classes,DB,ADODB,DBTables;
type
TDataModuleADO=class(TDataModule)
ADOConnection1:
TADOConnection;
ADOTable1:
TADOTable;
ADOQuery1:
TADOQuery;
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
DataModuleADO:
TDataModuleADO;
implementation
仅此一项是通过菜单中的“UseUnit…”手工加上去的.
usesMain;
{$R*.dfm}
end.
3.2.6图书管理窗体设计
图书管理窗体包括:
▲新书入库
▲图书管理
调出先前设计好的BookForm空白窗体,放入TpageControl组件对象,按鼠标右键,选择NewPage产生2个新的页面。
1.新书入库
CostEdit
CodeEdit
NameEdit
AuthorEdit
PressEdit
OutTimeEdit
在MaxLength属性中输入10,限制书号的最大长度是10位
Button1
Button2
这些组件是Additional页上的StaticText组件。
它与Tlabel组件类似。
区别在于StaticText显示某些状态信息
图书管理窗体的代码:
▲在新书入库页面显示时,清空几个编辑框,并将输入焦点放在输入书号的编辑框CodeEdit上,这在新书入库页(TabSheet1)的Onshow事件的处理程序中实现:
procedureTBookForm.TabSheet1Show(Sender:
TObject);
begin
CodeEdit.SetFocus;
将输入焦点放在输入书号的编辑框CodeEdit上
CodeEdit.SelectAll;
NameEdit.Text:
='';
AuthorEdit.Text:
='';
OutTimeEdit.Text:
='';
CostEdit.Text:
='';
PressEdit.Text:
='';
Memo1.Clear;
end;
▲单击
按钮,将在几个编辑框中填入的数据加入到数据库中,其主要内容有:
(1)检查新书书号是否正确
(2)检查此书号是否存在,如果存在则退出入库操作
(3)将新书的数据加入到数据库中
以上功能在新书入库按钮的Onclick事件的处理程序中实现,代码如下:
procedureTBookForm.Button1Click(Sender:
TObject);
begin
ifLength(CodeEdit.Text)<>10then//新书书号长度是否为10
begin
MessageDlg('书号不正确',mtError,[mbok],0);
CodeEdit.SetFocus;
Exit;//书号不正确,退出入库操作
end;
withDataModuleADO.ADOQuery1do//检查新书的书号是否已存在
begin
SQL.Clear;
SQL.Add('selectCodefromBook
whereCode=:
Code');
//上面这段代码检查新书的书号是否已经存在
Parameters.ParamByName('Code').Value:
=
CodeEdit.Text;
Open;
ifRecordCount<>0then//此书已经存在
begin
MessageDlg('书号<'+CodeEdit.Text+'>已经存在
',mtError,[mbok],0);
CodeEdit.SetFocus;
Exit;
end;
Close;
end;
//下面的代码将新书的数据插入到图书数据表Book中
try
withDataModuleADO.ADOQuery1do
begin
SQL.Clear;
SQL.Add('insertinto
book(Code,Name,Author,Press,OutDate,Cost,Memo1)'+values(:
Code,:
Name,:
Author,:
Press,:
OutDate,:
Cost,
:
Memo1)');
Parameters.ParamByName('Code').value:
=
CodeEdit.Text;
Parameters.ParamByName('Name').value:
=
NameEdit.Text;
Parameters.ParamByName('Author').value:
=
AuthorEdit.Text;
Parameters.ParamByName('Press').value:
=
PressEdit.Text;
Parameters.ParamByName('Memo1').value:
=
Memo1.Text;
try
Parameters.ParamByName('OutDate').value:
=
StrToDate(OutTimeEdit.Text);
Except
MessageDlg('参数<出版时间>设置错误',mtError,[mbok],0);
Exit;
end;
try
Parameters.ParamByName('Cost').value:
=StrToFloat(CostEdit.Text);
Except
MessageDlg('参数<价格>设置错误',mtError,[mbok],0);
Exit;
end;
ExecSQL;
要提示的内容
end;
TabSheet1Show(Sender);
Except
MessageDlg('入库出错',mtError,[mbok],0);
该提示框的种类
end;
end;
●关于“MessageDlg”函数:
显示提示信息对话框,函数的原型声明:
funcationMessageDlg(constMsg:
string;Atype:
TmsgDlgType;
Abuttons:
TMsgDlgButtons;HelpCtx:
Longint):
Word
默认值设置为0
提示框内按钮的种类
MessageDlg函数内的参数传入值及函数返回值意义见下表:
AType参数值的内容
AType参数值
意义
mtWaring
警告信息显示窗口
mtError
错误信息显示窗口
MtInformation
帮助信息窗口
mtConfirmation
确认信息显示窗口
MtCustom
自定义信息窗口
AButtons参数值内容及函数返回值
AButton参数值
意义
返回值
mbYes
加上“是”按钮
mrYes
mbNo
加上“否”按钮
mrNo
mbOk
加上“确定”按钮
mrOk
mbCancel
加上“取消”按钮
mrCancel
mbHelp
加上“帮助”按钮
mrHelp
mbAbort
加上“终止”按钮
mrAbort
mbRetry
加上“重试”按钮
mrRetry
mbIgnore
加上“忽略”按钮
mrIgnore
mbAll
加上“全部”按钮
mrAll
●ShowMessage:
这是Delphi提供的简易信息提示窗口。
这个过程只有一个字符串参数,你可以把要显示出来的字符串放到这个字符串参数内就可以了:
如ShowMessage(“复制成功!
”);
●MessageBox:
这是Win32API内的函数,作用是建立消息框窗体。
该函数的格式:
intMessageBox(
HWNDHwnd,//信息窗口所有者的窗口handle
LPCTSTRlpText,//信息窗口内的信息字符串
LPCTSTRlpCaption//信息窗口的标题字符串
UNITuType//信息窗口的类型
);
第一个参数所有者的窗口handle,如果没有,就设置成NULL;
第二个及第三个参数的类型是PChar,者两个字符串就是你要显示的字符串信息;
最后一个参数则是信息窗口的类型。
如MessageBox(Form1.Handle,‘提示信息窗口!
’,’Dialog’,MB_OK);
它的功能与MessageDlg函数相同。
建议使用该函数作为信息提示窗口,因为它所声明的类型都是ObjectPascal的标准类型,而且它的组合定义也比较简单。
2.图书管理
图书管理页完成对数据库中图书数据的修改。
DataSet属性:
DataModuleADO.ADOTable1
图书管理页的界面设计
这些都是数据感知组件,必须指定DataSource属性:
DataSource1
StaticText组件
这些都是DBEdit组件
每个组件的Name
如框内所示
ComboBox1
初始化:
在图书管理页显示时,将数据库中所有图书的书号插入到ComboBox1中,供用户选择。
这在TabSheet2(图书管理页)的Onshow事件的处理程序中实现:
procedureTBookForm.TabSheet2Show(Sender:
TObject);
图书管理窗体的第2页:
图书管理
var
i:
integer;
begin
ComboBox1.Items.Clear;
withDataModuleADO.ADOQuery1do
执行查询功能
begin
SQL.Clear;
SQL.Add('selectCodefrombook');
Book数据表
Open;
First;
将所有图书号都加入到
ComboBox1框中
fori:
=0toRecordCount-1do
beginComboBox1.Items.Add(FieldbyName('Code').AsString);
Next;
end;
Close;
end;
end;
用户选择要处理的图书号有两种办法:
1)从ComboBox1框的下拉菜单中选择书号。
上面的过程已经把库中所有的图书号都列出来了
2)在ComboBox1中输入需要修改的书号。
当ComboBox1编辑框中的书号发生变化时,即触发ComboBox1的OnChange事件,在这个事件中,将该书号的图书信息在窗口所列的DBEdit组件中显示出来:
procedureTBookForm.ComboBox1Change(Sender:
TObject);
begin
ifLength(ComboBox1.Text)=10then
begin
try
withDataModuleADO.ADOTable1do
begin
TableName:
='book';
在窗口的DBEdit组件中分别列出各字段信息
DBOutDate.DataField:
='OutDate';
DBName.DataField:
='Name';
DBAuthor.DataField:
='Author';
DBPress.DataField:
='Press';
DBCost.DataField:
='Cost';
DBMemo.DataField:
='Memo1';
Active:
=True;//激活book数据表
Locate('code',ComboBox1.Text,[]);
在数据库中查找ComboBox1中所列出的书号“Code”
Edit;
end;
except
MessageDlg('数据操作出错',mtError,[mbok],0);
end;
end;end;
采用手工输入书号的方法
如果用户在ComboBox1的编辑框中输入需要修改的图书的书号,输入完后,按下回车键,则实现ComboBox1的Change事件,实现上面那段程序的功能。
代码如下:
procedureTBookForm.ComboBox1KeyDown(Sender:
TObject;varKey:
Word;Shift:
TShiftState);
13是ASCII码.(键盘编码)
表示的意义:
回车符.
光标回到最左边的位置.
另:
ASCII码中的10是换行符.
begin
ifKey=13then
ComboBox1Change(Sender);
end;
保存数据:
修改完数据后按下“保存”按钮,把数据保存下来。
“保存”按钮
procedureTBookForm.Button3Click(Sender:
TObject);
确认对“Book”数据表的修改
实现“保存”。
begin
try
DataModuleADO.ADOTable1.Post;
DataModuleADO.ADOTable1.Active:
=False;
except
MessageDlg('保存出错',mtError,[mbok],0);
Book数据表不再被激活
end;
ComboBox1.SetFocus;
end;
3.2.7读者管理模块
读者管理模块要实现2个功能:
▲新读者数据的录入
▲老读者数据的修改
读者管理
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实例 图书 管理信息系统 设计 开发