久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

附6 軟件項目開發總結報告

時間:2019-05-12 05:08:54下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《附6 軟件項目開發總結報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《附6 軟件項目開發總結報告》。

第一篇:附6 軟件項目開發總結報告

附件4-6 項目開發總結報告 引言...............................................................................................................................3 1.1 1.2 1.3 1.4 2 編寫目的............................................................................................................3 背景....................................................................................................................3 定義....................................................................................................................3 參考資料............................................................................................................3

實際開發結果................................................................................................................4 2.1 2.2 2.3 2.4 2.5 產品....................................................................................................................4 主要功能和性能.................................................................................................4 基本流程............................................................................................................4 進度....................................................................................................................4 費用....................................................................................................................5 開發工作評價................................................................................................................5 3.1 3.2 3.3 3.4 對生產效率的評價..............................................................................................5 對產品質量的評價..............................................................................................5 對技術方法的評價..............................................................................................5 出錯原因的分析.................................................................................................6 經驗與教訓....................................................................................................................6 引言

1.1 編寫目的

說明編寫這份項目開發總結報告的目的,指出預期的閱讀范圍。

1.2 背景

說明:

1)本項目的名稱和所開發出來的軟件系統的名稱;

2)此軟件的任務提出者、開發者、用戶及安裝此軟件的計算中心。

1.3 定義

列出本文件中用到的專門術語的定義和外文首字母組詞的原詞組。

1.4 參考資料

列出要用到的參考資料,如:

1)本項目的已核準的計劃任務書或合同、上級機關的批文; 2)屬于本項目的其他已發表的文件;

3)本文件中各處所引用的文件、資料,包括所要用到的軟件開發標準。列出這些文件的標題、文件編號、發表日期和出版單位,說明能夠得到這些文件資料的來源。2 實際開發結果

2.1 產品

說明最終制成的產品包括:

1)程序系統中各個程序的名字,它們之間的層次關系,以千字節為單位的各個程序的程序量、存儲媒體的形式和數量;

2)程序系統共有哪幾個版本,各自的版本號及它們之間的區別; 3)每個文件的名稱;

4)所建立的每個數據庫。如果開發中制訂過配置管理計劃,要同這個計劃相比較。

2.2 主要功能和性能

逐項列出本軟件產品所實際具有的主要功能和性能,對照可行性研究報告、項目開發計劃、功能需 .求說明書的有關內容,說明原定的開發目標是達到了、未完全達到、或超過了。

2.3 基本流程

用圖給出本程序系統的實際的基本的處理流程。

2.4 進度

列出原定計劃進度與實際進度的對比,明確說明,實際進度是提前了、還是延遲了,分析主要原因。2.5 費用

列出原定計劃費用與實際支出費用的對比,包括: 1)工時,以人月為單位,并按不同級別統計;

2)計算機的使用時間,區別CPU時間及其他設備時間; 3)物料消耗、出差費等其他支出。

明確說明,經費是超出了、還是節余了,分析其主要原因。開發工作評價

3.1 對生產效率的評價

給出實際生產效率,包括:

1)程序的平均生產效率,即每人月生產的行數;

2)文件的平均生產效率,即每人月生產的千字數; 并列出原訂計劃數作為對比。

3.2 對產品質量的評價

說明在測試中檢查出來的程序編制中的錯誤發生率,即每干條指令(或語句)中的錯誤指令數(或語句數)。如果開發中制訂過質量保證計劃或配置管理計劃,要同這些計劃相比較。

3.3 對技術方法的評價

給出對在開發中所使用的技術、方法、工具、手段的評價。3.4 出錯原因的分析

給出對于開發中出現的錯誤的原因分析。經驗與教訓

列出從這項開發工作中所得到的最主要的經驗與教訓及對今后的項目開發工作的建議。

第二篇:軟件項目開發總結報告模版

武漢理工大學《軟件開發工具》論文報告

火車票系統的開發

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 清華大學出版社

第三篇:軟件項目總結報告

XXXXXXXXXXXXXXXXXXXXXXX系統

項目總結報告

XXXXXXXXX 2017/7/27 項目概要信息

XXXXXXXXXXXXXXXXXXXXXXX系統的技術團隊由11人組成,其中項目經理1人,需求分析師1人,UI設計師1人,開發人員6人,測試人員2人。

本項目的前期工作從2017年5月19日開始,歷時16個工作日,于6月9日完成需求分析等準備工作。開發階段從2017年6月12日開始,歷時22個工作日,于7月10日完成全部開發工作,進入外部業務人員驗證測試階段,目前,可使用XXXXXXXXXXXXXXXXXXXXXXX的二級域名進行訪問,詳細信息如下:

用戶資助申報地址:XXXXXXXXXXXXXXXXXXXXXXX 用戶審核管理地址:XXXXXXXXXXXXXXXXXXXXXXX

本項目的開發過程有5個關鍵的里程碑,具體時間及內容如下: 2017年06月21日:項目初次全新功能開發完成;

2017年06月29日:項目初次內部功能測試、安全測試、性能測試完成; 2017年07月04日:需求變更,準備進行二次開發; 2017年07月10日:項目二次開發全部完成;

2017年07月11日:項目二次內部測試完成,等待外部業務人員驗證測試。項目經驗

因為是初次擔任項目經理的角色,我最初找不到切入點,領導和同事在整個的過程中給了我很多的指導和建議。實際的項目管理工作使我對自己已學的理論知識有了更深刻的體會。所謂理論指導實踐,實踐驗證理論,回想整個項目開發過程,至少可以總結了以下幾點經驗: 2.1 溝通討論 信息交換要及時

溝通討論是貫穿整個項目生命周期的活動,團隊成員間信息交換是否及時,更是項目成功的關鍵。雖然不同角色承擔不同工作,但都是以達成項目目標為指導的,團隊成員只有始終保持溝通討論,保證接收到最新的、一致的項目需求信息,才能使得開發工作順利進行,避免出現信息交換不及時而導致的返工。

對于溝通,結合實際來說,如果需求分析師不能將變更的需求信息及時傳遞給UI設計人員,就會導致不符合用戶需求的設計,更會使開發人員寫出無用的代碼,這必然導致重設計、重編碼,甚至會延誤整體項目進度。

對于討論,尤其是像我這樣缺少經驗的項目經理,不論是制定計劃,還是工作量識別,都必須向有經驗的同事請教,接受正確的建議,才能得到合理的安排。2.2項目范圍 功能邊界要清晰

項目經理以需求文檔為依據,將項目范圍及邊界清晰羅列,是把控項目開發進度的先決條件。

對于XXXXXXXXXXXX系統來說,其功能并不復雜,且開發周期短,所以在確定項目范圍并進行任務細化時,可精確到接口、頁面。把一個大任務分解成一個個的小任務的好處是,可以幫助我們更加精確的估計出它們的工作量,并暴露出很多可能一時無法想到的工作量,也可以保證后續進行項目開發過程的狀態跟蹤,更加精確。2.3時間計劃 人員分配要合理

以前總認為寫計劃比寫代碼容易的多,其實恰恰相反。一份合理的項目計劃需要經過思考、溝通、權衡、詢問、傾聽的過程,要知道,用來分析解決問題需要花費的時間,遠遠大于單純的寫代碼時間。

項目進度計劃必須將分解出來的小任務,綜合考慮時間、難易程度、人員能力,估出工作量并進行合理分配。2.4代碼開發 功能驗證要同步

當日的開發任務結束后,作為項目經理應該對現有開發成果做驗證,即對已完成的功能做驗證,及時發現缺陷或其他問題,次日找對應的開發人員做修復。

因此,代碼開發和功能驗證的同步進行,既可以保證軟件質量,同時也可以保證項目進度。當然,應該根據實際情況同步調整項目進度計劃,預留處理缺陷的時間。

2.5進度執行 問題修復要反饋

項目成員必須及時反饋當日任務完成情況,及前一天遺留缺陷的修復情況,才可以保證項目經理對整體進度的把控,準確跟蹤項目狀態。2.6

需求變更 文檔修改要記錄

開發過程中的任何變更,都應做記錄,作為項目成員之間溝通交流的依據,也可以避免重復修改,增加無謂的工作量。項目教訓

3.1計劃應當先于執行

項目計劃必須要盡可能周全,并且在項目經理的可控范圍內,可以根據實際情況及時做調整,但一定要保證,具體工作的開展是在計劃范圍內,因為沒有計劃直接執行會直接導致項目進度不可控,狀態無法跟蹤。3.2溝通應當注意技巧

高效溝通是項目成功的決定因素。因缺乏高效的溝通技巧。對內,在與開發人員進行需求溝通、代碼實現方式設計等方面溝通時,并不能快速準確表達自己意圖;對外,在與業務人員協商問題時,會不自覺的使用技術術語等業務人員不易理解的詞匯,導致雙方無法在較短時間內達成一致意見。希望自己以后有更多的鍛煉機會,學習彌補這方面的欠缺。

第四篇:項目開發總結報告

1引言.....................................................................................................................................................2 1.1編寫目的...................................................................................................................................2 1.2背景...........................................................................................................................................2 1.3定義...........................................................................................................................................2 1.4參考資料...................................................................................................................................3 2實際開發結果......................................................................................................................................3 2.1產品...........................................................................................................................................3 2.2主要功能和性能.......................................................................................................................3 2.3基本流程...................................................................................................................................3 2.4進度...........................................................................................................................................4 2.5費用...........................................................................................................................................4 3開發工作評價......................................................................................................................................4 3.1對生產效率的評價...................................................................................................................4 3.2對產品質量的評價...................................................................................................................4 3.3對技術方法的評價...................................................................................................................4 3.4出錯原因的分析.......................................................................................................................5 4經驗與教訓..........................................................................................................................................5

第五篇:項目開發總結報告

項目開發總結報告

1.引言

1.1編寫目的

項目開發總結報告的編制是為了簡單回顧記錄項目的開發過程,總結本項目開發工作的經驗,說明實際取得的開發結果以及對整個開發工作各個方面的評價,總結開發過程中的邏輯方法。

本文檔預期的讀者為軟件開發人員。

1.2背景

項目名稱:“High Go”智能購物車 系統名稱:智能購物車系統

開發單位:西北大學信息科學與技術學院“High Go”團隊 開發歷時:四周

版權信息:夢想網絡資源檢索系統是由西北大學信息科學與技術學院“High Go”團隊開發,未經作者許可,任何個人或組織不能將其用于商業用途,系統所搜索的資源版權歸原作者所有。

1.3定義

購物車車身:采用當前市場上最普遍的購物車規格,迎合人們一般的手推購物車購物的習慣方式。

顯示屏:在購物車前端,車筐上方安置一塊觸摸顯示屏,人們可以在顯示屏上通過點擊屏幕進行一些基本操作,如查詢商品信息、查詢總價和商品數量、確認購物單、刪除商品等。

無線掃碼槍:顧客在購物過程中,可以對自己確認投入購物車的商品進行掃碼。將無線掃碼槍與顯示屏一同安置在購物車筐上方,方便顧客在拿取商品掃碼同時看到新掃碼的商品信息。

警示燈:在自助購物過程中,超市本身無法對每一位客戶進行實時監管,為了防止顧客忘記自主掃碼或者故意不掃碼給超市帶來損失,在購物車的兩旁將設置警示燈,如果沒有通過掃碼而把商品直接投入車筐內,則警示燈會啟動發光報警,只有重新掃碼并通過顯示屏進行確認才能夠消除報警。

1.4參考資料

[1]劉兵,劉曉朋,曾翔亮.基于條碼識別技術的智能購物車設計[J].森林工程,2012,11.[2]鄭創立.RI-R6C-001A 集成電路的原理與應用[J].國外電子元器件,2004,06.[3]李文江,高鋒,丁睿.RI-R6C-OO1A 射頻芯片在個人醫療信息系統中的應用[J].電氣自動化,2007, 29.[4]劉江沙,雷偉,尹酉.基于 CC2430 的串口無線模塊的設計[J].國外電子元器件,2007,04.[5]張喆.基于 STC89C516 的超市智能購物車研發[J].自動化技術與應用,2009,28.[6]江田.基于 RFID 的商品購物智能終端的設計與實現[D].大連理工大學,2013,06.[7] 張俊謨.單片機中級教程[M].北京: 北京航空航天大學出版社.2006.[8] 張俊.匠人手機[M].北京:北京航空航天大學出版社.2008.[9] 劉煥成.工程背景下的單片機原理及系統設計[M].北京:清華大學出版社.2008.[10] 顏繼紅.超市一線員工高流動率問題的研究[J].科技和產業,2011,11(4):54-55 [11] 韓立毛,趙躍華,錢宇力.基于物品跟蹤定位方案的連鎖超市應用系統設計[J].鐵路計算機應用,2009(8)[12] 中國工業和信息化部物聯網總體框架與技術要求(Y DT/2437-2012)[S] 北京:人民郵電出版社,2013 [13] 葉少龍,劉建群等.PIC 單片機在模具條碼識別系統中的應用[J].廣東工業大學學報,2009,26(2):94-97 [14] 程子華,陽勝峰.視頻學工控—觸摸屏應用技術[M].北京:人民郵電出版社,2006 [15]劉偉勛.家樂福價格欺詐的背后[J].中國品牌,2011,(2): 44-46.[16] 葉少龍,劉建群,吳積榮,等.PIC 單片機在模具條碼識別系統中的應用[J].廣東工業大學學報2009, 26(2): 9420.[18]王忠勇,張建華,宋豫冀.基于 89C2051 的解碼器設計[J].微電子學與計算, 2002,(5): 57-58.2.實際開發結果 2.1產品

“High Go”智能購物車系統

2.2主要功能和性能

“High Go”系統主要包括以下功能:(1)購物車管理系統(系統初始化模塊)(2)購物車管理系統(觸摸屏模塊)(3)購物車管理系統(無線通信模塊)(4)數據庫管理模塊(5)結算與防盜模塊

2.3基本流程

1)系統初始化模塊

完成系統變量的初始化,主要包括啟動液晶顯示屏、檢查下位機與上位機的 Zigbee 通信網絡是否正常(下位機指每臺購物車對應的單片機,上位機指超市 端的PC 機)以及一些其他一些開機自檢工作。2)觸摸屏顯示模塊

經過系統初始化,觸摸屏處于待機界面。接受指令后,觸摸屏將顯示用戶請 求的各類交互信息。主要流程如下:

3)無線通信模塊

主要實現下位機與上位機之間的多對一(多個下位機對一個上位機)數據傳輸、命令交互等。

4)數據庫管理模塊 數據庫管理模塊包括對超市商品信息的建立、查詢和更新。主要流程如下:

5)結算與防盜模塊

該模塊我們不僅設計了經典的計價算法,還在稱重的基礎上核對預估重量與實際重量的偏差值,從而實現防盜和誤放提醒功能。主要流程如下:

流程邏輯

2.4進度

小組成員四人,從2016年11月15日組隊,11月24號正式啟動項目,直至12月20號上交作品,在此期間除了法定期間大家暫停了共一周時間,其他時間一直致力于項目的開發工作:

2016年11月下旬—11月末:項目設計階段

11月末,小組成員著手于市場調研,并花費一周時間設計出“High Go”購物車系統的藍圖。初級階段圓滿完成了預定的目標。

2016年12月1日——12月17日:項目啟動和實行核心階段 此階段由各成員在自己電腦上各自分別編寫所屬程序,但由于并非按流程為主線的編寫方式,軟件各模塊之間存在一部分接口不明確,軟件運行情況的測試也只是整體的大方面的進行,并未涉及細微部分,因此軟件運行不是非常穩定,仍有一些問題亟待解決。

2016年12月18日——2016年12月20日:項目收尾階段

回顧項目并編寫總結文檔、總結了各位成員的心路歷程。

2.5費用

較分散,無詳細統計。

3.開發工作評價 3.1對生產效率的評價 一個月中,各成員在完成項目的同時并未占用太多自身學習時間,較為高效地完成了開發任務。

3.2對產品質量的評價

雖然項目完成得有些倉促,但在實際測試中最基礎的功能與超市適配良好,因此可以說在基礎系統功能上擁有較高的質量。

3.3對技術方法的評價

小組采用順應趨勢的、成熟的、主流的技術。

3.4出錯原因的分析

除去時間較緊的因素之外,小組最大問題在于各自實現各自功能,并未以流程為主線,導致程序在模塊銜接時出現很大銜接問題。

4.經驗與教訓

通過這一個多月的努力工作,我認識到要作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有以下的的素質: 1:團隊精神和協作能力

把它作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想象的。獨行俠可以作一些賺錢的小軟件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人就完全不合格了。

2:文檔習慣

說高水平程序員從來不寫文檔的肯定是外行人,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。3:規范化,標準化的代碼編寫習慣

作為一些外國知名軟件公司的規矩,代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。代碼具有良好的可讀性,是程序員基本的素質需求。比如整個linux的搭建,沒有規范化和標準化的代碼習慣,全球的研發協作是絕對不可想象的。4:需求理解能力

程序員需要理解一個模塊的需求,很多同學寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬件,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾經說寫一個廣告交換程序很簡單,這種人不了解在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,性能需求指標中,穩定性、并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。5:學習和總結的能力

程序員是人才很容易被淘汰、很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。

善于學習,對于任何職業而言,都是前進所必需的動力,對于程序員,這種要求就更加高了。

善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。具備以上全部素質的人,應當說是夠格的程序員了,以上的素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。

通過做這個項目,也了解到軟件開發的基本流程:

第一個步驟是市場調研,技術和市場要結合才能體現最大價值。

第二個步驟是需求分析,這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操作手冊。用戶視圖是該軟件用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這里面包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系并加以整理的東東,完成了數據詞典,數據庫的設計就完成了一半多。用戶操作手冊是指明了操作流程的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟件設計之前完成,完成這些,就為程序研發提供了約束和準繩,很遺憾太多公司都不是這樣做的,因果顛倒,順序不分,開發工作和實際需求往往因此 產生隔閡脫節的現象。

需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需求說明書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方客戶或公司市場部門)能夠有真正的溝通和了解。

第三個步驟是概要設計,將系統功能模塊初步劃分,并給出合理的研發流程和資源要求。作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常采用這種方法是因為涉及的研發任務屬于新領域,技術主管人員一上來無法給出明確的詳細設計說明書,但是并不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼后,根據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。

第四個步驟是詳細設計,這是考驗技術專家設計思維的重 要關卡,詳細設計說明書應當把具體的模塊以最“干凈”的方式(黑箱結構)提供給編碼者,使得系統整體模塊化達到最大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格的講詳細設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求分析到概要設計到完成詳細設計說明書,一個軟件項目就應當說完成了一半了。換言之,一個大型軟件系統在完成了一半的時候,其實還沒有開始一行代碼工作。那些把作軟件的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。

第五個步驟是編碼,在規范化的研發流程中,編碼工作在整個項目流程里最多不會超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會極大提高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的問題就可能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對于程序員而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不發補丁的時候嗎?從來沒有!

第六個步驟是測試。

測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試范圍,可以分為模塊測試和整體聯調;按照測試條 件,可以分為正常操作情況測試和異常情況測試;按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再解釋。

總之,測試同樣是項目研發中一個相當重要的步驟,對于一個大型軟件,3個月到1年的外部測試都是正常的,因為永遠都會又不可預料的問題存在。完成測試后,完成驗收并完成最后的一些幫助文檔,整體項目才算告一段落,當然日后少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟件的運營狀況并持續修補升級,知道這個軟件被徹底淘汰為止。路漫漫其修遠兮,吾將上下而求索!這幾個月的學習和開發,既有經驗又有教訓,讓我們深刻認識到,我們離真正的程序員還有很長的路要走,我們定將以此為契機,努力提高自己的專業技術水平。

下載附6 軟件項目開發總結報告word格式文檔
下載附6 軟件項目開發總結報告.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    項目開發總結報告

    [學生公寓管理系統]項目開發總結報告項 目 組擬 制 人[二零一一年十二月五日]目錄一、引言 ...................... 11.1 編寫目的 ................ 11.2 背景 .................

    項目開發總結報告

    首批“職業培訓包”項目開發總結報告模板一、開發背景 1.開發項目的職業名稱、職業代碼、等級、職業定義及開發培訓包數。 2.參與此項開發任務的目的、任務及意義。 二、實際......

    項目開發總結報告

    隱患排查智能管理系統 項目開發總結報告 2014年09月 江蘇創導信息科技有限公司 陜西陜煤韓城礦業有限公司隱患排查智能管理系統 1 引言 1.1編寫目的 項目開發總結報告的編......

    項目開發總結報告(文檔格式)

    項目開發總結報告 1. 引言 1.1 編寫目的 闡明編寫本系統試運行計劃書的目的,指出讀者對象。 1.2 項目背景 列出本項目的委托單位、開發單位和主管部門。 1.3 定義 列出本文......

    項目開發總結報告

    1、實訓目的 為了對整個項目開發過程的一個了解,不斷熟悉開發的過程。對自 己的不足之處進行改進,同時也是為了總結報告在項目開發過程中 遇到的問題、得到經驗,并從中吸取經驗......

    項目開發總結報告

    文檔編號 :20020728001 版 本 號:5.0 密 級 :機密 [項目工發總結報告] 項目編號: 項目名稱: 開發部門: 項目負責人: 編寫 年 月 日 校對 年 月 日 審核 年 月 日 批準 年 月 日......

    開發項目總結報告

    總結 時光飛逝,歷時一個多月的項目開發,我們團隊所開發的”迪爾攝影影樓”網站已經完成,感受頗多,這次的模擬公司企業項目開發對我來說是一個良好的發展機遇,也是一個很好的鍛煉......

    2015軟件項目開發計劃書

    2015軟件項目開發計劃書 第1篇:軟件項目開發計劃書模板 項目名稱:******** 評審日期: 1引言 1.1編寫目的 說明編寫這份項目開發計劃的目的,并指出預期的讀者。 1.2背景 說明: a.待開......

主站蜘蛛池模板: 亚洲欧美高清在线精品一区二区| 国产精品国产三级国产专区50| 欧美性猛交99久久久久99按摩| 亚国产亚洲亚洲精品视频| 国产精品亚洲欧美大片在线观看| 日本牲交大片无遮挡| 久久精品成人免费国产片| 欧美乱大交xxxxx疯狂俱乐部| 人妻无码aⅴ不卡中文字幕| 98在线视频噜噜噜国产| 免费无遮挡无码永久视频| 把女邻居弄到潮喷的性经历| 午夜精品影视国产一区在线麻豆| 色偷偷亚洲精品一区二区| 精品国产综合区久久久久久| 亚州少妇无套内射激情视频| 亚洲第一区欧美国产不卡综合| 精品麻豆一卡2卡三卡4卡乱码| 日韩乱码人妻无码中文字幕久久| 日本三级吃奶头添泬无码苍井空| 国产av无码专区亚洲版综合| 欧美xxxx做受欧美| 18禁勿入午夜网站入口| 欧美日韩精品一区二区在线视频| 亚洲 欧美 日韩 综合aⅴ视频| 狠狠cao日日穞夜夜穞av| 人人妻人人添人人爽欧美一区| 97人妻天天爽夜夜爽二区| 亚洲乱亚洲乱妇无码麻豆| 成人h无码动漫超w网站| 国产成人精品午夜福利在线播放| 中文字幕人乱码中文| 亚洲日产一线二线三线精华液| 好男人在线社区www资源| 亚洲色资源在线播放| 日本熟妇色xxxxx日本妇| 国产成人亚洲综合无码| 国产精品美女久久久m| 18禁真人抽搐一进一出动态图| 狠狠色婷婷久久一区二区三区| 欧美日韩精品一区二区三区高清视频|