Java終極大作業(yè)報告_第1頁
Java終極大作業(yè)報告_第2頁
Java終極大作業(yè)報告_第3頁
Java終極大作業(yè)報告_第4頁
Java終極大作業(yè)報告_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java語言程序設(shè)計 展示報告學(xué) 院 專 業(yè) 組長信息 組員信息1 組員信息2 組員信息3 指導(dǎo)教師 日 期 年 月 日目錄第一章選題概述1第二章完成情況2第三章成果展示3一、登陸注冊界面展示3 1、效果截圖3 2、核心代碼4二、客戶端界面展示5 1、效果截圖8 2、核心代碼8三、服務(wù)端界面展示4 1、效果截圖3 2、核心代碼3四、數(shù)據(jù)庫直連和文件線程10第四章總結(jié)與感受12第一章 選題概述 在一學(xué)期的Java課程學(xué)習(xí)之后,我們對Java語言有了一定的認識與了解。在此基礎(chǔ)上我們選擇了題目一作為本組的目標,題目的相關(guān)要求如下(初期擬完成目標): 設(shè)計編程實現(xiàn)桌面文檔共享與管理系統(tǒng)(100%)實現(xiàn)

2、以下功能-1. 能夠?qū)崿F(xiàn)文件的下載與上傳(客戶端與服務(wù)器端)2. 能夠通過安全認證與別人分享文檔3. 能形成“圈子”,對朋友或這陌生人設(shè)置不同的安全級別4. 能夠共享桌面與聊天5. 必須用數(shù)據(jù)庫存儲信息6. 必須用extends 和 implements 關(guān)鍵字7. 必須用this關(guān)鍵字8. 必須用圖形用戶界面9. 界面設(shè)計與功能不限,充分發(fā)揮題目一比較有挑戰(zhàn)性,題目中的要求幾乎涉及到了我們學(xué)過的所有知識,除此之外還需要我們課外學(xué)習(xí)一些課堂額外的知識,比如數(shù)據(jù)庫的創(chuàng)建于連接。由組長XXX1負責(zé)整合所學(xué)內(nèi)容與指揮,組員查閱資料并編寫程序,再和組長討論并完成各自的模塊設(shè)計。我們設(shè)計了如下的流程圖:

3、 圖1-1 流程圖 第二章 完成情況 經(jīng)過將近一個月左右的編程設(shè)計,我們實現(xiàn)的桌面文檔共享與管理系統(tǒng)(90%)實現(xiàn)了以下功能-1.能夠?qū)崿F(xiàn)文件的上傳(客戶端與服務(wù)器端)2.能夠通過安全認證與別人分享文檔3.能形成“圈子”,對朋友或這陌生人設(shè)置不同的安全級別4.能夠聊天并截取屏幕信息5.采用了數(shù)據(jù)庫存儲信息6.采用了extends 和 implements 關(guān)鍵字7.采用了this關(guān)鍵字8.采用了圖形用戶界面程序的編程設(shè)計 圖2-1 類成果展示圖其中jp.java功能為截圖;khd.java功能為建立客戶端;sc.java功能為文件上傳線程;zc.java功能為實現(xiàn)用戶登錄;Main功能為總體調(diào)

4、用;fwq.java功能為建立服務(wù)端;User.java功能為實現(xiàn)與數(shù)據(jù)庫的連接(直連)。 第三章 成果展示一、登錄注冊界面展示 1.效果截圖經(jīng)過我們的編程設(shè)計,實現(xiàn)了用戶的登錄,其運行效果如圖3-1所示、登陸成功效果如圖3-2示、登陸未成功效果如圖3-3示。注冊效果如圖3-4所示,注冊后數(shù)據(jù)庫數(shù)據(jù)改變效果如圖3-5示 圖3-1 登陸界面運行成功效果圖 圖3-2 登陸成功效果圖 圖3-3 登陸未成功效果圖 圖3-4 注冊界面效果圖 2.核心代碼相關(guān)核心代碼及其詳細注解如下:package ceshi;import java.awt.*;import java.awt.event.*;impor

5、t java.io.PrintWriter;import javax.swing.*;public class zc extends JFrame User login_user=new User(); JTextField j1=new JTextField();/用戶名的文本框 JPasswordField jpw=new JPasswordField();/密碼的文本框 JButton jb1=new JButton(登錄); JButton jb2=new JButton(注冊); private Container a = getContentPane(); public zc()

6、setLayout(null); setVisible(true); setBounds(600,320,400,160); setTitle(登錄窗口); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);/控制窗口關(guān)閉 /添加登錄和注冊的按鈕 jb1.setBounds(270,10,60,30); j1.setBounds(100,15,100,20); jpw.setBounds(100,60,100,20); a.add(j1); a.add(jpw); jb1.addActionListener(new ActionLi

7、stener()public void actionPerformed(ActionEvent e)String name1=j1.getText();String password1=new String(jpw.getPassword();String password2=login_user.getPWD(name1);String security1=login_user.getSCT(name1);if(password2.trim().equals(password1.trim()if(security1.trim().equals(管理員)/System.out.println(

8、3 + login_user.getPWD(name1);setVisible(false);JOptionPane.showMessageDialog(null, 恭喜您登陸成功!, 消息, JOptionPane.INFORMATION_MESSAGE);new fwq();elsesetVisible(false);JOptionPane.showMessageDialog(null, 恭喜您登陸成功!, 消息, JOptionPane.INFORMATION_MESSAGE);new khd();elseJOptionPane.showMessageDialog(null, 對不起您的

9、用戶名或密碼錯誤!, 錯誤,JOptionPane.ERROR_MESSAGE);); jb2.setBounds(270,55,60,30); a.add(jb1); a.add(jb2); jb2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Register c=new Register(); ); /添加用戶名和密碼的標簽 JLabel jl1=new JLabel(用戶名); jl1.setBounds(40,10,60,30); JLabel jl2=new JLa

10、bel(密 碼); jl2.setBounds(40,55,60,30); a.add(jl1); a.add(jl2); public static void main(String argsp) new zc(); class Register extends JFrameUser Login_user = new User();JTextField jt1=new JTextField();JTextField jt2=new JTextField();JTextField jt3=new JTextField();JTextField jt4=new JTextField();JTex

11、tField jt5=new JTextField();JButton jb1=new JButton(注冊);JButton jb2=new JButton(退出);JLabel jl1=new JLabel(用戶名);JLabel jl2=new JLabel(密 碼);JLabel jl3=new JLabel(重新輸入密碼);JLabel jl4=new JLabel(郵 箱);JLabel jl5=new JLabel(身 份);JPanel jp=new JPanel();private Container a = getContentPane();public Register(

12、)setLayout(null);setVisible(true);setTitle(注冊);setBounds(750,320,300,250);jb1.setBounds(10,150,60,30);jb2.setBounds(140,150,60,30);jl1.setBounds(10,10,100,30);jl2.setBounds(10,35,100,30);jl3.setBounds(10,60,100,30);jl4.setBounds(10,85,100,30);jl5.setBounds(10,110,100,30);jt1.setBounds(120,15,130,20)

13、;jt2.setBounds(120,40,130,20);jt3.setBounds(120,65,130,20);jt4.setBounds(120,90,130,20);jt5.setBounds(120,115,130,20);a.add(jb1);a.add(jb2);a.add(jl1);a.add(jl2);a.add(jl3);a.add(jl4);a.add(jl5);a.add(jt1);a.add(jt2);a.add(jt3);a.add(jt4);a.add(jt5);jb1.addActionListener(new ActionListener() public

14、void actionPerformed(ActionEvent e) String name1=jt1.getText();String password1=new String(jt2.getText();String rpassword1=new String(jt3.getText();String gender1=new String(jt4.getText();String security1=new String(jt5.getText();if (Login_user.jiancha(name1)=1)JOptionPane.showMessageDialog(null, 對不

15、起您的用戶名已被注冊!, 錯誤,JOptionPane.ERROR_MESSAGE);return;else if(name1.length()10) JOptionPane.showMessageDialog(null,用戶名不能大于10位); return;else if(password1.length()6) JOptionPane.showMessageDialog(null,密碼不能小于6位); return; else if (password1.equals(name1) JOptionPane.showMessageDialog(null,密碼不能與用戶名一致); retur

16、n; else if (!password1.equals(rpassword1) JOptionPane.showMessageDialog(null,兩次輸入的密碼不一樣 ); return; Login_user.insert(name1, password1,rpassword1,gender1,security1);JOptionPane.showMessageDialog(null, 注冊成功!);setVisible(false); );jb2.addActionListener(new ActionListener() public void actionPerformed(A

17、ctionEvent e) setVisible(false); ); 二、客戶端界面展示1.效果截圖經(jīng)過我們的編程設(shè)計,實現(xiàn)了客戶端的相關(guān)操作,其運行效果如圖3-6所示,能夠?qū)崿F(xiàn)連接服務(wù)端、斷開,選擇文件并上傳文件、發(fā)送、截屏等操作 圖3-6 客戶端界面圖2.核心代碼核心代碼如下:package ceshi;import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.TitledBorder; import ceshi.wjsc;import java.awt.*;im

18、port java.awt.event.*;import java.io.*; import .Socket; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer;public class khd extends JFrameUser Login_user=new User();JButton jb1=new JButton(發(fā)送);JButton jb2=new JButton(文件);JButton jb3=new JButton(連接);JButton jb4=n

19、ew JButton(斷開);static JButton jb5=new JButton(上傳);JButton jb6=new JButton(截屏);static JTextArea jt1=new JTextArea(1,1);JTextArea jt2=new JTextArea(1,1);JTextField jt3=new JTextField();JTextField jt4=new JTextField(6999);JTextField jt5=new JTextField(d);JTextField jt6=new JTextField();JTextFi

20、eld jt7=new JTextField();JLabel jl1=new JLabel(聊天窗口);JLabel jl2=new JLabel(寫消息);JLabel jl3=new JLabel(服務(wù)器IP);JLabel jl4=new JLabel(端口);JLabel jl5=new JLabel(昵稱);J j1 = new J();static = new File();static ;private Socket socket; private Socket socket2;private PrintWriter writer; private BufferedReader

21、 reader; private MessageThread messageThread;/ 負責(zé)接收消息的線程 private Map onLineUsers = new HashMap();/ 所有在線用戶 private boolean isConnected = false; private Container a = getContentPane();public khd()setLayout(null);setVisible(true);setTitle(聊天室);setBounds(600,150,460,600);jl1.setBounds(10,50,100,20);JScr

22、ollPane js1 = new JScrollPane(jt1);jt1.setEditable(false);js1.setBounds(10,80,420,280);a.add(js1);a.add(jl1);jl2.setBounds(10,420,100,20);JScrollPane js2 = new JScrollPane(jt2);js2.setBounds(10,440,420, 80);a.add(js2);a.add(jl2);jb1.setBounds(250,370,60,30);a.add(jb1);jb3.setBounds(310,370,60,30);a.

23、add(jb3);jb4.setBounds(370,370,60,30);a.add(jb4);jb5.setBounds(190,370,60,30);a.add(jb5);jb6.setBounds(10,370,60,30);a.add(jb6);jb2.setBounds(70,370,60,30);a.add(jb2);jt6.setBounds(130,370,60,30);a.add(jt6);jt3.setBounds(60,10,100,20);a.add(jt3);jl3.setBounds(10,10,100,20);a.add(jl3);jt4.setBounds(2

24、00,10,100, 20);a.add(jt4);jl4.setBounds(168,10, 100, 20);a.add(jl4);jt5.setBounds(330,10,100, 20);a.add(jt5);jl5.setBounds(300,10, 100, 20);a.add(jl5);/按鈕控制jb1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) send(); );jb2.addActionListener(new ActionListener()pub

25、lic void actionPerformed(ActionEvent e) int n = j1.showOpenDialog(null); String = j1.getSelectedFile().toString(); if (n = J) jt6.setText(); = new ); file = j1.getSelectedFile(); System.out.println(+file); );jb3.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) int po

26、rt; if (isConnected) JOptionPane.showMessageDialog(null, 已處于連接上狀態(tài),不要重復(fù)連接!, 錯誤, JOptionPane.ERROR_MESSAGE); return; try try port = Integer.parseInt(jt4.getText().trim(); catch (NumberFormatException e2) throw new Exception(端口號不符合要求!端口為整數(shù)!); String hostIp = jt3.getText().trim(); String name= jt5.getTe

27、xt().trim(); if (name.equals() | hostIp.equals() throw new Exception(姓名、服務(wù)器IP不能為空!); boolean flag = connectServer(port, hostIp, name); if (flag = false) throw new Exception(與服務(wù)器連接失敗!); setTitle(name); JOptionPane.showMessageDialog(null, 成功連接!); catch (Exception exc) JOptionPane.showMessageDialog(nul

28、l, exc.getMessage(), 錯誤, JOptionPane.ERROR_MESSAGE); ); jb4.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (!isConnected) JOptionPane.showMessageDialog(null, 已處于斷開狀態(tài),不要重復(fù)斷開!, 錯誤, JOptionPane.ERROR_MESSAGE); return; try boolean flag = closeConnection();/ 斷開連接 if

29、(flag = false) throw new Exception(斷開連接發(fā)生異常!); JOptionPane.showMessageDialog(null, 成功斷開!); catch (Exception exc) JOptionPane.showMessageDialog(null, exc.getMessage(), 錯誤, JOptionPane.ERROR_MESSAGE); ); jb6.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) new jp();

30、RectD rd = new RectD(); GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice(); gd.setFullScreenWindow(rd); ); public synchronized boolean closeConnection() try sendMessage(CLOSE);/ 發(fā)送斷開連接命令給服務(wù)器 messageThread.stop();/ 停止接受消息線程 / 釋放資源 if (reader != null) reade

31、r.close(); if (writer != null) writer.close(); if (socket != null) socket.close(); isConnected = false; return true; catch (IOException e1) e1.printStackTrace(); isConnected = true; return false; public void sendMessage(String message) writer.println(message); writer.flush(); public void send() if (

32、!isConnected) JOptionPane.showMessageDialog(null, 還沒有連接服務(wù)器,無法發(fā)送消息!, 錯誤, JOptionPane.ERROR_MESSAGE); return; String message = jt2.getText().trim(); if (message = null | message.equals() JOptionPane.showMessageDialog(null, 消息不能為空!, 錯誤, JOptionPane.ERROR_MESSAGE); return; sendMessage(getTitle() + + ALL

33、 + + message); jt2.setText(null); public static void main(String args)new khd(); class MessageThread extends Thread private BufferedReader reader; private JTextArea textArea; / 接收消息線程的構(gòu)造方法 public MessageThread(BufferedReader reader, JTextArea textArea) this.reader = reader; this.textArea = textArea;

34、 / 被動的關(guān)閉連接 public synchronized void closeCon() throws Exception / 清空用戶列表 / listModel.removeAllElements(); / 被動的關(guān)閉連接釋放資源 if (reader != null) reader.close(); if (writer != null) writer.close(); if (socket != null) socket.close(); isConnected = false;/ 修改狀態(tài)為斷開 public void run() String message = ; while

35、 (true) try message = reader.readLine(); StringTokenizer stringTokenizer = new StringTokenizer( message, /); String command = stringTokenizer.nextToken();/ 命令 if (command.equals(CLOSE)/ 服務(wù)器已關(guān)閉命令 textArea.append(服務(wù)器已關(guān)閉!n); closeCon();/ 被動的關(guān)閉連接 return;/ 結(jié)束線程 else if (command.equals(ADD) / 有用戶上線更新在線列表

36、String username = ; String userIp = ; if (username = stringTokenizer.nextToken() != null & (userIp = stringTokenizer.nextToken() != null) User user = new User(username, userIp); onLineUsers.put(username, user); /listModel.addElement(username); else if (command.equals(DELETE) / 有用戶下線更新在線列表 String use

37、rname = stringTokenizer.nextToken(); User user = (User) onLineUsers.get(username); onLineUsers.remove(user); else if (command.equals(USERLIST) / 加載在線用戶列表 int size = Integer .parseInt(stringTokenizer.nextToken(); String username = null; String userIp = null; for (int i = 0; i size; i+) username = str

38、ingTokenizer.nextToken(); userIp = stringTokenizer.nextToken(); User user = new User(username, userIp); onLineUsers.put(username, user); /listModel.addElement(username); else if (command.equals(MAX) / 人數(shù)已達上限 textArea.append(stringTokenizer.nextToken() + stringTokenizer.nextToken() + n); closeCon();/

39、 被動的關(guān)閉連接 JOptionPane.showMessageDialog(null, 服務(wù)器緩沖區(qū)已滿!, 錯誤, JOptionPane.ERROR_MESSAGE); return;/ 結(jié)束線程 else / 普通消息 textArea.append(message + n); catch (IOException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); public boolean connectServer(int port, String hostIp, String name) / 連接服務(wù)器 try socket = new Socket(hostIp, port);/ 根據(jù)端口號和服務(wù)器ip建立連接 socket2=new Socket(hostIp,port); writer = new PrintWriter(socket.getOutputStream(); reader = new BufferedReader(new In

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論