还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1前言课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节通常,课程设计中的问题比平时的习题复杂得多,也更接近实际课程设计着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力另一方面,使书上的知识变活,起到深化理解和灵活应用教学内容的目的平时的习题局限于一个和二个知识点,而课程设计题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计、程序设计、基本技能和技巧,以及一整套软件工作规范的训练和科学作风的培养我们这组选的课题是工资管理系统的设计与__从接到任务书开始,我们首先完成了系统的需求分析与概要设计,在完成这些任务时,我们深感理论与实践的结合的是需要一个过程从个人分工到整个系统分析,从设计到测试之所以能顺利完成是和大家的努力分不开的虽然还有一些不足之处,但是我们还是从中获益不少下面简要介绍一下我们课题组的分工,我们这组的分工其实借鉴了ShariLawren__Pfleeger和JoanneM.Atlee合著的SOFTWAREENGINEERINGTheoryandPracti__高等教育出版社第三版影印版中的一些理论,这些知识可以参考此书的第25页中关于“__团队的角色分工”一节根据分工的细化和部分重叠原则,我们组的具体分如下1项目管理:王培2需求分析:钟耀明、贺纯3概要设计:贺纯、赵亦娴4详细设计:赵亦娴、王培、钟耀明、杨安、陈华、贺纯5程序编码:王培、陈华6系统测试:陈华、杨安我的主要任务是概要设计和详细设计2需求分析
2.1任务概述现代企业基本上都引进了计算机软件对公司业务进行管理,这样做有很多优点,一是提高了工作的效率,同时也减少了手工操作的错误以及人员的开支本课题__的工资管理系统正是基于这样的目的实现的,系统完成的主要功能是对员工工资的管理,同时还包括对员工信息、部门信息以及附属于员工、部门的职称和职务信息的管理系统主要采用事务型数据库设计,但对于员工工资的信息,系统能够保留其相应的历史记录,包括员工的请假信息,出差信息以及工资结算信息等本系统面向员工和管理人员同时开放,普通用户可以进行查询以及对个人相关信息的修改等操作,管理账户则拥有系统的全部功能系统不允许非经认证通过的用户使用系统系统采用J__A语言__,系统的数据使用ORACLE数据库进行管理
2.2功能需求分析
(1)系统能够维护员工的基本信息,部门、职务、职称以及工资记录等信息
(2)系统应该能记录员工的每一个职称信息,并授予相应的职称,系统在计算员工工资的时候选取职称对应的最高职称津贴
(3)工资表应当由系统自动生成系统负责员工的工资表以及员工工资的历史记录及记录员工的请假信息和出差信息等意外情况
(4)系统可以给___提供权限增加删除修改系统用户以及其它实体信息,系统的部分权限不能下放给普通用户以保证系统的安全性以及数据的正确性
2.3外部接口需求分析系统人机交互界面为半屏幕大小采用上下左右居中方式显示系统分辩率默认设置为1280*800实际的界面大小由具体的屏幕决定主界面包括标题栏,菜单栏,快捷工作区,帮助信息区(默认是隐藏的)每一个菜单对应一个键盘快捷键区
2.4性能需求分析系统在主频
1.5GHZ内存512MB总线频率667MHZ的硬件平台上运行时系统的响应时间、更新处理时间、数据转换与传输时间、运行时间均能达到毫秒级系统支持用户并发操作,事务采用可串行化隔离级别,防止在读写过程中产生的丢失修改、读脏数据、不可重复读等一系列由并发操作带来的不一致问题系统的运行主存控制在1024KB以内,响应时间控制在1000ms以内,系统对数据的存储空间取决于数据库系统表空间的约束限制
2.5软件属性需求分析系统必须保证所有操作结果以及存储数据的正确性,对于用户的非法操作,系统必须能够提出告警信息,对于用户的错误操作,系统能够提供错误信息以及错误源在数据库操作上的异常,系统也应捕捉到并提供界面化的提示信息,对于可能会产生错误的操作,应当能够防范另外系统必须提供一定的安全保密性,一些保密信息只针对特定的用户提供它人员无法访问软件必须为中文操作界面,并且所有的中文功能菜单项描述须与其实际对应的功能相一致,不能存在功能不足或者功能不对的情况,软件采用面向对象技术架构,遵循代码编写规范,提供适当的代码注释,尽可能地采用可复用技术,提高软件的可维护性3 概要设计
3.1系统设计总体思想当工资管理系统处理的事务主要有工资管理,员工信息管理,部门信息管理,职务信息管理,职称信息管理职务和职称以及部门信息管理主要服务于工资管理和员工信息管理,系统接收的输入项目有员工信息,部门信息,职务信息,职称信息,请假信息,出差信息等系统能够接受用户的请求,显示相应的查询信息,增加、删除、修改相应的合法的信息图
3.
1.1工资管理系统HIPO图图
3.
1.1是工资管理系统的HIPO图上图主要说明了系统的各个主要功能以及各功能模块之间的层次关系上图的基本框架也是整个系统界面的基要框架系统的人机交互采用图形化用户界面,考虑到系统的平台无关性,系统由J__A语言实现,系统的界面元素也是采用了J__A的JFC图形类库系统可以在__了J__A运行环境的平台上运行系统从登录界面开始,要求验证用户信息,用户通过验证后,进入系统主界面主界面提供了一个菜单框架,可以通过各个菜单类的一个实例来加载菜单,这一步不是由主界面完成的,而是由所需要被加载的类完成的,但需要主界面类去生成这些菜单英的实例系统加载的功能主要包括系统管理,用户管理,工资管理,部门管理,职务管理,职称管理以及适当的帮助信息系统管理主要向用户提供用户更改__的操作以及退出程序的功能用户管理允许___新建一个员工信息,比如当公司新增加了一个员工时,系统为该员工生成相应的工资关系,但新建这个员工的信息则是第一环节,当然如果公司离任了一名员工时,此员工与公司的工资关系已解除,则没有必要保留该员工的信息,系统应向___提供删除该员工的功能,同时删除与该员工相关的所有其它信息公司所在的员工可能有部分具有相应的职称,考虑到职称的种类繁多,系统只添加本公司员工所拥有的职称的一个__,而不考虑外界的因素,因此系统提供了增加、删除、修改、查询等对职称的相关操作例如,当公司一员工拿到高级职称后,___首选应该查看系统是否记录了相应职称的信息,如果有,则直接将该职称信息添加到员工信息中去,如果没有,则应当先增加这一职称信息,再执行上述操作另外在删除一个职称的时候,系统要求必须没有员工拥有此职称,否则系统不能删除,如果确实要删除,则只能先删除拥有此职称的所有员工或者撤销拥有此职称的所有员工的此职称
3.2系统功能模块设计图
3.
2.1系统功能模块设计
3.3系统数据库设计通过对工资管理系统的数据分析并根据业务之间的__我们可以得出与系统相关的实体有:员工、部门、职务、职称、请假信息、出差信息、工资工资管理系统的数据据库管理模式用语义描述如下:1每一个员工只能属于一个部门担任一个职务但是可以拥有多个职称.2每个部门可以有多名员工有不同的职务.3每个职务可以由多名员工担任可以在相同的部门也可以在不同的部门.4每个职称可以授予不同的员工.5每个员工每个月都会有一份工资记录并且会有一份历史工资记录.6员工每个月可以请假多次或者出差多次.但是要扣除相应的工资或者获得相应的补助.每个员工都有一分历史请假记录和历史出差记录综合上述语义可以得出系统的ER图如图
3.
3.1所示:
3.
3.1工资管理系统ER图根据实体之间的__,以及分析实体的属性,得出了工资管理系统中各个实体的属性,相关属性列表见表
3.
3.1表
3.
3.1工资管理模型的相关属性列表实体或__属性员工员工编号、姓名、性别、部门号、职务部门部门编号、名称、人数、__职务职务编号、名称、基本工资职称职称编号、名称、职称津贴出差信息出差编号、员工编号、天数、出差年份、出差月份、出差补助员工职称信息员工编号、职称编号请假信息请假编号、员工编号、天数、年、月、扣除工资、请假原由工资工资编号、员工编号、工资所属年月、基本工资、扣除工资、出差补助、岗位工资、职称津贴、工资总额说明加粗部分为主键,加底线部分为外键图
3.
3.2实体及其相关属性图4 详细设计
4.1数据结构设计
4.
1.1数据库表结构设计Employee——员工信息表字段名数据类型约束名称说明empnonumber6主键员工编号 enamevarchar220notnull员工姓名 ___varchar24notnull性别 deptnonumber6外键departmentdeptno部门编号 dutynonumber6外键dutydutyno职务编号 Department--部门信息表字段名数据类型约束名称说明deptnonumber6主键部门编号 deptnamevarchar220notnull部门名 empnumnumber部门人数 telnumber __ Duty--职务信息表字段名数据类型约束名称说明dutynonumber6主键职务编号 dutynamevarchar20notnull职务名 dutypaynumberdefault0checkdutypay=0职务基本工资Title--职称信息表字段名数据类型约束名称说明titlenonumber6主键职称编号 titlenamevarchar220notnull职称名 titlepaynumberdefault0checktitlepay=0职称津贴 TitledEmployee--员工职称__表字段名数据类型约束名称说明empnonumber6组合主键外键employeeempno员工编号 titlenonumber6职称编号 yearnumber4年记录职称授予时间monthnumberbetween1and12月Le__e--员工请假信息表字段名数据类型约束名称说明le__enonumber6主键请假编号 empnonumber6外键employeeempno请假员工 le__edaysnumbernotnull请假天数 le__eyearnumber4notnull请假年份 le__emonthnumbernotnull请假月份 deductionnumbernotnull扣除工资 reasonvarchar60 请假原因 BusinessTr__el--出差信息表字段名数据类型约束名称说明tr__elnonumber6pri__rykey出差编号 empnonumber6外键employeeempno员工编号 tr__eldaysnumbernotnull出差天数 tr__elyearnumber4notnull出差年份 tr__elmonthnumbernotnull出差月份 tr__elpaynumbernotnull出差补助 Reward--奖励信息表字段名数据类型约束名称说明rewardnonumber6pri__rykey奖励编号 empnonumber6外键employeeempno员工编号 rewardyearnumber4notnull奖励年份 rewardmonthnumbernotnull奖励月份 rewardpaynumber奖励金额 reasonvarchar60 奖励原由 Penalty--罚金信息表字段名数据类型约束名称说明penaltynonumber6pri__rykey罚金编号 empnonumber6外键employeeempno员工编号 penaltyyearnumber4notnull罚金年份 penaltmonthnumbernotnull罚金月份 penaltynumnumber罚金额度 reasonvarchar60 罚金原由 Salary--职工工资信息表字段名数据类型约束名称说明salnonumber6pri__rykey工资编号 empnonumber6外键employeeempno员工编号 payyearnumber4工资年份 paymonthnumberbetween1and12工资月份 basepaynumber基本工资 deductionnumber请假扣除金额tr__elpaynumber出差补助 dutypaynumber职务工资 titlepaynumber职称津贴 rewardpaynumber奖励金额 penaltynumnumber罚金 totalpaynumber 工资总额
4.
1.2程序数据结构设计1ADTDepartmentBean{数据对象:D={deptNodeptNameempNumtel|deptNoempNumt和tel均为整数,deptName为字符串}数据关系:R1={deptNodeptNametel|deptNo为部门编号,deptName为部门号,tel为部门__}R2={deptNoempNum|deptNo为部门编号,empNum为部门人数}基本操作:setDeptNointno设置部门的部门号为no.getDeptNo:返回部门的部门号setDeptNameStringname设置部门的部门名为name.getDeptName:返回部门的部门号.setEmpNumintnum设置部门的员工人数为num.getEmpNum:返回部门的人数.setTelinttelephone:设置部门的__号码为telephone.getTel:返回部门的__号码}ADTDepartmentBean2ADTJdbc{数据对象:D={dbUrltheUserthePswcstmtrs|dbUrl提供数据库对象theUserthePsw指定用户名和__c与数据库建立一个连接stmt声明一条SQL语句rs保存执行SQL语句的结果集.}数据关系:R1theUserthePsw:用户登陆的验证信息用户名和__.R2stmtrs:rs为语句stmt执行的结果集.基本操作:Jdbc:加载数据库驱动建立数据库连接.executeUpdateStringsql:执行SQL更新语句成功返回TRUE失败则返回FALSE.executeQueryStringsql:执行SQL查询语句返回结果集rs.close:关闭与数据库的连接.}ADTJdbc
4.2模块功能详细设计
4.
2.1部门信息删除模块设计
(1)类图设计图
4.
2.
1.1部门信息删除模块类图以下对部分类的属性和方法的说明DepartmentMenu类属性名称属性类型属性说明deptMenuJMenu顶层菜单项deptInqueryItemJMenuItem部门信息查询菜单项deptDeleteItemJMenuItem部门信息删除菜单项deptUpdateItemJMenuItem部门信息更新菜单项UserUserBean用户业务类说明当__各菜单项时,会弹出相应的操作界面DepartmentDelete类方法名称返回值类型功能说明isDeptExistboolean判断输入的部门号是否存在isDeptEmptyboolean判断输入的部门号是否为空executeDeletevoid执行删除操作ShowAction类:该类为内部类,是将各功能集成到系统的框架之中.ShowAction类的构造函数提供了一个命名菜单项的方法主要功能引入了DepartMentDelete这个类到系统中通过监听器ShowAction执行actionPerformed方法,系统就应该可以产生期望的动作
(2)界面设计图
4.
2.
1.2界面设计界面设计说明该文本框为单行文本框,可以输入要删除的部门号,当系统监听到文本框中选项被确定,将会自动地将该部门信息从数据库中删除
(3)核心代码publicclassDepartmentDelete{privatestaticfinallongserialVersionUID=-8537661840347605772L;publicDepartmentDelete{executeDelete;}privatebooleanisDeptExistintdeptno{ResultSetrs;Jdbcconn=null;booleanflag=false;try{conn=newJdbc;rs=conn.executeQueryselectdeptnofromdepartment;whilers.next{ifdeptno==rs.getIntdeptno{flag=true;break;}}}catchInstantiationEx__ptione1{e
1.printStackTra__;}catchIllegalAc__s_____ptione1{e
1.printStackTra__;}catchClassNotFoundEx__ptione1{e
1.printStackTra__;}catchSQLEx__ptione1{e
1.printStackTra__;}returnflag;}publicbooleanisDeptEmptyintdeptno{ResultSetrs;Jdbcconn=null;booleanflag=false;try{conn=newJdbc;rs=conn.executeQueryselectcount*fromemployeewheredeptno=+deptno;whilers.next{ifrs.getInt1==0{flag=true;break;}}}catchInstantiationEx__ptione1{e
1.printStackTra__;}catchIllegalAc__s_____ptione1{e
1.printStackTra__;}catchClassNotFoundEx__ptione1{e
1.printStackTra__;}catchSQLEx__ptione1{e
1.printStackTra__;}returnflag;}privatevoidexecuteDelete{StringdeptnoStr=JOptionPane.showInputDialognull请输入待删除部门编号!;intdeptno=0;booleanflag=true;try{deptno=Integer.parseIntdeptnoStr;}catchEx__ptione{flag=false;}ifisDeptExistdeptno==true{ifisDeptEmptydeptno==false{JOptionPane.showMessageDialognull部门中有员工存在,无法删除!;}else{Jdbcconn=null;intres=0;try{conn=newJdbc;PreparedStatementpstmt=conn.c.prepareStatementdeletefromdepartmentwheredeptno=;pstmt.setInt1deptno;res=pstmt.executeUpdate;ifres!=0JOptionPane.showMessageDialognull成功删除部门+deptno;elseJOptionPane.showMessageDialognull删除失败;}catchInstantiationEx__ptione{e.printStackTra__;}catchIllegalAc__s_____ptione{e.printStackTra__;}catchClassNotFoundEx__ptione{e.printStackTra__;}catchSQLEx__ptione{e.printStackTra__;}}}elseifflagJOptionPane.showMessageDialognull您输入的部门号不存在!;}//executeDelete}
4.
2.2部门信息增加模块设计
(1)类图设计根据系统的需求我们需要使得系统能够通过图形化的界面来增添一个部门并将输入的部门信息长久得保存在数据库文件中为此我们需要一个从界面类到与数据库连接的底层类的一系列类的组合来实现这样的需要.图
4.
2.
1.2所示的类图就是一个增加新员工的实现过程DepartmentAdd类是一个继承自j__ax.swing.JFrame类的界面类它提供了一个供录入员工信息的操作界面所有录入的信息则通过DepartmentBean类生成一个实例对象来保存departmentAdd类的构造函数负责调用createAddInte_____私有方法来构造出界面以及初始化各控件中的数值如generateDeptNo是生成部门编号部编号并不能由用户或者___确定而是由系统查询数据库后遵循唯一性原则生成出来的编号.这样做不仅避免用户管理编号的繁琐性而且也增强了系统的安全性.图
4.
2.
2.1部门信息的增加功能模块类图以下部分类的属性和方法的说明DepartmentMenu类属性名称属性类型属性说明deptMenuJMenu顶层菜单项deptInqueryItemJMenuItem部门信息查询菜单项deptDeleteItemJMenuItem部门信息删除菜单项deptUpdateItemJMenuItem部门信息更新菜单项UserUserBean参数传递说明当__各菜单项时,会弹出相应的操作界面LoadDepartment方法是用来加载Departmentmenu类DepartmentAdd类属性名称属性类型属性说明deptNoTextJTextFied部门编号输入文本框deptNameTextJtextFied部门名称输入文本框deptTelTextJTextFied部门__输入文本框confirmButtonJButton确定按钮can__lButtonJButton取消按钮deptDepartmentBean参数传递DepartmentAdd类方法名称返回值类型功能说明DepartmentAddvoid是Departmentadd类的构造函数InitDeptInfovoid初始化部门信息genertateDeptNovoid产生部门编号CreateAddInte_____void创建增加信息界面StoreDepartmentvoid将新的信息保存到数据库中ShowAction类:该类为内部类,是将各功能集成到系统的框中.ShowAction类的构造函数提供了一个命名菜单项的方法主要功能是引入DepartMentDelete这个类到系统中通过监听器ShowActionactionPerformed方法,系统就应该可以产生期望的动作监听器Confir__ction和Can__lAction这两个监听器实现的均是j__a.awt.event.ActionListener接口系统通过监听器响应用户的保存或者取消操作调用数据库类Jdbc来执行SQL存储语句实现与数据库的连接以及对数据库的增加信息操作
(2)界面设计图
4.
2.
2.2增加部门信息界面界面说明以上文本框都是单行文本框,可以输入部门编号,部门名称,部门__,当系统监听到文本框中的内容被确定,将会新的部门信息保存到数据库中
(3)核心代码publicclassDepartmentAddextendsJFrame{{this.setTitleAddanewDepartment!;this.setSizeWIDTHHEIGHT;this.setLayoutnull;this.setResizablefalse;vDimensionscr=Toolkit.getDefaultToolkit.getScreenSize;Dimensionfrm=this.getSize;this.setLocationintscr.getWidth-frm.getWidth/2intscr.getHeight-frm.getHeight/2-50;createAddInte_____;generateDeptNo;initDeptInfo;}privatevoidinitDeptInfo{dept.setDeptName某部门;dept.setTel_____00;dept.setEmpNum0;}privatevoidgenerateDeptNo{ResultSetrs;Jdbcconn=null;intno=102001;try{conn=newJdbc;rs=conn.executeQueryselectdeptnofromdepartmentorderbydeptno;whilers.next{ifno==rs.getIntdeptno++no;elsebreak;}dept.setDeptNono;deptNoText.setText+no;}catchInstantiationEx__ptione1{e
1.printStackTra__;}catchIllegalAc__s_____ptione1{e
1.printStackTra__;}catchClassNotFoundEx__ptione1{e
1.printStackTra__;}catchSQLEx__ptione1{e
1.printStackTra__;}}privatevoidcreateAddInte_____{ContainercontentPane=getContentPane;JLabellabel1=newJLabel部门编号:;JPanelpanel1=newJPanel;deptNoText=newJTextField10;deptNoText.setEditablefalse;panel
1.addlabel1;panel
1.adddeptNoText;JLabellabel2=newJLabel部门名称;JPanelpanel2=newJPanel;deptNameText=newJTextField10;panel
2.addlabel2;panel
2.adddeptNameText;JLabellabel3=newJLabel部门__;JPanelpanel3=newJPanel;deptTelText=newJTextField10;panel
3.addlabel3;panel
3.adddeptTelText;confirmButton=newJButton保存;can__lButton=newJButton重置;JPanelpanel4=newJPanel;panel
4.addconfirmButton;panel
4.addcan__lButton;confirmButton.addActionListenernewConfir__ction;can__lButton.addActionListenernewCan__lAction;panel
1.setSizeWIDTH50;panel
1.setLocation00;panel
2.setSizeWIDTH50;panel
2.setLocation050;panel
3.setSizeWIDTH50;panel
3.setLocation0100;panel
4.setSizeWIDTH50;panel
4.setLocation0150;contentPane.addpanel1;contentPane.addpanel2;contentPane.addpanel3;contentPane.addpanel4;}privatevoidstoreDepartment{intrs;Jdbcconn=null;try{conn=newJdbc;PreparedStatementpstmt=conn.c.prepareStatementinsertintodepartmentvalues;pstmt.setInt1dept.getDeptNo;pstmt.setString2dept.getDeptName;pstmt.setInt3dept.getEmpNum;pstmt.setInt4dept.getTel;rs=pstmt.executeUpdate;ifrs!=0{JOptionPane.showMessageDialognull保存成功;this.dispose;}else{JOptionPane.showMessageDialognull保存失败;this.dispose;}5测试
5.1部门信息删除和增加模块测试模块采用黑盒测试策略,设计测试用例实例如下表
5.
1.1测试用例序号输入数据预期结果1从文本框中输入一个要删除的部门号102005正常删除2从文本框中输入一个要删除的部门号102007异常删除3在各文本框中输入相应的内容并保存正常添加4在部门编号文本框中输入数字并保存异常添加测试结果如下图
5.
1.1测试用例1输入图
5.
1.2测试用例1结果图
5.
1.3测试用例2输入图
5.
1.4测试用例2输出结果图
5.
1.5测试用例3输入图
5.
1.6测试用例4输出结果图
5.
1.5测试用例4输入图
5.
1.5测试用例4输出结果测试结论:该模块功能基本正常能够接受合法的输入并能产生相应的输出结果对于非法的输入系统采取的策略时忽略非法请求直到用户输入正确的合法的数据才给以响应并产生正常的输出.6课程设计的总结与体会这次课程设计中我负责的是概要设计和详细设计这两个模块概要设计中包括系统设计总体思想,系统功能模块设计,系统数据库设计其中系统设计总体思想主要说明了该系统是主要处理的事务以及系统的各个主要功能以及各功能模块之间的层次关系系统功能模块主要说明了该系统是的实现各操作的流程系统数据库设计则主要说明了各业务之间的__,以及各个实体之间的__详细设计这个模块中包括数据结构设计,程序数据结构设计,模块功能详细设计数据库表结构设计则主要定义了该系统所需的表格结构程序数据结构设计则定义了该系统所用到的数据结构模块功能详细设计则主要用来实现各功能的模块在这个模块中我们通过类图来实现各类之间的调用关系,设计好操作界面,编写好实现部分模块的功能而详细设计这个模中,我主要的工作是负责部门管理这个模块功能的设计在这个模块中,我为部门管理增加了两个功能一个部门信息的增加,另一个是部门信息的删除这两个操作主要是通过菜单操作实现的如要删除某个部门信息则在部门菜单上选择删除菜单项,在弹会的对话框中输入要删除的部门号再单击确定即可实现删除操作通过次课程设计使我明白了合作的重要性,分工明确,培养了我良好的团队合作精神同时我也掌握了软件__的具体流程以及__方式____
[1]任胜兵、邢琳.软件工程.[M].北京北京邮电大学出版社.200676-244.
[2]ShariLawren__Pfleeger、JoanneM.Atlee.软件工程-理论与实践第三版影印版[M]. 北京高等教育出版社.
2008.5:141-209,337-
362.
[3]阎菲.J__a程序设计教程.北京:中国水利水电出版社.2004:154-
233.
[4]HarveyM.DeitelPaulJ.Deitel.J__a程序设计教程.北京:机械工业出版社.
2006.
1.
[5]孙风栋等.Oracle数据库基础教程.北京:电子工业出社.
2008.6:276-
358.致谢在这里我要特别感谢我们的指导老师姚老师和组长王培同学,谢谢他们不厌其烦的帮助我。