時間:2017年12月
階段:大二上學期
背景:JAVA程序設計基礎課設
名稱:瓜果蔬菜這裏查小系統(未刪減版)
實現功能點
①用戶註冊:檢測賬號的唯一性,並插入數據庫
②用戶登入:防數據庫注入問題
③遊客登入:權限限制,文字提示註冊,以增加本系統用戶量
④找回密碼:通過密匙找回,雙重保險
⑤身份與權限:遊客,會員,管理員,三級身份
⑥內容搜索:會員專屬,可尋找喜歡的瓜果蔬菜圖片和信息
⑦用戶管理:管理員可通過表格查詢用戶信息及刪除更改用戶信息
⑧信息修改:用戶可修改基本信息和安全信息
⑨界面切換:更多人性化的設計
⑩界面美化:半透明效果、居中顯示、置頂顯示等
項目測試
1、開始界面,用戶可以選擇遊客登入、用戶登入或者註冊登入來進入系統
2、開始界面打開時,數據庫的連接也在後臺在進行中,若連接失敗則會彈出連接失敗的對話框,點擊確認後,此程序將會被關閉。因爲程序必須使用數據庫,所以這樣設置。
3、再次運行程序,點擊“註冊加入我們”,會在開始面板的中間彈出註冊面板,註冊面板是半透明效果,且會一直至於開始面板的頂端,此時如果不點擊取消按鍵,其開始面板是不可被操作的,當點擊取消按鍵後,註冊面板會消失,開始面板會變成可操作面板,註冊面板重置按鍵可以把輸入文本框的內容全部清空,確定按鍵則是確定註冊。
4、註冊成功後自動彈出登入頁面,登入頁面的基本樣式和註冊頁面樣式相同,透明和按鍵效果等方面,“?”按鍵是找回密碼用的,在後面有詳細介紹。
5、註冊成功後數據庫裏有添加一行用戶名爲155231的字段
6、再次註冊相同賬號則會彈出賬號名是不可重複註冊的消息框
7、檢驗輸入文本框內容是否爲空,空則彈出賬號和密碼不能爲空消息框提示,不可進行登入操作
8、點擊開始界面的做一名小遊客安按鈕,進入遊客界面,且關閉開始界面,遊客不可以更改個人信息,不可以使用搜索功能,只能左右瀏覽,並且可見多處都有提示要進行註冊的文字。
9、瀏覽至最後一份或者第一份時會有相應提示
10、點擊改改自己,彈出一個半透明界面,可以更改自己的普通信息(個人資料)和安全信息(密碼和密匙),如果普通信息留白則會保持原來的信息,不會被空值覆蓋掉,當更改成功後則會跳到登入界面,需要再次進行登入操作,達到更高安全級別。
設計心得
界面的美觀將必然會提高用戶的使用積極性,半透明效果切實令人有好感,但這視乎還遠遠不夠。書到用時方知少,Java能成爲現今最流行的編程語言,魅力如此之大,其內容肯定不簡,課堂重要,但自學更重要,用心了才能讓自己的程序行雲流水少有bug。
一個人,一句句代碼,慢慢的敲,許多天…..基本框架的實現,頁面內容深入實現,終於滿足暫時想要求,而它永遠不能稱之爲成品,人的慾望如果滿足了,那等待他的將只有退步,它一直會是我的半成品。好的程序不會是幾天就可以完成的,需要的是時間,慢慢的琢磨,慢慢的改進。
學習。
工程代碼
1 package test01; 2 import java.awt.BorderLayout; 3 import java.awt.Color; 4 import java.awt.Dimension; 5 import java.awt.Font; 6 import java.awt.GridLayout; 7 import java.awt.event.ActionEvent; 8 import java.awt.event.ActionListener; 9 import java.io.IOException; 10 import java.io.PrintWriter; 11 import java.io.StringWriter; 12 import java.sql.Connection; 13 import java.sql.DriverManager; 14 import java.sql.ResultSet; 15 import java.sql.SQLException; 16 import java.sql.Statement; 17 import javax.swing.ImageIcon; 18 import javax.swing.JButton; 19 import javax.swing.JComboBox; 20 import javax.swing.JFrame; 21 import javax.swing.JLabel; 22 import javax.swing.JOptionPane; 23 import javax.swing.JPanel; 24 import javax.swing.JPasswordField; 25 import javax.swing.JScrollPane; 26 import javax.swing.JSplitPane; 27 import javax.swing.JTable; 28 import javax.swing.JTextArea; 29 import javax.swing.JTextField; 30 class Start{ 31 private JFrame jfde; 32 private JFrame jfbu1; 33 private JFrame jfbu2; 34 private JFrame jfmain; 35 private JFrame jfbu3g; 36 private JTextField jtbu1user; 37 private JPasswordField jtbu1pasw; 38 private JTextField jtbu2user; 39 private JPasswordField jtbu2pasw; 40 private JPasswordField jtbu2pasw2; 41 private JTextField jtbu2nam; 42 private JTextField jtbu2age; 43 private JComboBox jcbu2sex; 44 private boolean boo=false; 45 Connection ct=null; 46 Statement st=null; 47 private String dbuser; 48 public Start(){ 49 jfde=new JFrame("瓜果蔬菜這裏查登入"); 50 jfde.setSize(600, 400); 51 jfde.setResizable(false);//不可縮放 52 jfde.setLocationRelativeTo(null);//居中顯示 53 JLabel jlde=new JLabel(new ImageIcon("picture/jfde.jpg")); 54 jlde.setBounds(0, 0,jfde.getWidth(), jfde.getWidth()); 55 JPanel jpde=new JPanel(); 56 JButton bu1=new JButton("已有賬號登入"); 57 JButton bu2=new JButton("註冊加入我們"); 58 JButton bu3=new JButton("做一名小遊客"); 59 jpde.add(bu3); 60 jpde.add(bu1); 61 jpde.add(bu2); 62 jfde.add(jpde,"South"); 63 jfde.add(jlde); 64 jfde.setVisible(true); 65 new Db();//數據庫加載 66 bu1.addActionListener(new Bu1()); 67 bu2.addActionListener(new Bu2()); 68 bu3.addActionListener(new Bu3());} 69 class Bu1 implements ActionListener{ 70 private ActionEvent e; 71 public Bu1(int x){actionPerformed(e);} 72 public Bu1(){}; 73 @Override 74 public void actionPerformed(ActionEvent e) { 75 jfde.setEnabled(false);//設置不可執行窗口setOpacity(0.8f); 76 jfbu1=new JFrame(); 77 jfbu1.setUndecorated(true); 78 jfbu1.setOpacity(0.8f); 79 JPanel jpbu1=new JPanel(); 80 jpbu1.setBackground(Color.green); 81 jpbu1.setLayout(new GridLayout(4,1));//縱,橫 82 JPanel jpbu5=new JPanel(); 83 JPanel jpbu3=new JPanel();//密碼 84 JPanel jpbu6=new JPanel(); 85 JPanel jpbu4=new JPanel();//按鍵 86 JPanel JPbu7=new JPanel(); 87 JPbu7.add(new JLabel("登入")); 88 JLabel jlbu1user=new JLabel("賬號: "); 89 jtbu1user=new JTextField(12); 90 JLabel jlbu1pasw=new JLabel("密碼: "); 91 jtbu1pasw=new JPasswordField(12); 92 JButton jbbu1hui=new JButton("?");//找回密碼 93 JButton jbbu1hxx=new JButton(" "); 94 jbbu1hxx.setEnabled(false); 95 jpbu5.add(jlbu1user); 96 jpbu5.add(jtbu1user); 97 jpbu5.add(jbbu1hxx); 98 jpbu3.add(jlbu1pasw); 99 jpbu3.add(jtbu1pasw); 100 jpbu3.add(jbbu1hui); 101 jpbu1.add(JPbu7); 102 jpbu1.add(jpbu5); 103 jpbu1.add(jpbu3); 104 jpbu1.add(jpbu6); 105 JButton jbbu1sub=new JButton("確定"); 106 JButton jbbu1res=new JButton("重置"); 107 JButton jbbu1bac=new JButton("取消"); 108 jpbu4.add(jbbu1res); 109 jpbu4.add(jbbu1sub); 110 jpbu4.add(jbbu1bac); 111 jfbu1.add(jpbu1,"Center"); 112 jfbu1.add(jpbu4, "South"); 113 jfbu1.setResizable(false);//不可縮放 114 jfbu1.setSize(300, 200); 115 jfbu1.setLocationRelativeTo(jfde);//設置基於jfde窗體居中 116 jfbu1.setAlwaysOnTop(true);//窗體頂端顯示 117 jfbu1.setVisible(true); 118 jbbu1res.addActionListener(new Jbbu1res()); 119 jbbu1bac.addActionListener(new Jbbu1bac()); 120 jbbu1sub.addActionListener(new Jbbu1sub()); 121 jbbu1hui.addActionListener(new Jbbu1hui()); 122 }} 123 class Bu2 implements ActionListener{ 124 private ActionEvent e; 125 public Bu2(){}; 126 public Bu2(int i){actionPerformed(e);} 127 public void actionPerformed(ActionEvent e){ 128 jfde.setEnabled(false);//設置不可執行窗口setOpacity(0.8f); 129 jfbu2=new JFrame(); 130 jfbu2.setUndecorated(true); 131 jfbu2.setOpacity(0.8f); 132 JPanel jpbu1=new JPanel(); 133 jpbu1.setBackground(Color.green); 134 jpbu1.setLayout(new GridLayout(7,1));//縱,橫 135 JPanel jpbu2=new JPanel(); 136 JPanel jpbu5=new JPanel(); 137 JPanel jpbu3=new JPanel(); 138 JPanel jpbu6=new JPanel(); 139 JPanel jpbu4=new JPanel(); 140 JPanel jpbu7=new JPanel(); 141 JPanel jpbu8=new JPanel(); 142 jpbu8.add(new JLabel("註冊")); 143 jpbu1.add(jpbu8); 144 JLabel jlbu2user=new JLabel("賬號: "); 145 jtbu2user=new JTextField(12); 146 JLabel jlbu2pasw=new JLabel("密碼: "); 147 jtbu2pasw=new JPasswordField(12); 148 JLabel jlbu2pasw2=new JLabel("確認密碼: "); 149 jtbu2pasw2=new JPasswordField(12); 150 JLabel jlbu2nam=new JLabel("暱稱: "); 151 jtbu2nam=new JTextField(12); 152 JLabel jlbu2sex=new JLabel("性別: "); 153 String str[]={"","男","女"}; 154 jcbu2sex=new JComboBox(str); 155 //jcbu2sex.setEditable(true); 156 JLabel jlbu2age=new JLabel("年齡: "); 157 jtbu2age=new JTextField(3); 158 jpbu2.add(jlbu2user); 159 jpbu2.add(jtbu2user); 160 jpbu3.add(jlbu2pasw); 161 jpbu3.add(jtbu2pasw); 162 jpbu3.add(jlbu2pasw2); 163 jpbu3.add(jtbu2pasw2); 164 jpbu4.add(jlbu2nam); 165 jpbu4.add(jtbu2nam); 166 jpbu5.add(jlbu2sex); 167 jpbu5.add(jcbu2sex); 168 jpbu6.add(jlbu2age); 169 jpbu6.add(jtbu2age); 170 jpbu1.add(jpbu2); 171 jpbu1.add(jpbu3); 172 jpbu1.add(jpbu4); 173 jpbu1.add(jpbu5); 174 jpbu1.add(jpbu6); 175 JButton jbbu2sub=new JButton("確定"); 176 JButton jbbu2res=new JButton("重置"); 177 JButton jbbu2bac=new JButton("取消"); 178 jpbu7.add(jbbu2res); 179 jpbu7.add(jbbu2sub); 180 jpbu7.add(jbbu2bac); 181 jfbu2.add(jpbu1,"North"); 182 jfbu2.add(jpbu7, "South"); 183 jfbu2.setResizable(false);//不可縮放 184 jfbu2.setSize(400, 250); 185 jfbu2.setLocationRelativeTo(jfde);//設置基於jfde窗體居中 186 jfbu2.setAlwaysOnTop(true);//窗體頂端顯示 187 jfbu2.setVisible(true); 188 jbbu2res.addActionListener(new Jbbu2res()); 189 jbbu2bac.addActionListener(new Jbbu2bac()); 190 jbbu2sub.addActionListener(new Jbbu2sub());} } 191 class Bu3 implements ActionListener{ 192 private int nut=0; 193 private int dbzong=0; 194 private ActionEvent e; 195 public Bu3(){}; 196 public Bu3(int i){actionPerformed(e);} 197 @Override 198 public void actionPerformed(ActionEvent e) { //登入主******************************** 199 String usnc = null; 200 String ussex=null; 201 int usage=0; 202 String usqm=null; 203 String ussf=null; 204 if(boo==true){ 205 boo=false; 206 }else{dbuser="11768";} 207 jfde.dispose(); 208 try { 209 ResultSet re=st.executeQuery("select *from t_userx where 用戶名='"+dbuser+"'"); 210 if(re.next()){ 211 usnc=re.getString("暱稱"); 212 ussex=re.getString("性別"); 213 usage=re.getInt("年齡"); 214 usqm=re.getString("簽名"); 215 ussf=re.getString("身份"); 216 }re.close();//關閉 217 } catch (SQLException e1) { 218 e1.printStackTrace(); 219 } 220 jfmain=new JFrame("瓜果蔬菜這裏查"); 221 jfmain.setExtendedState(JFrame.MAXIMIZED_BOTH); 222 JSplitPane jspouter=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true); 223 JSplitPane jspinner=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); 224 JPanel jp1=new JPanel(); 225 jp1.setLayout(new GridLayout(7,1));//縱,橫 226 JPanel jpim=new JPanel(); 227 JButton jb1=new JButton(new ImageIcon("picture/jfmain_user.jpg")); 228 jpim.add(jb1); 229 jb1.setBackground(Color.blue); 230 JLabel jl1=new JLabel("^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^"); 231 jp1.add(jl1); 232 jp1.add(jpim); 233 JPanel jpusem=new JPanel(); 234 jpusem.setLayout(new GridLayout(4,1)); 235 JLabel jln1=new JLabel(" "+usnc.trim()); 236 jln1.setFont(new Font("華文行楷",Font.BOLD,24)); 237 JLabel jln2=new JLabel("賬 號:"+dbuser.trim()); 238 JLabel jln3=new JLabel("身 份:"+ussf.trim()); 239 JLabel jln4=new JLabel("年 齡:"+usage); 240 JLabel jln5=new JLabel("性 別:"+ussex.trim()); 241 JLabel jln6=new JLabel("籤 名:"+usqm.trim()); 242 JPanel jpjsem=new JPanel(); 243 JPanel jpj=new JPanel(); 244 jpjsem.setLayout(new GridLayout(4,1)); 245 jpjsem.add(jln5); 246 jpjsem.add(jln6); 247 jpusem.add(jln1); 248 jpusem.add(jln2); 249 jpusem.add(jln3); 250 jpusem.add(jln4); 251 jp1.add(jpusem); 252 jp1.add(jpjsem); 253 JPanel jpys=new JPanel(); 254 if(ussf.trim().equals("管理員")){ 255 JPanel jpzk=new JPanel(); 256 String[][] struse=new String[100][7]; 257 String []names={"用戶名","密碼","暱稱","年齡","性別","身份","簽名"}; 258 int i=0,j=0,x=0; 259 try { 260 ResultSet regl=st.executeQuery("select *from t_userx"); 261 while(regl.next()){ 262 if(x==0){x++;continue;} 263 struse[i][j]=regl.getString("用戶名");j++; 264 struse[i][j]=regl.getString("密碼");j++; 265 struse[i][j]=regl.getString("暱稱");j++; 266 struse[i][j]=String.valueOf(regl.getInt("年齡"));j++; 267 struse[i][j]=regl.getString("性別");j++; 268 struse[i][j]=regl.getString("身份");j++; 269 struse[i][j]=regl.getString("簽名");j++;i++;j=0;} 270 i=0;j=0; 271 x=0; 272 regl.close();//關閉 273 } catch (SQLException e1) { 274 e1.printStackTrace();} 275 JTable table=new JTable(struse,names); 276 table.setPreferredScrollableViewportSize(new Dimension(1000,900)); 277 JScrollPane scll=new JScrollPane(table); 278 jpzk.add(scll); 279 JButton jbsc=new JButton("刪除用戶"); 280 jpys.add(jpzk); 281 jpys.add(jbsc); 282 jbsc.addActionListener(new ActionListener(){ 283 public void actionPerformed(ActionEvent e) { 284 String inxx=JOptionPane.showInputDialog(null,"請輸入需要刪除的用戶名:","刪除用戶",JOptionPane.QUESTION_MESSAGE); 285 if(inxx!=null&&Integer.parseInt(inxx)!=1){ 286 try { 287 ResultSet re = st.executeQuery("select *from t_userx where 用戶名='"+inxx+"'"); 288 if(!re.next()){ 289 JOptionPane.showMessageDialog(null,"查找失敗,請重新輸入"); 290 }else{ 291 try { 292 int yongh=st.executeUpdate("delete from t_userx where 用戶名='"+inxx+"'"); 293 if(yongh==1){JOptionPane.showMessageDialog(null, "刪除成功,再次進入此頁將更新表格");} 294 } catch (SQLException e1) { 295 e1.printStackTrace(); 296 }} 297 } catch (SQLException e1) { 298 e1.printStackTrace();}}}});}else{ 299 jpys.setLayout(new BorderLayout()); 300 301 JPanel jpss=new JPanel(); 302 jpss.setLayout(new GridLayout(3,1)); 303 JPanel jpss0=new JPanel(); 304 JLabel jlss=new JLabel("搜索想要的 (遊客無搜索功能,快加入我們吧) :"); 305 JButton jbss=new JButton("搜索"); 306 JTextField jtss=new JTextField(12); 307 jpss0.add(jlss); 308 jpss0.add(jtss); 309 jpss0.add(jbss); 310 jpss.add(jpss0); 311 JLabel jlzk=new JLabel("-----添加、收藏等更多功能,趕緊註冊上車-----"); 312 JLabel jlzk2=new JLabel(""); 313 jpss.add(jlzk); 314 jpss.add(jlzk2); 315 jpys.add(jpss,"North"); 316 JPanel jpnr=new JPanel(); 317 JLabel jlim=new JLabel(new ImageIcon("picture/0.jpg")); 318 jlim.setBounds(0, 0,jlim.getWidth(), jlim.getWidth()); 319 jpnr.add(jlim); 320 JTextArea jta=new JTextArea("信息:\n\n",20,20); 321 jta.setEditable(false); 322 jta.setLineWrap(true); 323 JScrollPane jsp=new JScrollPane(jta);//滾動條 324 jpnr.add(jta); 325 jpys.add(jpnr,"Center"); 326 JPanel jpbt=new JPanel(); 327 JButton jbsan=new JButton("上一份"); 328 JButton jbxia=new JButton("下一份"); 329 if(ussf.trim().equals("會員")){ 330 jlss.setText(" 在這裏找找自己想要的: "); 331 jlzk.setText("-----歡迎來到這美妙的瓜果蔬菜世界-----"); 332 JPanel jpzk1=new JPanel(); 333 JPanel jpzk2=new JPanel(); 334 JPanel jpgai=new JPanel(); 335 JPanel jpjg=new JPanel(); 336 JButton jbbu3g=new JButton("改改自己"); 337 JButton jbbu3d=new JButton("切換賬號"); 338 jp1.add(jpzk1); 339 jp1.add(jpzk2); 340 jpgai.add(jbbu3g); 341 jpgai.add(jbbu3d); 342 jpjg.add(jbbu3d); 343 jpjg.add(jbbu3g); 344 jp1.add(jpjg); 345 JButton jbsc=new JButton("收藏"); 346 jpbt.add(jbsc); 347 jpbt.add(new JLabel(" ")); 348 jpbt.add(new JLabel(" ")); 349 jpbt.add(jbsan); 350 jpbt.add(new JLabel(" ")); 351 jpbt.add(new JLabel(" ")); 352 jpbt.add(new JLabel(" ")); 353 jpbt.add(jbxia); 354 jpbt.add(new JLabel(" ")); 355 jpbt.add(new JLabel(" ")); 356 JButton jbtj=new JButton("添加"); 357 jpbt.add(jbtj); 358 jbbu3g.addActionListener(new Jbbu3g()); 359 jbbu3d.addActionListener(new Jbbu3d()); 360 jbss.addActionListener(new ActionListener(){ 361 @Override 362 public void actionPerformed(ActionEvent e) { 363 if("".equals(jtss.getText())) JOptionPane.showMessageDialog(null, "搜索編號不可爲空"); 364 try { 365 ResultSet rsss = st.executeQuery("select *from t_fruit1 where 序號="+jtss.getText().trim()); 366 if(rsss.next()){ 367 jlzk2.setText(" 唯一編號:"+rsss.getString("序號").trim()+" 名稱:"+rsss.getString("名稱").trim()); 368 jlim.setIcon(new ImageIcon("picture/"+rsss.getString("文件路徑").trim())); 369 jta.setText("信息:\n\n "+rsss.getString("信息").trim()); 370 }else{ 371 JOptionPane.showMessageDialog(null,"查找失敗,請重新輸入"); 372 } 373 } catch (SQLException e1) { 374 // TODO 自動生成的 catch 塊 375 e1.printStackTrace();} }}); 376 }else{ 377 JButton jbbu3j=new JButton("加入我們"); 378 jpj.add(jbbu3j);//加入我們 379 jp1.add(jpj); 380 jbbu3j.addActionListener(new Jbbu3j());//註冊賬號 381 382 jpbt.add(jbsan); 383 jpbt.add(new JLabel(" ")); 384 jpbt.add(new JLabel(" ")); 385 jpbt.add(new JLabel(" ")); 386 jpbt.add(jbxia); 387 } 388 jpys.add(jpbt,"South"); 389 390 jbxia.addActionListener(new ActionListener(){ 391 392 @Override 393 public void actionPerformed(ActionEvent e) { 394 nut++; 395 try { 396 ResultSet recoun=st.executeQuery("select count(序號)conu from t_fruit1"); 397 if(recoun.next()){dbzong=recoun.getInt("conu");} 398 399 if(nut==1&&nut<=dbzong){ 400 ResultSet rsde1 = st.executeQuery("select top 1 *from t_fruit1"); 401 402 if(rsde1.next()){ 403 jlzk2.setText(" 唯一編號:"+rsde1.getString("序號").trim()+" 名稱:"+rsde1.getString("名稱").trim()); 404 jlim.setIcon(new ImageIcon("picture/"+rsde1.getString("文件路徑").trim())); 405 jta.setText("信息:\n\n "+rsde1.getString("信息").trim()); 406 407 } 408 }else if(nut>1&&nut<=dbzong){ 409 410 ResultSet rsde1 = st.executeQuery("select top "+nut+" *from t_fruit1 where 序號 not in(select top "+(nut-1)+" 序號 from t_fruit1)"); 411 if(rsde1.next()){ 412 jlzk2.setText(" 唯一編號:"+rsde1.getString("序號").trim()+" 名稱:"+rsde1.getString("名稱").trim()); 413 jlim.setIcon(new ImageIcon("picture/"+rsde1.getString("文件路徑").trim())); 414 jta.setText("信息:\n\n "+rsde1.getString("信息").trim()); 415 }}else{ 416 nut--; 417 JOptionPane.showMessageDialog(null,"已經是最後份"); 418 } }catch (SQLException e2) { 419 // TODO 自動生成的 catch 塊 420 e2.printStackTrace(); 421 }}}); 422 jbsan.addActionListener(new ActionListener(){ 423 public void actionPerformed(ActionEvent e){ 424 if(nut!=0)nut--; 425 if(nut>0){ 426 try { 427 ResultSet recoun=st.executeQuery("select count(序號)conu from t_fruit1"); 428 if(recoun.next()){dbzong=recoun.getInt("conu");} 429 430 if(nut==1&&nut<=dbzong){ 431 ResultSet rsde1 = st.executeQuery("select top 1 *from t_fruit1"); 432 if(rsde1.next()){ 433 jlzk2.setText(" 唯一編號:"+rsde1.getString("序號").trim()+" 名稱:"+rsde1.getString("名稱").trim()); 434 jlim.setIcon(new ImageIcon("picture/"+rsde1.getString("文件路徑").trim())); 435 jta.setText("信息:\n\n "+rsde1.getString("信息").trim()); 436 437 } 438 }else if(nut>1&&nut<=dbzong){ 439 440 ResultSet rsde1 = st.executeQuery("select top "+nut+" *from t_fruit1 where 序號 not in(select top "+(nut-1)+" 序號 from t_fruit1)"); 441 if(rsde1.next()){ 442 jlzk2.setText(" 唯一編號:"+rsde1.getString("序號").trim()+" 名稱:"+rsde1.getString("名稱").trim()); 443 jlim.setIcon(new ImageIcon("picture/"+rsde1.getString("文件路徑").trim())); 444 jta.setText("信息:\n\n "+rsde1.getString("信息").trim());}}else{ 445 nut=1; 446 JOptionPane.showMessageDialog(null,"已經是第一份"); 447 } }catch (SQLException e2) { 448 e2.printStackTrace();} 449 }else{ 450 nut=1; 451 JOptionPane.showMessageDialog(null,"已經是第一份"); 452 }}});} 453 jspouter.setLeftComponent(jp1); 454 jspouter.setRightComponent(jspinner); 455 jspinner.setTopComponent(jpys); 456 JPanel jpyx=new JPanel(); 457 jpyx.setLayout(new GridLayout(4,1)); 458 jpyx.add(new JLabel("開 發 者:東小東")); 459 jpyx.add(new JLabel("項目名稱:瓜果蔬菜這裏查")); 460 jpyx.add(new JLabel("時 間:2017-12-16")); 461 jspinner.setBottomComponent(jpyx); 462 jspinner.setDividerLocation(900); 463 jspinner.setDividerSize(4); 464 jspouter.setDividerSize(4); 465 jfmain.add(jspouter); 466 jfmain.setVisible(true);}} 467 class Jbbu1res implements ActionListener{ 468 @Override 469 public void actionPerformed(ActionEvent e) { 470 jtbu1user.setText(""); 471 jtbu1pasw.setText("");}} 472 class Jbbu1bac implements ActionListener{ 473 @Override 474 public void actionPerformed(ActionEvent e) { 475 jfbu1.dispose(); 476 jfde.setEnabled(true);//可執行窗口 477 } } 478 class Jbbu1sub implements ActionListener{ 479 public void actionPerformed(ActionEvent e){ 480 //登入*-**************************** 481 if(jtbu1user.getText().equals("")||String.valueOf(jtbu1pasw.getPassword()).equals("")){ 482 jfbu1.setVisible(false); 483 JOptionPane.showMessageDialog(null,"賬號和密碼不能爲空"); 484 jfbu1.setVisible(true); 485 }else{ 486 try { 487 ResultSet rsde=st.executeQuery("select 密碼 from t_userx where 用戶名='"+jtbu1user.getText()+"'"); 488 if(rsde.next()){ 489 String pass=rsde.getString("密碼"); 490 if(pass.trim().equals(String.valueOf(jtbu1pasw.getPassword()).trim())){ 491 boo=true; 492 dbuser=jtbu1user.getText(); 493 jfbu1.dispose(); 494 new Bu3(1); 495 }else{ 496 jfbu1.setVisible(false); 497 JOptionPane.showMessageDialog(null, "密碼錯誤,請重新輸入"); 498 jfbu1.setVisible(true); 499 } 500 }else{ 501 jfbu1.setVisible(false); 502 JOptionPane.showMessageDialog(null,"賬號不存在,請重新輸入"); 503 jfbu1.setVisible(true);} 504 } catch (SQLException e1) { 505 e1.printStackTrace(); 506 }}} } 507 class Jbbu1hui implements ActionListener{ 508 public void actionPerformed(ActionEvent e){//找回密碼*-**************************** 509 JFrame jfhui=new JFrame(); 510 jfbu1.dispose(); 511 jfhui.setUndecorated(true); 512 jfhui.setOpacity(0.8f); 513 jfhui.setResizable(false);//不可縮放 514 jfhui.setSize(300, 200); 515 jfhui.setLocationRelativeTo(jfde);//設置基於jfde窗體居中 516 JPanel jpbu1=new JPanel(); 517 jpbu1.setLayout(new GridLayout(5,1));//縱,橫 518 JPanel jpbu3=new JPanel(); 519 JPanel jpbu4=new JPanel(); 520 JPanel jpbu5=new JPanel(); 521 JPanel jpbu6=new JPanel(); 522 JPanel jpbu7=new JPanel(); 523 JLabel jl1=new JLabel("找回密碼"); 524 jpbu1.add(jl1); 525 JLabel jlx=new JLabel("賬號"); 526 JTextField jtx=new JTextField(12); 527 jpbu3.add(jlx); 528 jpbu3.add(jtx); 529 jpbu1.add(jpbu3); 530 JLabel jlps=new JLabel("密匙"); 531 JPasswordField jtps=new JPasswordField(12); 532 jpbu4.add(jlps); 533 jpbu4.add(jtps); 534 jpbu1.add(jpbu4); 535 jpbu1.add(jpbu7); 536 JButton jbsub=new JButton("確定"); 537 JButton jbbac=new JButton("取消"); 538 jpbu5.add(jbsub); 539 jpbu5.add(jbbac); 540 jpbu1.add(jpbu5); 541 jfhui.add(jpbu1,"Center"); 542 jfhui.add(jpbu6,"South"); 543 jfhui.setAlwaysOnTop(true);//窗體頂端顯示 544 jfhui.setVisible(true); 545 jbbac.addActionListener(new ActionListener(){ 546 @Override 547 public void actionPerformed(ActionEvent e) { 548 jfhui.dispose(); 549 jfde.setEnabled(true);//可執行窗口 550 }}); 551 jbsub.addActionListener(new ActionListener(){ 552 @Override 553 public void actionPerformed(ActionEvent e) { 554 ResultSet rsde; 555 try { 556 rsde = st.executeQuery("select 密碼,密匙 from t_userx where 用戶名='"+jtx.getText()+"'"); 557 if(rsde.next()){ 558 String pass=rsde.getString("密匙"); 559 String pass1=rsde.getString("密碼"); 560 if(pass.trim().equals(String.valueOf(jtps.getPassword()).trim())){ 561 jfhui.dispose(); 562 JOptionPane.showMessageDialog(null,"密碼爲:"+pass1.trim()+" 可登入後修改密碼^_^ "); 563 jfde.setEnabled(true);//可執行窗口 564 new Bu1(1);}else{ 565 jfhui.setVisible(false); 566 JOptionPane.showMessageDialog(null, "密匙錯誤,請重新輸入"); 567 jfhui.setVisible(true); } 568 }else{ 569 jfhui.setVisible(false); 570 JOptionPane.showMessageDialog(null,"賬號不存在,請重新輸入"); 571 jfhui.setVisible(true); 572 }} catch (SQLException e1) { 573 e1.printStackTrace();}}});}} 574 class Jbbu2bac implements ActionListener{ 575 @Override 576 public void actionPerformed(ActionEvent e) { 577 jfbu2.dispose(); 578 jfde.setEnabled(true);}} 579 class Jbbu2res implements ActionListener{ 580 public void actionPerformed(ActionEvent e){ 581 jtbu2user.setText(""); 582 jtbu2pasw.setText(""); 583 jtbu2pasw2.setText(""); 584 jtbu2nam.setText(""); 585 jtbu2age.setText("");}} 586 class Jbbu2sub implements ActionListener{ 587 public void actionPerformed(ActionEvent e){//註冊******************************** 588 if(jtbu2user.getText().equals("")||String.valueOf(jtbu2pasw.getPassword()).equals("")){jfbu2.setVisible(false); 589 JOptionPane.showMessageDialog(null,"賬號和密碼不能爲空"); 590 jfbu2.setVisible(true);} 591 else if(!(String.valueOf(jtbu2pasw.getPassword()).equals(String.valueOf(jtbu2pasw2.getPassword())))){ 592 jfbu2.setVisible(false); 593 JOptionPane.showMessageDialog(null, "兩次輸入密碼不一致"); 594 jfbu2.setVisible(true);} 595 else{ 596 try {int inx=st.executeUpdate(String.format("insert into t_userx values('%s','%s','%s','%s',%d,'','會員','')",jtbu2user.getText(),String.valueOf(jtbu2pasw.getPassword()),"".equals(jtbu2nam.getText())?"NULL":jtbu2nam.getText(),"".equals(jcbu2sex.getSelectedItem())?"祕密":jcbu2sex.getSelectedItem(),("".equals(jtbu2age.getText()))?0:Integer.parseInt(jtbu2age.getText()))); 597 if(inx==1){ 598 jfbu2.dispose(); 599 JOptionPane.showMessageDialog(null,"註冊成功"); 600 jfde.setEnabled(true); 601 new Bu1(1); } 602 } catch (SQLException e1) { 603 StringWriter sw=new StringWriter(); 604 PrintWriter pw=new PrintWriter(sw); 605 e1.printStackTrace(pw); 606 String strx=new String(sw.toString()); 607 if(strx.indexOf("重複鍵")>-1) { 608 jfbu2.setVisible(false); 609 JOptionPane.showMessageDialog(null,String.format("賬號:%s 不可重複註冊",strx.substring(strx.indexOf("重複鍵值爲 (")+7,strx.indexOf(" )。")).trim())); 610 jfbu2.setVisible(true); 611 try{ 612 sw.close(); 613 pw.close(); 614 } catch (IOException e11) { 615 e11.printStackTrace();}}} } }} 616 class Jbbu3j implements ActionListener{ 617 public void actionPerformed(ActionEvent e){ 618 jfde.setVisible(true); 619 jfmain.dispose(); 620 new Bu2(1);}} 621 class Jbbu3g implements ActionListener{ 622 public void actionPerformed(ActionEvent e){ 623 jfmain.setEnabled(false);//設置不可執行窗口setOpacity(0.8f); 624 jfbu3g=new JFrame(); 625 jfbu3g.setUndecorated(true); 626 jfbu3g.setOpacity(0.9f); 627 jfbu3g.setResizable(false);//不可縮放 628 jfbu3g.setSize(750, 480); 629 jfbu3g.setLocationRelativeTo(jfmain);//設置基於jfde窗體居中 630 JPanel jpbu1=new JPanel(); 631 jpbu1.setBackground(Color.green); 632 jpbu1.setLayout(new GridLayout(10,1));//縱,橫 633 JPanel jpbu2=new JPanel(); 634 JPanel jpbu5=new JPanel(); 635 JPanel jpbu3=new JPanel(); 636 JPanel jpbu6=new JPanel(); 637 JPanel jpbu4=new JPanel(); 638 JPanel jpbu7=new JPanel(); 639 JPanel jpbu8=new JPanel(); 640 JPanel jpbu9=new JPanel(); 641 JPanel jpbu10=new JPanel(); 642 JPanel jpbu11=new JPanel(); 643 jpbu2.setBackground(Color.yellow); 644 jpbu3.setBackground(Color.yellow); 645 jpbu8.setBackground(Color.yellow); 646 jpbu4.setBackground(Color.green); 647 jpbu5.setBackground(Color.green); 648 jpbu6.setBackground(Color.green); 649 jpbu7.setBackground(Color.green); 650 jpbu9.setBackground(Color.green); 651 jpbu10.setBackground(Color.green); 652 jpbu11.setBackground(Color.green); 653 JLabel jlbiao=new JLabel("修改普通信息(留白則不會更改)"); 654 jpbu2.add(jlbiao); 655 jpbu1.add(jpbu2); 656 jpbu3.add(new JLabel("賬號爲:"+dbuser)); 657 jpbu1.add(jpbu3); 658 JLabel jlnc=new JLabel("暱稱"); 659 JTextField jtnc=new JTextField(12); 660 jpbu4.add(jlnc); 661 jpbu4.add(jtnc); 662 jpbu1.add(jpbu4); 663 JLabel jlxb=new JLabel("性別"); 664 String str[]={"","男","女"}; 665 JComboBox jcxb=new JComboBox(str); 666 jpbu5.add(jlxb); 667 jpbu5.add(jcxb); 668 jpbu1.add(jpbu5); 669 JLabel jlnl=new JLabel("年齡"); 670 JTextField jtnl=new JTextField(5); 671 jpbu6.add(jlnl); 672 jpbu6.add(jtnl); 673 jpbu1.add(jpbu6); 674 JLabel jlqm=new JLabel("簽名"); 675 JTextField jtqm=new JTextField(24); 676 jpbu7.add(jlqm); 677 jpbu7.add(jtqm); 678 jpbu1.add(jpbu7); 679 jpbu8.add(new JLabel("修改安全信息(密碼爲登入使用,密匙爲找回密碼使用,不能爲空)")); 680 jpbu1.add(jpbu8); 681 JLabel jlmm=new JLabel("密碼: "); 682 JPasswordField jtmm=new JPasswordField(12); 683 JLabel jlmm2=new JLabel("確認密碼: "); 684 JPasswordField jtmm2=new JPasswordField(12); 685 jpbu9.add(jlmm); 686 jpbu9.add(jtmm); 687 jpbu9.add(jlmm2); 688 jpbu9.add(jtmm2); 689 jpbu1.add(jpbu9); 690 JLabel jlms=new JLabel("密匙: "); 691 JPasswordField jtms=new JPasswordField(12); 692 JLabel jlms2=new JLabel("確認密匙: "); 693 JPasswordField jtms2=new JPasswordField(12); 694 jpbu10.add(jlms); 695 jpbu10.add(jtms); 696 jpbu10.add(jlms2); 697 jpbu10.add(jtms2); 698 jpbu1.add(jpbu10); 699 JButton jbsub=new JButton("確定"); 700 JButton jbbac=new JButton("取消"); 701 jpbu11.add(jbsub); 702 jpbu11.add(jbbac); 703 jfbu3g.add(jpbu11,"South"); 704 jfbu3g.add(jpbu1,"Center"); 705 jfbu3g.setAlwaysOnTop(true);//窗體頂端顯示 706 jfbu3g.setVisible(true); 707 jbbac.addActionListener(new ActionListener(){ 708 public void actionPerformed(ActionEvent e) { 709 jfmain.setEnabled(true);//設置不可執行窗口setOpacity(0.8f); 710 jfbu3g.dispose();}}); 711 jbsub.addActionListener(new ActionListener(){ 712 public void actionPerformed(ActionEvent e) { 713 if(String.valueOf(jtmm2.getPassword()).equals("")||String.valueOf(jtms.getPassword()).equals("")||String.valueOf(jtms2.getPassword()).equals("")||String.valueOf(jtmm.getPassword()).equals("")){ 714 jfbu3g.setVisible(false); 715 JOptionPane.showMessageDialog(null,"密碼和密匙不能爲空"); 716 jfbu3g.setVisible(true); 717 718 }else if(!(String.valueOf(jtmm.getPassword()).equals(String.valueOf(jtmm2.getPassword())))){ 719 jfbu3g.setVisible(false); 720 JOptionPane.showMessageDialog(null, "兩次輸入密碼不一致"); 721 jfbu3g.setVisible(true); 722 723 }else if(!(String.valueOf(jtms.getPassword()).equals(String.valueOf(jtms2.getPassword())))){ 724 jfbu3g.setVisible(false); 725 JOptionPane.showMessageDialog(null, "兩次輸入密匙不一致"); 726 jfbu3g.setVisible(true);} 727 else{try {if(!(jtnc.getText().equals(""))){ 728 st.executeUpdate("update t_userx set 暱稱='"+jtnc.getText()+"' where 用戶名='"+dbuser+"'"); 729 } 730 if(!("".equals(jcxb.getSelectedItem()))){ 731 st.executeUpdate("update t_userx set 性別='"+jcxb.getSelectedItem()+"' where 用戶名='"+dbuser+"'"); 732 } 733 if(!(jtnl.getText().equals(""))){ 734 st.executeUpdate("update t_userx set 年齡="+Integer.parseInt(jtnl.getText())+" where 用戶名='"+dbuser+"'"); 735 } 736 if(!(jtqm.getText().equals(""))){ 737 st.executeUpdate("update t_userx set 簽名='"+jtqm.getText()+"' where 用戶名='"+dbuser+"'"); 738 } 739 st.executeUpdate("update t_userx set 密碼='"+String.valueOf(jtmm.getPassword())+"' where 用戶名='"+dbuser+"'"); 740 st.executeUpdate("update t_userx set 密匙='"+String.valueOf(jtms.getPassword())+"' where 用戶名='"+dbuser+"'"); 741 jfbu3g.dispose(); 742 jfmain.dispose(); 743 JOptionPane.showMessageDialog(null,"修改成功"); 744 jfde.setEnabled(true); 745 jfde.setVisible(true); 746 new Bu1(1); 747 } catch (NumberFormatException e1) { 748 // TODO 自動生成的 catch 塊 749 e1.printStackTrace(); 750 } catch (SQLException e1) { 751 // TODO 自動生成的 catch 塊 752 e1.printStackTrace(); 753 }}}});}} 754 class Jbbu3d implements ActionListener{ 755 public void actionPerformed(ActionEvent e) { 756 jfmain.dispose(); 757 jfde.setVisible(true); 758 new Bu1(1);}} 759 class Db{public Db(){ 760 String url = "jdbc:sqlserver://localhost:1433;databaseName=java_datax"; 761 String user="java_userx"; 762 String password="123123"; 763 try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//註冊、加載特定的驅動程序 764 } catch (ClassNotFoundException e) { 765 JOptionPane.showMessageDialog(null,"加載數據庫失敗01"); 766 System.exit(0);//關閉整個應用 767 e.printStackTrace();} 768 try { 769 ct=DriverManager.getConnection(url,user,password);//創建連接,創建連接Connection對象 770 } catch (SQLException e1) { 771 JOptionPane.showMessageDialog(null,"加載數據庫失敗02"); 772 System.exit(0);//關閉整個應用 773 e1.printStackTrace(); 774 } 775 try { 776 st=ct.createStatement();//創建會話對象,用Connection對象生成Statement對象 777 } catch (SQLException e3) { 778 JOptionPane.showMessageDialog(null,"加載數據庫失敗03"); 779 System.exit(0);//關閉整個應用 780 e3.printStackTrace(); 781 }}}} 782 public class Main{ 783 public static void main(String arg[]){ 784 new Start();} }