• 612.00 KB
  • 2022-04-22 13:43:08 发布

分布式网络考试系统原型分析及实现毕业论文.doc

  • 50页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'分布式网络考试系统原型分析及实现/火焰晨晨分布式网络考试系统原型分析及实现毕业论文目录分布式网络考试系统原型分析及实现11.问题定义42.需求分析42.1.系统目标42.2.可行性分析42.2.1.现有的数据库应用程序的分层结构42.2.1.1.传统二层结构42.2.1.2.三层数据库应用结构52.2.1.3.多层分布式数据库系统52.2.2.网络分布式多层应用系统62.2.3.XML语言72.3.本系统的方案选择82.4.建模工具的选择83.基于UML的系统分析83.1.用例图83.1.1.用户关系图83.1.2.系统用例图93.1.3.用例图利用情况清单93.2.顺序图103.2.1.老师活动顺序图103.2.2.学生活动顺序图113.2.3.动作清单113.2.4.通讯清单123.3.类图133.3.1.类图一133.3.2.类图二133.3.3.类清单143.3.4.类方法清单143.4.网站页面布置图164.数据库的分析设计174.1.数据库概念模型(ConceptualDataModel)174.1.1.图174.1.2.资料清单174.1.3.实体清单184.1.4.实体的识别字清单184.1.5.关系清单194.2.数据库物理模型(PhysicalDataModel)194.2.1.图19-50- 分布式网络考试系统原型分析及实现/火焰晨晨4.2.2.物理模型栏位清单194.2.3.表格索引清单204.2.4.表格引键清单214.2.5.参考清单214.2.6.表格清单214.3.SQL语句215.系统实现265.1.开发平台的选择265.2.编程工具的选择275.3.XML和网页编辑工具的选择275.4.系统编码275.4.1.源程序文件清单275.4.1.1.网站文件清单:275.4.1.2.COM+组件源程序文件清单285.4.2.程序核心代码295.4.2.1.学生进行考试页面的XLST文件:Testing.xsl295.4.2.2.定制ASP对象主代码325.4.2.3.学生对象COM+组件主代码405.4.2.4.老师对象COM+组件主代码475.4.2.5.管理员COM+组件主代码505.4.3.程序运行截图535.4.3.1.登录页面(系统主界面)535.4.3.2.学生维护页主界面545.4.3.3.学生修改个人资料页面555.4.3.4.学生查询成绩页面565.4.3.5.学生参加考试页面575.4.3.6.进行考试页面585.4.3.7.老师维护页主界面595.4.3.8.老师生成试卷页面605.4.3.9.老师修改个人资料页面615.4.3.10.管理员维护页主界面625.4.3.11.管理员增加老师页面635.4.3.12.管理员增加学生页面645.4.3.13.管理员修改密码页面656.系统安装分发656.1.数据库的设置656.2.配置COM+环境676.3.IIS的配置686.4.注意事项687.系统不足与展望688.致谢699.参考文献69-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.问题定义现在网络正在改变着传统的教育方式,网络教育也越来越多,就算是传统的教育方式下,把考试搬到网络上也是一种趋势。考试的无纸化网络化不仅能有效减少老师的工作量,很好的利用计算机的优势,提高工作效率,也能使考试更加公平、公正。所以就一定要构建一个性能良好安全可靠的可以满足大量学生同时使用的网络考试系统。本原型系统主要功能如下:1.学生可以在网上进行考试,考试结束后由计算机批改试题给出分数,并记录成绩。2.学生在还可以在网上查询自己的考试成绩,修改密码等个人资料。3.老师可以在网上出题,修改密码等个人资料。4.管理员可以在网上建立学生、老师等用户。2.需求分析2.1.系统目标本网络考试系统应该能满足学校几千学生在任何地方、任何时间都能参加考试。本系统要让学生、老师和管理员在网络上可以维护自己的个人资料。学生也可以在网络上通过本系统查询自己考试的成绩;老师能通过网络生成试卷;管理员在网络上通过本系统增加学生和老师;另外为了让考试比较公平,试卷的试题由计算机随机从题库抽取。2.2.可行性分析2.2.1.现有的数据库应用程序的分层结构2.2.1.1.传统二层结构传统的二层式程序,也就是客户/服务器(Client/Server)结构,这种程序相对简单、清楚、开发容易,其结构如图1。客户机都通过网络连接到同一个数据库上,不过这样结构问题很多,最主要的就是性能较差维护困难已经不适应在因特网(Internet)上使用。数据同一性和完整性难以控制。同时由于每一个客户机都必须安装特定的软件,且这种客户端软件体积还比较大,用户使用起来非常不方便,所以目前已经面临淘汰。不过这样的系统开发比较简单,对开发人员的技术要求也不高,在内部局域网上使用还有一定的市场。-50- 分布式网络考试系统原型分析及实现/火焰晨晨(图1)1.1.1.1.三层数据库应用结构三层结构是目前用得最多的,这种结构比传统的C/S结构增加了一个应用程序服务器,应用程序服务器包括了统一的界面、业务规则和数据处理逻辑等等,这样客户端程序就可以做得比较小,也就是常说的瘦客户,更由于业务规则和数据处理逻辑的集中在服务器上统一管理,客户端无须进行复杂的计算,也不会因为错误的操作而影响到其他的用户,所以他的可靠性、稳定性和效率都比较好。当然开发这样的系统在技术上和成本上要求就要多一些。(其结构如图2)图21.1.1.2.多层分布式数据库系统近年来随着因特网的快速发展,许多企业都开始上网,因此基于网络的营销系统、MIS系统、ERP系统都快速发展起来了,这个时候仅仅三层的应用程序已经不能满足实际需求了。因此又发展出来了多层分布式的数据库系统。在多层分布式系统中,人们把中间的应用服务器再拆分为很多比较小的系统,均匀分散到多台计算机中处理,这样就能得到更好的性能并且降低了程序复杂度。在多层分布式数据库系统中必须要有一个所谓的中间件来支持和管理分散的业务处理程序。在Windows平台下微软公司推出了的WindowsDNA(DistributedinterNetApplicationArchitecture,分布式网络应用结构)策略。把COM+作为Windows-50- 分布式网络考试系统原型分析及实现/火焰晨晨DNA策略中的中间件。在Windows2000以上操作系统中,COM+成为了系统的一部分。COM+为中间层提供了负载平衡、对象池(ObjectPooling)、事务特性等一系列的强力支持,并且在COM+中工作的程序受到操作系统的保护,从而最大的保证了系统的安全、稳定和高效。当然开发这样的系统要求开发人员必须掌握COM(ComponentObjectModel,组件对象模型)和COM+技术,开发难度和成本更大了。图31.1.1.网络分布式多层应用系统近几年来因特网飞速发展,人们的生活因为网络而在慢慢的改变。现在的个人电脑(PC)上都安装了浏览器(Browser)因此人们就利用浏览器来作为客户端程序,万维网服务器(WebServer)作为中间层和客户端沟通服务器,这就是现在流行的B/S(Browser/Server)结构方式。在这种结构下,本地的计算机无须安装任何客户端程序,只要有浏览器,可以使用因特网就可以使用系统了。他不仅仅减少了开发客户端带来的成本,最关键的是,大大减少了系统维护的成本和时间,当修改系统的时候不需要对客户做任何的改动。并且客户也可以在任何计算机上使用你的系统而不要做特别的设置。在B/S系统中以微软公司的IE浏览器、和IIS/ASP(InternetInformationServer/ActiveServerPages)服务器应用最为广泛,使用最方便,对中文的支持也是最好的。但是,ASP有一个天生的缺点,就是ASP代码是采用的VBScript、JScript或者PHP等脚本语言编写,运行速度相当的慢,而且和HTML代码是混在一起的,使ASP程序员既需要考虑与数据库打交道,又需要关心如何与HTML配合,有时还需要用ASP直接生成HTML代码。这样构建起来的系统当然是不能满足中、大型网络应用的需要。不过好在ASP可以通过脚本语言调用基于COM的程序,而得到功能和性能上的提升。在微软公司最新的IIS5.0系统上更可以让我们使用VC++、VB、Delphi等开发工具建立定制的运行于COM+环境中的ASP对象,这种对象,还可以和其他的COM+组件协同工作。这样一来我们就可以用B/S方式构建多层分布式的应用系统来满足大型网络应用。-50- 分布式网络考试系统原型分析及实现/火焰晨晨这也就是微软公司所推出的Web分布式多层应用程序结构(其结构如图4)也就是我们常听到的WindowsDNA策略(WindowsDistributedinternetApplicationArchitecture,视窗系统分布式网络应用结构)。不过开发这样的系统需要开发人员掌握更多的技术,如:ASP、VBScript、JavaScript、HTML/DHTML、ADO、COM/DCOM、MTS/COM+等等,同时学习这么多的技术这对程序员来说是一个不小的挑战!图41.1.1.XML语言XML(eXtendedMarkupLanguage)是一种标记语言,就象我们熟悉的HTML一样,但是XML的标签是由人们根据自己的需要来定制的,也就是说,任何词和字都可以做为标签来用,只要能准确的表达数据的属性。例如当我们要表达一个人的姓名的时候用HTML也许我们会这样做:“

张三

”,但如果用XML我们就可以这样做:“<姓名>张三”。数据表达的准确性XML绝对比HTML好多了!准确表达数据的含义这就是XML带来的最大好处。有了XML,我们就能定制各行各业的XML标签,这样对于要传输的数据就能用文本方式传送,并且只要对方有一份标签的定义文件就可以理解我们所表达的意思,从而在任何程序之间,不管他是用什么语言编写的;任何系统之间,不管他是运行在什么CPU上的,是Windows、Linux还是MACOS;任何人之间,无论他是什么国籍,说什么语言,是否懂得你的语言,自由交换信息了。而这些正适应了目前因特网的发展,适应了人们沟通交流的需要。XML出现短短几年就得到了广泛的应用,目前新推出的软件几乎都会支持XML。例如微软的DotNet系列软件、Office系列软件等等。不出几年,XML就会代替HTML成为因特网上标准的标记语言。-50- 分布式网络考试系统原型分析及实现/火焰晨晨本系统引入XML语言表达数据的好处是使得系统中网页的显示和系统处理的数据分离,可以使系统不必去处理那些用于网页界面的代码,减小开发系统的复杂度,减少系统处理时间,减少网络传送量,从而提高效率。另外我们知道目前一般程序员开发网站的时候都要同时完成网页的制作,但一般来说程序员都不可能设计出比专业的美工还好的网页来。不过请来专业美工后怎么和程序员进行合作呢?懂程序开发的美工可不会太多。而XML就比较好的解决了这个问题,他使程序员不必去做网页,网页设计者不用去管程序。只要定义好XML标签,程序员就可以用他来表示数据,而设计网页的也可以用他来制作网页。1.1.本系统的方案选择本系统应用于因特网,并且要满足一个学校几千学生考试的需要,因此本系统决定采用微软公司所推出的Web分布式多层应用程序结构,并且数据使用XML表示。1.2.建模工具的选择以UML语言建模应该是以Rational公司的Rose工具为最好。不过Rose太贵了,并且Rose比较庞大,使用不是太方便。Sybase公司出品的PowerDesigner建模工具也支持UML,还提供一个45天的试用版,在数据库建模上也有他独到的地方。因此建模工具就选用PowerDesigner。2.基于UML的系统分析2.1.用例图2.1.1.用户关系图-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.系统用例图1.1.2.用例图利用情况清单名称代码父选择考试ChoseTestObject-OrientedModel"网络考试系统(OOM)"登录LoginObject-OrientedModel"网络考试系统(OOM)"维护题库WHTKObject-OrientedModel"网络考试系统(OOM)"生成考试shchkshObject-OrientedModel"网络考试系统(OOM)"查询成绩QueryScoreObject-OrientedModel"网络考试系统(OOM)"管理老师账号CreateTeacherObject-OrientedModel"网络考试系统(OOM)"管理学生账户CreateStudentObject-OrientedModel"网络考试系统(OOM)"更新老师的资料UpDateTeacherObject-OrientedModel"网络考试系统(OOM)"更新学生的资料UpDateStudentObject-OrientedModel"网络考试系统(OOM)"修改管理员的密码UpDateAdminObject-OrientedModel"网络考试系统(OOM)"-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.顺序图1.1.1.老师活动顺序图-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.学生活动顺序图1.1.2.动作清单名称代码父学生StudentObject-OrientedModel"网络考试系统(OOM)"老师TeacherObject-OrientedModel"网络考试系统(OOM)"-50- 分布式网络考试系统原型分析及实现/火焰晨晨管理员AdminObject-OrientedModel"网络考试系统(OOM)"用户UserObject-OrientedModel"网络考试系统(OOM)"1.1.1.通讯清单名称代码父接收者输送者确认TrueObject-OrientedModel"网络考试系统学生密码登录LoginObject-OrientedModel"网络考试系统密码学生查询成绩QueryScoreObject-OrientedModel"网络考试系统(OOM)"试卷学生参加考试TestingObject-OrientedModel"网络考试系统(OOM)"试卷学生提交回答SubmitObject-OrientedModel"网络考试系统(OOM)"试题试卷返回成绩ReScoreObject-OrientedModel"网络考试系统(OOM)"试卷试题返回成绩ReScoreObject-OrientedModel"网络考试系统(OOM)"学生试卷登录LoginObject-OrientedModel"网络考试系统(OOM)"密码老师生成试卷CreatePaperObject-OrientedModel"网络考试系统(OOM)"试卷老师维护weihuObject-OrientedModel"网络考试系统(OOM)"学生老师请求试题GetQuestionObject-OrientedModel"网络考试系统(OOM)"试题试卷返回试题ReQuestionsObject-OrientedModel"网络考试系统(OOM)"试卷试题确认SureObject-OrientedModel"网络考试系统(OOM)"老师密码确认考生SureObject-OrientedModel"网络考试系统(OOM)"试卷试卷考试成绩ScoreObject-OrientedModel"网络考试系统(OOM)"学生试卷记录成绩WriteScoreObject-OrientedModel"网络考试系统(OOM)"试卷试卷-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.类图1.1.1.类图一1.1.2.类图二-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.类清单名称代码父产生可见性抽象类别类型密码PWDPackage"数据存取组件"TRUEpublicFALSEClass试题QuestionsPackage"数据存取组件"TRUEpublicFALSEClass试卷PaperPackage"数据存取组件"TRUEpublicFALSEClass学生StudentsPackage"数据存取组件"TRUEpublicFALSEClass老师TeacherPackage"数据存取组件"TRUEpublicFALSEClass用户UsersPackage"数据存取组件"TRUEpublicFALSEClass管理员AdminPackage"数据存取组件"TRUEpublicFALSEClass1.1.2.类方法清单名称代码结果类型可见性抽象最终点静态量詞登录LoginvoidpublicFALSEFALSEFALSE密码修改UpDatevoidpublicFALSEFALSEFALSE密码修改UpDatavoidpublicFALSEFALSEFALSE试题增加AddvoidpublicFALSEFALSEFALSE试题删除DelvoidpublicFALSEFALSEFALSE试题查询成绩QueryScorevoidpublicFALSEFALSEFALSE试卷生成试卷CreatePapervoidpublicFALSEFALSEFALSE试卷评分PutScorevoidpublicFALSEFALSEFALSE试卷取得试题GetPapervoidprivateFALSEFALSEFALSE试卷修改UpDatevoidpublicFALSEFALSEFALSE学生增加AddvoidpublicFALSEFALSEFALSE学生-50- 分布式网络考试系统原型分析及实现/火焰晨晨删除DelvoidpublicFALSEFALSEFALSE学生登录LoginvoidpublicFALSEFALSEFALSE学生进行考试TestingvoidpublicFALSEFALSEFALSE学生批改试卷CheckPapervoidpublicFALSEFALSEFALSE学生修改EditvoidpublicFALSEFALSEFALSE老师增加AddvoidpublicFALSEFALSEFALSE老师删除DelvoidpublicFALSEFALSEFALSE老师登录LoginvoidpublicFALSEFALSEFALSE老师修改UpDatevoidpublicFALSEFALSEFALSE用户增加AddvoidpublicFALSEFALSEFALSE用户删除DelvoidpublicFALSEFALSEFALSE用户登录LoginvoidpublicFALSEFALSEFALSE用户修改自己密码UpDatevoidpublicFALSEFALSEFALSE管理员增加用户AddvoidpublicFALSEFALSEFALSE管理员删除用户DelvoidpublicFALSEFALSEFALSE管理员登录LoginvoidpublicFALSEFALSEFALSE管理员注:因为所使用的PowerDesigner并不支持Delphi所使用的ObjectPascal编程语言,所以类的分析中省略了参数返回值等内容。-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.网站页面布置图注:密码验证构件分别为老师、学生、管理员三个构件的登录(Login)方法调用-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.数据库的分析设计1.1.数据库概念模型(ConceptualDataModel)1.1.1.图1.1.2.资料清单名称代码定义域数据类型长度精确度答案AnswerA11选项4Select4VA100100电子邮件EmailVA3535电子邮件EmailVA3535选项3Select3VA100100选项2Select2VA100100选项1Select1VA100100问题QuestionVA200200-50- 分布式网络考试系统原型分析及实现/火焰晨晨问题号QuestionIDNO成绩ScoreSI流水号IDNO入学时间EnterTimeDT性别SexA22年龄AgeSI学号StudentIDA1010科目SubjectVA5050密码PWDA1616姓名NameA1212老师编号TeacherIDA1010试卷号PaperIDI1.1.1.实体清单名称代码父产生管理员AdminConceptualDataModel"NetTest(CDM)"TRUE老师TeachersConceptualDataModel"NetTest(CDM)"TRUE学生StudentsConceptualDataModel"NetTest(CDM)"TRUE试卷PapersConceptualDataModel"NetTest(CDM)"TRUE试题QuestionsConceptualDataModel"NetTest(CDM)"TRUE1.1.2.实体的识别字清单名称代码父姓名Key_NameEntity"管理员"老师编号PK_TeacherIDEntity"老师"学号PK_StudentIDEntity"学生"流水号PK_IDEntity"试卷"问题号PK_QuestionIDEntity"试题"-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.关系清单名称代码父实体2实体1参加考试TestingConceptualDataModel"NetTest(CDM)"试卷学生生成CreateConceptualDataModel"NetTest(CDM)"试卷老师1.2.数据库物理模型(PhysicalDataModel)1.2.1.图1.2.2.物理模型栏位清单名称代码老师编号TeacherID姓名Name密码PWD科目Subject电子邮件Email-50- 分布式网络考试系统原型分析及实现/火焰晨晨学号StudentID姓名Name年龄Age性别Sex入学时间EnterTime密码PWD电子邮件Email流水号ID老师编号TeacherID学号StudentID试卷号PaperID科目Subject成绩Score问题号QuestionID科目Subject问题Question选项1Select1选项2Select2选项3Select3选项4Select4答案Answer姓名Name密码PWD1.1.1.表格索引清单名称代码唯一的群主要的外来键代替键表格姓名Index_NameFALSEFALSEFALSEFALSEFALSE老师姓名Index_NameTRUETRUETRUEFALSEFALSE学生学号Index_StudentIDFALSEFALSEFALSETRUEFALSE试卷科目Index_SubjectIDFALSEFALSEFALSEFALSEFALSE试题姓名Index_NameFALSEFALSEFALSEFALSEFALSE管理员-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.表格引键清单名称代码表格老师编号PK_TeacherID老师学号PK_StudentID学生流水号PK_ID试卷问题号PK_QuestionID试题姓名Key_Name管理员1.1.2.参考清单名称代码父表格子表格参加考试Testing学生试卷生成Create老师试卷1.1.3.表格清单名称代码老师Teachers学生Students试卷Papers试题Questions管理员Admin1.2.SQL语句/*==============================================================*//*Databasename:NetTest(PDM)*//*DBMSname:MicrosoftSQLServer2000*//*Createdon:2002-6-1111:28:20*//*==============================================================*/altertableNetTest.PapersdropconstraintFK_PAPERS_CREATE_TEACHERSgo-50- 分布式网络考试系统原型分析及实现/火焰晨晨altertableNetTest.PapersdropconstraintFK_PAPERS_TESTING_STUDENTSgoifexists(select1fromsysindexeswhereid=object_id("NetTest.Admin")andname="Index_Name"andindid>0andindid<255)dropindexNetTest.Admin.Index_Namegoifexists(select1fromsysindexeswhereid=object_id("NetTest.Papers")andname="Index_StudentID"andindid>0andindid<255)dropindexNetTest.Papers.Index_StudentIDgoifexists(select1fromsysindexeswhereid=object_id("NetTest.Questions")andname="Index_SubjectID"andindid>0andindid<255)dropindexNetTest.Questions.Index_SubjectIDgoifexists(select1fromsysindexeswhereid=object_id("NetTest.Teachers")andname="Index_Name"andindid>0andindid<255)dropindexNetTest.Teachers.Index_Namego-50- 分布式网络考试系统原型分析及实现/火焰晨晨ifexists(select1fromsysobjectswhereid=object_id("NetTest.Admin")andtype="U")droptableNetTest.Admingoifexists(select1fromsysobjectswhereid=object_id("NetTest.Papers")andtype="U")droptableNetTest.Papersgoifexists(select1fromsysobjectswhereid=object_id("NetTest.Questions")andtype="U")droptableNetTest.Questionsgoifexists(select1fromsysobjectswhereid=object_id("NetTest.Students")andtype="U")droptableNetTest.Studentsgoifexists(select1fromsysobjectswhereid=object_id("NetTest.Teachers")andtype="U")droptableNetTest.Teachersgo/*==============================================================*//*Table:Admin*/-50- 分布式网络考试系统原型分析及实现/火焰晨晨/*==============================================================*/createtableNetTest.Admin(Namechar(12)notnull,PWDchar(16)notnull,constraintPK_ADMINprimarykey(Name))go/*==============================================================*//*Index:Index_Name*//*==============================================================*/createindexIndex_NameonNetTest.Admin(Name)go/*==============================================================*//*Table:Papers*//*==============================================================*/createtableNetTest.Papers(IDbigintidentity,TeacherIDchar(10)notnull,StudentIDchar(10)notnull,PaperIDintnotnull,Subjectvarchar(50)notnull,ScoresmallintnullconstraintCKC_SCORE_PAPERScheck(Scoreisnullor(Score>=0)),constraintPK_PAPERSprimarykey(ID))go/*==============================================================*//*Index:Index_StudentID*//*==============================================================*/createindexIndex_StudentIDonNetTest.Papers(StudentID)go/*==============================================================*/-50- 分布式网络考试系统原型分析及实现/火焰晨晨/*Table:Questions*//*==============================================================*/createtableNetTest.Questions(QuestionIDbigintidentity,Subjectvarchar(50)notnull,Questionvarchar(200)notnull,Select1varchar(100)notnull,Select2varchar(100)notnull,Select3varchar(100)notnull,Select4varchar(100)notnull,Answerchar(1)notnull,constraintPK_QUESTIONSprimarykey(QuestionID))go/*==============================================================*//*Index:Index_SubjectID*//*==============================================================*/createindexIndex_SubjectIDonNetTest.Questions(Subject)go/*==============================================================*//*Table:Students*//*==============================================================*/createtableNetTest.Students(StudentIDchar(10)notnull,Namechar(12)notnull,AgesmallintnotnullconstraintCKC_AGE_STUDENTScheck(Agebetween0and100),Sexchar(2)notnull,EnterTimedatetimenotnull,PWDchar(16)notnull,Emailvarchar(35)null,constraintPK_STUDENTSprimarykey(StudentID))go/*==============================================================*//*Table:Teachers*/-50- 分布式网络考试系统原型分析及实现/火焰晨晨/*==============================================================*/createtableNetTest.Teachers(TeacherIDchar(10)notnull,Namechar(12)notnull,PWDchar(16)notnull,Subjectvarchar(50)notnull,Emailvarchar(35)null,constraintPK_TEACHERSprimarykey(TeacherID))go/*==============================================================*//*Index:Index_Name*//*==============================================================*/createindexIndex_NameonNetTest.Teachers(Name)goaltertableNetTest.PapersaddconstraintFK_PAPERS_CREATE_TEACHERSforeignkey(TeacherID)referencesNetTest.Teachers(TeacherID)goaltertableNetTest.PapersaddconstraintFK_PAPERS_TESTING_STUDENTSforeignkey(StudentID)referencesNetTest.Students(StudentID)go1.系统实现1.1.开发平台的选择本系统由于是采用的微软公司所推出的分布式Web应用构架,所以开发平台使用了Windows2000,数据库选用SQL-50- 分布式网络考试系统原型分析及实现/火焰晨晨Server2000,Web服务器程序使用IIS5.0。由于使用了XML,所以客户端必须是IE5.0以上版本的浏览器才能正常使用本系统。1.1.编程工具的选择目前比较流行的开发工具VC++、VB和Delphi等都可以实现本程序的中间件COM+程序的开发。使用VC++可以得到最好的速度,最大的灵活性,最强大的功能,但使用VC++开发系统所要花费的时间和开发成本足以抵消掉他所带来的好处;使用VB来开发花费的时间是少了,可是VB是解释性的语言,这样的系统运行速度会比VC++开发的相同的系统差不少;Delphi是Borland公司出品的Windows下的快速开发工具,具有VB的开发效率和VC++程序的运行速度,所以用来开发本系统是最合适的选择。1.2.XML和网页编辑工具的选择XML的开发工具我试过好几个,可都不理想,不是使用不方便就是对中文的支持不好。最后只能用Windows下的记事本(notepad.exe)手工书写。这样一来效率很底,也许正因为这个原因XML才没有HTML应用多。希望不久以后也能出现比较好用的XML可视化编辑工具。网页的编辑工具比较好选,Dreamweaver功能最强大使用方便,并且他还提供30天试用版,是不二之选。1.3.系统编码1.3.1.源程序文件清单1.3.1.1.网站文件清单:.nettest的目录[.][..][admin]admin.asp[images]index.htmlogin.aspNetTest.asp[student]student.aspstyle.cssSubmitPaper.asp[teacher]teacher.asptest.aspupdate.asp.nettestadmin的目录[.][..]admin.htmcreatestudent.htmcreateteacher.htmupdate.htm4个文件14,685字节.nettestimages的目录-50- 分布式网络考试系统原型分析及实现/火焰晨晨[.][..]bg1.gifmain.gifstudies_02.gif.netteststudent的目录[.][..]QueryScore.xslSelectTest.xslStudent.xslstyle.cssTesting.xslUpDate.htm.nettestteacher的目录[.][..]createpaper.htmcreatequestions.htmteacher.xslUpDate.htm1.1.1.1.COM+组件源程序文件清单1.1.2.程序核心代码因为本系统源代码比较多,在这里就仅仅列出比较重要的核心代码1.1.2.1.学生进行考试页面的XLST文件:Testing.xsl进行考试!

...::: 解放军后勤工程学院网络考试系统 :::....

进行考试
   考试:

AA-50- 分布式网络考试系统原型分析及实现/火焰晨晨BBCCD-50- 分布式网络考试系统原型分析及实现/火焰晨晨D



设计制作(C)火焰晨晨2001-2002
-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.1.定制ASP对象主代码unituMain;{$WARNSYMBOL_PLATFORMOFF}interfaceusesComObj,ActiveX,AspTlb,NetTest_TLB,StdVcl,MTSStu_TLB,MTSTeacher_TLB,MTSAdmin_TLB;typeTNetTestASP=class(TASPMTSObject,INetTestASP)privateprotectedprocedureCopyRight;safecall;procedureLogin;safecall;procedureAdmin;safecall;procedureStudent;safecall;procedureTeacher;safecall;procedureTesting;safecall;procedureUpDate;safecall;procedureSubmitPaper;safecall;end;implementationusesComServ;constxmlTitle:WideString="";xsltS:WideString="";xsltSQS:WideString="";xsltSST:WideString="";xsltST:WideString="";-50- 分布式网络考试系统原型分析及实现/火焰晨晨xsltT:WideString="";procedureTNetTestASP.CopyRight;beginResponse.Write("

本程序由火焰晨晨独立制作,并作为毕业设计"+"
保留所有版权,AllRightsResaved
"+"有任何问题请Email到:chen777@cmmail.com

");end;procedureTNetTestASP.Login;vartmpStr,UserID,tmpResult:WideString;PWD:WideString;Student:IMTSDMStu;Teacher:IMTSDMTeacher;Admin:IMTSDMAdmin;beginUserID:=Request.Form.Item["UserName"];PWD:=Request.Form.Item["PWD"];tmpStr:=Request.Form.Item["Submit"];iftmpStr="学生登录"thenbeginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");tmpResult:=Student.Login(UserID,PWD);if(tmpResult="密码或用户名错误!请重试。")or(tmpResult="数据库读取错误!请和管理员联系!")thenResponse.Write(tmpResult)elsebeginSession.Set_Value("UserType",1);Session.Set_Value("UserID",UserID);Response.Write(xmlTitle+xsltS+tmpResult);end;endelseiftmpStr="老师登录"thenbeginTeacher:=CoMTSDMTeacher.CreateRemote("Sun1980426");tmpResult:=Teacher.Login(UserID,PWD);if(tmpResult="密码或用户名错误!请重试。")or(tmpResult="数据库读取错误!请和管理员联系!")thenResponse.Write(tmpResult)-50- 分布式网络考试系统原型分析及实现/火焰晨晨elsebeginSession.Set_Value("UserType",2);Session.Set_Value("UserID",UserID);Response.Write(xmlTitle+xsltT+tmpResult);end;endelseiftmpStr="管理员登录"thenbeginAdmin:=CoMTSDMAdmin.CreateRemote("Sun1980426");tmpResult:=Admin.Login(PWD);iftmpResult<>"OK"thenResponse.Write(tmpResult)elsebeginSession.Set_Value("UserType",3);Session.Set_Value("UserID","Admin");Response.Redirect("./admin/admin.htm");end;end;end;procedureTNetTestASP.Admin;varSubject,PWD,Email,Age,Sex,Name,tmpStr,EnterTime,TeacherID,StudentID:WideString;UserType:Integer;Admin:IMTSDMAdmin;beginUserType:=Session.Value["UserType"];if3=UserTypethen//管理员begintmpStr:=Request.QueryString.Item["action"];Admin:=CoMTSDMAdmin.CreateRemote("Sun1980426");iftmpStr="CreateStudent"thenbeginStudentID:=Request.Form.Item["StudentID"];PWD:=Request.Form.Item["PWD"];Name:=Request.Form.Item["Name"];Age:=Request.Form.Item["Age"];-50- 分布式网络考试系统原型分析及实现/火焰晨晨Sex:=Request.Form.Item["Sex"];EnterTime:=Request.Form.Item["EnterTime"];Email:=Request.Form.Item["Email"];Response.Write(Admin.CreateStudent(StudentID,Name,Sex,Age,EnterTime,Email,PWD));endelseiftmpStr="CreateTeacher"thenbeginTeacherID:=Request.Form.Item["TeacherID"];PWD:=Request.Form.Item["PWD"];Name:=Request.Form.Item["Name"];Subject:=Request.Form.Item["Subject"];Email:=Request.Form.Item["Email"];Response.Write(Admin.CreateTeacher(TeacherID,Name,Subject,PWD,Email));end;end;end;procedureTNetTestASP.Student;varStudent:IMTSDMStu;tmpStr:WideString;UserType:Integer;beginUserType:=Session.Value["UserType"];ifUserType=1thenbegintmpStr:=Request.QueryString.Item["action"];if"QueryScore"=tmpStrthenbeginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");Response.Write(xmlTitle+xsltSQS+Student.QueryScore(Session.Value["UserID"]));endelseif"GetTest"=tmpStrthenbeginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");-50- 分布式网络考试系统原型分析及实现/火焰晨晨Response.Write(xmlTitle+xsltSST+Student.GetTest(Session.Value["UserID"]));end{elseif"GetStudentData"=tmpStrthenbeginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");Response.Write(xmlTitle+xsltSUD+Student.UpDate(Session.Value["UserID"]),False,"","","");end}elseResponse.Write("错误的请求!");endelseResponse.Write("非法用户!");end;procedureTNetTestASP.Teacher;vartmpStr,UserID,StudentID,PaperID:WideString;UserType:Integer;Teacher:IMTSDMTeacher;begintmpStr:=Request.QueryString.Item["action"];UserType:=Session.Value["UserType"];UserID:=Session.Value["UserID"];if2=UserTypethen//老师beginiftmpStr="CreatePaper"thenbeginTeacher:=CoMTSDMTeacher.CreateRemote("Sun1980426");StudentID:=Request.Form.Item["StudentID"];PaperID:=Request.Form.Item["PaperID"];Response.Write(Teacher.CreatePaper(UserID,StudentID,PaperID));endelseResponse.Write("错误的请求!");endelseResponse.Write("非法用户!");end;procedureTNetTestASP.Testing;var-50- 分布式网络考试系统原型分析及实现/火焰晨晨Student:IMTSDMStu;StudentID,PaperID,Answers:WideString;UserType:Integer;beginUserType:=Session.Value["UserType"];StudentID:=Session.Value["UserID"];ifUserType=1thenbeginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");PaperID:=Request.Form.Item["PaperID"];Session.Set_Value("PaperID",PaperID);Response.Write(xmlTitle+xsltST+Student.GetPaper(StudentID,PaperID,Answers));Session.Set_Value("Answers",Answers);endelseResponse.Write("非法用户!");end;procedureTNetTestASP.UpDate;varSubject,PWD,Email,Age,UserID:OleVariant;UserType:Integer;Student:IMTSDMStu;Teacher:IMTSDMTeacher;Admin:IMTSDMAdmin;beginUserType:=Session.Value["UserType"];UserID:=Session.Value["UserID"];if1=UserTypethen//学生beginStudent:=CoMTSDMStu.CreateRemote("Sun1980426");PWD:=Request.Form.Item["PWD"];Age:=Request.Form.Item["Age"];Email:=Request.Form.Item["Email"];Response.Write(Student.UpDate(UserID,Age,PWD,Email));endelseif2=UserTypethen//老师beginTeacher:=CoMTSDMTeacher.CreateRemote("Sun1980426");PWD:=Request.Form.Item["PWD"];Subject:=Request.Form.Item["Subject"];Email:=Request.Form.Item["Email"];-50- 分布式网络考试系统原型分析及实现/火焰晨晨Response.Write(Teacher.UpDate(UserID,PWD,Subject,Email));endelseif3=UserTypethen//管理员beginAdmin:=CoMTSDMAdmin.CreateRemote("Sun1980426");PWD:=Request.Form.Item["PWD"];Response.Write(Admin.UpDate(PWD));endelseResponse.Write("非法用户!");end;procedureTNetTestASP.SubmitPaper;varAnswers,Answer,UserID,PaperID:WideString;UserType,No:Integer;Score,vNo:OleVariant;Student:IMTSDMStu;beginUserType:=Session.Value["UserType"];Answers:=Session.Value["Answers"];UserID:=Session.Value["UserID"];PaperID:=Session.Value["PaperID"];Score:=0;Answer:="";if1=UserTypethen//学生beginforNo:=1to(Request.Form.Count-1)do//减去提交按钮所占数字beginvNo:=No;Answer:=Request.Form.Item[vNo];ifAnswers[No]=Answer[3]thenbeginScore:=Score+10;end;end;//endforStudent:=CoMTSDMStu.CreateRemote("Sun1980426");Response.Write(Student.SubmitPaper(UserID,PaperID,Score));endelseResponse.Write("非法用户!");-50- 分布式网络考试系统原型分析及实现/火焰晨晨end;initializationTAutoObjectFactory.Create(ComServer,TNetTestASP,Class_NetTestASP,ciMultiInstance,tmApartment);end.1.1.1.1.学生对象COM+组件主代码unituMain;{$WARNSYMBOL_PLATFORMOFF}interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,ComServ,ComObj,VCLCom,StdVcl,bdemts,DataBkr,DBClient,MtsRdm,Mtx,MTSStu_TLB,DB,ADODB;typeTMTSDMStu=class(TMtsDataModule,IMTSDMStu)ADOQuery1:TADOQuery;private//functionCreatePaper(Subject:WideString{Privatedeclarations}protectedclassprocedureUpdateRegistry(Register:Boolean;constClassID,ProgID:string);override;functionGetPaper(constStudentID,PaperID:WideString;outAnswers:WideString):OleVariant;safecall;functionLogin(constStudentID,PWD:WideString):OleVariant;safecall;functionQueryScore(constStudentID:WideString):OleVariant;safecall;functionUpDate(constStudentID,Age,PWD,Email:WideString):OleVariant;safecall;functionGetTest(constStudentID:WideString):OleVariant;safecall;functionSubmitPaper(constStudentID,PaperID,Score:WideString):OleVariant;safecall;public{Publicdeclarations}end;varMTSDMStu:TMTSDMStu;-50- 分布式网络考试系统原型分析及实现/火焰晨晨implementation{$R*.DFM}classprocedureTMTSDMStu.UpdateRegistry(Register:Boolean;constClassID,ProgID:string);beginifRegisterthenbegininheritedUpdateRegistry(Register,ClassID,ProgID);EnableSocketTransport(ClassID);EnableWebTransport(ClassID);endelsebeginDisableSocketTransport(ClassID);DisableWebTransport(ClassID);inheritedUpdateRegistry(Register,ClassID,ProgID);end;end;functionTMTSDMStu.GetPaper(constStudentID,PaperID:WideString;outAnswers:WideString):OleVariant;varI,J,C:Integer;sQuestionID,Subject:WideString;aQuestionID:array[0..9]ofInteger;begin/////////////取考试科目//////////////////////////ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("SELECTSubjectFROMNetTest.PapersWHERE"+"("+"StudentID="+""""+StudentID+""""+")AND(PaperID="+""""+PaperID+""""+")AND("+"ScoreISNULL"+")");ADOQuery1.Active:=True;ifnotADOQuery1.Fields[0].IsNullthenSubject:=ADOQuery1.Fields[0].AsStringelsebeginADOQuery1.Active:=False;Result:="不能重复参加考试!";Exit;end;-50- 分布式网络考试系统原型分析及实现/火焰晨晨ADOQuery1.Active:=False;//////////////取试题条数///////////////////////ADOQuery1.SQL.Clear;ADOQuery1.SQL.Text:="SELECTcount(*)FROMNetTest.QuestionsWHERESubject="+""""+Subject+"""";ADOQuery1.Active:=True;C:=ADOQuery1.Fields[0].AsInteger;ADOQuery1.Active:=False;/////////////随机抽题///////////////////////ADOQuery1.SQL.Clear;I:=1;ifC<10then//题少于10道就全选ADOQuery1.SQL.Add("SELECT*FROMNetTest.QuestionsWHERESubject="+""""+Subject+"""")elsebegin//否则就随机抽题Randomize;aQuestionID[0]:=Random(C);While10>IdobeginaQuestionID[I]:=Random(C);forJ:=0toIdoifaQuestionID[J]=aQuestionID[I]thenBreak;//ifI=JthenInc(I);end;//endwhilesQuestionID:="(QuestionID="+""""+IntToStr(aQuestionID[0])+""""+")";forI:=1to9dosQuestionID:=sQuestionID+"OR(QuestionID="+IntToStr(aQuestionID[I])+")";ADOQuery1.SQL.Add("SELECT*FROMNetTest.QuestionsWHERE(Subject="+""""+Subject+""""+")AND("+sQuestionID+")");-50- 分布式网络考试系统原型分析及实现/火焰晨晨end;//endifsles//////////////////////////////////////ADOQuery1.Active:=True;//Result:=ADOQuery1.SQL.Text;//ADOQuery1.Active:=False;//Answers:="";tryADOQuery1.Active:=True;//////////////建立XML///////////////Result:=""+Subject+"radio";Answers:="";I:=1;WhilenotADOQuery1.EofdobeginResult:=Result+""+IntToStr(I)+""+""+ADOQuery1.Fields[2].AsString+""+ADOQuery1.Fields[3].AsString+""+ADOQuery1.Fields[4].AsString+""+ADOQuery1.Fields[5].AsString+""+ADOQuery1.Fields[6].AsString+"";Answers:=Answers+ADOQuery1.Fields[7].AsString;ADOQuery1.Next;Inc(I);end;Result:=Result+"";exceptADOQuery1.Active:=False;Result:="";end;end;functionTMTSDMStu.Login(constStudentID,PWD:WideString):OleVariant;beginADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("SELECTNameFROMNetTest.StudentsWHERE"+"(StudentID="+""""+StudentID+""""+")"+"AND"+"(PWD="+""""+PWD+""""+")");try-50- 分布式网络考试系统原型分析及实现/火焰晨晨ADOQuery1.Active:=True;ifADOQuery1.Fields[0].IsNullthenResult:="密码或用户名错误!请重试。"elseResult:=""+ADOQuery1.Fields[0].AsString+"";ADOQuery1.Active:=False;exceptADOQuery1.Active:=False;Result:="数据库读取错误!请和管理员联系!";end;end;functionTMTSDMStu.QueryScore(constStudentID:WideString):OleVariant;beginResult:="";ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("SELECTPaperID,Subject,ScoreFROMNetTest.Papers"+"WHERE(StudentID="+""""+StudentID+""""+")AND(Score<>"+""""+""""+")");tryADOQuery1.Active:=True;ifnotADOQuery1.Fields[0].IsNullthenbeginwhilenotADOQuery1.EofdobeginifADOQuery1.Fields[2].AsInteger>60thenResult:=Result+""+ADOQuery1.Fields[0].AsString+""+ADOQuery1.Fields[1].AsString+""+ADOQuery1.Fields[2].AsString+""elseResult:=Result+""+ADOQuery1.Fields[0].AsString+""+ADOQuery1.Fields[1].AsString+""+ADOQuery1.Fields[2].AsString+"";-50- 分布式网络考试系统原型分析及实现/火焰晨晨ADOQuery1.Next;end;//endwhileADOQUery1.Active:=False;end;//endifResult:=Result+"";exceptADOQUery1.Active:=False;Result:="";end;end;functionTMTSDMStu.UpDate(constStudentID,Age,PWD,Email:WideString):OleVariant;beginResult:="更新资料成功,请返回进行其他操作。";ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("UPDATENetTest.StudentsSETAge="+Age+",PWD="+""""+PWD+""""+",Email="+""""+Email+""""+"WHEREStudentID="+""""+StudentID+"""");tryADOQuery1.ExecSQL;exceptADOQUery1.Active:=False;Result:="更新个人资料失败!请重试!";end;ADOQuery1.Active:=False;end;functionTMTSDMStu.GetTest(constStudentID:WideString):OleVariant;begin//取得可以参加的考试ADOQuery1.SQL.Clear;Result:="";ADOQuery1.SQL.Add("SELECTPaperID,SubjectFROMNetTest.PapersWHERE"+"(StudentID="+""""+StudentID+""""+")AND("+"ScoreISNULL)");try-50- 分布式网络考试系统原型分析及实现/火焰晨晨ADOQuery1.Active:=True;ifnotADOQuery1.Fields[0].IsNullthenbeginwhilenotADOQuery1.EofdobeginResult:=Result+""+ADOQuery1.Fields[0].AsString+""+ADOQuery1.Fields[1].AsString+"";ADOQuery1.Next;end;//endwhileend;exceptADOQuery1.Active:=False;Result:="";end;Result:=Result+"";end;functionTMTSDMStu.SubmitPaper(constStudentID,PaperID,Score:WideString):OleVariant;beginADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("SELECTScoreFROMNetTest.PapersWHERE"+"("+"StudentID="+""""+StudentID+""""+")AND(PaperID="+""""+PaperID+""""+")");ADOQuery1.Active:=True;ifADOQuery1.Fields[0].IsNullthenbeginADOQuery1.Active:=False;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add("UPDATENetTest.PapersSETScore="+Score+"WHERE"+"("+"StudentID="+""""+StudentID+""""+")AND(PaperID="+""""+PaperID+""""+")");tryADOQuery1.ExecSQL;ADOQuery1.Active:=False;Result:="你的成绩是

"+Score+"

请返回进行其他操作。";except-50- 分布式网络考试系统原型分析及实现/火焰晨晨ADOQuery1.Active:=False;Result:="成绩写入失败,请与管理员联系!";end;endelseResult:="请不要重复参加考试!";end;initializationTComponentFactory.Create(ComServer,TMTSDMStu,Class_MTSDMStu,ciMultiInstance,tmApartment);end.-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.1.1.老师对象COM+组件主代码1.1.1.2.管理员COM+组件主代码1.1.2.程序运行截图1.1.2.1.登录页面(系统主界面)1.1.2.2.学生维护页主界面1.1.2.3.学生修改个人资料页面1.1.2.4.学生查询成绩页面1.1.2.5.学生参加考试页面1.1.2.6.进行考试页面1.1.2.7.老师维护页主界面1.1.2.8.老师生成试卷页面1.1.2.9.老师修改个人资料页面1.1.2.10.管理员维护页主界面1.1.2.11.管理员增加老师页面1.1.2.12.管理员增加学生页面1.1.2.13.管理员修改密码页面-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.系统安装分发分布式系统在分发安装的时候比较麻烦,主要是中间件的配置问题,因此单独提出来说明一下。1.1.数据库的设置在SQLServer2000中运行上面所提供的SQL语句,建立数据库表格,再建立一个名为NetTest的新用户,并设置对NetTest表格的权限为db_owner(如下图)密码为123-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.配置COM+环境请建立一个名为NetTest的应用程序,并把本系统的四个组件全导入里面。(如图)-50- 分布式网络考试系统原型分析及实现/火焰晨晨1.1.IIS的配置本系统运行于COM+环境,所以服务器应该采用Windows2000或WindowsXP及以上操作系统,IIS必须是5.0以上。请在IIS中建立名为NetTest的网站。1.2.注意事项由于我开发环境的限制,不能在多台计算机上测试本系统,因此本系统默认是建立在一个名为Sun1980426的计算机上的。所以运行本系统请把您的计算机名改为Sun1980426。当现实应用中使用的时候可以把计算机名或地址放入注册表,在四个COM+组件中用一条API函数动态读出就可以了。2.系统不足与展望本系统限于我的精力、技术和时间,因此要改进的地方比较多,首就是随机生成试卷功能,目前的随机算法比较单纯,在实际使用中,可根据不同的情况结合试卷的难度等信息,采用更复杂更有效的随机算法。再就是可以增加更多的功能,比如成绩的统计,成绩报表的打印等等,我因为时间的关系没有完成。最后就是可以利用目前SQL-50- 分布式网络考试系统原型分析及实现/火焰晨晨Server2000提供的XML直接支持更进一步改进程序性能!可惜Delphi6.0所提供的TADO系列控件缺少ADO的Stream对象,从而不能让我在有限的时间内应用SQLServer2000这一最新特性,很是遗憾,希望以后有机会能加上。1.致谢本文是在**老师的精心指导下完成的。从论文的选题、文章结构的构筑到最后的定稿,都得到了导师的细心指点和提携。导师的严谨治学的作风也让我记忆颇深。在此仅向导师致以最诚挚的谢意。另外要特别感谢网友Ricko和李州的友情帮助,Ricko帮我设计了本系统的封面,而李州为我提供了网页的模版。同时也向关心支持我的家人、同学和朋友致以最衷心的感谢。2.参考文献[1](美)GradyBooch,JamesRumbaugh,IvarJacobson,《UML用户指南》,机械工业出版社,2001年8月[2]Microsoft,MSDN[3]Microsoft,SQLServer2000联机手册[4]Borland,Delphi6.0Help[5]李维,《Delphi5.X分布式多层应用-电子商务篇》,机械工业出版社,2000年5月[6]徐新华,《Delphi5高级编程―COM、CORBA于Internet编程》,人民邮电出版社,2000年5月[7]林锦雀,江高举,《最新XML入门与应用》,中国铁道出版社,2001年11月[8]潘爱民,《COM原理于应用》,清华大学出版社,1999年11月-50-'

您可能关注的文档

相关文档

最近下载