经济管理学院本科课程设计论文
数据库开发与应用课程设计
学 号:
姓 名:
班 级:
专 业:
系 别:
指导教师:
2010 年 12 月24日 吉 林
目录
第一章 引言…………………………………………….2
第一节 课程设计目的............................................................................................................... 2
第二节 背景.......................................................................................................................................... 2
第三节 定义.......................................................................................................................................... 2
第四节 参考资料............................................................................................................................ 3
第二章 程序系统的组织结构................................................................................. 3
第一节 程序功能图...................................................................................................................... 3
第三章 详细设计说明...................................................................................................... 3
第一节 模块.......................................................................................................................................... 4
一、数据说明............................................................................................................................................ 4
二、窗体描述............................................................................................................................................ 6
1.部分代码与截图.............................................................................................................................. 6
第四章 课程设计总结...................................................................................................... 6
第一章 引言
第一节 课程设计目的
1.完成Delphi程序设计课程的教学之后,通过课程设计可以进一步巩固所学知识,加深理解
2.提高动手能力,调试程序的能力,解决问题的能力和实际开发应用的能力,掌握使用Delphi进行系统开发的一般步骤,方法和技巧。
3.本图书管理信息系统是利用计算机管理信息处理的迅速、准确、可靠且具有强大存储能力的突出特点,全面提高图书馆的管理水平和工作效率,并以及时、完整的业务经营资料,为图书馆的及时转换提供一定的支持。本图书管理系统涵盖了两个主要的子系统:信息管理和信息查询。其中信息管理包括四个小德子系统:图书管理、读者管理、借阅管理、退出;信息查询包括:图书查询、读者查询、借阅查询。并通过信息的收集、整理、存储、传递、维护、使用将它们有机地结合起来,提高了工作的准确率和效率。
4. 预期读者:图书管理员,学生,外界人士。
第二节 背景
说明:
1. 软件名称:图书馆管理系统
内容:登陆界面、信息管理、信息查询、图书管理、读者管理、借阅管理、图书查询、读者查询、借阅查询、退出。
2. 项目的任务提出者:冯彦超
开发者:冯彦超
测试:本人测试
第三节 定义
关键词:Delphi
Delphi是面向对象的开发工具,它是目前开发客户/服务器数据库应用程序的强有力的工具。Delphi目前有两个版本:标准版本和客户/服务器版本。标准版本包含一个Borland Database Engine的局部拷贝,它允许用户创建能访问Dbase,Paradox 和 Local Inter Base服务器的数据库应用,它还支持具有ODBC(Open Database Connecticity)接口的数据库。客户/服务器版本包括Borland SQL Link,它能直接访问Oracle,SyBase 和Microsoft SQL Server,Informix等多种数据库服务器。
第四节 参考资料
1.Delphi 程序设计教程 (第二版)
2.图书管理信息系统的设计流程参考 来源:网上下载
第二章 程序系统的组织结构
用一系列图表列出本程序系统内的每个程序(包括每个模块和子程序)的名称,标识符和他们之间的层次结构关系 。
第一节 程序功能图
图2.1程序功能图
第三章 详细设计说明
一 、数据说明
表3.1 管理员信息
表3.2 用户信息
表3.3 读者信息
表3.4 图书信息
表3.5 借书证信息
表3.6 查询借阅基本信息
二 、窗体描述
1. 部分代码与截图:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
DataSource1: TDataSource;
Table1: TTable;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses main;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if (table1.fields[0].value=Edit1.Text)and(table1.fields[1].value=Edit2.Text)then
mainform.Show
else
showmessage('错误');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Close;
end;
图3.1系统登录
图3.2数据库开发与应用课程设计主界面
窗体描述:当在登陆界面输入用户名和密码后就到达此界面;
用户名:1234
密码:1234
图3.3 图书管理
图书管理按钮的代码:
procedure Tbookform.Button1Click(Sender: TObject);
begin
//检查新入库图书的书号是否长度是否为10
if Length(CodeEdit.Text )<>10 then
begin
messagedlg('书号不正确',mtError,[mbok],0);
CodeEdit.SetFocus ;
exit;
end;
//检查书号是否已经存在
with dataModuleAdo.adoquery1 do
begin
sql.clear;
sql.Add('select code from book where code=:code');
parameters.ParamByName('code').Value :=codeedit.Text ;
open;
if recordcount<>0 then
begin
messagedlg('书号<'+codeedit.Text+'>已经存在',mtError,[mbok],0);
codeedit.SetFocus ;
exit;
end;
close;
end;
try
with datamoduleado.ADOQuery1 do
begin
sql.Clear;
sql.Add('insert into book(code,name,author,press,outdate,cost,memo0)'+
'values(:code,:name,:author,:press,:outdate,:cost,:MMEMO)');
parameters.ParamByName('code').Value :=codeedit.Text ;
parameters.ParamByName('name').Value :=nameedit.Text ;
parameters.ParamByName('author').Value :=authoredit.Text ;
parameters.ParamByName('press').Value :=pressedit.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;
try
parameters.ParamByName('MMEMO').Value :=memo1.Text ;
except
messagedlg('memo erro',mterror,[mbok],0);
exit;
end;
execSQL;
end;
Tabsheet1show(sender);
except
messagedlg('入库错误',mtError,[mbok],0);
end;
end;
图3.4读者管理
读者管理按钮代码
procedure TMainform.Button1Click(Sender: TObject);
begin
bookform.show;
end;
procedure TMainform.Button2Click(Sender: TObject);
begin
readerform.show;
end;
procedure TMainform.Button3Click(Sender: TObject);
begin
lendform.show;
end;
procedure TMainform.Button4Click(Sender: TObject);
begin
close;
end;
procedure TMainform.Button5Click(Sender: TObject);
begin
queryform.show;
end;
procedure TMainform.Button6Click(Sender: TObject);
begin
button5click(sender);
end;
procedure TMainform.Button7Click(Sender: TObject);
begin
button5click(sender);
end;
end.
图3.5 借阅管理
借阅管理按钮代码:
procedure Tlendform.FormShow(Sender: TObject);
var
i:integer;
begin
with datamoduleado.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select code from book');
open;
first;
for i:=0 to recordcount-1 do
begin
combobox1.Items.Add(fieldbyname('code').AsString );
next;
end;
close;
end;
end;
procedure Tlendform.ComboBox1Change(Sender: TObject);
var
fdate:tdate;
owntime:Tdate;
begin
readeridedit.Text :='';
totaledit.Text :='';
owntimeedit.Text :='';
fineEdit.Text :='';
if length(combobox1.Text )=10 then
begin
try
with datamoduleado.ADOTable1 do
begin
tablename:='book';
dbname.DataField :='name';
dbauthor.DataField :='author';
dbpress.DataField :='press';
dboutdate.DataField :='outdate';
dbcost.DataField :='cost';
dbmemo.DataField :='memo0';
active:=true;
if not locate('code',combobox1.Text ,[]) then
begin
messagedlg('没有数据或数据库操作失败',mterror,[mbok],0);
exit;
end;
end;
except
messagedlg('数据操作出错',mterror,[mbok],0);
end;
try
with datamoduleado.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select * from lend where code=:code');
parameters.ParamByName('code').Value :=combobox1.Text;
open;
if recordcount<>0 then
begin
fdate:=fieldbyname('outdate').AsDateTime ;
owntime:=date-fdate;
owntimeedit.Text :=floattostr(owntime);
readerIDEdit.Text :=fieldbyname('readerid').AsString;
statictext1.Visible :=true;
owntimeedit.Visible :=true;
if strtoint(owntimeedit.Text )>60 then
begin
statictext12.Visible :=true;
fineedit.Visible :=true;
fineedit.Text :=floattostr((strtoint(owntimeedit.Text )-60)*0.1);
end;
button1.Enabled :=false;
button2.Enabled :=true;
button2.SetFocus ;
close;
end
else begin
readeridedit.SetFocus ;
button1.Enabled :=true;
button2.Enabled :=false;
end;
end;
except
readeridedit.SetFocus ;
end;
end;
end;
procedure Tlendform.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then
combobox1change(sender);
end;
procedure Tlendform.ReaderIDEditChange(Sender: TObject);
begin
if length(readerIDEdit.Text )=10 then
begin
with datamoduleADO.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select readerid from reader where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
if recordcount=0 then
begin
button1.Enabled :=false;
messagedlg('借书证号<'+readeridedit.Text +'>不存在',mterror,[mbok],0);
close;
exit;
end;
close;
end;
try
with datamoduleado.ADOQuery1 do
begin
sql.Clear ;
sql.Add('select count(readerid) from lend where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
totaledit.Text :=inttostr(fields[0].Value );
close;
end;
except
totaledit.Text :='0';
end;
button2.Enabled :=false;
button1.Enabled :=true;
button1.SetFocus ;
end;
end;
procedure Tlendform.Button1Click(Sender: TObject);
var
tempownbook:townbook;
canlend:boolean;
mmcode:string;
begin
if readeridedit.Text <>'' then
begin
try
with datamoduleado.adoquery1 do
begin
sql.clear;
sql.Add('select code from lend where readerid=:readerid');
parameters.ParamByName('readerid').Value :=readeridedit.Text ;
open;
canlend:=true;
ownbookform.ListView1.Items.Clear ;
mmcode:=fieldbyname('code').AsString;
while not eof do
begin
with tempadoquery1 do
begin
sql.Clear ;
sql.Add('select * from book where code =:code') ;
parameters.ParamByName('code').Value :=mmcode;
open;
tempownbook.code:=fieldbyname('code').asstring;
tempownbook.name:=fieldbyname('name').asstring;
tempownbook.price:=fieldbyname('cost').asstring;
try
with tempadoquery2 do
begin
sql.Clear ;
sql.Add('select * from lend where code=:code and readerid=:readerid');
parameters.ParamByName('code').Value :=datamoduleado.ADOQuery1.fieldbyname('code').AsString ;
parameters.ParamByName('readerid').Value := readeridedit.Text ;
open;
tempownbook.owndays:=round(date-fieldbyname('outdate').AsDateTime );
close;
end;
except
tempownbook.owndays:=0;
end;
close;
end;
if tempownbook.owndays>60 then
begin
with ownbookform.listview1.Items.add do
begin
caption:=tempownbook.code;
subitems.add(tempownbook.name);
subitems.add(tempownbook.price);
subitems.Add(inttostr(tempownbook.owndays));
subitems.Add(floattostr((tempownbook.owndays-60)*0.1));
end;
canlend:=false;
end;
next;
end;
close;
end;
except
canlend:=true;
end;
if canlend=false then
begin
ownbookform.Caption :=readeridedit.text+'有以下书籍没按时归还';
ownbookform.showmodal;
exit;
end;
try
with DatamoduleADO.adoquery1 do
begin
sql.clear;
sql.add('insert into lend(code,readerid,outdate)'+' values(:code,:readerid,:outdate)');
parameters.parambyname('code').value:=combobox1.text;
parameters.parambyname('readerid').value:=readeridedit.text;
parameters.parambyname('outdate').value:=datetostr(now());
execsql;
end;
except
messagedlg('借书不成功',mterror,[mbok],0);
end;
end
else begin
showmessage('请输入借书证号!');
readeridedit.setfocus;
end;
end;
procedure Tlendform.Button2Click(Sender: TObject);
begin
try
with datamoduleado.adoquery1 do
begin
sql.clear;
sql.add('delete from lend where code=:code');
parameters.parambyname('code').value:=combobox1.text;
execsql;
close;
end;
except
messagedlg('还书不成功',mterror,[mbok],0);
end;
readeridedit.text:='';
totaledit.text:='';
owntimeedit.text:='';
fineedit.text:='';
end;
procedure Tlendform.Button3Click(Sender: TObject);
begin
close;
end;
end.
图3.6 信息查询
信息查询按钮代码:
procedure TMainform.Button5Click(Sender: TObject);
begin
queryform.show;
end;
procedure TMainform.Button6Click(Sender: TObject);
begin
button5click(sender);
end;
procedure TMainform.Button7Click(Sender: TObject);
begin
button5click(sender);
end;
procedure TMainform.PageControl1Change(Sender: TObject);
begin
end;
end.
第四章 课程设计总结
1. 系统的改进
本系统开发时间的仓促,本人对软件开发工具认识的水平有限,本软件仍存在一些不如人意的地方,还有待进一步改进,归纳起来主要有以下几点:
(1) 容错功能一般,在读者信息等需要添加的模块中,人工参与过多,界面缺少美工。
(2) 菜单设计不够全面,对决策管理的支持不够深入,必须在适当的时候进行改进。
(3) 因时间紧迫,能力有限,只列出4本书。
2 . 体会
这次的课程设计,结合了本学期所学到的很多专业知识,又通过在具体的实践过程中,以计算机理论为基础,边学习Delphi 和Access,边做程序设计边查找资料,在实践过程中克服了一个又一个困难,终于完成了此次课程设计。
通过此次的软件开发过程,使我们对所学专业有了更深的了解,并且有了一些切身的体会。光有计算机理论的知识是不行的,还得有更丰富的实践经验,就比如这次课程设计就提供了一次非常好的实践操作的机会,使我对软件开发有了一定的了解。
我们用的是Delphi 和access开发这个系统的,以前只是对这些软件略有了解,在老师的帮助下做过小程序。但了解得不完全,不深入。这个图书管理系统还存在很多问题,还有很多功能需要扩充。限于本组的编程技术水平,很多更深层的技术未用上。但以后我们会通过不断的努力,不断地专研和学习,掌握更多的软件设计的技术和方法,设计出更好更完善的软件程序来。