1、图书馆信息管理系统数据库概念数据库是一个存放数据并对数据进行操作工具。数据库作用在于组织和表示信息,简而言之,数据库就是信息集合。计算机数据库能够分为两类:非关系数据库(flat-file)和关系数据库(relational)。关系数据库中包含了多个数据表信息,数据库含有各个不一样部分术语,象统计、域等。 新建一个数据库创建任何一个数据库第一步是仔细计划数据库,设计必需是灵活、有逻辑。创建一个数据库结构过程被认为是数据模型设计。(1) 标识需要数据;(2) 搜集被标识字段到表中;(3) 标识主关键字字段;(4) 绘制一个简单数据图表;(5) 规范数据;(6) 标识指定字段信息;(7) 创建物理
2、表。 创建数据库参考VF自带数据库,能够很方便地创建了本系统将要使用当地数据库。系统组织结构图以下:馆 长采编组书库阅览室工具书室目录厅借阅室 表说明以下:Book_recno.dbf 借书记录表Book_table.dbf 图书资料表B_table.dbf 读者类别查询中间表 Group_table.dbf 图书类别查询中间表Pass_word.dbf 管理员ID密码表User_table.dbf 读者资料表表结构介绍:Book_recno.dbf 借书记录表字段名称字段类型字段说明TSBHC(10)图书编号TXMC(10)条形码SMC(20)书名BHC(10)编号XMC(10)姓名JSBZ
3、C(4)借书标志JSSJD(8)借书日期Book_table.dbf 图书资料表字段名称字段类型字段说明TSBHC(10)图书编号TXMC(10)条形码SMC(20)书名ZZC(20)作者CBSC(40)出版社CBSJD(8)出版时间LBC(20)类别XCSLN(3)现存数量TSZSN(3)图书总数RGSJD(8)入馆时间TSJGN(8,2)价格ZCCSN(5)借出次数JSQXN(2)借书时限B_table.dbf 读者类别查询中间表 字段名称字段类型字段说明CHINA_LBC(10)中间字段LBC(15)中间字段Group_table.dbf 图书类别查询中间表字段名称字段类型字段说明CHI
4、NA_LBC(10)中间字段LBC(15)中间字段Pass_word.dbf 管理员ID密码表字段名称字段类型字段说明GLY_IDC(10)管理员IDMMC(10)管理员密码GLY_NAMEC(10)管理员姓名 User_table.dbf 读者资料表字段名称字段类型字段说明BHC(10)编号XMC(10)姓名XBC(2)性别YXMCC(20)院系名称ZZC(40)住址YJTSN(4)已借天数BZC(20)备注LBC(10)职业DJRQD(8)登记日期JSRQD(8)借书日期HSRQD(8)还书日期系统具体实现程序菜单功效介绍:借书-依据您提供图书条形码和图书编号确定图书,再依据学生编号确定学
5、生后把此书借给这位学生。还书-依据您提供图书条形码和图书编号确定图书,再依据学生编号确定学生后把此书归还。图书馆信息管理-对全部图书资料进行添加,修改和删除等操作。读者管理-对全部读者资料进行添加,修改和删除等操作。查询-全部图书、不在馆图书,今天借出图书、今日归还图书、今日新进图书和有条件查询。统计-图书基础情况统计排名。管理员-在这里修改管理员登录密码。系统程序组成: 图书馆信息管理系统全部模块全部包含在一个项目中,这个项目我们命名为Tsgl.pjx,项目由数据、文档、类库、代码、其它五部分组成。其中数据又分为数据库和自由表;文档分为表单、报表和标签;代码分为程序、API、01/10应用程
6、序;其它分为菜单文件、文本文件、其它文件。系统组成图表以下图:项目标各部分完成系统不一样任务,但从总体上讲,可分成两个方面分析,一个是数据源,为程序处理提供原始数据;一个是程序模块,是数据处理方法和平台。把这二者有机结合起来,就是一个完整程序应用系统。 程序运行界面图说明:系统登录界面,只有输入正确ID和密码才能进行图书馆信息管理系统。说明:图书馆信息管理系统主界面。说明:借书子程序操作界面。说明:还书子程序操作界面。说明:图书馆信息管理操作界面。提供图书新增、修改、删除等功效。说明:读者管理操作界面。提供读者新增、修改、删除等功效。说明:打印模块含有打印图书信息功效说明:管理员密码维护操作界
7、面。系统登陆界面用户名:1密码:1假如出现打不开问题 请先 打开FoxPro 程序选择程序 -运行-图书馆信息管理系统.exe如碰到路径不存在 问题 直接点击忽略我已经先设置了一个借书人 编号12345 王鑫 图书信息 在任务窗口 能够选择查询附:程序清单程序功效介绍:*-主控程序: main_tsgl.prgclear all 从内存中释放全部内存变量和数组和全部用户自定义菜单栏、菜单和窗口定义。_screen.visible=.f.主窗口VFP不可见set escape off 严禁运行程序和命令在按 Esc 键后被中止。set talk off 阻止对话结果传送到 Visual FoxP
8、ro 主窗口、系统信息窗口set excl off (私有数据工作期默认方法)许可网络上任何用户共享和修改网络上打开表set safety off 指定在改写已经有文件时不显示对话框。set dele on 使用范围子句处理统计(包含在相关表中统计)命令忽略标有删除标识统计set century on 指定在包含 10 个字符(包含日期分隔符)日期格式中,用四位数字表示年。set date to YMD 决定日期在日期时间表示式中格式: yy/mm/ddpublic M_js,M_hs,mypath,tsgl,demo3 定义变量、数组为公共变量M_js= .T.为变量赋值M_hs= .T.m
9、ypath=left(sys(16),rat(,sys(16)把目前路径赋给一个变量set defa to &mypath指定默认驱动器、目录或文件夹*-dimension demo3创建一维内存变量数组 store .F. to demo1为数组赋值 store .F. to demo2 store .F. to demo3*-传输ID、密码变量-sele 1 激活指定工作区1 ,以下类似use book_table 打开一个表,以下类似sele 2use group_tablesele 3use b_tablesele 4 use user_tabledo form login_form
10、运行表单read events 当发出 READ EVENTS 命令时,Visual FoxPro 开启事件处理说明: 设置程序运行环境参数、变量等。*- 密码验证表单: Login_form.scx *- 控件: command1 *- click事件代码以下:select gly_id,mm,gly_name from pass_word ;where gly_id=allt(thisform.text1.value) and ;mm=allt(thisform.text2.value) into array demo if demo1=.F. = messagebox(登录ID或密码错误
11、!,0+16+0,提醒) 信息提醒窗口 thisform.text1.setfocus 控件text1取得了焦点* return .T.else thisform.release从内存中释放表单集或表单do login_app运行程序endif 代码说明:SQL语句从密码表“Pass_word.dbf中选出gly_id,mm,gly_name三个字段统计和所输入数据进行比较,假如相等。则把它们赋值到一个数组中,然后实施下一步程序。不然数组为最初所赋值“.F.”,程序返回到数据输入状态,直到正确输入或退出。 *- 控件: command2 *- click事件代码以下:thisform.rele
12、aseclear events 发出 CLEAR EVENTS 命令停止事件处理代码说明:释放目前表单,清除目前事件。*-联接程序: main_tsgl.prgDO FORM tsgl.scx name tsgl &窗口句柄传输DO Menu_tsgl.mpr WITH tsgl,.t.,.t. 运行菜单代码说明:运行图书馆信息管理主表单以后,再运行菜单组件。*-图书馆信息管理主表单:Tsgl.scx 关键属性: AlwaysOnTop = .F. 其它窗口能够覆盖住表单窗口。 AutoCenter = .T.指定表单对象第一次显示于 Visual FoxPro 主窗口时,自动居中放置 Sho
13、wWindows = 2 作为顶层表单 Caption = 岳阳电信-图书馆信息管理系统 V1.0 表单标题属性说明:目前表单优先居前,自动居中,为顶层表单,表单标题为“岳阳电信-图书馆信息管理系统 V1.0”。 *- Init 事件代码以下:bo1.listindex=1 表单上页中组合框属性bo1.listindex=1代码说明:控件“Combol”数据源是“Group_Table.dbf”,Listindex1,则目前控件“Combol”中所显示数据为“图书编号”。 *- Resize 事件代码以下:mandgroup1.width = this.width-5thisform.page
14、frame1.width = this.width-5thisform.pageframe1.height = this.height-100thisform.pageframe1.page1.grid1.width = thisform.pageframe1.width -22thisform.pageframe1.page1.grid1.height =;thisform.pageframe1.height -82thisform.pageframe1.page2.grid1.width = ;thisform.pageframe1.width -22thisform.pageframe1
15、.page2.grid1.height = ;thisform.pageframe1.height -82thisform.pageframe1.refresh代码说明:页框“page1”和“page2”、表格控件“grid1”随目前表单大小改变而改变。 *- QueryUnload 事件代码以下:thisform.release从内存中删除内存变量和数组。clear events*-借书子程序:Jies.scx *- 控件: command1 *- click事件代码以下:sele 1if thisform.optiongroup1.option1.value=0 目前单选框值为0 loca
16、te for txm=upper(allt(thisform.text2.value) 从表中查找输入条形码 if not found() =messagebox(没有该图书条形码!,0+64+0,提醒) go top 指针定位到表头 else mand3.enabled=.T. 指定对象能够响应用户引发事件 endifendif if thisform.optiongroup1.option1.value=1 目前单选框值为1 locate for tsbh=upper(allt(thisform.text1.value) if not found() =messagebox(没有该图书编号
17、!,0+64+0,提醒) go top else mand3.enabled=.T. endif endif thisform.refresh代码说明:依据图书条形码或图书编号查询所借书目。只有所借书目存在,才能对读者信息进行操作。*- 控件: command2 *- click事件代码以下:thisform.text2.value= 赋文本框text2值为空thisform.text1.value= thisform.text1.setfocus *- 控件: command3 *- click事件代码以下:sele 4 locate for bh=upper(allt(thisform.t
18、ext12.value) if not found() =messagebox(没有该读者编号!,0+64+0,提醒) go top endifmand5.enabled=.T.thisform.refresh代码说明:对借书读者资料进行确定。 *- 控件: command5 *- click事件代码以下:nAnswer = MESSAGEBOX(确定所借书目标资料无误吗?,4+32+0,关键提醒)DO CASE CASE nAnswer = 6 sele 1 If xcsl=0 =messagebox(该图书已经没有库存!,0+64+0,提醒) return .T. Else replace
19、 xcsl with xcsl-1 ,zccs with zccs+1 现存数量减1,借出数量加1 insert into book_recno (tsbh,txm,sm,bh,xm,jssj,jsbz) ; values( upper(allt(thisform.text7.value), ; upper(allt(thisform.text4.value), ; upper(allt(thisform.text3.value), ; upper(allt(thisform.text13.value),; upper(allt(thisform.text14.value),; datetim
20、e(),借出 ) 把目前资料插入到表book_recno中 sele 4 replace yjss with yjss+1 读者资料表中已借书数加1 Endif CASE nAnswer = 7 ENDCASE代码说明:在确定所输入图书和读者资料无误后,程序开始对图书资料表、读者资料表、借书统计表这三个表进行修改和录入。MESSAGEBOX( ) 对应每个按钮返回值。返回值 按钮1 确定2 取消3 放弃4 重试5 忽略6 是7 否*-还书子程序:Jies.scx *- 控件: command1 *- click事件代码以下:sele 1if thisform.optiongroup1.opti
21、on1.value=0 locate for txm=upper(allt(thisform.text2.value) if not found() =messagebox(没有该图书条形码!,0+64+0,提醒) go top endifendif if thisform.optiongroup1.option1.value=1 locate for tsbh=upper(allt(thisform.text1.value) if not found() =messagebox(没有该图书编号!,0+64+0,提醒) go top endifendif mand3.enabled=.T.th
22、isform.refresh*- 控件: command3 *- click事件代码以下: thisform.text13.visible= .T. 显示目前文本框text13sele 4 locate for bh=upper(allt(thisform.text12.value) if not found() =messagebox(输入读者编号有错吧?,0+32+0,提醒) go top else thisform.refresh mand5.enabled=.T. endif*- 控件: command5 *- click事件代码以下:sele 1 replace xcsl with
23、xcsl+1 现存数量加1 insert into book_recno (tsbh,txm,sm,bh,xm,jssj,jsbz) ; values( upper(allt(thisform.text7.value), ; upper(allt(thisform.text4.value), ; upper(allt(thisform.text3.value), ; upper(allt(thisform.text12.value),; upper(allt(thisform.text13.value),; datetime(),还回 ) thisform.refresh =messagebo
24、x(操作完成,该书已经归档!,0+64+0,完成) mand5.enabled=.F. 代码说明:还书程序代码和借书程序代码比较相同,请看借书程序代码说明。*- 控件: command7 *- click事件代码以下:M_hs= .T.thisform.release*-图书馆信息管理子程序:Tsgl_tsgl.scx *- 控件: command1 *- click事件代码以下:sele 1if thisform.optiongroup1.option1.value=0 locate for txm=upper(allt(thisform.text2.value) if not found(
25、) =messagebox(没有该图书条形码!,0+64+0,提醒) go top endifendif if thisform.optiongroup1.option1.value=1 locate for tsbh=upper(allt(thisform.text1.value) if not found() =messagebox(没有该图书编号!,0+64+0,提醒) go top endifendif thisform.refresh代码说明:依据图书条形码或图书编号查询图书。而且能够对目前所选定图书进行修改。*- 控件: command3 *- click事件代码以下:sele 4
26、if .not.bof() 假如不到表头 skip -1指针上移一条统计 mand1.setfocus thisform.refresh endif 代码说明:目前所查询图书资料上翻一条。*- 控件: command4 *- click事件代码以下:sele 4if .not.eof() 假如不到表尾 skip 指针下移一条统计 mand2.setfocus thisform.refresh endif 代码说明:目前所查询图书资料下翻一条。*- 控件: command5 *- click事件代码以下:x=messagebox(真删除编号为 +allt(thisform.text1.value
27、)+图书吗?,4+32+256,关键提醒) if x=6 delete 对目前统计作删除标识 thisform.refresh else return .F. endif代码说明: 删除所选定目前图书资料。*- 控件: command7 *- click事件代码以下:sele 4 append blank增加一条空统计 go bottom指针到表尾 thisform.refresh代码说明: 新增加一条图书资料。*-密码维护子程序:Password.scx *- Init 事件代码以下:thisform.label6.caption=demo1,3 目前标签内容为登录时管理员姓名代码说明:数组
28、Demo1,3值为最初管理员输入ID所对应名字。在密码维护表单中,用以提醒管理员修改ID和密码所对应名字。*- 控件: command1 *- click事件代码以下:store allt(thisform.text1.value) to dl_1把TEXT11值赋到变量dl_1中store allt(thisform.text3.value) to dl_3if thisform.text1.value = thisform.text2.value and ; thisform.text3.value = thisform.text4.value update pass_word set gly_id=dl_1 where gly_name=allt(demo1,3) update pass_word set mm=dl_3 where gly_name=allt(demo1,3) 对密码表进行更新 =messagebox(ID和密码修改成功!,0+64+0,信息)else =messagebox(ID或密码验证不统一,请重输入!,0+64+0,错误) endif 代码说明:表单共有ID修改及验证、密码修改及验证四个文本输入框。用以确保ID及密码修改正确性。
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100