超市管理系統(tǒng)開發(fā)日志_第1頁
超市管理系統(tǒng)開發(fā)日志_第2頁
超市管理系統(tǒng)開發(fā)日志_第3頁
超市管理系統(tǒng)開發(fā)日志_第4頁
超市管理系統(tǒng)開發(fā)日志_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

超市管理系統(tǒng)開發(fā)日志2011-8-16上午1.軟件開發(fā)的基本流程1、需求分析功能需求是需求分析的一個重要組成部分2、設計概要設計原型設計數(shù)據(jù)庫設計詳細設計3、編碼4、測試5、實施6、維護實際上一個完全正確和完善的需求是不存在的一個項目按照標準的流程開發(fā)也是不可能的,因為需求不可能一次完成,即使需求階段是成功的,將來也可能因為用戶自身的認識的改變導致需求的變更敏捷式的開發(fā)(迭代式的擁抱需求).大家可以了解一下.,所以現(xiàn)在有一種開發(fā)模型叫2.本次超市管理系統(tǒng)的目的主要集中在系統(tǒng)的編碼過程,心鍛煉大家的編碼能力,在項目過程中當然會涉及到分析與設計部分的知識,但大家只要稍作了解即可項目目標:.鞏固java基礎知識與JDBC編程培養(yǎng)編碼能力和分析動手能力規(guī)范編碼過程及代碼書寫培養(yǎng)項目意識與了解項目常識3.項目的實踐方法我將帶領(lǐng)大家完成一到兩個模塊的設計與功能實現(xiàn),并進行功能的測試.代碼會在講課過程中逐行來寫,請大家一定要認真聽和我一起分析,課后自己應獨立的完成相關(guān)功能,并能舉一反三的將其它功能全部實現(xiàn).4.項目的環(huán)境準備開發(fā)工具:Eclipse數(shù)據(jù)庫:Oracle

涉及技術(shù):GUIJDBC5.項目的包結(jié)構(gòu)6.登錄功能的實現(xiàn)1.原型設計超市管理系統(tǒng)用戶名:密碼:登錄取消實現(xiàn)細節(jié)說明:

2.流程1>登錄流程:輸入用戶名與密碼,點擊【登錄】按鈕到數(shù)據(jù)中檢查檢驗用戶是否合法法進入程序主界面,否那么停留在登錄界面,前重新輸入,合2>取消流程:當點擊【取消】按鍵,那么退出系統(tǒng)登錄登錄流程圖:,關(guān)閉應用

3.登錄實現(xiàn)處理點擊登錄事件publicvoidactionPerformed(ActionEvente){Stringusername=nameText.getText();Stringpassword=newString(pwdText.getPassword());if(username==null||"".equals(username)){JOptionPane.showMessageDialog(LoginView.this,"用戶名不能為空!");

return;}if(password==null||"".equals(password)){JOptionPane.showMessageDialog(LoginView.this,"密碼不能為空!");return;}//調(diào)用數(shù)據(jù)方法,根據(jù)輸入的用戶名與密碼來查詢數(shù)據(jù)庫中是否存在這樣的用戶UserDaodao=newUserDao();System.out.println("username:"+username);System.out.println("password:"+password);//login方法實際上就是一個jdbc實現(xiàn)的查詢操作booleanflag=dao.login(username,password);if(flag){//System.out.println("成功登錄");LoginView.this.dispose();//關(guān)閉登錄窗口newMainFrame();//打開主界面}else{JOptionPane.showMessageDialog(LoginView.this,"用戶名,密碼不正確!");return;}}4.數(shù)據(jù)設計及數(shù)據(jù)訪問層1.數(shù)據(jù)庫設計一個用戶肯定是超市的員工,所以用戶表與職工表存在關(guān)系,進一步分析可以知道一個職工最多只可能有一個帳號來登錄,所以職工與用戶是一對一的關(guān)系/*職工表*/createtableemployee(primaryidnumberkey,notnull,empnonumber(4)empnamevarchar2(20)notnull,check(empgenderempgenderchar(2)notnullin('男','女')),empkindvarchar2(10),cardnovarchar2(18),contentvarchar2(200))/*用戶表:采用共享主鍵的方式來建立一對一的關(guān)系*/createtabletuser(idnumberprimarykey,usernamevarchar2(15)passwordvarchar2(15)notnotnullunique,null,foreignconstraintfk_user_emp_idkey(id)referencesemployee(id))/*用來生成職工的主鍵ID號*/sequenceemp_seq_id;create

/*用來生職工的編號編號從sequenceemp_seq_empnostart/*添加測試數(shù)據(jù):職工總經(jīng)理1000開始*/createwith1000;*/insertintoemployeevalues(emp_seq_id.nextval,emp_seq_empno.nextval,'xfimti','男','總經(jīng)理',,'超市最高領(lǐng)導');/*為總經(jīng)理分配用戶,即登錄帳號*/insert/**intotuservalues(1,'xfimti','admin')2.登錄方法實現(xiàn)*根據(jù)用戶名與密碼進行登錄驗證*paramusername*用戶名*parampassword*密碼*return*true:有此用戶false:無此用戶**/publicbooleanlogin(Stringusername,Stringpassword){Connectioncon=null;PreparedStatementps=ResultSetrs=null;try{null;con=ConnectionFactory.getConnection();Stringsql="SELECT*FROMtuserWHEREusername=?ANDpassword=?"ps=con.prepareStatement(sql);;ps.setString(1,username);ps.setString(2,password);rs=ps.executeQuery();if(rs.next()){returntrue;}}catch(SQLExceptione){e.printStackTrace();}finally{CloseResource.close(rs,ps,con);}returnfalse;}2011-8-17上午1.實現(xiàn)主界面1.原型設計

+用戶管查看1.界面實現(xiàn)思路2.窗口分隔的實現(xiàn)//能夠?qū)⒋翱诜殖勺笥一蛏舷聝刹糠諮SplitPanesplitPane=//左的組件newJSplitPane();MainLeftPanelleft=newMainLeftPanel();

//右邊組件JLabelright=newJLabel("右邊");//使中間的分隔線能夠伸縮splitPane.setOneTouchExpandable(//splitPane.setDividerLocation(0.5);//設置分隔線的位置200像素true);splitPane.setDividerLocation(200);//設置左右窗口的組件splitPane.setLeftComponent(left);splitPane.setRightComponent(right);this.add(splitPane,BorderLayout.3.左窗口中樹型列表的實現(xiàn)CENTER);//帶滾動條的窗體,用來存放Tree組件JScrollPanescrollPane=newJScrollPane();//生成根節(jié)點DefaultMutableTreeNodeDefaultMutableTreeNoderoot=newDefaultMutableTreeNode(parent;"JTree");parent=newDefaultMutableTreeNode(root.add(parent);"職工信息管理");parent.add(newDefaultMutableTreeNode(parent.add(newDefaultMutableTreeNode("職工管理"));"用戶管理"));parent=newDefaultMutableTreeNode(root.add(parent);"商品信息管理");parent.add(newDefaultMutableTreeNode(parent.add(newDefaultMutableTreeNode(parent.add(newDefaultMutableTreeNode("貨物信息管理"));"商品管理"));"進貨商管理"));//根據(jù)構(gòu)造的TreeNode來生成TreeModelDefaultTreeModeltreeModel=//使用生成的TreeModel來生成TreeJTreejtree=newJTree(treeModel);false);//設置Tree的根不可見newDefaultTreeModel(root);jtree.setRootVisible(//將Tree放置到可滾動窗體的中間才能正常顯示,見JscrollPanel的API說明scrollPane.setViewportView(jtree);2011-8-17下午1.完成左邊樹型組件事件處理通過查看API可以知道,要響應樹節(jié)點被選中(TreeSelectionEvent)的事件,需要添加TreeSelectionListener的事件處理器publicclassMainControlimplementsTreeSelectionListener{publicvoidvalueChanged(TreeSelectionEvente){//可以獲得是哪個節(jié)點被選中Stringnode=e.getNewLeadSelectionPath().getLastPathComponent().toString();

//如果選中的節(jié)點為空,那么不需要再處理,直接返回if(node==null||"".equals(node))return;if(node.equals("職工管理")){在此處應該將職工管理的界面顯示在主界面的右邊所以在該處需要訪問主界面中的splitpane引用}elseif(node.equals("用戶管理")){}}}2.將員工管理頁面顯示在主界面的右邊由第一步中可知,在事件處理器需要訪問主界面的splitPane變量并通過調(diào)用splitPane.setRightComponent(xxx);通過構(gòu)造方法來傳遞splitPane故事件處理器重構(gòu)為:方法將員工管理界面顯示在右邊,所以需要publicclassMainControlimplementsTreeSelectionListener{privateJSplitPanesplitPane;publicMainControl(JSplitPanesplitPane){this.splitPane=splitPane;}publicvoidvalueChanged(TreeSelectionEvente){Stringnode=e.getNewLeadSelectionPath().getLastPathComponent().toString();if(node==null||"".equals(node))return;if(node.equals("職工管理")){//設置主界面的右邊顯示組件splitPane.setRightComponent(newEmployeeListView());}elseif(node.equals("用戶管理")){}}}同時在MainLeftPanel中也需要添加publicclassMainLeftPanelextendsPanel{//用來接收主界面的splitPaneprivateJSplitPanesplitPane;publicMainLeftPanel(JSplitPanesplitPane){this.splitPane=splitPane;

?}privatevoidinitFrame(){...//添加樹的事件處理器,以捕獲節(jié)點被選取動作,并將主界面的splitPane傳到事件處理器jtree.addTreeSelectionListener(newMainControl(splitPane));?}}那么在MainFrame中也需要進行重構(gòu):publicclassMainFrameextendsJFrame{publicMainFrame(){?}publicvoidinitFrame(){//此組件將窗口一分為二JSplitPanesplitPane=newJSplitPane();//需要將splitPane傳到事件處理中MainLeftPanelleft=newMainLeftPanel(splitPane);?.}2011-8-18上午1.職工管理界面實現(xiàn)1.原型設計增加界面實現(xiàn)細節(jié)員工編號1001員工姓名年齡xxx12xxxxx1002

2.JTable組件的使用做二維表TableModel:用來生成表的數(shù)據(jù)對象AbstractTableModel:getColumnCount,getRowCount,getValueAtDefaultTableModel:TableColumn:表示表格的列對象TableHeader:表頭TableCellEditor:處在編輯狀態(tài)下的顯示風格TableCellReader:表示在非編輯下的顯示風格3.實現(xiàn)職工管理界面1.畫上半部分整個上半部分是一個Panel中放置左右兩個Panel,左邊Panel中放置與查詢功能相關(guān)的組件,右邊存放與更新相關(guān)的三個按鍵JPaneltop=newJPanel(newBorderLayout());top.setBorder(BorderFactory.createTitledBorder("功能區(qū)"));//左邊放查詢功能PanelJPanelwest=newJPanel();JLabellabel1=newJLabel("查詢條件:");JComboBoxselectBox=newJComboBox(newObject[]{"職工編號","職工姓名","職工職位","身份證"});JLabellabel2=newJLabel("關(guān)鍵字:");JTextFieldselectText=JButtonselectBtn=west.add(label1);newJTextField(15);newJButton("查詢");west.add(selectBox);west.add(label2);west.add(selectText);west.add(selectBtn);//放更新功能的Panel

JPaneleast=newJPanel();JButtonaddBtn=JButtonmodBtn=newJButton("添加職工");newJButton("修改職工");newJButton("刪除員工");JButtondelBtn=east.add(addBtn);east.add(modBtn);east.add(delBtn);top.add(west,BorderLayout.top.add(east,BorderLayout.this.add(top,BorderLayout.WEST);EAST);NORTH);2.畫下半部分下半部分是一個Jtable組件,需要初始化Jtable那么需要先初始化TableModelList<Employee>list=xxxx;String[]columnName={//查數(shù)據(jù)庫進行數(shù)據(jù)庫初始化"選中","職工編號","姓名","性別","職位","身份證號","備注"};Object[][]data=newObject[list.size()][columnName.length];for(inti=0;i<list.size();i++){Employeeemp=list.get(i);data[i]=newObject[]{newBoolean(false),emp.getEmpNo(),emp.getEmpName(),emp.getGender(),emp.getEmpKind(),emp.getCardNo(),emp.getContent()};}//使用TableModel的第一例可編輯,其它列不能編輯tableModel=newDefaultTableModel(data,columnName){OverridepublicbooleanisCellEditable(introw,intcolumn){//TODOAuto-generatedmethodstubif(column==0){returntrue;}returnfalse;}//使用Table中的Boolean類型的數(shù)據(jù)顯示成JcheckBox組件OverridepublicClass<?>getColumnClass(intcolumnIndex){//TODOAuto-generatedmethodstubif(columnIndex==0){//第一列返回Boolean類型returnBoolean.class;}returnsuper.getColumnClass(columnIndex);}};當初始化完TableModel后就可以使用這個TableModel來生成Jtable組件了JPanelbuttom=newJPanel(newBorderLayout());buttom.setBorder(BorderFactory.createTitledBorder("職工列表"));//使用上一部初始化的TableModel來生成Jtable組件

JTablejTable=newJTable(tableModel);//設置表頭可以拖動,不可以調(diào)整大小JTableHeadertableHeader=jTable.getTableHeader();tableHeader.setReorderingAllowed(tableHeader.setResizingAllowed(false);false);//設置表格中數(shù)據(jù)居中DefaultTableCellRenderertableCellRenderer=tableCellRenderer.setHorizontalAlignment(JLabel.for(inti=1;i<jTable.getColumnCount();i++){newDefaultTableCellRenderer();CENTER);jTable.getColumn(jTable.getColumnName(i)).setCellRenderer(tableCellRenderer);}JScrollPanescrollPane=newJScrollPane(jTable);buttom.add(scrollPane);this.add(buttom);4.完成職工實體類,便于查詢數(shù)據(jù)庫時封閉信息publicclassEmployee{privateintid;privateintempNo;privateStringempName;privateStringgender;privateStringempKind;privateStringcardNo;privateStringcontent;//提供相應的set,get方法}5.查詢數(shù)據(jù)庫使TableModel中的數(shù)據(jù)有意義在dao層中添加訪問employee類的訪問對象EmployeeDao,并添加一個查詢方法獲得所有的職工信息publicList<Employee>queryAll(){Connectioncon=null;Statementst=null;ResultSetrs=null;List<Employee>emps=newArrayList<Employee>();try{con=ConnectionFactory.getConnection();st=con.createStatement();Stringsql="SELECT*FROMemployee"rs=st.executeQuery(sql);;while(rs.next()){

Employeeemp=newEmployee();"id"));"empno"));emp.setId(rs.getInt(emp.setEmpNo(rs.getInt(emp.setEmpName(rs.getString(emp.setGender(rs.getString(emp.setEmpKind(rs.getString("empname"));"empgender"));"empkind"));emp.setCardNo(rs.getString(emp.setContent(rs.getString("cardno"));"content"));emps.add(emp);}}catch(SQLExceptione){e.printStackTrace();}finally{CloseResource.close(rs,st,con);}returnemps;}在第3步中2點處使List進行初始化,即EmployeeDaodao=newEmployeeDao();List<Employee>list=dao.queryAll();//查數(shù)據(jù)庫進行數(shù)據(jù)庫初始化2011-8-19上午1.添加員工的功能1.業(yè)務流程在員工管理頁面點擊【添加職工】按鈕那么彈出添加員工信息的頁面,填寫完相應的職工信息,點擊【保存】按鈕,那么將當前職工信息保存到數(shù)據(jù)中,同時更新職工管理頁面中的員工列表.2.完成填寫職工信息的頁面

publicclassEmployeeAddVIewextendsJDialog{publicEmployeeAddVIew(Frameowner){super(owner,"添加職工",true);this.setLayout(newFlowLayout());this.setLocation(250,250);this.setSize(280,260);initUI();this.setResizable(false);}privatevoidinitUI(){JPaneltop=newJPanel(newBorderLayout(10,10));top.setPreferredSize(newDimension(260,200));top.setBorder(BorderFactory.JLabeltitle=newJLabel("createTitledBorder("職工信息"));/**/新增職工信息");title.setHorizontalAlignment(JLabel.CENTER);top.add(title,BorderLayout.NORTH);JPanelcenter=newJPanel(newGridLayout(5,2,5,8));JLabelnameLabel=newJLabel("職工姓名:",JLabel.CENTER);JLabelgenderLabel=JLabeljobLabel=JLabelcardLabel=JLabelcntLabel=newJLabel("職工性別:",JLabel.CENTER);newJLabel("職工職位:",JLabel.CENTER);newJLabel("身份證號:",JLabel.CENTER);newJLabel("備注:",JLabel.CENTER);JTextFieldnameTxt=newJTextField(15);newJComboBox(newObject[]{"男","女"});JComboBoxgenderTxt=

JComboBoxjobTxt=","后勤"});newJComboBox(newObject[]{"總經(jīng)理","主管","收銀員","總臺","售貨員JTextFieldcardTxt=newJTextField(15);newJTextField(15);JTextFieldcntTxt=center.add(nameLabel);center.add(nameTxt);center.add(genderLabel);center.add(genderTxt);center.add(jobLabel);center.add(jobTxt);center.add(cardLabel);center.add(cardTxt);center.add(cntLabel);center.add(cntTxt);top.add(center,BorderLayout.CENTER);JPanelbuttom=newJPanel();JButtonsaveBtn=JButtoncancalBtn=newJButton("保存");newJButton("取消");buttom.add(saveBtn);buttom.add(cancalBtn);top.add(buttom,BorderLayout.this.add(top);SOUTH);}}3.處理【添加員工】按鈕事件JButtonaddBtn=newJButton("添加職工");addBtn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){if(addDia==null){//MainFrameframe=(MainFrame)EmployeeListView.this.getParent().getParent().getParent().getParent().getParent();MainFrameframe=(MainFrame)EmployeeListView.this.getRootPane().getParent();addDia=newEmployeeAddVIew(frame);}addDia.setVisible(true);}});2011-8-22上午1.保存新添加的職工信息1.業(yè)務流程

2.實現(xiàn)保存功能1.為保存添加事件處理JButtonsaveBtn=newJButton("保存");newActionListener(){saveBtn.addActionListener(publicvoidactionPerformed(ActionEvente){//1.獲得輸入的信息//2.進行數(shù)據(jù)的合法性校驗//3.將數(shù)據(jù)保存到數(shù)據(jù)庫//4更新頁面中的職工列表//5.隱藏當前窗口EmployeeAddVIew.this.setVisible(false);}});2.獲得用戶輸入的新職工信息StringempName=nameTxt.getText();Stringgender=(String)Stringjob=(String)genderTxt.getSelectedItem();jobTxt.getSelectedItem();StringcardNo=Stringcontent=cardTxt.getText();cntTxt.getText();3.進行數(shù)據(jù)合法性驗證

if(empName==null||"".equals(empName.trim())){JOptionPane.showMessageDialog(Employe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論