版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
計(jì)算機(jī)學(xué)院《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告PAGE30學(xué)號xx學(xué)年第xx學(xué)年第x學(xué)期 2學(xué)期《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告題目:班級通訊錄專業(yè):x班級:xx姓名:xxxxxxx指導(dǎo)教師:xxxxxxxxxxx成績:xx20xx年xx月xx日目錄TOC\o"1-3"\u1. 設(shè)計(jì)任務(wù)與要求 11.1. 設(shè)計(jì)任務(wù)與要求 11.2. 選題目的與意義 12. 需求分析 12.1. 用戶需求分析 12.2. 開發(fā)環(huán)境分析 23. 系統(tǒng)設(shè)計(jì) 23.1. 系統(tǒng)總體設(shè)計(jì) 23.2. 功能模塊設(shè)計(jì) 33.3. 類的設(shè)計(jì) 33.4. 數(shù)據(jù)庫設(shè)計(jì) 284. 設(shè)計(jì)體會 285. 主要參考文獻(xiàn) 29計(jì)算機(jī)學(xué)院《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程設(shè)計(jì)報(bào)告設(shè)計(jì)任務(wù)與要求設(shè)計(jì)任務(wù)與要求制作一個(gè)簡單的通訊簿,要求可對朋友的姓名、性別、手機(jī)號碼、寢室號和QQ號等信息保存、查詢、修改和刪除等功能。具有友好界面,且需要用戶名和密碼登陸進(jìn)入系統(tǒng)。使用數(shù)據(jù)庫作為后臺連接。選題目的與意義如今生活節(jié)奏日益加快,各種聯(lián)系人也不短增多,但是很多人還是單純的使用手機(jī)或紙質(zhì)電話本來記錄聯(lián)系人的信息,這些記錄的方式存在很多缺點(diǎn),如:信息量少,查找不方便;容易丟失;存儲照片不方便;安全性不高,隱私性不高……這個(gè)通訊簿,可以幫助用戶更好的存儲朋友的相關(guān)信息,易于添加、修改,存儲和使用都很方便。同時(shí)這個(gè)系統(tǒng)需要登陸才能進(jìn)入,提高了通訊簿的安全性和隱私性。通過實(shí)現(xiàn)通訊薄功能的實(shí)際編程了解基于Swing的圖形用戶界面開發(fā)和數(shù)據(jù)庫操作原理,提高Swing和JDBC技術(shù)結(jié)合的綜合運(yùn)用能力。需求分析用戶需求分析通訊簿的目的在于幫助用戶實(shí)現(xiàn)輕松管理聯(lián)系人的需求。為了用戶通訊錄的隱私性和安全性,通訊簿進(jìn)入前需要進(jìn)行系統(tǒng)登錄,對用戶的帳號和密碼進(jìn)行合法性驗(yàn)證,登錄成功則進(jìn)入系統(tǒng)功能界面。該通訊錄有已知的帳號和密碼,登錄時(shí)輸入帳號和密碼即可登錄,如果帳號和密碼不對會出現(xiàn)提示信息,如果三次輸入錯(cuò)誤,則系統(tǒng)會自動退出,“清空”按鈕可清空用戶輸入的信息。通訊簿的主系統(tǒng)主要功能包括實(shí)現(xiàn)添加、修改、刪除、查詢聯(lián)系人的姓名、手機(jī)號碼等信息,并且連接進(jìn)數(shù)據(jù)庫,將信息存儲進(jìn)數(shù)據(jù)庫文件中去。程序的文本框中可以顯示姓名、手機(jī)號碼等聯(lián)系人信息,通過通訊簿輕松實(shí)現(xiàn)聯(lián)系人的增、刪、改、查需求。個(gè)人通訊簿主系統(tǒng)由四大模塊組成:新建聯(lián)系人、修改聯(lián)系人、刪除聯(lián)系人、查詢聯(lián)系人,其功能如下:1.新建聯(lián)系人:用來增加聯(lián)系人,并且將其信息存入系統(tǒng)數(shù)據(jù)庫。信息如:姓名、手機(jī)號碼、寢室號、性別、qq等。2.修改聯(lián)系人即編輯聯(lián)系人,用來對數(shù)據(jù)庫中已有的聯(lián)系人信息進(jìn)行編輯,將更新后的信息重新寫入到系統(tǒng)數(shù)據(jù)庫。3.刪除聯(lián)系人用來刪除聯(lián)系人及其相關(guān)信息。4.查詢聯(lián)系人用來根據(jù)信息內(nèi)容,查詢該信息聯(lián)系人姓名及其他相關(guān)信息。開發(fā)環(huán)境分析系統(tǒng)編程基于JAVASwing的圖形用戶界面開發(fā),數(shù)據(jù)信息連接后臺為MySql數(shù)據(jù)庫。系統(tǒng)運(yùn)行環(huán)境為運(yùn)行Windows,具有JDK1.7以上Java編譯環(huán)境和Eclipse3.0以上Java編輯環(huán)境,NavicatforMySQL。系統(tǒng)設(shè)計(jì)系統(tǒng)總體設(shè)計(jì)進(jìn)入系統(tǒng)后必須先進(jìn)行登陸。登陸成功后,即可進(jìn)入通訊簿主界面。在主界面可以進(jìn)行聯(lián)系人的添加和查找。在查看聯(lián)系人界面中,可以選擇修改信息或刪除聯(lián)系人。系統(tǒng)總體設(shè)計(jì)圖如下:圖SEQ圖\*ARABIC圖SEQ圖\*ARABIC1系統(tǒng)總體設(shè)計(jì)圖班級通訊錄聯(lián)系人管理登錄添加聯(lián)系人修改聯(lián)系人查看聯(lián)系人刪除聯(lián)系人功能模塊設(shè)計(jì)為了保證通訊簿的隱私性和安全性,進(jìn)入系統(tǒng)后必須先進(jìn)行登陸。 登陸成功后,即可進(jìn)入通訊簿主界面。在主界面可以進(jìn)行聯(lián)系人的添加和查找。單擊“操作”菜單“添加”命令,界面會切換到聯(lián)系人信息輸入的界面。按照需求錄入聯(lián)系人信息即可單擊“提交”按鈕保存該聯(lián)系人。如果要進(jìn)行聯(lián)系人信息的修改或者刪除該聯(lián)系人,單擊“操作”菜單“修改”命令與“操作”菜單“刪除”命令即可。可通過“操作”菜單“查詢”命令打開一個(gè)窗口,以鍵入聯(lián)系人姓名進(jìn)行聯(lián)系人的查找,輸入相關(guān)信息后單擊“確定”按鈕即可,即可彈出一個(gè)窗口查看聯(lián)系人信息。類的設(shè)計(jì)由于系統(tǒng)需要鏈接數(shù)據(jù)庫,所以先設(shè)計(jì)一個(gè)類進(jìn)行數(shù)據(jù)庫的連接。數(shù)據(jù)庫為NavicatforMySQL版本。該類名稱為DButil,是數(shù)據(jù)庫操作類。該類中的屬性、方法如下:publicclassDbUtil{ privatestaticStringurl="jdbc:mysql://localhost:3306/tongxunlu?useUnicode=true&characterEncoding=GBK"; privatestaticStringdbName="root"; privatestaticStringdbPassword="123"; publicstaticStringdriver="com.mysql.jdbc.Driver"; publicstaticConnectiongetConn()throwsException{ Class.forName(driver); Connectionconn=DriverManager.getConnection(url,dbName,dbPassword); returnconn; } publicstaticvoidclose(Statementstmt,Connectionconn)throwsException{ if(stmt!=null){ stmt.close(); if(conn!=null){ conn.close(); } } }}設(shè)計(jì)一個(gè)DaoStudent類用于完成聯(lián)系人查找、添加、修改與刪除操作,具體代碼如下:publicclassDaoStudent{ publicstaticintinsertInfo(Connectionconn,Studentstudent)throwsException{ //插入數(shù)據(jù) conn=DbUtil.getConn(); Stringsql="insertintomyclass(gender,name,telephone,qq,room)values(?,?,?,?,?)"; PreparedStatementstat=conn.prepareStatement(sql); stat.setString(1,student.getGender()); stat.setString(2,student.getName()); stat.setString(3,student.getTelephone()); stat.setString(4,student.getQq()); stat.setString(5,student.getRoom()); inti=stat.executeUpdate(); returni; } publicstaticinteditInfo(Connectionconn,Studentstudent)throwsException{//修改數(shù)據(jù) conn=DbUtil.getConn(); Stringsql="updatemyclasssetgender=?,name=?,telephone=?,qq=?,room=?whereid=?"; PreparedStatementstat=conn.prepareStatement(sql); stat.setString(1,student.getGender()); stat.setString(2,student.getName()); stat.setString(3,student.getTelephone()); stat.setString(4,student.getQq()); stat.setString(5,student.getRoom()); stat.setInt(6,student.getId()); inti=stat.executeUpdate(); returni; } publicstaticResultSetfindInfo(Connectionconn,Studentstudent)throwsException{//查詢數(shù)據(jù) conn=DbUtil.getConn(); Stringsql="select*frommyclasswherename=?"; PreparedStatementstat=conn.prepareStatement(sql); stat.setString(1,student.getName()); ResultSetrs=stat.executeQuery(); returnrs; } publicstaticintdelInfo(Connectionconn,Studentstudent)throwsException{//刪除數(shù)據(jù) conn=DbUtil.getConn(); Stringsql="deletefrommyclasswherename=?"; PreparedStatementstat=conn.prepareStatement(sql); stat.setString(1,student.getName()); inti=stat.executeUpdate(); returni; }}設(shè)計(jì)一個(gè)類Student類用于設(shè)置聯(lián)系人的姓名、性別、寢室號、聯(lián)系方式與QQ號,并且有單獨(dú)的方法返回或設(shè)置這些值。packagedao;publicclassStudent{ privateStringxuehao,name,telephone,room,qq; privateintid; privateStringgender; publicStudent(){ super(); } publicStudent(Stringname){ super(); =name; } publicStudent(Stringxuehao,Stringname,Stringtelephone,Stringroom, Stringqq,intid,Stringgender){ super(); this.xuehao=xuehao; =name; this.telephone=telephone; this.room=room; this.qq=qq; this.id=id; this.gender=gender; } publicStringgetXuehao(){ returnxuehao; } publicvoidsetXuehao(Stringxuehao){ this.xuehao=xuehao; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicStringgetTelephone(){ returntelephone; } publicvoidsetTelephone(Stringtelephone){ this.telephone=telephone; } publicStringgetRoom(){ returnroom; } publicvoidsetRoom(Stringroom){ this.room=room; } publicStringgetQq(){ returnqq; } publicvoidsetQq(Stringqq){ this.qq=qq; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetGender(){ returngender; } publicvoidsetGender(Stringgender){ this.gender=gender; }}設(shè)計(jì)一個(gè)類Login來完成登陸界面及其功能,若三次輸入錯(cuò)誤,會提示相應(yīng)信息并退出程序,單擊“登錄”按鈕可登錄,單擊“清空”按鈕撤銷用戶的輸入。這個(gè)類實(shí)現(xiàn)了用戶登陸其屬性和方法如下:publicclassLoginextendsJFrameimplementsActionListener{ Login(){ …… } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==jtxtName){ jtxtPassword.requestFocus(); }elseif(e.getSource()==jtxtPassword){ jbArray[0].requestFocus(); }elseif(e.getSource()==jbArray[1]){ jlArray[2].setText(""); jtxtName.setText(""); jtxtPassword.setText(""); jtxtName.requestFocus(); }else{ if(jtxtName.getText().equals("")&&newString(jtxtPassword.getPassword()).equals("")){ JOptionPane.showMessageDialog(this,"用戶名和密碼不能為空!","消息對話框",JOptionPane.INFORMATION_MESSAGE); }elseif(jtxtName.getText().equals("")){ JOptionPane.showMessageDialog(this,"用戶名不能為空!","消息對話框",JOptionPane.INFORMATION_MESSAGE); }elseif(newString(jtxtPassword.getPassword()).equals("")){ JOptionPane.showMessageDialog(this,"密碼不能為空!","消息對話框",JOptionPane.INFORMATION_MESSAGE); }elseif(jtxtName.getText().equals("tianxiaoying")&&String.valueOf(jtxtPassword.getPassword()).equals("123456")){ this.dispose();newBjtxyShouYe(); }else{//登錄失敗 count++; if(count==3){ JOptionPane.showMessageDialog(this,"非法用戶,系統(tǒng)將自動退出!","消息對話框",JOptionPane.INFORMATION_MESSAGE); System.exit(0); }elseif(count<3){ if(!jtxtName.getText().equals("tianxiaoying")&&String.valueOf(jtxtPassword.getPassword()).equals("123456")){ JOptionPane.showMessageDialog(this,"用戶名錯(cuò)誤,你還有"+(3-count)+"次機(jī)會!","消息對話框",JOptionPane.INFORMATION_MESSAGE); }elseif(!String.valueOf(jtxtPassword.getPassword()).equals("123456")&&jtxtName.getText().equals("tianxiaoying")){ JOptionPane.showMessageDialog(this,"密碼錯(cuò)誤,你還有"+(3-count)+"次機(jī)會!","消息對話框",JOptionPane.INFORMATION_MESSAGE); }else{ JOptionPane.showMessageDialog(this,"用戶名和密碼均錯(cuò)誤,你還有"+(3-count)+"次機(jī)會!","消息對話框",JOptionPane.INFORMATION_MESSAGE); } jlArray[2].setText(""); jtxtName.setText(""); jtxtPassword.setText(""); jtxtName.requestFocus(); } } } } publicstaticvoidmain(String[]args){ newLogin(); }}設(shè)計(jì)一個(gè)BjtxyShouYe類顯示主頁面,里有一個(gè)操作菜單,該菜單里有相應(yīng)的命令添加、修改、查詢、刪除與退出,單擊相應(yīng)的命令打開相應(yīng)的頁面,分別完成相應(yīng)功能,單擊“退出”命令退出程序,界面設(shè)計(jì)與代碼如下:publicclassBjtxyShouYeextendsJFrame{ privateJLabellbl; privateJMenuopen; privateJMenuBarmb; privateJMenuItemsearch,add,delete,edit,exit,look; publicBjtxyShouYe(){ super("班級通訊錄"); Containerc=getContentPane(); mb=newJMenuBar(); open=newJMenu("操作"); search=newJMenuItem("查詢"); add=newJMenuItem("添加"); delete=newJMenuItem("刪除"); edit=newJMenuItem("修改"); exit=newJMenuItem("退出"); open.addActionListener(newHandLer()); search.addActionListener(newHandLer()); add.addActionListener(newHandLer()); delete.addActionListener(newHandLer()); edit.addActionListener(newHandLer()); exit.addActionListener(newHandLer()); //添加菜單項(xiàng) open.add(search); open.add(add); open.add(delete); open.add(edit); //在菜單中添加分隔條 open.addSeparator(); open.add(exit); mb.add(open); setJMenuBar(mb);//設(shè)置菜單欄 Imageicon=Toolkit.getDefaultToolkit().getImage("res\\1123.jpg"); this.setIconImage(icon); setLocationRelativeTo(null);//設(shè)置窗口顯示在屏幕中央 DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//獲取當(dāng)前屏幕大小 this.setBounds((screenSize.width-400)/2,(screenSize.height-400)/2,400,400); this.setVisible(true); } classHandLerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ JMenuItemmi=(JMenuItem)e.getSource(); if(mi==search){ dispose(); try{ newSearchClass(); }catch(SQLExceptione1){ e1.printStackTrace(); } } if(mi==edit){ dispose(); try{ neweditClass(); }catch(SQLExceptione1){ e1.printStackTrace(); } } if(mi==add){ dispose(); newAdd(); } if(mi==delete){ dispose(); try{ newdelClass(); }catch(SQLExceptione3){ e3.printStackTrace(); } } if(mi==exit){ System.exit(0); } } }} 設(shè)計(jì)一個(gè)Add類,用于執(zhí)行“操作”菜單“添加”命令時(shí)打開該界面,用戶在頁面里輸入信息,單擊“返回”按鈕關(guān)閉當(dāng)前窗口打開主界面,單擊“清空”按鈕撤銷用戶的輸入,單擊“提交”按鈕,提交數(shù)據(jù),先用findInfo()函數(shù)根據(jù)姓名查找數(shù)據(jù),若表中已有此聯(lián)系人則提示相應(yīng)信息,若沒查找到則執(zhí)行insertInfo()函數(shù)完成數(shù)據(jù)插入操作,界面設(shè)計(jì)與代碼如下:publicclassAddextendsJFrameimplementsActionListener{ Add(){ …… } publicvoidactionPerformed(ActionEvente){ roomname=names[0]; if(e.getSource()==jbArray1[2]){//清空按鈕 aname.setText(""); atelephone.setText(""); aqq.setText(""); aname.requestFocus(); grp.setSelectedCheckbox(null); } if(e.getSource()==jbArray1[0]){//返回按鈕 this.dispose(); newBjtxyShouYe(); } if(e.getSource()==jbArray1[1]){//提交按鈕 Studentstudentadd=newStudent(); if(aname.getText().equals("")){ JOptionPane.showMessageDialog(this,"姓名不能為空!"); }else{ studentadd.setName(aname.getText()); } if(sex==1){ studentadd.setGender("男"); }elseif(sex==0){ studentadd.setGender("女"); }else{ JOptionPane.showMessageDialog(this,"請選擇性別!"); } studentadd.setRoom(roomname); studentadd.setTelephone(atelephone.getText()); studentadd.setQq(aqq.getText()); try{ Connectionconn=DbUtil.getConn(); ResultSetrs=DaoStudent.findInfo(conn,studentadd); if(rs.next()){ JOptionPane.showMessageDialog(this,"該同學(xué)已存在!"); }else{ inti=DaoStudent.insertInfo(conn,studentadd); if(i==1){ JOptionPane.showMessageDialog(this,"添加數(shù)據(jù)成功!"); this.dispose(); newBjtxyShouYe(); }else{ JOptionPane.showMessageDialog(this,"添加數(shù)據(jù)失敗,請重試!"); } } }catch(Exceptione1){ e1.printStackTrace(); } } } classCheckHandleimplementsItemListener{ publicvoiditemStateChanged(ItemEvente){ Objects=e.getSource(); if(s==male){ sex=1; }else{ sex=0; } } } classRoomStateChangedimplementsItemListener{ publicvoiditemStateChanged(ItemEvente1){ select=aroom.getSelectedIndex(); roomname=names[select]; } }} 設(shè)計(jì)一個(gè)SearchClass類在執(zhí)行“操作”菜單“查詢”命令時(shí)打開,用于輸入聯(lián)系人姓名調(diào)用findInfo()命令在myclass表中查詢聯(lián)系人數(shù)據(jù)并返回給SearchStudent類,界面設(shè)計(jì)與代碼如下:publicclassSearchClassextendsJFrameimplementsActionListener{ SearchClass()throwsSQLException{ …… } publicvoidactionPerformed(ActionEvente){ Objects=e.getSource(); if(s==back){ this.dispose(); newBjtxyShouYe(); }elseif(s==sure){ Stringname=txt.getText(); Studentstudent=newStudent(name); try{ Connectionconn=DbUtil.getConn(); ResultSetrs=DaoStudent.findInfo(conn,student); if(!rs.next()){ JOptionPane.showMessageDialog(this,"沒有您要查詢的學(xué)生信息"); nametxt.setText(""); }else{ student.setName(rs.getString("name")); student.setId(rs.getInt("id")); student.setGender(rs.getString("gender")); student.setTelephone(rs.getString("telephone")); student.setQq(rs.getString("qq")); student.setRoom(rs.getString("room")); this.dispose(); newSearchStudent(student); } }catch(Exceptione1){ e1.printStackTrace(); } }elseif(s==unsure){ nametxt.setText(""); } }} 創(chuàng)建一個(gè)SearchStudent類,用于接收SearchClass類傳來的數(shù)據(jù),并在一個(gè)新的窗口顯示出來,且數(shù)據(jù)為不可更改狀態(tài),單擊“返回”按鈕返回主界面,單擊“刪除”按鈕可根據(jù)姓名刪除聯(lián)系人數(shù)據(jù),設(shè)計(jì)界面與代碼如下:publicclassSearchStudentextendsJFrameimplementsActionListener{ privateJPaneljp=newJPanel(); privateJLabel[]jlArray={newJLabel("姓名:"),newJLabel("性別:"),newJLabel("寢室號:"),newJLabel("聯(lián)系方式:"),newJLabel("QQ號:")}; privateJButton[]jbArray={newJButton("返回"),newJButton("刪除")}; privateJLabelbjtxl=newJLabel("班級通訊錄"); CheckboxGroupgrp=newCheckboxGroup(); privateStringnames[]={"11B105","11B106","11B119","11B129","11B134","9B633","9B634"}; privateJComboBoxbedroom; privateCheckboxmale,fmale; privateJTextFieldname=newJTextField(30); privateJTextFieldtelephone=newJTextField(30); privateJTextFieldqq=newJTextField(30); publicstaticStudentstudent; privateStringgender,aroom; SearchStudent(Studentstudent){ jp.setLayout(null); this.student=student; bjtxl.setBounds(165,20,150,30); bjtxl.setFont(newFont("Serif",Font.BOLD,18)); jp.add(bjtxl); //接收查詢到的學(xué)生數(shù)據(jù) name.setText(student.getName()); name.setEnabled(false); //添加性別單選按鈕 CheckboxGroupgrp=newCheckboxGroup(); male=newCheckbox("男"); fmale=newCheckbox("女"); male.setCheckboxGroup(grp); fmale.setCheckboxGroup(grp); male.setBounds(160,110,30,30); fmale.setBounds(200,110,30,30); gender=student.getGender(); if(gender.equals("男")){ grp.setSelectedCheckbox(male); }else{ grp.setSelectedCheckbox(fmale); } male.setEnabled(false); fmale.setEnabled(false); jp.add(male); jp.add(fmale); //添加宿舍名稱 bedroom=newJComboBox(names); bedroom.setMaximumRowCount(3); aroom=student.getRoom(); if(aroom.equals(names[0])){ bedroom.setSelectedIndex(0); }elseif(aroom.equals(names[1])){ bedroom.setSelectedIndex(1); }elseif(aroom.equals(names[2])){ bedroom.setSelectedIndex(2); }elseif(aroom.equals(names[3])){ bedroom.setSelectedIndex(3); }elseif(aroom.equals(names[4])){ bedroom.setSelectedIndex(4); }elseif(aroom.equals(names[5])){ bedroom.setSelectedIndex(5); }elseif(aroom.equals(names[6])){ bedroom.setSelectedIndex(6); }else{ bedroom.setSelectedIndex(7); } bedroom.setBounds(160,160,180,25); bedroom.setEnabled(false); jp.add(bedroom); telephone.setText(student.getTelephone());//設(shè)置學(xué)生聯(lián)系方式 telephone.setEnabled(false); qq.setText(student.getQq()); qq.setEnabled(false); //添加標(biāo)簽 for(inti=0;i<5;i++){ jlArray[i].setBounds(70,60+i*50,80,25); jp.add(jlArray[i]); } //添加按鈕 for(intj=0;j<2;j++){ jbArray[j].setBounds(130+j*110,320,80,25); jp.add(jbArray[j]); jbArray[j].addActionListener(this); } name.setBounds(160,60,180,25); jp.add(name); telephone.setBounds(160,210,180,25);//添加聯(lián)系方式文本框 jp.add(telephone); qq.setBounds(160,260,180,25);//添加QQ號 jp.add(qq); jp.add(bedroom); //設(shè)置圖標(biāo) Imageicon=Toolkit.getDefaultToolkit().getImage("res\\1123.jpg"); this.setIconImage(icon); this.add(jp); this.setTitle("查看"); this.setResizable(false); DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//獲取當(dāng)前屏幕大小 this.setBounds((screenSize.width-450)/2,(screenSize.height-420)/2,450,420); this.setVisible(true); } publicvoidactionPerformed(ActionEvente){ Objects=e.getSource(); if(s==jbArray[0]){//返回按鈕 this.dispose(); newBjtxyShouYe(); }elseif(s==jbArray[1]){//刪除按鈕 try{ Connectionconn=DbUtil.getConn(); inti=DaoStudent.delInfo(conn,student); if(i==1){ JOptionPane.showMessageDialog(this,"刪除成功!"); this.dispose(); newBjtxyShouYe(); }else{ JOptionPane.showMessageDialog(this,"刪除失敗,請重試!"); } }catch(Exceptione2){ e2.printStackTrace(); } } }} 創(chuàng)建一個(gè)DelClass類,當(dāng)執(zhí)行“操作”菜單“刪除”命令時(shí)打開該界面,輸入要刪除的聯(lián)系人的姓名單擊“確定”按鈕則可調(diào)用delInfo()函數(shù)刪除聯(lián)系人數(shù)據(jù),界面設(shè)計(jì)與代碼如下:publicclassdelClassextendsJFrameimplementsActionListener{ delClass()throwsSQLException{ …… } publicvoidactionPerformed(ActionEvente){ Objects=e.getSource(); if(s==dback){//返回按鈕 this.dispose(); newBjtxyShouYe(); }elseif(s==dsure){//確定按鈕 Stringname=this.dnametxt.getText(); Studentstudent=newStudent(name); try{ Connectionconn=DbUtil.getConn(); inti=DaoStudent.delInfo(conn,student); if(i==1){ JOptionPane.showMessageDialog(this,"刪除成功!"); this.dispose(); newBjtxyShouYe(); }else{ JOptionPane.showMessageDialog(this,"刪除失敗!"); dnametxt.setText(""); } }catch(Exceptione2){ e2.printStackTrace(); } }elseif(s==dunsure){//清空按鈕 dnametxt.setText(""); } }} 創(chuàng)建一個(gè)EditClass類當(dāng)執(zhí)行“操作”菜單“修改”時(shí)調(diào)用它,輸入要修改的聯(lián)系人姓名,單擊“確定”按鈕,調(diào)用findInfo()函數(shù)查找要修改的數(shù)據(jù),并將查找到的信息傳給Edit,界面設(shè)計(jì)與代碼如下:publicclasseditClassextendsJFrameimplementsActionListener{ editClass()throwsSQLException{ …… } publicvoidactionPerformed(ActionEvente){ Objectas=e.getSource(); if(as==back){//返回按鈕 this.dispose(); newBjtxyShouYe(); } if(as==sure){//確定按鈕 Stringname=txt.getText(); Studentstudent=newStudent(name); try{ Connectionconn=DbUtil.getConn(); ResultSetrs=DaoStudent.findInfo(conn,student); if(!rs.next()){ JOptionPane.showMessageDialog(this,"沒有您要修改的學(xué)生信息"); nametxt.setText(""); }else{ student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setId(rs.getInt("id")); student.setGender(rs.getString("gender")); student.setTelephone(rs.getString("telephone")); student.setQq(rs.getString("qq")); student.setRoom(rs.getString("room")); this.dispose(); newEdit(student); } }catch(Exceptione1){ e1.printStackTrace(); } } if(as==unsure){//清空按鈕 nametxt.setText(""); nametxt.requestFocus(); } }} 創(chuàng)建一個(gè)Edit類,接收EditClass類傳過來的數(shù)據(jù)并顯示出來,用戶修改后單擊“提交”按鈕調(diào)用editInfo()函數(shù)修改聯(lián)系人數(shù)據(jù),“撤消”按鈕可撤消用戶的修改,顯示最原始的界面,界面設(shè)計(jì)與代碼如下:publicclassEditextendsJFrameimplementsActionListener{ Edit(Studentstudent){ …… } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==jbArray[0]){//返回按鈕 dispose(); newBjtxyShouYe(); }elseif(e.getSource()==jbArray[1]){//提交按鈕 intindex=JOptionPane.showConfirmDialog(null,"確認(rèn)修改該條數(shù)據(jù)嗎?","確認(rèn)修改",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(index==0){//確認(rèn)修改 Studentstudentedit=newStudent(); //獲取提交的數(shù)據(jù) studentedit.setId(id); studentedit.setName(name.getText()); if(sex==1){ studentedit.setGender("男"); }else{ studentedit.setGender("女"); } studentedit.setRoom(roomname); studentedit.setTelephone(telephone.getText()); studentedit.setQq(qq.getText()); studentedit.setRoom(roomname); try{ Connectionconn=DbUtil.getConn(); inti=DaoStudent.editInfo(conn,studentedit); if(i==1){ JOptionPane.showMessageDialog(this,"修改數(shù)據(jù)成功!"); this.dispose(); newBjtxyShouYe(); }else{ JOptionPane.showMessageDialog(this,"修改數(shù)據(jù)失敗,請重試!"); } }catch(Exceptione5){ e5.printStackTrace(); } } }elseif(e.getSource()==jbArray[2]){//撤消按鈕 this.dispose(); newEdit(student); } } classCheckHandleimplementsItemListener{ publicvoiditemStateChanged(ItemEvente){ Objects=e.getSource(); if(s==male){ sex=1; }else{ sex=0; } } } classRoomStateChangedimplementsItemListener{ publicvoiditemStateChanged(ItemEvente1){ select=bedroom.getSelectedIndex(); roomname=names[select]; } }} 創(chuàng)建一個(gè)類Browse,當(dāng)執(zhí)行“操作”菜單,“查看”命令時(shí)打開該窗口,顯示所有聯(lián)系人的數(shù)據(jù),界面設(shè)計(jì)與代碼如下:publicclassBrowseextendsJFrameimplementsActionListener{ privatestaticResultSetrs; privateJPaneljp; privateJPaneljpl; privateJButtonback,quit; publicBrowse(ResultSetrs){ this.rs=rs; jp=newJPanel(); jpl=newJPanel(); back=newJButton("返回"); quit=newJButton("退出"); back.setBounds(100,200,80,30); back.addActionListener(this); jpl.add(back); quit.setBounds(200,200,80,30); quit.addActionListener(this); jpl.add(quit); Imageicon=Toolkit.getDefaultToolkit().getImage("res\\1123.jpg"); this.setIconImage(icon); this.add(jp); finalString[]colHeads={"id","gender","name","telephone","qq","room"}; Object[][]base=newObject[50][7]; try{ inti=0; while(rs.next()){ base[i][0]=rs.getString("id");//用二維數(shù)組來存放讀出來的數(shù)據(jù),base[i][1]=rs.getString("gender");base[i][2]=rs.getString("name");base[i][3]=rs.getString("telephone");base[i][4]=rs.getString("qq");base[i][5]=rs.getString("room");i++; } }catch(SQLExceptione){ e.printStackTrace(); } //建立一個(gè)二維表JTabletable=newJTable(base,colHeads);//創(chuàng)建一個(gè)表格,用剛創(chuàng)建的數(shù)組做實(shí)參table.setPreferredScrollableViewportSize(newDimension(600,150));//設(shè)置表格的大小JScrollPanepane3=newJScrollPane(table);//創(chuàng)建滾動條jpl.setPreferredSize(newDimension(600,400));jpl.add(pane3);//把滾動條添加到容器上JLabelpitLabel1=newJLabel();//newImageIcon("2.JPEG")//用小圖片裝飾組建pitLabel1.setBounds(0,-10,700,500);//設(shè)置標(biāo)簽大小jpl.add(pitLabel1);//把標(biāo)簽條添加到容器上this.setContentPane(jpl);//把容器添加到窗體上this.pack(); this.setTitle("查看"); setLocationRelativeTo(null);//設(shè)置窗口顯示在屏幕中央 DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();//獲取當(dāng)前屏幕大小 this.setBounds((screenSize.width-800)/2,(screenSize.height-250)/2,800,250); this.setVisible(true); } publicvoidactionPerformed(ActionEvente){ Objectas=e.getSource(); if(as==back){//返回按鈕 this.dispose(); newBjtxyShouYe(); }elseif(as==quit){ System.exit(0); } }}數(shù)據(jù)庫設(shè)計(jì)通訊簿系統(tǒng)需要連接后臺數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的存儲。這個(gè)通訊簿系統(tǒng)應(yīng)用的數(shù)據(jù)庫為NavicatforMySQL。 數(shù)據(jù)庫中有1個(gè)表,用來存儲聯(lián)系人信息。 表myclass用來存儲聯(lián)系人的相關(guān)信息,具體如下:表格SEQ表格\*ARABIC1聯(lián)系人信息表字段名稱數(shù)據(jù)類型字段大小是否主鍵說明idint4是聯(lián)系人編號genderchar1否聯(lián)系人性別namevarchar20否聯(lián)系人姓名telephonevarchar20否聯(lián)系方式qqvarchar20否QQ號roomvarchar20否所屬寢室設(shè)計(jì)體會這次小學(xué)期是歷時(shí)最久的一次,設(shè)計(jì)的程序內(nèi)容也比之前的要復(fù)雜的多。這個(gè)通訊簿程序基本滿足了用戶的需求和驗(yàn)收的標(biāo)準(zhǔn),功能基本齊全,運(yùn)行較流暢。但是這個(gè)系統(tǒng)還不是很完善,功能還可以繼續(xù)增加,使之更加完美,例如:添加聯(lián)系人圖片,設(shè)置窗口背景……通過這次課程設(shè)計(jì),我從中受益匪淺,并且對JAVA這一門課程有了更深一步的認(rèn)識。在程序設(shè)計(jì)中,要把理論知識和實(shí)踐聯(lián)系起來,要在所要開發(fā)的項(xiàng)目中漸漸成長。雖然我對這些JAVA知識運(yùn)用得還不是很熟練,但是相信我也在滴水穿石地成長起來。發(fā)現(xiàn)問題,提出問題,解決問題,使我從不足之處出發(fā),尋找新的學(xué)習(xí)方向。一邊實(shí)習(xí)一邊探索,發(fā)現(xiàn)理論和實(shí)踐要充分地結(jié)合,是需要扎實(shí)的基本功的,這就表明學(xué)好基礎(chǔ)知識是理論付諸實(shí)踐的前提。在這次課程設(shè)計(jì)中我學(xué)到了很多,希望在以后我也能充分利用課程設(shè)計(jì)的機(jī)會充實(shí)自己,并希望這樣的機(jī)會能被更好更多地提供。最后,我要向給予我提供幫助和支持的老師和同學(xué)們道一聲謝謝,感謝你們的無私幫助!主要參考文獻(xiàn)[1]鄭阿奇.《Java實(shí)用教程(第2版)》[M].北京:電子工業(yè)出版社.2009.[2]龐永慶.《21天學(xué)通Java(第2版)》[M].北京:電子工業(yè)出版社.2011.[3]明日科技.《Java典型模塊精解》[M].北京:清華大學(xué)版社.2012.[4]吳亞峰.《30天學(xué)通Java項(xiàng)目案例開發(fā)》[M].北京:電子工業(yè)出版社.2010.基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺控制器的研制基于單片機(jī)的軟起動器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動檢測儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號檢測儀基于單片機(jī)的電機(jī)運(yùn)動控制系統(tǒng)設(shè)計(jì)Pico專用單片機(jī)核的可測性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能遙測微型氣象站MCS-51單片機(jī)構(gòu)建機(jī)器人的實(shí)踐研究基于單片機(jī)的輪軌力檢測基于單片機(jī)的GPS定位儀的研究與實(shí)現(xiàn)基于單片機(jī)的電液伺服控制系統(tǒng)用于單片機(jī)系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機(jī)的時(shí)控和計(jì)數(shù)系統(tǒng)性能優(yōu)化的研究基于單片機(jī)和CPLD的粗光柵位移測量系統(tǒng)研究單片機(jī)控制的后備式方波UPS提升高職學(xué)生單片機(jī)應(yīng)用能力的探究基于單片機(jī)控制的自動低頻減載裝置研究基于單片機(jī)控制的水下焊接電源的研究基于單片機(jī)的多通道數(shù)據(jù)采集系統(tǒng)基于uPSD3234單片機(jī)的氚表面污染測量儀的研制基于單片機(jī)的紅外測油儀的研究96系列單片機(jī)仿真器研究與設(shè)計(jì)HYPERLINK"/deta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中華女子學(xué)院《傳統(tǒng)及現(xiàn)代手工藝制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州信息工程職業(yè)學(xué)院《工業(yè)控制網(wǎng)絡(luò)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長沙航空職業(yè)技術(shù)學(xué)院《數(shù)字電路設(shè)計(jì)及實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南國防工業(yè)職業(yè)技術(shù)學(xué)院《品牌形象專項(xiàng)設(shè)計(jì)一》2023-2024學(xué)年第一學(xué)期期末試卷
- 新型材料在電池儲能中的應(yīng)用
- 共建文化 發(fā)展未來模板
- 市場營銷領(lǐng)導(dǎo)力實(shí)踐述職
- 業(yè)務(wù)操作-房地產(chǎn)經(jīng)紀(jì)人《業(yè)務(wù)操作》模擬試卷4
- 房地產(chǎn)交易制度政策-《房地產(chǎn)基本制度與政策》預(yù)測試卷4
- 農(nóng)學(xué)成果答辯報(bào)告模板
- CLSIM100-S24英文版 抗菌藥物敏感性試驗(yàn)執(zhí)行標(biāo)準(zhǔn);第二十四版資料增刊
- 空調(diào)作業(yè)規(guī)程3篇
- 物業(yè)項(xiàng)目服務(wù)進(jìn)度保證措施
- (隱蔽)工程現(xiàn)場收方計(jì)量記錄表
- DB22T 5005-2018 注塑夾芯復(fù)合保溫砌塊自保溫墻體工程技術(shù)標(biāo)準(zhǔn)
- 醫(yī)院手術(shù)室醫(yī)院感染管理質(zhì)量督查評分表
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國育齡女性生殖健康研究報(bào)告
- 消防報(bào)審驗(yàn)收程序及表格
評論
0/150
提交評論