courseDesign_Java
聲明:
寫該片博文的目的是有利於大家學習,因爲當時我寫課設的時候感覺知識點零零散散的沒有掌控感。所以寫完課設後總結了一下。該篇博文僅提供思路,希望SDU們能夠自己碼代碼,紮紮實實改bug,有時候改bug也是很有意思的(前提是能改出來)。
同時提供代碼以供參考,希望大家不要硬抄,我的代碼只是拋磚引玉而已。
GitHub地址
要求
本次設計要求利用Java實現C/S模式的大學班級內日常事務管理系統(PC版,應用於校內網有線網絡訪問,暫不開發移動端),不得依賴現有的建模框架,使用swings技術完成如下基本功能需求:
1、 班級公告通知
2、 文稿匿名傳閱投票
3、 文件共享(上傳、下載)
4、 即時通信(一對一,多對多)
具體要求爲:
窗口化大屏幕界面,有菜單等工具。其中:
設管理員與用戶兩種使用權限,管理員操作過程有日誌記錄(管理員也是本班同學,應不止一個)。班級公告通知由管理員(比如班長或班委成員)發佈,公示於屏幕中央面板位置,可帶有滾動或翻頁功能(自選)
文稿匿名傳閱投票,用於形成班級的某項共識性意見、敏感性評測、評獎投票等事務。例如:班委起草某項建議初稿,列出同意與不同意選項、或者被投票者名單,或可加建議欄用於補充意見等等。該稿按照一種隨機模式(爲避免傳遞路徑的可追蹤性)在同學中一傳一流轉,每個收到的同學能夠看到稿子的當前狀態(票數,已有的補充建議等,避免重複性提議),給出自己的選擇與建議之後提交,繼續傳閱直到全部輪完回到零點,完成意見收集過程。
文件共享:在服務器端設置共享空間,允許班級成員上傳下載。
即時通信:獨立彈出小窗,基本功能:一對一對話(私聊),發言至班級(羣聊),可發圖片,即時手繪圖。其它功能大家可自由發揮。
實現
一、登錄模塊
-
班級數據庫設計
班級數據庫的設計:以安全爲主,所以事先由super管理員錄入班級所有同學的信息。
Name number users password Administrator 同學姓名 學號 暱稱 密碼 管理員權限(0是普通用戶1是管理員) 同學第一次登錄需要通過姓名和學號申請暱稱和密碼。
-
登錄界面
通過暱稱和密碼登錄系統:
-
註冊界面
通過學號和名字進行註冊:
-
數據庫設計
由於是班級系統所以將所有用戶的姓名學號以及管理權限提前錄入到數據庫中,確保安全性。一開始用戶的暱稱和密碼都會是空,註冊後錄入信息。
註冊前註冊後
二、班級公告通知
而普通用戶沒有編輯公告的菜單欄:
這要確保了對管理員操作的記錄和防止同學任意發佈公告。
xingming | item | time |
---|---|---|
管理員的姓名 | 行爲(發佈公告還是投票) | 時間 |
2)內容儲存——將公告的內容放進數據庫
name | information | time |
---|---|---|
管理員的姓名 | 發佈公告的內容 | 時間 |
-
3.編輯公告——界面設計
點擊確認按鈕將公告內容放進數據庫。
-
4.查看公告內容——將數據庫內容顯示到界面中
默認情況只查看最新的公告,當點擊查看所有公告時將所有的公告顯示到屏幕上。
最新公告:
所有公告:
三、匿名傳閱投票
-
1.設計發起投票
流程:管理員發起投票,寫入數據庫中,並且記錄每個選項的票數。同時將該過程記錄到班級日誌中。
name item option1 option2 option3 option4 number1 number2 number3 number4 time 發起投票人 投票內容 選項一 選項二 選項三 選項四 選項一的票數 選項二的票數 選項三的票數 選項四的票數 發起投票的時間 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-y9cLAj4Z-1590381470859)(https://s1.ax1x.com/2020/05/16/Ycs1Fs.png)]
發起投票:
-
2.每個成員投票
過程:每個同學登錄後進行投票,不能重複投票,可以添加自己的意見和看之前投票同學的意見當投票結束後系統會給出提示,同學們將無法進行投票,管理員進行票數統計。
重複投票
投票結束
-
3.數據庫設計
三個表分別是:上邊提到的vote,suggesstion和votename
vote的表結構:記錄票數和投票內容時間發起人
suggesstion:記錄投票人的意見。
votename:記錄已投票的同學姓名(對用戶不可見,加密,防止追蹤)vote
votename
suggestion
當最後一名同學投完票後,會顯示投票結束的提醒。
四、文件共享
-
1.本地文件上傳
功能選擇上傳
服務端設置新建一個專門用於文件上傳的服務器:FileServer一個用於文件上傳的客戶端FileClient
兩者通過Socket和DataOutputStream,DataInputStream交換文件,通過FileInputStream和FileOutputStream讀寫文件。
服務器會將文件傳到服務器端的桌面——共享文件的空間(第一次上傳如果沒有該文件夾會創建。)
補充功能:顯示文件上傳了多少的進度條。
將文件的上傳和進度條的顯示放到一個線程中去。
同時將進度條封裝到一個類(JProcessBarDemo)中。public JProcessBarDemo(){ try { UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); // 改變風格 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } setTitle("文件傳輸進度"); //設置窗體標題 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置窗體退出的操作 setBounds(600, 600, 350, 100);// 設置窗體的位置和大小 setResizable(false); JPanel contentPane = new JPanel(); // 創建內容面板 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));// 設置內容面板邊框 setContentPane(contentPane);// 應用(使用)內容面板 contentPane.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));// 設置爲流式佈局 processBar = new JProgressBar();// 創建進度條 processBar.setStringPainted(true);// 設置進度條上的字符串顯示,false則不能顯示 processBar.setBackground(Color.GREEN); contentPane.add(processBar);// 向面板添加進度控件 }
-
2.文件的下載
文件的下載和文件上傳的答題思路相同,不過這次是將服務端的文件下載到本地。
具體過程
先從服務端傳過來一個共享區內的String類型的文件列表,顯示在圖像化界面上供用戶選擇,將用戶選擇的文件以列表的方式發送給服務端,服務端發送File類型的文件列表給用戶供用戶下載。
同時需要用到Java的複選框控件:
JCheckBox(String text) 創建一個最初未選擇的複選框與文本。
五、即時通訊
主要邏輯和代碼請自行觀看,主要是要搞懂網絡通信的部分。
六、其餘功能
記錄管理員對班級日誌的修改和添加(公告和投票)
很好實現就是在管理員每發起一次投票或者發佈一次公告都將其記錄到數據庫中,查看時只需將數據庫的內容放到前端展示即可。
記錄的數據庫結構
name | item | time |
---|---|---|
管理員姓名 | 事件 | 時間 |