版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- jsp通訊簿管理系統(tǒng)-課程設(shè)計(jì)
- 基于JSP的通訊簿管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- java課程設(shè)計(jì)
- java課程設(shè)計(jì)----課程設(shè)計(jì)報(bào)告
- 成績記錄簿課程設(shè)計(jì)
- java課程設(shè)計(jì)--java面向?qū)ο蟪绦蛟O(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)--- 成績記錄簿
- 課程設(shè)計(jì)---留言簿系統(tǒng)設(shè)計(jì)
- java課程設(shè)計(jì)---java程序設(shè)計(jì)
- java課程設(shè)計(jì)--java程序設(shè)計(jì)
- web編程課程設(shè)計(jì)報(bào)告--留言簿課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--日歷
- java課程設(shè)計(jì)模板
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告
- java掃雷課程設(shè)計(jì)
- java 課程設(shè)計(jì) 掃雷
- java課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)2048
- java課程設(shè)計(jì)報(bào)告-
評(píng)論
0/150
提交評(píng)論