• 2.70 MB
  • 2022-04-22 13:37:47 发布

宛枫书社图书管理系统的设计与实现毕业论文.doc

  • 50页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'宛枫书社图书管理系统的设计与实现毕业论文目录一、序言4二、需求分析说明书42.1系统介绍42.2系统面向的用户群体42.3系统的功能性需求42.4系统的非功能性需求52.4.1用户界面需求52.4.2软硬件环境需求52.4.3软件质量需求5三、可行性分析报告53.1技术可行性53.2人员可能性53.3时间、设备可能性53.4系统工作量53.5代码工作量53.6文档要求5四、开发环境与项目规划54.1开发环境54.2项目规划与管理54.2.1开发人员安排54.2.2开发进度安排6五、软件界面设计标准与规范65.1编写目的65.2界面设计思想65.3界面设计原则65.4界面设计样式65.5常见提示信息样式65.6常见错误信息样式75.7其他界面约定7六、软件编码设计标准与规范76.1对象命名约定76.2常量和变量命名约定86.3结构化编码约定86.4数据源的约定96.5数据库访问约定96.6其他约定9七、数据库分析与设计107.1数据库环境说明107.2数据库命名标准与规范1049 7.3数据库逻辑设计107.4数据库物理设计107.4.1表、视图汇总107.4.2各表、视图设计详解11八、软件体系结构设计说明书158.1系统概述158.2设计约束158.3设计策略158.4系统概要设计说明书168.4.1图例说明168.4.2系统总体结构图168.4.3销售子系统流程图178.4.4进货子系统流程图178.4.5退货子系统流程图178.5系统详细设计说明书178.5.1系统模块汇总178.5.2系统核心模块详解188.5.3系统模块详解28九、用户界面设计报告429.1界面设计规范429.2系统窗体汇总429.3主界面设计439.4子界面设计439.5界面资源设计44十、软件测试分析报告4410.1测试范围与主要内容4410.2测试方法4410.3测试报告4410.4改进建议与措施45十一、软件使用说明书4511.1软件概述4511.2系统安装4511.3使用说明4511.3.1系统登陆4511.3.2注销与退出4611.3.3办理进货登记4611.3.4办理退货登记4811.3.5销售图书4811.3.6会员管理4911.3.7员工管理4911.3.8书目检索5011.3.9查看统计信息5011.3.10修改密码5011.3.11关于/帮助5049 参考资料51一、序言宛枫书社图书管理系统的设计与推出是多方面原因促成的,我有一位老乡名叫李明友,毕业后经营一家小书店:“考试通书店”,其日常管理工作都是人工操作,历史数据很难保存和利用,对于书店的经营非常不利。而其他的中小型书店、个体书店大多如此。针对这种状况,我计划开发一个面向中小型书店、个体书店的图书管理系统,实现对人员、物流的全面管理,以帮助这些书店早日实现书店管理信息化。正在我考虑系统的规划的时候,我有幸得到王改性老师的指导,我的两位同学:蔡大臣、张航也加入了开发队伍,这更加坚定了我完成系统开发任务的决心。为了系统的顺利开发和维护,特编制如下技术文档:二、需求分析说明书2.1系统介绍本系统定位于中小型书店、个体书店,暂时考虑单机环境下的实现;操作系统选择目前常用的Windows98/2000。系统性质为MIS(管理信息系统)或财务软件。本系统采用会员制管理,系统功能应包含进书管理、售书管理、退货管理、库存管理、统计分析、相关人员管理等。系统界面力求简洁、易用,在标准化的基础上考虑界面的美观和新颖。系统计划2003年3月初开始,4月初完成初步开发工作,其余工作根据时间安排进行。2.2系统面向的用户群体系统面向中小型书店、个体书店,用户群体为这些书店的经理、采购员/仓库管理员、图书销售人员、书店的会员/游客等。2.3系统的功能性需求功能序号功能名称功能说明1供应商管理包含供应商信息的登记、修改等2图书种类管理包含图书大类、小类的创建3图书资料管理包含图书资料的添加、修改等4新书入库管理登记新书的来源、数量、单价、折扣、金额等5库存统计分门别类统计图书现有库存量、入库时间等6进货记录查询查询历次进货记录7退货登记登记供应商、图书种类、退货的数量、原因等8退货统计按供应商统计退货记录9退货记录查询查询历次退货记录10图书销售管理登记销售的种类、数量、单价、折扣、顾客/会员等11会员管理包含会员的创建、修改、删除等12优惠政策管理包含优惠政策的制定与执行13本日售书统计统计本日销售图书的数量、金额等14售书记录查询查询历次售书记录15员工管理包含员工帐号的创建、修改、删除等16统计分析按年月日时段统计书店经营状况49 17图书检索提供按图书的编号、书名、责任者、出版社等途径的检索18系统帐号管理提供上级对下级的资料、密码管理,19个人资料、密码管理提供修改个人资料、密码的工具2.4系统的非功能性需求2.4.1用户界面需求简洁、易用、易懂,美观、大方、标准,具备一定的兼容性。2.4.2软硬件环境需求软件环境:兼容当前主流操作系统Windows95/98/NT/Me/2000/XP等。硬件环境:386以上计算机,打印机、扫描仪等。2.4.3软件质量需求易用、健壮、兼容性好、运行稳定、有一定安全保障。三、可行性分析报告3.1技术可行性系统的性质为MIS或财务软件,因而数据库的设计与操纵是系统设计的核心。我在2002年11月至2003年3月曾经成功完成了“蓝色梦幻留言板”的开发与维护任务,具备一定的系统分析与设计能力,熟悉数据库的设计与操纵;指导老师王改性多年从事数据库的教学与研究工作,因而该系统的实现在技术上是可行的。3.2人员可能性我有“蓝色梦幻留言板”的开发经验,目前时间充足,可以完成开发任务。蔡大臣的计算机功底很深,可以参与系统的数据库设计与开发。张航有深厚的文字功底,可以参与用户文档的制作、内部文档整理、后期测试等任务。所有人员均可立即投入开发工作。3.3时间、设备可能性系统设计与开发工作预计耗时一个月,所有参与开发的人员均能够保证按时完成任务。实验设备如:计算机、打印机、扫描仪等不足,上机任务可以完成,打印机、扫描仪的实验根据具体条件暂时延缓执行。3.4系统工作量该系统的工作量相对于我们的开发小组来说很大,必须保证按进度完成任务。实际工作量预计超过一个月(每天4-8小时)。如包含软件维护及技术文档的整理、制作,工作量将更大。3.5代码工作量预计需25天左右。3.6文档要求依据国家《计算机软件产品开发文件编制指南》和《现代软件工程》的理论与原则编制标准的软件技术文档。四、开发环境与项目规划4.1开发环境前台开发环境:MicrosoftVisualBasic6.0后台数据库环境:MicrosoftAccess2000/20024.2项目规划与管理49 4.2.1开发人员安排系统分析与设计:胡孟杰程序编制:胡孟杰数据库设计:胡孟杰、蔡大臣文档整理与制作:蔡大臣、张航系统测试:胡孟杰、蔡大臣、张航、考试通书店(李明友)等4.2.2开发进度安排3月1日至3月5日:系统分析,进行需求定义,定义系统概况3月6日至3月7日:数据库分析与设计3月8日至3月9日:软件体系结构设计3月10日至3月31日:软件编码4月1日至4月2日:系统测试五、软件界面设计标准与规范5.1编写目的制定界面设计标准规范的目的是为了规范和统一软件界面设计制定软件界面设计标准与规范。5.2界面设计思想首先考虑标准化,在标准化的基础上进行界面的美工设计。5.3界面设计原则简单易用、简洁明了、兼容性好、标准、规范。5.4界面设计样式工具条采用标准Windows界面,自上至下依次为:标题栏、菜单栏、工具条、工作区、状态栏等。如下图示:菜单栏状态栏工作区图1.系统界面49 5.5常见提示信息样式提示信息按以下标准进行:采用标准Windows对话框样式,添加信息图标,后接提示信息文本和相应按钮。如下图示:按钮信息图标提示文本图2.常见提示信息样式5.6常见错误信息样式错误信息依据提示信息样式设计,将信息图标更改为警告图标。如下图示:警告图标提示文本图3.常见错误信息样式5.7其他界面约定除主界面外,所有子界面均采用模式窗体,即该窗体不消失,不可以在本程序内将焦点移出子窗体。六、软件编码设计标准与规范6.1对象命名约定对象名对象类型命名约定(前缀码)Form窗体FrmCommand按钮CmdLabel标签LabTextBox文本框TxtComboBox组合框ComBListBox列表框LstBAdodb数据库访问对象AdodbDataGrid数据表格显示组件DataGridFrame框架FamOption单选框OptCheckBox复选框ChkPictureBox图象显示组件PtBCommonDialog通用对话框组件ComDlgTimer时间组件Tim49 ToolBar工具栏TlBarMenu菜单MnuSSTab页框SSTabImageList界面资源组件ImgLst6.2常量和变量命名约定变量名数据类型变量类型含义UserShenFenString全局变量用户身份标志LogOKBoolean全局变量登陆状态UserNameString全局变量用户名GongYingShangIDString全局变量供应商编号GongYingShangString全局变量供应商名称TuShuBianHaoString全局变量图书编号DingJiaSingle全局变量图书定价ShuMingString全局变量书名HuiYuanKaHaoString全局变量会员卡号HYXingMingString全局变量会员姓名HYDengJiString全局变量会员等级6.3结构化编码约定编码应清晰、可读性好,运用缩进、空行,结合大小写区别等方法保持程序结构良好。凡与数据库操作相关的模块一律加上容错代码,涉及多表操作的模块应运用“事务”处理,以保持数据完整性。编码风格参照下例进行:PublicSubCheckUser(userIDAsString,passwdAsString)DimuserDBAsDatabaseDimuserRDAsRecordsetDimdbNameAsStringDimSTRSQLAsStringScreen.MousePointer=11OnErrorGoToerrEnddbName=App.PathIfRight(dbName,1)<>"、"ThendbName=dbName+"、"dbName=dbName+"DataBase、WFSSDataBase.mdb"STRSQL="select[用户身份]from[Admin]where[用户ID]="""&userID&"""and[用户密码]="""&passwd&"""""打开数据库SetuserDB=DBEngine.Workspaces(0).OpenDatabase(dbName,False,True)"检索用户,验证密码SetuserRD=userDB.OpenRecordset(STRSQL,dbOpenSnapshot)IfuserRD.RecordCount>0Then49 "设置用户身份UserShenFen=userRD![用户身份]"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=Nothing"进入用户环境LoadFrmMainFrmMain.ShowUnloadFrmLogInlogOK=TrueuserName=userIDScreen.MousePointer=vbDefaultElse"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothinglogOK=FalseScreen.MousePointer=vbDefaultMsgBox"用户名或密码错误!请重新输入!",vbOKOnly+vbExclamation,"登陆失败"EndIfExitSuberrEnd:Screen.MousePointer=vbDefaultMsgBoxErr.Description,vbOKOnly+vbExclamation,"登陆错误"logOK=FalseErr.Clear"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingExitSubEndSub6.4数据源的约定需用数据源的组件如:DataGrid一律采用Adodb控件。有特殊需求的情况如:身份验证应引用DAO(数据访问对象)。6.5数据库访问约定49 数据库引擎采用Microsoft.Jet.OLEDB.4.0,由Adodb组件进行数据库的访问,并为其他组件提供数据源。特殊情况、身份验证等由DAO访问数据库。6.6其他约定无需数据显示的情况由DAO提供数据库支持,有数据显示的情况由ADODB组件提供数据库支持。七、数据库分析与设计7.1数据库环境说明考虑该系统的定位与现有技术力量,决定采用MicrosoftAccess2000/2002作为系统的后台数据库开发环境。7.2数据库命名标准与规范说明:下表所列为数据库及各表、视图的命名方法,具体信息请参阅7.4.1表、视图汇总。名称类型命名办法约定WFSSDataBase系统数据库字母表基本表汉字或字母查询查询汉字字段字段汉字或字母7.3数据库逻辑设计会员表会员级别会员卡号…会员政策会员级别…Admin用户ID…员工表员工帐号…图书分类图书分类号…售书记录会员卡号图书编号…Book图书分类号图书编号…图书进价表图书编号…进书记录图书编号供应商编号…退货记录图书编号供应商编号…供应商供应商编号…图4.数据库逻辑结构图7.4数据库物理设计7.4.1表、视图汇总视图/表名类型说明Admin基本表集中保存系统用户的帐号、密码Book基本表集中存放书目信息49 员工表基本表存放员工资料供应商基本表供应商资料会员表基本表会员资料会员政策基本表会员标准及优惠政策进书记录基本表进书历史记录客户反馈基本表客户反馈信息售书记录基本表售书历史记录书店简介基本表书店简介图书分类基本表图书类别图书进价表基本表图书进价列表退货记录基本表退货历史记录读者查询查询提供给所有用户的书目查询界面基本统计查询基本的统计分析进书查询查询进书记录查询,含进书统计售书查询查询图书销售记录查询售书统计查询图书销售记录统计退货查询查询退货记录查询退货统计查询退货统计员工信息查询员工信息查询库存统计查询现有库存统计反馈信息查询客户反馈信息查询7.4.2各表、视图设计详解[说明]:空缺位置表示无要求,主键在约束栏注明。基本表:[Admin]字段类型长度格式约束用户ID文本250主键用户密码文本250用户身份文本250基本表:[Book]字段类型长度格式约束图书编号文本250主键图书分类号文本150书名文本255丛书文本150作者文本255出版社文本255版次文本150ISBN文本250定价货币库存量数字(整型)内容简介备注关键词文本255出版日期文本15049 入库时间日期/时间长日期Now()基本表:[供应商]字段类型长度格式约束供应商编号文本250主键供应商文本255地址文本255网址文本255联系人文本255电话文本50传真文本150电子邮件文本150单位简介备注基本表:[会员表]字段类型长度格式约束会员卡号文本50主键会员等级文本50姓名文本150性别文本50地址文本250单位文本250电话文本50电子邮件文本150人生格言备注注册日期日期/时间长日期基本表:[会员政策]字段类型长度格式约束会员级别文本50主键会员标准数字(整型)打折文本50赠送礼品文本250备注备注基本表:[进书记录]字段类型长度格式约束ID自动编号(长整型)主键供应商编号文本250图书编号文本250数量数字(长整型)单价货币折扣数字(单精度型)金额货币进书日期日期/时间长日期备注备注基本表:[客户反馈]49 字段类型长度格式约束ID自动编号(长整型)主键姓名文本150身份文本50性别文本50单位文本255地址文本255电子邮件文本150反馈信息备注反馈日期日期/时间长日期基本表:[售书记录]字段类型长度格式约束ID自动编号(长整型)主键图书编号文本250数量数字(整型)会员卡号文本250实际打折数字(单精度型)实收金额货币日期文本50长日期备注备注基本表:[书店简介]字段类型长度格式约束书店名称文本255主键地址文本255网址文本255联系人文本150电话文本50手机数字(长整型)电子邮件文本150书店简介备注备注备注基本表:[图书分类]字段类型长度格式约束图书分类号文本150主键图书分类文本250所属父类编号文本150基本表:[图书进价表]字段类型长度格式约束图书编号文本150主键进价货币进书日期日期/时间长日期基本表:[退货记录]字段类型长度格式约束49 ID自动编号(长整型)主键供应商编号文本250图书编号文本250进价货币退货数量数字(整型)金额货币退货原因备注退货日期日期/时间长日期备注备注基本表:[员工表]字段类型长度格式约束员工帐号文本250主键姓名文本150性别文本50地址文本255电话文本50手机文本150电子邮件文本150人生格言备注创建日期日期/时间长日期Now()视图:[基本统计]图5.基本统计视图结构视图:[读者查询]图6.读者查询视图结构视图:[退货统计]49 图7.退货统计视图结构视图:[售书统计]图8.售书统计视图结构视图:[售书查询]图9.售书查询视图结构注:其他视图结构:[略]。八、软件体系结构设计说明书8.1系统概述在单机环境下进行系统安全的考虑,有必要进行用户权限的划分与控制,因而系统在总体上应包含安全子系统之下的各类用户工作环境。用户权限的合理划分与有效控制是本系统体系结构设计的核心。8.2设计约束系统将实现人员、物流的全面管理,而物流管理是系统的核心部件,怎样实现二者的共存,互不干扰,是本系统设计的难点。本系统必须实现对用户权限的有效合理控制。8.3设计策略由于所有的物流都需要有人员的活动才能够发生,因此,我决定采用一种“人员活动带动物流”的策略来解决人员管理与物流管理的统一管理问题。这个想法是模拟现实而来的,比如说,只有采购人员进行了“采购”或“进书”49 活动,才会引起“入库登记”或“新书入库”这个物流。8.4系统概要设计说明书8.4.1图例说明过程、模块1.处理过程:数据表2.数据存储:决策3.条件判断:4.数据流:(单向)5.数据流:(双向)实体6.外部实体:数据表7.带有变动历史的数据存储:8.4.2系统总体结构图登陆验证会员政策员工管理书店概况统计分析安全子系统权限控制身份鉴别经理子系统宛枫书社图书管理系统基本统计退货统计库存统计进货统计销售统计进货子系统库存管理退货子系统书目管理入库登记供应商管理仓库管理员子系统删除帐号修改资料创建帐号销售统计会员管理销售子系统售书员子系统购书记录修改密码个人资料会员子系统信息反馈会员注册书目检索游客子系统图10.系统总体结构图49 8.4.3销售子系统流程图售书员Book会员表选择图书选择会员会员表图书销售优惠政策售书记录图11.销售子系统流程图8.4.4进货子系统流程图仓管员选择供应商供应商修改资料供应商登记选择品种供应商供应商添加类别添加品种Book入库登记修改资料图书分类Book图书进价表进货记录图12.进货子系统流程图8.4.5退货子系统流程图选择供应商仓管员供应商选择品种退货记录退货登记Book进货记录图13.退货子系统流程图8.5系统详细设计说明书8.5.1系统模块汇总49 模块名类型原型或声明模块说明CheckUser子程序PublicSubCheckUser(userIDAsString,passwdAsString)用户帐号、密码验证和身份鉴别LogOff子程序PublicSubLogOff()注销模块Sys_exit子程序PublicSubSys_exit()系统退出摸块Form_Load子程序PrivateSubForm_Load()初始化模块,连接数据库GetHYDaZhe函数PublicFunctionGetHYDaZhe(bianHaoAsString)AsString提取会员政策的会员优惠办法GetKuCun函数PublicFunctionGetKuCun(bianHaoAsString)AsString获取、检验图书现有库存量HYShengJi函数PublicFunctionHYShengJi(HYKaHaoAsString)AsBoolean会员升级维护CmdSellBook_Click子程序PrivateSubCmdSellBook_Click()图书销售模块checkGYSID函数PublicFunctioncheckGYSID(UIDAsString)AsBoolean检验数据表主键,避免插入错误checkFenLei函数PublicFunctioncheckFenLei(UIDAsString)AsBoolean检测图书分类是否已经存在CmdNewFenLei_Click子程序PrivateSubCmdNewFenLei_Click()创建类别checkUserID函数PublicFunctioncheckUserID(UIDAsString)AsBoolean检测用户帐号是否存在CmdChgPass_Click子程序PrivateSubCmdChgPass_Click()修改密码CmdRegMe_Click子程序PrivateSubCmdRegMe_Click()创建员工、会员帐号GetJinJia函数PublicFunctionGetJinJia(bianHaoAsString)AsString提取图书进价CmdTH_Click子程序PrivateSubCmdTH_Click()退货模块CmdSaveContinue_Click子程序PrivateSubCmdSaveContinue_Click()供应商信息登记注:其他模块(略)8.5.2系统核心模块详解全局变量定义:"用户身份标志PublicUserShenFenAsString"登陆状态PubliclogOKAsBoolean"用户名PublicuserNameAsString"供应商编号PublicGongYingShangIDAsString"供应商PublicGongYingShangAsString"图书编号PublicTuShuBianHaoAsString"定价PublicDingJiaAsString49 "书名PublicShuMingAsString"会员卡号PublicHuiYuanKaHaoAsString"会员姓名PublicHYXingMingAsString"会员等级PublicHYDengJiAsString模块名:CheckUser原型:PublicSubCheckUser(userIDAsString,passwdAsString)代码:PublicSubCheckUser(userIDAsString,passwdAsString)DimuserDBAsDatabaseDimuserRDAsRecordsetDimdbNameAsStringDimSTRSQLAsStringScreen.MousePointer=11OnErrorGoToerrEnddbName=App.PathIfRight(dbName,1)<>""ThendbName=dbName+""dbName=dbName+"DataBaseWFSSDataBase.mdb"STRSQL="select[用户身份]from[Admin]where[用户ID]="""&userID&"""and[用户密码]="""&passwd&"""""打开数据库SetuserDB=DBEngine.Workspaces(0).OpenDatabase(dbName,False,True)"检索用户,验证密码SetuserRD=userDB.OpenRecordset(STRSQL,dbOpenSnapshot)IfuserRD.RecordCount>0Then"设置用户身份UserShenFen=userRD![用户身份]"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=Nothing"进入用户环境LoadFrmMain49 FrmMain.ShowUnloadFrmLogInlogOK=TrueuserName=userIDScreen.MousePointer=vbDefaultElse"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothinglogOK=FalseScreen.MousePointer=vbDefaultMsgBox"用户名或密码错误!请重新输入!",vbOKOnly+vbExclamation,"登陆失败"EndIfExitSuberrEnd:Screen.MousePointer=vbDefaultMsgBoxErr.Description,vbOKOnly+vbExclamation,"登陆错误"logOK=FalseErr.Clear"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingExitSubEndSub模块名:LogOff模块原型:PublicSubLogOff()代码:PublicSubLogOff()DimretValAsIntegerretVal=MsgBox("你确定要注销吗?",vbOKCancel+vbQuestion,"注销当前用户")IfretVal=vbCancelThenExitSubLoadFrmLogInFrmLogIn.ShowIfUserShenFen="经理"ThenUnloadFrmAdminMainElseIfUserShenFen="仓库管理员"Then49 UnloadFrmCangGuanMainElseIfUserShenFen="售书员"ThenUnloadFrmBookSellerMainElseIfUserShenFen="会员"ThenUnloadFrmMemberMainElseUnloadFrmGuestMainEndIfUnloadFrmMainUserShenFen=""logOK=FalseEndSub模块名:Sys_exit模块原型:PublicSubSys_exit()代码:PublicSubSys_exit()DimretValAsIntegerretVal=MsgBox("你确定要退出吗?",vbOKCancel+vbQuestion,"退出系统")IfretVal=vbCancelThenExitSubIfUserShenFen="经理"ThenUnloadFrmAdminMainElseIfUserShenFen="仓库管理员"ThenUnloadFrmCangGuanMainElseIfUserShenFen="售书员"ThenUnloadFrmBookSellerMainElseIfUserShenFen="会员"ThenUnloadFrmMemberMainElseUnloadFrmGuestMainEndIfUnloadFrmMainEndEndSub模块名:Form_Load模块原型:PrivateSubForm_Load()代码:PrivateSubForm_Load()49 DimdbNameAsStringDimconnSTRAsStringOnErrorGoToerrEndChDirApp.PathdbName=App.PathIfRight(dbName,1)<>""ThendbName=dbName+""dbName=dbName+"DataBaseWFSSDataBase.mdb"connSTR="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&dbName&";PersistSecurityInfo=False"Adodc1.ConnectionString=connSTRExitSuberrEnd:MsgBox"连接数据库失败!",vbOKOnly+vbExclamation,"打开数据库出错"EndEndSub模块名:GetHYDaZhe模块原型:PublicFunctionGetHYDaZhe(bianHaoAsString)AsString代码:PublicFunctionGetHYDaZhe(bianHaoAsString)AsStringOnErrorGoToerrEndIfbianHao="☆☆☆☆☆"ThenGetHYDaZhe="1"ExitFunctionEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[打折]from[会员政策]where[会员级别]="""&bianHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstGetHYDaZhe=Adodc1.Recordset!打折ElseMsgBox"会员政策数据丢失,请与经理联系!",vbOKOnly+vbExclamation,"检索错误"GetHYDaZhe="1"EndIf49 ExitFunctionerrEnd:MsgBox"检索数据库出错!",vbOKOnly+vbExclamation,"检索错误"GetDingJia="未知"EndFunction模块名:GetKuCun模块原型:PublicFunctionGetKuCun(bianHaoAsString)AsString代码:PublicFunctionGetKuCun(bianHaoAsString)AsStringOnErrorGoToerrEndAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[库存量]from[Book]where[图书编号]="""&bianHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstGetKuCun=Adodc1.Recordset!库存量ElseMsgBox"图书资料数据丢失,请与经理联系!",vbOKOnly+vbExclamation,"检索错误"GetKuCun="0"EndIfExitFunctionerrEnd:MsgBox"检索数据库出错!",vbOKOnly+vbExclamation,"检索错误"GetDingJia="未知"EndFunction模块名:HYShengJi模块原型:PublicFunctionHYShengJi(HYKaHaoAsString)AsBoolean代码:PublicFunctionHYShengJi(HYKaHaoAsString)AsBooleanOnErrorGoToerrEndDimBiaoZhunAsIntegerDimSUMBookAsIntegerIfHYKaHao="Guest"ThenHYShengJi=FalseExitFunctionEndIfBeginTrans49 Adodc1.CommandType=adCmdTextAdodc1.RecordSource="selectsum([实收金额])as[总金额]from[售书记录]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstSUMBook=CInt(Adodc1.Recordset!总金额)ElseSUMBook=0EndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[会员标准]from[会员政策]where[会员级别]="★☆☆☆☆""Adodc1.RefreshAdodc1.Recordset.MoveFirstBiaoZhun=CInt(Adodc1.Recordset!会员标准)IfSUMBook>=BiaoZhunThenAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[会员表]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!会员等级="★☆☆☆☆"Adodc1.Recordset.UpdateEndIfEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[会员标准]from[会员政策]where[会员级别]="★★☆☆☆""Adodc1.RefreshAdodc1.Recordset.MoveFirstBiaoZhun=CInt(Adodc1.Recordset!会员标准)IfSUMBook>=BiaoZhunThenAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[会员表]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!会员等级="★★☆☆☆"Adodc1.Recordset.UpdateEndIf49 EndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[会员标准]from[会员政策]where[会员级别]="★★★☆☆""Adodc1.RefreshAdodc1.Recordset.MoveFirstBiaoZhun=CInt(Adodc1.Recordset!会员标准)IfSUMBook>=BiaoZhunThenAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[会员表]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!会员等级="★★★☆☆"Adodc1.Recordset.UpdateEndIfEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[会员标准]from[会员政策]where[会员级别]="★★★★☆""Adodc1.RefreshAdodc1.Recordset.MoveFirstBiaoZhun=CInt(Adodc1.Recordset!会员标准)IfSUMBook>=BiaoZhunThenAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[会员表]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!会员等级="★★★★☆"Adodc1.Recordset.UpdateEndIfEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[会员标准]from[会员政策]where[会员级别]="★★★★★""Adodc1.RefreshAdodc1.Recordset.MoveFirstBiaoZhun=CInt(Adodc1.Recordset!会员标准)IfSUMBook>=BiaoZhunThenAdodc1.CommandType=adCmdText49 Adodc1.RecordSource="select*from[会员表]where[会员卡号]="""&HYKaHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!会员等级="★★★★★"Adodc1.Recordset.UpdateEndIfEndIfCommitTransHYShengJi=FalseExitFunctionerrEnd:RollbackHYShengJi=TrueScreen.MousePointer=vbDefaultMsgBox"检查会员是否应升级时操作失败!",vbOKOnly+vbExclamation,"图书销售"CmdOK.Enabled=TrueEndFunction模块名:CmdSellBook_Click模块原型:PrivateSubCmdSellBook_Click()代码:PrivateSubCmdSellBook_Click()OnErrorGoToerrEndDimQDAsIntegerCmdSellBook.Enabled=FalseIfTxtShuLiang.Text=""ThenMsgBox"请输入交易的数量!",vbOKOnly+vbExclamation,"填写数量"TxtShuLiang.SetFocusCmdSellBook.Enabled=TrueExitSubEndIfIfGetKuCun(TuShuBianHao)<=0OrGetKuCun(TuShuBianHao)1ThenMsgBox"实际折扣率填写错误!请在0与1之间选择.",vbOKOnly+vbExclamation,"填写折扣"TxtZheKou.SetFocusCmdSellBook.Enabled=TrueExitSubEndIfIfTxtSJJinE.Text=""ThenMsgBox"请输入交易的实际金额!",vbOKOnly+vbExclamation,"填写金额"TxtSJJinE.SetFocusCmdSellBook.Enabled=TrueExitSubEndIfIfTxtMemo.Text=""ThenTxtMemo.Text="无"QD=MsgBox("确定入帐吗?",vbOKCancel+vbQuestion,"确认入帐")IfQD=vbCancelThenCmdSellBook.Enabled=TrueExitSubEndIf"售书入帐Screen.MousePointer=11BeginTransAdodc1.CommandType=adCmdTableAdodc1.RecordSource="售书记录"Adodc1.RefreshAdodc1.Recordset.AddNewAdodc1.Recordset!图书编号=TuShuBianHaoAdodc1.Recordset!数量=TxtShuLiang.TextAdodc1.Recordset!会员卡号=HuiYuanKaHaoAdodc1.Recordset!实际打折=TxtZheKou.TextAdodc1.Recordset!实收金额=TxtSJJinE.TextAdodc1.Recordset!日期=Year(Now)&"-"&Month(Now)&"-"&Day(Now)&"."Adodc1.Recordset!备注=TxtMemo.TextAdodc1.Recordset.UpdateAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[Book]where[图书编号]="""&TuShuBianHao&""""Adodc1.Refresh49 IfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!库存量=Adodc1.Recordset!库存量-TxtShuLiang.TextAdodc1.Recordset.UpdateElseRollbackScreen.MousePointer=vbDefaultMsgBox"图书资料丢失,请与仓库管理员联系!",vbOKOnly+vbExclamation,"交易失败"CmdSellBook.Enabled=TrueExitSubEndIfIfHYShengJi(HuiYuanKaHao)ThenRollbackCommitTransScreen.MousePointer=vbDefaultMsgBox"恭喜您,交易成功!",vbOKOnly+vbInformation,"交易成功"UnloadMeExitSuberrEnd:RollbackScreen.MousePointer=vbDefaultMsgBoxErr.Description,vbOKOnly+vbExclamation,"操作数据库出错交易失败"CmdSellBook.Enabled=TrueEndSub8.5.3系统模块详解模块名:checkGYSID模块原型:PublicFunctioncheckGYSID(UIDAsString)AsBoolean代码:PublicFunctioncheckGYSID(UIDAsString)AsBooleanDimuserDBAsDatabaseDimuserRDAsRecordsetDimdbNameAsStringDimSTRSQLAsStringScreen.MousePointer=11OnErrorGoToerrEnd49 dbName=App.PathIfRight(dbName,1)<>""ThendbName=dbName+""dbName=dbName+"DataBaseWFSSDataBase.mdb"STRSQL="select[图书分类]from[图书分类]where[图书分类号]="""&UID&"""""打开数据库SetuserDB=DBEngine.Workspaces(0).OpenDatabase(dbName,False,True)"检索用户,验证密码SetuserRD=userDB.OpenRecordset(STRSQL,dbOpenSnapshot)IfuserRD.RecordCount>0Then"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingcheckGYSID=TrueScreen.MousePointer=vbDefaultElse"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingScreen.MousePointer=vbDefaultcheckGYSID=FalseEndIfExitFunctionerrEnd:Screen.MousePointer=vbDefaultMsgBoxErr.Description,vbOKOnly+vbExclamation,"创建类别"Err.Clear"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingEndFunction模块名:checkFenLei模块原型:PublicFunctioncheckFenLei(UIDAsString)AsBoolean49 代码:PublicFunctioncheckFenLei(UIDAsString)AsBooleanDimuserDBAsDatabaseDimuserRDAsRecordsetDimdbNameAsStringDimSTRSQLAsStringScreen.MousePointer=11OnErrorGoToerrEnddbName=App.PathIfRight(dbName,1)<>""ThendbName=dbName+""dbName=dbName+"DataBaseWFSSDataBase.mdb"STRSQL="select[图书分类]from[图书分类]where[图书分类]="""&UID&"""""打开数据库SetuserDB=DBEngine.Workspaces(0).OpenDatabase(dbName,False,True)"检索用户,验证密码SetuserRD=userDB.OpenRecordset(STRSQL,dbOpenSnapshot)IfuserRD.RecordCount>0Then"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingcheckFenLei=TrueScreen.MousePointer=vbDefaultElse"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingScreen.MousePointer=vbDefaultcheckFenLei=FalseEndIfExitFunctionerrEnd:Screen.MousePointer=vbDefault49 MsgBoxErr.Description,vbOKOnly+vbExclamation,"创建类别"Err.Clear"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingEndFunction模块名:CmdNewFenLei_Click模块原型:PrivateSubCmdNewFenLei_Click()代码:PrivateSubCmdNewFenLei_Click()OnErrorGoToerrEndIfTxtBianHao.Text=""ThenMsgBox"请填写图书分类号!",vbOKOnly+vbExclamation,"创建分类"TxtBianHao.SetFocusExitSubEndIfIfTxtLeiBie.Text=""ThenMsgBox"请填写图书分类名称!",vbOKOnly+vbExclamation,"创建分类"TxtLeiBie.SetFocusExitSubEndIfIfcheckFenLei(TxtLeiBie.Text)ThenMsgBox"图书分类名称不唯一,请另选一个!",vbOKOnly+vbExclamation,"创建分类"TxtLeiBie.SetFocusTxtLeiBie.SelStart=0TxtLeiBie.SelLength=Len(TxtLeiBie.Text)ExitSubEndIfIfComboFuLei.Text<>""AndComboFuLei.Text<>"选择父类"ThenIfNotcheckFenLei(ComboFuLei.Text)ThenMsgBox"所选父类不存在!请重试!",vbOKOnly+vbExclamation,"选择父类"ComboFuLei.SetFocusExitSubEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[图书分类号]from[图书分类]where[图书分类号]=[所属父类编号]and[图书分类]="""&ComboFuLei.Text&""""Adodc1.RefreshAdodc1.Recordset.MoveFirstFuLeiBianHao=Adodc1.Recordset!图书分类号EndIf49 IfcheckGYSID(TxtBianHao.Text)ThenMsgBox"图书分类编号不唯一,请另选一个!",vbOKOnly+vbExclamation,"创建分类"TxtBianHao.SetFocusTxtBianHao.SelStart=0TxtBianHao.SelLength=Len(TxtBianHao.Text)ExitSubEndIfIfFuLeiBianHao=""ThenFuLeiBianHao=TxtBianHao.TextAdodc1.CommandType=adCmdTableAdodc1.RecordSource="图书分类"Adodc1.RefreshAdodc1.Recordset.AddNewAdodc1.Recordset!图书分类号=TxtBianHao.TextAdodc1.Recordset!图书分类=TxtLeiBie.TextAdodc1.Recordset!所属父类编号=FuLeiBianHaoAdodc1.Recordset.UpdateMsgBox"创建分类成功!",vbOKOnly+vbInformation,"创建分类"TxtBianHao.Text=""TxtLeiBie.Text=""ComboFuLei.Text="选择父类"FuLeiBianHao=""TxtFuLei.Text=""TxtBianHao.SetFocusExitSuberrEnd:MsgBox"更新数据库失败!",vbOKOnly+vbExclamation,"数据库出错"EndSub模块名:checkUserID模块原型:PublicFunctioncheckUserID(UIDAsString)AsBoolean代码:PublicFunctioncheckUserID(UIDAsString)AsBooleanDimuserDBAsDatabaseDimuserRDAsRecordsetDimdbNameAsStringDimSTRSQLAsStringScreen.MousePointer=11OnErrorGoToerrEnd49 dbName=App.PathIfRight(dbName,1)<>""ThendbName=dbName+""dbName=dbName+"DataBaseWFSSDataBase.mdb"STRSQL="select[用户身份]from[Admin]where[用户ID]="""&UID&"""""打开数据库SetuserDB=DBEngine.Workspaces(0).OpenDatabase(dbName,False,True)"检索用户,验证密码SetuserRD=userDB.OpenRecordset(STRSQL,dbOpenSnapshot)IfuserRD.RecordCount>0Then"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingcheckUserID=TrueScreen.MousePointer=vbDefaultElse"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingScreen.MousePointer=vbDefaultcheckUserID=FalseEndIfExitFunctionerrEnd:Screen.MousePointer=vbDefaultMsgBoxErr.Description,vbOKOnly+vbExclamation,"修改密码"Err.Clear"关闭数据库userRD.CloseSetuserRD=NothinguserDB.CloseSetuserDB=NothingEndFunction模块名:CmdChgPass_Click49 模块原型:PrivateSubCmdChgPass_Click()代码:PrivateSubCmdChgPass_Click()OnErrorGoToerrEndIfTxtUserID.Text=""ThenMsgBox"请输入你的帐号!",vbOKOnly+vbExclamation,"更改密码"TxtUserID.SetFocusExitSubEndIfIfTxtPasswd.Text=""ThenMsgBox"请输入你的旧密码!",vbOKOnly+vbExclamation,"更改密码"TxtPasswd.SetFocusExitSubEndIfIfTxtNewPasswd.Text=""ThenMsgBox"请输入你的新密码!",vbOKOnly+vbExclamation,"更改密码"TxtNewPasswd.SetFocusExitSubEndIfIfTxtNewPasswd.Text<>TxtNewPasswdC.TextThenMsgBox"密码输入不一致,请重试!",vbOKOnly+vbExclamation,"更改密码"TxtPasswd.Text=""TxtNewPasswd.Text=""TxtNewPasswdC.Text=""TxtPasswd.SetFocusExitSubEndIfIfcheckUserID(TxtUserID.Text)ThenAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[Admin]where[用户密码]="""&TxtPasswd.Text&"""and[用户ID]="""&TxtUserID.Text&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstAdodc1.Recordset!用户密码=TxtNewPasswd.TextAdodc1.Recordset.UpdateElseMsgBox"用户密码验证错误!你无权修改密码!",vbOKOnly+vbExclamation,"密码错误"TxtPasswd.Text=""TxtNewPasswd.Text=""TxtNewPasswdC.Text=""49 ExitSubEndIfMsgBox"用户密码修改成功!请牢记!",vbOKOnly+vbInformation,"更改密码"TxtPasswd.Text=""TxtNewPasswd.Text=""TxtNewPasswdC.Text=""ElseMsgBox"该用户不存在!无法修改密码!",vbOKOnly+vbExclamation,"更改密码"TxtPasswd.Text=""TxtNewPasswd.Text=""TxtNewPasswdC.Text=""EndIfExitSuberrEnd:MsgBoxErr.Description&vbCrLf&"更改密码失败!",vbOKOnly+vbExclamation,"操作数据库出错"EndSub模块名:CmdRegMe_Click模块原型:PrivateSubCmdRegMe_Click()代码:PrivateSubCmdRegMe_Click()OnErrorGoToerrEndIfTxtCard.Text=""ThenMsgBox"请填写员工帐号!",vbOKOnly+vbExclamation,"创建员工帐号"TxtCard.SetFocusExitSubEndIfIfTxtUName.Text=""ThenMsgBox"请填写员工的姓名!",vbOKOnly+vbExclamation,"创建员工帐号"TxtUName.SetFocusExitSubEndIfIfComboShenFen.Text=""OrComboShenFen.Text="请选择员工身份"ThenMsgBox"请选择员工的身份!",vbOKOnly+vbExclamation,"创建员工帐号"ComboShenFen.SetFocusExitSubEndIfIfTxtUDanWei.Text=""ThenTxtUDanWei.Text="无"49 IfTxtUDiZhi.Text=""ThenMsgBox"请填写员工的地址!",vbOKOnly+vbExclamation,"创建员工帐号"TxtUDiZhi.SetFocusExitSubEndIfIfTxtUMail.Text=""ThenTxtUMail.Text="无"IfTxtUDianHua.Text=""ThenTxtUDianHua.Text="无"IfTxtUMemo.Text=""ThenTxtUMemo.Text="无"IfcheckUserID(TxtCard.Text)ThenMsgBox"这个员工帐号已经被注册!请另选一个!",vbOKOnly+vbExclamation,"创建员工帐号"TxtCard.SelStart=0TxtCard.SelLength=Len(TxtCard.Text)TxtCard.SetFocusExitSubEndIfCmdRegMe.Enabled=False‘开始一个事务BeginTransAdodc1.CommandType=adCmdTableAdodc1.RecordSource="员工表"Adodc1.RefreshAdodc1.Recordset.AddNewAdodc1.Recordset!员工帐号=TxtCard.TextAdodc1.Recordset!姓名=TxtUName.TextIfOptionMan.ValueThenAdodc1.Recordset!性别="男"ElseAdodc1.Recordset!性别="女"EndIfAdodc1.Recordset!地址=TxtUDiZhi.TextAdodc1.Recordset!手机=TxtUDanWei.TextAdodc1.Recordset!电子邮件=TxtUMail.TextAdodc1.Recordset!电话=TxtUDianHua.TextAdodc1.Recordset!人生格言=TxtUMemo.TextAdodc1.Recordset!创建日期=Now()Adodc1.Recordset.UpdateAdodc1.CommandType=adCmdTableAdodc1.RecordSource="Admin"Adodc1.Refresh49 Adodc1.Recordset.AddNewAdodc1.Recordset!用户ID=TxtCard.TextAdodc1.Recordset!用户密码=TxtCard.TextAdodc1.Recordset!用户身份=ComboShenFen.TextAdodc1.Recordset.UpdateCommitTransMsgBox"恭喜你,注册成功!"&vbCrLf&"员工的帐号和密码就是你填写的员工帐号!"&vbCrLf&"请员工自行修改密码或立即修改密码。",vbOKOnly+vbQuestion,"注册成功"TxtCard.Text=""TxtUName.Text=""TxtUDanWei.Text=""TxtUDiZhi.Text=""TxtUMail.Text=""TxtUDianHua.Text=""TxtUMemo.Text=""CmdRegMe.Enabled=TrueExitSuberrEnd:RollbackMsgBox"注册失败,操作数据库发生错误!",vbOKOnly+vbExclamation,"注册失败"CmdRegMe.Enabled=TrueEndSub模块名:GetJinJia模块原型:PublicFunctionGetJinJia(bianHaoAsString)AsString代码:PublicFunctionGetJinJia(bianHaoAsString)AsStringOnErrorGoToerrEndAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select[单价]from[进书记录]where[图书编号]="""&TuShuBianHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount>0ThenAdodc1.Recordset.MoveFirstGetJinJia=Adodc1.Recordset!单价&""ElseMsgBox"数据丢失,清重试!",vbOKOnly+vbExclamation,"办理退货"GetJinJia=""ExitFunction49 EndIfExitFunctionerrEnd:MsgBox"找不到该品种的进价!",vbOKOnly+vbExclamation,"检索数据库出错"GetJinJia=""EndFunction模块名:CmdTH_Click模块原型:PrivateSubCmdTH_Click()代码:PrivateSubCmdTH_Click()OnErrorGoToerrEndDimQDAsIntegerIfTxtShuLiang.Text=""ThenMsgBox"请填写退货的数量.",vbOKOnly+vbExclamation,"办理退货"TxtShuLiang.SetFocusExitSubEndIfAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[Book]where[图书编号]="""&TuShuBianHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount=0ThenMsgBox"数据丢失,清重试!",vbOKOnly+vbExclamation,"办理退货"ExitSubEndIfAdodc1.Recordset.MoveFirstIfAdodc1.Recordset!库存量-CInt(TxtShuLiang.Text)<0ThenMsgBox"库存不足,没有足够的图书可以退回!",vbOKOnly+vbExclamation,"库存不足"TxtShuLiang.SetFocusTxtShuLiang.SelStart=0TxtShuLiang.SelLength=Len(TxtShuLiang.Text)ExitSubEndIfIfTxtJinJia.Text=""ThenMsgBox"图书进价信息丢失,无法完成退货操作!",vbOKOnly+vbExclamation,"办理退货"TxtShuLiang.SetFocusExitSubEndIf49 IfTxtJinE.Text=""ThenMsgBox"请填写退货金额.",vbOKOnly+vbExclamation,"办理退货"TxtJinE.SetFocusExitSubEndIfIfTxtYuanYin.Text=""ThenMsgBox"请填写退货原因.",vbOKOnly+vbExclamation,"办理退货"TxtYuanYin.SetFocusExitSubEndIfIfTxtMemo.Text=""ThenTxtMemo.Text="无"QD=MsgBox("确定入帐吗?",vbOKCancel+vbQuestion,"确认入帐")IfQD=vbCancelThen"UnloadMeExitSubEndIfCmdTH.Enabled=FalseScreen.MousePointer=11BeginTransAdodc1.CommandType=adCmdTableAdodc1.RecordSource="退货记录"Adodc1.RefreshAdodc1.Recordset.AddNewAdodc1.Recordset!供应商编号=GongYingShangIDAdodc1.Recordset!图书编号=TuShuBianHaoAdodc1.Recordset!进价=TxtJinJia.TextAdodc1.Recordset!退货数量=CInt(TxtShuLiang.Text)Adodc1.Recordset!金额=TxtJinE.TextAdodc1.Recordset!退货原因=TxtYuanYin.TextAdodc1.Recordset!退货日期=Now()Adodc1.Recordset!备注=TxtMemo.TextAdodc1.Recordset.UpdateAdodc1.CommandType=adCmdTextAdodc1.RecordSource="select*from[Book]where[图书编号]="""&TuShuBianHao&""""Adodc1.RefreshIfAdodc1.Recordset.RecordCount=0ThenRollbackScreen.MousePointer=vbDefault49 MsgBox"数据丢失,清重试!",vbOKOnly+vbExclamation,"办理退货"CmdTH.Enabled=TrueExitSubEndIfAdodc1.Recordset.MoveFirstAdodc1.Recordset!库存量=Adodc1.Recordset!库存量-CInt(TxtShuLiang.Text)Adodc1.Recordset.UpdateCommitTransScreen.MousePointer=vbDefaultMsgBox"本次退货操作成功!",vbOKOnly+vbInformation,"操作成功"UnloadMeExitSuberrEnd:RollbackScreen.MousePointer=vbDefaultMsgBox"更新数据库失败!无法完成退货操作!",vbOKOnly+vbExclamation,"更新失败"CmdTH.Enabled=TrueEndSub模块名:CmdSaveContinue_Click模块原型:PrivateSubCmdSaveContinue_Click()代码:PrivateSubCmdSaveContinue_Click()OnErrorGoToerrEndIfTxtBianHao.Text=""ThenMsgBox"请输入供应商编号!",vbOKOnly+vbExclamation,"供应商登记"TxtBianHao.SetFocusExitSubEndIfIfTxtDanWei.Text=""ThenMsgBox"请输入单位名称!",vbOKOnly+vbExclamation,"供应商登记"TxtDanWei.SetFocusExitSubEndIfIfTxtDiZhi.Text=""ThenMsgBox"请输入供应商联系地址!",vbOKOnly+vbExclamation,"供应商登记"TxtDiZhi.SetFocusExitSubEndIf49 IfTxtDianHua.Text=""ThenMsgBox"请输入供应商联系电话!",vbOKOnly+vbExclamation,"供应商登记"TxtDianHua.SetFocusExitSubEndIfIfTxtChuanZhen.Text=""ThenTxtChuanZhen.Text="未知"IfTxtMail.Text=""ThenTxtMail.Text="无"IfTxtLianXiRen.Text=""ThenMsgBox"请输入联系人姓名!",vbOKOnly+vbExclamation,"供应商登记"TxtLianXiRen.SetFocusExitSubEndIfIfTxtWeb.Text=""ThenTxtWeb.Text="无"IfTxtJianJie.Text=""ThenTxtJianJie.Text="无"IfcheckGYSID(TxtBianHao.Text)ThenMsgBox"供应商编号不唯一,请另选一个!",vbOKOnly+vbExclamation,"供应商登记"TxtBianHao.SetFocusTxtBianHao.SelStart=0TxtBianHao.SelLength=Len(TxtBianHao.Text)ExitSubEndIfAdodc1.Recordset.AddNewAdodc1.Recordset!供应商编号=TxtBianHao.TextAdodc1.Recordset!供应商=TxtDanWei.TextAdodc1.Recordset!地址=TxtDiZhi.TextAdodc1.Recordset!网址=TxtWeb.TextAdodc1.Recordset!联系人=TxtLianXiRen.TextAdodc1.Recordset!电话=TxtDianHua.TextAdodc1.Recordset!传真=TxtChuanZhen.TextAdodc1.Recordset!电子邮件=TxtMail.TextAdodc1.Recordset!单位简介=TxtJianJie.TextAdodc1.Recordset.UpdateMsgBox"供应商情况登记成功!",vbOKOnly+vbInformation,"登记成功"TxtBianHao.Text=""TxtDanWei.Text=""TxtDiZhi.Text=""TxtWeb.Text=""TxtLianXiRen.Text=""TxtChuanZhen.Text=""TxtDianHua.Text=""TxtMail.Text=""49 TxtJianJie.Text=""TxtBianHao.SetFocusExitSuberrEnd:MsgBox"更新数据库失败!",vbOKOnly+vbExclamation,"数据库出错"EndSub注:其他模块(略)。九、用户界面设计报告9.1界面设计规范主界面:菜单栏、工具条、工作区(本系统采用SSTab页框)、状态栏等。界面资源:由ImageList控件提供界面资源。9.2系统窗体汇总窗体名称窗体类型简要说明FrmLogIn启动窗体系统登陆FrmMainMDI主窗体系统主窗体FrmAbout模式窗体“关于…”窗体FrmAdminMainMDI子窗体经理主界面FrmAdminMemo模式窗体经理个人资料维护FrmBook模式窗体新书入库、选择品种FrmBookDengJi模式窗体新书入库登记FrmBookMemo模式窗体图书资料更正FrmBookSell模式窗体图书销售、选择图书FrmBookSellerMainMDI子窗体售书员主界面FrmCangGuanMainMDI子窗体仓库管理员主界面FrmChgHYMemo模式窗体修改会员资料FrmChgHYPasswd模式窗体修改会员密码FrmChgPasswd模式窗体修改密码,适用于所有用户FrmChgUserMemo模式窗体修改用户资料,适用于会员以上级别用户FrmChgUserPasswd模式窗体强制修改用户密码,适用于经理FrmDJGYS模式窗体登记供应商信息FrmGuestMainMDI子窗体游客级用户主界面FrmGYS模式窗体新书入库、选择供应商FrmHelp模式窗体系统帮助FrmHuiYuan模式窗体图书销售、选择会员或游客FrmHYmemo模式窗体会员资料统一管理FrmInfo模式窗体客户反馈信息统一管理FrmKuCun模式窗体库存统计FrmMemberMainMDI子窗体会员级用户主界面FrmNewBook模式窗体新书入库、添加品种FrmNewLei模式窗体创建图书分类49 FrmNewUser模式窗体创建员工帐号,适用于经理FrmRegMe模式窗体创建会员帐号FrmSell模式窗体图书销售FrmSellBook模式窗体图书销售统计FrmTHBook模式窗体办理退货、选择品种FrmTHGYS模式窗体办理退货FrnTHTJ模式窗体退货统计FrmToday模式窗体本日销售统计FrmTongJi模式窗体按时段的详细统计分析FrmTuiHuo模式窗体办理退货、选择供应商FrmUserAdmin模式窗体员工帐号、资料集中、统一管理FrmUserInfo模式窗体反馈信息管理,适用于仓库管理员FrmUserMemo模式窗体会员资料维护9.3主界面设计主界面的设计采用标准Windows主窗口样式,自上而下依次为:菜单栏、工具条、工作区(本系统采用SSTab页框)、状态栏等。所有系统用户拥有相似的主界面。主界面包含基本的或共享的功能,如书目浏览与检索,基本统计等。主界面如下图所示:图14.系统主界面设计样式9.4子界面设计除系统中主要的、基本的功能之外,子系统或非共享功能的实现均采用子界面的设计来实现,如图书销售、退货、进货管理、会员管理、员工管理、统计分析等。子界面设计样式如下图所示:49 图15.系统子界面设计样式9.5界面资源设计系统图标:工具栏图标:帮助、关于对话框显示的图片:十、软件测试分析报告10.1测试范围与主要内容测试范围主要内容简要说明系统登陆验证验证用户身份,进行权限控制功能性测试信息检索功能测试测试数据库检索代码的健壮性功能性测试图书销售管理功能测试测试系统实用性、方便性功能性测试统计分析测试测试按时段统计的准确性功能性测试数据完整性测试测试登记失败时的数据完整性控制功能性测试核心代码复检检验核心代码的质量逻辑检错性测试10.2测试方法功能性测试:黑盒测试逻辑检错性测试:白盒测试10.3测试报告测试项目测试目的测试数据测试结果改进意见修改状态书目检索信息检索功能的准确性和健壮性‘SQL语法错误暂无尚未修正登陆验证系统安全和权限控制用户名:admin密码:admin系统响应正常,权限控制正常------49 图书销售入帐操作的完整性---数据类型控制出错,事务处理成功增强对用户输入数据的控制尚未修正统计分析按时段统计功能的实现2003-3响应正常------核心代码复检检验核心代码的质量与效率---编码风格良好,内部注释不足。------10.4改进建议与措施修正建议说明、意义措施添加报表打印功能增加售书、统计等报表打印功能可以增加系统实用性。下一版本实施增加给钱、找余计算方便图书销售人员下一版本实施增加对批发业务的支持考虑书店实际销售情况,有利于书店拓展业务。下一版本实施进行联机版的开发分布式系统是软件发展的方向下一版本实施添加扫描仪输入支持方便销售管理下一版本实施十一、软件使用说明书11.1软件概述宛枫书社图书管理系统V1.0Beta测试版面向中小型书店、个体书店进行全面的人员、物流管理,旨在实现书店管理信息化。本系统采用会员制管理,将人员分为经理、仓库管理员、售书员、会员、游客等,分别拥有不同的权限,各司其职,以便提高工作效率。系统功能包括:供应商管理、进书管理、图书资料管理、售书管理、员工管理、会员管理、库存统计、售书统计、退货统计、基本统计分析等。用户权限:(一)经理权限:主要包括各种统计分析、员工管理、制定会员政策等等。(二)仓库管理员权限:包含进书管理、供应商管理、库存管理、退货管理等。(三)售书员权限:包含售书管理、会员管理等。11.2系统安装下载、解压后,运行setup.exe,然后依据提示点击“下一步”即可安装成功。安装界面如下图所示:图16.系统安装界面11.3使用说明11.3.1系统登陆安装成功后,请依次点击“开始”->“程序”->“宛枫书社图书管理系统V1.0Beta49 测试版”->“宛枫书社图书管理系统V1.0Beta测试版”,启动画面如下图所示:图16.系统登陆界面依据提示在文本框中分别输入“用户帐号”和“用户密码”,然后点击“登陆”按钮。如需查看帮助信息请点“帮助”。系统初始帐号、密码为:经理级帐号:admin密码:admin仓库管理员级帐号:仓库管理员密码:admin售书员级帐号:售书员密码:admin11.3.2注销与退出登陆成功后,可选取“系统”->“注销”,或点取工具栏“注销”按钮,注销当前用户。选取“系统”->“退出”退出系统,停止程序运行。图17.注销当前用户11.3.3办理进货登记办理进货登记(新书入库)是书店的一项主要业务。启动系统,以仓库管理员身份登陆系统,登陆成功后,选择“书库管理”->“如库登记”,或直接点取工具栏“进书”按钮,启动“新书入库”第一步操作,如下图所示:图18.新书入库操作界面选择供应商在这一个窗体中,可以进行以下操作:1.进行供应商情况登记。点击“供应商登记”,然后输入供应商信息,供应商编号须唯一。然后,选“保存并继续”继续添加供应商信息,选“保存并返回”返回上图所示界面。2.修改资料。请直接在本界面修改资料后,点取“修改资料”。3.选择本次入库操作的供应商。在下拉列表框中选择供应商编号,系统自动列出供应商详细信息,确认后,点取“选中供应商”,进入下一步操作。新书入库操作的第二步操作是:选择入库登记的图书品种。如下图所示:49 图19.新书入库操作界面选择图书品种在这一步,您可以进行以下操作:1.添加图书分类。点取“添加品种”,启动图20所示界面,可以创建两级分类,创建第一级分类,不要选“所属父类”,然后点“保存并继续”或“保存并返回”。创建第二级分类,请在所属父类栏选择父类。图20.新书登记界面添加图书分类2.添加图书品种。点取“添加品种”,启动下图所示界面。依次选择图书所属大类和子类,为该新品种指定唯一的图书编号,然后登记各项书目信息。最后点取“保存…”。如需修改已存在的图书资料,请点击“修改资料”。完成本操作后,点取“保存并返回”或“返回”返回图19界面。图21.新书登记界面添加图书品种3.修改图书资料。点取“修改资料”,进行现有图书资料修正。4.49 选择入库操作的图书品种。依次选择图书的大类、子类和品种编号,系统自动列出图书详细资料,确认后,点击“选中该品种”,进行新书入库操作。启动图22所示界面:确认供应商和品种无误后,请登记图书的数量、单价、折扣、金额等项,最后点击“入帐”,完成新书入库登记。入帐操作是一个“事务”处理过程,入帐操作失败不会引起数据不一致的问题。图22.新书入库操作11.3.4办理退货登记以“仓库管理员”身份登陆系统,选取“书库管理”->“办理退货”,选取供应商和图书品种,操作步骤与进货操作类似,不再详述。最后启动下图所示界面:图23.办理退货登记界面确认无误后登记退货的数量、金额和退货原因,点取“入帐”完成本操作。11.3.5销售图书以“售书员”身份登陆系统,依次点取“销售管理”->“图书销售”或点击工具栏“售书”按钮,然后输入所售图书编号,将光标移出,系统自动检索书目信息,确认后,点击“选中图书”。第二步选择会员或游客,如果购书者是本店会员,请输入会员卡号,否则直接点“选中该会员”。确认信息后将启动图24所示界面,进行图书销售登记。依次输入销售图书的数量、优惠(打折比率)等,点取“入帐”按钮。完成售书操作。49 图24.图书销售11.3.6会员管理售书员和经理均可以进行会员的管理。启动图25界面,可进行会员的创建、修改和删除操作。但是,为了维护数据的完整性,有购书记录的会员不允许被删除。图25.会员管理11.3.7员工管理员工管理的权限属于经理。以“经理”帐号登陆系统。选择“员工管理”,可以进行“创建员工帐号”、“修改员工密码”、“修改员工资料”等操作。也可以点取“员工帐号管理”启动如下图所示界面进行员工帐号的集中统一管理。图26.员工管理49 11.3.8书目检索系统中所有帐号都可以进行书目检索操作。点取“检索书目”选项卡,如下图所示:图27.检索书目输入检索的关键词和检索的依据进行检索,检索采用“模糊检索”,可以输入关键词的一部分进行检索。11.3.9查看统计信息查看统计分析的权限属于书店经理,以经理帐号登陆系统,选取“统计分析”可以查看“基本统计分析”、“详细统计分析”、“售书统计”、“库存统计”、“退货统计”等。仓库管理员拥有查看“库存统计”、“退货统计”的权限。售书员拥有查看“售书统计”、“本日销售统计”的权限。图28.查看统计分析11.3.10修改密码修改个人密码的权限属于“会员”以上级别用户,修改密码需要旧密码的确认。上级修改下级的密码无须旧密码确认。图29.修改用户密码11.3.11关于/帮助如需查看本系统关于或帮助信息,请点取工具栏“关于”或“帮助”。获取帮助信息,请按F1。49 图30.关于本系统参考资料:1.《计算机软件产品开发文件编制指南》2.《现代软件工程》周之英编著.科学出版社.2000.13.《工程应用软件开发技术》唐任仲编著.化学工业出版社.1999.54.《VisualBasic6.0中文版参考详解》李怀明等著.清华大学出版社.1999.115.《VisualBasic6.0高级编程技巧》李善茂等著.电子工业出版社.1999.56.《VisualBasic6.0中文版提高与应用》谭浩强主编.电子工业出版社.1999.1149'