《2022软件项目总结报告.docx》由会员分享,可在线阅读,更多相关《2022软件项目总结报告.docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022软件项目总结报告 软件项目总结报告软件项目总结报告范文1引言1.1编写目的XXX公司业务管理系统的开发已经基本完成。写此项目开发总结报告,以便利我们在以后的项目开发中来更好的实施项目的订制开发;让我在今后的项目开发中有更多的有据的资料来规范我们的开发过程和提高我们的开发效率,从而创建更多公司效益。1.2背景项目名称:XXX业务管理系统软件名称:XXX业务系统客户:XXX用户:XXX员工1.3参考资料项目开发文档:软件开发数据模型:PDM_OperationSystem201*0831.pdm数据库开发文档:XXX业务管理系统数据库设计说明书2.0.doc软件业务流程参考:XXX业务管理
2、系统流程说明.doc软件运用手册参考:XXX业务管理系统功能说明3.0.doc软件业务流程参考:XXX业务管理系统流程说明.doc软件中运用到的第三方控件:ComponentArtWeb.UI201*2.0.rar软件中运用的平安Ikey驱动:IkeyDriver.rar以上参考资料是截止201*-08-31是最新的资料文档。如有修改,即使修改此处的参考文档名称。2开发工作评价2.1对生产效率的评价系统开发已历时快年的时间了开发的反复性比较多。对客户的需求理解不是很透彻。综合以上,此项目的开发效率不是很高,相反有相当肯定时间的奢侈。2.2对产品功能的评价经过我们公司各位同事的共同努力协作,XX
3、X业务管理系统已经很好的完成了客户的业务流需求。经过对客户运用过程的视察,此项目开发的还是比较胜利,但是还是存在着一些问题,造成这些问题的缘由是多方面的。如:前期系统数据库的设计缺陷和部分代码的构建缺陷、客户需求的理解上也存在肯定问题,这就须要我们用肯定的时间来维护客户运用过程中提出的新问题和存在的debug。总的来说,此系统的功能开发还是一个比较胜利的案例。2.3对技术方法的总结在此项目中运用到技术和工具:.运用代码生成器:运用代码生成器动软.Net代码自动生成器,此工具在很大程度上提高了编码效率,从而加快了项目的开发进程。在以后的项目中,我们要尽量的来运用一些类似的工具来在最短的时间内完成
4、工作。在今后的项目开发中,我们最好是能开发出适合自己的代码生成工具,更大限度的节约开发周期和开发费用。.运用数据库建模工具;PowerDesigner工具来建立系统数据库模型,以便利程序员很好的理解业务流和驾驭系统架构者的架构思想,更好的满意客户的功能需求。在今后的项目开发中,我们要更好的来完成系统的前期数据库模型的建立,最大的来优化系统功能。.运用第三方控件:此系统中运用了ComponentArtWeb.UI第三方控件。此控件在很大程度上满意了客户对软件界面的需求,从而也给软件的操作带来了便利。本项目中只运用了ComponentArtWeb.UI一种第三方控件,在今后的项目开发过程中,要接着
5、运用第三方的控件。这样以来,无论是针对软件界面的美观性、友好性来说、易操作性而言,还是针对系统开发效率而言,这都是很好途径。但须要意的是:在是运用第三方控件时,要谨慎的选择一些网络中的比较常见的第三方控件。.运用自定义控件:此系统中运用了自定义控件(GhdGridView),此自定义控件可以很好的统一系统中的全部信息显示表格样式。如客户对数据显示样式有什么新的看法,我就不须要修改每一个页面的表格样式,我们只须要修改GhdGridView控件的样式,系统中的全部继承自GhdGridView的表格样式都可以变更。.系统开发框架:此系统的框架运用的是简洁三层结构,此框架在开发一些中小软件是比较好用的
6、。但是我们要是可以开发出自己的框架,把一些通用的功能开发到框架中。这样以来,在以后的系统开发中,针对系统中一些通用的功能就不须要再开发,从而也可以很好的提高我们的开发效率;削减许多维护费用。使我们的技术不断的更加成熟。.系统平安加密:此系统中针对客户提出的系统平安问题,我们采纳了Ikey加密硬件钥匙来验证客户端登陆客户的合法性,此Ikey钥匙可以绑定到一个系统运用用户,也可以让多个用户来运用一个加密钥匙来验证登陆系统的合法性。这样以来,即运用户的密码不慎丢失,或者被不法人员取得(不法人员他也是无法登陆到我们的系统中来),这样就最大的提高了我们系统的平安性。Ikey加密钥匙是很好的加密B/S架构
7、软件的硬件工具,在以后的软件平安方面可以借鉴。3项目阅历总结3.1签定合同一个项目的开发成败或者说项目开发带来效益的大小,在很大程度上是受项目合同签定的影响的。往往,许多一部分公司与客户签定的项目合同都是很模糊的,也很难签定的比较清晰,这样以来就会导致在项目的开发后期,工作两会越来越大,影响项目的竣工周期;而且,项目的开发费用一般是不会变的。这样以来,我们就大大的降低了我们的开发效益。虽然需求范围很难签定的明确,但是我们在签定合同时,要尽量的去把合同功能边界和添加新功能的条件签定。3.2开发团队在项目确立后,要尽快的建立起项目开发团队。项目团队成员的团结合作、相互沟通是特别重要的,团队成员之间
8、要相互学习彼此的优点和技术,使团队的实力不断的提高。这样,在项目的开发过程中,团队才不会被难题困住不动。另外,团队中要有一个项目负责人,这个人无论是在与客户的沟通上,还是在技术上都要是很出众的人,此项目负责人要能很好的沟通客户与开发成员之间,以此来更好的理解客户的功能需求。人的记忆力总是有限的,所以就要求开发团队成员要尽量的书写一些开发文档,这些文档往往是我们在项目开发后期要用到的可寻资料。项目团队士气是项目胜利的一个因素,我们须要不断的来培育我们的团队气概,使我们的团队不断的壮大。3.3需求的调研在项目确立后,就到了需求调研分析阶段。项目组对客户的整体组织结构、公司有关人员的关系、职责等假如
9、没有一个很好、足够的了解驾驭,这样项目组就无法很好的完整的整理到客户的需求、或者说客户真实的功能需求,如此以来我们就为自己埋下了地雷,影响项目的开发周期,这就要求我们要与客户搞好无论是工作上的还是生活上的挚友关系,要深化的去了解客户需求。我们要尽量的让客户也参加到项目的开发团队中来,也就是说我们要使客户把自己也纳入到项目的开发团队中来,如此一来,我们驾驭客户需求的真实性、牢靠性就会大大的提高,也就不会为项目的后期功能开发埋下陷阱在需求调研过程中,假如缺乏足够用户参加,这样的需求调研也是失败的。许多程序员不愿参加到客户的需求调研中去,为什么呢?很简洁,与客户沟通不如与代码沟通简单有意思。尽管这样
10、,我们还是必需用足够多的时间去和客户进行沟通,了解他们真实的需求。许多用户也是如此,他们自己也不情愿参加到项目的需求调研中来,为什么呢?需求调研有出去和挚友一块烂漫对吗。虽然现状如此,我们还是要努力的使客户参加到需求的调研中来。模糊需求,也就是模棱两可是需求规格说明中最为可怕的问题。一是指诸多客户对需求说明产生了不同的理解;一是指单个读者能用不止一个方式来说明某个需求说明。针对对这种状况,就要求我们的调研人员要能够从多个角度来分析客户的不同需求,整理出最终的需求与客户确认,定出最终真实牢靠的需求,我们绝不能凭借我们自己的单面理解来定立客户的最终需求。在一个项目的开发中,文档的书写是极为中要的一
11、项工作。因为,某些文档就是我们在开发后期与客户沟通的可寻依据、也是我们程序员在编码过程中要用到的重要文档。我们肯定不能认为,凭借我们的大脑来记录全部的开发需求。;即使,你说你是天才,你要用你那颗爱因斯坦的大脑来记录全部的开发需求,那也是不行能的,人的精力总是有限的。这就要求我们在需求调研中做好需求文档的记录和整理。需求调研工具选择,客户一般对图形还是比较感爱好的,所以我们在调研过程中,我要尽量的采纳图形化界面来和客户沟通需求。比如可以采纳Rose工具,把客户的意思转换为用例图、时序图、协作图、状态图、类图等,使表达的意思更加直观。这样客户会更快的进行问题的实质。3.5做好开发安排在项目确立后,
12、我们就须要做好项目开发安排,需求调研用时,开发用时,测试用时,实施用时,维护用时。在我们做好了安排后,我们要随时的跟踪安排任务的完成进度,从而使我们的项目进度掌控在我们的开发周期范围之内,今日安排、行动,明日胜利。3.5很好的沟通在其他行业中,人与人的之间的沟通只很重要的。项目开发也不例外,很好的沟通能够加快项目的进度,这就要求我们每一个开发人员要学会和擅长沟通于客户和同事之间。在一个项目的开发过程中,我们与客户的沟通是一个不断沟通和沟通的过程。在开发到肯定的阶段,我们就须要和客户沟通已有功能,尽量的去避开一些隐藏的问题,刚好的发觉问题,解决问题,从而按时或者提前完成项目的开发。3.6做好工作
13、总结在项目进行的过程中,我们要不断去整理自己的工作状况和做好总结,这样以来,无论是在自己的技术还是其它方面,都会对我们有很大的提高,在长期的积累后,无论是我们个人实力,还是我们的团队实力都会有很大的提高。扩展阅读:软件项目开发总结报告模版武汉理工高校软件开发工具论文报告火车票系统的开发1引言随着人们生活水平和经济水平的提高,网络科技的全球化的发展,出游和出差的频率越来越多。这大大的激发了交通水平的发展。其中,火车这种又便利有便宜的交通工具作为人们的首选,火车站的客运列车增加,客运量也随之增加。原有的售票的方式已经不再能满意旅客的需求了。为了便利旅客售票系统不仅仅只能售票也能够了解列车的各种信息
14、。这样才能成为现在网络社会的真的适应者。2需求分析该售票系统是融合了火车票销售、退票、列车管理、车票管理、售票员管理、列车管理信息,以及售票信息查询为一体的综合系统。该系统主要编写的功能是列车和售票信息的查询及售票功能。2.1用户该系统主要有两类用户:管理员和售票员。管理员主要工作有车次管理,车票管理和售票员管理。对于每项功能都有添加,删除和修改的功能。售票的主要工作是售票和退票。2.2主要功能该系统从功能方面可以分为四个方面:登录。不管你是管理员还是售票员必需登录以后才可以进行系统允许的操作。当然要登录的管理员和售票员都必需是再数据库中已经发布的。基本设置:该模块主要是修改售票员的相关信息,
15、修改列车的相关信息和修改车票的相关信息。这一块的功能只有管理员才可以操作。其他的售票员是不行以对他进行操作的。售票和退票:这部分工作主要是售票员来操作的。售票员依据买票人员提出的要求进行查询。查询的方式有两种:一是依据车次查询;一是依据目的地来查询。退票主要是将已经出售的车票在列车开出之前再一次的返回到数据库中,并接着出售。列车和车票查询;当须要查询列车信息或者是车票信息是所做的操作。2.3基本流程武汉理工高校软件开发工具论文报告3开发过程3.1内容该程序包括三个部分数据库的设计、通用模块的实现、各个模块的实现。3.1.1数据库的设计:将本系统所需的全部的数据都存储到数据库中。须要在数据库中管
16、理员表、售票员表、列车信息表和车票信息表。如图所示:武汉理工高校软件开发工具论文报告管理员表:售票员表:列车信息表:武汉理工高校软件开发工具论文报告车票信息表:3.1.2通用模块的实现:通用模块为了削减代码的重复。在该系统中,对常常运用的操作进行封装,如将多次须要调用的数据库和操作数库的增、删、改和查等操作进行封装。使代码有很好的重用性,即使出现错误也很简单调试。如本程序中的Conn.javaimportjava.sql.*;publicclassConnprivatestaticConnectioncon;privatestaticfinalStringDRIVER=com.mysql.jd
17、bc.Driver;privatestaticfinalStringURL=jdbc:mysql:/localhost:3306/newdatabase;privatestaticfinalStringNAME=root;privatestaticfinalStringPASSWORD=021702190804;staticpublicstaticConnectiongetConnection()publicstaticvoidcloseCon(Connectioncon)tryif(con!=null)con.close();trycon=DriverManager.getConnectio
18、n(URL,NAME,PASSWORD);catch(SQLExceptione)returncon;e.printStackTrace();tryClass.forName(DRIVER);e.printStackTrace();catch(ClassNotFoundExceptione)catch(SQLExceptione)武汉理工高校软件开发工具论文报告publicstaticvoidclosePt(PreparedStatementpt)publicstaticvoidcloseRs(ResultSetrs)tryif(rs!=null)rs.close();tryif(pt!=nu
19、ll)pt.close();e.printStackTrace();catch(Exceptione)e.printStackTrace();catch(Exceptione)e.printStackTrace();用户登录界面的设计、主界面的设计、基本设置模块、销售及退票模块和列车及车票查询模块。用户登录模块:该部分是通过设计login.java来实现的。这部分代码的作用是用户首先选择自己的登录的是管理员还是售票员,然后输入账号和密码。单击登录,用户先推断用户登录的类型,然后给sql变量赋SQL语句值,系统调用DAO.java类的login()传入sql变量。.Login代码是:import
20、org.eclipse.swt.SWT;importorg.eclipse.swt.events.*;importorg.eclipse.swt.graphics.Image;importorg.eclipse.swt.layout.*;importorg.eclipse.swt.widgets.*;importcom.huizhi.dao.DAO;publicclassLoginprivateTextnameText;privateTextpassText;privateCombocombo;privateStringtype;privateDisplaydisplay=newDisplay
21、();privateShellshell=newShell(display);publicLogin()FormLayoutlayout=newFormLayout();武汉理工高校软件开发工具论文报告layout.marginHeight=40;layout.marginWidth=40;shell.setLayout(layout);shell.setText(login);Imageimage=newImage(display,2.jpg);shell.setBackgroundImage(image);setUIControl();shell.pack();shell.open();w
22、hile(!shell.isDisposed()if(!display.readAndDispatch()display.sleep();display.dispose();privatevoidsetUIControl()Labelusername=newLabel(shell,SWT.NONE);username.setText(username);nameText=newText(shell,SWT.SINGLE|SWT.BORDER);Labelpassword=newLabel(shell,SWT.NONE);password.setText(password);passText=n
23、ewText(shell,SWT.SINGLE|SWT.BORDER|SWT.PASSWORD);/passText.setEchoChar(*);Labelselect=newLabel(shell,SWT.NONE);select.setText(select);Buttonsubmit=newButton(shell,SWT.PUSH);submit.setText(login);submit.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)type=combo.getT
24、ext();Stringname=nameText.getText();Stringpass=passText.getText();Stringsql=null;booleanflag=false;MessageBoxbox=newMessageBox(shell,SWT.OK);if(.equals(type)|.equals(name)|.equals(pass)box.setMessage(pleaseinputalltheinformation);box.open();return;武汉理工高校软件开发工具论文报告DAOdao=newDAO();if(users.equals(type
25、)sql=select*fromuserswhereusername=+name+andpassword=+pass+;elseif(admin.equals(type)sql=select*fromadminwhereusername=+name+andpassword=+pass+;flag=dao.login(sql);if(flag)shell.dispose();newMain(type);elsebox.setMessage(wrongnameorpassword);box.open(););Buttonreset=newButton(shell,SWT.PUSH);reset.s
26、etText(cancel);Stringvalue=users,admin;combo=newCombo(shell,SWT.DROP_DOWN);combo.setItems(value);FormDatadata=newFormData();data.top=newFormAttachment(30,0);username.setLayoutData(data);data=newFormData();data.top=newFormAttachment(username,0,SWT.CENTER);data.left=newFormAttachment(username,10,SWT.R
27、IGHT);nameText.setLayoutData(data);data=newFormData();data.top=newFormAttachment(select,0,SWT.CENTER);data.left=newFormAttachment(select,10,SWT.RIGHT);combo.setLayoutData(data);data=newFormData();data.top=newFormAttachment(username,10,SWT.BOTTOM);password.setLayoutData(data);武汉理工高校软件开发工具论文报告data=new
28、FormData();data.top=newFormAttachment(password,0,SWT.CENTER);data.left=newFormAttachment(nameText,0,SWT.LEFT);passText.setLayoutData(data);data=newFormData();data.top=newFormAttachment(password,10,SWT.BOTTOM);submit.setLayoutData(data);data=newFormData();data.top=newFormAttachment(submit,0,SWT.CENTE
29、R);data.left=newFormAttachment(submit,20,SWT.RIGHT);reset.setLayoutData(data);publicstaticvoidmain(Stringargs)newLogin();DAO.java的login()代码:publicbooleanlogin(Stringsql)booleanflag=false;con=Conn.getConnection();trypt=con.prepareStatement(sql);rs=pt.executeQuery();if(rs.next()flag=true;catch(SQLExce
30、ptione)e.printStackTrace();finallyConn.closeRs(rs);Conn.closePt(pt);Conn.closeCon(con);returnflag;图示为;武汉理工高校软件开发工具论文报告实现主界面:importorg.eclipse.swt.*;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.layout.*;importorg.eclipse.swt.events.*;publicclassMainprivateStringtype;Displaydisplay=Display.ge
31、tCurrent();Shellshell=newShell(display);publicMain(Stringtype)this.type=type;shell.setText(Trainticketingsystem);shell.setLayout(newFillLayout();Menumenu=newMenu(shell,SWT.BAR);/第一个菜单MenuItembasic=newMenuItem(menu,SWT.CASCADE);basic.setText(BasicSettings);if(users.equals(type)basic.setEnabled(false)
32、;Menufilemenu=newMenu(shell,SWT.DROP_DOWN);MenuItemtrain=newMenuItem(filemenu,SWT.PUSH);train.setText(TrainsManagement);train.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newTrainManage(););MenuItemticket=newMenuItem(filemenu,SWT.PUSH);ticket.setText(TicketsMana
33、gement);武汉理工高校软件开发工具论文报告ticket.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newTicketManage(););MenuItemusers=newMenuItem(filemenu,SWT.PUSH);users.setText(UsersManagement);users.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)n
34、ewUsersManage(););MenuItemexit=newMenuItem(filemenu,SWT.PUSH);exit.setText(quit);basic.setMenu(filemenu);exit.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)display.dispose(););/其次个菜单MenuItemmarket=newMenuItem(menu,SWT.CASCADE);market.setText(SalesandRefunds);Menu
35、editMenu=newMenu(shell,SWT.DROP_DOWN);MenuItemmarketItem=newMenuItem(editMenu,SWT.PUSH);marketItem.setText(SalesTickets);marketItem.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newXiaosTicket(););MenuItemrefundItem=newMenuItem(editMenu,SWT.PUSH);refundItem.setTe
36、xt(RefundsTickets);market.setMenu(editMenu);refundItem.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newTuiTicket(););/第三个菜单MenuItemfind=newMenuItem(menu,SWT.CASCADE);find.setText(TrainsandTicketsquery);MenutaiMenu=newMenu(shell,SWT.DROP_DOWN);MenuItemtrainFind=n
37、ewMenuItem(taiMenu,SWT.PUSH);武汉理工高校软件开发工具论文报告trainFind.setText(Trainsquery);trainFind.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newFindTrain(););MenuItemticketFind=newMenuItem(taiMenu,SWT.PUSH);ticketFind.setText(Ticketquery);find.setMenu(taiMenu);ticketFind.
38、addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newFindTicket(););shell.setMenuBar(menu);shell.setSize(500,400);shell.open();while(!shell.isDisposed()if(!display.readAndDispatch()display.sleep();display.dispose();图示为:基本设置模块包括车次管理,车票管理和售票员管理。车次管理主要是是对于列车的增加,删除和修改等操作
39、。其中包括它的相关的信息等。它是由TrainManagement.java.代码如下:importjava.util.List;武汉理工高校软件开发工具论文报告importorg.eclipse.swt.SWT;importorg.eclipse.swt.events.*;importorg.eclipse.swt.layout.*;importorg.eclipse.swt.widgets.*;importcom.huizhi.dao.DAO;importcom.huizhi.vo.Train;publicclassTrainManageDisplaydisplay=Display.getC
40、urrent();Shelltmshell=newShell(display);finalTabletable=newTable(tmshell,SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL|SWT.H_SCROLL|SWT.BORDER|SWT.FULL_SELECTION);TrainManagetm=this;publicTrainManage()RowLayoutrowLayout=newRowLayout();rowLayout.pack=true;rowLayout.wrap=true;rowLayout.justify=false;rowLayout.
41、marginTop=20;tmshell.setLayout(rowLayout);finalTableColumncolumn1=newTableColumn(table,SWT.LEFT);column1.setText(TrainID);column1.setWidth(80);finalTableColumncolumn2=newTableColumn(table,SWT.LEFT);column2.setText(TrainNum);column2.setWidth(80);finalTableColumncolumn3=newTableColumn(table,SWT.LEFT);
42、column3.setText(TrainType);column3.setWidth(80);finalTableColumncolumn4=newTableColumn(table,SWT.LEFT);column4.setText(Starting);column4.setWidth(80);finalTableColumncolumn5=newTableColumn(table,SWT.LEFT);column5.setText(startingTime);column5.setWidth(80);finalTableColumncolumn6=newTableColumn(table
43、,SWT.LEFT);column6.setText(terminal);column6.setWidth(80);finalTableColumncolumn7=newTableColumn(table,SWT.LEFT);column7.setText(terminalTime);column7.setWidth(80);武汉理工高校软件开发工具论文报告finalTableColumncolumn8=newTableColumn(table,SWT.LEFT);column8.setText(iskongtiao);column8.setWidth(80);finalTableColumn
44、column9=newTableColumn(table,SWT.LEFT);column9.setText(price);column9.setWidth(80);finalTableColumncolumn10=newTableColumn(table,SWT.LEFT);column10.setText(middleStation);column10.setWidth(80);finalTableColumncolumn11=newTableColumn(table,SWT.LEFT);column11.setText(yzNum);column11.setWidth(80);final
45、TableColumncolumn12=newTableColumn(table,SWT.LEFT);column12.setText(rzNum);column12.setWidth(80);finalTableColumncolumn13=newTableColumn(table,SWT.LEFT);column13.setText(ywNum);column13.setWidth(80);finalTableColumncolumn14=newTableColumn(table,SWT.LEFT);column14.setText(rwNum);column14.setWidth(80)
46、;table.setHeaderVisible(true);table.setLinesVisible(true);freshData();table.setSize(800,200);Buttonadd=newButton(tmshell,SWT.PUSH);add.setText(addtrains);add.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)newAddTrain(tm););Buttonupdate=newButton(tmshell,SWT.PUSH);
47、update.setText(modify);update.addSelectionListener(newSelectionAdapter()publicvoidwidgetSelected(SelectionEvente)TableItemselection=table.getSelection();TableItemselectedRow=selection0;Traintrain=newTrain();train.setId(Integer.parseInt(selectedRow.getText(0);train.setTrainNum(selectedRow.getText(1);t