目錄
摘要:
該項目開發的軟件為網絡QQ賬戶信息管理系統軟件,是鑒於目前人們QQ的使用領域的增加,QQ信息呈爆炸性增長的前提下人們對自己的QQ信息管理的自動化與准確化的要求日益強烈的背景下構思出來的,該軟件設計完成后可用於使用QQ人群的QQ信息的管理.
目前社會上信息管理系統發展飛快,各個企事業單位都引入了信息管理軟件來管理自己日益增長的各種信息個人管理系統也是有了很大的發展,商業化的各類信息管理軟件也不少. 本系統具有QQ信息的添加、修改、刪除、查詢等功能。他是基於文本格式,方便快捷。但本系統完全獨立開發,力求使系統功能簡潔明了,但功能齊全且易於操作。
【關鍵字】:
QQ信息管理系統、Java、SMTP、Base64編碼;
緒論
課程目的
隨着社會的不斷發展,社會的競爭也越來越激烈,這就在無形中增加了人們的生活壓力,要做的事情太多,在這種環境下有些事情顧及不到是在所難免的。信息化的發展幫助人們解決了這個難題,信息管理使生活有條不紊的進行着。個人QQ賬號信息管理系統實現了管理的信息化,它記錄着個人QQ賬號的相關信息,用戶可以在系統中任意添加、修改、刪除個人數據。
課程研究的意義
目前社會上信息管理系統發展飛快,各個企事業單位都引入了信息管理軟件來管理自己日益增長的各種信息個人管理系統也是有了很大的發展,商業化的各類信息管理軟件也不少. 本系統具有QQ信息的添加、修改、刪除、查詢等功能。他是基於文本格式,方便快捷。但本系統完全獨立開發,力求使系統功能簡潔明了,但功能齊全且易於操作。
一、 java課程設計目的和要求
1.1課程設計目的
課程設計是重要的實踐性環節之一,是在學生學習完《面向對象程序設計語言》課程后進行的一次全面的綜合練習。本課程設計的目的和任務:
1. 鞏固和加深學生對java語言課程的基本知識的理解和掌握
2. 掌握java語言編程和程序調試的基本技能
3. 利用java語言進行基本的軟件設計
4. 掌握書寫程序設計說明文檔的能力
5. 提高運用java語言解決實際問題的能力
1.2課程設計要求
1. 分析課程設計題目的要求
2. 寫出詳細設計說明
3. 編寫程序代碼,調試程序使其能正確運行
4. 設計完成的軟件要便於操作和使用
5.設計完成后提交課程設計報告
1.3系統功能圖
二、 程序的設計與實現
2.1登陸界面的設計與實現
登錄界面的展示圖:
采用QQ登錄的界面進行設計,也突出了這次QQ信息管理界面的主題是圍繞QQ進行的。
功能介紹:
這個界面上面有注冊功能,還有找回密碼,分別用標簽組件和圖片組成。當鼠標放上以后會顯示不同的顏色,點擊后即可實現相應的功能。記住密碼,和自動登錄為灰色,表明無法使用,功能有待以后的補充實現。
2.2密碼注冊界面的設計和實現
注冊界面展示圖
功能介紹:
上面可以進行注冊,輸入用戶名和密碼,還有郵箱,這寫都會記錄在user.xx文件中。輸入郵箱驗證碼后點擊立即注冊,才可以注冊。注冊時會根據輸入的郵箱帳號發送一個驗證碼,輸入即可,完成注冊。
功能實現:
驗證碼會用郵箱發送到你所注冊的郵箱中,點擊獲取驗證碼時,系統會根據相應的設置,登錄到郵件服務器上,使用相應的帳號來發送到你的郵件Base64Util.java是將要登錄郵件服務器的用戶名和密碼進行編碼,在SMTPMain.java中調用Base64Util.java這個類來實現登錄。
1. String str1 =""+(int)(Math.random()*10)+(int)(Math.random()*10)+(int)(Math.random()*10)+(int)(Math.random()*10);
這行代碼實現了驗證碼的隨機出現,在SMTPMain的這個類中有一個setMain的靜態方法,返回值則是str1這個字符串,然后和用戶輸入的驗證碼進行對比。
1. Socket socket = new Socket("smtp.sina.com", 25);
2. InputStream inputStream = socket.getInputStream();
3. OutputStream outputStream = socket.getOutputStream();
4. BufferedReader reader = new BufferedReader(new InputStreamReader(
5. inputStream));
6. PrintWriter writter = new PrintWriter(outputStream, true);
這幾行代碼來創建一個socket連接,登錄郵件服務器,然后用輸入流使用SMTP命令發送郵件。
2.3密碼找回界面的設計和實現
找回密碼界面展示圖:
功能介紹:
第一個界面輸入你要找的帳號和注冊時的郵箱,同樣也會發送驗證碼,點擊確認后進入密碼修改界面。
功能實現:
這是用一個多選項界面,在Find_Fram.java中添加了兩個JInternalFrame窗口,當輸入信息點擊確定時,它會讀取user.xx文件下的內容,若賬戶和郵箱存在,才會發送驗證碼,否則不會,等一切驗證完畢后,這個面板為隱藏,密碼修改面板就會顯示出來,修改完成后,更新user.xx中的內容,下次登陸時調用。
2.4信息管理主界面設計和實現
主界面展示圖:
添加后
功能介紹:
在次界面上可以將QQ信息添加進入,其中包含修改選中項,刪除選中項,刪除,查找關鍵字。輸入你要錄入的信息,點擊確認即可添加,點擊清除可清除剛才輸入的內容。在界面上選中任意個數的數據點擊修改選中項,即可跳入到修改的頁面,對選中的數據進行修改,惦記你刪除選中項,即可將選中的內容刪除掉,點擊刪除,即可全部刪除,在查找的下拉框中選擇“請選擇你要查找的關鍵字”,回車即可顯示全部信息;在下拉框中選擇你要查找的內容,輸入關鍵字,回車即可查找出你需要內容(注:所有的查找都使用模糊查找的方法)。
功能實現:
添加功能
1. public void adds(String str){//添加數據是的函數
2. Person person;
3. String[]strs = str.split(",");
4. person = new Person(strs[0], strs[1],strs[2], strs[4] +","+strs[5],strs[3] );
5. persons.addElement(person);
6. }
點擊確認按鈕調用adds方法,獲取錄入的信息。添加時將QQ號設為主鍵,要是添加相同QQ號的則添加失敗。
修改選中項
1. private List<String> strings;
2. strings =list.getSelectedValuesList();
3. setVisible(false);
4. swt_37.setVisible(true);
5.
6. strings =list.getSelectedValuesList();
7. if (strings.isEmpty()) {
8. setVisible(true);
9. }
10. swt_37.edit(strings);
11. for (String str : strings) {
12. try {
13. delet(str);
14. } catch (IOException e1) {
15.
16. }
17. }
18. update();
19. }
1. 將選中的內容傳入到修改的界面中然后將選中的內容刪除掉,添加修改界面返回的內容。public void delet(String str) throws IOException{//刪除數據是的函數
2. String[]strs = str.split(",");
3. for (Person person : persons) {
4. if(strs[1].equals(person.getQQ())){
5. persons.remove(person);
6. throw new IOException();
7. }
8. }
9. }
次代碼在刪除選中項是也調用來刪除選中的內容。
1. 點擊刪除按鈕是,調用persons.removeAllElements();
2. update();
update方法為顯示數據是的更新方法
1. public void update(){//更新顯示數據的函數
2. model.removeAllElements();
3. for (Person person : persons) {
4. try {model.addElement(person.toString());}
5. catch (Exception e2) {}
6. list.setModel(model);
7. }}
在查找時實現模糊查找的方法
1. public int ifSame(String str){
2. int k=0;
3. String [] stres = new String[textField_2.getText().length()];
4. String [] stres1 = new String[str.length()];
5. for(int i =0;i<textField_2.getText().length();i++)
6. {
7. stres[i]=textField_2.getText().substring(i, i+1
8. }
9. for(int i =0;i<str.length();i++)
10. {
11. stres1[i]=str.substring(i, i+1);
12. System.out.println(stres1[i]);
13. }
14. if(stres.length<stres1.length){
15. for(int i=0;i<stres.length;i++){
16. if(stres[i].equals(stres1[i]))
17.
18. {
19. k=k+1;
20. }
21. }
22. }
23. if(stres1.length<=stres.length) {
24. for(int i=0;i<stres1.length;i++){
25. if(stres[i].equals(stres1[i]))
26. {
27. k=k+1;
28. }
29.
30. }
31. }
32. return k;
33. }
此函數接收查找的關鍵字,與信息集合的所有對應的元素進行判斷,若有一處相同的地方,則函數的返回值不為0,然后就將該數據顯示出來。
2.5信息修改界面的設計和實現
界面展示圖:
沒有選中修改項時的界面
選中兩項內容時的界面
功能介紹
在信息修改界面中的下拉框中,選中你要修改的內容,在里面的信息框中填入你要修改的內容,點擊確認修改,即可完成內容的修改,選擇請選擇修改項修改時,不會產生任何作用。
功能實現:
這是用一個多選項界面,在Modify_Fram.java中添加了兩個JInternalFrame窗口,當沒有在主界面選中內容時,就會調用提示沒有選中信息,如果選中信息,就會跳到信息修改的界面。獲取要修改的內容,在修改界面的下拉框中選中要修改的內容,在修改后,然后在集合中刪除剛才選中的內容。到時返回時調用update()方法就可以更新數據。
1. btnNewButton.addActionListener(/**
2. * @author 冷血
3. *
4. */
5. new ActionListener() {//修改數據后的操作
6. String[] string;
7. @Override
8. public void actionPerformed(ActionEvent e) {
9. if (!textField.getText().equals("")&&!textField_1.getText().equals("")&&(rdbtnNewRadioButton.isSelected()||rdbtnNewRadioButton_1.isSelected())) {
10. string= comboBox_2.getSelectedItem().toString().split(",");
11. string[0]=textField.getText();
12. string[1]=textField_1.getText();
13. if (rdbtnNewRadioButton.isSelected()) {
14. string[2] = rdbtnNewRadioButton.getText();
15. }
16. else{
17. string[2] = rdbtnNewRadioButton_1.getText();
18. }
19. string[3] = comboBox_3.getSelectedItem().toString();//QQage
20. string[4] = comboBox.getSelectedItem().toString();//sheng
21. string[5] = comboBox_1.getSelectedItem().toString();//shi
22. delet(comboBox_2.getSelectedItem().toString()); adds(string[0]+","+string[1]+","+string[2]+","+string[3]+","+string[4]+","+string[5]);
23. update();
24. }
25. }
26. });
27.
28. }
29. public List<String> getList(){//修改完退出時執行的動作
30. delet("請選擇修改項");
31. model.removeAllElements();
32. return strings;
33. }
2.6新建文件的設計和實現
界面展示:
功能介紹:
點擊新建文件,主界面會變空白,這是會提示你保存文件以前的文件,默認的保存路徑為程序目錄下的data目錄。
功能實現:
1. mntmNewMenuItem.addActionListener(new ActionListener() {//新建文件
2. @Override
3. public void actionPerformed(ActionEvent e) {
4. int i = JOptionPane.showConfirmDialog(null, "是否保存文件");
5. //0是1否2取消
6. if(i==0&&strFileName.equals(""))
7. {
8. persons.removeAllElements();
9. update();
10. strFileName=JOptionPane.showInputDialog("請輸入文件名", "");
11. if (strFileName==null) {
12. JOptionPane.showMessageDialog(null, "請輸入文件名",strFileName,JOptionPane.WARNING_MESSAGE);
13. }
14. }
15. if(i==0&&!strFileName.equals("")){
16. update();
17. Save();
18. strFileName="";
19. persons.removeAllElements();
20. update();
21. }
22. }
23. });
2.7保存文件、文件另存為和打開的實現
界面展示:
功能介紹:
以上的可以實現最基本的文件保存,另存為,打開的功能。保存時默認路徑為程序目錄下的data目錄;另存為自己可以選擇目錄,打開時的默認路徑為程序目錄下的data目錄。
功能實現:
1. jfChooser = new JFileChooser("data/");
2. FileNameExtensionFilter jfExtensionFilter = new FileNameExtensionFilter(Constant.FILE_TYPE, Constant.FILE_SUFFIX);
3. jfChooser.addChoosableFileFilter(jfExtensionFilter);
4. jfChooser.setFileFilter(jfExtensionFilter);
5. jfChooser.setSelectedFile(new File(Constant.SAVA_FILE_NAME));
6. setVisible(false);
創建JFChooser是輸入JFileChooser("data/");來設置文件打開和保存時的默認路徑,
FileNameExtensionFilter jfExtensionFilter來設置文件過濾器,只打開所需后綴的文件。
三、 程序的設計思路
3.1程序設計思路
程序用截圖來獲取所需要的一系列圖片,這些圖片保存在程序主目錄下:/src/information/icons目錄下,程序編寫采用先設計后編寫的模式,從注冊,登錄,錄入信息等一步一步逐漸完成。其中文件的讀寫全部用ObjectStream的方式來讀寫,用集合來保存QQ用戶的信息,這樣可以方便后期的讀寫操作,一次性對集合里的元素進行操作,方便來增刪改查。程序中有兩個包,一個是裝有關於登錄所需要的類,另一個是主界面所需要的類。
3.2程序必要的jar包
此程序要發送郵件,所以需要java程序設計的密碼庫支持,對登錄郵件服務器的帳號和密碼進行Base64編碼,此java包為sun.misc.BASE64Decoder.jar
3.3程序中的工具類
程序中有三個工具類分別為1、Base64Util.java,此類用來對郵件帳號和密碼進行編碼;2、ToolImage.java,圖片讀寫的工具類,用來讀寫程序中需要的圖片;3、Constant.java,里面保存着程序所用到的一些常量,它可以使程序后期的修改跟更方便,更加體現了程序的擴展性。
四、 總結
4.1程序反思
這是一個關於QQ信息的管理系統,但所需的功能實現還有許多,從登錄開始,設計了注冊,和找回密碼,但是在獲取驗證碼上,當程序調用獲取驗證碼的方法上還不好,當發送時程序就會卡住,沒有獲取驗證碼倒計時的功能,這會讓用戶無奈,有待改進。程序的文件新建上,當保存一次后不能判斷是否保存過,如果保存了,還需要繼續保存;信息查找時模糊查找的功能有待改進,不能像QQ那樣查找聯系人一樣,搜索順序有待改進;還有在錄入時數據對錯,和格式的判斷。總體存在一些數據格式和正確性的判斷,還有一些異常的處理,在界面的編寫上采用拖拉的方式,這使得程序的擴張性不高,沒有達到程序高內聚,低耦合的要求,存取文件信息全是在本地完成,若是使用數據庫就更好了。
4.2心得體會
很快一周的時間就過去了,在這短暫的課程設計過程中,我們一起學習,加深了我對JAVA的認識,明白了學好一門編程語言的重要性。在做的過程中我遇到了許多問題,有些是自己不會,有的是自己馬虎造成的,在程序設計過程中,要注意每一個細節,無論或大或小的錯誤都要盡量避免發生。這次獨立的課程實驗中,鍛煉了我用程序設計的思想獨立分析問題,解決問題的思維。在程序設計的道路上是艱苦的,要努力學習,遇到自己不會的問題要努力嘗試,結合理論知識,在實踐中不斷的去練習,來提高自己的編程水平。
五、 參考文獻
[1][中]葉核亞.《Java程序設計使用教程》(第四版).電子工業出版社。
[2]極客學院.java語言開發學習(提供jar包和視頻教程)。
[3]騰訊QQ提供圖片。
源代碼地址:https://yunpan.cn/cuuYItQATFP5d 訪問密碼 e058