版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java語言程序設(shè)計(jì) 展示報(bào)告學(xué) 院 專 業(yè) 組長(zhǎng)信息 組員信息1 組員信息2 組員信息3 指導(dǎo)教師 日 期 年 月 日目錄第一章選題概述1第二章完成情況2第三章成果展示3一、登陸注冊(cè)界面展示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í)之后,我們對(duì)Java語言有了一定的認(rèn)識(shí)與了解。在此基礎(chǔ)上我們選擇了題目一作為本組的目標(biāo),題目的相關(guān)要求如下(初期擬完成目標(biāo)): 設(shè)計(jì)編程實(shí)現(xiàn)桌面文檔共享與管理系統(tǒng)(100%)實(shí)現(xiàn)
2、以下功能-1. 能夠?qū)崿F(xiàn)文件的下載與上傳(客戶端與服務(wù)器端)2. 能夠通過安全認(rèn)證與別人分享文檔3. 能形成“圈子”,對(duì)朋友或這陌生人設(shè)置不同的安全級(jí)別4. 能夠共享桌面與聊天5. 必須用數(shù)據(jù)庫存儲(chǔ)信息6. 必須用extends 和 implements 關(guān)鍵字7. 必須用this關(guān)鍵字8. 必須用圖形用戶界面9. 界面設(shè)計(jì)與功能不限,充分發(fā)揮題目一比較有挑戰(zhàn)性,題目中的要求幾乎涉及到了我們學(xué)過的所有知識(shí),除此之外還需要我們課外學(xué)習(xí)一些課堂額外的知識(shí),比如數(shù)據(jù)庫的創(chuàng)建于連接。由組長(zhǎng)XXX1負(fù)責(zé)整合所學(xué)內(nèi)容與指揮,組員查閱資料并編寫程序,再和組長(zhǎng)討論并完成各自的模塊設(shè)計(jì)。我們?cè)O(shè)計(jì)了如下的流程圖:
3、 圖1-1 流程圖 第二章 完成情況 經(jīng)過將近一個(gè)月左右的編程設(shè)計(jì),我們實(shí)現(xiàn)的桌面文檔共享與管理系統(tǒng)(90%)實(shí)現(xiàn)了以下功能-1.能夠?qū)崿F(xiàn)文件的上傳(客戶端與服務(wù)器端)2.能夠通過安全認(rèn)證與別人分享文檔3.能形成“圈子”,對(duì)朋友或這陌生人設(shè)置不同的安全級(jí)別4.能夠聊天并截取屏幕信息5.采用了數(shù)據(jù)庫存儲(chǔ)信息6.采用了extends 和 implements 關(guān)鍵字7.采用了this關(guān)鍵字8.采用了圖形用戶界面程序的編程設(shè)計(jì) 圖2-1 類成果展示圖其中jp.java功能為截圖;khd.java功能為建立客戶端;sc.java功能為文件上傳線程;zc.java功能為實(shí)現(xiàn)用戶登錄;Main功能為總體調(diào)
4、用;fwq.java功能為建立服務(wù)端;User.java功能為實(shí)現(xiàn)與數(shù)據(jù)庫的連接(直連)。 第三章 成果展示一、登錄注冊(cè)界面展示 1.效果截圖經(jīng)過我們的編程設(shè)計(jì),實(shí)現(xiàn)了用戶的登錄,其運(yùn)行效果如圖3-1所示、登陸成功效果如圖3-2示、登陸未成功效果如圖3-3示。注冊(cè)效果如圖3-4所示,注冊(cè)后數(shù)據(jù)庫數(shù)據(jù)改變效果如圖3-5示 圖3-1 登陸界面運(yùn)行成功效果圖 圖3-2 登陸成功效果圖 圖3-3 登陸未成功效果圖 圖3-4 注冊(cè)界面效果圖 2.核心代碼相關(guān)核心代碼及其詳細(xì)注解如下: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(注冊(cè)); private Container a = getContentPane(); public zc()
6、setLayout(null); setVisible(true); setBounds(600,320,400,160); setTitle(登錄窗口); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);/控制窗口關(guān)閉 /添加登錄和注冊(cè)的按鈕 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, 對(duì)不起您的
9、用戶名或密碼錯(cuò)誤!, 錯(cuò)誤,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(); ); /添加用戶名和密碼的標(biāo)簽 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(注冊(cè));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(注冊(cè));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, 對(duì)不
15、起您的用戶名已被注冊(cè)!, 錯(cuò)誤,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, 注冊(cè)成功!);setVisible(false); );jb2.addActionListener(new ActionListener() public void actionPerformed(A
17、ctionEvent e) setVisible(false); ); 二、客戶端界面展示1.效果截圖經(jīng)過我們的編程設(shè)計(jì),實(shí)現(xiàn)了客戶端的相關(guān)操作,其運(yù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;/ 負(fù)責(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ù)連接!, 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); return; try try port = Integer.parseInt(jt4.getText().trim(); catch (NumberFormatException e2) throw new Exception(端口號(hào)不符合要求!端口為整數(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(), 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); ); jb4.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (!isConnected) JOptionPane.showMessageDialog(null, 已處于斷開狀態(tài),不要重復(fù)斷開!, 錯(cuò)誤, 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(), 錯(cuò)誤, 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ā)送消息!, 錯(cuò)誤, JOptionPane.ERROR_MESSAGE); return; String message = jt2.getText().trim(); if (message = null | message.equals() JOptionPane.showMessageDialog(null, 消息不能為空!, 錯(cuò)誤, 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、 / 被動(dòng)的關(guān)閉連接 public synchronized void closeCon() throws Exception / 清空用戶列表 / listModel.removeAllElements(); / 被動(dòng)的關(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();/ 被動(dòng)的關(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ù)已達(dá)上限 textArea.append(stringTokenizer.nextToken() + stringTokenizer.nextToken() + n); closeCon();/
39、 被動(dòng)的關(guān)閉連接 JOptionPane.showMessageDialog(null, 服務(wù)器緩沖區(qū)已滿!, 錯(cuò)誤, 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ù)端口號(hào)和服務(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等.壓縮文件請(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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑工程租地合同范本
- 寧夏燴面采購合同范本
- 夾層玻璃做工合同范本
- 大閘蟹供貨協(xié)議書模板
- 建筑工地抽水合同協(xié)議
- 如何簽署安全協(xié)議合同
- 委托定向投資合同范本
- 廣東椰木采購合同范本
- 房屋貸款銀行合同范本
- 高中生物新人教版必修從生物圈到細(xì)胞教案(2025-2026學(xué)年)
- 2026年遼寧生態(tài)工程職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫附答案詳解
- 基坑回填質(zhì)量控制措施
- 合作購車位協(xié)議書
- 2025重慶城口縣國(guó)有企業(yè)公開招聘26人參考題庫附答案
- 咨政類課題申報(bào)書
- 產(chǎn)科護(hù)士長(zhǎng)2025年度述職報(bào)告
- 2026五個(gè)帶頭發(fā)言材料三
- 總承包管理實(shí)施指南
- DB3205-T 1123-2024 職業(yè)教育集團(tuán)建設(shè)與運(yùn)行規(guī)范
- 2025年鐵路職業(yè)技能競(jìng)賽線路工理論考試試題庫答案
- 鋼結(jié)構(gòu)加固施工方案及施工工藝流程方案
評(píng)論
0/150
提交評(píng)論