软件项目管理课程作业

2023-03-24

第一篇:软件项目管理课程作业

软件测试方法和技术—课程总结作业

软件测试方法和技术 课程总结作业 2012-2013学年第一学期

软件测试方法和技术

课程总结作业

1、提交期限和方法

期限:第17周周2晚。

方法:由各班学习委员收集所有学生的纸质作业上交到授课老师处,其中电子档报告以E-mail提交给任课教师(可发邮箱:dfeng808@126.com )。

2、实验任务

任务1:(30分)判断三角形类的核心代码如下:

/** 判断三角形的类 */

public class TriangleTestMethod {

/** 判断三角形的种类。参数a, b, c分别为三角形的三边,

* 返回的参数值为0,表示非三角形;

* 为1,表示普通三角形;

* 为2,表示等腰三角形;

* 为3,表示等边三角形。

*/

public static int comfirm(int a, int b, int c) {

if((a + b > c) && (b + c > a) && (a + c > b)) // 判断为三角形{if((a == b) && (b ==c)) // 判断为等边三角形

return 3;

if((a == b) || (b == c) || (a == c)) // 判断为等腰三角形

return 2;

else // 判断为普通三角形

return 1;

}

else { // 为非三角形

return 0;

}

}

}

要求:

1、首先画出程序的流程图;

2、为以上所示的程序段设计一组测试用例,要求分别满足语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖。

3、对上述程序用基本路径测试法设计测试用例;具体按下列步骤进行:

依据代码绘制流程图(参考书的流程图,必须类似) 确定程序环路复杂度; 确定线性独立路径的基本集合; 设计测试用例覆盖每条基本路径 第 1 页 共 2 页

软件测试方法和技术 课程总结作业 2012-2013学年第一学期 任务2:(20分)设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定

在1990年1月~2049年12月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的"日期检查功能"。 任务3:(50分)用你已经设计好的系统或借用其他系统,来进行软件系统测试,编写出系统测试报告。

3、补充说明

课程总结作业必须自己独立、认真完成,不得抄袭,如发现抄袭别人,则视本门课程为不及格处理。希望大家切记。

第二篇:互联网软件开发(Java)课程大作业总结报告

互联网软件开发(Java)课程

大作业总结报告

(第3组)

小组成员:曾志鑫

3131101242

3131101216

3131101243

曾海达

3131101241

潘宝坤

3131101237

一、小组作业题目

学生信息管理系统

二、功能(业务)描述及设计思想(建议UML图示辅助介绍更好)

本系统是用JAVA编写的,运行环境也是在JAVA下,所用数据库为SQL Server 2008,本系统有教师和学生两个版本,即有学生和教师两种权限。在运行了本系统后,可能通过注销来切换用户。现在登陆的为教师权限的教师版,在有这个权限时,可以添加任意想添加的学生信息。当需要删除某个学生的信息时,也可以做出想应的操作。当要为学生录入成绩时,点击相应的按钮根据界面做出相应的操作就可以完成了,删除某个学生的成绩时,也是一样的。另外还有添加选修课程名的功能,这个功能是为了实现现在学生有选修课的,当有不同的选修课时就可以自己加入即可。当某门选修课不再开时,删除对应的选修课就行了。当鼠标放在每一个按键上,界面右边就会提示并介绍这个按键的功能。

如果现在登陆的为学生权限的学生版,在有这个权限时,可以查看自己"的个人信息和成绩,学生进入的用户名为自己的学号,默认的密码为学号。学生自己可以在登陆了本系统后自行修改自己的密码。切记要修改自己的个人进入密码,并妥善保管好自己的密码。在登陆本系统后,学生就可以选课了,所有可选的课程名都可以选择,但每个人限选一门,当在有选修课后再去选课就会出现相应的提示,如需重选,则点击相应的按钮,就会出现重选界面。但要注意重选选修课是先删除已选的选修课之后再选,所以重选和删除选修课要慎重.查看个人信息,就可以看到自己的信息和成绩。

系统总体结构图如下:

三、运行结果截图

系统登入界面

系统首界面

添加信息界面

添加成功界面

删除信息界面

查询信息界面

修改信息界面

添加选课界面

删除选课界面

四、程序中存在的缺陷及解决思路

1、系统没有设计注册,账号密码是通过管理员分配的。

2、对数据库的操作是对于单表操作的,没有在多表实现同步。表与表之间没有建立起连接。

五、程序调试情况说明

1、 开始的时候,数据库连接不上,上网搜索找资料后才知道是数据库在安装的时候是默认使用windows方式验证的,需要设置为window 与sql 的混合方式验证,并且启用sa账户并设置密码与应用程序匹配。

2、 在数据库解决时候还是连接不上,在阅读书籍之后忽略了eclipse里需要导入相应的数据库包,比如sql的sqljdbc.jar

3、 界面设计时需要根据数据的大小显示出想要的大小,以及位置。开始数据的方式不是那么的好用,上网搜索了一下电脑分辨率的获取,然后利用电脑的分辨率来进行控制。

4、 在对数据库进行操作时,一开始没有考虑到数据的同步,所以表与表之间需要建立主键与外键的连接,那样的话设计到视图的操作,感觉时间上没那么多,就没有解决。

六、开发心得

一个好的团队的总体力量超过一个个体力量的总共和。

开发我们提倡团队开发,主要原因有

三、第一,软件开发过程复杂,而团队可以使问题简单许多,遇到问题可以大家一起解决。第二,团队操作可以在很大程度上实现优势的互补。第三,团队合作在很大程度上培养了人与人之间沟通的理解能力。

一直以来期望从事自己喜欢的事业的我,对软件开发有者及大的兴趣,可由说种种原因使我从事工作以来走了好几年弯路,心中的梦想迟迟不能得以实现,可程序员的梦想从来没有从我的心中抹去,但这扇大门好像并没有向我敞开,今天,贵公司给了我敲开这扇大门的机会,让我真实体验了程序员的诞生过程。早就听说,程序员的前几个月是最苦的,可从来没有感受到,海马实习基地让我提前感受到了刚刚进入软件行业的压力和困惑,再也没有在自己家里随便写段小程序后的那种“自豪”感了。要面对每天必须面对的问题,再也不可能以“逃避”而了之了。也让我感觉到做为一个程序员所应该具备的基本素质在这不到一个月的实习过程中也让我深深体会到了作为一个合格的程序员应该具备的基本素质。

团队精神和协作能力是程序员应该具备的基本素质,最近的工作中让我深深休会到了这一点,由于小组成员配合不好,使本来很方便的cvs给自己的工作带来的及大的麻烦,一不小心自己写的的东西就会被小组别的成员在上传文件的时候给覆盖掉,一整天的工作可能就这样被反工,我们小组这次就是因为协作不好,导致各模块之间不法连接,给工作带来了及大的麻烦,消耗了大量的劳动力还没有提高工作效率。这使我深深的体会到:一个成功商业性软件的开发必须有一个有强大凝聚力的团队,个人的力量是有限的,团队精神和良好的协作会使我们做出优秀的软件。

良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。这次的这个小小的项目,就因为文档上的一点点理解错误让我们花了很大的工夫去改代码,改页面。很庆幸的是,这是一个小项目,要是大项目,这种问题可能就会导致大量的代码修改,可见文档在一个项目中起者巨大的做用。

此外,良好的代码编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。作为一个程序员,对需求的理解能力也是很重要的,只有真正理解了一个模块的作用,才会写出高效率的代码,才能使整个软件项目作出来更加优秀,具备更好的安全性和稳定性,我在写代码的过程中就遇到了需求理解上的问题,使得写出来的代码功能不全,幸好不是给客户发现在,要不,这个软件的商业价值可能就会打折扣了。单元测试对于一个程序员来说是不可不做的一项工作,不做好测试就会给后期的集成工作带来麻烦,往往为了一个小问题会让我们查找好多模块,给后期工作带来很大麻烦。

这一段时间的工作也让我明白了一点:一个优秀的程序员必须不断的学习,随时总结,找到自己的不足,这样逐步提高,才能让自己很快的成长起来。

七、小组成员的工作分配,及完成情况(作为评个人成绩的依据): 曾志鑫:部分代码撰写及文档撰写

洋:主要负责代码的撰写

超:部分代码撰写及部分文档撰写

曾海达:负责代码调试及部分文档撰写 潘宝坤:负责代码调试及部分文档撰写

八、源代码清单(注:只需列出文件名,具体的项目代码和该报告一起打包上传到服务器本课程目录下的“课程大作业”子目录)

1)数据库操作函数

public boolean Method_InsertInto(String query,String number)//添加学生信息到数据库中的方法 public String Method_query(String query,String number)//查询学生信息的数据库

public boolean Method_alter(String query_message,String query_score)//修改学生信息的数据库方法 public String Method_print_all_name()//得到数据库中所有的学生姓名

public int Method_delete(String number,boolean category_delete)//删除学生信息的数据库方法 public void Method_add_curriculum(String query)//将新的选修课名添加到数据库中的方法 public void Method_del_curriculum(String query)//删除数据库中选修课名的数据库方法

public String Method_query_curriculum(String number)//查询数据中学生选修课这项是否有了选修课名 public String Method_teacher_query_all_curriculum()//得到教师所有可删除的选修课程名 public String Method_student_query_all_curriculum()//得到学生所有可以选择的选修课程名 public boolean Method_student_add_curriculum(String curriculum)//将学生的选课加入到数据库中的学生信息中

public boolean Method_student_del_curriculum()//将数据库中学生已选的选修课删除 public boolean Method_change_password(String password)//修改数据库中学生的密码

2)登录及操作函数

public void Method_Login()//用户登陆操作 public void Method_Inquire()//查询的处理

public void Method_Add_Student_Information()//添加学生信息操作

public void Method_Print_All_Name()//将得到的所有学生姓名加入到下拉菜单中 public void Method_Del_Information()//删除学生信息操作 public void Method_Add_Curriculum()//教师添加选修课程名操作 public void Method_Del_Curriculum()//教师删除选修课程名操作

3)学生操作函数

public void Method_Student_Add_Curriculum()//学生选课操作 public void Method_Student_Del_Curriculum()//学生删除选修课操作 public void Method_Change_Password()//学生修改密码操作 public void Method_Explain()//显示系统说明的操作

4)界面显示操作的部分函数

public static Point getMidDimesion(Dimension d)//获得屏幕中间的坐标 public Image getImage(String url) private JFrame getJFrame_addinformation() private JFrame getJFrame_addinformation() 5)对学生信息按钮的操作的部分函数

private JButton getJButton_query() private JButton getJButton_delscore() private JButton getJButton_alterscore() private JButton getJButton_addscore() private JButton getJButton_delinformation() private JButton getJButton_addinformation() 6)对菜单子项的操作的部分函数

private JMenuItem getJMenuItem_explain() private JMenuItem getJMenuItem_last() private JMenuItem getJMenuItem_query() private JMenuItem getJMenuItem_delscore() private JMenuItem getJMenuItem_alterscore() private JMenuItem getJMenuItem_addscore() private JMenuItem getJMenuItem_delinformation() private JMenuItem getJMenuItem_addinformation() private JMenuItem getJMenuItem_change() 7)对菜单主目录操作的部分函数

private JMenu getJMenu_help() private JMenu getJMenu_inquiry() private JMenu getJMenu_result() private JMenu getJMenu_information() private JMenu getJMenu_file() 8)对学生信息的操作,如:性别、选修课、成绩等部分函数

private JTextField getJTextField_student_result_sex() private JTextField getJTextField_student_result_curriculum() private JTextField getJTextField_student_result_NativePlace() private JTextField getJTextField_student_result_department() private JTextField getJTextField_student_result_specialty() private JTextField getJTextField_student_result_class() private JTextField getJTextField_student_result_java() private JTextField getJTextField_student_result_english() private JTextField getJTextField_student_result_math() private JTextField getJTextField_student_result_sports() 9)对选修课的操作的部分函数

private JTextField getJTextField_curriculum_number() private JTextField getJTextField_curriculum_name public Choice getChoice_curriculum() private JButton getJButton_curriculum_ok() public void mouseClicked(java.awt.event.MouseEvent e) private JButton getJButton_curriculum_return() public void mouseClicked(java.awt.event.MouseEvent e)

第三篇:软件过程与管理-课程总结

软件过程与管理结课报告

学生姓名:

X X

号:

XXXXXXXXXX 班

号:

116122

指导教师:

罗显刚

中国地质大学(武汉)信息工程学院

在学习完这门课后,我对于软件过程与管理有了一定的理解,下面介绍一下我的心得。 软件过程

软件过程是指一套关于项目的阶段、状态、方法、技术和开发、维护软件的人员以及相关Artifacts(计划、文档、模型、编码、测试、手册等)组成。软件过程是指软件生存周期所涉及的一系列相关过程。过程是活动的集合;活动是任务的集合;任务要起着把输入进行加工然后输出的作用。活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件地引发的。

软件过程可概括为三类:基本过程类、支持过程类和组织过程类。基本过程类包括获取过程、供应过程、开发过程、运作过程,维护过程和管理过程。支持过程类包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程以及问题解决过程。组织过程类包括基础设施过程、改进过程以及培训过程。

软件过程主要针对软件生产和管理进行研究。为了获得满足工程目标的软件,不仅涉及工程开发,而且还涉及工程支持和工程管理。对于一个特定的项目,可以通过剪裁过程定义所需的活动和任务,并可使活动并发执行。与软件有关的单位,根据需要和目标,可采用不同的过程、活动和任务。

软件过程是指软件整个生命周期,从需求获取,需求分析,设计,实现,测试,发布和维护一个过程模型。一个软件过程定义了软件开发中采用的方法,但软件过程还包含该过程中应用的技术——技术方法和自动化工具。过程定义一个框架,为有效交付软件工程技术,这个框架必须创建。软件过程构成了软件项目管理控制的基础,并且创建了一个环境以便于技术方法的采用、工作产品(模型、文档、报告、表格等)的产生、里程碑的创建、质量的保证、正常变更的正确管理。

软件过程的成熟等级有五级,分别为初始级,可重复级,定义级,定量管理级,优化级。 (1)在初始级,企业一般不具备稳定的软件开发与维护的环境。常常在遇到问题的时候,就放弃原定的计划而只专注于编程与测试。处于这一等级的企业,成功与否在很大程度上决定于有杰出的项目经理与经验丰富的开发团队。因此,能否雇请到及保有能干的员工成了关键问题。项目成功与否非常不确定。虽然产品一般来说是可用的,但是往往有超经费与不能按期完成的问题。

(2)在可重复级,建立了管理软件项目的政策以及为贯彻执行这些政策而定的措施。基于过往的项目的经验来计划与管理新的项目。企业实行了基本的管理控制。符合实际的项目承诺是基于以往项目以及新项目的具体要求而作出的。项目经理不断监视成本、进度和产品功能,及时发现及解决问题以便实现所作的各项承诺。

通过具体地实施这一级的各个关键过程领域的要求,企业实现了过程的规范化、稳定化。因而,曾经取得过的成功成为可重复达到的目标。

(3)在定义级,有关软件工程与管理工程的一个特定的、面对整个企业的软件开发与维护的过程的文件将被制订出来。同时,这些过程是集成到一个协调的整体。这就称为企业的标准软件过程。

这些标准的过程是用于帮助管理人员与一般成员工作得更有效率。如果有适当的需要,也可以加以修改。在这个把过程标准化的努力当中,企业开发出有效的软件工程的各种实践活动。

同时,一个在整个企业内施行的培训方案将确保工作人员与管理人员都具备他们所需要的知识与技能。

非常重要的一点是,项目小组要根据该项目的特点去改编企业的标准软件过程来制订出为本项目而定义的过程。

一个定义得很清楚的过程应当包括:准备妥当的判据,输入,完成工作的标准和步骤,审核的方法,输出和完成的判据。因为过程被定义得很清楚,因此管理层就能对所有项目的技术过程有透彻的了解。

(4)在定量管理级,企业对产品与过程建立起定量的质量目标,同时在过程中加入规定得很清楚的连续的度量。作为企业的度量方案,要对所有项目的重要的过程活动进行生产率和质量> 一个企业范围的数据库被用于收集与分析来自各项目的过程的数据。这些度量建立起了一个评价项目的过程与产品的定量的依据。项目小组可以通过缩小他们的效能表现的偏差使之处于可接受的定量界限之内,从而达到对过程与产品进行控制的目的。

因为过程是稳定的和经过度量,所以在有意外情况发生时,企业能够很快辨别出特殊的原因并加以处理

(5)在优化级,整个企业将会把重点放在对过程进行不断的优化。企业会采取主动去找出过程的弱点与长处,以达到预防缺陷的目标。同时,分析有关过程的有效性的资料,作出对新技术的成本与收益的分析,以及提出对过程进行修改的建议。整个企业都致力于探索最佳软件工程实践的创新。

项目小组分析引起缺陷的原因,对过程进行评鉴与改进,以便预防已发生的缺陷再度发生。同时,也把从中学到的经验教训传授给其他项目。

降低浪费与消耗也是这个等级的一个重点。

处于这一等级的企业的软件过程能力可被归纳为不断的改进与优化。它们以两种形式进行。一种是逐渐地提升现存过程,另一种是对技术与方法的创新。虽然在其他的能力成熟度等级之中,这些活动也可能发生,但是在优化级,技术与过程的改进是作为常规的工作一样,有计划地在管理之下实行的。

软件管理

同样,在项目开发过程中,还有一个非常重要的方面,就是软件管理 同其他任何工程项目一样,软件项目同样存在一个非常重要的问题,这就是软件管理的问题,而这一问题通常容易被一般的软件开发人员所忽视。在一般的软件工程资料中所讨论的重点也只是软件开发方法,对软件管理问题大多一笔带过。在一个小的软件开发项目中也许还无所谓,但一个大型的软件开发项目如果没有优秀的软件管理人员来领导和协调整个项目,其失败的可能性就很大了。因此有必要引起大家对此问题的重视,这也是本文的目的所在。

作为软件管理人员,应该站在高处来俯瞰整个项目,如果有不识庐山真面目的感觉就不太好了。有了俯瞰全局的意识这一前提,采用适当的管理技术,项目开展就会容易。软件项目的管理工作可以分位四个方面:软件项目的计划、软件项目的组织、软件项目的领导和软件项目的控制,下面对这四个方面进行详细的介绍。

软件开发项目的计划包括定义项目的目标,以及达到目标的方法。他涉及到项目实施的各个环节,带有全局的性质,是战略性的。计划应力求完备,要考虑到一些未知因素和不确定因素,考虑到可能的修改。计划应力求准确,尽可能提高所依据的数据的可靠程度。主要工作集中在软件项目的估算、软件开发成本的估算和软件项目进度安排。软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。这些估算应在软件项目开始时的一段有限时间内作出,并随着项目的进展进行更新。

软件项目管理过程开始于项目的计划,在做项目计划时,第一项活动是估算。已经使用的使用技术是时间和工作量的估算。因为估算是其他项目计划活动的基石,而且项目计划又未软件工程过程提供了工作方向,所以我们不能没有计划就着手开发,否则就会陷入盲目性。

估算本身带有风险,估算资源、成本和项目进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。估算的精确程度受到多方面的影响。首先,项目的复杂性对于增加软件计划的不确定性影响很大,复杂性越高,估算的风险就越高。复杂性是相对度量的,他与项目参加人员的经验有关,比如如果让搞MIS的项目组去搞操作系统设计显然增加了复杂性。其次,项目的规模对于估算的精确性和功效的影响也比较大,因为随着软件规模的扩大,软件相同元素之间的相互依赖、相互影响也迅速增加,因而估算时进行问题分解也会变得更加困难。还有项目的结构化程度也影响项目估算的风险,这里的结构性是指功能分解的简便性和处理信息的层次性,结构化程度提高,进行精确估算的能力就提高,相应风险将减少。此外,历史信息的有效性也影响估算的风险,在对过去的项目进行这综合的软件度量之后,就可以借用来比较准确地进行估算。影响估算的因素远不止这些,比如用户需求的频繁变更给估算带来非常大的影响。

估算的依据是软件的范围,包括功能,性能、限制、接口和可靠性。在估算开始之前,应对软件的功能进行评价,并对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用功能分解的办法。性能的考虑主要包括处理和响应时间的需求。约束条件则标识外部硬件、可用存储和其他现有系统对软件的限制。

另外软件项目计划还要完成资源估算,包括人力资源、硬件资源和软件资源。在考虑各种软件开发资源时最重要的是人,必须考虑人员的技术水平、专业、人数以及在开发过程各阶段对各种人员的需要。硬件资源作为一种工具投入。软件资源包括各种帮助开发的软件工具,比如数据库等。

工作两估算是最普遍使用的技术。经过功能分解之后,可以估计出每一个项目任务的分解都需要花费若干人年,总计之后就知道软件项目总体工作量。下面就是一个示意性工作量估算表。

软件开发成本主要是指软件开发过程所花费的工作量及其相应的代价。它不同于其他物理产品的成本,它主要包括人的劳动的消耗,人的劳动的消耗所需的代价就是软件产品的开发成本。

开发成本的估算方法有很多种,象简单的代码行技术,任务分解技术,自动估计成本技术,专家判定技术,还有参数方程法,标准值法,以及COCOMO模型法。其中COCOMO (Constructive Cost Model)模型法是一种精确、易于使用的成本估算方法,该模型按其详细程度分为三级:基本COCOMO模型、中间COCOMO模型和详细COCOMO模型。

软件项目的进度安排主要是考虑软件交付用户使用的这一段开发时间的安排。进度安排的准确程度可能比成本估计的准确程度更重要。软件产品可以靠重新定价或者靠大量的销售来弥补成本的增加,但进度安排的落空会导致市场机会的丧失或者用户不满意,而且也会导致成本的增加。因此在考虑进度安排时要把人员的工作量与花费的时间联系起来,合理分配工作量,利用进度安排的有效分析方法严密监视软件开发的进展情况,以使得软件开发的进度不致被拖延。

在进行进度安排时要考虑的一个主要问题是任务的并行性问题。当参加项目的人数不止一人是软件开发工作就会出现并行情况。因为并行任务是同时发生的所以进度计划表必须决定任务之间的从属关系,确定各个任务的先后次序和衔接,确定各个任务完成的持续时间。另外还应注意关键路径的任务,这样可以确定在进度安排中应保证的重点。常用的进度安排方法有两种,即甘特图法和工程网络法。

一个软件项目的组织方式主要有两种。软件项目可以是一个单独的开发项目,也可以与产品项目组成一个完整的软件产品项目。如果是订单开发,则成立软件项目组即可;如果是产品开发,需成立软件项目组和产品项目(负责市场调研和销售),组成软件产品项目组。公司实行项目管理时,首先要成立项目管理委员会,项目管理委员会下设项目管理小组、项目评审小组和软件产品项目组。

①项目管理委员会项目管理委员会是公司项目管理的最高决策机构,一般由公司总经理、副总经理组成。主要职责如下:(1)依照项目管理相关制度管理项目;(2)监督项目管理相关制度的执行;(3)对项目立项、项目撤消进行决策;(4)任命项目管理小组组长、项目评审委员会主任、项目组组长. ②项目管理小组项目管理小组对项目管理委员会负责,一般由公司管理人员组成。主要职责如下:(1)草拟项目管理的各项制度;(2)组织项目阶段评审;(3)保存项目过程中的相关文件和数据;(4)为优化项目管理提出建议。

③项目评审小组项目评审小组对项目管理委员会负责,可下设开发评审小组和产品评审小组,一般由公司技术专家和市场专家组成。主要职责如下:(1)对项目可行性报告进行评审;(2)对市场计划和阶段报告进行评审;(3)对开发计划和阶段报告进行评审;(4)项目结束时,对项目总结报告进行评审。

④软件产品项目组软件产品项目组对项目管理委员会负责,可下设软件项目组和产品项目组。软件项目组和产品项目组分别设开发经理和产品经理。成员一般由公司技术人员和市场人员构成。主要职责是:根据项目管理委员会的安排具体负责项目的软件开发和市场调研及销售工作。

同样,项目的组织结构同样重要。开发组织采用什么形式由软件项目的特点决定,同时也与参加人员的素质有关。通常有三种组织结构模式:

按课题组划分的模式:把开发人员按课题组成小组,小组成员自始至终承担课题的各项任务。该模式适用于规模不大的项目,并且要求小组成员在各方面有技术专长。

按职能划分的模式:把开发项目的软件人员按任务的工作阶段划分为若干工作小组。要开发的软件在每个专业小组完成阶段加工后沿工序流水线向下传递。这种流水作业的方式使用于多项目并行的情况。

矩阵形模型:这种模式是以上两种模式的复合。一方面按工作性质成立一些专门小组,另一方面每一个项目都有它的经理人员负责。每一个软件开发人员属于某一个专门小组,有参加某一个项目的工作。该模式的优点有一方面参加专门组的成员可以在组内交流在各个项目中取得的经验,这更有利于发挥专业人员的作用;另一方面,各个项目有专门的人员负责,有利于软件项目的完成。这种模式比较适合于规模比较大的项目。

组织结构的最后一层是程序设计小组的组织形式。通常认为程序设计工作是按独立的方式进行的,程序人员独立地完成任务。但这并不意味着相互之间没有联系。一般在人数比较少时组员之间的联系比较简单,但随着人数的增加,相互之间的联系变得负责起来。小组内部人员的组织形式对对生产率有着十分重要的影响。

在软件管理中的组织形式方面,常见的小组组织形式有三种,这三种形式可以灵活使用。 1. 主程序员制小组:相当于组长负责制,小组的核心由一位主程序员,另外配备两到三位技术员、一位后援工程师组成。这种组织结构突出主程序员的领导,强调主程序员与其他技术人员的联系。

2. 民主制小组:在民主制小组中,遇到问题可以在组员之间平等地交换换意见,工作组目标的制定以及决定的作出都由全体人员参加。这种组织形式强调发挥每个成员的积极性,并要求每个成员发挥主动精神和协作精神。

3. 层次式小组:在层次式小组中,组内人员分位三级:组长(项目负责人)一人负责全组工作,他直接领导两到三名高级程序员,每位高级程序员通过基层小组,管理若干位程序员。这种结构比较适合于项目本身就是层次结构的课题。

在另一个方面来说,合理地配备人员是成功地完成软件项目的切实保证。所谓合理地配备人员应包括按不同阶段适时运用人员,恰当掌握用人标准。一般来说,软件项目不同阶段不同层次技术人员的参与情况是不一样的。下图是典型的软件开发人员参与情况曲线。

在人力配备问题上,由于配置不当,很容易造成人力资源的浪费,并延误工期。特别是采用恒定人员配备方案时在项目的开始和最后都会出现人力过剩,而在中期又会出现人力不足的情况。

第四篇:软件项目管理的课程学习体会(共)

经过一个学期对软件项目管理的学习,通过这次分工做任务,真正对项目管理有了比较深刻的理解和认识,感触很多。

一. 项目要进行整体管理,善始善终

整个项目开始要做好项目整体计划,在项目的整个过程中,始终要按照项目计划执行,如若遇到项目发生变更,要进行影响分析,得到批准后制定变更计划,并按变更计划执行。变更的影响情况,如:费用,时间进度等要通知相关的项目利益干系人,说明变更的原因和产生的影响。

变更计划在软件项目中经常遇到。控制好软件项目的变更,首先需要做好项目的开始目标基准的确定,基准的用户需求明确,才能衡量出哪些是需要变更的。否则变更的东西和开始要求的东西混在一起,变更计划就无从制定,变更的界限也无从划清。

二. 项目范围管理的重要性

需求管理是项目范围管理中的问题,这是因为它实际上是开发过程中的所有管理原则的先决条件。只有在开发的目标被清楚明白地表述和理解的情况下,软件开发才能以一种有计划的有序的方式进行。实际上,没有文档化的需求,在开发工作完成前后都很有可能发生产品与要求的偏离。计划、追踪、配置管理以及软件质量保证这些在其他关键过程中涉及的原则,都是从一个稳定的基础开始的,那就是文档化的需求基线。

三.项目时间管理理论指导我们在项目管理中怎样抓主要矛盾

项目管理的实施最为直观的就是缩短项目时间。利用项目管理理论、方法,有许多缩短时间的例子。美国路易斯维化工厂检修时把检修流程精细分解,按导向图建立起控制关系。他们惊奇地发现,检修过程选择不同路径总时间是有差别的。通过反复压缩最长路径上的任务,将工期反复优化,最后只用78个小时就完成了通常需125小时完成的检修,节省时间38%。这就是至今项目管理工作者还在应用的著名的时间管理技术CPM,即“关键路径法”。

所以我们在软件的项目管理中,也要将时间控制理论运用进来,结合软件工程的实际,将任务分解的更加详细,并用网络图将整个工作过程建立起来,估算好每个阶段的历时,找出关键路径,并通过快速跟进方法,将关键路径的工期缩短,以提高工效。

体会还有很多,总之通过这次学习自己对项目的管理又有了新的认识,我会将这些理论知识运用到实际工作中去的。以提高项目的管理水平,提高项目的质量,降低项目的成本,降低项目的风险,最终提高企业的效益。

第五篇:软件工程课程设计——物业管理系统

软件工程

——物业管理系统的开发

学生姓名: 武鹏艳 乔海亮

学生班级: 软件工程122002班

学生学号: 201220040220 201220040213 指导老师: 潘理虎 日 期: 2014.6.20

目录

一.背景分析............................................................................................... 1 二.系统设计问题定义 .............................................................................. 1 三.系统分析............................................................................................. 1

1、现行系统分析 ................................................................................ 1

2、系统可行性分析 ............................................................................ 1 四.系统描述............................................................................................. 2

1、系统需求具体描述 ........................................................................ 2

2、系统功能具体描述 ........................................................................ 3 五.系统流程图设计 ................................................................................ 3 六.系统功能模块图设计 ........................................................................ 4

1、系统性能需求分析 ...................................................................... 4

2、系统功能需求分析 ...................................................................... 5 七.系统功能模型设计 ............................................................................ 5 八.系统所涉及的实体联系设计 ............................................................ 5 九. 系统状态图设计 .............................................................................. 6 十. 系统数据流图设计 .......................................................................... 7 十一.系统人机交互界面的设计 ............................................................ 9 十二. 系统设计的实现 ........................................................................ 11 十三. 系统设计的代码附录 ................................................................ 20

一.背景分析

随着市场经济的发展和人们生活水平的提高,小区物业方面缴费方面越来越多,但缴费难的问题继续困扰着我们,需要有一个系统来实现银行卡交水电费,实现小区管理而且小区用户可以更好的维护小区各项物业管理业务,处理工作,实现缴费方便功能,就可以避免应缴费不及时而造成停电停水的情况发生。 二.系统设计问题定义

1、实现对住户水电使用信息管理。

2、实现住户的信息查询与更新。 三.系统分析 (1)现行系统分析

以往住户的更替使水电费管理有些混乱,不能顺利收取费用。现在的系统会对小区水电管理存在的不完善之处做相应的改进,及时提醒住户缴费,而且对每户人员及时更新并做详细记录,为操作人员做权限设置。

(2)系统可行性分析 A系统成本效益分析

1、货币的时间价值

假设生命周期为t年,编写程序需m元,应用程序后,每年可节省n元,年利率为p。

2、纯收入

工程的纯收入是:r=n/(1+p)+n/(1+p)²+„„+n/(1+p)^n-m

1

3、投资回收率

m=F1/(1+j)+F2/(1+j)²+„„+Fn/(1+j)^n (Fi是第i年底效益,j是投资回收率。) B系统可行性综述

1、经济可行性:获益是当初投资总额的三倍或三倍以上,可以进行投资。

2、技术可行性:该系统简单、使用,且以现有的技术可以实现系统中的功能。

3、社会可行性:该系统面向全社会小区居民的物业管理,没有负面影响,并且可以为社会带来很高的效益。 四.系统描述

(1)系统需求具体描述

所设计的物业管理系统,它是由住户信息管理,缴费管理,投诉管理,楼房管理组成的网络系统。 a住户信息管理

由住户注册,注册姓名,联系方式,住址,邮箱,入住时间。注册成功后,由系统管理员统一管理,管理员可以进行查询,修改信息。住户注册成功可以进行登录系统进行查询,但是不可以修改。进行信息的修改需要投诉给管理员,管理员进行修改。 b缴费管理

由住户执行,住户可以查询水电费使用情况,余额不足进行缴费,进入银行缴费界面,输入账号密码,进行缴费。

2

c投诉管理

由管理员进行查询,用户可以对小区物业管理水电费物业部门投诉建议。管理员可以根据客户要求,能对住户水电费信息、修改、查询和删除等操作,并且还要实现包括水、电、煤气费在内的各项物业管理费用的统计、查询和报表生成。 d住户和管理员

住户可以管理自己的信息,可以提交投诉信息,可以浏览收费信息和缴费信息。管理员可以对纪录进行增加、删除、修改,管理投诉等更新操作。用户进入系统必须先输入用户名和密码,按“确认”按钮后,系统辨别用户身份,对合法用户根据用户的权限赋予相应的使用功能。

(2) 系统功能具体描述

小区物业管理系统具体实现以下功能:

1.对小区所有房屋资料的录入和增,删,改,查询等功能的实现。

2.对本小区内住户的详细资料的管理,包括增,删,改,查询等功能的实现。

3.实现物业设备管理,仪表包括水,电数据管理,收费管理。仪表数据管理模块管理每个住户的水,电的资料,统计住户每月的用量以及需要交纳的费用,收费管理记录物业公司对住户的每一笔收费,包括水,电等使用费用和物业管理费用,余额不足进行银行卡充值。 五.系统流程图设计

3

六.系统功能模块图设计

1、系统性能需求分析

所设计的系统主要涉及到四大部分:系统管理,基本信息管理,水电管理,费用查询。

(1) 系统管理:管理系统操作人员,设置操作人员口令和权限。在满足不同系统用户的操作需求的基础上,提高系统的安全性。 (2) 基本信息管理:维护小区基本信息。

住户信息管理:入住登记,信息修改,迁出注销,查询。 房屋信息管理:房屋信息添加,修改,删除,查询。 户型信息管理:小区户型登记。 (3) 水电服务管理:完成小区各种服务,例如物业费用缴费管理功能。

4

(4) 查询统计管理:本系统中各种数据的统计与查询功能。

2、系统功能需求分析

小区物业管理水电费物业部门用来对住宅小区内水费,电费,缴费情况信息管理系统。根据客户要求,系统要能对住户水电费信息、修改、查询和删除等操作,并且还要实现包括水、电、煤气费在内的各项物业管理费用的统计、查询和报表生成。因此,实现该物业管理系统功能模块图如下

七.系统功能模型设计

八.系统所涉及的实体联系设计

5

九.系统状态图设计 (1)总状态图设计

6

(2)系统银行卡模块状态设计

十.系统数据流图设计

7

(1)系统数据流程图

(2)系统数据字典 (1)

名字:用水信息记录表 别名:用水信息

描述:水量剩余小于临界值时报告住户

定义:用水信息记录表=户主信息+水量使用费+收费日期

8

位置:输出打印机 (2)

名字:用电信息表 别名:电量信息

描述:剩余电量小于临界值时报告住户

定义:用电信息表=户主信息+电量使用费+收费日期 位置:输出打印机 (3)

名字:住户信息表 描述:每户人员的详细信息

定义:住户信息表=住户姓名+性别+年龄+联系方式+证件号码 位置:输出打印机,显示在屏幕 十一.系统人机交互界面的设计 ①登陆界面的设计

9

②住户界面的设计

③管理员界面的设计

10

十二.系统设计的实现 (1)数据库载入

(2).住户登陆成功界面

11

(3)住户界面

(4)住户修改信息

12

(5)住户查询物业信息

(6)住户反馈

13

(7)住户缴费

(8)银行卡登陆

14

(9)银行卡登陆成功

(10)银行卡缴费界面

(11)银行卡修改密码界面

15

(12)管理员登陆

(13)管理员界面

16

(14)管理员查询住户信息界面

(15)管理员修改住户信息

17

(16)管理员更新物业信息

(17)管理员添加管理员信息

18

(18)管理员接收反馈

(19)管理员接收反馈界面

19

十三.系统设计的代码附录

package xuesheng;

import javax.swing.*; import java.awt.event.*; import java.sql.*;

public class systems extends JFrame implements ActionListener { static systems ss;

JPanel panel = new JPanel(); JLabel label1 = new JLabel("输入姓名:"); JTextField name = new JTextField(); JLabel label2 = new JLabel("密 码:"); JPasswordField pwd = new JPasswordField(); JButton Enter = new JButton("登录"); JButton Exit = new JButton("退出"); String url = "F:JAVA背景图片4.jpg"; ButtonGroup bgp = new ButtonGroup(); JRadioButton ihb = new JRadioButton("住户"); JRadioButton mg = new JRadioButton("管理员");

public systems() {

super("物业系统登录");

this.setResizable(false); JLabel img = new JLabel(new ImageIcon(url));

img.setBounds(0,0,500,100);

panel.add(img);

ihb.setBounds(165,210,70,20);

mg.setBounds(265,210,70,20);

bgp.add(ihb);

bgp.add(mg);

panel.add(ihb);

panel.add(mg);

Enter.setBounds(150,250,80,20);

Exit.setBounds(270,250,80,20);

Enter.addActionListener(this);

Exit.addActionListener(this);

panel.add(Enter);

panel.add(Exit); panel.setLayout(null);

this.add(panel); 20

label1.setBounds(135,130,100,25);

panel.add(label1); name.setBounds(265,130,100,25);

panel.add(name);

label2.setBounds(135,165,100,25);

panel.add(label2); pwd.setBounds(265,165,100,25);

panel.add(pwd);

this.setBounds(100,100,500,350);

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

public void actionPerformed(ActionEvent e) {

if(e.getSource()==Enter)

{

String username , password;

username = name.getText();

password = pwd.getText();

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(ss,ce.getMessage());

}

if(ihb.isSelected())

{

try

{

//

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

String sql = "select * from inhabitant where 姓名=? and 密码=?";

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, username);

pstmt.setString(2, password);

ResultSet rs = pstmt.executeQuery();

21

if(rs!=null)

{

JOptionPane.showMessageDialog(ss,"登陆成功");

new inhabitants();

}

else

{

JOptionPane.showMessageDialog(ss,"登录失败");

}

rs.close();

pstmt.close();

}

catch (SQLException se)

{

JOptionPane.showMessageDialog(ss,se.getMessage());

}

}

else if(mg.isSelected())

{

try

{

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

String sql = "select * from manager where 姓名=? and 密码=?";

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, username);

pstmt.setString(2, password);

ResultSet rs = pstmt.executeQuery();

if(rs!=null)

{

JOptionPane.showMessageDialog(ss,"登陆成功");

new managers();

}

else

{

JOptionPane.showMessageDialog(ss,"登录失败");

}

rs.close();

pstmt.close(); 22

}

catch (SQLException se)

{

JOptionPane.showMessageDialog(ss,se.getMessage());

}

}

}

else

{

System.exit(0);

} }

public static void main(String[] args) {

new systems(); } }

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class inhabitants extends JFrame implements ActionListener { JPanel panel=new JPanel(); JMenuBar jmb = new JMenuBar(); JMenu Message = new JMenu("信息"); JMenu Payment = new JMenu("缴费"); JMenu back = new JMenu("反馈"); JMenuItem Item1 = new JMenuItem("修改住户信息"); JMenuItem Item2 = new JMenuItem("查询物业信息"); JMenuItem Item3 = new JMenuItem("发送反馈"); JMenuItem Item4 = new JMenuItem("交电费"); JMenuItem Item5 = new JMenuItem("交水费"); String url = "F:JAVA背景图片36.jpg"; public inhabitants() { 23

super("住户界面");

this.setSize(500,400);

this.setVisible(true); JLabel img = new JLabel(new ImageIcon(url));

img.setBounds(0,0,500,600);

panel.add(img);

panel.setLayout(null);

this.add(panel);

this.setResizable(false);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setJMenuBar(jmb);

jmb.add(Message);

jmb.add(back);

jmb.add(Payment);

Message.add(Item1);

Message.add(Item2);

back.add(Item3);

Payment.add(Item4);

Payment.add(Item5);

Item1.addActionListener(this);

Item2.addActionListener(this);

Item3.addActionListener(this);

Item4.addActionListener(this);

Item5.addActionListener(this); }

public void actionPerformed(ActionEvent e) {

if(e.getSource()==Item1)

{

AlterInhabitantInformation ai = new AlterInhabitantInformation();

}

else if(e.getSource()==Item2)

{

Serch ser = new Serch();

}

else if(e.getSource()==Item3)

{

tickling ib=new tickling();

}

else if(e.getSource()==Item4) 24

{

ATM atm=new ATM();

}

else if(e.getSource()==Item5)

{

ATM atm=new ATM();

} }

public static void main(String[] args) {

inhabitants stu = new inhabitants(); } }

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class managers extends JFrame implements ActionListener { JMenuBar bar = new JMenuBar(); JMenu menu1 = new JMenu("信息"); JMenu menu2 = new JMenu("反馈"); JMenuItem item1 = new JMenuItem("查询住户信息"); JMenuItem item2 = new JMenuItem("修改住户信息"); JMenuItem item3 = new JMenuItem("更新物业信息"); JMenuItem item4 = new JMenuItem("接收反馈"); JMenuItem item5 = new JMenuItem("添加管理员信息"); String url = "F:JAVA背景图片36.jpg"; JPanel jpl = new JPanel();

public managers() {

super("管理员界面");

this.setSize(500,300);

this.setResizable(false); 25

} this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setJMenuBar(bar); this.add(jpl); jpl.setLayout(null); bar.add(menu1); bar.add(menu2); menu1.add(item1); menu1.add(item2); menu1.add(item3); menu1.add(item5); menu2.add(item4); item1.addActionListener(this); item2.addActionListener(this); item3.addActionListener(this); item4.addActionListener(this); item5.addActionListener(this); public void actionPerformed(ActionEvent e) { if(e.getSource()==item1) {

ReferMsg rm = new ReferMsg(); } if(e.getSource()==item2) {

AlterInhabitantInformations ai = new AlterInhabitantInformations(); } else if(e.getSource()==item3) {

AddMsg sc = new AddMsg(); } else if(e.getSource()==item4) {

tickling tl=new tickling (); } else if(e.getSource()==item5) {

managerinformation mf=new managerinformation (); } } 26

public static void main(String[] args) {

managers mng = new managers(); } }

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*; import java.awt.font.*; import java.sql.*;

public class ReferMsg extends JFrame implements ActionListener { static ReferMsg s; JLabel title = new JLabel("查询住户信息",JLabel.CENTER); Font f = new Font("楷体",Font.BOLD+Font.ITALIC,16); JPanel jpl = new JPanel(); JLabel label1 = new JLabel("请输入门牌号:",JLabel.CENTER); JTextField num = new JTextField(); JButton serch = new JButton("查询"); JButton fangqi = new JButton("返回"); JLabel label2 = new JLabel("门牌号:",JLabel.LEFT); JLabel label3 = new JLabel("姓名:",JLabel.LEFT); JLabel label4 = new JLabel("性别:",JLabel.LEFT); JLabel label5 = new JLabel("年龄:",JLabel.LEFT); JLabel label6 = new JLabel("籍贯:",JLabel.LEFT); JLabel label7 = new JLabel("身份证号:",JLabel.LEFT); JLabel label8 = new JLabel("电话:",JLabel.LEFT); JLabel label9 = new JLabel("职业:",JLabel.LEFT);

JTextField[] txt ={ new JTextField() , new JTextField() , new JTextField() , new JTextField() , new JTextField() ,new JTextField() , new JTextField() ,new JTextField()}; static int p = 140;

public ReferMsg() 27

{ super("查询住户信息"); this.setResizable(false); this.setSize(500,550); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); title.setFont(f); this.add(jpl); jpl.setLayout(null); title.setBounds(80,20,300,20); jpl.add(title); label1.setBounds(100,60,90,20); jpl.add(label1); num.setBounds(200,60,140,20); jpl.add(num); serch.setBounds(130,100,90,20); fangqi.setBounds(240,100,90,20); jpl.add(serch); jpl.add(fangqi); serch.addActionListener(this); fangqi.addActionListener(this); label2.setBounds(100,140,140,20); label3.setBounds(100,180,140,20); label4.setBounds(100,220,140,20); label5.setBounds(100,260,140,20); label6.setBounds(100,300,140,20); label7.setBounds(100,340,140,20); label8.setBounds(100,380,140,20); label9.setBounds(100,420,140,20); jpl.add(label2); jpl.add(label3); jpl.add(label4); jpl.add(label5); jpl.add(label6); jpl.add(label7); jpl.add(label8); jpl.add(label9);

for(int i = 0 ;i

txt[i].setBounds(200,p,140,20);

jpl.add(txt[i]);

p=p+40; } 28

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==fangqi)

{

this.setVisible(false);

new managers();

}

if(e.getSource()==serch)

{

String mp = num.getText();

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(s,ce.getMessage());

}

try

{

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("select * from inhabitant where inhabitant.门牌号 = + mp + AND inhabitant.门牌号 = inhabitant.门牌号");

while(rs.next())

{

for(int i = 0 ; i

{

txt[i].setText(rs.getString(i+1));

}

}

}

catch (SQLException se)

{

JOptionPane.showMessageDialog(s,se.getMessage());

}

}

else

{

for(int i = 0;i

{

txt[i].setText("");

}

num.setText("");

} }

public static void main(String[] args) {

ReferMsg s = new ReferMsg(); } }

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*; import java.sql.*;

public class Serch extends JFrame implements ActionListener { /*查询学生信息控件*/ static Serch s; JPanel jpl = new JPanel(); JLabel SCH = new JLabel("物业信息",JLabel.CENTER); JLabel label1 = new JLabel("请输入门牌号:",JLabel.CENTER); JButton serch = new JButton("查询"); JLabel label2 = new JLabel("姓名:",JLabel.CENTER); JLabel label3 = new JLabel("电量:",JLabel.CENTER); JLabel label4 = new JLabel("水量:",JLabel.CENTER); JLabel label5 = new JLabel("性别:",JLabel.CENTER); ButtonGroup bgp = new ButtonGroup(); JRadioButton man = new JRadioButton("男"); JRadioButton women = new JRadioButton("女"); JTextField num = new JTextField(); JTextField nam = new JTextField(); JTextField ele = new JTextField(); 30

JTextField wat = new JTextField(); JButton fangqi = new JButton("返回"); public Serch() { this.setSize(500,400); this.setVisible(true); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jpl); jpl.setLayout(null); serch.addActionListener(this); fangqi.addActionListener(this); /*查询面板*/ SCH.setBounds(100,20,300,20); jpl.add(SCH); label1.setBounds(100,60,100,20); jpl.add(label1); num.setBounds(220,60,140,20); jpl.add(num); serch.setBounds(120,100,90,20); fangqi.setBounds(260,100,90,20); jpl.add(serch); jpl.add(fangqi); label2.setBounds(100,140,70,20); jpl.add(label2); nam.setBounds(190,140,140,20); jpl.add(nam); label5.setBounds(100,180,70,20); jpl.add(label5); man.setBounds(205,180,60,20); women.setBounds(285,180,60,20); bgp.add(man); bgp.add(women); jpl.add(man); jpl.add(women); label3.setBounds(100,220,70,20); jpl.add(label3); ele.setBounds(190,220,140,20); jpl.add(ele); label4.setBounds(100,260,70,20); jpl.add(label4); wat.setBounds(190,260,140,20); jpl.add(wat); 31

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==fangqi)

{

this.setVisible(false);

new inhabitants();

}

String mp = num.getText();

if(e.getSource()==serch)

{

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(s,ce.getMessage());

}

try

{

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("select * from PropertyInformation where 门牌号 = + mp + ");

while(rs.next())

{

nam.setText(rs.getString("姓名"));

if(rs.getString("性别").equals("男"))

{

man.setSelected(true);

}

else

{

women.setSelected(true);

}

ele.setText(rs.getString("电量"));

wat.setText(rs.getString("水量"));

}

}

catch (SQLException se) 32

{

JOptionPane.showMessageDialog(s,se.getMessage());

}

} }

public static void main(String[] args) {

Serch sch = new Serch(); } }

package xuesheng; import java.awt.*; import java.awt.event.*; class Selection extends Frame implements ActionListener{ Button button1,button2,button3,button4,button5; Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Panel p4 = new Panel(); Panel p5 = new Panel(); Panel p = new Panel(); Account act;

public Selection(){} Selection(String s,Account act){

super(s);

this.act=act;

this.setLayout(null);

this.setLayout(new GridLayout(6,1));

p.add(new Label("请选择你要的服务"));

this.add(p); /*各种服务功能*/

button1 = new Button("缴水费");

p1.add(button1);

this.add(p1);

button2 = new Button("交电费");

p2.add(button2);

this.add(p2);

button3 = new Button("查询"); 33

p3.add(button3); this.add(p3); button4 = new Button("退出"); p4.add(button4); this.add(p4); button5 = new Button("修改密码"); p5.add(button5); this.add(p5); this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

}); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); setBounds(150,150,225,275); setVisible(true); validate(); } public void actionPerformed(ActionEvent e){ if(e.getSource()==button1){//取款

GetWater gw = new GetWater("交水费",act);

} if(e.getSource()==button2){//取款

GetBalance gb = new GetBalance("交电费",act);

} if(e.getSource()==button3){//查询余额

Query q =new Query("查询余额",act); } else if(e.getSource()==button4){//退出

System.exit(0);

dispose(); } else if(e.getSource()==button5){//修改密码

Account 修改密码;

ChangePassword cp = new ChangePassword("修改密码",act); 34

dispose();

} } }

package xuesheng; import java.awt.Color; import java.awt.Font;

import javax.swing.*; public class tickling { public tickling() { //创建JFrame对象

JFrame f=new JFrame("反馈"); //创建具有指定文本的JLbabel对象 JLabel Label=new JLabel("反馈:"); Font ft = new Font("黑体" , Font.BOLD , 24);

Label.setFont(ft);

Label.setForeground(Color.black); //创建列数为20的JTextField对象 JTextField t=new JTextField(20); JPanel panel=new JPanel();

panel.add(Label); t.setBounds(70,100,300,120); panel.add(t); Font fo = new Font("黑体" , Font.BOLD , 24); t.setFont(fo); Label.add(t); f.setVisible(true);

//将JLabel组件添加到JFrame窗体上 f.getContentPane().add(Label); f.getContentPane().add(Label); f.setSize(400,350); f.setVisible(true); } public static void main(String[] args) { 35

tickling tl = new tickling(); }

}

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*; import java.sql.*;

public class AlterInhabitantInformation extends JFrame implements ActionListener { static AlterInhabitantInformation ss; JLabel[] label = {new JLabel("门牌号:") , new JLabel("姓名:") , new JLabel("性别:") , new JLabel("年龄:") , new JLabel("籍贯:") , new JLabel("身份证号:") , new JLabel("电话:") , new JLabel("职业:") }; JTextField[] txt = {new JTextField() , new JTextField() , new JTextField() , new JTextField() , new JTextField() ,new JTextField() , new JTextField() ,new JTextField() }; JButton add = new JButton("确认"); JButton fangqi = new JButton("返回"); JPanel jpl = new JPanel(); JLabel title = new JLabel("修改住户信息" , JLabel.CENTER); Font f = new Font("黑体" , Font.BOLD , 16); int s = 100;

public AlterInhabitantInformation() {

super("修改住户信息");

this.setResizable(false);

this.setSize(500,600);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

this.add(jpl);

add.addActionListener(this);

fangqi.addActionListener(this);

jpl.setLayout(null); 36

title.setBounds(150,40,200,20);

title.setFont(f);

title.setForeground(Color.red);

jpl.setBackground(Color.LIGHT_GRAY);

jpl.add(title);

for(int i = 0 ; i

{

label[i].setBounds(100,s,140,20);

jpl.add(label[i]);

txt[i].setBounds(260,s,140,20);

jpl.add(txt[i]);

s=s+40;

}

add.setBounds(150,s,80,20);

fangqi.setBounds(250,s,80,20);

jpl.add(add);

jpl.add(fangqi); }

public void actionPerformed(ActionEvent e) {

if(e.getSource()==fangqi)

{

this.setVisible(false);

new inhabitants();

}

if(e.getSource()==add)

{

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(ss,ce.getMessage());

}

try

{

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

Statement stmt = con.createStatement();

int a = stmt.executeUpdate("insert into inhabitant(门牌号,姓名,性别,年龄,籍贯,身份证号,电话,职 37

业)values(+txt[0].getText()+,+txt[1].getText()+,+txt[2].getText()+,+txt[3].getText()+,+txt[4].getText()+,+txt[5].getText()+,+txt[6].getText()+,+txt[7].getText()+)");

if(a==1)

{

JOptionPane.showMessageDialog(ss,"添加成功");

}

else

{

JOptionPane.showMessageDialog(ss,"添加失败");

}

}

catch (SQLException se)

{

JOptionPane.showMessageDialog(ss,se.getMessage());

}

}

else

{

for(int i = 0 ; i

{

txt[i].setText("");

txt[0].requestFocus();

}

} }

public static void main(String[] args) {

AlterInhabitantInformation as = new AlterInhabitantInformation(); } }

package xuesheng;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*; import java.sql.*; 38

public class AlterInhabitantInformations extends JFrame implements ActionListener { static AlterInhabitantInformation ss; JLabel[] label = {new JLabel("门牌号:") , new JLabel("姓名:") , new JLabel("性别:") , new JLabel("年龄:") , new JLabel("籍贯:") , new JLabel("身份证号:") , new JLabel("电话:") , new JLabel("职业:") }; JTextField[] txt = {new JTextField() , new JTextField() , new JTextField() , new JTextField() , new JTextField() ,new JTextField() , new JTextField() ,new JTextField() }; JButton add = new JButton("确认"); JButton fangqi = new JButton("返回"); JPanel jpl = new JPanel(); JLabel title = new JLabel("修改住户信息" , JLabel.CENTER); Font f = new Font("黑体" , Font.BOLD , 16); int s = 100;

public AlterInhabitantInformations() {

super("修改住户信息");

this.setResizable(false);

this.setSize(500,600);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

this.setVisible(true);

this.add(jpl);

add.addActionListener(this);

fangqi.addActionListener(this);

jpl.setLayout(null);

title.setBounds(150,40,200,20);

title.setFont(f);

title.setForeground(Color.red);

jpl.setBackground(Color.LIGHT_GRAY);

jpl.add(title);

for(int i = 0 ; i

{

label[i].setBounds(100,s,140,20);

jpl.add(label[i]);

txt[i].setBounds(260,s,140,20);

jpl.add(txt[i]);

s=s+40;

}

add.setBounds(150,s,80,20);

fangqi.setBounds(250,s,80,20);

jpl.add(add); 39

jpl.add(fangqi); }

public void actionPerformed(ActionEvent e) {

if(e.getSource()==fangqi)

{

this.setVisible(false);

new managers();

}

if(e.getSource()==add)

{

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(ss,ce.getMessage());

}

try

{

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

Statement stmt = con.createStatement();

int a = stmt.executeUpdate("insert into inhabitant(门牌号,姓名,性别,年龄,籍贯,身份证号,电话,职业)values(+txt[0].getText()+,+txt[1].getText()+,+txt[2].getText()+,+txt[3].getText()+,+txt[4].getText()+,+txt[5].getText()+,+txt[6].getText()+,+txt[7].getText()+)");

if(a==1)

{

JOptionPane.showMessageDialog(ss,"添加成功");

}

else

{

JOptionPane.showMessageDialog(ss,"添加失败");

}

}

catch (SQLException se)

{

JOptionPane.showMessageDialog(ss,se.getMessage());

} 40

}

else

{

for(int i = 0 ; i

{

txt[i].setText("");

txt[0].requestFocus();

}

} } }

package xuesheng;

import javax.swing.*;

import java.awt.event.*; import java.sql.*;

public class AddMsg extends JFrame implements ActionListener { static AddMsg s; /*添加住户信息控件*/ JPanel jpl = new JPanel(); JLabel label1 = new JLabel("更新物业信息",JLabel.CENTER); JLabel label2 = new JLabel("门牌号:",JLabel.CENTER); JLabel label3 = new JLabel("姓名:",JLabel.CENTER); JLabel label4 = new JLabel("性别:",JLabel.CENTER); JLabel label5 = new JLabel("电量:",JLabel.CENTER); JLabel label6 = new JLabel("水量:",JLabel.CENTER); JTextField num = new JTextField(2); JTextField nam = new JTextField(4); ButtonGroup bgp = new ButtonGroup(); JRadioButton man = new JRadioButton("男"); JRadioButton women = new JRadioButton("女"); JTextField ele = new JTextField(); JTextField wat = new JTextField(); JButton fangqi = new JButton("返回"); JButton addmsg = new JButton("添加");

public AddMsg() 41

{

} super("更新物业信息"); this.setResizable(false); this.setSize(500,400); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(jpl); jpl.setLayout(null); addmsg.addActionListener(this); fangqi.addActionListener(this); /*插入面板*/ label2.setBounds(100,50,70,20); jpl.add(label2); num.setBounds(190,50,140,20); jpl.add(num);

label3.setBounds(100,90,70,20); jpl.add(label3); nam.setBounds(190,90,140,20); jpl.add(nam);

label4.setBounds(100,130,70,20); jpl.add(label4); man.setBounds(190,130,60,20); women.setBounds(270,130,60,20); jpl.add(man); jpl.add(women); bgp.add(man); bgp.add(women); label5.setBounds(100,170,70,20); jpl.add(label5); ele.setBounds(190,170,140,20); jpl.add(ele); label6.setBounds(100,210,70,20); jpl.add(label6); wat.setBounds(190,210,140,20); jpl.add(wat); fangqi.setBounds(120,250,90,20); addmsg.setBounds(240,250,90,20); jpl.add(fangqi); jpl.add(addmsg); 42

public void actionPerformed(ActionEvent e) {

if(e.getSource()==fangqi)

{

this.setVisible(false);

new managers();

}

if(e.getSource()==addmsg)

{

String sex;

if(man.isSelected())

{

sex="男";

}

else

{

sex="女";

}

try

{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

}

catch (ClassNotFoundException ce)

{

JOptionPane.showMessageDialog(s,ce.getMessage());

}

try

{

String number = num.getText();

String name = nam.getText();

String electyic = ele.getText();

String water = wat.getText();

//1注册驱动

Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=物业管理系统","sa","11111111");

String sql = "insert into PropertyInformation(门牌号 ,姓名, 性别 , 电量 , 水量 )values(?,?,?,?,?)";

//2预处理

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, number);

pstmt.setString(2, name);

pstmt.setString(3, sex);

pstmt.setString(4, electyic); 43

pstmt.setString(5, water);

//3执行

int a = pstmt.executeUpdate();

if(a==1)

{

JOptionPane.showMessageDialog(s,"已成功添加");

}

else

{

JOptionPane.showMessageDialog(s,"添加失败");

}

pstmt.close();

}

catch (SQLException se)

{

System.out.println(1);

JOptionPane.showMessageDialog(s,se.getMessage());

}

}

else

{

num.setText("");

nam.setText("");

ele.setText("");

wat.setText("");

num.requestFocus();

} }

public static void main(String[] args) {

new AddMsg(); } }

package xuesheng; public class ATM{ public ATM(){

new WindowBox("登录页面"); } public static void main(String [] args){ ATM atm=new ATM(); } 44

}

package xuesheng; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*; import java.io.*; /*登陆页面首窗口*/ class WindowBox extends Frame implements ActionListener{ Box baseBox,box1,box2; TextField tf1,tf2; Button button1; Button button2; WindowBox(String s){//构造方法

super(s); tf1 = new TextField(6); tf2 = new TextField(6);

box1= Box.createVerticalBox();

box1.add(new Label("请输入你的卡号")); //输入卡号

box1.add(Box.createVerticalStrut(8));

box1.add(new Label("请输入你的支付密码"));//输入密码

box2=Box.createVerticalBox();

box2.add(tf1);

//box2.add(new TextField(16));

box2.add(Box.createVerticalStrut(8));

box2.add(tf2);

//box2.add(new TextField(16));

baseBox=Box.createHorizontalBox();

baseBox.add(box1);

baseBox.add(Box.createHorizontalStrut(10));

baseBox.add(box2);

add(baseBox);

button1= new Button("确定");//加入按钮

button1.addActionListener(this);

add(button1);

button2 = new Button("退卡");//退卡按钮

button2.addActionListener(this);

add(button2);

setLayout(new FlowLayout());

/*监听器*/ 45

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

setBounds(220,225,225,275);

setVisible(true); } public void actionPerformed(ActionEvent e){

Account act;

String card; String pwd;

act=new Account("12","Devil","12",50000);//初始化

/*选择各种服务*/

if(e.getSource() == button1){

String number1,number2;//输入的两个卡号和密码的变量

number1=tf1.getText();

number2=tf2.getText();

/*判断两次输入的卡号和密码是否正确*/

if(("123".equals(number1))&&("123".equals(number2)))

{

Selection s = new Selection("选择服务",act);

}else{

dispose();

ErrorWarn ew = new ErrorWarn();//报输入密码或卡号不正确

}

} if(e.getSource()==button2){

System.exit(0);

dispose();//退出

} } }

package xuesheng; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*; class Query extends Frame implements ActionListener{ 46

//Account act; Button button; Account act; Query(String s,Account act){//构造函数

super(s);

this.act = act;

button=new Button("确定");

//TextField tf = new TextField(6);

Panel panel1 = new Panel();

Panel panel = new Panel();

panel1.add(new Label("你的余额为: " + act.get_Money()));//查询余额的方法

//panel1.add(tf);

button.addActionListener(this);

panel.add(button);

this.add(panel);

this.add(panel1);

this.setLayout(new GridLayout(2,1));

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

setBounds(200,200,150,150);

setVisible(true); } public void actionPerformed(ActionEvent e){

if(e.getSource()==button){

dispose();

Selection s = new Selection("选择服务",act);//返回选择服务

}

} }

package xuesheng; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*; 47

class GetBalance extends Frame implements ActionListener{ Box baseBox, box1,box2; Button button; TextField tf; Account act; GetBalance(String s,Account act){//构造函数

super(s);

this.act=act;

button=new Button("确定");

Panel panel = new Panel();

Panel panel1 = new Panel();

tf = new TextField(6);

this.setLayout(new GridLayout(2,1));

panel1.add(new Label("请输入你想交电费的数目"));

panel1.add(tf);

panel.add(button);

this.add(panel1);

this.add(panel);

button.addActionListener(this);

this.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

});

setBounds(200,200,150,150);

this.setVisible(true); }

public void actionPerformed(ActionEvent e){

//System.out.println(e.getActionCommand());

double money;

money = Double.parseDouble(tf.getText().trim());

if(e.getSource()==button){

if(act.get_Money()<0){//判断余额是否为负

dispose();

ErrorWarn4 ew4 = new ErrorWarn4();

}

else if(money<=act.get_Money()){//交费的数额不大于余额

if((money%100!=0)||(money>=5000)){

dispose();

ErrorWarn6 ew6 = new ErrorWarn6();

} 48

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:软件项目管理学习心得下一篇:软件开发综合实习报告