2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p>  一、設(shè)計(jì)任務(wù)與要求3</p><p>  1.1 設(shè)計(jì)任務(wù)與要求3</p><p>  1.2 選題目的與意義3</p><p><b>  二、需求分析3</b></p><p>  2.1 用

2、戶需求分析3</p><p>  2.2 開發(fā)環(huán)境分析4</p><p><b>  三、系統(tǒng)設(shè)計(jì)5</b></p><p>  3.1 系統(tǒng)總體設(shè)計(jì)5</p><p>  3.2 功能模塊設(shè)計(jì)5</p><p>  3.3 類的設(shè)計(jì)6</p><p>  3.

3、4 數(shù)據(jù)庫設(shè)計(jì)12</p><p><b>  四、程序?qū)崿F(xiàn)15</b></p><p>  4.1 程序流程圖15</p><p>  4.2 關(guān)鍵算法與技術(shù)實(shí)現(xiàn)19</p><p>  4.3 類與數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)31</p><p><b>  五、測試運(yùn)行36</b

4、></p><p>  5.1 系統(tǒng)測試方案36</p><p>  5.2 運(yùn)行結(jié)果分析37</p><p><b>  六、設(shè)計(jì)體會(huì)45</b></p><p><b>  主要參考文獻(xiàn)46</b></p><p><b>  一、設(shè)計(jì)任務(wù)與要求&

5、lt;/b></p><p>  1.1 設(shè)計(jì)任務(wù)與要求</p><p>  制作一個(gè)簡單的通訊簿,要求可對(duì)朋友的姓名、性別、出生日期、工作單位、手機(jī)號(hào)碼、聯(lián)系電話、職稱、職務(wù)、聯(lián)系地址、郵編、Email和QQ號(hào)等信息保存、查詢、修改和刪除等功能。具有友好界面,且需要用戶名和密碼登陸進(jìn)入系統(tǒng)。使用數(shù)據(jù)庫作為后臺(tái)連接。</p><p>  1.2 選題目的與意義

6、</p><p>  如今生活節(jié)奏日益加快,各種聯(lián)系人也不短增多,但是很多人還是單純的使用手機(jī)或紙質(zhì)電話本來記錄聯(lián)系人的信息,這些記錄的方式存在很多缺點(diǎn),如:信息量少,查找不方便;容易丟失;存儲(chǔ)照片不方便;安全性不高,隱私性不高……</p><p>  這個(gè)通訊簿,可以幫助用戶更好的存儲(chǔ)朋友的相關(guān)信息,易于添加、修改,存儲(chǔ)和使用都很方便。同時(shí)這個(gè)系統(tǒng)需要登陸才能進(jìn)入,提高了通訊簿的安全性和

7、隱私性。</p><p>  通過實(shí)現(xiàn)通訊薄功能的實(shí)際編程了解基于Swing的圖形用戶界面開發(fā)和數(shù)據(jù)庫操作原理,提高Swing和JDBC技術(shù)結(jié)合的綜合運(yùn)用能力。</p><p><b>  二、需求分析</b></p><p>  2.1 用戶需求分析</p><p>  通訊簿的目的在于幫助用戶實(shí)現(xiàn)輕松管理聯(lián)系人的需求

8、。</p><p>  為了用戶通訊錄的隱私性和安全性,通訊簿進(jìn)入前需要進(jìn)行系統(tǒng)登錄,對(duì)用戶的帳號(hào)和密碼進(jìn)行合法性驗(yàn)證,登錄成功則進(jìn)入系統(tǒng)功能界面。</p><p>  個(gè)人通訊簿登陸系統(tǒng)包括四項(xiàng)功能:登陸、注冊(cè)、修改密碼、刪除賬號(hào)。</p><p>  如果是第一次使用通訊簿,需要進(jìn)行注冊(cè),注冊(cè)成功后即可登陸通訊簿主界面。在登陸界面,輸入已有的賬號(hào)和正確的密碼,還

9、可以進(jìn)行密碼的修改和賬號(hào)的注銷。</p><p>  通訊簿的主系統(tǒng)主要功能包括實(shí)現(xiàn)添加、修改、刪除、查詢聯(lián)系人的姓名、手機(jī)號(hào)碼等信息,并且連接進(jìn)數(shù)據(jù)庫,將信息存儲(chǔ)進(jìn)數(shù)據(jù)庫文件中去。</p><p>  程序的文本框中可以顯示姓名、手機(jī)號(hào)碼等聯(lián)系人信息,通過通訊簿輕松實(shí)現(xiàn)聯(lián)系人的增、刪、改、查需求。</p><p>  個(gè)人通訊簿主系統(tǒng)由四大模塊組成:新建聯(lián)系人、修

10、改聯(lián)系人、刪除聯(lián)系人、查詢聯(lián)系人,其功能如下:</p><p><b>  1.新建聯(lián)系人:</b></p><p>  用來增加聯(lián)系人,并且將其信息存入系統(tǒng)數(shù)據(jù)庫。信息如:姓名、手機(jī)號(hào)碼、地址、生日、qq等。</p><p><b>  2.修改聯(lián)系人</b></p><p>  即編輯聯(lián)系人,用

11、來對(duì)數(shù)據(jù)庫中已有的聯(lián)系人信息進(jìn)行編輯,將更新后的信息重新寫入到系統(tǒng)數(shù)據(jù)庫。</p><p><b>  3.刪除聯(lián)系人</b></p><p>  用來刪除聯(lián)系人及其相關(guān)信息。</p><p><b>  4.查詢聯(lián)系人</b></p><p>  用來根據(jù)信息內(nèi)容,查詢?cè)撔畔⒙?lián)系人姓名及其他相關(guān)信

12、息。</p><p>  綜上所述,此通訊簿的要求如下:</p><p>  每個(gè)用戶都有自己的密碼,確保通訊簿資料安全;</p><p>  可以根據(jù)用戶的需求進(jìn)行分組的添加和刪除;</p><p>  聯(lián)系人資料應(yīng)齊全,包括地址、郵編、電子郵箱等,并且可以進(jìn)行增、刪、改、查;</p><p>  可以設(shè)置聯(lián)系人的頭

13、像;</p><p>  2.2 開發(fā)環(huán)境分析</p><p>  系統(tǒng)編程基于JAVA Swing的圖形用戶界面開發(fā),數(shù)據(jù)信息連接后臺(tái)為Access數(shù)據(jù)庫。</p><p>  系統(tǒng)運(yùn)行環(huán)境為運(yùn)行Windows的PC機(jī),具有JDK1.4以上Java編譯環(huán)境和JCreator3.5或Eclipse3.0以上Java編輯環(huán)境,Access2003。</p>

14、<p><b>  三、系統(tǒng)設(shè)計(jì)</b></p><p>  3.1 系統(tǒng)總體設(shè)計(jì)</p><p>  進(jìn)入系統(tǒng)后必須先進(jìn)行登陸。登陸成功后,即可進(jìn)入通訊簿主界面。在主界面可以進(jìn)行聯(lián)系人的添加和查找。在查看聯(lián)系人界面中,可以選擇修改信息或刪除聯(lián)系人。系統(tǒng)總體設(shè)計(jì)圖如下:</p><p>  圖3.1.1 系統(tǒng)總體設(shè)計(jì)圖</p

15、><p>  3.2 功能模塊設(shè)計(jì)</p><p>  為了保證通訊簿的隱私性和安全性,進(jìn)入系統(tǒng)后必須先進(jìn)行登陸。同時(shí),可以進(jìn)行注冊(cè)、修改密碼、刪除用戶的操作。</p><p>  登陸成功后,即可進(jìn)入通訊簿主界面。在主界面可以進(jìn)行聯(lián)系人的添加和查找。</p><p>  單擊添加按鈕,界面會(huì)切換到聯(lián)系人信息輸入的界面。按照需求錄入聯(lián)系人信息即可

16、單擊保存按鈕保存該聯(lián)系人。如有需求,可以選擇照片進(jìn)行聯(lián)系人相冊(cè)照片的添加。如果要進(jìn)行聯(lián)系人信息的修改或者刪除該聯(lián)系人,單擊編輯或刪除即可。</p><p>  主界面上方可以鍵入聯(lián)系人姓名或編號(hào)進(jìn)行聯(lián)系人的查找,輸入相關(guān)信息后單擊查找即可。</p><p>  雙擊主界面左邊的菜單中的聯(lián)系人,即可展開聯(lián)系人分類。雙擊分類名稱或單擊節(jié)點(diǎn)連接處,可以展開該分類下的聯(lián)系人姓名。單擊姓名,即可查看

17、該聯(lián)系人信息。雙擊聯(lián)系人姓名或單擊節(jié)點(diǎn)連接處,可以查看該聯(lián)系人的相冊(cè)。</p><p><b>  3.3 類的設(shè)計(jì)</b></p><p>  由于系統(tǒng)需要鏈接數(shù)據(jù)庫,所以先設(shè)計(jì)一個(gè)類進(jìn)行數(shù)據(jù)庫的連接。數(shù)據(jù)庫為Access2000版本。該類名稱為DButil,是數(shù)據(jù)庫操作類。該類中的屬性、方法如下:</p><p>  private sta

18、tic String driver="sun.jdbc.odbc.JdbcOdbcDriver";//聲明驅(qū)動(dòng)類字符串</p><p>  //聲明數(shù)據(jù)庫連接字符串</p><p>  private static String url="jdbc:odbc:driver={Microsoft Access Driver (*.mdb, *.accdb)};D

19、BQ=db/linkman.mdb";</p><p>  private static Connection con=null;//聲明數(shù)據(jù)庫連接對(duì)象引用</p><p>  private static Statement stat=null;//聲明語句對(duì)象引用</p><p>  private static PreparedStatement p

20、sInsert=null;//聲明預(yù)編譯語句對(duì)象引用</p><p>  private static ResultSet rs=null;//聲明結(jié)果集對(duì)象引用</p><p>  public static Connection getConnection()//得到數(shù)據(jù)庫連接的方法</p><p>  public static void closeCon()

21、//關(guān)閉數(shù)據(jù)庫連接的方法</p><p>  public static boolean check(String user,String pwd)//登陸驗(yàn)證</p><p>  public static int update(String sql)//更新數(shù)據(jù)庫</p><p>  public static boolean isExist(String sq

22、l)//某條記錄是否存在</p><p>  public static int delUser(String uid)//刪除用戶</p><p>  public static Vector<String> getNode(String user,String condition)//根據(jù)條件得到節(jié)點(diǎn)名稱列表</p><p>  public sta

23、tic int delGroup(String user,String group)//刪除分組</p><p>  public static String insertPerson(String uid,Vector<String> pInfo)//新建聯(lián)系人</p><p>  public static String updatePerson(String uid,Ve

24、ctor<String> pInfo)//修改聯(lián)系人</p><p>  public static Vector<String> getPerInfo(String sql)//得到聯(lián)系人信息</p><p>  public static Image getPic(String sql)//獲取頭像</p><p>  public st

25、atic int insertPic(String path,String pid)//新增照片</p><p>  public static void main(String[] args)</p><p>  設(shè)計(jì)一個(gè)類Login來完成登陸界面及其功能。這個(gè)類實(shí)現(xiàn)了用戶登陸、修改密碼、注冊(cè)、用戶刪除的功能,其屬性和方法如下:</p><p>  private

26、 JPanel jp=new JPanel();//創(chuàng)建面板容器</p><p>  private JLabel[] jlArray={new JLabel("賬 號(hào)"),new JLabel("密 碼"),new JLabel(""),};//創(chuàng)建標(biāo)簽數(shù)組</p><p>  private JButton[] jbA

27、rray={new JButton("登錄"),new JButton("注冊(cè)"), new JButton("修改密碼"),new JButton("刪除用戶")};//創(chuàng)建按鈕數(shù)組</p><p>  private JTextField jtf=new JTextField();//填寫賬號(hào)的文本框</p><

28、;p>  private JPasswordField jpf=new JPasswordField();//填寫密碼的文本框</p><p>  public Login()//登陸界面</p><p>  public void clear()//清空輸入框的信息;并把輸入焦點(diǎn)到賬號(hào)框</p><p>  public void actionPerform

29、ed(ActionEvent e) //實(shí)現(xiàn)登陸窗體業(yè)務(wù)功能的方法</p><p>  public static void main(String []args)</p><p>  設(shè)計(jì)類MainFrame來實(shí)現(xiàn)主窗體的功能,其屬性和方法如下:</p><p>  private String uname=null;//當(dāng)前用戶的名字</p>&

30、lt;p>  private String perNameBefor=null;//編輯的時(shí)候之前的名字</p><p>  private String perGroupBefor=null;//編輯的時(shí)候修改之前的分組</p><p>  private boolean searchByName=true;//true則默認(rèn)為按姓名查找</p><

31、p>  private boolean isInsert=false;//是否為添加默認(rèn)為否</p><p>  Image image=Toolkit.getDefaultToolkit().getImage("img/txl.jpg");//得到圖標(biāo)對(duì)象</p><p>  Icon icon = new ImageIcon(image);</p&g

32、t;<p>  private JPanel jps=new JPanel();//界面上半部分的JPanel容器</p><p>  private JButton jba=new JButton("添加");</p><p>  private JButton jbs=new JButton("查找");</p>

33、<p>  private JTextField jtfs=new JTextField();//按給出信息查找聯(lián)系人信息</p><p>  private JRadioButton jrbxm=new JRadioButton("按姓名查找",true);//選擇查找方式的單選按鈕</p><p>  private JRadioButton jrbbh=

34、new JRadioButton("按編號(hào)查找");//選擇查找方式的單選按鈕</p><p>  private ButtonGroup bg=new ButtonGroup();//單選按鈕組</p><p>  private JPanel jpbr=new JPanel();//單選按鈕面板</p><p>  DefaultMu

35、tableTreeNode root= new DefaultMutableTreeNode(new NodeValue("聯(lián)系人",0));//界面左下的樹 創(chuàng)建樹模型 指定節(jié)點(diǎn)"聯(lián)系人"為根節(jié)點(diǎn)</p><p>  DefaultTreeModel dtm=new DefaultTreeModel(root);</p><p>  private

36、 JTree jtz=new JTree();//界面下半部分左邊的JTree </p><p>  private JScrollPane jspz=new JScrollPane(jtz);//JTree的滾動(dòng)條</p><p>  private DefaultTreeCellRenderer dtcr=new DefaultTreeCellRenderer();//樹節(jié)點(diǎn)的

37、繪制器</p><p>  private JPanel jpy=new JPanel();//界面下半部分右邊界面,布局管理器為卡片布局</p><p>  private JPanel jpyInfo=new JPanel();//右側(cè)顯示個(gè)人信息的面板</p><p>  //界面下半部分右邊的JPanel容器的個(gè)人信息欄目里的控件</p>

38、;<p>  private JLabel[] jlInfo={new JLabel("用戶編號(hào):"),new JLabel("姓名:"),</p><p>  new JLabel("性別:"),new JLabel("年齡:"),</p><p>  new JLabel("電話號(hào)碼

39、:"),new JLabel("Email:"),</p><p>  new JLabel("所屬組:"),new JLabel("更改照片:"),</p><p>  new JLabel("郵編:"),new JLabel("地址:"),</p><p&g

40、t;  new JLabel("添加相片")};</p><p>  private JButton[] jbInfo={new JButton("編輯"),new JButton("保存"),</p><p>  new JButton("刪除"),new JButton("瀏覽"),&l

41、t;/p><p>  new JButton("添加分組"),new JButton("刪除分組"),</p><p>  new JButton("瀏覽"),new JButton("上傳"),</p><p>  new JButton("刪除")};</p&g

42、t;<p>  //初始默認(rèn)的一些分組</p><p>  private String[] str={"朋友","同事","家庭","重要人士","其他"};</p><p>  private JComboBox jcb=new JComboBox(str);//分組下拉列

43、表控件</p><p>  private JLabel jlPhoto=new JLabel();//顯示圖像的JLabel控件</p><p>  private JTextField[] jtfInfo=new JTextField[10];</p><p>  private JTextField jtfPhoto=new JTextField();//添

44、加照片到相冊(cè)的路徑</p><p>  private JFileChooser jfcPic=new JFileChooser("f:\\");//上傳圖像的文件選擇器</p><p>  private JFileChooser jfcPho=new JFileChooser("f:\\");//上傳照片的文件選擇器</p>

45、<p><b>  //性別部分</b></p><p>  private JRadioButton jrbMale=new JRadioButton("男",true);</p><p>  private JRadioButton jrbFemale=new JRadioButton("女");</p&g

46、t;<p>  private ButtonGroup bgGender=new ButtonGroup();</p><p>  private JPanel jpGender=new JPanel();//單選按鈕面板</p><p>  private JPanel jpyview=new JPanel();//右側(cè)顯示多幅照片的面板</p><

47、;p>  private JScrollPane jspyview=new JScrollPane(jpyview);//滾動(dòng)條</p><p>  private JLabel jlDetail=new JLabel();//右側(cè)顯示一幅圖片的標(biāo)簽</p><p>  private JScrollPane jspydetail=new JScrollPane(jlDetail

48、);//顯示一幅圖片標(biāo)簽的滾動(dòng)條</p><p>  private JLabel jlNoPic=new JLabel("沒有照片");//沒有照片的顯示JLabel</p><p>  //圖片加載進(jìn)度條部分</p><p>  private JLabel jpProgress=new JLabel();//右側(cè)顯示圖片加載進(jìn)度的面板&l

49、t;/p><p>  private JLabel jlProgress=new JLabel("預(yù)覽圖片加載中.....");</p><p>  private JProgressBar jpb=new JProgressBar(JProgressBar.HORIZONTAL,0,100);</p><p>  //選中不同樹節(jié)點(diǎn)時(shí)的提示信息部分

50、</p><p>  private JLabel jlRoot=new JLabel(icon,JLabel.LEFT);</p><p>  private JLabel jlGroup=new JLabel();//分組節(jié)點(diǎn)的JLabel</p><p>  private CardLayout cl=new CardLayout();//創(chuàng)建卡片布局管理器&

51、lt;/p><p>  private JLabel[] jla=null;//照片緩沖數(shù)組</p><p>  private JSplitPane jspOuter=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);//上下分割的JSplitPane</p><p>  private JSplitPane jspIn

52、ner=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jspz,jpy);//下面右的JSplitPane</p><p>  //系統(tǒng)托盤部分</p><p>  private PopupMenu popup=new PopupMenu();</p><p>  private SystemTray tray

53、;//定義SystemTray成員變量</p><p>  private TrayIcon trayIcon;//定義TrayIcon成員變量</p><p>  private MenuItem exit=new MenuItem("退出程序");//定義菜單</p><p>  private MenuItem currently=new

54、 MenuItem("顯示當(dāng)前用戶");//定義菜單</p><p>  public MainFrame(String uname)//主類構(gòu)造器</p><p>  public void initJps()//界面上半部分的初始化</p><p>  public void initTree()//初始化樹</p><

55、p>  public void initJpy()//界面右邊為卡片布局的JPanel里一些控件的添加</p><p>  public void initInfo()//初始化信息界面</p><p>  public void initGroup()//初始化分組下拉列表</p><p>  public void initTray()//初始化系統(tǒng)托盤&

56、lt;/p><p>  public DefaultMutableTreeNode initPerNode(String person)//生成聯(lián)系人節(jié)點(diǎn)</p><p>  public void clearInfo()//清空信息面板</p><p>  public void setInfo(Vector<String> pInfo)//將信息向量設(shè)置

57、到信息面板中</p><p>  public void setPic(String pid)//設(shè)置個(gè)人圖像顯示</p><p>  public void setEditable(boolean Editable)//設(shè)置信息窗口是否可編輯</p><p>  public Vector<String> getInfo()//從信息面板得到用戶輸入的

58、信息</p><p>  public void monitorAddGroupButton()//監(jiān)聽添加分組按鈕</p><p>  public void addGroupNode(String group)//在樹上添加分組節(jié)點(diǎn)</p><p>  public void monitorDelGroupButton()//刪除分組的監(jiān)聽</p>

59、<p>  public void delGroupNode(String group)//刪除分組節(jié)點(diǎn)</p><p>  public void monitorDelButton()//監(jiān)聽刪除按鈕的方法</p><p>  public void monitorSaveButton()//監(jiān)聽保存按鈕的方法</p><p>  public voi

60、d monitorSearchButton()//監(jiān)聽查找按鈕的方法</p><p>  public void addPerNode(String personName,String group)//添加聯(lián)系人節(jié)點(diǎn)</p><p>  public boolean delPerNode(String personName,String group)//刪除聯(lián)系人節(jié)點(diǎn)</p>

61、<p>  public void monitorUploadButton()//監(jiān)聽上傳照片的方法</p><p>  public void addPhoNode(String photoPath)//在樹上添加照片節(jié)點(diǎn)</p><p>  public void delPhoNode(String phoName)//刪除照片節(jié)點(diǎn)</p><p>

62、  public void viewPic(final DefaultMutableTreeNode cdmtn) //圖片預(yù)覽</p><p>  public void detailPic(String pname)//顯示照片明細(xì)</p><p>  public void itemStateChanged(ItemEvent e)//觸發(fā)itemStateChanged方法<

63、/p><p>  public void actionPerformed(ActionEvent e)//用于接收操作事件的偵聽器接口</p><p>  public static void main(String []args)</p><p><b>  輔助類的設(shè)計(jì)如下:</b></p><p>  創(chuàng)建樹節(jié)點(diǎn)用到的

64、參數(shù)對(duì)象NodeValue類,classCode屬性可以知道當(dāng)前選中的是哪一類節(jié)點(diǎn),如根節(jié)點(diǎn)、分組節(jié)點(diǎn)、也可以得到節(jié)點(diǎn)的名稱,用的是value屬性,具體如下:</p><p>  class NodeValue </p><p>  {

65、 </p><p>  String value;//節(jié)點(diǎn)字符串名稱 </p><p>  int classCode;// 0 根 1 分組 2 聯(lián)系人 3 照片

66、 </p><p>  JLabel[] jla;//緩存圖片 </p><p>  public NodeValue(String value,int class

67、Code) </p><p>  {//構(gòu)造器 </p><p>  this.value=value; </p><p&g

68、t;  this.classCode=classCode; </p><p>  } </p><p>  public String getValue()

69、 </p><p>  {//得到節(jié)點(diǎn)字符串名稱 </p><p>  return this.value; </p><p> 

70、 } </p><p>  public void setValue(String value) </p><p>  {//節(jié)點(diǎn)名稱發(fā)生變化時(shí)修改節(jié)點(diǎn)名

71、 </p><p>  this.value=value; </p><p>  } </p><p>

72、  @Override </p><p>  public String toString() </p><p>  {//重寫toString方法

73、 </p><p>  return value; </p><p>  } </p><p>

74、;  } </p><p>  自定義邊框類,類中paintBorder方法主要實(shí)現(xiàn)照片預(yù)覽時(shí)鼠標(biāo)移動(dòng)到照片上顯示白色邊框,具體如下:</p><p>  class MyBorder extends AbstractBorder

75、 </p><p>  { </p><p>  public void paintBorder(Component c, </p><p>  Graph

76、ics g, </p><p>  int x, </p><p>  int y, </p><p

77、>  int width, </p><p>  int height) </p><p>  {

78、 </p><p>  g.setColor(Color.white);//設(shè)置邊框顏色為白色 </p><p>  g.drawRect(x,y,width-1,height-1);//畫出邊框 </p><p>

79、;  g.drawRect(x+1,y+1,width-3,height-3);//在畫出邊框里再畫一個(gè)邊框 </p><p>  } </p><p><b>  }</b></p&

80、gt;<p><b>  3.4 數(shù)據(jù)庫設(shè)計(jì)</b></p><p>  通訊簿系統(tǒng)需要連接后臺(tái)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)的存儲(chǔ)。這個(gè)通訊簿系統(tǒng)應(yīng)用的數(shù)據(jù)庫為Access。</p><p>  數(shù)據(jù)庫中有3個(gè)表,分別用來存儲(chǔ)用戶名密碼、聯(lián)系人信息和聯(lián)系人相冊(cè)。</p><p>  表user用來存儲(chǔ)用戶名和密碼,具體如下:</p>

81、<p>  表3.4.1 用戶表</p><p>  表user E-R 圖如下:</p><p>  圖3.4.1 用戶表E-R圖</p><p>  表fri用來存儲(chǔ)聯(lián)系人的相關(guān)信息,具體如下:</p><p>  表3.4.2 聯(lián)系人信息表</p><p>  表fri E-R 圖如下:</p

82、><p>  圖3.4.2 聯(lián)系人表E-R圖</p><p>  表photo用來存儲(chǔ)聯(lián)系人的相冊(cè),具體如下:</p><p>  表3.4.2 聯(lián)系人照片表</p><p>  該表E-R圖如下圖:</p><p>  圖3.4.3 聯(lián)系人相冊(cè)表E-R圖</p><p>  實(shí)體間的簡單關(guān)系如下圖

83、:</p><p>  圖3.4.4 實(shí)體間簡單關(guān)系</p><p>  創(chuàng)建完數(shù)據(jù)表后,還要建立表間關(guān)系。其中包括一對(duì)多和多對(duì)一的關(guān)系,數(shù)據(jù)庫的表間關(guān)系具體如下圖:</p><p>  圖3.4.5 表間關(guān)系</p><p><b>  四、程序?qū)崿F(xiàn)</b></p><p><b> 

84、 4.1 程序流程圖</b></p><p>  關(guān)于聯(lián)系人的添加,流程圖如下:</p><p>  圖4.1.1 聯(lián)系人添加</p><p>  其中未顯示完整行(自上而下,自左向右)為:</p><p>  pInfo.get(9).equals("")||pInfo.get(9)==null</p&

85、gt;<p>  psInsert=con.prepareStatement("insert into fri(pid,pname,pgender,page,pnumber, pemail,pgroup,ppostalcode,padress,uid) values(?,?,?,?,?,?,?,?,?,?)")</p><p>  psInsert=con.prepareStat

86、ement("insert into fri(pid,pname,pgender,page,pnumber, pemail,pgroup,ppostalcode,padress,uid,pphoto) values(?,?,?,?,?,?,?,?,?,?,?)" )</p><p>  psInsert.setString(i,pInfo.get(i))</p><p>

87、;  關(guān)于聯(lián)系人的修改,流程圖如下:</p><p>  圖4.1.2 聯(lián)系人修改</p><p>  其中未顯示完整行(自上而下,自左向右)為:</p><p>  pInfo.get(9).equals("")||pInfo.get(9)==null</p><p>  psInsert=con.prepareStat

88、ement("update fri set pname=?,pgender=?,page=?,pnumber=?,pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=? where pid='"+pInfo.get(0).trim()+"'")</p><p>  psInsert=con.prepareStateme

89、nt("update fri set pname=?,pgender=?,page=?,pnumber=?,pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid='"+pInfo.get(0).trim()+"'");</p><p>  File f=new File(pInf

90、o.get(9)); </p><p>  byte[] b=new byte[(int)f.length()];</p><p>  FileInputStream fin=new FileInputStream(f);</p><p>  fin.read(b);fin.close();</p><p>  psInsert.setByt

91、es(10,b);psInsert.setString(i,pInfo.get(i))</p><p>  關(guān)于聯(lián)系人的刪除,流程圖如下:</p><p>  圖4.1.3 聯(lián)系人刪除</p><p>  其中未顯示完整行(自上而下,自左向右)為:</p><p>  String personName=jtfInfo[1].getText(

92、).trim();</p><p>  String personGroup=(String)jcb.getSelectedItem();</p><p>  String pid=jtfInfo[0].getText().trim();</p><p>  int index=JOptionPane.showConfirmDialog(this,"是否刪

93、除?y/n","確認(rèn)對(duì)話框",</p><p>  JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);</p><p>  boolean b=this.delPerNode(personName,personGroup);</p><p>  String sqla=&qu

94、ot;delete from photo where pid='"+pid+"'";</p><p>  String sqlb="delete from fri where pid='"+pid+"'";</p><p>  DButil.update(sqla);</p>

95、<p>  int i=DButil.update(sqlb);/</p><p>  JOptionPane.showMessageDialog(this,"刪除成功","刪除",</p><p>  JOptionPane.INFORMATION_MESSAGE);</p><p>  this.clearIn

96、fo();</p><p>  關(guān)于聯(lián)系人的查找,流程圖如下:</p><p>  圖4.1.4 聯(lián)系人查找</p><p>  其中未顯示完整行(自上而下,自左向右)為:</p><p>  String name=jtfs.getText().trim();</p><p>  String sql="&

97、quot;;</p><p>  JOptionPane.showMessageDialog(this,"請(qǐng)輸入查找條件","錯(cuò)誤",JOptionPane.WARNING_MESSAGE);</p><p>  sql="select pid,pname,pgender,page,pnumber,pemail,pgroup,pposta

98、lcode, padress from fri where uid='"+uname+"'and pname='"+name+"'";</p><p>  this.setInfo(DButil.getPerInfo(sql));</p><p>  sql="select pid,pname,pg

99、ender,page,pnumber,pemail,pgroup,ppostalcode, padress from fri where uid='"+uname+"'and pid='"+name+"'";</p><p>  this.setInfo(DButil.getPerInfo(sql));;</p>&l

100、t;p>  4.2 關(guān)鍵算法與技術(shù)實(shí)現(xiàn)</p><p>  這個(gè)通訊錄的最主要功能就是用戶的注冊(cè)、登陸、修改密碼、刪除以及聯(lián)系人和聯(lián)系人信息的增、刪、改、查。下面是這些主要功能的算法代碼:</p><p>  1.用戶的注冊(cè)、登陸、修改密碼、刪除功能的實(shí)現(xiàn):</p><p>  public void actionPerformed(ActionEvent e

101、)//實(shí)現(xiàn)登陸窗體業(yè)務(wù)功能的方法</p><p><b>  {</b></p><p><b>  //得到賬號(hào)和密碼</b></p><p>  String user=jtf.getText().trim();</p><p>  String pwd=String.valueOf(jpf.g

102、etPassword());</p><p>  String sql="";//聲明SQL語句</p><p>  if(e.getSource()==jtf)</p><p>  {//事件源為文本框 切換輸入焦點(diǎn)到密碼框</p><p>  jpf.requestFocus();</p><p&g

103、t;<b>  }</b></p><p>  else if(e.getSource()==jbArray[0]||e.getSource()==jpf)</p><p>  {//判斷賬號(hào)和密碼是否匹配 查詢數(shù)據(jù)庫</p><p>  if(DButil.check(user,pwd))</p><p><

104、;b>  {//登陸成功</b></p><p>  MainFrame mf=new MainFrame(jtf.getText()); //登陸進(jìn)主窗體</p><p>  this.dispose();//釋放登陸窗體</p><p><b>  }</b></p><p><b&

105、gt;  else</b></p><p><b>  {//登陸失敗</b></p><p>  jlArray[2].setText("賬號(hào)或密碼錯(cuò)誤");</p><p>  this.clear();//清空輸入窗口</p><p><b>  }</b>&l

106、t;/p><p><b>  }</b></p><p>  else if(e.getSource()==jbArray[1])</p><p>  {//事件源為注冊(cè)按鈕</p><p>  if(user.equals("")||pwd.equals(""))</p>

107、<p>  {//如果注冊(cè)的賬號(hào)為空或者密碼為空</p><p>  jlArray[2].setText("賬號(hào)和密碼都不能為空");</p><p>  this.clear();//清空輸入文本框</p><p><b>  }</b></p><p><b>  els

108、e</b></p><p><b>  {</b></p><p>  sql="select uid from user where uid='"+user+"'";</p><p>  if(DButil.isExist(sql))</p><p>

109、<b>  {//賬號(hào)已經(jīng)存在</b></p><p>  jlArray[2].setText("賬號(hào)已存在,請(qǐng)重試");</p><p>  this.clear();//清空輸入文本框</p><p><b>  }</b></p><p><b>  else&

110、lt;/b></p><p><b>  {</b></p><p>  sql="insert into user values('"+user+"','"+pwd+"')";</p><p>  if(DButil.update(sq

111、l)>0)</p><p><b>  {//注冊(cè)成功</b></p><p>  jlArray[2].setText("注冊(cè)成功,請(qǐng)登陸");</p><p><b>  }</b></p><p><b>  }</b></p&g

112、t;<p><b>  }</b></p><p><b>  }</b></p><p>  else if(e.getSource()==jbArray[2])//修改密碼的監(jiān)聽</p><p><b>  {</b></p><p>  //先判斷

113、是否輸入賬號(hào)和密碼</p><p>  if(user.equals("")||pwd.equals(""))</p><p><b>  {</b></p><p>  jlArray[2].setText("請(qǐng)先輸入賬號(hào)、密碼");</p><p>  th

114、is.clear();//清空輸入文本框</p><p><b>  }</b></p><p>  //判斷是否輸入了正確的賬號(hào)和密碼</p><p>  else if(DButil.check(user,pwd))</p><p><b>  {</b></p><p>

115、;  //正確的賬 號(hào)和密碼</p><p>  String password=JOptionPane.showInputDialog(this,"修改密碼:","請(qǐng)輸入新密碼",</p><p>  JOptionPane.PLAIN_MESSAGE);</p><p>  //得到新的密碼為空</p>&

116、lt;p>  if(password==null||password.equals(""))</p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(this,"密碼不能為空","錯(cuò)誤",</p><p>  JOp

117、tionPane.WARNING_MESSAGE);</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {//密碼不為空</b></p><p>  sql="update user s

118、et pwd='"+password+"' where uid='"+user+"'";//更新密碼的SQL</p><p>  if(DButil.update(sql)>0)</p><p><b>  {//密碼修改成功</b></p><p>  t

119、his.clear();//清空輸入文本框</p><p>  jlArray[2].setText("修改成功,請(qǐng)用新密碼重新登陸");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }&

120、lt;/b></p><p><b>  else</b></p><p><b>  {</b></p><p>  JOptionPane.showMessageDialog(this,"賬號(hào)或密碼錯(cuò)誤","錯(cuò)誤",</p><p>  JOp

121、tionPane.WARNING_MESSAGE);</p><p>  this.clear();//清空輸入文本框</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(e.getSource()==jbArray[3])//刪除

122、用戶</p><p><b>  {</b></p><p>  if(DButil.check(user,pwd))</p><p>  {//密碼和用戶都對(duì)的情況</p><p>  int yn=JOptionPane.showConfirmDialog(this,"是否刪除?",&quo

123、t;刪除",</p><p>  JOptionPane.YES_NO_OPTION);</p><p>  if(yn==JOptionPane.YES_OPTION)</p><p><b>  {</b></p><p>  int count=DButil.delUser(user);</p>

溫馨提示

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

評(píng)論

0/150

提交評(píng)論