VF图书管理系统.docx

上传人:b****8 文档编号:9544458 上传时间:2023-02-05 格式:DOCX 页数:64 大小:1.34MB
下载 相关 举报
VF图书管理系统.docx_第1页
第1页 / 共64页
VF图书管理系统.docx_第2页
第2页 / 共64页
VF图书管理系统.docx_第3页
第3页 / 共64页
VF图书管理系统.docx_第4页
第4页 / 共64页
VF图书管理系统.docx_第5页
第5页 / 共64页
点击查看更多>>
下载资源
资源描述

VF图书管理系统.docx

《VF图书管理系统.docx》由会员分享,可在线阅读,更多相关《VF图书管理系统.docx(64页珍藏版)》请在冰豆网上搜索。

VF图书管理系统.docx

VF图书管理系统

 

实训报告

 

课程(项目)名称:

学院:

专业:

班级:

学号:

姓名:

成绩:

 

XXX年XX月XX日

一、任务与目的

目的:

1、熟练掌握如何利用项目管理器来实施对一个具体项目的管理与组织;

2、培养数据库项目开发的基本技能;

3、培养调试与编辑程序的基本技能。

任务:

掌握数据库项目设计与开发的基本知识和操作技能。

二、原理(条件)

本系统运行的硬件和软件环境要求较低,对计算机的要求是:

处理器:

486DX/66以上;

内存:

16MB以上;

硬盘:

10MB硬盘空余;

操作系统:

Winows95/98/XP/200

三、内容与步骤

1.表的设计

要完成以上功能,必须有读者表、书库表、借阅表、人员表、罚款表,各表表结

构如下所示。

读者表

字段

字段名

类型

宽度

小数位

1

借书证号

字符型

8

2

姓名

字符型

8

3

性别

字符型

2

4

出生日期

日期型

8

5

部门

字符型

20

6

职称

字符型

10

7

异常说明

字符型

30

8

照片

备注型

4

图书表

字段

字段名

类型

宽度

小数位

1

书号

字符型

8

2

书名

字符型

40

3

作者

字符型

8

4

出版社

字符型

20

5

类别

字符型

20

6

单价

数值型

7

2

7

数量

整型

4

8

借出数量

整型

4

借阅表

字段

字段名

类型

宽度

小数位

2

书号

字符型

8

3

借出日期

日期时间型

8

4

还书日期

日期时间型

8

5

异常说明

字符型

30

人员表

字段

字段名

类型

宽度

小数位

1

编号

字符型

3

2

用户名

字符型

10

3

密码

字符型

10

4

级别

字符型

1

5

类别

字符型

10

罚款表

字段

字段名

类型

宽度

小数位

1

事由

字符型

20

2

罚款数量

数值型

7

2

3

交费日期

日期时间型

8

4

异常说明

字符型

30

 

2.目录设计

建立“图书馆管理系统”文件夹,在文件夹内建立form、database、images、

report、class、menu、bak、help子文件夹,分别用于存放表单、表、图象、

报表、类、菜单、备份、帮助文件,如图以下所示。

 

3.设计“系统登录”表单

实现目标:

这是程序启动的第一个画面,设计的功能要求是:

选择用户的类别、

输入用户名和用户密码、当用户名和密码均正确后才能进入功能界面,用户输入

错误有提示信息,系统在三次错误提示后会自动退出。

实现过程:

建立表单,添加控件,将表单以“系统登录”为名存入form文件夹下,设计界面

如图以下所示。

设置Text2的PassWordChar属值为“*”,将Combo1的Rowsourcetype属性设为1,Rowsource属性值设为:

馆长,采编员,图书管理员,读者。

设置form1的AlwaysOnTop属性为.t.,BorderStyle的属性为2—固定对话框,Desktop的属性为.T.,WindowType的属性为1—模式。

设定Combo1的Valid事件代码为:

ifthis.value="读者"

thisform.label3.caption="借书证号"

else

thisform.label3.caption="用户名"

endif

设置表单的Init事件代码为:

application.visible=.f.

closeall

设置表单的Load事件代码为:

publiccn

cn=0

设置命令按钮“确定”的Click事件代码为:

ifempty(bo1.value)

messagebox("请选择类别",48,"友好提示")

bo1.setfocus

else

publicmanager1,clb,cname&&定义全局变量

manager1=alltrim(bo1.value)

ifmanager1="读者"

usedatabase\读者表

cname=alltrim(thisform.text1.value)

locafor借书证号=cname

iffound()

_screen.application.visible=.t.

domenu\menu.mpr

doformform\工具栏

thisform.release

else

messagebox("没有这个读者,请重新输入!

",4+32,"系统登录")

thisform.text1.value=""

thisform.text1.setfocus

endif

else

usedatabase\人员表&&打开数据表

clb=alltrim(thisform.Combo1.value)

cname=alltrim(thisform.text1.value)

ppassword=alltrim(thisform.text2.value)

locafor类别=clband用户名=cname

&&查询用户

setexacton&&字符精确比较

*判断操作员是否正确

if!

(类别=clband用户名=cname)

cn=cn+1

nanswer=messagebox("操作员错误,请重新输入!

",4+32,"系统登录")

ifnanswer=6&&选择“是”时的操作

thisform.text1.value=''

thisform.text1.setfocus

else

thisform.release&&释放表单

endif

ifcn=3

thisform.release

endif

else

*判断密码是否正确

ifalltrim(人员表.密码)!

=ppassword

cn=cn+1

nanswer=messagebox("密码错误,请重新输入!

",4+32,"系统登录")

ifnanswer=6

thisform.text2.value=''

thisform.text2.setfocus

else

thisform.release

endif

ifcn=3

thisform.release

endif

else

doformform\欢迎使用图书管理系统

thisform.release

endif

endif

endif

endif

setexactoff&&字符非精确比较

docase

casemanager1="读者"

manager=1

casemanager1="图书管理员"

manager=2

casemanager1="采编员"

manager=3

casemanager1="馆长"

manager=4

endcase

设置命令按钮“退出”的Click事件代码为:

thisform.release

4.菜单的设计

实现目标:

设计具有根据不同权限有不同可用菜单的菜单格式文件和程序文件。

实现过程:

进入菜单设计器,分别设计各菜单栏、菜单项,将设计好的菜单格式

文件存到menu文件夹下,文件名为:

menu.mnx。

注意设计各菜单项时,单

击各行后“选项”按钮,设置“跳过”条件,如设置“借书登记”菜单项的“跳过”条件。

过程见下图:

1.创建菜单设计器后,输入菜单名称,如图以下所示。

2.点击“编辑”按钮,打开对话框,接着输入菜单名称,结果的选项为“命令”,选项输入为“doformform\菜单名称.exe”,如图所示。

设计完后,单击“菜单”菜单下的“生成”菜单项,将该菜单格式文

件生成为菜单程序文件,文件名为:

menu.mpr。

5.设计“借书登记”表单

实现目标:

根据用户输入的借书证号和书号办理登记手续,输入的借书证号和书

号都要有检验功能,看是否为合法的号码,表单提供用列表框浏览并选择借书证

号和书号的功能,也提供当前借书证号已借书的情况和当前书号的书被借的情

况。

实现过程:

新建表单,在表单上添加控件,以“借书登记”文为名存入到form子

文件夹下,设计界面如图以下所示。

相关代码如下。

表单的Init事件代码为:

bo1.visible=.f.

bo2.visible=.f.

thisform.grid1.visible=.f.

thisform.container1.label1.caption="姓名:

"

thisform.container1.label2.caption="性别:

"

thisform.container1.label3.caption="部门:

"

thisform.container1.label4.caption="职称:

"

thisform.container2.label1.caption="书名:

"

thisform.container2.label2.caption="作者:

"

thisform.container2.label3.caption="出版社:

"

thisform.container2.label4.caption="类别:

"

文本框Text1的Valid事件代码为:

if!

empty(this.value)

sele读者表

locafor借书证号=alltrim(thisform.text1.value)

iffound()

thisform.container1.label1.caption="姓名:

"+姓名

thisform.container1.label2.caption="性别:

"+性别

thisform.container1.label3.caption="部门:

"+部门

thisform.container1.label4.caption="职称:

"+职称

else

messagebox("没有这个借书证号,请重新输入!

",48,"重要提示")

thisform.init

thisform.text1.value=""

return0

endif

else

thisform.init

endif

文本框Text1后的“……”命令按钮的Click事件代码为:

bo1.visible=.t.

bo1.rowsourcetype=3

bo1.rowsource="seledist借书证号,姓名,性别,部门from

读者表;

orderby借书证号intocursorcombo1"

组合框Combo1的InterActiveChange事件代码为:

thisform.text1.value=alltrim(this.value)

sele读者表

locafor借书证号=alltrim(thisform.text1.value)

thisform.container1.label1.caption="姓名:

"+姓名

thisform.container1.label2.caption="性别:

"+性别

thisform.container1.label3.caption="部门:

"+部门

thisform.container1.label4.caption="职称:

"+职称

文本框Text2的Valid事件代码为:

if!

empty(this.value)

sele图书表

locafor书号=alltrim(thisform.text2.value)

iffound()

thisform.container2.label1.caption="书名:

"+书名

thisform.container2.label2.caption="作者:

"+作者

thisform.container2.label3.caption="出版社:

"+出版社

thisform.container2.label4.caption="类别:

"+类别

else

messagebox("没有这个书号,请重新输入!

",48,"重要提示")

thisform.init

thisform.text2.value=""

return0

endif

else

thisform.init

endif

文本框Text2后的“……”命令按钮的Click事件代码为:

bo2.visible=.t.

bo2.rowsourcetype=3

bo2.rowsource="seledist书号,书名,作者,出版社from图

书表;

orderby书号intocursorcombo2"

组合框Combo1的InterActiveChange事件代码为:

thisform.text2.value=this.value

sele图书表

locafor书号=alltrim(thisform.text2.value)

thisform.container2.label1.caption="书名:

"+书名

thisform.container2.label2.caption="作者:

"+作者

thisform.container2.label3.caption="出版社:

"+出版社

thisform.container2.label4.caption="类别:

"+类别

命令按钮“借出登记”的Click事件代码为:

sele借阅表

locafor借书证号=alltrim(thisform.text1.value)and书号

=alltrim(thisform.text2.value)

iffound()

aa=messagebox("该同志已借此书,还要借吗",36,"友好提示")

ifaa=6

sele借阅表

countfor借书证号=alltrim(thisform.text1.value)tok

ifk>=5

messagebox("该借书证号借书指标已满,不能再借",48,"友好提示")

else

sele图书表

locafor书号=alltrim(thisform.text2.value)

if数量-借出数量<0

messagebox("该书已借完,不能再借!

"+chr(13)+"库存"+alltrim(str(数

量))+"本,已借出"+alltrim(str(借出数量))+"本",48,"友好提示")

else

update图书表set借出数量=借出数量+1where书号

=alltrim(thisform.text2.value)

insertinto借阅表(借书证号,书号,借出日期)value

(alltrim(thisform.text1.value),alltrim(thisform.text2.value),datetime

())

messagebox("借书登记完毕!

",48,"友好提示")

endif

endif

endif

else

sele借阅表

countfor借书证号=alltrim(thisform.text1.value)tok

ifk>=5

messagebox("该借书证号借书指标已满,不能再借",48,"友好提示")

else

sele图书表

locafor书号=alltrim(thisform.text2.value)

if数量-借出数量<0

messagebox("该书已借完,不能再借!

"+chr(13)+"库存"+alltrim(str(数

量))+"本,已借出"+alltrim(str(借出数量))+"本",48,"友好提示")

else

update图书表set借出数量=借出数量+1where书号

=alltrim(thisform.text2.value)

insertinto借阅表(借书证号,书号,借出日期)value

(alltrim(thisform.text1.value),alltrim(thisform.text2.value),datetime

())

messagebox("借书登记完毕!

",48,"友好提示")

endif

endif

endif

命令按钮“查当前用户所借书”的Click事件代码为:

ifempty(thisform.text1.value)

messagebox("借书证号不能为空",48,"重要提示")

else

thisform.grid1.visible=.t.

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele借书证号,书号,借出日期from借阅

表where借书证号=alltrim(thisform.text1.value)intocursg1"

endif

命令按钮“查当前书被借情况”的Click事件代码为:

ifempty(thisform.text2.value)

messagebox("书号不能为空",48,"重要提示")

else

thisform.grid1.visible=.t.

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele借书证号,书号,借出日期from借阅

表where书号=alltrim(thisform.text2.value)intocursg2"

endif

命令按钮“退出”的Click事件代码为:

thisform.release

 

6.设计“还书登记”表单

实现目标:

根据用户输入的借书证号和书号办理还书登记手续,输入的借书证号

和书号后要有检验功能,看是否为合法的号码,表单提供用列表框浏览并选择借

书证号和书号的功能,也提供当前借书证号已借书的情况和当前书号的书被借的

情况。

本表单还可对还书的借期进行检查,超期提示罚款,交款可自动登记到罚

款表中。

实现过程:

新建表单,在表单上添加控件,以“还书登记”为名存入到form子文

件夹下,设计界面如图以下所示。

本表单除“还书登记”的Click事件代码不同外,其余均与“借书登记”表单类似,

“还书登记”的Click事件代码为:

sele借阅表

locafor借书证号=alltrim(thisform.text1.value)and书号

=alltrim(thisform.text2.value)

if!

found()

messagebox("该同志没有借此书!

",48,"友好提示")

return

else

ts=int((datetime()-借出日期)/3600/24)

ifts>60

aa=messagebox("您借的这本书已超期"+alltrim(STR(ts-1))+"天,按规定

要罚款";

+alltrim(str((ts-60)*0.05,10,2))+"元"+chr(13)+"您交了罚款吗?

",36,"重要提示")

ifaa=7

messagebox("对不起,不能办理还书手续!

",48,"友好提示")

return

else

insertinto罚款表value(allt(thisform.text1.value)+"的

"+alltrim(thisform.text2.value)+"书交罚款

",(ts-60)*0.05,datetime(),"")

messagebox("费用已交入库!

",48,"友好提示")

delefrom借阅表where借书证号=alltrim(thisform.text1.value)and

书号=alltrim(thisform.text2.value)

setdeleon

messagebox("已办理了还书手续!

",48,"友好提示")

endif

else

delefrom借阅表where借书证号=alltrim(thisform.text1.value)and

书号=alltrim(thisform.text2.value)

messagebox("已办理了还书手续!

",48,"友好提示")

setdeleon

endif

endif

7.设计“借阅统计”表单

实现目标:

按读者、部门、职称统计借书数,统计各本书、各类书借书数,统计

借书超期情况。

实现过程:

新建表单,添加控件,将表单以“借阅统计”为名存入到form子文件

夹中,设计的界面如图以下所示

命令按钮“按读者统计借书数”的Click事件代码为:

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele借阅表.借书证号,姓名,职称,count(*)

as借出数;

from读者表,借阅表where读者表.借书证号=借阅表.借书证号groupby;

借阅表.借书证号orderby借阅表.借书证号intocursg1"

命令按钮“按部门统计借书数”的Click事件代码为:

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele部门,count(*)as借出数from读

者表,借阅表where读者表.借书证号=借阅表.借书证号groupby部

门intocursg2"

命令按钮“按职称统计借书数”的Click事件代码为:

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele职称,count(*)as借出数from读

者表,借阅表where读者表.借书证号=借阅表.借书证号groupby职

称intocursg3"

命令按钮“统计各书借出数”的Click事件代码为:

thisform.grid1.recordsourcetype=4

thisform.grid1.recordsource="sele图书表.书号,书名,数量,count(*)as

借出数from图书表,借阅表where图书表.书号=借阅表.书号groupby

图书表.书号order

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1