绪论:写作既是个人情感的抒发,也是对学术真理的探索,欢迎阅读由发表云整理的11篇电子商务综合论文范文,希望它们能为您的写作提供参考和启发。
2、完善库存管理制度,增强库存管理应对危机的能力
危机处理能力是一个企业所必须拥有的能力之一,在企业库存管理方面,应对危机作出有效合理的处理方案也是库存管理所需要的一个重要能力。我们应该看到的是,现代大多数企业库存管理危机处理能力缺失,在面临危机是不能够及时有效的提出解决方案,最终导致企业损失严重。在现时代到来之际,如何解决完善批业库存制度,增强库存管理应对危机的能力的问题就显得致关重要。在具体的实践中,每个企业在运营过程中都要确认所有库存信息的精准正确,不断提高库存管理部门的市场洞察力及分析力。除此之外,还要具体明确分工,要求每个岗位都必须有明确具体的分工要求,监督员工认真执行。不断加强库存管理者应对危机的能力,强调各部门之间及时进行有效的职能合作。同时建立库存管理工作的考核评估体系,加强各部门的沟通交流,提高企业整体库存意识,不断增强企业库存管理应对危机的能力。
一、绪论
药品是关乎人们切身利益的一种特殊产品,随着人均收入水平的提高,人们更加注重药品的质量、品牌、包装等。消费者能够感受到药品的微小差别而且具有一定的偏好,不会因为当两种药品价格有差异时造成价格高的药品完全销售不出去。此外,制药企业存在生产能力约束,没有任何一家制药企业有能力生产足够的药品来满足整个市场。中国现阶段的制药企业低水平重复建设问题严重。企业数量多,规模小,生产集中度低,产品结构雷同,生产能力过剩,全行业设备利用率不足一半。这些都增加了企业的生产成本,是利润率走低的一个重要原因。为缓解药价虚高问题,政府应该放松管制,为药品生产领域创造自由竞争的市场氛围,制药企业通过兼并、联合、重组,实现优胜劣汰、适度集中和效率提高。制药企业在市场自由竞争下的合并重组可以实现资源的优化配置。同时促使企业加大研发投入,进行科技创新,摆脱仅生产仿制药的困局,提高市场竞争力。现阶段中国的医疗机构进入壁垒较高,同时医疗体制改革相对滞后,这些导致公立医院仍然是垄断者。公立医院具有公益性质,其经费来源于财政拨款、医疗服务收入和药品收入。改革开放后,政府的财政投入占医院总收入的比重逐年减少,目前这个比例全国平均不足10%。为保证正常运转,政策上允许医院以15%的药品进销差价来弥补亏空,即“以药养医”的补偿机制。“以药养医”机制的合法化使得医院获得了通过出售药品取得盈利的合法权力。公立医院成为了通过高价出售药品的营利性机构,药品销售成为了医院收入的主要来源。
二、文献概览
标题:药品功能、药品销售渠、药品价格、药品促销方式、药品品牌形象、公共权力与药品营销额度之间的关系。
陈宏付(2002年)认为在药品销售的过程中,非处方药品与普通商品的销售相比而言,顾客重效用而轻价格,即顾客购买药品时药品的效用是首要考虑因素,即药品疗效。顾客为图个方便,只要药效好,即使药品稍贵些也愿买。一般而言,顾客心里通常是先考虑商品的品质、价格和自身承受能力,后考虑商品的效用,这是由人的本性所决定的。归成(2010)指出在世界药品销售额度排名中,抗肿瘤类的药品销售额度最高,达481.89亿美元,年增长率为11.3%,其次是调脂类药品,再次就是呼吸系统用药类达312.71亿美元,增幅达5.7%,再就是质子抑制类剂、抗抑郁药、自身免疫药等的销售额度也都分别增长16.9%,上述药品由于药品功能性的差异性,导致药品销售额度方面的差异。
曾建雄(2012)药品销售人员依靠医药专业知识,以及其它综合专业知识的运用,通过提升对于顾客用药咨询的指导水平和提高顾客满意度的方式,在关联用药的促销推荐上,实现药品用药的有的放矢,从而提高了药品销售促销的成功率。根据在现代市场营销的理念,顾客所得的让渡价值不可以简单地把价值与价格等同,所以在日益竞争加剧药品营销市场环境中,谁对顾客具有更大的让渡价值,谁就是市场营销的主导者,谁就可以提高自己药品的销售额度。所以通过为顾客提供服务价值的促销方式,让顾客获得更多的让渡价值。王晓敏(2005)认为广告促销在提高药品销售的宣传过程中是最有效、最节省时间和成本的方法,尤其是在非处方药品的促销中,广告促销是必不可少的。例如,某个药品凭借中央媒体和地方媒体的广告宣传促销的方式,在很短的时间内,就实现了闻名全国的促销效果。另外,对于药品进行广告艺术性的宣传表现,把药品的特性和疗效进行充分的宣传,从引起患者视觉和听觉方面的共鸣,从而激起顾客的购买欲望。
陈莎(2012)指出中国药品电子商务是目前新兴的药品销售渠道,它通过网络技术和SaaS交付模式,连接全球的药品供应链网络,实现了药品企业管理和电子商务及药品供应链的一体化,从而保证了药品企业内部管理及企业间的商务流程有效协同。在全球信息化程度不断提高的情况下,中国药品电子商务的通过网络销售渠道的形式,实现了为消费者提供便捷的药品服务的目标和方便及时、成本低廉的效果。
李荣凌(2009)指出国家规定药品价格下降之后虽然某医院的药品总销售金额和付款金额扔逐年递增,但增长幅度不同,从加成率、利润率看是逐年降低的,利润率下降幅度为52.88%,利润率的降低,导致医院利润减少,患者受益增多。随着降价比例增大及进价下降,医院药品零售价下降幅度较大,利润减少率和患者受益率均不断增大,且利润减少率起点为57.5%;国家规定的药品零售价下降幅度和患者受益率增大幅度要小些,而利润减少率却逐渐增大,当降价比例达39.3%时,利润减少率为零。当进价变动比例提高,当提高17.65%时,医院利润减少一半,患者受益为零。总的来说,这两种价格体系虽然对商业公司和药厂影响较小,但医院的利润率却减少在50%以上,患者也得到一定实惠。当药品进价下降时,患者受益率增大,医院利润率减少。当药品进价与降价比例过大时,商业公司和药厂都没有一定利润,就不会销售药品了,医院也就无法购进进行销售了,所以药品的销售价格对于药品销售额度具有直接性的决定作用。冯国忠(2006)认为在药品销售过程中应该摒弃“价格=成本+利润”的定价方式,应该把消费者也归入价格体系中。例如一种OTC的外用抗感染药,属微量消费品,需求弹性小,其包装规格应以2~3d用药量为宜,单位包装价格就不宜过高,包装也不宜过大,否则消费者会有一种浪费的感觉,这样可使药品的零售单价降到一个让消费者更能普遍接受的水平,从而可以扩大购买此药品的消费者群体的数量,并最终促进药品销售额度的增加。
毛小青(2012)认为在药品销售过程中通过品牌提升策略,来改善和提高影响药品品牌的各项要素,即通过各种形式的广告宣传来提高药品品牌知名度和美誉度。消费者在购买决策过程中的重要环节是药品品牌的评价,另外中国人在购买商品时也有求名的动机,故此药品销售人员要适应其求名的购物动机的心理,来不断地提升药品品牌。做品牌比做销量更加重要,这在医药销售行业已经达成共识。例如,在品牌营销模式的运用中,东盛科技掀起了名为“抗感风暴”的品牌战略:用白加黑支撑起东盛科技的企业品牌,再凭借东盛的实力,推出东盛牌板蓝根颗粒、东盛牌抗病毒口服液等一系列感冒药,形成了一个抗感家族。
田玮(2010)指出药品企业要及时配合政府政策规定,来规范和约束自己的销售人员,用合法的营销手段获取合理的利润。例如国内一些药品合资企业联合签署的《医药销售人员行为规范准则》,这对于加强药品行业的监督和管理和整合医药销售市场具有一定的净化作用。药品企业通过加强对国家政策的追踪和分析,以及政策预警方面的研究,并通过对于招标采购和降价及医药分家等国家政策对于药品销售方面的影响,及时调整推广策略和推广重点,让药品销售策略和行动步调的实现了协调统一。
通过以上研究文献的概览可知:药品的功能、药品销售渠道、药品促销方式、药品价格、药品品牌形象、关于药品的公共权力政策都分别与北京市药品销售额度具有显著的相互关联性。
三、研究方法与设计
本论文采用定量研究与演绎推理相互结合的方法。
把第一手数据资料作为研究数据的来源,把第二手数据作为参考资料。
把根据李克特测量量表形式编制的调查问卷作为研究工具。
本论文共发放调查问卷500份,具体分配比例为:北京药品销售商250份、药品消费者250份。有效回收共计488份,有效率为97.6%,完全符合论文设计要求。四、数据分析
信度分析:
“药品功能、药品促销方式、药品销售渠道、药品价格、药品品牌、公共权力、药品销售额度”的Cronbachα系数值结果分别是:0.776、0.758、0.729、0.730、0.785、0.711、0.762,上述不同变量的信度数值都大于论文设计规定的最低信度数值0.6,完全符合论文设计与研究的要求。
效度分析:
通过运用主成分分析法得出因子载荷值为0.682-0.789,超过0.5,这表明变量中的各个题目与其相应变量之间均存在较大的相关性,辅合效度符合设计要求。研究对象通过旋转成份矩阵被分为七个成份,基本验证了本调查问卷的各题目具有相对独立性,判别效度符合设计要求。
描述性分析:
总体均值中最高的是公共权力(4.5689),其次是药品价格(4.3831),第三是药品功能(3.9441),第四是药品销售额度(3.9313),第五是药品促销方式(3.7561),第六是药品品牌(3.6537)、第七是药品销售渠道(3.3718)。其中应答者对于“药品销售渠道”的回答得分最高,对于“公共权力”的回答得分最低。
标准差中最高的是药品促销方式(0.94523),其次是药品功能(0.92804),第三是药品销售额度(0.89528),第四是药品品牌(0.89443),第五是药品价格(0.88537),第六是药品销售渠道(0.86689)、第七是公共权力(0.85393)。其中应答者对于“药品促销方式”的回答意见分歧最大,对于“公共权力”的回答意见最为集中。
皮尔逊(积矩)分析:
自变量“药品功能、促销方式、销售渠道、药品价格、药品品牌、公共权力”和因变量“药品销售额度”之间的相关系数的绝对值分别为0.596、0.527、0.549、0.565、0.574、0.582,介于0.40-0.60之间,说明这六个变量和因变量之间存在中等强度的正相关性。所有自变量相互两者之间的相关系数为0.017~0.199之间,均小于0.4的相关性,表示自变量相互之间具有独立性。
四、结论
本论文通过文献概览和调查问卷的方式,并结合相关研究数据的分析,对北京地区药品销售额度的影响因素进行了分析,在第一章中提出的研究问题在此被验证。即对于“北京药品销售额度”具有影响的因素有“药品功能、促销方式、销售渠道、药品价格、药品品牌、公共权力”,这些影响因素与“北京药品销售额度”之间存在中等强度的正相关性。同时由于只是选取了六个自变量作为研究变量对于北京药品销售额度的影响作用进行了研究,在理论和实践方面对于本论文的研究意义都是一个限制。
参考文献:
[1]田玮.浅析零售药店在药品销售中存在的问题.中外医疗[J].2010.18.
[2]陈莎.基于B2C模式的药品销售平台.商场现代化[J].2012.5.
[3]归成.金融危机对世界药品销售的影响.上海医药[J].2010.1.
[4]毛小青.论提高药品销售业绩的策略.现代商贸工业[J].2012.3.
[5]曾建雄.浅谈关联用药销售的营销策略.北方药学[J].2012.9.
[6]冯国忠.我国OTC药品营销的4P和4C战略.齐鲁药事[J].2006.10.
[7]李荣凌\张蔚.定价政策对医院药品销售情况影响分析.中国医院药学杂志[J].2009.29(02).
毕业论文是高职院校人才培养过程中一个重要的环节,是对人才培 养质量的一次全面、综合性的检验,学生通过毕业论文的训练,不仅 能够培养对知识、技能的综合运用能力,而且能使学生初步具备分析 问题和解决问题的能力,培养创新意识。通过毕业论文写作可以使学 生意识到企业需要什么样的人才,了解企业的生产运营过程,从而使他 们把自己的毕业论文和以后的社会工作联系起来,以便毕业后能更快 更好的适应社会。
目前各高职院校都普遍加强了对毕业论文工作质量重要性的认识, 逐步形成了较为全面的管理规章制度。毕业论文工作也取得了一些初 步成绩,大多数同学对毕业论文重要性的认识比较到位,对毕业论文 的文本格式比较注重规范,也开始注重毕业论文的实用性,大部分指 导教师对指导工作认真负责。
但从总体看,由于各高职院校受自身发展历史、学术风气、扩大 招生、就业压力、实习时间安排、高职教育发展不均衡等多方面因素 影响,在毕业论文环节中,在论文选题、论文写作和论文答辩环节中 普遍存在着一些共性问题,本文以浙江育英职业技术学院国际贸易专 业为例,对学生的毕业论文情况进行汇总和分析。
一、浙江育英职业技术学院毕业论文情况分析
现将浙江育英职业技术学院国际贸易专业2010-2012级国际贸易专 业3个年级573名学生的论文进行统计分析。
(一) 基本情况统计
(详见表1)
(二) 论文情况统计
(详见表2)
(三) 分析
1.选题环节分析
通过追踪三年学生的毕业论文选题,可以看出,论文标题从假大 空逐步过渡到有具体企业和具体实践环节,但依然存在选题陈旧或多 人重复。如表2所示,在573人中有222人选题重复,题目为“XXX 公司出口现状、存在问题及对策分析”只是公司名称进行了替换,文 字内容有相当高的相似度,段落设置完全相同。有些论文虽然有具体 公司名和实践环节,但学生个人从未进入公司参与具体工作,假题假 做,内容空洞,纸上谈兵,无法将知识、技能很好地应用于职业与岗 位工作,造成毕业论文题目缺乏创新性和实际意义。通过表2,也看到 “其它与国际贸易专业无关论文题目”虽然还占一定比例,但可以看出 有递减的趋势,这可能与学院论文指南和老师加强了指导有关。
通过对题目和具体内容的分析,也发现一些积极的变化。通过表 2,可以观察到学生选择“电子商务、网络营销方面”的论文题目逐年 增多,由9人到13人到24人,很多中小企业电子商务意识也日渐成熟,在传统营销模式基础上,企业纷纷采用营销模式,说明学生的论 文题目也在与时俱进。
2. 写作环节分析
论文写作时间和毕业生实习时间重合,个别学生实习期间比较辛 苦,工作忙、压力大,更有个别学生工作时间较长,经常出差,下班 后己是疲惫不堪,不能够保证有足够的写作时间和写作环境。
其次,论文写作过程中基本都是教师联系学生,询问写作情况, 学生个人很少甚至从不主动联系指导教师,对指导教师提出的修改意 见也是置若罔闻或不能正确理解,有时通过几十个邮件仅仅是为了说 明一个问题。相当多的学生缺乏基本的论文写作能力,在论文写作时 对于自己所论的问题、论点、例证和论证步骤不清晰,缺乏基本的文 字功底,语言运用能力较差,只是将多处找来的一堆堆材料没有逻辑 联系地堆砌在一起,缺乏基本的思辨能力。文体杂乱,不符合论文写 作基本格式,甚至将企业内部新闻稿件、规章制度等直接拿来当作论 文内容,不加任何整理。抄袭现象严重,从头到尾大段抄袭原著;更 有甚者应届学生的毕业论文沿用往届学生的毕业论文。
再者,在教师指导方面,由于指导教师个人还有繁重的教学、科 研等相关工作,在毕业论文指导中个别教师投入的时间和精力不够, 没能及时与学生联系沟通,逐个甄别写作内容的真实性,对学生写作 过程无法全程掌控,造成指导教师对毕业论文的指导和检查力度不够。
3. 答辩环节分析
毕业论文最后环节就是论文答辩,这一环节是检查学生毕业论文 的完成质量,考察学生知识与能力以及论文真实性,提升学生认知水 平的最后环节。许多学生认为答辩就是走过场,认为反正学校最终是 要让他们毕业的。因此答辩之前对答辩事宜准备不充分,对自己的论 文不熟悉,尤其个别学生写作环节就有问题,比如,有些学生拷贝抄 袭别人的论文,对论文结构完全不清楚,甚至还有买来的论文等,在 答辩现场论文陈述不清楚,对核心观点、关键词不清楚、不了解,在 回答问题时要么回答不出,要么答非所问。
三、改革理念及举措
高职高专教育的培养目标决定了在其教学过程中,各个环节必须 具备鲜明的特色。教育部《关于加强普通高等学校工作的通知》进一 步明确了毕业论文的重要性,尤其针对高职毕业论文教育,教育部办 公厅提出了明确的指导方针:高职高专学生的毕业论文要与所学专业 及岗位需求紧密结合,可以采取岗前实践和毕业综合训练等形式,由 学校教师与企业的专业技术人员共同指导,结合企业的生产实际情况 选题,确定训练内容和任务要求,时间应不少于半年。在此方针的指 导下,高职院校应做到:
(一)毕业论文管理的改革
加强毕业论文管理包含两层涵义,一是规范,二是务实。
规范管理根据本校学生实际情况制定论文写作管理规范制度,从 下达任务书、开题报告、教师指导、中期检查、评阅、答辩等各个环 节上制订出明确的规范和标准,以确保毕业论文的质量,在论文的写 作各环节,利用QQ、微信、微博等现代化通讯手段,切实加强在线 的实时指导,改变过去那种“管理随意、质量随便”的情况。对论文 写作的要求、意义、规范、时间、质量、奖惩等各环节,对学院、系、 教师、学生都提出明确可操作的具体要求。
务实管理根据高职高专学生自身特点,制定切实可行的毕业论文 写作要求和指导手册,给予学生切实的帮助。
(二) 选题方面的改革
要切实围绕实际工作进行选题,选题提倡“小”、“新”、“真”、 “实”,一切从高职高专学生的实际出发,鼓励问题与未来工作实际相 结合。改变过去那种“围绕文献资料团团转,毕业论文纸上谈兵,假 题假做、内容空洞”的现象,使毕业综合实践的任务紧扣毕业生的职 业岗位和所学专业,使毕业生有真实的课题可做、有真实的内容可写。 学生可以把企业的技术改造、设计创新、正在做的实训项目、工作过 程中遇到的问题、发现的技能技巧、工作中的经验体会等作为毕业论 文的课题。
(三) 成果形式的改革
要努力实现高职毕业论文这一最重要教学环节的真正意义,不仅 要注重毕业论文的书面成果,而且更要注重毕业论文的实物成果,以 真正完成毕业论文。鼓励创新,对于市场调查报告、创意设计书、创 业设计书、企业生产(管理)改革计划书、职业规划方案等多种灵活 的毕业论文形式应予以支持和鼓励。
(四) 答辩模式的改革
由指导教师、企业专家、行业协会领导和企业事单位行家共同组成答辩委员会,针对学生的书面成果和实物成果,实施以就业为导向 的“毕业答辩一成果展示一就业招聘”三位一体的毕业答辩新模式, 从而彻底改变过去那种“审问式答辩,对学生就业毫无益处”的做法。
四、结语
英语专业本科毕业论文写作有着重要的意义,《高等学校英语专业英语教学大纲》认为它是考查学生语言能力、独立能力和创新能力的重要参考,“评估学业成绩的一个重要方式”。[1]近年来,虽然有了更多关于英语专业毕业论文写作的研究,内容既涉及微观的选题、摘要、主题句、语言和格式问题,又涉及宏观的现状分析、论文指导体系和评估机制问题。[2][3][4][5][6]然而,却鲜有学者论及网络资源的利用。这不仅与我国高校丰富的中英文电子图书资源和全球几千亿之巨的中英文网页资源明显不协调,[7][8]而且与很多本科学生的实际上网情况和毕业论文对网络资源的严重滥用很不协调。因此,如何在毕业论文写作过程中预防网络抄袭、合理有效地利用日益发达的网络环境和日益丰富的网络资源,是适应信息时展、进一步提高英语专业本科毕业论文质量的急迫需要解决的问题。本文拟探讨如何利用丰富的中英文网络资源,发挥个人网络信息能力,实现毕业论文写作的网络策略,在方便教师论文指导和管理的同时,也方便学生更灵活地运用自己的时间和空间,减少论文写作的工作量,降低论文写作的难度,进而有效地提高毕业论文写作的效率和质量。
一、络写作策略的基本原则
结合学生的经济、社会和文化背景,网络写作策略应该遵循以下原则:(1)资金节约原则。尽量免除不必要的经济压力,充分利用现有的个人电脑、联网手机或者公共电脑的软硬件设施,同时发挥个人的网络和现实人际关系,有效获取所需资源。(2)时间和空间灵活利用原则。网络写作的主要目的之一就是实现随时随地上网就可以写作的构想。(3)语言文化的敏感原则。首先,由于大多数电脑或者手机设备的系统都使用中文软件,因此为了在搜索英文信息时不受中文信息的干扰,需要把网页浏览器的语言环境进行调整,并且把国外搜索引擎的偏好和指令语言都改为英语。其次,英语论文与中文论文有较大的区别,在写作过程中要尽量避免汉语语言文化的负迁移。(4)遵守国家的互联网相关法律法规。
同时,虽然毕业论文的长度、语言、结构、格式和内容都是对本科学生严肃的挑战,但英美国家长期的学术传统和相应网络资源的丰富已经能够在较大程度上解决很多问题。所以在写作过程中学生要对自己的信息需求保持敏感,遵守信息素质原则,在实际行动中贯彻信息获取、评价、整理和合理利用的基本步骤,挖掘并发挥网络资源优势,自主解决论文写作中的诸多问题。
二、毕业论文的网络写作策略
根据网络、网络资源和毕业论文写作过程的特征,网络写作策略的成分包括:硬件环境、软件环境、网络和毕业论文的相关知识、信息处理、写作模板和样本、语言工具、通讯工具、论文修改工具和反抄袭检查。
网络写作的硬件环境由能够进行上网服务的手机和电脑构成。公共网吧和学校的计算机实验中心不存在这方面的问题。但是,如果办理个人手机或者电脑上网业务,就要认真阅读产品说明书,确认自己的手机或者电脑具备所需要的无线或者有线硬件配置;而且,无线服务的覆盖范围要能够满足自己的个人需要。总的来说,近几年的手提电脑和2009年上市的手机终端通常都支持高速无线上网服务。
网络写作的软件环境包括浏览器软件、文档阅读和编辑软件、文档转换软件,以及文档存储服务几个方面。很多电脑上网浏览软件(如Internet Explorer,Google Chrome)都有相应的手机版浏览软件,但更常用的手机浏览器却是Opera,UCWEB和GO。在通过设置正确的上网方式后,手机和电脑就能利用浏览器使用大多数共同资源了。网络上有较多优秀的在线free word processors,不需要在电脑或者手机上安装。使用方便而功能又几乎能与Microsoft Word媲美的当属Google Documents。用户通过联网手机或者电脑在获得免费Gmail账户后即可进入自己的文档空间,创建文件并进行编辑和储存,安全性能较高。其它所涉及的软件主要依据资料的文档类型而定,但通常是.doc,.ppt,.xls文件,这些都能上传到Google Docs打开或编辑;对于.caj,.kdh,.pdf,.省略、搜搜问问)、电子商务(如淘宝网店)、电子图书馆、个人社会关系获取或者传递所需的电子资源。把握所需信息必须了解的程度,适可而止,同时也要明确不同信息的所需类型(网络工具书、普通网络文本、网络图书、电子学术期刊、图片资料、视频资料、音频资料、软件、数据库等),以便于利用搜索引擎的不同功能或者专门搜索引擎进行比较准确的查找,或者便于确定在广域网还是学校电子图书馆查找。信息的评价是指通过阅读所获信息、比较同类资源、查询作者背景、查看网站域名和信息组织方式等,筛选获得的信息。通常,如果信息者没有学术或者高校工作背景,可以查看网站是否属于.edu,.gov.省略网域来作出初步评估。信息的整理是指通过summarizing,synthesizing,paraphrasing,quoting,highlighting和commenting等方式进行处理,利用众多的免费在线软件服务,对过滤后的信息作用进行评价和标识,并通过超链接等方式把它们整合到自己的写作计划中。信息的使用是指合理合法地使用资源,尊重信息者的使用协议,遵循APA,MLA或者CMS等文献使用的学术道德规范。
络写作过程中还有一些标准模板和自动程序可以使用;常用的有论文写作模板和文献引用的自动生成程序。很多美国大学和研究机构都有MLA,APA或者CMS格式的论文写作模板(template)可以下载,写作者只需要在相应版块写入相应内容即可。但选用的时候要注意模板所对应的论文格式印刷版本,以避免信息陈旧问题。而论文文献格式的自动生成程序(bibliography generator)则可以帮助解决复杂的引用规范问题。使得文内引用(in-text citation)、脚注和尾注(footnote and endnote),以及文后的书目制作轻而易举就能完成。在众多的相关程序中,综合性和信度都比较高的是Son of Citation Machine;它包括了主要文献格式和主要文献类型的引用格式,也及时更新了文献格式的版本,是网络写作的可靠资源之一。
论文写作过程中的信息沟通主要是和指导老师的充分交流,和同学的必要交流,以及和虚拟社区相关人士的有限交流。与指导老师交流的目的是为了提高论文整体质量和按时完成毕业论文,可以通过手机或者电脑的电子邮件或者实时通讯软件(communication software)实现;和同学交流主要是为了获取或者交流信息,也可以通过手机或者电脑的电子邮件或者实时通讯软件实现;和虚拟社区相关人士的交流主要是为了在保证信息安全的情况下获取所需信息,主要通过社区群组(groups,communities,forums)和电子邮件来实现。
利用网络写作本科毕业论文可以比较有效地防止网络抄袭行为,包括表层网络抄袭、深层网络抄袭和网络兜售的论文。表层网络抄袭是指抄袭不需要提交用户信息就可以检索到的网页资源,付费的数据库和网络资源不在此列。除了把学生论文的可疑部分或者关键部分的关键词放到通用搜索引擎中搜索以外,还可以使用在线的文献抄袭检测系统(plagiarism checker/detector/scanner)发现这种行为,譬如EVE2和Viper Anti-plagiarism Scanner。深层网络抄袭主要是指抄袭数据库资源。检测这种行为可以分为两种策略:一是关键词搜索:先把论文的可疑部分或者关键部分通过国内外数据库专用搜索引擎进行检索;在检测到抄袭行为的情况下,如果可能,还可以把相应的论文下载到本地计算机,通过文件对比软件(file comparison software)确定抄袭的比率(如弗吉尼亚大学的免费软件WCopyfind);二是购买以数据库为主的反抄袭服务,如CheckForPlagiarism和CNKI英文检测系统。由于学生提交的稿件都是电子文档,指导老师可以较早地把学生的论文上传到在线检测系统,及时阻止网络抄袭行为。随着高等教育的发展,国内的论文作坊也不计其数,英语专业本科论文价格也依据性质的不同而价格各异。通常,他们数据库中的论文价格在300元人民币左右,而“原创性”的论文则需要1000元以上。在一般情况下,通过在本地计算机或者手机上查看文档属性或者高级属性就可以发现问题。如果结合论文写作过程管理(包括对选题、提纲、原始资料及论文稿件版本的审查),论文作弊的成本就会大大增加。通过查看电子文档属性、对比不同的电子文档版本、跟踪学生的论文修改情况,只是简单地点几个键,买方和卖方就会面临很大的信用风险。这些措施可以在相当程度上规避不诚实行为。
三、结语
手机或者电脑网络积聚了丰富的信息资源、提供了发达的通讯功能;英语专业本科毕业论文的网络写作已经具备了比较成熟的条件。论文过程所涉及的选题、提纲撰写、资料收集、稿件写作、问题咨询、指导和管理等环节都可以通过网络软硬件资源来完成。相对于传统的论文写作方法,网络写作策略具有诸多的独特作用。它首先赋予了论文写作更灵活的时间和地点,比较适合当前教学和科研任务繁重的英语教师及四处奔波的大四学生。其次,网络写作策略延伸了论文指导老师的内涵,网络上千千万万的信息提供者都或多或少充当了这个角色,大大减轻了师生双方的压力。再次,老师可以从以往语言或者格式等繁琐问题中抽身出来,更多地从写作过程的简便性、结构的合理性、内容的思想性等方面给学生提供建议,帮助学生自主解决毕业论文写作中的诸多问题。最后,网络写作策略还能够有效利用网络资源阻止泛滥的学术不端行为,培养学术诚信。
但在网络写作策略实施过程中,我们可能遇到的两个常见问题是:(1)由于资金等因素影响,有的优秀网络资源可能不稳定,间歇或者长期不可获取;(2)由于信息太多或者太少而茫然不知所措。对于前者,需要保持比较灵活的资源使用态度,善于寻找替代资源。而资源太多时则要增加限制条件,利用高级搜索功能缩小范围;在资源缺乏时则要减少限制条件或者更改搜索关键词,寻找另外的解决办法。总之,日益丰富的信息存在于不可见的网络上,只要能合理有效地利用网络资源,就可以把毕业论文的网络写作策略发挥好,从而有效提高毕业论文写作的效率和质量。
参考文献:
[1]高等学校外语专业教学指导委员会英语组.高等学校英语专业英语教学大纲[S].上海:上海外语教育出版社,2000.
[2]穆凤英.英语专业本科生毕业论文的调查与思考[J].徐州师范大学学报,2001.27(4):138-142.
[3]孙文抗.英语专业学士论文写作现状分析[J].外语界,2004,101(3):59-64.
[4]颜静兰,倪薇.英语专业毕业论文规范操作思考[J].外国语言文学,2005,86(4):259-263.
[5]王崇义.加强毕业论文指导,提升学生素质[J].外语教学,2004,25(6):73-76.
[6]陈,薛荣.英语专业本科毕业论文质量监控体系构建与实践[J].重庆科技学院学报,2008.05:204-205.
0前言
从20世纪90年代开始,传统物流开始向现代物流转变。其显著的标志是它充分运用先进的信息技术,打破了运输环节与生产环节之间界限,通过供应链管理建立起企业供、产、销、储、运全过程的计划和控制,从整体上实现最优化的生产体系设计、企业运营和管理,实现物流、资金流、信息流之间的有机统一。通常我们理解物流企业信息化是指企业以业务流程重组为基础,广泛使用现代物流信息技术,控制和集成企业物流活动的所有信息,实现企业内外信息资源共享和有效利用,以提高企业的经济效益,加强核心竞争力。物流信息化意味着整个物流作业环节从运输、仓储、装卸、搬运、包装、流通加工到配送全面使用现代信息技术,实现企业内外信息资源的优化配置和集成化管理。目前现代物流信息技术涵盖广泛的内容,主要包括计算机技术、通信技术、电子数据交换技术、地理信息系统、货物识别技术等。正是由于这些基本的信息技术构成了现代物流信息化的基础。当前,各级政府职能部门和企业都在积极建设物流信息平台。其目的就是为了能够利用物流信息平台来协调和科学管理社会资源,充分利用社会资源为社会提供更好的服务。企业则是为了加强其自身的经济活动,提高物流效率,不断实现信息价值增值等方面的客观推动力。
1建立企业信息化水平评价体系的意义
当前,企业决策层都对自身的信息化建设高度重视,投人相当大的人力、物力和财力来发展信息系统。一个好的企业物流信息系统应该与企业自身的生产技术水平相匹配。并不是所有先进的技术都适应一个企业的发展,不能简单认为拥有了先进的信息设备的企业就是一个信息化水平高度发达的企业。只有采用合理科学的信息系统才可能发挥其应该发挥的作用,否则可能产生相反的作用,使企业背上沉重的负担,束缚了企业所应有的灵活机动的市场敏锐性。建立以企业管理信息化、企业业务需求信息化和信息系统本身安全性、可靠性评价指标为基础的评价体系,其目的就是使得企业能够以业务解决方案为核心,更系统地、更有目地性建设和更好地发展企业物流信息系统。
2建立评价企业信息化水平评价体系的原则
企业信息系统的建设其最终目的是为了满足物流企业生产水平发展的需要。而企业物流信息化水平评价体系建立,其目的是解决当前物流信息系统投资建设管理过程中的概念化、随意性问题,因此既要遵循一般信息系统建设管理等有很多一般性的原则,如安全性、先进性、兼容性等,更要体现一些物流领域的特点,因此要遵循如下原则。
2.1科学客观性原则
指标的选取应具有科学的理论根据。首先,要与当前社会客观生产技术水平相匹配。其次,评价指标体系应能准确地反映客观实际情况,有利于企业之间的横向比较,发现自身优势和不足之处,挖掘竞争潜力。物流信息化水平评价指标应成为物流企业完善物流信息系统、解决企业发展所面临问题的有力工具。
2.2系统性与整体性原则
企业信息化水平是多种因素综合的结果,评价指标体系应该全面反映企业物流信息系统的情况,既要反映系统的内部结构与功能,又要正确评估系统与外部环境的关联。因此,系统的可兼容性和扩展性也是评价指标的一个衡量标准。
2.3先进性原则
物流信息系统不仅要满足当前企业发展需求,同时还要求与企业未来发展相适应。一个能够与未来发展相适应的物流信息系统,就要求把握好行业和技术未来发展方向,积极发展现代物流,从供应链的高处整合企业和社会资源,以增强企业的综合竞争能力。
2.4定性与定量相结合的原则
在综合评价企业物流信息化水平时应综合考虑影响评估水平的定性和定量指标。对定性指标要明确其含义,并按照某种标准制定界限,使其能恰如其分地反映指标的性质。定量指标要有清晰的概念和根据标准确切的赋值和计算。
3物流企业信息化水平评价指标体系
根据物流企业信息化建设的需求,将评估系统分为三个体系和四级评估层次。具体结构见图1。我们将整体评价体系分为三个部分:企业管理信息系统评价体系、企业业务信息评价体系以及与系统本身相关的安全性能评价体系。主要是依据当前企业管理和发展所需要的信息系统本身功能所划分的,同时兼顾系统本身的安全性和可靠性的角度出发,因此将对系统安全的评估纳人企业信息化评估体系中来。
物流信息系统是实现企业管理网络化、自动化、智能化和标准化的一个集成系统。我们所选择企业资源计划(ERP)信息系统评价项目中主要突出的是物流企业在实现自己领域中区别其他企业ERP方面的管理体系,这包括指标U1, U2和U3都是物流企业的业务特点。其中由于物流企业多元化和多种业务关系,针对不同的物流企业,ERP项目的评价指标可以根据用户需求进行删减。例如,针对第三方物流企业可以只考虑U2和U3评估指标。对于企业的发展具支持作用的支持信息系统由于企业的性质不同可以简单定性为有无。关于先进的企业决策支持系统目前还没有确切的定义,但是通过分析当前的企业业务需求而产生企业发展所需要的支持策略也是企业信息化建设的一个重点发展对象。
业务信息系统评价系统是对评估物流企业日常运行所必须的信息系统的一个衡量准则。电子商务评估体系是对企业在电子交易平台上所具有的订单处理、帐务结算以及与工商税务等政府机关所建立的网络办公系统的评估项目。网络资源信息系统评估指标是针对企业在互联网上所能获取的资源和能力的评估。同时,作为物流企业需要对流动的物资进行有效监控,因此建立了的电子货物跟踪系统,包括与智能交通相对应GIS , GPS、射频技术系统、运载货物工具的信息系统,以及条码技术和射频技术为主,能够快速准确识别货物的识别系统的评估指标。
系统安全本身是对所有信息系统建设的一个内在要求。评估体系根据信息系统中数据处理、系统兼容性及其网络安全性等方面考虑划分成S6, S7,S8三个子体系。目前国际组织和我们国家对数据安全和认证,以及通信安全等方面都要有相对完善的准则,例如《信息技术软件产品评价质量特性及其使用指南》、《信息技术一软件包质量要求和测试》和《工具检测用软件评定准则》等,这些方法和准则在制定具体标准的时候都应该考虑到其中。
4评估方法
将物流企业信息化水平作为一项指标列人物流企业等级评价体系中去,而物流企业等级评价系统本身就是一项复杂的系统工程,况且对物流企业信息化水平评价模型研究甚少。评价中包含大量的不确定性因素和模糊性指标,这是因为评价指标的模糊性和难以量化性等客观原因,也有评价者自身的主观原因,例如性格、偏好、价值观念和认知程度等主观原因。为此,我们将模糊集合论的方法进行评估处理。图2是专家评审系统模型。
专家在评审的时候通过网络将评审选项送到数据处理中心去。同时,数据处理中心也接受到由系统安全检测设备对信息系统的评估结果后进行统计计算。针对不同时期的评估对评估项目的加权值是不一样的。例如当前根据现在信息技术发展情况我们把PG ={G1,G2,G3},Pg,为第一层加权值,同样还有Ps和Pu作为第二层和第三层加权值,其中对于Pu如果为定性衡量的值为{0, 1}如果为定量衡量的话取值在「0, 1]区间之间。同样建立专家评审结果的模糊评价矩阵:
6月,梁建章怒评陕西安康孕妇被强行引产事件,发表系列文章,五天内转发量逼近两万。梁呼吁各界人士重新认识在中国推行了三十余年的计划生育政策。认为人为的人口限制已威胁到经济良性发展。
三年来,梁建章一直致力于推动计划生育政策的调整。2010年,他自制纪录片《中国人可以多生吗?》;去年,学成归国成为北京大学国家发展研究院客座研究员;在安康事件爆发前两个月,他和北大社会学教授李建新合著出版《中国人太多了吗?》,在引言中,他写道:“历史留给我们的时间不多了!”
这个为自己的理想奔走疾呼、不遗余力的学者,在日常谈话中却判若两人:语速缓、语气轻、语调低沉——这种双重性或许更符合梁建章所担负的两种角色。在学者形象背后,他从未更改首次进入公众视野时的那个身份:携程网联合创始人、董事局主席。
假如你关注2003年的中国商界,亦无法错过34岁的梁建章。这年12月,创立四年的携程成为首个登陆纳斯达克的中国旅游企业,IPO当日股价涨88.56%,刷新纳斯达克三年来的首日涨幅纪录。当时,这位商界新秀正在倒时差,于熟睡中体验了“一夜暴富”。
对那个时代的中国商界来说,梁建章和他的合作伙伴的确创造了一个财富神话,2004年携程总营收增速94%,获85%毛利率和40%净利率。但更重要的是,他们创建了一种将传统酒店预订与IT相结合的商业模式,由此参演IT业的风起涌云。
2006年的携程已成为在线旅游市场当之无愧的“黑马”,该年总营业收入8.3亿元,同比增长49%——就在所创企业渐入佳境时,梁建章突然决定赴美读书,为同代企业家中独一无二的选择。
就在梁建章攻读博士学位的数年间,中国商界发生巨变。携程的注册用户在2011年已突破5千万,全年总营收5.9亿美元,其业务也从酒店预订延伸至包括机票、度假预订、商旅管理及旅游资讯在内的全方位旅行服务。但在规模接近顶峰的同时,携程也不可避免地遭遇瓶颈期。
2012年第一季度,携程净利率跌入20%以内,营收同比增长只有19%;5月,其股价三年来首次跌破20美元。更重要的威胁在于,由于携程业务日益多元,全线作战的方式导致竞争白热化。微博化的舆论氛围更无情面可留,“增长神话破灭”“错失团购良机”等评论不绝于耳……单纯的学院生活彻底终结了,这是企业家梁建章要面对的商业现实。
身兼学者和企业家双重身份,梁建章于2012年高调重返公众视野,他有能力同时演绎学界和商界的双重革新吗?
梁建章向来自信。
新起点
赴美攻读博士学位,对梁建章并非唐突之举。复旦大学少年班出身的梁建章,20岁便获得美国乔治亚理工学院硕士学位,在攻读计算机博士过程中觉得“做企业更有意思”,进入甲骨文公司的硅谷总部。突然改变当下状态,是梁建章挑战自我的惯用方式。
关键是做出选择的时间。2003年底,携程赴美上市之际,刚刚度过艰辛初创期,梁当时认为最大挑战莫过于“将携程做大10倍”。
尽管1999年携程获得来自IDG、软银、晨兴集团、兰花集团的两笔融资,但起步期却并未找到有效的盈利模式。在“烧钱”营销将携程逼到悬崖时,梁建章做出战略性调整:收购传统酒店预订公司现代运通,以酒店预订业务为盈利基点,嫁接到互联网。
坦白说,携程在2000年后的成长超出了梁建章预期。市场占比领先第二名艺龙近40个百分点,而“去哪儿”等网站当时刚起步,难成气候。日趋成熟稳定的内部架构和良好外部环境,使携程在在线旅游市场一枝独秀。
梁建章的个人工作也随之趋于常态。朝九晚五,鲜有加班;日常管理交给团队,只有关键的企业文化建设和人事制度安排才事必躬亲。即使不再长时间地深入参与,公司依然正常运转。同时,人称“携程四君子”的联合创始团队成员,都开始尝试新的探索:2002年,前携程总裁季琦创办如家连锁酒店,三年后,前首席财务官沈南鹏离开携程,加盟红杉资本。
梁建章的内心开始渴望一些“ 新东西”——“总觉得自己还能再干点什么,学点什么,研究点什么。”做投资?梁建章认为那无法使他获得深入参与公司建设的愉悦感;像季琦那样再度创业,去做一家超越携程的公司,又着实困难。于是,这位携程首席执行官又想起了从企业回到大学校园。
从2006年萌生退意,到次年读博,梁建章花了近大半年时间在美国游学。从哈佛、波士顿到麻省理工;社会学、经济学、心理学——这位曾经的甲骨文中国区咨询总监一路旁听下来,希望找到一个能结合其管理经验和多视角学术钻研的学科。
最终,梁建章将目光聚焦经济学。他认为这门学科研究内容与管理相关,研究方法与他多年思维习惯和理工科教育背景契合,加之兼具数学、社科、文化、历史等多领域知识,梁觉得“可以把很多知识串起来深入学习”。
大半年的游学期,不仅让梁建章选到心仪的研究方向,也让携程慢慢适应了梁退居幕后的日子。梁建章与现任CEO范敏平稳交接,携程高端旅游部营销总监华丽回忆说:“James(梁)关注战略布局,范总有丰富日常管理经验,恰当的人在恰当的职位,大家都很放心。”对于“公司老板突然跑去美国读博”这种奇遇,华丽笑说放到梁身上“再正常不过”——大家都觉得他非常适合做学术。
斯坦福欢迎你
当年,梁建章所申请的斯坦福经济学项目只有四个录取名额。从开始考核到最终确定录取,校方找梁建章交流过多次。斯坦福经济学博士的竞争环境和学习压力可窥一斑。
37岁入学的梁建章考试成绩常列前三,尤擅长基础模型和数学。不仅如此,由于他经历丰富,常帮助更年轻的学生分析未来的职业规划。在这个过程中,梁建章也对自己此前的创业经历做出深入思考。
在梁建章看来,企业经营时刻考验决策者的判断力,上要担负公司发展使命,下要考虑员工生计,做企业“像走钢丝”。相比之下,读书生活对他则是人生难得的惬意。
在斯坦福读书的日子,梁建章和家人住在离机场不远的一座小山坡上。他常常看着飞机在山间起降的景象,完成了许多关于企业和学术的思考。没课的时候,他会在家里等着上小学的儿子放学归来,一起学习或运动。
梁建章的人生轨迹却不知不觉地改变了。
原本,他博士论文的题目是关于大学生就业的经济学研究。这篇论文他在博士第三年已完成,但因感觉意犹未尽,他选择到芝加哥大学读博士后。在这两年中,梁建章师从1992年诺贝尔经济学奖得主加里·贝克尔,把研究方向聚焦于创新创业与人口。
对这个话题的关注根植于梁建章在携程的一线管理经验。在艰难时光中,梁思考过企业乃至一个国家的根本,正在于人才的数量和质量,“研究的时候发觉中国这计划生育政策很荒唐。”“中国千万不能以减少小孩为代价,来抵消日益增长的老年人口”,年轻人口在整个人口结构中的比例锐减,在梁建章看来,对一个国家的创新创业潜力有着难以预估的巨大隐患。现在,中国生育率低于1.5,意味着下一代人比上一代人少30%,“人口是负担”的担忧早已转化为“老龄化社会”的焦虑。
为了印证这种理论假设,梁建章开始了广泛的社会调研。印度和日本是梁常去的两个国家。拜访学者,找相关的企业高管做访谈,了解年轻人口的创新创业现状,在聊天中获得思路启发,再用已有数据建模,印证观点。与一般学者相比,梁建章的优势或许在于“找企业高管聊天会容易点”。
一向稍显腼腆的梁建章谈及学术时,会变得健谈起来。但读博期间,梁建章并未忘记携程,他与高管时有电话联系,暑假期间回国集中参加公司会议。学期与假期的自然分割,让梁建章在企业家和博士生这两重身份
之间,穿梭自如。同时,梁开始着力于寻求学术与商业最有效的粘合方式。
一方面,梁建章希望在有条件的情况下,先把学术成果在携程内部推广。他认为许多公司随着管理层相对固定化,可能会存在惯性思维的问题,晋升机制和言论通道常会闭塞。如何鼓励年轻人发声,并促进部门间沟通,是梁建章正在研究的课题。其中一个可能是,“由高层参与做一个创新委员会”。
另一方面,严格的学术思维训练,也使这位携程董事局主席在公司战略布局上更高瞻远瞩。“宏观经济搞得更清楚,对企业经营和投资都有帮助。”2008年金融危机时,携程进行了一些投资,比如对经济型酒店汉庭
和如家,回报都相当可观。
今年3月,携程正式对外推出的中国首个顶级旅游品牌“鸿鹄逸游”,其实始于2010年上半年,携程首次推出针对富豪消费群体的旅游产品,“环游世界60天”,报价50万。当时对该产品销路的质疑不止来自于外部,携程员工也担心“曲高喝寡”。谁知,十几个名额在开通订购专线的9分钟内全部售罄。去年续推“环游世界66天”报价66万元,则在30余秒内抢购一空。今年推出的101万元环游世界80天,价格和旅行天数均创新高,全部名额在17秒内就秒杀完毕。
良好的市场反响印证了梁建章和其他高管对高端旅游市场的预判。无论这个细分市场日后格局分散还是垄断,携程都要做这个市场的定义者和领导者。为此,携程与台湾易游网和香港永安旅行社开展战略合作,为顶级旅游市场设置了一个极高的准入门槛。
这一切是在2009年悄然部署的,恰是梁建章在美读博、远程参与公司管理的时期。“顶级旅游,虽然去的人不多,但是对公司品牌有非常大的影响力,值得一做”,回忆起当时的抉择,梁建章对本刊说。
“虽然很少有人能既做这个又做那个,但如果有条件,这样做真是蛮互补的。我的idea,人口与创新,一定要在企业做过,才有这个感觉;而学术中一些更加严谨的方法确实可以用到公司决策中”——对梁建章来说,在学术与商业的经验互补,是自我成长的必经之路。
理性与坚持
无论是求学,还是管理公司,梁建章都习惯先进行多元化的思考,做出尽可能准确的判断,之后在一个方向上不遗余力地“深入”下去。
携程网初创时,管理团队除了旅游也设想过金融、搜索,或京东那样的电子商务,“但分析以后,觉得做旅游比做其余的都优势更大,便没有做别的尝试”,梁建章回忆说。
在斯坦福读博初期,许多有趣的课题摆在面前,究竟选择哪一个兴趣点作为研究方向,着实花了梁建章一番心思。“选择的时候得经过考虑,你做得成什么,利用已有的优势去选”。对梁来说,经验是学术的起点,也是后者的归宿。接下来,则要靠坚持的力量。
《中国人太多了吗?》的合著者、北京大学社会学系教授李建新,被梁建章坚持的勇气吸引。“这个(计划生育)问题,能身体力行去号召的学者,并不多”,作为中国人口学界罕见的公开反对计生国策的学者,李建新没有想到会与一位企业家出身的经济学者殊途同归。合著过程堪称顺利,一年书稿便基本成型:李从社会、婚姻家庭和综合国力等角度综合论证,梁从经济、资源、创新创业等角度深入阐述。在经历了改书名、删内容等多番磨练后,历时半年,这本新书终于问世,难掩锋芒。
大多数时候,梁建章都希望以理性融合各种不同的经验和思考。在具体的学业或管理工作中,这也成为梁极为鲜明的个人特色。
携程副总裁孙茂华记得,2003年SARS期间,许多公司纷纷裁员节省开支,但梁建章坚决不裁员。他当时做了一番分析: SARS先发烧后传染,而非先传染后发烧。只要政府采取有效隔离,很快就会被有效控制。
一整天都没有业务,日复一日地等待,有些部门上半天班,发60%的工资;有些技术和服务部门,开发程序或者做培训——SARS风波并未持续很久,裁员的公司重新营业便急迫招聘,而携程很快回复正轨,年底如期上市。
2012年,携程或许比以前更需要梁建章的理性与坚持。
如今的携程面临了诸多挑战,除了业绩下滑,股价下跌,还包括被高度竞争中被拖入价格战。梁建章坚信,中国人均旅游投资在不远的未来会超过人均电商消费,在线旅游收入仍是电子商务中的翘楚。这个过程定会催生一到两个伟大的企业。携程致力于此。“不要只看外面有多少种新模式,自己内部的事可以改进的还有很多,先修内功”,梁建章的这句话给孙茂华很深印象。孙茂华自2000年加入携程,经历了期间的盛衰。
只是,携程的规模已是当年的数倍,挑战也成几何级数增长。
分类号:TP182
引用格式:于彤. 中医药知识工程的理论体系构建和关键技术分析[J/OL]. 知识管理论坛, 2016, 1(5): 336-343[引用日期]. http:///p/1/56/.
1 引言
中医药是中华民族的文化瑰宝,无论作为文化遗产还是作为医学资源,都理应得到保护和传承。对中医药理论知识与实践经验的总结、诠释与研究,是中医药传承的一项核心任务。知识工程(knowledge engineering)为中医药知识的组织、存储、处理和利用提供了必要的理论、方法和工具,在中医药领域具有广阔的应用前景[1-2]。
知识工程是随着信息革命而出现的一种新兴的知识管理和知识创造手段。知识工程源于人工智能领域,其最初的目标是构建基于知识的系统(或称专家系统)[1,3]。为了构建基于知识的系统,需要获取足够的专业知识,并将这些知识表示为计算机可以理解的形式,以支持自动推理和问题求解[3]。因此,知识获取、知识表示以及知识运用成为知识工程领域研究的主要问题。随着知识工程在知识管理中应用的不断深入,知识工程的研究范畴从知识库和专家系统,扩展到自由文本、半结构性数据和多媒体内容的处理。时至今日,知识工程已发展为涉及知识表示与推理[4]、语义网[5-6]和数据挖掘[7]等多个技术领域的交叉学科,在电子科学、电子商务和电子政务等许多领域得到了广泛的应用。
知识工程在中医药领域的应用起源于20世纪70年代。当代著名中医学家关幼波与计算机专家合作,于1979年研制了首个实用的中医专家系统DD中医关幼波诊疗肝病的计算机系统,它在临床应用中取得良好效果[8]。此后,全国兴起了一股中医专家系统研发与应用的热潮[9],知识工程作为专家系统的支撑技术也得到了中医界的重视。近30年来,中医药工作者采用知识工程方法对中医药领域的知识遗产进行广泛采集和永久保存,建成了大量的知识资源和智能系统,为中医药知识创新提供了有力的支持[10]。为此,本文对中医药知识工程进行系统总结和综合论述,分析存在的问题和发展趋势,为相关领域学者和知识工程师提供参考。
2 中医药知识工程的概念
中医药知识工程是指将中医药知识整合存入计算机系统,以使计算机能够利用这些知识来解决中医药领域复杂问题的工程学科[1-2]。旨在实现中医药知识的“计算机化”,并将计算机技术融入中医药知识的收集、挖掘、整理、更新、传播及转化等环节,从而丰富和完善中医药知识体系,提升中医信息系统的智能水平。之所以称之为一项“工程”,是因为这项工作涉及系统性的方法、大规模的协作、严密的流程以及复杂的产品(本体、知识库、专家系统等),这些都是系统工程的显著特征。
中医药知识来自中医专家的头脑,以及书籍、论文、病案等各种专业资料。为使中医药知识“计算机化”,需要从各种知识源中广泛获取知识,将知识进行编码并录入计算机系统;还要按照一定的结构和方案对知识进行组织和存储;最终实现专家系统、知识发现等各种计算机应用。中医药知识工程的关键环节,包括中医药知识表示方法的研究、中医药领域知识的获取、中医药知识库系统的构建、中医药知识发现研究以及中医药智能系统(如临床决策支持系统)的研发等。
中医药知识工程是中医药与信息科学(包括人工智能)相结合的产物,是多学科交叉的研究领域。它也是中医药知识管理的一项关键支撑技术,有助于实现中医药知识管理与服务模式的创新。
3 中医药知识工程的意义
中医药知识工程有利于开拓临床思路,支持临床决策,研究中医理论,丰富教学内容,指导实验研究,促进中医药知识传承与创新[1-2]。具体而言,中医药知识工程可在以下三大方面发挥积极作用。
3.1 梳理知识体系,保护知识遗产
中医药知识遗产具有很高的科学和文化价值,但其知识体系尚存在模糊笼统之处。只有对中医药知识遗产进行系统梳理,去芜存菁,才能凸显中医药知识的精华之处。使用语义网络、描述逻辑等知识表示方法,能够精确描述中医思维逻辑,建立数字化的中医药知识体系,这对中医药学科发展具有十分重要的意义。
3.2 促进知识传承,加速人才培养
中医传承的核心问题是如何将中医名家的个人经验转化成普遍的知识,从而培养更多经验丰富的名医,提升中医界的整体水平。中医药知识工程旨在系统总结前人经验,将历代医家的智慧结晶转化为全面、系统的领域知识库,研发中医辅助学习系统,以提升初学者的学习效率,促M专业医师之间的交流,从而突破中医传承的瓶颈。
3.3 发现新知识,促进学科发展
通过实施中医药知识工程,可对中医药信息化过程中积累的海量数据进行分析与挖掘,建立跨越年代、流派、学说和病证的整体性知识模型,从而加深我们对中医辨证论治规律的认识,使中医药领域两千多年来积累的知识遗产得到有效整理和挖掘。
4 中医药知识工程的理论体系构建
中医药知识工程研究的核心任务是利用信息科学的理论和方法,对中医药知识体系的全部内容进行系统梳理和准确表达。可以说,中医药知识工程所研究和处理的核心对象就是中医药知识体系。两千多年以前的《黄帝内经》奠定了中医学的理论基础;经过两千年的发展,至今已经形成了一个以中国古代哲学为基础,以中医药学理论为架构,以临床实践经验为主体的知识体系[2]。
中医药知识体系有其自身特点和复杂性,对知识工程技术产生了独特的需求。中医特色的思想方法、含义模糊的中医概念以及中医专家的隐性知识都对知识表达、知识获取和知识利用产生重大影响和制约。因此,面向西医等其他领域的知识工程方法并不完全适用于中医药领域。中医药知识工程领域迫切需要一套符合自身特点的理论和方法,从而有效处理中医药知识的模糊性和复杂性,支持标准化知识体系的建设。因此,有必要对中医药知识工程的理论思想进行深入研究和系统总结,从而指导中医药知识的建模、获取、组织、存储、共享与服务等一系列工程实践活动。建立中医药知识工程的理论体系是一项繁重、长期的工作。本文主要围绕思维模拟、知识表示、知识获取、知识发现等4个主要方面,对中医药知识工程的理论思想、研究热点以及核心概念意涵进行简要论述,为今后的理论研究工作提供参考。
4.1 中医思维模拟研究
中医思维模拟是指在对中医思维进行深入分析的基础上,用计算机系统对中医的思维过程进行模拟,从而完成计算机辅助诊疗等复杂任务。中医深受中华传统哲学和文化的影响,产生了独特的思想方法和思维模式,包括“天人合一”“取象比类”以及“辨证论治”等等。中医药知识体系是中医思S的直接产物。开展中医药知识工程研究,首先需要深入理解中医的核心思维模式。
中医思维是一个复杂的思维过程,具有形象性、模糊性和整体性等特点,需要针对这些特点提出创新性的思维模拟方法。例如,“取象比类”是贯穿中医知识体系的思维模式,与中医其他的思想方法共同构成了中医“象思维”。在中医药知识工程领域,需要追溯中医“象思维”的思想源流,并采用认知语言学等学科方法对其进行分析,据此提出与之相适应的计算机模拟方法[11]。又如,中医辨证思维是一个涉及分析、综合、推理、归类、鉴别的复杂思维过程,需要将中医辨证理论与实际的病案结合起来进行分析,总结中医辨证思维的规律,从而建立合理、准确的中医辨证计算模型[12]。思维模拟研究在中医临床诊疗等领域具有潜在的应用价值。但首先需要在临床实践中对计算机建立的中医思维模型加以检验,以验证其准确性和实用性。
4.2 中医药知识表示研究
知识表示(knowledge representation)是指通过某种方案、数据格式或语言,将领域知识表达为计算机可直接处理的数据。知识表示处于知识工程的中心地位,它既是知识获取的基础,又是知识存储和运用的前提。为实现基于知识的系统,必须将领域知识表示为某种计算机可处理的形式,并录入到计算机系统中去,存储于知识库之中。知识表示的合理性直接决定知识处理的效率,对知识获取和应用的效果也有很大的影响。
广义上,知识表示的目标就是实现人类知识的显性化、机读化和结构化,从而支持自动推理,知识检索和知识发现等应用。知识表示方法有很多种,包括状态空间、谓词逻辑、框架、产生式、语义网络、与或图、Petri网等。这些方法适用于表示不同类型的知识,从而被用于各种不同的应用领域。如何选取或提出合理的知识表示方法,用最恰当的形式来表示中医证候、中药、针灸、温病、养生等各方面的知识,是中医药知识表示研究的重点问题。
目前,知识工程领域的一种主流观点是将建立一个知识系统的过程视为一种“建模”活动。知识建模(knowledge modeling)是指采用某种计算机方法构建一个“知识模型”,它在特定领域中能像专家那样解决问题。其本质是通过模型来表示知识,因此属于一种形式化的知识表示方法。近年来,采用本体等技术建立知识模型,已成为中医药知识分析的一种常用手段,也是中医药知识表示研究的一个主要方向[13-14]。
4.3 中医药知识获取研究
知识获取(knowledge acquisition)是指从专门的知识源中全面、系统地获取知识,并将其转换为某种计算机可处理的形式(如程序、规则、本体等)[15-16]。这里的知识源可以是人类专家,也可以是案例、教科书、论文、数据库、网站等知识载体。一般情况下,知识获取需要由“知识工程师(knowledge engineer)”与领域专家配合,共同来完成工作。知识工程师的任务是帮助领域专家激活隐性知识,完成知识的转换,建立基于知识的系统。
知识工程的一个典型场景是:一组知识工程师找到并访问特定领域的专家,听取专家的介绍,记录专家的经验性知识并将其表达为计算机可处理的形式,存入知识库中。将知识库与推理引擎结合起来,也就构成了一个新的专家系统。知识获取也必然涉及知识验证的问题:知识工程师需要对知识进行评审和验证,以确保知识的准确性。
知识获取是任何知识管理和知识工程的基础性工作。在中医药领域,知名老中医的经验和古籍文献占有重要地位,是知识获取的重点对象。一方面,知名老中医知识和经验的获取,是中医药知识获取的重要环节。它属于专家认知获取的范畴,也就是将专家头脑中隐含的知识转换为某种形式的显性知识的过程。另一方面,中医药领域产生了海量的古籍文献。古籍数字化对于中医药信息的快捷传播和永久保存具有重要意义。如何从数字化的古籍文本中有效提取中医药知识,则是知识工程所关注的问题。无论是通过专家访谈等方法获取领域专家的经验和实践方法,还是查阅大量文献搜集领域知识,都是复杂的、繁琐的工作,且多数情况下只能通过人工方法完成。因此,知识获取是中医药知识工程领域中面临的关键瓶颈[16]。如何突破“知识获取”瓶颈,也就成为知识工程研究的一个热点问题。
4.4 中医药知识运用研究
知识运用是指将领域知识库以及机器推理、知识发现等技术运用于科研、临床、教学等领域,辅助中医药工作者解决复杂问题并提升工作效率。知识工程在中医药领域的具体应用包括:四诊客观化研究、中医辨证规范化研究、方剂量效关系分析、中药新药发现、中医临床诊疗、中医教学等等。为使知识工程的成果产生社会效益和经济效益,促进中医药知识创新和学科发展,必须研究如何运用知识的问题。知识工程学不能逐一研究具体应用的过程或方法,而是研究在各种应用中都可能用到的共性方法,包括知识推理、知识搜索、知识发现、知识服务等。
传统上知识运用研究的一个中心问题是如何构建专家系y。中医专家系统是指用计算机人工智能技术来模拟著名老中医诊疗病人的临床经验,从而使该软件具有专家诊治病人的水平[8]。如前文所述,随着“中医关幼波诊疗肝病的计算机系统”的出现,全国兴起了一股研发中医专家系统的热潮。据陆志平等[9] 估计,中医专家系统已不下300个,并遍及中医的内、外、妇、儿、五官以及针灸等各科。专家系统能对中医四诊信息进行处理和解释,并产生临床推荐意见和临床警示,可用于辅助职业医师进行临床决策。该系统的构建涉及知识获取、机器学习、知识推理、知识搜索等多方面的理论和方法学研究。
自20世纪90年代开始,随着数据库技术的普及以及数据库内容的不断积累,使业务人员产生了从数据库中挖掘知识的愿望。为此,学者们将数据库技术与人工智能、统计学、机器学习等传统技术相互融合,产生了知识发现这一交叉学科[17]。知识发现(knowledge discovery in database,KDD),可被理解为“数据库中的知识发现”。近年来,中医团体探索将各种KDD方法应用于中医药领域。KDD被用于研究方剂配伍规律[18],辅助中医开具中药处方[19],解释中医证候的本质[20-21],以及辅助基于中医药的新药研发[22],都取得了良好的效果。KDD作为中医药知识分析和科研创新的一种新方法,也成为中医药知识运用研究的一个热点。
5 中医药知识工程的关键技术分析
中医药知识工程将本体(ontology)、文本挖掘(text mining)、语义网(semantic Web)等多种信息技术与中医药领域知识相结合,以促进中医药知识的创造、管理和运用。在下文中,围绕知识建模、知识获取、知识存储、知识发现等4个主要方面,对中医药知识工程中涉及的关键技术进行具体分析。
5.1 中医药知识建模技术
知识建模是将领域知识表达为计算机可处理模型(即知识模型)的过程,它是知识工程的基础。中医药知识体系与中华传统文化息息相关,具有鲜明的文化和语言特色,这决定了中医药知识建模的独特性。历代中医普遍采用“取向比类”等形象思维方法,中医药概念之间的关系错综复杂,中医文献中包含大量古汉语成分,这些因素导致中医药知识难于精确描述和定量刻画。需要对知识建模的方法和技术进行创新,并研究出一套符合中医药特点的知识建模框架,以支持中医药知识工程的实施以及知识服务平台的建设。
知识建模技术有很多种,技术人员所熟知的统一建模语言(UML)和实体关系模型(ER模型)都属于知识模型。本体是1990年代出现的知识建模方法,其核心任务是对领域概念体系进行系统梳理和准确表 达[13]。本体在复杂知识建模和自动推理等方面体现出技术优势,因此在生物医学领域逐渐成为主流技术。
近年来,中医药知识工程的一个热点是通过构建中医药领域本体,对中医药理论和知识体系进行辨认、梳理、澄清和永久保真处理。中医团体已经开展了基于本体的中医药知识建模方法研究,并实际构建了一系列领域本体[14] 。例如,中国中医科学院中医药信息研究所研制了“中医药学语言系统(Traditional Chinese Medicine Language System,TCMLS)”这一大型中医药领域本体[23] 。TCMLS对中医药领域的概念和术语系统进行了完整的表达,在中医药学研究中得到广泛应用。此外,本体建模的对象还包括阴阳、五行、脏腑、证候、中药、方剂等诸多领域。这些本体最终可被整合为一个完整的中医药领域本体,支持知识获取、知识发现、知识服务等中医药知识工程的后续工作。实践表明,本体可有效捕捉中医药领域的概念体系,并以概念为核心将中医药知识体系准确地表达出来,能够胜任中医药领域知识建模的任务。
5.2 中医药知识获取技术
如上文所述,中医药知识获取是一项复杂的工作,被公认为知识处理过程中的一个瓶颈,严重限制了知识工程和知识系统的发展。近年来,学者们主要试图通过“集体智能”和“机器智能”这两条路径来突破中医药领域的知识获取瓶颈。
“集体智能”是指组织大量领域专家一起编辑知识库,从而实现专家知识的共享与融合。实现集体智慧的关键在于建立合理的交流、协作和激励机制。随着互联网的迅速推广,中医界开始利用互联网技术建立各种面向中医药领域的知识工程平台,进行跨学科、跨组织、跨地域的协作式知识加工,开展了一系列大规模的知识工程项目,建成了一系列术语系统、领域本体、文献库、数据库和知识库。例如,中国中医科学院中医药信息研究所建立了基于互联网的“中医药虚拟研究院”,部署了一个协同知识工程平台,支持全国40余家机构,近300人进行协同工作[24-25]。在该系统的直接支持下,研制了“中医药学语言系统”[23]等一系列大型知识系统。实践表明,基于互联网的虚拟环境能将不同机构、不同地区的研究人员组织起来,有效解决资金分散、缺乏协调、研发能力不足等问题,实现知识工程的规模化[25]。
“机器智能”是指研发文本挖掘技术,使机器能够直接从文献等知识载体中提取结构性知识。文本挖掘在中医药领域已得到成功应用,能够显著提升知识库加工的效率[26]。但与生物医学领域的大量研究工作[27]相比,文本挖掘在中医药领域的应用仍处于早期探索阶段。需要针对中医药文献的特点,进一步研发实用的挖掘方法,提升挖掘结果的完整性和准确性,从而深度挖掘中医药文献中蕴含的知识。
5.3 中医药知识存储技术
知识存储(knowledge storage)特指在计算机系统中安全、可靠、有序地存储知识资源,以支持知识管理和知识工程应用。知识库是实现知识存储的重要支撑工具,也是知识工程的重中之重。知识库一般是针对特定领域以及问题求解而建立的,对领域知识进行全面收集和系统整理,进而对知识进行组织、分类和保存,以支持知识检索和查询。
构建中医知识库系统,是指用人工智能技术把中医药理论和专家的经验按规范化、标准化的格式组建成知识库[8]。知识库一般具有形式化、结构化、易查询、易操作等特点,能支持机器推理。传统上知识库主要是指采用谓词逻辑、框架等知识表示方法,在计算机系统中表示和存储的知识集合。但在中医药信息化实践中,人们也把文献库、数据库、本体等多种形式的知识载体统称为“知识库”。它们都能起到知识存储的作用,与自然语言处理、机器学习等方法相结合后仍可支持智能应用,因此称之为广义的知识库也不为过。
近年来,中医药知识库建设得到迅猛发展,在中医人体、中医疾病、中医证候、中医医案、中药、中医养生等方面都出现了知识库系统[28]。中医药知识库在中医药信息化中扮演着核心的角色,在文献整理、知识可视化、知识共享、临床诊疗、教学、研究等诸多方面取得实际应用,为中医药知识遗产的数字化保存和深度挖掘提供了创新性的手段。
5.4 中医药知识发现技术
知识发现是从数据中获取有效、新颖、有潜在应用价值和最终可理解模式的非平凡过程[17]。知识发现是人工智能、数据库、统计学、机器学习等多种技术相互交叉产物。知识发现在20世纪90年代提出之后,获得了广泛关注和迅速发展,产生了高频集、关联分析、分类、预测、聚类、孤立点分析、时序/序列分析等一系列行之有效的方法,还出现了Weka、Rapidminer等较为成熟的开源软件。这为知识发现技术在中医药领域的应用创造了条件。
中医在数千年的临床实践与理论研究中积累了海量的数据、文献和知识。如何利用这些宝贵资源就成了发展中医药必须面对的一个问题。而KDD所擅长的正是从海量的数据中寻找有意义的模式和知识,是分析中医药海量数据所需的理想技术手段。近年来,中医团体已开展了将频繁模式发现、关联规则发现、聚类分析、复杂网络分析等多种KDD方法引入中医药领域的若干探索。例如,使用关联规则发现等方法对方剂数据进行分析,来揭示方剂配伍规律[18];通过知识发现方法辅助中医开具中药处方[19]以及中药新药研发[22];通过基于隐结构模型的机器学习方法来揭示中医证候的本质[21];使用文本挖掘方法从海量文献中挖掘新颖知识,构建并分析中医药复杂网络[20]。这些工作表明,面对中医药领域的海量数据,采用KDD技术进行有效的知识发现既是必要的,也是可行的[29]。
过20多年的发展,中医药知识发现的方法和技术已进入相对成熟期,针对中医药领域的各种问题都产生了一系列行之有效的方法。但成熟并不意味着完善,面对中医药数据描述多样化、数据仍不完备的特点,仍然需要对现有的KDD技术进行改进和发展,以满足中医药科学研究和知识创新的需要。
6 中医药知识工程的发展趋势
近年来,中医药知识工程实践取得长足发展,成功建立了大量的知识资源。但中医药知识资源往往服务于特定的医疗和研究机构,彼此之间异质、异构,难以实现集成与共享,形成严重的“知识孤岛”现象,成为长期困扰中医药知识工程领域的技术难题。中医药与西医等相关领域的知识资源也难以实现有效的关联,阻碍了跨学科研究的开展。
为此,学者们[6,30]提出使用语义网作为中医药数据表示标准,实现中医药内部的知识整合以及中西医领域的知识互联,从根本上解决“知识孤岛”问题。2001年,万维网发明人(T.B. Lee)在《科学美国人》上正式提出了语义网的构想,认为它将是一个机器可以理解的开放性信息空间[5]。语义网技术的核心优势在于将数据结构和存储方式各异的数据转换为统一格式并重新,从而实现数据资源的交换与集成。语义网为实现跨领域知识关联提供了理想的技术平台,有助于构建面向特定领域的大规模知识图谱,进而实现各领域知识图谱的关联与融合。语义网最终将发展为一个全球性的知识图谱,提供全面、智能的知识检索服务,促进知识共享和人机协作。
可基于语义网技术建立中医药知识图谱,从而实现中医疾病、中药、方剂、针灸、医案等中医药各门类知识资源的集成[30-31]。TCMLS作为一个包含10余万个中医概念以及100余万个语义关系的大型语义网络,为构建中医药知识图谱提供了相对完整的框架。鉴于此,于彤等[31]提出以中医药学语言系统为骨架,将中医药领域现有的术语资源和数据库资源融合起来,构成大规模知识图谱,并实现基于知识图谱的知识检索、知识展示和知识服务等功能。在未来,可进一步扩充中医药知识图谱,通过语义关系表达中医和西医之间的结合点,从而实现这两个领域的知识图谱的关联和融合。这套方法将使中医药知识资源接入全球互联的知识图谱之中,支持各种面向结合医学的知识共享、决策支持和知识发现应用,在中西医结合医学中发挥更大的作用和影响力。
6 小结
中医药根植于中华文化,源于中国传统哲学,是中华民族非常宝贵的知识遗产。中医药知识工程成为中医药知识遗产保护和知识创造的一种新模式,能有效推动群体性的知识创新活动,加速知识转化过程,促进知识的传播。
中医药经过数千年的发展,形成了一座伟大的知识宝库,这决定了中医药知识工程的巨大价值和艰巨性。中医药领域知识体系相当复杂,对知识工程技术提出了独特的需求。在中医药领域实施知识工程是一项极其复杂且具有挑战性的工作,其中还有很多尚未解决的科学问题和技术难题,需要进行长期的研究。展望未来,中医药知识工程必将成为中医药信息学学科体系的重要组成部分,也将在中医药科学研究和临床实践中发挥越来越重要的作用。
参考文献:
[1] 任廷革, 刘晓峰, 李庆业, 等. 从复方分析模型的研究看中医知识工程的意义[J]. 中国中医药信息杂志, 1999, 6(3): 12-13.
[2] 杨斌. 中医知识工程的建立及其意义[J]. 世界科学技术――中医药现代化, 2000, 2(4): 28-30.
[3] Schreiber G, AKKERMANS H, Anjewierden A, et al. Knowledge engineering and management: the CommonKADS methodology [M]. 1st ed. Cambridge, MA: The MIT Press, 2000.
[4] Brachman R, Levesque H. Knowledge representation and reasoning [M].San Francisco:Morgan Kaufmann Publishers Inc., 2004.
[5] Berners-Lee T, HENDLER J, Lassila O. The semantic Web [J]. Scientific American, 2001, 284(5): 28-37.
[6] 于彤, 崔蒙, 李敬华. 语义Web在中医药领域的应用研究综述[J]. 世界中医药, 2013, 8(1): 107-109.
[7] Fayyad U, PIATETSKY-Shapiro G, Smyth P. From data mining to knowledge discovery in databases[J]. AI magazine, 1996, 17(3): 37-54.
[8] 马斌荣. 中医专家系统与中医知识库[M]. 北京: 北京出版社, 1997.
[9] 陆志平, 李媛媛, 魏方方, 等. 人工智能、专家系统与中医专家系统[J]. 医学信息, 2004, 17(8): 458-459.
[10] 孙燕. 中医知识工程研究进展分析[M]. 中国中医药信息杂志, 2010, 17(12): 5-6.
[11] 于彤, 陈华钧, 顾拢 等. 中医象思维的OWL语义建模[J]. 中国数字医学, 2013, 8(4): 29-33.
[12] 于彤, 崔蒙, 吴朝晖, 等. 基于语义Web的中医临床知识建模[J]. 中国数字医学, 2013, 8(11):81-85.
[13] Gruber T R. A translation approach to portable ontology specifications[J]. Knowledge acquisition, 1993, 5(2): 199-220.
[14] 李兵, 裘俭, 张华敏, 等. 中医药领域本体研究概述[J]. 中国中医药信息杂志, 2010, 17(3):100-101,106.
[15] 路耀华. 思维模拟与知识工程[M]. 北京: 清华大学出版社, 1997.
[16] 陈瑜. 试论中医药领域的知识获取[J]. 医学信息学杂志, 2013, 34(3): 89-92.
[17] FAN J, LI D. An overview of data mining and knowledge discovery[J]. Journal of computer science and technology, 1998, 13(4): 348-368.
[18] 李文林, 段金廒, 赵国平,等. 方剂配伍规律数据挖掘的研究现状及思考[J]. 中国中医药信息杂志, 2008, 15(10):92-94.
[19] QIAO S, TANG C, JIN H, et al. KISTCM: knowledge discovery system for traditional Chinese medicine[J]. Applied intelligence, 2010, 32(3):346-363.
[20] ZHOU X, LIU B, WU Z, et al. Integrative mining of traditional Chinese medicine literature and MEDLINE for functional gene networks [J]. Artificial intelligence in medicine, 2007, 41(2):87-104.
[21] ZHANG N, YUAN S, CHEN T, et al. Latent tree models and diagnosis in traditional Chinese medicine[J]. Artificial intelligence in medicine, 2008, 42(3):229-245.
[22] 雷蕾, 慧敏, 崔蒙, 等. 中医药化学辅助研发系统的建设[J]. 中国中医药信息杂志, 2008, 15(8): 100-101.
[23] 于彤, 贾李蓉, 刘静, 等. 中医药学语言系统研究综述[J]. 中国中医药图书情报杂志, 2015, 39(6): 56-60.
[24] 崔蒙, 谢琪, 尹爱宁, 等. 中医药信息数字化虚拟研究院建设模式研究[J]. 上海中医药大学学报, 2008, 23(3):5-8.
[25] 尹爱宁, 崔蒙, 范为宇, 等. 中医药虚拟研究院[J]. 国际中医中药杂志, 2006, 28(3): 141-143.
[26] ZHOU X, PENG Y, LIU B. Text mining for traditional Chinese medical knowledge discovery: a survey[J]. Journal of biomedical informatics, 2010, 43(4): 650-660.
[27] Rebholzschuhmann D, OELLRICH A, Hoehndorf R. Text-mining solutions for biomedical research: enabling integrative biology[J]. Nature reviews genetics, 2012, 13(12): 829-39.
[28] 于彤, 钏叮 李敬华. 中医药知识库系统研究进展综述[J]. 中国医学创新, 2014, 11(18): 142-144.
[29] 吴朝晖, 封毅. 数据库中知识发现在中医药领域的若干探索(Ⅰ)[J]. 中国中医药信息杂志, 2005, 12(10): 93-95.
[30] CHEUNG K, CHEN H. Semantic Web for data harmonization in Chinese medicine [J]. Chinese Medicine, 2010, 5(1):1-5.
[31] 于彤, 刘静, 贾李蓉, 等. 大型中医药知识图谱构建研究[J]. 中国数字医学, 2015, 10(3): 80-82.
Knowledge Engineering for Traditional Chinese Medicine: A Review of Theoretical System and Key Technologies
Yu Tong
Information Institute of Traditional Chinese Medicine, China Academy of Chinese Medical Sciences,
系统的核心是入库、库存和出库三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成入库或出库操作时系统会自动地完成库存的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。
系统采用Microsoft Office中的Access 2000来设计数据库,并使用当前优秀的开发工具—Delphi 6.0 ,它有着最为灵活的数据库结构,对数据库应用有着良好的支持。
论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。
关键字:数据库,SQL语言,Delph 6,数据库组件,仓库管理
目 录
第一章 引言 ……………………………………………………………………………1
1.1 课题来源 ……………………………………………………………………1
1.2 开发工具的选择 ……………………………………………………………2
1.3 所做的主要工作 ……………………………………………………………3
第二章 数据库概论 ……………………………………………………………………4
2.1 数据库的发展 ………………………………………………………………4
2.1.1 数据库的发展 …………………………………………………………4
2.1.2 数据库阶段的特点 ……………………………………………………5
2.1.3 数据库技术 ……………………………………………………………6
2.2 数据库理论基础 ……………………………………………………………7
2.2.1 数据库模型 ……………………………………………………………7
2.2.2 数据库体系结构
……………………………………………………10
2.2.3 数据的独立性 ………………………………………………………11
2.2.4 范式 …………………………………………………………………11
2.3 SQL语言基础 ……………………………………………………………13
2.3.1 SQL简介 ……………………………………………………………13
2.3.2 SQL查询
……………………………………………………………13
2.3.3 SQL数据更新
………………………………………………………14
第三章数据库开发工具 ……………………………………………………………16
3.1 Delphi 6.0 简介 ……………………………………………………………16
3.2 Delphi 6.0 控件 ……………………………………………………………17
3.2.1 ADO数据访问组件 …………………………………………………17
3.2.2 数据控制类DataControl
……………………………………………18
3.2.3 数据访问类DataAccess
……………………………………………18
3.2.4 SQL语言在Delphi中的应用
………………………………………19
3.3 Access 简介
………………………………………………………………21
第四章 系统总体设计 ………………………………………………………………23
4.1 系统需求分析
……………………………………………………………23
4.2 系统概要设计
……………………………………………………………25
4.2.1 系统结构设计
………………………………………………………25
4.2.2 数据库设计
…………………………………………………………27
4.2.2.1 ER图设计 ……………………………………………………27
4.2.2.2 数据库表格设计………………………………………………29
4.3系统详细设计………………………………………………………………34
第五章 系统应用程序设计 …………………………………………………………37
5.1 系统窗体模块组成…………………………………………………………37
5.2 数据模块窗体设置…………………………………………………………38
5.3 主窗体功能模块的实现……………………………………………………39
5.4 入库、出库窗体模块的实现………………………………………………43
5.5 查询功能的实现……………………………………………………………51
5.6 系统登陆窗体模块的实现…………………………………………………52
5.7 用户管理功能的实现………………………………………………………54
5.7.1 用户管理主窗体 ……………………………………………………54
5.7.2 密码修改窗体模块的实现
…………………………………………54
5.7.3 用户注册窗体模块的实现
…………………………………………55
5.7.4 用户注销窗体模块的实现
…………………………………………57
结束语 …………………………………………………………………………………59
致谢 ……………………………………………………………………………………60
参考文献 ………………………………………………………………………………61
第一章
引 言
§1.1 课题来源
随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择。与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程。随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题。
在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力。采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和社会效益。主要体现在:
极大提高了仓库工作人员的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端。
基于仓库管理的全面自动化,可以减少入库管理、出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入。
仓库的管理的操作自动化和信息的电子化,全面提高了仓库的管理水平。
随着我国改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要。
入库、库存、出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在中国大部分企业的管理中还是难以实现的。所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题。图书仓库管理的核心是入库、库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分。另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的地一些信息,使得整个系统更加完整,更加实用。
通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值。
§1.2 开发工具的选择
自Java诞生以来,随着Internet技术的普及和应用需求的变化,以第四代语言为主的应用开发产品发生了较大的变化,它们不仅已成为人们开发应用的开发工具,而且很多产品已发展成为一种强有力的应用开发环境。这些新型的开发工具通常以一种集成软件包的形式提供给开发人员,被称为Studio(工作室)或Suite(程序组)。例如,微软的Visual Studio 6.0,Borland公司的Delphi 6.0等数据库辅助开发工具。
现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有:
Microsoft公司的Visual Basic 6.0版
Microsoft公司的Visual C++6.0版
Borland公司的Delphi 6.0版
在目前市场上这些众多的程序开发工具中,有些强调程语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用;相反,如果只强调程语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间。
而Delphi是一个非常理想选择。Delphi 6 是操作系统中快速应用开发环境的最新版本。它也是当前Windows平台上第一个全面支持最新Web服务的快速开发工具。无论是企业级用户,还是个人开发者,都能够利用Delphi 6 轻松、快捷地构建新一代电子商务应用。Delphi 6 是惟一支持所有新出现的工业标准的RAD环境,包括XML(扩展标记语言)/XSL(可扩展样式语言),SOAP(简单对象存取协议)和WSDL(Web服务器描述语言)等。
Delphi 6 是可视化的快速应用程序开发语言,它提供了可视化的集成开发环境,这一环境为应用程序设计人员提供了一系列灵活而先进的工具,可以广泛地用于种类应用程序设计。在Delphi 6 的集成开发环境中,用户可以设计程序代码、运行程序、进行程序错误的调试等,可视化的开发方法降低了应用程序开发的难度。Delphi的基础编程语言是具有面向对象特性的Pascal语言,即Object Pascal 。Object Pascal具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了Pascal语言中,使这种基础语言有了新的发展空间。
使用Delphi 6.0 ,我们几乎可以作任何事情,还可以撰写种各种类型的应用程序,动态链接库(DLL)、CON、或CORBA对象,CGI/ISAPI程序,Microsoft Back Office应用程序。程序的规模小到简单的个人数据库应用,大到复杂的企业的多层次分布式系统,都可以使用Delphi进行开发,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。尤其是Delphi对数据库应用的强大支持,大大提高了数据库应用软件开发的效率,缩短了开发周期,深受广大数据库应用程序设计人员的喜爱。Delphi为数据库应用开发人员提供了丰富的数据库开发组件,使数据库应用开发功能更强大,控制更灵活,编译后的程序运行速度更快。
§1.3 本文所做工作
引言部分介绍了本系统的课题来源以及对数据库开发工具的选择。
第二章介绍了数据库的发展,关系数据库,数据库体系结构,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫。
第三章系统介绍了Delphi 6.0及其部分控件,SQL语言在Delphi 6.0中的应用,以及Access等。
第四章是本文的主体,按照软件工程的要求,从需求分析开始,经过概要设计最后到详细设计,完成对整个系统的设计。
第五章根据第四章的设计结果利用Access 2000和Delphi 6.0进行了具体的窗体和应用程序设计。
总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向
转贴于 第二章
数据库概论
§2.1
数据库的发展
数据库处理在信息系统的研究中一直是非常重要的主题,然而,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。数据库技术能使Internet应用超越具有早期应用特点的简单的。同时,Internet技术提供了一种向用户数据库内容的标准化的访问方法。这些技术没有脱离经典数据库技术的要求。它们只是加重了数据库技术的重要性。
数据库的设计和开发及包括艺术有包括工程。理解用户的需求,然后,把它们转变为有效的数据库设计是一个艺术过程。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用,是一个工程过程。
数据库的目的是帮助人们跟踪事务。经典的数据库应用涉及诸如订单、顾客、工作、员工、学生、电话之类的项,或其它数据量较大、需要密起关注的事务。最近,由于数据库的普及,数据库技术已经被应用到了新的领域,诸如用于Internet的数据库或用于公司内联网的数据库。数据库也被越来越多地应用于生成和维护多媒体应用程序上。
计算机的数据处理应用,首先要把大量的信息以数据形式存放在存储器中。存储器的容量、存储速率直接影响到数据管理技术的发展。从1956年生产出第一台计算机到现在,存储器的发展,为数据库技术提供了良好的物质基础。
使用计算机以后,数据处理的速度和规模,无论是相对于手工方式,还是机械方式,都有无可比拟的优势。通常在数据处理中,计算是比较简单的而数据的管理却比较复杂。数据管理是指数据的收集、整理、组织、存储、维护、检索、传送等操作,这部分操作是数据处理业务的基本环节,而且是任何数据处理业务中必不可少的共有部分。数据管理技术的优劣,将直接影响数据处理的效率。
2.1.1 数据库的发展
数据管理技术的发展,与硬件(主要是外存)、软件、计算机应用的范围有密切的联系。数据管理技术的发展经过三个阶段:人工管理阶段、文件系统阶段和数据库阶段。
人工管理阶段和文件系统阶段都有着相当多的缺陷,诸如数据冗余性 ,数据不一致性以及数据联系弱等等。也正是由于这些原因,促使人们研究新的数据管理技术,从而产生了数据库技术。
20世纪60年代末发生的三件大事,层次模型IMS系统的推出、关于网状模型DBTG报告的发表以及关于关系模型论文的连续发表标志着数据管理技术进入数据库阶段。进入70年代以后,数据库技术得到迅速发展,开发了许多有效的产品并投入运行。数据库系统克服了文件系统的缺陷,提供了对数据更高级更有效的管理。
当进入数据库阶段后,随着数据管理规模一再扩大,数据量急剧增加,为了提高效率,开始时,人们只是对文件系统加以扩充,在应用文件中建立了许多辅助索引,形成倒排文件系统。但这并不能最终解决问题。在20世纪60年代末,磁盘技术取得重要进展,具有数百兆容量和快速存取的磁盘陆续进入市场,成本也不高,为数据库技术的产生提供了良好的物质条件。
2.1.2 数据库阶段的特点
(1)减少数据的重复(Redundancy can be reduced)
当在一个非数据库系统当中,每一个应用程序都有属于他们自己的文件,由于无法有系统建立的数据,因此常常会造成存储数据的重复与浪费。例如:在一家公司当中,人事管理程序与工资管理程序或许都会使用到职员与部门的信息或文件,而我们可以运用数据库的方法,把这两个文件整理起来,以减少多余的数据,过度地占用存储空间。
(2)避免数据的不一致(Inconsistency can avoid)
本项的特色,可以说是延伸前项的一个特点,要说明这样的一个现象,我们可以从下面这个实例来看:若是在同一家公司当中,职员甲在策划部门工作,且职员甲的记录同时被存放在数据库的两个地方,而数据库管理系统却没有对这样重要的情况加以控制,当其中一条数据库被修改时,便会造成数据的不一致,但是,对于一个健全的数据库管理系统而言,将会对这样的情况加以控制,但有时并不需要刻意消除这种情形,应当视该数据库的需求与效率来决定。
(3)数据共享(Data shared)
对于数据共享的意义,并不是只有针对数据库设计的应用程序,可以使用数据库中的数据,对于其他撰写好的应用程序,同样可以对相同数据库当中的数据进行处理,进而达到数据共享的目的。
(4)强化数据的标准化(Standard can be enforced)
由数据库管理系统,对数据做出统筹性的管理,对于数据的格式与一些存储上的标准进行控制,如此一来,对于不同的环境的数据交换(Data Interchange)上将有很大的帮助,也能提高数据处理的效率。
(5)实践安全性的管理(Security restriction can be applied)
通过对数据库完整的权限控制,数据库管理者可以确认所有可供用户存取数据的合法途径渠道,并且可以事先对一些较重要或关键性的数据进行安全检查,以确保数据存取时,能够将任何不当损毁的情形降至最低。
(6)完整性的维护(Integrity can be maintained)
所谓完整性的问题,就是要确认某条数据在数据库当中,是正确无误的。正如(2)所述,若是无法控制数据的不一致性,便会产生完整性不足的问题,所以,我们会发现,当数据重复性高的时候,数据不完整的情形也会增加,当然,若是数据库的功能完整,将会大大地提高数据完整性,也会增加数据库的维护能力与维护简便性。
(7)需求冲突会获得平衡(Conflicting requirements can be balance)
在一个较大型的企业当中,用户不同的需求,往往会造成系统或数据库在设计上的困扰,但是一个合适的数据库系统,可以通过数据库管理员的管理,将会有效地整理各方面的信息,对于一些较重要的应用程序,可以适时地提供较快速的数据存取方法与格式,以平衡多个用户在需求上的冲突。
上述七个方面构成了数据库系统的主要特征。这个阶段的程序和数据间的联系可用下图表示: 2.1.3 数据库技术
从文件系统发展到数据库系统是信息处理领域的一个重大变化。在文件系统阶段,人们关注的中心问题是系统功能的设计,因而程序设计处于主导地位,数据只起着服从程序需要的作用。在数据库方式下,信息处理观念已为新体系所取代,数据占据了中心位置。数据结构的设计成为信息系统首先关心的问题,而利用这些数据的应用程序设计则退居到以既定的数据结构为基础的外围地位。
目前世界上已有数百万个数据库系统在运行,其应用已经深入到人类社会生活的各个领域,从企业管理、银行业务、资源分配、经济预测一直到信息检索、档案管理、普查统计等。并在通信网络基础上,建立了许多国际性的联机检索系统。我国20世纪90年代初在全国范围内装备了12个以数据库技术为基础的大型计算机系统,这些系分布在邮电、计委、银行、电力、铁路、气象、民航、情报、公安、军事、航天和财税等行业。
数据库技术还在不断的发展,并且不断地与其它计算机技术相互渗透。数据库技术与网络通信技术相结合,产生了分布式数据库系统。数据库技术与面向对象技术相结合,产生了面向对象数据库系统。
在数据库技术中有四个名词,其概念应该分清。
(1)数据库(database,DB):DB是统一管理的相关数据的集合。DB能为各种用户共享,具有最小冗余度,数据间联系密切,而又有较高的数据独立性。
(2)数据库管理系统(Database Management System,DBMS):DBMS是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型和面向对象型DBMS。
(3)数据库系统(Database System,DBS):DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。
(4)数据库技术:这是一门研究数据库的结构、存储、管理和使用的软件学科。数据库技术是操作系统的文件系统基础上发展起来的。而DBMS本身要在操作系统的支持下才能工作。数据库不仅用到数据结构的知识,而且丰富了数据结构的内容。在关系数据库中要用到集合论、数理逻辑的理论。因此,数据库技术是一门综合性较强的学科。
§2.2数据库理论基础
2.2.1 数据库模型
从20世纪50年代中期开始,计算机的应用由科学研究部门逐步扩展到企业、行政部门。至60年代,数据处理成为计算机的主要应用。数据库技术作为数据管理技术,是计算机软件领域的一个重要分支,产生于60年代末。现已形成相当规模的理论体系和实用技术。
模型是对现实世界的抽象。在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象,表示实体类型及实体间联系的模型称为“数据模型” 。
目前广泛作用的数据模型可分为两种类型。
一种是独立于计算机系统的模型,完全不涉及信息在系统中的表示,只是用来描述某个特定组织所关心的信息结构,这类模型称为“概念数据模型” 。要领模型用于建立信息世界的数据模型,强调其语义表达功能,应该概念简单、清晰,易于用户理解,它是现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。这一其中著名的模型是“实体联系模型” 。
另一种数据模型是直接面向数据库的逻辑结构,它是现实世界的第二层抽象。 这类模型涉及到计算机系统和数据库管理系统,又称为“结构数据模型” 。例如,层次、网状、关系、面向对象等模型。这类模型有严格的形式化定义,以便于在计算机系统中实现。
(1)层次模型。用树型结构表示实体类型及实体间联系的数据模型。树的结点是记录类型,每个非根结点有且只有一个父结点。上一层记录类型和下一层记录类型间联系是1∶N联系。
层次模型的特点是记录之间的联系通过指针实现,查询效率较高。但层次模型有两个缺点:一是只能表示1∶N联系,虽然有多种辅助手段实现了M∶N联系,但都较复杂,用户不易掌握,二是由于树型结构层次顺序的严格和复杂,引起数据的查询和更新操作也很复杂,因此,编写应用程序也很复杂。
(2)网状模型。用有向图结构表示实体类型及实体间联系的数据模型。。1969年DBTG报告提出的数据模型是网状模型的主要代表。有向图中的结点是记录类型,有向边表示从箭尾一端的记录类型到箭头一端的记录类型间联系是1∶N联系。
网状模型的特点:记录之间联系通过指针实现,M∶N联系也容易实现(每个M∶N联系可拆成两个1∶N联系),查询效率较高。网状模型的缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。由于层次系统和网状系统的应用程序编制比较复杂,因此,从20世纪80年代中期起,其市场已被关系系统所取代。但是使用这两种模型建立起的许多数据库仍然在正常运转,只是在外层加了个关系数据库语言的接口。网状模型有许多成功的产品,20世纪70年代的产品大部分网状系统,例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等
(3)关系模型。关系模型的主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。
关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。20世纪70年代对关系数据库的研究主要集中在理论和实验系统的开发方面。80年代初才形成产品,但很快得到广泛的应用和普及,并最终取代了层次、网状数据库产品。现在市场上典型的关系DBMS产品有DB2、ORACLE、SYBASE、INFORMIX和微机型产品Foxpro、Access等。
关系模型和网状、层次模型的最大区别是:关系模型用表格数据而不是通过指针链来表示和实现实体间联系。关系模型的数据结构简单、易懂。只需用简单的查询语句就可对数据库进行操作。
关系模型是数学化的模型,可把表格看成一个集合,因此集合论、数理逻辑等知识可引入到关系模型中来。关系模型已是一个成熟的有前途的模型,已得到广泛应用。
(4)面向对象模型。目前,关系数据库的使用已相当普遍,但是,现实世界中仍然存在着许多含有复杂数据结构的应用领域,例如,CAD数据、图形数据等,而关系模型在这方面的处理能力就显得力不从心。因此,人们需要更高级的数据库技术来表达这类信息。面向对象的概念最早出现在程序设计语言中,随后迅速渗透到计算机领域的每一个分支。面向对象数据库是面向对象概念与数据库技术相结合的产物。
面向对象模型能完整地描述现实世界的数据结构,具有丰富的表达能力,但模型相对较复杂,涉及的知识面也广,因此面向对象数据库尚未达到关系数据库那样的普及程度。
2.2.2 数据库体系结构
数据库的体系结构分三级:内部级(internal),概念级(conceptual)和外部级(external)。这个三级结构有时也称为“三级模式结构”,或“数据抽象的三个级别”,最早是在1971年通过的DBTG报告中提出,后来收入在1975年的美国ANSI/SPARC报告中。虽然现在DBMS的产品多种多样,在不同的操作系统支持下工作,但是大多数系统在总的体系结构上都具有三级模式的结构特征。从某个角度看到的数据特性称为“数据视图”(data view)。
外部级最接近用户,是单个用户所能看到的数据特性。单个用户使用的数据视图的描述称为“外模式”。
概念级涉及到所有用户的数据定义,是全局的数据视图。全局数据视图的描述称为“概念模式”。
内部级最接近于物理存储设备,涉及到实际数据存储的结构。物理存储数据视图的描述称为“内模式”。
数据库的三级模式结构是数据的三个抽象级别。它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担。
三级结构之间往往差别很大,为了实现这三个抽象级别的联系和转换,DBMS在三级结构之间提供两个层次的映象(mappings):外模式/模式映象,模式/内模式映象。此处模式是概念模式的简称。
2.2.3 数据的独立性
由于数据库系统采用三级模式结构,因此系统具有数据独立性的特点。在数据库技术中,数据独立性是指应用程序和数据之间相互独立,不受影响。数据独立性分成物理数据独立性和逻辑数据独立性两级。
(1)物理数据独立性
如果数据库的内模式要进行修改,即数据库的存储设备和存储方法有所变化,那么模式/内模式映象也要进行相当的修改,使概念模式尽可能保持不变。也就是对内模式的修改尽量不影响概念模式,当然,对于外模式和应用程序的影响更小,这样,我们称数据库达到了物理数据独立性。
(2)逻辑数据独立性
如果数据库的概念模式要进行修改,譬如增加记录类型或增加数据项,那么外模式/模式映象也要进行相应的修改,使外模式尽可能保持不变。也就是对概念模式的修改尽量不影响外模式和应用程序,这样,我们称数据库达到了逻辑数据独立性。
现有关系系统产品均提供了较高的物理独立性,而对逻辑独立性的支持尚有欠缺,例如,对外模式的数据更新受到限制等。
2.2.4 范式
建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。
在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:
在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据)。
表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录)。
在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系)。
在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名)。
在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足一、二、三、四范式,满足第四范式的数据结构自动满足第一、二、三范式,……,依此类推。
第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF。
第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应。例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息。通常我们称这种关系为函数依赖(functional depEndence)关系。即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识。
第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除。
为防止数据库出现更新异常、插入异常、删除异常、数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计。
§2.3 SQL语言基础
2.3.1 SQL简介
用户对数据库的使用,是通过数据库管理系统提供的语言来实现的。不同的数据库管理系统提供不同的数据库语言。关系数据库管理系统几乎都提供关系数据库标准语言——SQL。
SQL 的全称是Structured Query Language,即结构化查询语言。SQL语句可以从关系数据库中获得数据,也可以建立数据库、增加数据、修改数据。1986年ANSI采用SQL语言作为关系数据库系统的标准语言,后被国际化标准组织(ISO)采纳为国际标准。SQL语言使用方便、功能丰富、简洁易学,是操作数据库的工业标准语言,得到广泛地应用。例如关系数据库产品DB2、ORACLE等都实现了SQL语言。同时,其它数据库产品厂家也纷纷推出各自的支持SQL的软件或者与SQL的接口软件。这样SQL语言很快被整个计算机界认可。
SQL语言是一种非过程化语言,它一次处理一个记录集合,对数据提供自动导航。SQL语言允许用户在高层的数据结构上工作,而不对单个记录进行操作。SQL语言不要求用户指定数据的存取方法,而是使用查询优化器,由系统决定对指定数据存取的最快速手段。当设计者在关系表上定义了索引时,系统会自动利用索引进行快速检索,用户不需知道表上是否有索引或者有什么类型的索引等细节。
SQL语言可以完成许多功能,例如:
查询数据
在数据库表格中插入、修改和删除记录
建立、修改和删除数据对象
控制对数据和数据对象的存取
确保数据库的一致性和完整性等
2.3.2 SQL查询
数据查询是关系运算理论在SQL语言中的主要体现,SELECT 语句是SQL查询的基本语句,当我们在对一个数据库进各种各样的操作时,使用的最多的就是数据查询,在以SQL为基础的关系数据库中,使用的最多的就是SELECT查询语句。
SELECT语句的完整句法如下:
SELECT 目标表的列名或列表达式序列
FROM 基本表和(或)视图序列
[WHERE 行条件表达式]
[GROUP BY 列名序列]
[HAVING 组条件表达式]
[ORDER BY列名 [ASC│DEAC]…]
我在SELECT语句中还使用了大量的保留字和通配符以进行各种各样的条件查询。在系统中有大量的查询按钮,其使用了大量的查询语句,而且这些查询语句大部分使用的是模糊查询,所以大量的使用了模式匹配符LIKE(判断值是否与指定的字符通配格式相符)。在包含LIKE的查询语句中可以使用两个通配符:%(百分号):与零个或多个字符组成的字符串匹配;_(下划线):与单个字符匹配。系统中的条件判断往往包含多个条件,这时就需要使用逻辑运算符NOT、AND、OR(用于多条件的逻辑连接),谓词ALL以及保留字DISTINCT等等。做为SELECT语句还有很多的使用方法,这里就不再叙述。
2.3.3 SQL数据更新
使用数据库的目的是为了有效地管理数据,而数据的插入、删除和修改则是必不可少的一个功能。在本系统中就大量地使用了数据插入、删除和修改这三种操作,现做一个简单地介绍。
数据插入
往数据库的基本表中插入数据使用的是INSERT语句,其方式有两种:一种是元组值的插入,另一种是查询结果的插入。在本系统中使用的是前一种方式,其句法如下:
INSERT INTO 基本表名(列表名)VALUES(元组值)
数据删除
往数据库的基本表中删除数据使用的是DELETE语句,其句法如下:
DELETE FROM 基本表名 [WHERE 条件表达式]
在些作一点说明,删除语句实际上是“SELECT * FROM 基本表名 [WHERE 条件表达式]”和DELETE操作的结合,每找到一个元组,就把它删除。此外,DELETE语句只能从一个基本表中删除元组,WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件。
数据修改
当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下:
UPDATE基本表名
SET列名=值表达式[,列名=值表达式…]
[WHERE条件表达式]
在Delphi中使用SQL语句是很方便的,一般来说,都是通过TQuery组件来使用SQL语言的。有一点要进行说明,虽然通过TQuery组件来使用SQL语言很方便,但考虑到自己对不同组件的理解程度、个人习惯以及其它各个方面,在本系统中我采用的是ADO组件来对数据库进行操作。最简单的方法比如在TADOQuery组件的SQL属性中就可以键入SQL语句,至于详细的使用方法在后面进行介绍。
转贴于 第三章
数据库开发工具
§3.1 Delphi 6.0 简介
Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。
凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发。Delphi6中的VCL组件可用图3-1来说明。组件在Delphi程序的开发中是最显眼的角色。大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。
窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。
图形组件与窗口组件并列,是另一大类组件。图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。从图8-43中可以看出,图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,有读者会问图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。
非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。
§3.2 Delphi 6.0 控件
用Delphi6开发数据库应用,重点是和各种数据库组件打交道,当然也要使用其它的一些组件,现在就我在系统设计中所使用的重要组件给与简单介绍。
3.2.1 ADO数据访问组件
ADO数据对象(Active Data Objects)实际是一种提供访问各种数据类型的链接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口中,可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。ADO使您的客户端应用程序能够通过OLE DB提供访问和操作在数据库服务器中的数据。ADO支持用于建立C/S和Web的应用程序的主要功能。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO同时具有远程数据服务(RDS)功能,通过RDS可以在一次往返过程中实现将数据从服务器移动到客户端应用程序和Web页、在客户端对数据进行处然后将更新结果返回服务器的操作。
Delphi 6.0继续对Microsoft的ADO访问能力的支持。这种能力是通过一组新组件实现的,这些组件是在企业版的ADO组件页中,在组件面版的ADO页上可以找到这些组件。利用在前面章节提到的TdataSet抽象类,ADO组件可以不通过BDE而直接实现ADO连接。这意味着只需要很少的代码就可以实现该连接并且性能得到提高。
利用ADO数据访问组件,可以只使用ADO结构与数据库取得联系并对其中的数据进行操作,而在这些过程中完全不需要使用BDE。大多数的ADO连接和数据集组件都是与基于BDE的连接和数据集组件相类似的。TADOConnection组件与基于BDE的应用程序中的Tdatabase组件类似。TADOTable与Ttable,TADOQuery与Tquery,以及TADOStoreProc和TstoredProc之间都具有这种类似的对应关系。使用这些ADO组件的方式与我们常使用的数据访问组件(基于BDE)都有许多相同之处。TTADODataSet没有直接的BDE对应组件,但它提供了许多与Ttable和Tquery相同的功能。同样,TADOCommand也没有相对应的BDE组件,它是在Delphi/ADO环境中完成特定功能的组件。Delphi 6.0通过ADO数据集访问组件,可以不借助BDE数据引擎而是通过微软的OLEDB来访问更为广泛的数据库中的数据。ADO数据集访问组件与常用的数据访问组件是并列的关系。
在系统中我主要使用的是ADOTablet和ADOQuery两个组件。
3.2.2 数据控制类DataControl
数据控制类负责数据库数据的显示,并把用户对数据的修改传回。这里的绝大多数组件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和对应的非数据感知组件相同,如TEdit框,TRadioGroups单选按钮组等,只不过在显示数据库数据时要用而已。
在系统中主要使用数据网格控件DBGrid和数据库导航器控件DBNavigator。
3.2.3 数据访问类DataAccess
数据库应用系统中数据访问是一个首要问题,包括单用户和 C/S系统,都必须联系一些数据库和数据表文件。Delphi 6 提供了专门用于数据访问的基类控件。主要包括数据源控件DataSource、客户数据集控件ClientDataSet、数据集提供器控件DataSetProvider等等。
Tdatabase:当一个基于BDE的数据库应用程序需要一个永久数据库连接时,需要定制向一个数据库服务器的连接时,需要事务控制和特殊的数据库别名时就得用到Tdatabase对象。特别是当连接到一个远程的SQL数据库服务器时,如果要利用BDE进行数据库事务处理,那么,TDatabase对象的威力就体现出来了。在一个应用程序中为每一个数据库连接显示的声明Tdatabase对象要根据需要而定,不是必需的。对一个数据库连接,如果没有显示的声明并实例化TDatabase对象,系统就会产生一个带有默认属性的TDatabase对象。
TdataSource对象用于在DataSet对象(包括Tquery,TstoredProc,Ttable等)和数据感知组件之间提供一个连接的纽带,以便在窗体上显示数据库中的数据,在数据库中导航定位与编辑数据集中的数据。如果一个DataSet对象中的数据想在数据感知组件中显示和修改,它就必须和TdataSource对象相联系。同样,一个数据感知组件如果想和数据源相联系以便显示和操纵数据,就必须以TDataSource对象为中介。
用Delphi6作数据库应用开发概括来说如下:先利用数据存取组件和实际的数据库建立连接,并用Tsession对象和Tdatabase对象管理这些连接。然后以Tdatasource对象为中介,用数据感知组件向用户显示数据库的内容并接受用户的查询和修改等操作。
3.2.4 SQL语言在Delphi中的应用
在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery组件来使用SQL语言的。可以在TQuery组件的SQL属性中设置SQL语句。设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句。还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。
静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。
动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:
Select * From Students Where StudentCode =: StudentCode;
其中的变量StudentCode便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。为参数赋值有三种方法:
①根据参数在SQL语句中出现的顺序,设置TQuery部件的Params属性值为参数赋值。
②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。
③将TQuery部件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TQuery部件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。利用这种方法也能实现所谓的连接查询,创建主要—明细型数据库应用。
在程序运行过程中,要想设置TQuery部件的SQL属性,必须首先调用Close方法,关闭TQuery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。例如:
Query1.Close {关闭Query1)
Query1.SQL.Clear {清除SQL属性中的SQL命令语句}
Query1.SQL.Add(‘Select * From Students‘);
Query1.SQL.Add(‘ Where Name ="Lucy" ‘);
在为TQuery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。
在这里要特别注意的,一般情况下TQuery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。
在为TQuery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。
在设计过程中,设置完TQuery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。
在应用程序运行过程中,通过程序调用TQuery部件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:
Query1.Open (这样会返回一个查询结果集)
如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:
Query1.ExecSQL (没有返回结果)
当然在设计应用程序时,程序设计人员是无法确定TQuery部件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。
Delphi中用ADOQuery来使用SQL语句同样十分方便。在ADOQuery组件中首先通过ConnectionString属性值来联接数据源,然后就通过双击SQL…属性值来写入SQL语句。在Delphi中调用数据库,就可以调用ADOQuery组件,通过修改其中的SQL…属性中的SQL语句来实现对数据库的各项操作。
值得注意的是,ADOQuery组件只有在激活的情况下才可以被正确地使用,这样就提出了一个问题,也就是说,在每次修改ADOQuery组件的SQL…属性时都必须先行进行关闭,待清除掉SQL…中所有的SQL语句后才可以添加新的SQL语句。而且,在每一次修改完成以后,还应该记得重新将ADOQuery激活。其它的使用方法与TTQuery有许多的相似之处。
§3.3 Access 简介
建立一个数据库我们有多种选择,现在市场上有各种各样的数据库,而且每一种数据库都有其自身的特点,不能说哪一种更好,只能在其中寻找一种能更好地适应系统需求、更好地满足用户的要求以及适应开发人员的习惯。在本系统中,做为图书仓库管理系统是一个比较小的应用系统,它所产生和处理的数据量也比较小。因此,没有必要使用像SQL Server和Oracle这样的大型数据库。我首先想到的数据库是Borland公司的Paradox数据库。另外,Microsoft Office中的Access数据库在计算机上的应用比较普及,是开发小型数据库系统的比较理想的选择,所以,在本系统中我选择了Access数据库。
Access做为一个数据库管理系统,它被集成在Microsoft Office中。Access数据库处理的基本结构,采取关系型数据库模式。与其他的数据库系统相比,Access更加简单易学,一个普通的计算机用户可以很快地掌握它。Access 2000的功能十分强大,利用它可以方便地实现对信息保存、维护、查询、统计、打印、交流、,而且它可以十分方便地与Office其他组件交流数据,这些功能对一个一般用户而言已经足够了。
转贴于 第四章 系统总体设计
软件系统的总体设计大约要经历可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试以及维护等七个阶段。可行性分析和项目开发计划在前面已经叙述,下面所要做的是进行软件需求分析,概要设计和详细设计。编码过程将在下一节论述,而测试和维护过程不在本文叙及。
§4.1 系统需求分析
在经过前一阶段的分析之后,我确定了我的开发课题为图书仓库管理。现在所要做的是要准确定义系统必须做什么以及系统必须具备的功能。
软件需求分析中我采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。
在系统中我采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号:
:箭头,表示数据流;
〇:圆或椭圆,表示加工;
:双杠,表示数据存储;
:方框,表示数据的源点或终点。
为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的,要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。在这里我一共使用了三层数据流图,即顶层图,0层图和1层图(也是底层图)。
在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。
经过对系统的分析首先得到系统的顶层DFD,如下: 一步细化得到系统的0层DFD,如下:
再进一步细化每一个数据加工功能,得到系统的1层DFD图。
在这里只给出有关入库管理和出库管理的1层数据流图,它们是系统的关鍵部分,也是主要的部分。通过以上对数据流图的分析之后,我们已大体地了解了系统的功能和目标,接下来所要做的就是系统功能模块的划分和数据库的设计,也就是系统的概要设计。
§4.2 系统概要设计
在软件需求分析阶段,搞清楚了软件“做什么”的问题,形成了目标系统的逻辑模型。现在我们所要做的就是要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求。首先,我们需要描述的是系统的总的体系结构。
4.2.1 系统结构设计
系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。
将系统划分为多个模块是为了降低软件系统的复杂性,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
在系统的概要设计中我采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。我首先将整个系统化分为几个小问题,小模块,在系统中,我设计了用户管理、库存管理、入库管理、出库管理、员工管理和供应商管理6个小模块。然后,进一步细分模块,添加细节。比如,用户管理我又将其分为用户注册、用户注销、密码修改;库存管理分为库存记录查询、库存记录修改、库存记录打印等等。
以下就是系统的结构图:(在这里为了表达方便我将结构图分开来表达。)
在得到系统的第一层功能模块图后,经过进一步地细化,得一系统的子功能模块图:
4.2.2 数据库设计
在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。
4.2.2.1 ER图设计
在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”,如“实体联系模型”;另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(ER模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但ER模型只能说明实体间语义的联系,不能进一步说明详细的数据结构,它只是数据库设计的第一步。
ER图是直观表示概念模型的工具,它有四个基本成分:
矩形框,表示实体类型(考虑问题的对象)。
菱形框,表示联系类型(实体间的联系)。
椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。
直线,联系类型与其涉及的实体类型之间以直线连接。
本系统为图书仓库管理,主要管理图书的入库、出库以及库存等事项。仓库根据需要可以查询图书供应商的信息,同时还需要了解在入库和出库中员工的参与情况。依据仓库管理的实际情况,考虑了多方面的因素以后,确定系统的ER图如下:
(为了表达的方便,在这里我没有在一张图上表达出所有的关系,而是用一张总体ER图,和几张实体属性关系图来表达数据库的结构。)
在该数据库中,我设计了三个实体,分别是库存、员工和供应商以及两个联系类型入库和出库。在本系统中库存是核心,也是基本,没有了库存其它的也就没有什么意义了。员工记录的添加是考虑到责任问题,也就是说,在仓库管理的实际运用中,出现了责任不清的现象,特别是由于仓库的进出图书数量都比较大时产生了一系列问题,所以在设计数据库时,我特别考虑到这一点,加入了员工记录这一实体。供应商信息的添加主要出于对图书来源问题的思考。通过添加供应商信息可以比较清楚地了解图书的进货渠道,从图书的质量到供应商的信誉都可以进行了解,同时可以为以后的图书进购提供一定有用的信息。
入库联系类型将库存信息、供应商信息和员工信息联系在一起,可以方便地实现三个实体之间的联接,而出库联系类型则将库存信息和员工信息较好地联接起,同时这两个联系类型又都具有各自特有的属性。
下面就是各实体及联系类型的属性图:(带#号的属性为关键字段)4.2.2.2 数据库表格设计
在完成系统的ER图之后,需要将ER模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,我选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。
在这里不得不提到一个概念——范式。其实在上一节的ER图设计中,已经运用了范式的思想,不仅如此,在数据库的表格设计中更离不开范式的思想,它是数据库设计的基础,如果不注意这个问题将会导致一系列问题的出现。
我在系统中定义的表格都严格地按照范式的思想和要求去完成,数据库中的所有表格都达到了三范式的要求。根据系统ER图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下六张表格,分别是库存信息表,入库信息表,出库信息表,员工信息表,供应商信息表和密码信息表。通过对这六张表格的操作可以较好地完成系统设计的各项功能,六张表格之间有着不同程度的联系。(说明:在以下数据表中,K代表主键,#代表外键,字段值不为空。)
BookRecord 表(库存信息表)
字段名称 数据类型 说明
K BookID 数字 图书编号
BookName 文本 图书名
Author 文本 作者
Publisher 文本 出版社
PubDate 日期/时间 出版日期
Price 货币 价格
BookType 文本 图书类型
Number1 数字 库存数量
Addation 文本 备注
图4.13 库存信息表
库存信息表主要用于记录仓库中现存放的所有图书的详细信息,包括图书编号、书名、作者、出版社、图书类型等有关图书的各类信息,它即是该数据库的主表,也是系统主界面的主要内容。
在该表中图书编号是主键,它按图书入库的先后次序来编写,每当有图书入库,系统自动给出图书编号,这样我们按图书编号来查找图书是比较方便的。考虑到编号比较难于记忆,所以使用了出版社和图书类型两个字段,在系统中我提供了出版社和图书类型的分类查找,而且全部采用自动生成,每当系统中有新的出版社类型和图书类型,弹出菜单会自动添中新类型,这样就可以比较方便地实现按出版社和按图书类型查找。此外,库存数量也是一个比较关键的字段,该字段是在系统初始化时就给定的,每当有图书入库或出库操作,系统就会自动修改图书的库存数量,以保持数据的一致性。做为备注有一点说明,我的数据库中备注的数据类型是文本,而不是备注类型,主要考虑到该字段的长度并不大,而且在Delphi中文本数据类型的处理也比较方便一点。
Employee 表(员工信息表)
字段名称 数据类型 说明
K EmployeeID 数字 员工编号
EmployeeName 文本 员工姓名
Sex 文本 性别
BornDate 日期/时间 出生日期
Grade 文本 职称
WorkDate 日期/时间 工作日期
Telephone 文本 联系电话
Address 文本 联系地址
图4.14 员工信息表
员工信息表主要用于记录有关员工的各类信息,包括姓名、职称、出生日期、联系电话、联系地址等。它主要用来为系统提供员工的有关信息,因为在系统中,入库和出库操作均与员工有着一定的联系,在查询入库信息和出库信息时,有时需要查找有关此项记录有关的员工信息,在系统中我是通过入库记录与员工记录(出库记录和员工记录)之间的联接查询来完成的。另外,作为一个仓库也有必要了解其所属员工的一些基本情况,以便查询。
Shopkeeper 表(供应商信息表)
字段名称 数据类型 说明
K ShopkeeperID 数字 供应商编号
ShopkeeperName 文本 供应商姓名
Address 文本 地址
PostNo 数字 邮编
OfficePhone 文本 办公电话
HomePhone 文本 住宅电话
Email 文本 E-mail
PayType 文本 付款方式
图4.15 供应商信息表
供应商信息表主要用于记录有关供应商的各类信息,包括姓名、地址、电话、付款方式等。它主要用来为系统提供供应商的有关信息,在系统中入库记录是与供应商记录相联系的,通过入库记录可以查找相关的供应商信息。在供应商信息中,考虑当实际情况,我特别加入了Email和付款方式这两个字段,因为在当今信息世界中,多种多样的通讯方式和多种多样的付款方式是必然的,是数据库中必须与以记录。
InRecord 表(入库信息表)
字段名称 数据类型 说明
K InID 数字 入库编号
# BookID 数字 图书编号
# EmployeeID 数字 员工编号
# ShopkeeperID 数字 供应商编号
Number 数字 入库数量
BuyDate 日期/时间 入库日期
图4.16 入库信息表
OutRecord 表(出库信息表)
字段名称 数据类型 说明
K OutID 数字 出库编号
# BookID 数字 图书编号
# EmployeeID 数字 员工编号
Number2 数字 出库数量
OutDate 日期/时间 出库日期
图4.17 出库信息表
入库信息表主要用于记录有关入库的详细信息,包括入库数量、入库日期以及图书、员工、供应商三方的编号,以便查询。出库信息表主要用于记录有关出库的详细信息,包括出库数量、出库日期以及图书、员工的编号。出库信息表和入库信息表一样,其实它们都属于联系类型,系统通过这两个表可以联接上其它的表为用户提供多种条件的联接查询。值得提出的一点是入库记录和出库记录的添加不仅仅是单表操作,由于它们都与库存记录相联系,所以,无论您是添中入库记录还是添加出库记录,都必须同时修改库存记录,以保持数据的一致性,否则将引发系统出错而这些我都让其在系统中自动完成。无论您是添加入库记录,还是添加出库记录,系统都将自动修改库存中图书的数量,而且,在您出库的数量大于库存数量时,系统还会自动提示错误,这样就可以防止一定错误的发生。
在入库信息表和出库信息表中我还定义了几个外键,它提供了一种表示几个关系联系的方法。比如,系统中通过在入库信息表中定义的外键 BookID、EmployeeID和ShopkeeperID可以将库存信息表、员工信息表和供应商信息表联系在一起,从而方便地实现联接查询,而且,引入外键的定义是实体完整性约束的一个主要方面。
Key 表(密码信息表)
字段名称 数据类型 说明
K KeyName 文本 用户姓名
KeyNo 文本 用户密码
图4.18 密码信息表
密码信息表主要用于记录所有的用户名和用户密码。它是在用户登陆时用来确定用户和密码的正确性,以防止非法用户登陆。
通过以上设计已经完成了系统的概要设计,当我们有了系统的功能模块图和数据库之后,就需要着手去实现每一个模块,为每一个功能设计程序流程图,这也就是系统的详细设计。
§4.3 系统详细设计
在前面的概要设计中,已将系统划分为多个模块,并将它们按照一定的原则组装起来,同时确定了每个功能及模块之间的外部接口。现在所要做的就是确定每个模块具体执行过程,也可以说是“过程设计”。
在处理过程设计时我采用的是结构化程序设计(简称SP)方法。需要指出的是系统的详细设计并不是指具体的编程序,而是将概要设计阶段产生的系统功能模块图细化成很容易产生程序的图纸。因此详细设计的结果基本决定了最终程序的质量。为软件的质量,延长软件的生存期,软件的可测试性、可维护性提供重要的保障。详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。
由前一阶段产生的系统功能模块图,我为系统的主要部分设计了如下程序流程图:通过以上步骤,基本上完成了对整个系统的总体设计,接下来所要做的就是软件的编码工作。系统总体设计的好坏直接影响着下一步工作,只有在这一阶段设计出好的模块图和程序流程图,才能更有利于编码,产生好的软件系统。
第五章 系统应用程序设计
§5.1 系统窗体模块组成
§5.2 数据模块窗体的设置
在编写数据库应用程序时,经常要遇到这样的情况,即好多组件、窗体同时访问相同的数据源,如果为每一个组件或者窗体都设置一个数据源将是十分耗时的工件,而且要保证这些数据源的确是相同的也需花一番功夫。那么,能不能将这些数据源集中管理,最好是做成一个统一的模块,需要时就将该模块引入而不必直接操作数据源本身呢?数据模块(DataModule)是解决这个问题最好的答案。简单说来,数据模块是用来集中管理数据源的一个窗体,该窗体可被需要的地方随时引入。
图5.2给出了本程序的数据模块(datamoduleform)窗体图,除报表窗体外所有的数据存取组件和数据源组件都在此数据模块中进行了定义。值得一提的是,设置了数据库Database组件,该组件引入了系统所需的唯一的数据库tsxs,Database组件的DatabaseName属性设置为tsckgl。tsxs数据库已在ODBC配置程序中进行了设置。其他的数据存取组件都是基于此数据库组件创建的,这样做的好处是,当数据库的别名或者其他信息改变之后,只需修改Tdatabase组件的AliasName属性即可。
另外,在本系统的数据模块窗体图中,我大多采用的AODQuery组件而没有采用BDE组,这主要是基于对ADO组件的了解。在Delphi的学习中我对ADO组件了解的更加清楚,使用也较BDE更为熟练,而且,ADO组件的功能也较BDE更为强大,所以在这里大多采用ADO组件来进行数据库联接。同时我也使用了BDE组件中的Table,因为在某些时候BDE有着其自身特有的优越性。 主窗体功能模块的实现
file://主窗体程序代码
public
file://在程序的起始部分,定义快捷按钮点击事件
Procedure Popup1Handler(Sender:Tobject);
Procedure Popup2Handler(Sender:TObject);
**********************************************************************
procedure Tmainform.Popup1Handler(Sender: TObject);
begin
file://快捷按钮1(点“按出版社分类”按钮产生)的点击事件
with datamoduleform.MainQuery do
begin
file://打开数据模块窗体的MainQuery,对BookRecord表进行操作
close;
file://关闭MainQuery
SQL.Clear;
file://清除SQL属性中的SQL命令语句
SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL语句
Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption;
open;
file://重新打开MainQuery
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3,s4,s5 :String;
file://设立5个变量以方便实现模糊查询
begin
file://主窗口库存查询按钮事件
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
SQL.Add(‘where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType‘);
file://使用Like语句来实现模糊查询
if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘BookID‘).Value:=s1;
file://给变量s1赋值
if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2;
file://给变量s2赋值
if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Author‘).Value:=s3;
file://给变量s2赋值
if Edit4.Text‘‘ then s4:=‘%‘+Edit4.Text+‘%‘ else s4:=‘%‘;
Parameters.ParamByName(‘Pub‘).Value:=s4;
file://给变量s2赋值
if Edit5.Text ‘‘ then s5:=‘%‘+Edit5.Text+‘%‘ else s5:=‘%‘;
Parameters.ParamByName(‘BookType‘).Value:=s5;
file://给变量s2赋值
open;
if FieldValues[‘BookID‘]=NULL
file://判断是否找到记录
then begin
Messagedlg(‘没有找到你所需要的记录!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
file://这里相当于一个刷新功能
open;
end;end;
end;
**********************************************************************
procedure Tmainform.SpeedButton3Click(Sender: TObject);
begin
file://库存表刷新按钮事件
with datamoduleform.MainQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord‘);
open;
end;
end;
**********************************************************************
procedure Tmainform.SpeedButton11Click(Sender: TObject);
var PopupItem:TMenuItem;
begin
file://自动生成快捷按钮1的内容
with datamoduleform.BookQuery do
begin
file://从数据库中选择出版社类型
close;
SQL.Clear;
SQL.Add(‘select distinct Publisher from BookRecord‘);
open;
PopupMenu1:=TPopupMenu.Create(Self); file://自动生成快捷菜单
PopupMenu1.AutoHotkeys:=maManual;
file://自定义热键
while Not Eof do
begin
file://根据出版社内容生成菜单子项
PopupItem:=TMenuItem.Create(Self);
PopupItem.Caption:=FieldByName(‘Publisher‘).AsString;
PopupMenu1.Items.Add(PopupItem);
PopupItem.onClick:=Popup1Handler;
file://确定菜单子项的点击事件
Next;
end; end;
PopupMenu1.Popup(384,67);
file://在指定位置显示快捷菜单1
end;
**********************************************************************
procedure Tmainform.FormActivate(Sender: TObject);
begin
file://系统初始化,在进入mainform时自动添加数据源
mainform.DBGrid1.DataSource:=datamoduleform.MainSource;
mainform.DBNavigator1.DataSource:=datamoduleform.MainSource;
mainform.DBGrid2.DataSource:=datamoduleform.EmpSource;
mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource;
mainform.DBGrid3.DataSource:=datamoduleform.ShopSource;
mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource;
mainform.DBGrid4.DataSource:=datamoduleform.InSource;
mainform.DBNavigator4.DataSource:=datamoduleform.InSource;
mainform.DBGrid5.DataSource:=datamoduleform.OutSource;
mainform.DBNavigator5.DataSource:=datamoduleform.OutSource;
end;
**********************************************************************
procedure Tmainform.FormCreate(Sender: TObject);
begin
file://系统初始化,定义界面大小,以适应不同分辩率
Width:=800;Height:=600;
end;
**********************************************************************
procedure Tmainform.Timer1Timer(Sender: TObject);
begin
file://在状态栏显示时间
StatusBar1.Panels[2].Text:=DateToStr(Date);
StatusBar1.Panels[4].Text:=TimeToStr(Time);
end;
§5.4 入库、出库窗体模块的实现
图5.4 系统入库管理窗体
图5.5 系统出库管理窗体
procedure Tinoutform.SpeedButton4Click(Sender: TObject);
begin
file://入库管理查找按钮事件
with datamoduleform.BookQuery do
file://入库查询处理
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID=:BookID‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
open;
if FieldValues[‘BookID‘]NULL
then
begin
Edit1.Text:=‘‘;
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
Edit6.Text:=FieldValues[‘BookName‘]; file://显示图书名
Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://设置显示框不可更改属性
Edit7.Text:=FieldValues[‘Author‘];
Edit7.ReadOnly:=true;Edit7.Color:=clMenu;
Edit8.Text:=FieldValues[‘Publisher‘];
Edit8.ReadOnly:=true;Edit8.Color:=clMenu;
Edit9.Text:=FieldValues[‘PubDate‘];
Edit9.ReadOnly:=true;Edit9.Color:=clMenu;
Edit10.Text:=FieldValues[‘Price‘];
Edit10.ReadOnly:=true;Edit10.Color:=clMenu;
Edit11.Text:=FieldValues[‘BookType‘];
Edit11.ReadOnly:=true;Edit11.Color:=clMenu;
Edit12.Text:=FieldValues[‘Number1‘];
Edit12.ReadOnly:=true;Edit12.Color:=clMenu;
If FieldValues[‘Addation‘]NULL
then Edit25.Text:=FieldValues[‘Addation‘]
else Edit25.Text:=‘‘;
Edit25.ReadOnly:=true;Edit25.Color:=clMenu;
end
else
begin
file://在没有查找到的情况下,清空所有显示框
Edit1.ReadOnly:=false;Edit1.Text:=‘‘;Edit1.Color:=clMenu;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clMenu;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clMenu;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clMenu;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clMenu;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clMenu;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clMenu;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clMenu;
MessageDlg(‘没有找到你所需要的记录!‘,mtInformation,[mbOK],0);
Edit13.Text:=‘‘;Edit13.SetFocus;
end;
end;
with datamoduleform.InQuery do file://自动入库编号的获取
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
file://找到入库编号中最大的一个
Edit26.ReadOnly:=false;
Edit26.Text:=FieldValues[‘InID‘]+1; file://最大的入库编号加1形成新的入库编号
Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://设置编号的不可更改性
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton1Click(Sender: TObject);
var s:integer;
begin
file://入库管理添加按钮事件
if Edit1.TextNULL
then MessageDlg(‘请输入完整的入库信息和图书信息,然后单击确定按钮。‘,
mtInformation,[mbok],0)
else begin
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
then begin
MessageDlg(‘请输入完整的入库信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else begin
with datamoduleform.InQuery do
file://将找到的图书信息显示
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘); file://向入库信息表中插入记录
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text; file://向Edit框取值
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
Edit12.ReadOnly:=False;
S:=StrToInt(Edit12.Text)+StrToInt(Edit4.Text); file://计算入库后库存图书数量
Edit12.Text:=IntToStr(s);
file://将修改后的库存图书数量显示
Edit12.ReadOnly:=true;
with datamoduleform.BookQuery do
file://修改库存记录中图书数量
begin
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where
BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;
execSQL;
file://提交SQL语句
MessageDlg(‘记录已成功添加!‘,mtInformation,[mbOK],0);
Edit13.SetFocus;
end;
end;
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton2Click(Sender: TObject);
begin
file://入库管理确定按钮事件
if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)
or (Edit6.Text=‘‘) or (Edit7.Text=‘‘) or (Edit8.Text=‘‘) or (Edit9.Text=‘‘)
or (Edit10.Text=‘‘) or (Edit11.Text=‘‘) or (Edit25.Text=‘‘)
then begin
file://判断输入信息的完整性
MessageDlg(‘请输入所需的全部入库信息!‘,mtInformation,[mbok],0);
Edit2.SetFocus;
end
else
begin
with datamoduleform.InQuery do
file://入库信息添加
begin
close;
SQL.Clear;
SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID,
:Number,:InDate)‘);
file://向入库信息表中插入记录
Parameters.ParamByName(‘InID‘).Value:=Edit26.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;
Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text;
execSQL;
end;
with datamoduleform.BookQuery do
begin
close;
SQL.Clear;
file://在完成入库信息的添加后,修改库存记录
SQL.Add(‘insert into BookRecord values(:BookID,:BookName,:Author,
:Publisher,:PubDate,:Price,:BookType,:Number,:Addration)‘);
Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text;
Parameters.ParamByName(‘BookName‘).Value:=Edit6.Text;
Parameters.ParamByName(‘Author‘).Value:=Edit7.Text;
Parameters.ParamByName(‘Publisher‘).Value:=Edit8.Text;
Parameters.ParamByName(‘PubDate‘).Value:=Edit9.Text;
Parameters.ParamByName(‘Price‘).Value:=Edit10.Text;
Parameters.ParamByName(‘BookType‘).Value:=Edit11.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;
Parameters.ParamByName(‘Addration‘).Value:=Edit25.Text;
execSQL;
end;
MessageDlg(‘记录添加成功!‘,mtInformation,[mbok],0);
end;
end;
**********************************************************************
procedure Tinoutform.SpeedButton11Click(Sender: TObject);
begin
file://新书入库按钮事件
Edit13.Text:=‘‘;Edit13.Color:=clMenu;
with datamoduleform.InQuery do file://自动入库编号的获取
begin
close;
SQL.Clear;
SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);
open;
Edit26.Text:=FieldValues[‘InID‘]+1;
Edit26.ReadOnly:=true;Edit26.Color:=clMenu;
end;
with datamoduleform.BookQuery do
file://自动图书编号的获取
begin
close;
SQL.Clear;
SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘);
file://找到库存图书编号中最大的一个
open;
Edit1.ReadOnly:=false;
Edit1.Text:=FieldValues[‘BookID‘]+1; file://显示自动生成的图书编号
Edit1.ReadOnly:=true;Edit1.Color:=clMenu;
end;
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;
Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clWindow;
Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clWindow;
Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clWindow;
Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clWindow;
Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clWindow;
Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clWindow;
Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;
Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clWindow;
end;
procedure Tinoutform.SpeedButton22Click(Sender: TObject);
var s:integer;
begin
file://出库管理确定按钮事件
if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘)
then begin
MessageDlg(‘请输入完整的出库信息!‘,mtInformation,[mbok],0);
Edit24.SetFocus;
end
else begin
if Edit27.Text>Edit21.Text
file://检查出库数量是否小于库存数量
then begin
MessageDlg(‘库存中的图书数量不够!‘,mtInformation,[mbok],0);
Edit27.Text:=‘‘;Edit27.SetFocus;
end
else begin
with datamoduleform.OutQuery do
begin
close;
SQL.Clear;
SQL.Add(‘insert into OutRecord values(:OutID,:BookID,:EmpID,
:Number,:OutTime)‘);
file://添加出库记录
Parameters.ParamByName(‘OutID‘).Value:=Edit23.Text;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
Parameters.ParamByName(‘EmpID‘).Value:=Edit24.Text;
Parameters.ParamByName(‘Number‘).Value:=Edit27.Text;
Parameters.ParamByName(‘OutTime‘).Value:=Edit28.Text;
execSQL;
end;
Edit21.ReadOnly:=False;
s:=StrToInt(Edit21.Text)-StrToInt(Edit27.Text); file://计算出库后库存图书数量
Edit21.Text:=IntToStr(s);
file://显示出库后库存图书数量
Edit21.ReadOnly:=True;
with datamoduleform.BookQuery do
begin
file://修改库存图书数量
close;
SQL.Clear;
SQL.Add(‘update BookRecord set Number1=:Number where BookID=:BookID‘);
Parameters.ParamByName(‘Number‘).Value:=s;
Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text;
execSQL;
end;
MessageDlg(‘出库记录添加成功!‘,mtInformation,[mbok],0);
Edit14.Text:=‘‘;Edit14.SetFocus;
end;
end;
end;
§5.5 查询功能的实现
查询功能包括员工信息查询,供应商信息查询,入库信息查询和出库信息查询。由于每一个功能的实现都差不太多,而且其窗体也差不太多,所以在这里只给出员工信息查询窗体及其源代码。
图5.6 员工信息查询窗体
procedure Tfindempform.SpeedButton1Click(Sender: TObject);
Var s1,s2,s3 :String;
begin
file://员工记录查询窗体查找按钮事件
with datamoduleform.EmpQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Employee‘);
SQL.Add(‘where EmployeeID Like :EmpID and EmployeeName Like :Name and Grade Like :Grade‘);
file://实现模糊查询功能
if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;
Parameters.ParamByName(‘EmpID‘).Value:=s1;
if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;
Parameters.ParamByName(‘Name‘).Value:=s2;
if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;
Parameters.ParamByName(‘Grade‘).Value:=s3;
open;
if FieldValues[‘EmployeeID‘]NULL
then findempform.Close
file://在找到记录的情况下关闭查找窗口
else
begin
MessageDlg(‘没有找到你所需要的记录!‘,mtInformation,[mbOK],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
close; SQL.Clear;
SQL.Add(‘select * from Employee‘);
file://刷新员工信息窗口
open;
end; end;
end;
§5.6 系统登陆窗体模块的实现
由于系统登陆窗体中有一幅彩图,在这里不便给出,而只给出了系统的实现。
var keyname: string; file://定义了一个全局变量,在key2中有调用
procedure Tkeyform.SpeedButton1Click(Sender: TObject);
var s:string;
file://登陆窗口登陆按钮事件
begin
if (Edit1.Text=‘‘) then begin
MessageDlg(‘清输入登陆姓名和密码!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
datamoduleform.KeyTable.Active:=true;
if not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判断登陆名是否存在
then begin
MessageDlg(‘登陆名错误,请重新输入!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘; Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if sEdit2.Text file://判断登陆密码是否正确
then begin
MessageDlg(‘登陆密码错误,请重新输入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘; Edit2.SetFocus;
end
else begin
keyname:=Edit1.Text;
keyform.Hide;
mainform.Show;mainform.WindowState:=wsMaximized;
end; end; end;
end;
§5.7 用户管理功能的实现
5.7.1 用户管理主窗体
图5.7 用户管理主窗体
5.7.2 密码修改窗体模块的实现
图5.8 密码修改窗体
procedure Tkey2form.SpeedButton1Click(Sender: TObject);
begin
file://密码修改窗口修改按钮事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘请输入完整的信息。‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyNo‘,Edit1.Text,[])
then begin
MessageDlg(‘原密码输入错误,不能修改新密码!‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘两次密码输入不同,请重新输入新密码!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://在数据库中修改密码
with datamoduleform.KeyQuery do
begin
close; SQL.Clear;
SQL.Add(‘update key set KeyNo=:KeyNo where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=keyname;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
MessageDlg(‘密码修改成功!‘,mtInformation,[mbok],0);
key2form.Close;
end; end; end; end;
end;
5.7.3 用户注册窗体模块的实现
图5.9 用户注册窗体
procedure Tkey3form.SpeedButton1Click(Sender: TObject);
begin
file://用户注删窗口注删按钮事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)or(Edit3.Text=‘‘)
then begin
MessageDlg(‘请输入完整的信息!‘,mtInformation,[mbok],0);
Edit1.SetFocus;
end
else begin
if datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判断用户名是否存在,系统不允许用户名重复
then begin
MessageDlg(‘用户名已存在,请输入新的用户名和密码!‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end
else begin
if Edit2.TextEdit3.Text
then begin
MessageDlg(‘您输入的两个密码不相同,请重新输入!‘,mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit2.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
file://在数据库中添加该用户
begin
close;
SQL.Clear;
SQL.Add(‘insert into Key values(:KeyName,:KeyNo)‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
Parameters.ParamByName(‘KeyNo‘).Value:=Edit2.Text;
execSQL;
end;
MessageDlg(‘新用户添加成功,您可以继续添加用户,或按“取消”退出。‘,mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;
5.7.4 用户注销窗体模块的实现
图5.10 用户注销窗体
procedure Tkey4form.SpeedButton1Click(Sender: TObject);
var s:string;
begin
file://用户注销窗口注销按钮事件
if (Edit1.Text=‘‘)or(Edit2.Text=‘‘)
then MessageDlg(‘请输入完整的信息!‘,mtInformation,[mbok],0)
else begin
if Not datamoduleform.KeyTable.Locate(‘KeyName‘,Edit1.Text,[])
file://判断用户名是否存在,用户名必须存在,才可以删除
then begin
MessageDlg(‘您所输入的用户名不存在,请重新输入或按“取消”退出。‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end
else begin
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘select * from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
open;
s:=FieldValues[‘KeyNo‘];
end;
if sEdit2.Text file://判断该用户名下的密码是否正确
then begin
MessageDlg(‘您所输入的密码不正确,请重新输入或按“取消”退出。‘,
mtInformation,[mbok],0);
Edit2.Text:=‘‘;Edit2.SetFocus;
end
else begin
file://从数据库中删除该用户
with datamoduleform.KeyQuery do
begin
close;
SQL.Clear;
SQL.Add(‘delete from Key where KeyName=:KeyName‘);
Parameters.ParamByName(‘KeyName‘).Value:=Edit1.Text;
execSQL;
end;
MessageDlg(‘用户已成功删除,您可以继续删除用户,或按“取消”退出。‘,
mtInformation,[mbok],0);
Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit1.SetFocus;
end; end; end;
end;
结束语
本系统是一个面向小型图书企业,具有一定实用性的数据库信息管理系统。它主要完成对图书仓库的一系列管理,包括入库、出库、库存以及员工和供应商信息管理。本系统采用当前流行的面向对象的开发工具—Delphi来完成整个系统的设计,在数据库的设计上利用了Access的便利性和实用性。
本系统具有相当的实用功能。在查询方面,系统实现了多条件任意字段的模糊查询,同时在分类查询上实现了动态生成,系统可以自动识别用户不同的输入。在图书入库、出库和库存三者之间建立了良好的链接关系,某一部分地修改均会自动引发系统对与其相关的部分进行连锁修改。在用户管理方面,系统较好地实现了用户注册,用户注销和密码修改等各项功能。
系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关Delphi许多细节问题都要靠自己去摸索,加之本人水平有限,并没有完全地理解Delphi的强大功能,而且还存在着许多不足之处。如:
受开发条件和开发时间的限制,本系统只利用了本地数据库Access,它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有发挥出Delphi其数据库方面的优势;
报表打印功能尚不够全面完善,不能实现动态报表;
在一些数据输入时没有及时的进行数据格式校验,不能保证数据输入的绝对正确性。
由于时间关系,系统功能实现不够完善,使用不是很方便,比如,没有实现多条记录的连锁删除和添加以及数据的导入功能。
这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要我进行不断地补充和完善。
通过本次毕业设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
考 文 献
[1] 郑荣贵、黄平、谷会东,Delphi 6.0数据库开发与应用,中科多媒体电子出版社,2002
[2] 伍俊良,Delphi 6控件应用实例教程,北京希望电子出版社,2002
[3] 卢国俊,Delphi 6数据库开发,电子工业出版社,2002
[4] 边萌,Delphi 编程起步,机械工业出版社,2002