数据库课程设计-题库管理系统
## 數據庫課程設計-題庫管理系統*
這里寫我的思路及其功能展示,希望幫到你,如果想要全部的源代碼及其課程設計報告,請來我的主頁下載
三大界面圖展示
目錄
1.需求分析. 3
2.數據庫設計以及E-R分析. 4
3.結構設計. 4
(1)表結構設計
(2)相關約束
(3)視圖
(4)存儲過程
(5)觸發器
4.JAVA應用程序端. 9
(1)功能設計
(2)界面設計
5.JAVA應用程序端具體實現. 28
6.總結. 35
一、 需求分析
l 實現題型,題目等基本信息的管理l 實現章節的管理l 實現題型的管理l 能按題型或章節錄入課程的習題l 能夠按照題目編號刪除題目l 創建存儲過程查詢某種題型和各章節的習題數量l 創建視圖查詢各題型的數量詳細信息l 創建視圖查詢各章節的題目數量詳細信息l 創建視圖查看套題匯總詳細信息l 習題題號由系統自動生成,從1開始編號l 可以自動抽題組成套題,習題每抽取一次,要使習題的抽取次數加1(觸發器)l 當題目插入刪除時,自動更改題型和各章節題目數量(觸發器)l 實現學生答題系統,并為其錄入成績信息l 可以查看學生詳細信息l 可以查看已經抽取的套題詳細信息l 建立數據庫相關表之間的參照完整性約束。二、 數據庫設計以及E-R分析(E-R圖下載包里面有)
為了實現學生和老師分別登錄,注冊,多創建了,學生信息和老師信息表為了實現對題目、題型、章節的管理,分別創建了題目、題型、章節表為了記錄已經抽取的套題信息,創建了套題表為了實現當前的抽取的為哪個套題,創建了套題抽取表用于記錄當前已經為第幾套題了(如:A,B,C,D卷)JAVA應用程序端
(1) 功能設計l 學生和老師登錄、注冊(及其容錯)設計l 教師工作服務界面設計查看學生成績實現插入題目實現刪除題目實現題目查詢實現題目信息實現題型管理實現章節管理查看套題信息l 學生答題界面設計
查看自己的成績開始答題l Java界面細節設計
有“<”小按鈕,當鼠標進入和離開時,會發生顏色的變化并且當鼠標點擊時可以返回上一級界面;各按鈕當鼠標進入和離開時,會發生圖片和顏色的變化;各種功能JLabel,當鼠標進入要選擇和離開時會發生明顯的顏色變化;當進行登錄的時候,密碼框用*表示,從而保護信息;每個界面都有與主題相匹配的背景圖界面
1初始程序界面:
2如果這個學生和老師從來沒有進入過這個程序,需要進行注冊:
進入注冊界面:里面有一個下拉列表框可以進行學生和老師注冊身份的選擇
注冊操作(這里以學生注冊的為例,其中學生學號為計科1 2 班學生的,教工號為我自己隨便輸入的一些):像右邊如圖一樣輸入要注冊的用戶和密碼,然后點擊注冊按鈕或者在密碼框直接回車即可
當注冊成功時出現如圖右一樣的結果
看上面兩個運行結果:
容錯處理:當你輸入的用戶名不是數據庫表student或user_teacher中提前錄入的學號或者教工號時,會發生提示錯誤,用戶名不存在(即這個學生或者老師不存在);
當你輸入的用戶名已經注冊時,則也會提出錯誤信息
進入學生答題界面:
查看學生成績:
開始答題(我們這里調用的是數據庫中的抽取套題存儲過程,所以有5道題):
,為他們加入顏色圖片,設置布局,并添加監聽(從而達到當鼠標進入時設置一種顏色圖片,鼠標退出時設置一種顏色圖片),當點擊各自按鈕時彈出對應按鈕功能的彈窗(并為其傳遞一個信息:是哪個按鈕點擊我了,用于判斷是學生登陸還是教師登錄),最后為我們的主JFrame添加背景圖片
學生教師注冊:在類Rigeister中:
這里我們設置的為一個彈窗,依然也是為其設置絕對布局,其中設置一個下拉列表框用于選擇學生注冊和教師注冊;三個label:“用戶:”、“密碼:”、“<”;兩個文本框JTextField 用于輸入用戶名和密碼,和一個注冊JButton,然后為這個注冊按鈕和“<”設置監聽(從而達到當鼠標進入時設置一種顏色圖片,鼠標退出時設置一種顏色圖片),當點擊按鈕時連接數據庫查看這個用戶名是否存在,是否已經注冊,如果注冊成功彈出注冊成功的提示對話框,如果注冊失敗則彈出出錯啦的提示對話框;當點擊“<”時返回上一級,最后為這些組件設置布局,并為這個彈窗添加兩個背景圖片
應用數據庫代碼實現:
String type = register_JBox_type.getSelectedItem().toString(); //獲取下拉列表框中選中的對象的信息String user = register_field_user.getText();String passwd = register_field_passwd.getText();String sql;if(type.equals("學生")) {sql ="select * from student";try {int flag = 0; //用于標識判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("sno").equals(user)){flag = 1;if(rs.getString("passwd") != null) {JOptionPane.showMessageDialog(register_login_button, "用戶已注冊","【出錯啦】",JOptionPane.ERROR_MESSAGE); }else { String sql2 = "update student set passwd=? where sno=?";pst = con.prepareStatement(sql2);pst.setString(2,user);pst.setString(1,passwd);pst.executeUpdate();JOptionPane.showMessageDialog(register_login_button, "注冊成功","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用戶名不存在","【出錯啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();}}if(type.equals("教師")) {sql ="select * from user_teacher";try {int flag = 0; //用于標識判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("id").equals(user)){flag = 1;if(rs.getString("passwd") != null) {JOptionPane.showMessageDialog(register_login_button, "用戶已注冊","【出錯啦】",JOptionPane.ERROR_MESSAGE); }else { Stringsql2 = "update user_teacher set passwd=? where id=?";pst = con.prepareStatement(sql2);pst.setString(2,user);pst.setString(1,passwd);pst.executeUpdate();JOptionPane.showMessageDialog(register_login_button, "注冊","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用戶名不存在","【出錯啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }學生、教師登錄:在類Login中:
我們設置的為一個彈窗,依然也是為其設置絕對布局,其中設置三個label:“用戶:”、“密碼:”、“<”;兩個文本框JTextField 用于輸入用戶名和密碼,和一個登錄JButton,然后為這個登錄按鈕和“<”設置監聽(從而達到當鼠標進入時設置一種顏色圖片,鼠標退出時設置一種顏色圖片),當點擊按鈕時彈出對應按鈕功能的彈窗(并為其傳遞這個用戶名信息,以便為學生登錄后可以查看自己的答題成績),然后連接數據庫查看這個用戶名是否存在,是否注冊,密碼是否正確;當點擊“<”時返回上一級,最后為這些組件設置布局,并為這個彈窗添加兩個背景圖片
應用數據庫代碼實現:
String user = field_user.getText();String passwd = field_passwd.getText();String sql;if(button_text.equals("學生登錄")) {sql ="select * from student";try {int flag = 0; //用于標識判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("sno").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用戶未注冊","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用戶名密碼錯誤","【出錯啦】",JOptionPane.ERROR_MESSAGE);}else {JOptionPane.showMessageDialog(login_button, "登錄成功","OK",JOptionPane.INFORMATION_MESSAGE);new student(field_user.getText()).init();}break;}}if(flag == 0) {JOptionPane.showMessageDialog(login_button, "用戶名不存在","【出錯啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }if(button_text.equals("教師登錄")) {sql ="select * from user_teacher";try {int flag = 0; //用于標識判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("id").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用戶未注冊","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用戶名密碼錯誤","【出錯啦】",JOptionPane.ERROR_MESSAGE);}else{JOptionPane.showMessageDialog(login_button, "登錄成功","OK",JOptionPane.INFORMATION_MESSAGE);new teacher().init();}break;}}if(flag == 0) {JOptionPane.showMessageDialog(login_button, "【出錯啦】","用戶名不存在",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }以下代碼太多就不一一放出來了,用文字邏輯代理
學生答題界面:在類student中:
這里也是彈窗、同理的布局;
其中當點擊學生成績的時候查看學生成績,也就是把從登錄傳遞過來的學號連接數據庫表student查詢該學生的成績;
這里最重要的就是那個學生然后進行答題的,我先在該彈窗,也就是類student中定義了幾個靜態常量
public static String []content; //題目內容public static String []type; //題目類型public static String []answer; //題目答案public static String []answer_; //因為選擇題只需要填A B C D 所以這個為 將選中的單選框的內容的第一個字符作為該選擇題的答案public static float []g; //該題的分值處理方法:當我們點擊開始答題的按鈕標簽時,給它添加一個監聽事件(里面連接數據庫,并調用抽取套題的存儲過程,然后將得到的套題儲存在上面的5個靜態數組中,然后初始值傳入參數為第1題,并在此時new出第一個題目)
如果此時是選擇題,則把數組content[n]中的內容按照空格進行分割(因為為了得出A B C D選項我提前在數據庫表中錄入內容的時候特意在其中設置了空格),第一個為題目,其余四個為單選框中的文本
如果是判斷題,直接在單選框中設置兩個選項,對、錯
如果是計算題或者填空題,則直接設置一個文本框,讓學生把答案填入其中即可
接著在點擊下一題時,我們先連接數據庫,把學生選擇的答案與正確答案想比較,如果正確就為學生加相應的分值,否則則不做操作,接著我們再new 出下一道題
如果是已經到了第五題,則判斷完正確后,直接退出
數據庫代碼實現:
if(student.type[n].equals("判斷題")||student.type[n].equals("選擇題")) {String a = group.getSelectedCheckbox().getLabel().substring(0,1);if(a.equals(student.answer_[n])) {sql = "update student set total_score = total_score + ? where sno = ?";try {pst = con.prepareStatement(sql);pst.setFloat(1,student.g[n]);pst.setString(2,student_user);pst.executeUpdate(); } catch (SQLException e1) {e1.printStackTrace();} }}if(student.type[n].equals("計算題")||student.type[n].equals("填空題")) {String a = huida.getText();if(a.equals(student.answer[n])) {sql = "update student set total_score = total_score + ? where sno = ?";try {pst = con.prepareStatement(sql);pst.setFloat(1,student.g[n]);pst.setString(2,student_user);pst.executeUpdate(); } catch (SQLException e1) {e1.printStackTrace();} } }if(n<4) new start_promble(student_user,n+1).init();教師工作服務界面在:teacher類中:
一樣這里也是彈窗、同樣的布局,只是實現的功能不一樣而已:
查看學生成績 :這個我就是自己用JTabel、DefaultTableModel,然后連接數據庫查詢student表,最后把信息用彈窗顯示出來
插入題目:這個我設置了四個輸入框:題目內容、題目答案、題目類型、題目章節。而題目編號因為為自增列,所以不用教師輸入;題目被抽取的次數用默認值0,因為他還沒有被抽取。當點擊確定時insert into進problem表中
刪除題目:這個我直接設置了一個輸入題目編號的輸入框,因為題目編號在problem表中為主鍵。當點擊確定時delete這個problem表中這條數據
題目查詢:這里分為題型查詢和章節查詢,這次連接數據庫后分別調用的兩個存儲過程find_type_promble、find_chapter_promble,當回車時,信息顯示在題目數量那個文本框中
題型管理:這里分為題型信息表查詢和插入題型,題型查詢直接select promble_type表;插入題型有兩個數輸入框分別為:題目類型、題目分數,然后insert into promble_type表
章節管理:這里分為章節信息表查詢和插入題型,題型查詢直接select chapter表;插入題型有兩個數輸入框分別為:題目類型、題目分數,然后insert into chapter表
套題信息:這里分為套題信息表查詢和套題匯總查詢,套題匯總查詢是直接select question表 ; 套題匯總查詢是直接 select question_view 視圖
總結
以上是生活随笔為你收集整理的数据库课程设计-题库管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用3DsMax制作笔记本电脑
- 下一篇: 学校题库管理系统需求分析