软件项目开发合同5篇

时间:2019-05-13 00:52:45下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《软件项目开发合同》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《软件项目开发合同》。

第一篇:软件项目开发合同

项目开发协议书

甲方:

乙方:

甲、乙双方经友好协商一致,达成以下协议。双方申明,双方都已理解并认可了本协议的所有内容,同意承担各自应承担的权利和义务,忠实地履行本协议。

第九条双方当事人应当保守在履行本协议过程中获知的对方商业秘密。

第十条双方应本着诚实信用的原则履行本协议。任何一方在履行中采用欺诈、胁迫或者暴力的手段,另一方可以解除本协议并有权要求对方赔偿损失。任何一方在履行中发现或者有证据表明对方已经、正在或将要违约,可以终止履行本协议,但应及时通知对方。若对方继续不履行、履行不当或者违反本协议,该方可以解除本协议并要求对方赔偿损失。

第十一条本协议签订后,经双方当事人协商一致,可以对本协议有关条款进行变更或者补充但应当以书面形式确认。上述文件一经签署,即具有法律效力并成为本协议的有效组成部分。

第十二条 本协议附件为本协议不可分割的一部分,与协议正文具有同等法律效力。第十三条 任意一方欲提前解除本协议,应提前通知对方。甲方提前解除协议的,无权要求乙方返还预付费用并应对乙方遭受的损失承担赔偿责任;乙方无故解除协议的,应返还上述费用。本协议其他条款对协议的解除另有约定的,从其约定。

第十四条订立本协议所依据的客观情况发生重大变化,致使本协议无法履行的,经双方协商同意,可以变更本协议相关内容或者终止协议的履行。

第十五条双方当事人对本协议的订立、解释、履行、效力等发生争议的,应友好协商解决;协商不成的,双方同意向仲裁委员会提交仲裁并接受其仲裁规则。

第十六条本协议经由双方授权代表签字,自签订之日起生效。

第十七条本协议一式两份,双方当事人各执一份,具有同等法律效力。

甲方:(授权代表签字)

电话:

地址:

乙方:(授权代表签字)电话: 地址: 签约日期: 签约日期:

附件:开发建设项目工作进度与安排、价款、交付和验收方式

一、开发项目内容:

二、协议金额及付款方式:

1、本协议金额总计:人民币元。

2、付款方式:本协议签订后3日内,甲方向乙方支付协议金额的50%,即___________元预付款,验收之后3日内支付协议余款即_____________元。

三、完成及验收时间:

1、完成时间:乙方收到本附件规定预付款项后日内开发完成。

2、验收期限:甲方在年月日前完成项目的验收,并确认。

3、付款期限:甲方须于年月日前将余款支付给乙方。

四、验收标准和验收后修改补充

1、验收期限为壹星期。

2、验收合格,甲方应以书面方式签收,但甲方在乙方交付工作成果后一周内未书面签收也未提出异议的,视为甲方验收合格。

3、验收合格后,如果甲方在使用过程中需要增加软件模块或功能,乙方可根据改动情况酌情优惠收取模块增加维护费用。

第二篇:APP软件XXX项目开发合同(改)

软件项目外包合同

APP软件项目开发合同

甲方:

地址:

邮编:

联系人:乙方:地址:邮编:联系人:

电话:

传真:

第一条总则电话:传真:开户 银行: 中国银行西安朱雀路支行 帐号: 1036 4443 0271

1)甲方选择乙方为其开发软件系统,乙方将在甲方规定的时间内,根据甲方要为甲方开发

软件系统。

2)甲、乙双方经友好协商,根据《中华人民共和国合同法》等有关法规,就乙方承担甲方

信息系统开发项目事宜,达成以下协议条款。

3)本合同中所用术语的定义如下:

服务

资料

规范

任务 由乙方提供的项目管理、需求分析、软件开发、测试,以及咨询、计划、实施、培训、安装、调试、维护、升级等服务。由乙方向甲方提供的系统说明文件、使用手册等。信息系统在功能、操作、环境及性能等方面要求的周密而完整的说明。为完成“合同范围”所述服务而进行的相关活动。

第二条价格

1)合同总金额为RMB¥万元,计人民币圆整,作为系统的开发费用。

2)甲方向乙方支付的费用,除另有规定外,所有费用的支付币种为人民币(¥),由甲方按本

合同规定的付款方式以电汇或支票划入乙方指定的开户银行帐户中。

第三条变更

1)任何一方要求对合同内容进行变更时,所有的变更要求都必须以书面形式提交并经双方

签字同意。

2)对合同内容的任何变更都可能导致对预定计划、可交付资料或费用的变更。根据变更要

求的范围和复杂程度,乙方应对实现变更要求的工作而相应增加或减少收取费用,并将

第 1 页

预计发生费用以书面形式通知甲方,待甲方确认后执行。第四条知识产权约定

1)除非另有规定,本合同中乙方向甲方售出的产品(包括源码、程序、文件、文档资料),所有权和版权属乙方。未经乙方许可,甲方不得公布文件、源码,不得复制、传播、反编译、出售、出租或者许可他人使用其相关的程序、文件、源码和反编译等。2)乙方保证所售出的产品享有合法的权利,没有侵犯任何第三方的权利。

3)甲方只能按乙方的规定享有相关产品的使用、升级、开发、转让等权利。如果甲方违反乙方的规定和国家法律规定,应承担相关的法律责任。第五条保密

1)双方不得向第三者泄露本协议的任何内容。

2)双方按本合同规定相互提供和提交的全部文件资料,凡涉及需要保密的,以预先说明的有关条款为据。并且任何一方在没有经过另一方书面同意的情况下,不能将另一方的保密资料(如技术资料、用户信息)透露给第三者。第六条合同的解除

1)任意一方欲提前解除本合同,应提前通知对方,经双方协商签字同意后方可解除。甲方

要求解除合同,无权要求乙方返还甲方向乙方已支付的费用,并应对乙方遭受的损失承担赔偿责任;乙方要求解除合同,应返还甲方已支付的费用,并赔偿由此引起甲方的损失。2)订立本合同所依据的客观情况发生重大变化,致使本合同无法履行的,经双方协商同意,可以变更本合同相关内容或者终止合同的履行。第七条违约责任

1)双方在执行本协议过程中,任何一方违反本协议之约定,均为违约。违约方除向守约方

赔偿外,还须承担另一方为取得此等赔偿而支出的所有费用,包括但不限于仲裁费、诉讼费、律师费、差旅费等。2)任一方未能如期履约时,应每天按未能履约部分的0.05%向对方支付违约金。但支付违

约金并不免除违约方的其他合同义务。3)如果任何一方没有实现本合同约定而受到本合同对方索赔时,应分清具体责任部分,确

认该部分的责任方。对于利润损失等其他直接或间接损失(包括商务交易中的双方已告知有发生这方面损失的可能性),由各自承担,相互不承担责任。第八条不可抗力

1)双方因不可抗力的影响不能履行合同,履行合同的时间相应推迟,推迟时间与不可抗力

持续时间相同,合同价格不因此而改变。2)不可抗力发生后,双方要立即通知对方,并采取必要措施密切配合,以减少影响。

3)不可抗力是指**、台风、地震、水灾等以及双方同意的不可预见的情况。第九条通知方式

任何为执行本协议而发出的通知(包括但不限于声明、请求、要求、通知和备忘录等)均应以书面形式作出。双方均负有签收对方发出的通知的义务。如一方拒绝签收,他方仅须提供能够证明其已将有关通知按本协议所列地址交付邮政部门的证据,即可视为有关通知已于交付邮政部门后的第二天送达对方。如一方在收到通知后 三 个工作日内未对对方在通知中陈述的事实或要求提出异议,则应视为该方已承认或接受此等事实或要求。任何一方如变更营业地址,应在此等变更作出后 三 个工作日内通知对方。第十条争议的解决

有关本合同的任何争议,双方应本着相互信任、以诚相见的原则,共同协商解决。若经协商不能达成协议时, 可向西安市仲裁委员会提交仲裁。第十一条 合同效力

1)本合同壹式肆份,甲乙双方各执贰份,自双方签字盖章之日起生效。

2)本合同受《中华人民共和国合同法》保护,未尽事宜,均按《中华人民共和国合同法》

规定执行。3)本合同未尽事宜,双方可另行签订补充协议,补充协议与本合同具有同等效力。第十二条 合同附件

本合同附件是合同不可分割部分,一经签署后具有同等法律效力。附件包括: 附件1 《用户需求书》甲方:

签约代表:职务: 签字:

乙方:

签约代表:职务: 签字:

签约日期:

签约日期:

第三篇:2015软件项目开发计划书

2015软件项目开发计划书

第1篇:软件项目开发计划书模板 项目名称:******** 评审日期: 1引言

1.1编写目的

说明编写这份项目开发计划的目的,并指出预期的读者。1.2背景 说明:

a.待开发的软件系统的名称;

b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络; c.该软件系统同其他系统或其他机构的基本的相互来往关系。1.3定义

列出本文件中用到的专门术语的定义和外文首字母组词的原词组。1.4参考资料

列出用得着的参考资料,如:

a.本项目的经核准的计划任务书或合同、上级机关的批文; b.属于本项目的其他已发表的文件;

c.本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件资料的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。2项目概述 2.1工作内容

简要地说明在本项目的开发中须进行的各项主要工作。2.2主要参加人员

扼要说明参加本项目开发工作的主要人员的情况,包括他们的技术水平。2.3产品 2.3.1程序

列出需移交给用户的程序的名称、所用的编程语言及存储程序的媒体形式,并通过引用有关文件,逐项说明其功能和能力。2.3.2文件

列出需移交给用户的每种文件的名称及内容要点。2.3.3服务

列出需向用户提供的各项服务,如培训安装、维护和运行支持等,应逐项规定开始日期、所提供支持的级别和服务的期限。2.3.4非移交的产品

说明开发集体应向本单位交出但不必向用户移交的产品(文件甚至某些程序)。2.4验收标准

对于上述这些应交出的产品和服务,逐项说明或引用资料说明验收标准。2.5完成项目的最迟期限

2.6本计划的批准者和批准日期 3实施计划

3.1工作任务的分解与人员分工

对于项目开发中需完成的各项工作,从需求分析、设计、实现、测试直到维护,包括文件的编制、审批、打印、分发工作,用户培训工作,软件安装工作等,按层次进行分解,指明每项任务的负责人和参加人员。3.2接口人员

说明负责接口工作的人员及他们的职责,包括: a.负责本项目同用户的接口人员;

b.负责本项目同本单位各管理机构,如合同计划管理部门、财务部门、质量管理部门等的接口人员;

c.负责本项目同各分合同负责单位的接口人员等。3.3进度

对于需求分析、设计、编码实现、测试、移交、培训和安装等工作,给出每项工作任务的预。定开始日期、完成日期及所需资源,规定各项工作任务完成的先后顺序以及表征每项工作任务完成的标志性事件(即所谓“里程碑”)。3.4预算

逐项列出本开发项目所需要的劳务(包括人员的数量和时间)以及经费的预算(包括办公费、差旅费、机时费、资料费、通讯设备和专用设备的租金等)和来源。3.5关键问题

逐项列出能够影响整个项目成败的关键问题、技术难点和风险,指出这些问题对项目的影响。4支持条件

说明为支持本项目的开发所需要的各种条件和设施。4.1计算机系统支持

逐项列出开发中和运行时所需的计算机系统支持,包括计算机、外围设备、通讯设备、模拟器、编译(或汇编)程序、操作系统、数据管理程序包、数据存储能力和测试支持能力等,逐项给出有关到货日期、使用时间的要求。4.2需由用户承担的工作

逐项列出需要用户承担的工作和完成期限。包括需由用户提供的条件及提供时间。4.3由外单位提供的条件

逐项列出需要外单位分合同承包者承担的工作和完成的时间,包括需要由外单位提供的条件和提供的时间。5专题计划要点

说明本项目开发中需制订的各个专题计划(如分合同计划、开发人员培训计划、测试计划、安全保密计划、质量保证计划、配置管理计划、用户培训计划、系统安装计划等)的要点。

第2篇:软件项目开发计划书范文 1.引言

在当今这个网络时代,随着人们物质生活水平的提高,人们也在逐渐的开始追求精神上的生活,即精神享受。无可厚非,网络走进了我们的生活,但随着我们进入社会参加工作,我们的空闲时间越来越少,当然也没有太多时间去关注自己所喜欢的视频,更不用说在线看了,即使有时间在线看,我们又不能看到看到让自己全身放松的视频,究其原因则是:所观看的视频模糊和不流畅。而本软件恰恰解决了这个问题,本软件是自动下载更新软件,能在你不知不觉间自动的下载最新视频,这样一来我们既节约了时间又看到了自己苦苦等待的视频 1.1编写目的

本文档的编写是为了满足客户对各大影视的一些软件需求,以求让喜欢视频的客户对本软件更加满意,并且能够更加的享受生活。1.2背景

待开发的软件系统名称:资源下载辅助系统。

本项目的提出者为章董事,开发者为第二组全体员工,用户为所有喜欢视频的客户。本软件相当于一个插件,配合其他视频播放器、影视或网站使用。说明: 1.3定义

项目开发计划:是一种把项目一定一过程与项目如何推进连接起来的方案。1.4参考资料

以下列出概要设计过程中所使用到的有关资料: 1.软件工程基础 胡飞 高等教育出版社 2015.01 2.软件工程课程设计 郑诚 机械工业出版社 2015.03 2项目概述 2.1工作内容

把软件做成下面的特点:待开发软件自动检查有更新特点的可下载网络资源是否存在更新,如果有更新则获取新资源的下载链接并通过第三方下载软件自动下载。

对用户进行培训,如何让用户能够学会添加、管理提供资源的网站,设定、管理需跟踪下载的资源信息,设定相应的本地资源保存位置以及检查更新周期。这样一来系统就可根据用户设定自动检查更新,将更新通过第三方下载软件下载并保存至用户设定的本地位置。系统监控指定的本地位置,在文件下载完毕时通知用户。2.2主要参加人员

石春光:项目负责人。

王海宏:小组领导兼程序员。田果:技术领导,技术一流。刘栋:小组领导兼程序员。汪世轩:质量、管理领导。2.3产品 2.3.1程序

即是:理出需移交给用户的程序的名称、所用的编程语言及存储程序的媒体形式,并通过引用有关文件,逐项说明其功能和能力。(略)2.3.2文件

所谓文件即是:列出需移交给用户的每种文件的名称及内容要点 2.3.3服务

具体是列出需向用户提供的各项服务,如培训安装、维护和运行支持等,应逐项规定开始日期、所提供支持的级别和服务的期限。2.3.4非移交的产品

说明开发集体应向单位交出但不必向用户移交的产品(文件甚至某些程序)。2.4验收标准

对于上述这些应交出的产品和服务,逐项说明或引用资料说明验收标准。2.5完成项目的原迟用限

待开发软件的原迟用限为六个月。2.6本计划的批准者和批准日期 批准者:章董事 批准日期: 2015年10月18日 3实施计划

3.1工作任务的分配和人员分工

主要就是在需求分析、设计、实现、测试、维护的任务分配 具体来说分配如下: 文件的编制 石春光 审批 王海宏 汪世轩 打印 王海宏

分发工作 田果 刘栋 用户培训工作 刘栋 田果 软件安装工作 汪世轩 3.2接口人员

负责本项目同用户的接口人员:刘栋 负责本项目同本单位各管理机构 合同计划管理部门:石春光 财务部门:王海宏 质量管理部门:田果

负责本项目同各分合同负责单位的接口人员:汪世轩 3.3进度(略)3.4预算

人员的数量:5人 时间:3个月 经费:1万元 3.5关键问题

在软件的开发中,存在的关键问题常见的有以下几种: 项目需求 项目计划 质量控制 进度控制 风险控制 交流与沟通

第3篇:软件项目开发计划书范文 1.引言

1.1编写目的

开发基于互联网的学生选课系统,提高管理工作的效率、提高信息的开放性、改善学生和教师对其最新信息查询的准确性。1.2项目背景

某校在校生近5000人,每学期在期末都要进行一次对学生的学习质量测评,要求所有学生都要参加。以前测评的方式都是手工考核操作,由教务处发出试卷,每个同学填写完成后交回到教务处。然后教务处再使用手工的方法对试卷进行统计汇总,最后得出学生的成绩。

建议进行《学生成绩考核系统》的开发。

我院计算机系具备进行该软件系统开发的能力并承担本软件系统的开发与维护工作。该软件系统由我院教务处使用。1.3定义

《学生成绩考核系统》以下简称《考核系统》。1.4 参考资料

(1)“ 学生成绩考核系统系统定义报告”(2)“ 学生成绩考核系统可行性研究报告” 2.主要内容 2.1 工作内容

系统所需要的基础数据来源:

“考核系统”需要实现的功能包括两大部分:

一是前台的数据采集,具体包括:德育测试页面、体育测试页面、智力测试页面、数据存储页面。

二是后台的数据管理部分:包括测试设置、德育测试、体育测试与智力测试的数据统计及查询。

2.2条件和限制 使用SQL SERVER 2015作为数据库的建设工具,相关的管理程序开发主要使用SQL SERVER 2015及NET等。2.3 产品 2.3.1 程序

可运行的程序包括:SQL SERVER 2015,Microsoft Visual Studio 2015 2.3.2 文档

可行性研究报告,项目开发计划书,软件需求说明书,概要设计说明书,详细设计说明书,数据库设计说明书,操作手册,测试计划,测试分析报告,项目开发总结报告。2.4 运行环境

《学生成绩考核系统》应该运行在Windows XP 以及以上版本的平台上。2.5 验收标准

《学生成绩考核系统》能让学生能成绩考核和查看成绩,教师能管理成绩。3.实施计划 3.1 任务分解 需求分析:

学校每年新生入学,毕业生离校和各种其它变动,如学籍变动,个人信息修改。每学期学校者要开设一定的课程提供给学生根据自己的情况来选择,最后的选择结果要给出学生的课程表。如何有效的管理这些学生信息,帮助学校和老师管理和掌握这些情况,这就是学生信息管理系统需要完成的任务。下面用软件工程的思想和方法完成该系统的设计过程。功能:

个人信息查询和修改,包括流动,注册,更新管理 系统设计:

“中学生成绩管理信息系统”包括四个模块:成绩录入、班级统计、年级统计、系统功能。这五个模块既相互联系又相互独立,班级统计、年级统计模块必须以成绩录入为基础。(1)成绩录入模块:

主要功能用来对中学生的成绩进行收集和修改。具体包括中学生成绩录入、修改、增加、删除、查询、打印等功能,由于一些资料可以Word文档或Excel表格输入,故在此模块中增加了导入、导出数据功能。成绩录入需要分班级、分年级以及某个时间考试的各门功课的成绩。修改要与成绩录入相对应。增加、删除是对基本表的操作。查询条件设置应该齐全,可以班级查询,年级查询,也可以姓名查询,学号查询等等。分成绩单打印、报表打印等。(2)班级统计模块:

主要功能用来对中学生的成绩以班级为单位进行处理。具体包括各班学生总成绩、平均成绩、班级排名及统计班级某分数段内的学生人数;各个学生该科成绩、班级排名及统计班级某分数段内的学生人数。各项统计仅对于某学期某次考试而言。(3)年级统计模块:

主要功能用来对中学生的成绩以年级为单位进行处理。具体包括各年级学生总成绩、年级排名统计年级某分数段内的学生人数;各个学生该科成绩、年级排名及统计、年级某分数段内的学生人数。各项统计仅对于某学期某次考试而言,在统计时,还应注意各年级考试科目不同。

(4)系统功能模块:包括帮助信息,关于系统及退出系统。编码:

测试计划:进行黑盒测试 测试人员: 3.2 进度安排

需求分析: 第1周 系统设计: 第2~3周 编码:第4~7周

测试计划与测试:第8~10周 包装和发布:第11周 机动:第12周 3.3 预算

开发费用:8000元

设备费及其他:5000元 合计:13000元

4.人员组织及分工(略)5.交付期限

6.专题计划要点(详见后续内容)

第四篇:软件项目开发计划

1引言...............................1

1.1编写目的...............................1

1.2 背景...............................1

1.3定义.........................1

1.4参考资料...............................1

2项目概述..............................1

2.1工作内容...............................1

2.2主要参加人员.......................1

2.3产品.........................2

2.3.1程序.........................2

2.3.2文件.........................2

2.3.3服务.........................2

2.3.4非移交的产品.......................2

2.4验收标准...............................2

2.5完成项目的最迟期限.........................2

2.6本计划的批准者和批准日期....................2

3实施计划..............................2

3.1工作任务的分解与人员分工....................2

3.2接口人员...............................3

3.3进度.........................3

3.4预算.........................3

3.5关键问题...............................3

4支持条件..............................3

4.1计算机系统支持..........................3

4.2需由用户承担的工作.........................3

4.3由外单位提供的条件.........................4

5专题计划要点.............................4

项目开发计划(GB856T——88)1引言

1.1编写目的说明:编写这份软件项目开发计划的目的,并指出预期的读者。

1.2 背景

说明:

a.待开发的软件系统的名称;

b.本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络; c.该软件系统同其他系统或其他机构的基本的相互来往关系。

1.3定义

列出本文件中用到的专门术语的定义和外文的首字母组词的原词组。

1.4参考资料

列出用得着的参考资料,如:

a.本项目的经核准的计划任务书和合同、上级机关的批文;

b.属于本项目的其他已发表的文件;

c.本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件资料的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。2项目概述

2.1工作内容

简要地说明在本项目的开发中须进行的各项主要工作。

2.2主要参加人员

扼要说明参加本项目开发的主要人员的情况,包括他们的技术水平。

2.3产品

2.3.1程序

列出须移交给用户的程序的名称、所用地编程语言及存储程序的媒体形式,并通过引用相关文件,逐项说明其功能和能力。

2.3.2文件

列出须移交用户的每种文件的名称及内容要点。

2.3.3服务

列出需向用户提供的各项服务,如培训安装、维护和运行支持等,应逐项规定开始日期、所提供支持的级别和服务的期限。

2.3.4非移交的产品

说明开发集体应向本单位交出但不必向用户移交的产品(文件甚至某些程序)。

2.4验收标准

对于上述这些应交出的产品和服务,逐项说明或引用资料说明验收标准。

2.5完成项目的最迟期限

2.6本计划的批准者和批准日期

3实施计划

3.1工作任务的分解与人员分工

对于项目开发中需要完成的各项工作,从需求分析、设计、实现、测试直到维护,包括文件的编制、审批、打印、分发工作,用户培训工作,软件安装工作等,按层次进行分解,指明每项任务的负责人和参加人员。

3.2接口人员

说明负责接口工作的人员及他们的职责,包括:

a.负责本项目同用户的接口人员;

b.负责本项目同本单位各管理机构,如合同计划管理部门、财务部门、质量管理部门等的接口人员;

c.负责本项目同个份合同负责单位的接口人员等。

3.3进度

对于需求分析、设计、编码实现、测试、移交、培训和安装等工作,给出每项工作任务的预定开始日期、完成日期及所需资源,规定各项工作任务完成的先后顺序以及表征每项工作任务完成的标志性事件(即所谓“里程碑)。

3.4预算

逐项列出本开发项目所需要的劳务(包括人员的数量和时间)以及经费的预算(包括办公费、差旅费、机时费、资料费、通讯设备和专用设备的租金等)和来源。

3.5关键问题

逐项列出能够影响整个项目成败的关键问题、技术难点和风险,指出这些问题对项目的影响。

4支持条件

说明为支持本项目的开发所需要的各种条件和设施。

4.1计算机系统支持

逐项列出开发中和运行时所需的计算机系统支持,包括计算机、外围设备、通讯设备、模拟器、编译(或汇编)程序、操作系统、数据管理程序包、数据存储能力和测试支持能力等,逐项给出有关到货日期、使用时间的要求。

4.2需由用户承担的工作

逐项列出需要用户承担的工作和完成期限。包括需由用户提供的条件及提供时间。

4.3由外单位提供的条件

逐项列出需要外单位分合同承包者承担的工作和完成的时间,包括需要由外单位提供的条件和提供的时间。

5专题计划要点

说明本项目开发中需制定的各个专题计划(如分合同计划、开发人员培训计划、测试计划、安全保密计划、质量保证计划、配置管理计划、用户培训计划、系统安装计划等)的要点。

第五篇:软件项目开发总结报告模版

武汉理工大学《软件开发工具》论文报告

火车票系统的开发

1引言

研究报告(1.研究计划;2.完成的研究内容、研究方法、研究过程与结论、成果;3.比照研究计划,分析超过或未达到预定目标、进度、研究内容的原因;4.参考文献等。)

随着人们生活水平和经济水平的提高,网络科技的全球化的发展,出游和出差的频率越来越多。这大大的激发了交通水平的发展。其中,火车这种又方便有便宜的交通工具作为人们的首选,火车站的客运列车增加,客运量也随之增加。原有的售票的方式已经不再能满足旅客的需求了。为了方便旅客售票系统不仅仅只能售票也能够了解列车的各种信息。这样才能成为现在网络社会的真的适应者。

2需求分析

该售票系统是融合了火车票销售、退票、列车管理、车票管理、售票员管理、列车管理信息,以及售票信息查询为一体的综合系统。该系统主要编写的功能是列车和售票信息的查询及售票功能。

2.1用户

该系统主要有两类用户:管理员和售票员。管理员主要工作有车次管理,车票管理和售票员管理。对于每项功能都有添加,删除和修改的功能。售票的主要工作是售票和退票。

2.2主要功能

该系统从功能方面可以分为四个方面: 登录。不管你是管理员还是售票员必须登录以后才可以进行系统允许的操作。当然要登录的管理员和售票员都必须是再数据库中已经发布的。

基本设置:该模块主要是修改售票员的相关信息,修改列车的相关信息和修改车票的相

武汉理工大学《软件开发工具》论文报告

关信息。这一块的功能只有管理员才可以操作。其他的售票员是不可以对他进行操作的。

售票和退票:这部分工作主要是售票员来操作的。售票员根据买票人员提出的要求进行查询。查询的方式有两种:一是根据车次查询;一是根据目的地来查询。退票主要是将已经出售的车票在列车开出之前再一次的返回到数据库中,并继续出售。

列车和车票查询;当需要查询列车信息或者是车票信息是所做的操作。

2.3基本流程

3开发过程

3.1内容

该程序包括三个部分数据库的设计、通用模块的实现、各个模块的实现。

3.1.1 数据库的设计:

将本系统所需的所有的数据都存储到数据库中。需要在数据库中管理员表、售票员表、列车信息表和车票信息表。如图所示:

武汉理工大学《软件开发工具》论文报告

管理员表:

售票员表:

列车信息表:

武汉理工大学《软件开发工具》论文报告

车票信息表:

3.1.2通用模块的实现:

通用模块为了减少代码的重复。在该系统中,对经常使用的操作进行封装,如将多次需要调用的数据库和操作数库的增、删、改和查等操作进行封装。使代码有很好的重用性,即使出现错误也很容易调试。如本程序中的Conn.java

import java.sql.*;public class Conn {

private static Connection con;private static final String DRIVER = “com.mysql.jdbc.Driver”;private static final String URL =“jdbc:mysql://localhost:3306/newdatabase”;private static final String NAME=“root”;private static final String PASSWORD=“021702190804”;static{

} public static Connection getConnection(){

} public static void closeCon(Connection con){

try { if(con!=null)con.close();try {

} return con;con=DriverManager.getConnection(URL,NAME,PASSWORD);e.printStackTrace();} catch(SQLException e){ try {

} Class.forName(DRIVER);e.printStackTrace();} catch(ClassNotFoundException e){ } catch(SQLException e){ 4

武汉理工大学《软件开发工具》论文报告

}

} public static void closePt(PreparedStatement pt){

} public static void closeRs(ResultSet rs){

} try {

} if(rs!=null)rs.close();try {

} if(pt!=null)pt.close();} e.printStackTrace();} catch(Exception e){ e.printStackTrace();} catch(Exception e){ e.printStackTrace();

用户登录界面的设计、主界面的设计、基本设置模块、销售及退票模块和列车及车票查询模块。

用户登录模块:该部分是通过设计login.java来实现的。这部分代码的作用是用户首先选择自己的登录的是管理员还是售票员,然后输入账号和密码。单击登录,用户先判断用户登录的类型,然后给sql变量赋SQL语句值,系统调用DAO.java类的login()传入sql变量。.Login 代码是:

import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;

import com.huizhi.dao.DAO;public class Login {

private Text nameText;

private Text passText;

private Combo combo;

private String type;

private Display display = new Display();

private Shell shell = new Shell(display);

public Login(){

FormLayout layout = new FormLayout();

武汉理工大学《软件开发工具》论文报告

layout.marginHeight =40;

layout.marginWidth =40;

shell.setLayout(layout);

shell.setText(“login”);

Image image = new Image(display,“2.jpg”);

shell.setBackgroundImage(image);

setUIControl();

shell.pack();

shell.open();

while(!shell.isDisposed()){

if(!display.readAndDispatch())

display.sleep();

}

display.dispose();

}

private void setUIControl(){

Label username = new Label(shell, SWT.NONE);

username.setText(“username”);

nameText = new Text(shell, SWT.SINGLE | SWT.BORDER);

Label password = new Label(shell, SWT.NONE);

password.setText(“password”);

passText = new Text(shell, SWT.SINGLE | SWT.BORDER| SWT.PASSWORD);

// passText.setEchoChar('*');

Label select=new Label(shell, SWT.NONE);

select.setText(“ select

”);

Button submit = new Button(shell,SWT.PUSH);

submit.setText(“login ”);

submit.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

type=combo.getText();

String name=nameText.getText();

String pass=passText.getText();

String sql=null;

boolean flag=false;

MessageBox box=new MessageBox(shell,SWT.OK);

if(“".equals(type)||”“.equals(name)||”“.equals(pass))

{

box.setMessage(”please input all the information“);

box.open();

return;

}

武汉理工大学《软件开发工具》论文报告

DAO dao=new DAO();

if(”users“.equals(type)){

sql=”select * from users where username='“+name+”' and password='“+pass+”'“;

}else if(”admin“.equals(type)){

sql=”select * from admin where username='“+name+”' and password='“+pass+”'“;

}

flag=dao.login(sql);

if(flag)

{

shell.dispose();

new Main(type);

}else{

box.setMessage(”wrong name or password“);

box.open();

}

}

});

Button reset = new Button(shell, SWT.PUSH);

reset.setText(”cancel“);

String value[]={”users“,”admin“};

combo=new Combo(shell,SWT.DROP_DOWN);

combo.setItems(value);

FormData data = new FormData();

data.top = new FormAttachment(30,0);

username.setLayoutData(data);

data = new FormData();

data.top = new FormAttachment(username,0,SWT.CENTER);

data.left = new FormAttachment(username,10, SWT.RIGHT);

nameText.setLayoutData(data);

data = new FormData();

data.top = new FormAttachment(select,0,SWT.CENTER);

data.left = new FormAttachment(select,10, SWT.RIGHT);

combo.setLayoutData(data);

data = new FormData();

data.top = new FormAttachment(username,10, SWT.BOTTOM);

password.setLayoutData(data);

武汉理工大学《软件开发工具》论文报告

data = new FormData();

data.top = new FormAttachment(password,0,SWT.CENTER);

data.left = new FormAttachment(nameText,0,SWT.LEFT);

passText.setLayoutData(data);

data=new FormData();

data.top=new FormAttachment(password,10,SWT.BOTTOM);

submit.setLayoutData(data);

data=new FormData();

data.top=new FormAttachment(submit,0,SWT.CENTER);

data.left=new FormAttachment(submit,20,SWT.RIGHT);

reset.setLayoutData(data);

}

public static void main(String[] args){

new Login();

} } DAO.java的login()代码:

public boolean login(String sql){

boolean flag=false;

con=Conn.getConnection();

try {

pt=con.prepareStatement(sql);

rs=pt.executeQuery();

if(rs.next()){

flag=true;

}

} catch(SQLException e){

e.printStackTrace();

}finally{

Conn.closeRs(rs);

Conn.closePt(pt);

Conn.closeCon(con);

}

return flag;} 图示为;

武汉理工大学《软件开发工具》论文报告

实现主界面:

import org.eclipse.swt.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.events.*;

public class Main {

private String type;Display display=Display.getCurrent();Shell shell=new Shell(display);public Main(String type){

this.type=type;

shell.setText(”Train ticketing system“);

shell.setLayout(new FillLayout());

Menu menu=new Menu(shell,SWT.BAR);

//第一个菜单

MenuItem basic=new MenuItem(menu,SWT.CASCADE);

basic.setText(”Basic Settings“);

if(”users“.equals(type))

{

basic.setEnabled(false);

}

Menu filemenu=new Menu(shell,SWT.DROP_DOWN);

MenuItem train=new MenuItem(filemenu,SWT.PUSH);

train.setText(”Trains Management“);

train.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

new TrainManage();

}

});

MenuItem ticket=new MenuItem(filemenu,SWT.PUSH);

ticket.setText(”Tickets Management“);

武汉理工大学《软件开发工具》论文报告

ticket.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){

new TicketManage();} });MenuItem users=new MenuItem(filemenu,SWT.PUSH);users.setText(”Users Management“);users.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){

new UsersManage();} });MenuItem exit=new MenuItem(filemenu,SWT.PUSH);exit.setText(”quit“);basic.setMenu(filemenu);exit.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

display.dispose();} });//第二个菜单

MenuItem market=new MenuItem(menu,SWT.CASCADE);market.setText(”Sales and Refunds“);Menu editMenu=new Menu(shell,SWT.DROP_DOWN);MenuItem marketItem=new MenuItem(editMenu,SWT.PUSH);marketItem.setText(”Sales Tickets“);marketItem.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){

new XiaosTicket();} });MenuItem refundItem=new MenuItem(editMenu,SWT.PUSH);refundItem.setText(”Refunds Tickets“);market.setMenu(editMenu);refundItem.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){

new TuiTicket();} });//第三个菜单

MenuItem find=new MenuItem(menu,SWT.CASCADE);find.setText(”Trains and Tickets query“);Menu taiMenu=new Menu(shell,SWT.DROP_DOWN);MenuItem trainFind=new MenuItem(taiMenu,SWT.PUSH);

武汉理工大学《软件开发工具》论文报告

trainFind.setText(”Trains query“);

trainFind.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

new FindTrain();

}

});

MenuItem ticketFind=new MenuItem(taiMenu,SWT.PUSH);

ticketFind.setText(”Ticket query“);

find.setMenu(taiMenu);

ticketFind.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

new FindTicket();

}

});

shell.setMenuBar(menu);

shell.setSize(500,400);

shell.open();

while(!shell.isDisposed()){

if(!display.readAndDispatch())

display.sleep();

}

display.dispose();

} }

图示为:

基本设置模块包括车次管理,车票管理和售票员管理。

车次管理主要是是对于列车的增加,删除和修改等操作。其中包括它的相关的信息等。它是由TrainManagement.java.代码如下: import java.util.List;11

武汉理工大学《软件开发工具》论文报告

import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;

import com.huizhi.dao.DAO;import com.huizhi.vo.Train;

public class TrainManage {

Display display=Display.getCurrent();

Shell tmshell=new Shell(display);

final Table table=new Table(tmshell,SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL|SWT.H_SCROLL|SWT.BORDER|SWT.FULL_SELECTION);

TrainManage tm=this;public TrainManage(){

RowLayout rowLayout=new RowLayout();

rowLayout.pack=true;

rowLayout.wrap=true;

rowLayout.justify=false;

rowLayout.marginTop=20;

tmshell.setLayout(rowLayout);

final TableColumn column1=new TableColumn(table,SWT.LEFT);

column1.setText(”Train ID“);

column1.setWidth(80);

final TableColumn column2=new TableColumn(table,SWT.LEFT);

column2.setText(”TrainNum“);

column2.setWidth(80);

final TableColumn column3=new TableColumn(table,SWT.LEFT);

column3.setText(”TrainType“);

column3.setWidth(80);

final TableColumn column4=new TableColumn(table,SWT.LEFT);

column4.setText(”Starting“);

column4.setWidth(80);

final TableColumn column5=new TableColumn(table,SWT.LEFT);

column5.setText(”startingTime“);

column5.setWidth(80);

final TableColumn column6=new TableColumn(table,SWT.LEFT);

column6.setText(”terminal“);

column6.setWidth(80);

final TableColumn column7=new TableColumn(table,SWT.LEFT);

column7.setText(”terminal Time“);

column7.setWidth(80);12

武汉理工大学《软件开发工具》论文报告

final TableColumn column8=new TableColumn(table,SWT.LEFT);column8.setText(”is kongtiao“);column8.setWidth(80);final TableColumn column9=new TableColumn(table,SWT.LEFT);column9.setText(”price“);column9.setWidth(80);final TableColumn column10=new TableColumn(table,SWT.LEFT);column10.setText(”middleStation“);column10.setWidth(80);final TableColumn column11=new TableColumn(table,SWT.LEFT);column11.setText(”yzNum“);column11.setWidth(80);final TableColumn column12=new TableColumn(table,SWT.LEFT);column12.setText(”rzNum“);column12.setWidth(80);final TableColumn column13=new TableColumn(table,SWT.LEFT);column13.setText(”ywNum“);column13.setWidth(80);final TableColumn column14=new TableColumn(table,SWT.LEFT);column14.setText(”rwNum“);column14.setWidth(80);table.setHeaderVisible(true);table.setLinesVisible(true);freshData();table.setSize(800,200);Button add=new Button(tmshell,SWT.PUSH);add.setText(”add trains“);add.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

new AddTrain(tm);

} });Button update=new Button(tmshell,SWT.PUSH);update.setText(”modify“);update.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

TableItem[] selection=table.getSelection();

TableItem selectedRow=selection[0];

Train train=new Train();

train.setId(Integer.parseInt(selectedRow.getText(0)));

train.setTrainNum(selectedRow.getText(1));

train.setTrainType(selectedRow.getText(2));

train.setStarting(selectedRow.getText(3));13

武汉理工大学《软件开发工具》论文报告

train.setStartingTime(selectedRow.getText(4));

train.setTerminal(selectedRow.getText(5));

train.setTerminalTime(selectedRow.getText(6));

train.setIskongTiao(selectedRow.getText(7));

train.setPrice(Float.parseFloat(selectedRow.getText(8)));

train.setMiddleStation(selectedRow.getText(9));

train.setYzNum(Integer.parseInt(selectedRow.getText(10)));

train.setRzNum(Integer.parseInt(selectedRow.getText(11)));

train.setYwNum(Integer.parseInt(selectedRow.getText(12)));

train.setRwNum(Integer.parseInt(selectedRow.getText(13)));

new UpdateTrain(train,tm);

}

});

Button delete=new Button(tmshell,SWT.PUSH);

delete.setText(”cancel“);

delete.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

MessageBox box=new MessageBox(tmshell,SWT.YES|SWT.NO);

box.setMessage(”Are you sure to cancel?“);

int num=box.open();

if(num==128)

return;

TableItem[] selection=table.getSelection();

TableItem selectedRow=selection[0];

DAO dao=new DAO();

String sql=”delete from train where id=“+selectedRow.getText(0)+”“;

int i=dao.update(sql);

if(i>0){

box.setMessage(”succeed“);

box.open();

table.remove(table.getSelectionIndex());

}else{

box.setMessage(”failure“);

box.open();

}

}

});14

武汉理工大学《软件开发工具》论文报告

tmshell.setSize(1200,400);

tmshell.setText(”train Management“);

tmshell.open();

while(!tmshell.isDisposed()){

if(!display.readAndDispatch())

display.sleep();

}

tmshell.dispose();} public void freshData(){

table.removeAll();

try{

DAO dao=new DAO();

List list=dao.getAllTrain();

int number=list.size();

for(int i=0;i

Train train=(Train)list.get(i);

final TableItem item[]=new TableItem[number];

item[i]=new TableItem(table,SWT.None);

item[i].setText(new

String[]{Integer.toString(train.getId()),train.getTrainNum(),train.getTrainType(),train.getStarting(),train.getStartingTime(),train.getTerminal(),train.getTerminalTime(),train.getIskongTiao(),Float.toString(train.getPrice()),train.getMiddleStation(),Integer.toString(train.getYzNum()),Integer.toString(train.getRzNum()),Integer.toString(train.getYwNum()),Integer.toString(train.getYwNum())});

}

}catch(Exception e){

e.printStackTrace();

} } } 在该段代码中调用了DAO.java类中的getAllTrain()方法来获得所有的车辆信息,然后以表格的形式显示出来。DAO.java类中的getAllTrain()和update()方法如下: public int update(String sql){

int i=0;

con=Conn.getConnection();

try {

pt=con.prepareStatement(sql);

i=pt.executeUpdate();

} catch(SQLException e){ 15

武汉理工大学《软件开发工具》论文报告

e.printStackTrace();}finally{

Conn.closePt(pt);

Conn.closeCon(con);}return i;} public List getAllTrain(){ List list=new ArrayList();con=Conn.getConnection();try {

pt=con.prepareStatement(”select * from train“);

rs=pt.executeQuery();

while(rs.next()){

Train train=new Train();

train.setId(rs.getInt(1));

train.setTrainNum(rs.getString(2));

train.setTrainType(rs.getString(3));

train.setStarting(rs.getString(4));

train.setStartingTime(rs.getString(5));

train.setTerminal(rs.getString(6));

train.setTerminalTime(rs.getString(7));

train.setIskongTiao(rs.getString(8));

train.setPrice(rs.getFloat(9));

train.setMiddleStation(rs.getString(10));

train.setYzNum(rs.getInt(11));

train.setRzNum(rs.getInt(12));

train.setYwNum(rs.getInt(13));

train.setRwNum(rs.getInt(14));

list.add(train);

} } catch(SQLException e){

e.printStackTrace();}finally{

Conn.closeRs(rs);

Conn.closePt(pt);

Conn.closeCon(con);}return list;} 其中的update的功能是,首先连接数据库,然后用传递过来的SQl语句在列表中删除某辆列车的信息。getAllTrain()方法是显示所有的列车的信息。图示如下:

武汉理工大学《软件开发工具》论文报告

在车次管理中的对于列车信息添加的功能是通过AddTrain.java 来实现的。代码如下:

import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;import com.huizhi.dao.DAO;

public class AddTrain { Display display=Display.getCurrent();Shell tmshell=new Shell(display);TrainManage trainmanage=null;public AddTrain(TrainManage tm){ trainmanage=tm;GridLayout gridlayout=new GridLayout();tmshell.setText(”add trains information“);gridlayout.numColumns=2;gridlayout.makeColumnsEqualWidth=true;tmshell.setLayout(gridlayout);

GridData gd = new GridData(GridData.FILL_BOTH);Label l=new Label(tmshell,SWT.LEFT);l.setText(”trainNum“);l.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainNum=new Text(tmshell,SWT.NONE);trainNum.setSize(50,60);trainNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l1=new Label(tmshell,SWT.LEFT);l1.setText(”trainType“);l1.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainType=new Text(tmshell,SWT.LEFT);17

武汉理工大学《软件开发工具》论文报告

trainType.setSize(30,40);trainType.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l2=new Label(tmshell,SWT.LEFT);l2.setText(”starting“);l2.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text starting=new Text(tmshell,SWT.LEFT);starting.setSize(30,40);starting.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l3=new Label(tmshell,SWT.LEFT);l3.setText(”startingtime“);l3.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text startingTime=new Text(tmshell,SWT.LEFT);startingTime.setSize(30,40);startingTime.setLayoutData(gd);Label l4=new Label(tmshell,SWT.LEFT);l4.setText(”terminal“);l4.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminal=new Text(tmshell,SWT.LEFT);terminal.setSize(30,40);terminal.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l5=new Label(tmshell,SWT.LEFT);l5.setText(”terminaltime“);l5.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminalTime=new Text(tmshell,SWT.LEFT);terminalTime.setSize(30,40);terminalTime.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l6=new Label(tmshell,SWT.LEFT);l6.setText(”iskongtiao“);l6.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text iskongTiao=new Text(tmshell,SWT.LEFT);18

武汉理工大学《软件开发工具》论文报告

iskongTiao.setSize(30,40);iskongTiao.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l7=new Label(tmshell,SWT.LEFT);l7.setText(”price“);l7.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text price=new Text(tmshell,SWT.LEFT);price.setSize(30,40);price.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l8=new Label(tmshell,SWT.LEFT);l8.setText(”middleStation“);l8.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text middleStation=new Text(tmshell,SWT.LEFT);middleStation.setSize(30,40);middleStation.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l9=new Label(tmshell,SWT.LEFT);l9.setText(”yzNum“);l9.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text yzNum=new Text(tmshell,SWT.LEFT);yzNum.setSize(30,40);yzNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l10=new Label(tmshell,SWT.LEFT);l10.setText(”rzNum“);l10.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rzNum=new Text(tmshell,SWT.LEFT);rzNum.setSize(30,40);rzNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l11=new Label(tmshell,SWT.LEFT);l11.setText(”ywNum“);l11.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);19

武汉理工大学《软件开发工具》论文报告

final Text ywNum=new Text(tmshell,SWT.LEFT);ywNum.setSize(30,40);ywNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l12=new Label(tmshell,SWT.LEFT);l12.setText(”rwNum“);l12.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rwNum=new Text(tmshell,SWT.LEFT);rwNum.setSize(30,40);rwNum.setLayoutData(gd);Button b=new Button(tmshell,SWT.LEFT);b.setText(”add“);b.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

MessageBox box = new MessageBox(tmshell ,SWT.OK);

if(”“.equals(trainNum.getText())||”“.equals(trainType.getText())||”“.equals(starting.getText())

||”“.equals(startingTime.getText())||”“.equals(terminal.getText())||”“.equals(terminalTime.getText())

||”“.equals(iskongTiao.getText())||”“.equals(price.getParent())||”“.equals(middleStation.getText())||”“.equals(yzNum.getText())

||”“.equals(rzNum.getText())||”“.equals(ywNum.getText())||”“.equals(rwNum.getText())){

box.setMessage(”please input the right information“);

box.open();

return;

}

DAO dao=new DAO();

String sql=”insert into train(trainNum,trainType,starting1,startingTime,terminal,terminalTime,iskongTiao,price,“ +

”middleStation,yzNum,rzNum,ywNum,rwNum)values('“+trainNum.getText()+”','“+trainType.getText()+”','“+starting.getText()+”',“ +

”'“+startingTime.getText()+”','“+terminal.getText()+”','“+terminalTime.getText()+”','“+iskongTiao.getText()+”',“ + 20

武汉理工大学《软件开发工具》论文报告

”'“+price.getText()+”','“+middleStation.getText()+”','“+yzNum.getText()+”','“+rzNum.getText()+”','“+ywNum.getText()+”','“+rwNum.getText()+”')“;

int i=dao.update(sql);

if(i>0){

box.setMessage(”add“);

box.open();

fresh();

}

} });Button b1=new Button(tmshell,SWT.LEFT);b1.setText(”quit“);b1.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

tmshell.setVisible(false);

} });tmshell.layout();

tmshell.setSize(500,450);

tmshell.open();

while(!tmshell.isDisposed()){

if(!display.readAndDispatch())

display.sleep();

}

tmshell.dispose();} public void fresh(){

trainmanage.freshData();} } 图示为:

武汉理工大学《软件开发工具》论文报告

修改列车功能是在UpdateTrain.java.类中实现的。代码如下: import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;

import com.huizhi.dao.DAO;import com.huizhi.vo.Train;

public class UpdateTrain {

private Train train;Display display=Display.getCurrent();Shell utrainshell=new Shell(display);TrainManage trainmanage=null;public UpdateTrain(Train train,TrainManage tm){ this.trainmanage=tm;this.train=train;GridLayout gridlayout=new GridLayout();utrainshell.setText(”modify train information“);gridlayout.numColumns=2;gridlayout.makeColumnsEqualWidth=true;utrainshell.setLayout(gridlayout);

武汉理工大学《软件开发工具》论文报告

GridData gd = new GridData(GridData.FILL_BOTH);Label ll=new Label(utrainshell,SWT.LEFT);ll.setText(”train ID“);ll.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text num=new Text(utrainshell,SWT.NONE);num.setText(Integer.toString(train.getId()));num.setEnabled(false);num.setSize(50,60);num.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l=new Label(utrainshell,SWT.LEFT);l.setText(”TrainNum“);l.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainNum=new Text(utrainshell,SWT.NONE);trainNum.setText(train.getTrainNum());trainNum.setSize(50,60);trainNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l1=new Label(utrainshell,SWT.LEFT);l1.setText(”TrainType“);l1.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainType=new Text(utrainshell,SWT.LEFT);trainType.setText(train.getTrainType());trainType.setSize(30,40);trainType.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l2=new Label(utrainshell,SWT.LEFT);l2.setText(”starting“);l2.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text starting=new Text(utrainshell,SWT.LEFT);starting.setText(train.getStarting());starting.setSize(30,40);starting.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l3=new Label(utrainshell,SWT.LEFT);l3.setText(”startingTime“);23

武汉理工大学《软件开发工具》论文报告

l3.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text startingTime=new Text(utrainshell,SWT.LEFT);startingTime.setText(train.getStartingTime());startingTime.setSize(30,40);startingTime.setLayoutData(gd);Label l4=new Label(utrainshell,SWT.LEFT);l4.setText(”terminal“);l4.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminal=new Text(utrainshell,SWT.LEFT);terminal.setText(train.getTerminal());terminal.setSize(30,40);terminal.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l5=new Label(utrainshell,SWT.LEFT);l5.setText(”terminalTime“);l5.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminalTime=new Text(utrainshell,SWT.LEFT);terminalTime.setText(train.getTerminalTime());terminalTime.setSize(30,40);terminalTime.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l6=new Label(utrainshell,SWT.LEFT);l6.setText(”iskongtiao“);l6.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text iskongTiao=new Text(utrainshell,SWT.LEFT);iskongTiao.setText(train.getIskongTiao());iskongTiao.setSize(30,40);iskongTiao.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l7=new Label(utrainshell,SWT.LEFT);l7.setText(”price“);l7.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text price=new Text(utrainshell,SWT.LEFT);price.setText(Float.toString(train.getPrice()));price.setSize(30,40);24

武汉理工大学《软件开发工具》论文报告

price.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l8=new Label(utrainshell,SWT.LEFT);l8.setText(”middleStation“);l8.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text middleStation=new Text(utrainshell,SWT.LEFT);middleStation.setText(train.getMiddleStation());middleStation.setSize(30,40);middleStation.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l9=new Label(utrainshell,SWT.LEFT);l9.setText(”yzNum“);l9.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text yzNum=new Text(utrainshell,SWT.LEFT);yzNum.setText(Integer.toString(train.getYzNum()));yzNum.setSize(30,40);yzNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l10=new Label(utrainshell,SWT.LEFT);l10.setText(”rzNum“);l10.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rzNum=new Text(utrainshell,SWT.LEFT);rzNum.setText(Integer.toString(train.getRzNum()));rzNum.setSize(30,40);rzNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l11=new Label(utrainshell,SWT.LEFT);l11.setText(”ywNum“);l11.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text ywNum=new Text(utrainshell,SWT.LEFT);ywNum.setText(Integer.toString(train.getYwNum()));ywNum.setSize(30,40);ywNum.setLayoutData(gd);

gd = new GridData(GridData.FILL_BOTH);Label l12=new Label(utrainshell,SWT.LEFT);25

武汉理工大学《软件开发工具》论文报告

l12.setText(”rwNum“);l12.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rwNum=new Text(utrainshell,SWT.LEFT);rwNum.setText(Integer.toString(train.getRwNum()));rwNum.setSize(30,40);rwNum.setLayoutData(gd);Button b=new Button(utrainshell,SWT.LEFT);b.setText(”modify“);b.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

MessageBox box = new MessageBox(utrainshell ,SWT.OK);

if(”“.equals(trainNum.getText())||”“.equals(trainType.getText())||”“.equals(starting.getText())

||”“.equals(startingTime.getText())||”“.equals(terminal.getText())||”“.equals(terminalTime.getText())

||”“.equals(iskongTiao.getText())||”“.equals(price.getText())||”“.equals(middleStation.getText())||”“.equals(yzNum.getText())

||”“.equals(rzNum.getText())||”“.equals(ywNum.getText())||”“.equals(rwNum.getText())){

box.setMessage(”please input right information then modify “);

box.open();

return;

}

DAO dao=new DAO();

String sql=”update train set trainNum='“+trainNum.getText()+”',trainType='“+trainType.getText()+”',starting1='“+starting.getText()+”',“ +

”startingTime='“+startingTime.getText()+”',terminal='“+terminal.getText()+”',terminalTime='“+terminalTime.getText()+”',iskongTiao='“+iskongTiao.getText()+”',“ +

”price='“+price.getText()+”',middleStation='“+middleStation.getText()+”',yzNum='“+yzNum.getText()+”',rzNum='“+rzNum.getText()+”',ywNum='“+ywNum.getText()+”',rwNum='“+rwNum.getText()+”' where id='“+num.getText()+”'“;

int i=dao.update(sql);

if(i>0){ 26

武汉理工大学《软件开发工具》论文报告

box.setMessage(”succeed“);

box.open();

fresh();

}else{

box.setMessage(”failure“);

box.open();

}

} });Button b1=new Button(utrainshell,SWT.LEFT);b1.setText(”quit");b1.addSelectionListener(new SelectionAdapter(){

public void widgetSelected(SelectionEvent e){

utrainshell.setVisible(false);

} });utrainshell.layout();

utrainshell.setSize(500,450);

utrainshell.open();

while(!utrainshell.isDisposed()){

if(!display.readAndDispatch())

display.sleep();

}

utrainshell.dispose();} public void fresh(){

trainmanage.freshData();} }

车票管理主要包括对车票的增加,删除和修改的操作。由TicketManagement.java 实现。代码类似上面的:(具体看压缩包)。其中的查询列车表和售票表调用的DAO.java类中selectTicket()方法。图示为:

武汉理工大学《软件开发工具》论文报告

售票员管理是对售票员进行增加、删除和修改进行操作。由UserMannage.java类来实现。代码类似以上。在该类中调用了DAO.java 类中getAllUser()方法。图示为:

武汉理工大学《软件开发工具》论文报告

售票及退票模块包括两部分:火车售票和退票。售票系统是xiaosTickect.java 实现的。图示如下:

退票是售票员根据用户提供的车票信息在系统中进行售票。主要是由TuiTicket.java来实现的。在该类中涉及到DAO.java类中的selectTrain()方法.图示如下:

列车及车票查询系统主要功能包括两部分:查询列车信息和查询车票信息.有FindTrain.Java和FindTicket.java 实现.图示如下:

武汉理工大学《软件开发工具》论文报告

4学习心得

我是再没有接触eclipse之前就接触了java,我自己都先用记事本编写java程序,然后在doc下进行编译和运行。后来安装了ecplise这个集成环境,但是只把它当成一个运行java的集成环境。

后来经过开发工具的学习和相关书籍的查看,开始深入的理解了什么是ecplise。其实整个ecplise体系结构就像一个大的拼图,可以不断地向其中添加插件,同时在现有的插件上还可以再增加插件。可以说,在ecplise中一切都是插件。这里有一张图片很形象的说明了ecplise的体系结构:

在我学习ecplise的工程中,我觉得它跟一般的软件比起来有很大的优势:在编写代码的过程中,如果有编译错误的话系统马上会提醒,我们很容易就会会发现。而且它会给你提供一些解决问题的方法,虽然有些解决方法有一些笨,但是这对于一些想我们这样的初学者来说,无疑是雪中送炭。而且在编写代码的过程中,我们使用一些类的对象的方法的过程中系统给予一定的提示。这大大的减少了我们出错的机会,并且我们也可以顺便了解一下该类的其他方法。加快我们的学习进度。

武汉理工大学《软件开发工具》论文报告

对于ecplise的具体的功能的学习感悟:对于调试器板块该环境提供了很多的功能包括单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。在我们课堂上只学习了本地调试中的断点。断点提供了一种强大的工具,使我们能够在需要的时间和位置挂起执行。与逐句或逐条指令的检查代码不同的是,可以让程序一直执行,直到遇到断点。然后开始调试。这大大的加快了调试过程。没有这个功能,调试大型程序几乎不能完成。至于远程的调试对于现在学习的程度来说有一点难。所以先放弃,以后再研究。

对于JUnit,包括模块接口测试、局部数据结构测试、路经测试、错误处理测试、边界测试。它的核心类主要有jnuit.framework包下的TestCase、Testsuite和TestResult,junit.runnier包下的BaseTestRunner类。而我们现在用到的只有断言Assert。在这里有一点原则是需要注意的它的测试名要很容易与应用类区分开来。

我觉得学会用ecplise来创建的基于SWT的图形应用程序十分的重要。这个要源于它的开发缘由。在这之前,使用的awt是原生窗口部件,但是它一直未能突破LCD。为了解决这个问题,又开发了swing。它使用的是仿真窗口部件,不存在LCD问题。但是消耗太多的内存等。为了彻底解决

上述问题,IBM开发了SWT。在基于Windows的ecplise中,SWT通过DLL形式的本地库与操作系统交互;在UNIX下,SWT可通过的GTK运行。

最近的学习和看书,让我觉得自己的真的就像在软件的最顶层。自己现在学习的东西在软件

中真的是基础中的基础。我们还有很长的路要走。真的要加油,好好学习啊!

5.参考文献

[1]java核心技术卷1:基础知识 叶乃文 邝劲筠 杜永萍 2008.5 机械工业出版社 [2]eclipse 3.0 程序开发技术详解

吴越胜 李新磊

2010.10 清华大学出版社

下载软件项目开发合同5篇word格式文档
下载软件项目开发合同5篇.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    软件项目开发计划书

    软件项目开发计划书项目名称:********************** 评审日期:1 引言1.1编写目的说明编写这份项目开发计划的目的,并指出预期的读者。1.2背景说明:a.待开发的软件系统的名称; b.本项......

    软件项目开发计划书

    软件项目开发计划书 软件08-1班李岩200820205069 一、项目提出的背景和必要性 在信息化高速发展的时代,图书管理系统已经渐渐的走进了国内外的许多图书馆,开发一套图书管理系......

    软件项目开发计划书

    软件项目开发计划书 1.引言 1.1编写目的 开发基于互联网的学生选课系统,提高管理工作的效率、提高信息的开放性、改善学生和教师对其最新信息查询的准确性。 1.2项目背景 某校......

    软件委托开发合同

    软件委托开发合同 甲方(受托人): 乙方(委托人): 【本合同由盈科研究院赵成伟、刘永沛、牟晋军律师提供】 甲方(受托人): 法定代表人(如有): 通讯地址: 邮政编码: 联系电话: 乙方(委托人......

    软件项目合同

    软件项目合同范本1 甲方:_________乙方:_________经双方友好协商,甲乙双方达成如下协议:一、经乙方审核,批准授权,甲方一次性交纳加盟费_________元,成为_________软件产品_______......

    项目开发合同合集大全

    项目开发合同范文合集九篇随着人们对法律的了解日益加深,关于合同的利益纠纷越来越多,在达成意见一致时,制定合同可以享有一定的自由。拟定合同的注意事项有许多,你确定会写吗?以......

    项目开发合同(汇编)

    项目开发合同汇编5篇随着时间的推移,合同出现在我们生活中的次数越来越多,签订合同可以使我们的合法权益得到法律的保障。那么一份详细的合同要怎么写呢?下面是小编整理的项目......

    软件项目开发合作协议样本

    项目开发合作协议 甲方: 地址: 营业执照号码:甲乙双方本着共同发展的原则,经过友好协商,决定充分利用双方各自的优势,资源互补,在XXX项目上进行合作,特订立本协议。 第一条、 开发项......