日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

数据库课程设计-题库管理系统

發(fā)布時(shí)間:2024/8/1 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库课程设计-题库管理系统 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

## 數(shù)據(jù)庫課程設(shè)計(jì)-題庫管理系統(tǒng)*

這里寫我的思路及其功能展示,希望幫到你,如果想要全部的源代碼及其課程設(shè)計(jì)報(bào)告,請(qǐng)來我的主頁下載

三大界面圖展示



目錄
1.需求分析. 3
2.數(shù)據(jù)庫設(shè)計(jì)以及E-R分析. 4
3.結(jié)構(gòu)設(shè)計(jì). 4
(1)表結(jié)構(gòu)設(shè)計(jì)
(2)相關(guān)約束
(3)視圖
(4)存儲(chǔ)過程
(5)觸發(fā)器
4.JAVA應(yīng)用程序端. 9
(1)功能設(shè)計(jì)
(2)界面設(shè)計(jì)
5.JAVA應(yīng)用程序端具體實(shí)現(xiàn). 28
6.總結(jié). 35

一、 需求分析

l 實(shí)現(xiàn)題型,題目等基本信息的管理l 實(shí)現(xiàn)章節(jié)的管理l 實(shí)現(xiàn)題型的管理l 能按題型或章節(jié)錄入課程的習(xí)題l 能夠按照題目編號(hào)刪除題目l 創(chuàng)建存儲(chǔ)過程查詢某種題型和各章節(jié)的習(xí)題數(shù)量l 創(chuàng)建視圖查詢各題型的數(shù)量詳細(xì)信息l 創(chuàng)建視圖查詢各章節(jié)的題目數(shù)量詳細(xì)信息l 創(chuàng)建視圖查看套題匯總詳細(xì)信息l 習(xí)題題號(hào)由系統(tǒng)自動(dòng)生成,從1開始編號(hào)l 可以自動(dòng)抽題組成套題,習(xí)題每抽取一次,要使習(xí)題的抽取次數(shù)加1(觸發(fā)器)l 當(dāng)題目插入刪除時(shí),自動(dòng)更改題型和各章節(jié)題目數(shù)量(觸發(fā)器)l 實(shí)現(xiàn)學(xué)生答題系統(tǒng),并為其錄入成績(jī)信息l 可以查看學(xué)生詳細(xì)信息l 可以查看已經(jīng)抽取的套題詳細(xì)信息l 建立數(shù)據(jù)庫相關(guān)表之間的參照完整性約束。

二、 數(shù)據(jù)庫設(shè)計(jì)以及E-R分析(E-R圖下載包里面有)

為了實(shí)現(xiàn)學(xué)生和老師分別登錄,注冊(cè),多創(chuàng)建了,學(xué)生信息和老師信息表為了實(shí)現(xiàn)對(duì)題目、題型、章節(jié)的管理,分別創(chuàng)建了題目、題型、章節(jié)表為了記錄已經(jīng)抽取的套題信息,創(chuàng)建了套題表為了實(shí)現(xiàn)當(dāng)前的抽取的為哪個(gè)套題,創(chuàng)建了套題抽取表用于記錄當(dāng)前已經(jīng)為第幾套題了(如:A,B,C,D卷)

JAVA應(yīng)用程序端

(1) 功能設(shè)計(jì)l 學(xué)生和老師登錄、注冊(cè)(及其容錯(cuò))設(shè)計(jì)l 教師工作服務(wù)界面設(shè)計(jì)查看學(xué)生成績(jī)實(shí)現(xiàn)插入題目實(shí)現(xiàn)刪除題目實(shí)現(xiàn)題目查詢實(shí)現(xiàn)題目信息實(shí)現(xiàn)題型管理實(shí)現(xiàn)章節(jié)管理查看套題信息

l 學(xué)生答題界面設(shè)計(jì)

查看自己的成績(jī)開始答題

l Java界面細(xì)節(jié)設(shè)計(jì)

有“<”小按鈕,當(dāng)鼠標(biāo)進(jìn)入和離開時(shí),會(huì)發(fā)生顏色的變化并且當(dāng)鼠標(biāo)點(diǎn)擊時(shí)可以返回上一級(jí)界面;各按鈕當(dāng)鼠標(biāo)進(jìn)入和離開時(shí),會(huì)發(fā)生圖片和顏色的變化;各種功能JLabel,當(dāng)鼠標(biāo)進(jìn)入要選擇和離開時(shí)會(huì)發(fā)生明顯的顏色變化;當(dāng)進(jìn)行登錄的時(shí)候,密碼框用*表示,從而保護(hù)信息;每個(gè)界面都有與主題相匹配的背景圖

界面

1初始程序界面:

2如果這個(gè)學(xué)生和老師從來沒有進(jìn)入過這個(gè)程序,需要進(jìn)行注冊(cè):

進(jìn)入注冊(cè)界面:里面有一個(gè)下拉列表框可以進(jìn)行學(xué)生和老師注冊(cè)身份的選擇

注冊(cè)操作(這里以學(xué)生注冊(cè)的為例,其中學(xué)生學(xué)號(hào)為計(jì)科1 2 班學(xué)生的,教工號(hào)為我自己隨便輸入的一些):像右邊如圖一樣輸入要注冊(cè)的用戶和密碼,然后點(diǎn)擊注冊(cè)按鈕或者在密碼框直接回車即可

當(dāng)注冊(cè)成功時(shí)出現(xiàn)如圖右一樣的結(jié)果



看上面兩個(gè)運(yùn)行結(jié)果:

容錯(cuò)處理:當(dāng)你輸入的用戶名不是數(shù)據(jù)庫表student或user_teacher中提前錄入的學(xué)號(hào)或者教工號(hào)時(shí),會(huì)發(fā)生提示錯(cuò)誤,用戶名不存在(即這個(gè)學(xué)生或者老師不存在);

當(dāng)你輸入的用戶名已經(jīng)注冊(cè)時(shí),則也會(huì)提出錯(cuò)誤信息

進(jìn)入學(xué)生答題界面:

查看學(xué)生成績(jī):

開始答題(我們這里調(diào)用的是數(shù)據(jù)庫中的抽取套題存儲(chǔ)過程,所以有5道題):


![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200710203535135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NhaW5pYW8xXw==,size_16,color_FFFFFF,t_70教師服務(wù)工作界面

JAVA應(yīng)用程序端具體實(shí)現(xiàn)

初始界面:在類subject_system 中,窗體JFrame

先設(shè)置整體面板為絕對(duì)布局,然后設(shè)置三個(gè)按鈕:學(xué)生登錄、教師登錄,注冊(cè)(button1,button2,button3),為他們加入顏色圖片,設(shè)置布局,并添加監(jiān)聽(從而達(dá)到當(dāng)鼠標(biāo)進(jìn)入時(shí)設(shè)置一種顏色圖片,鼠標(biāo)退出時(shí)設(shè)置一種顏色圖片),當(dāng)點(diǎn)擊各自按鈕時(shí)彈出對(duì)應(yīng)按鈕功能的彈窗(并為其傳遞一個(gè)信息:是哪個(gè)按鈕點(diǎn)擊我了,用于判斷是學(xué)生登陸還是教師登錄),最后為我們的主JFrame添加背景圖片

學(xué)生教師注冊(cè):在類Rigeister中:

這里我們?cè)O(shè)置的為一個(gè)彈窗,依然也是為其設(shè)置絕對(duì)布局,其中設(shè)置一個(gè)下拉列表框用于選擇學(xué)生注冊(cè)和教師注冊(cè);三個(gè)label:“用戶:”、“密碼:”、“<”;兩個(gè)文本框JTextField 用于輸入用戶名和密碼,和一個(gè)注冊(cè)JButton,然后為這個(gè)注冊(cè)按鈕和“<”設(shè)置監(jiān)聽(從而達(dá)到當(dāng)鼠標(biāo)進(jìn)入時(shí)設(shè)置一種顏色圖片,鼠標(biāo)退出時(shí)設(shè)置一種顏色圖片),當(dāng)點(diǎn)擊按鈕時(shí)連接數(shù)據(jù)庫查看這個(gè)用戶名是否存在,是否已經(jīng)注冊(cè),如果注冊(cè)成功彈出注冊(cè)成功的提示對(duì)話框,如果注冊(cè)失敗則彈出出錯(cuò)啦的提示對(duì)話框;當(dāng)點(diǎn)擊“<”時(shí)返回上一級(jí),最后為這些組件設(shè)置布局,并為這個(gè)彈窗添加兩個(gè)背景圖片

應(yīng)用數(shù)據(jù)庫代碼實(shí)現(xiàn):

String type = register_JBox_type.getSelectedItem().toString(); //獲取下拉列表框中選中的對(duì)象的信息String user = register_field_user.getText();String passwd = register_field_passwd.getText();String sql;if(type.equals("學(xué)生")) {sql ="select * from student";try {int flag = 0; //用于標(biāo)識(shí)判斷輸入的用戶名是否存在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, "用戶已注冊(cè)","【出錯(cuò)啦】",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, "注冊(cè)成功","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用戶名不存在","【出錯(cuò)啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();}}if(type.equals("教師")) {sql ="select * from user_teacher";try {int flag = 0; //用于標(biāo)識(shí)判斷輸入的用戶名是否存在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, "用戶已注冊(cè)","【出錯(cuò)啦】",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, "注冊(cè)","OK",JOptionPane.INFORMATION_MESSAGE);}break;}}if(flag == 0) {JOptionPane.showMessageDialog(register_login_button, "用戶名不存在","【出錯(cuò)啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }

學(xué)生、教師登錄:在類Login中:

我們?cè)O(shè)置的為一個(gè)彈窗,依然也是為其設(shè)置絕對(duì)布局,其中設(shè)置三個(gè)label:“用戶:”、“密碼:”、“<”;兩個(gè)文本框JTextField 用于輸入用戶名和密碼,和一個(gè)登錄JButton,然后為這個(gè)登錄按鈕和“<”設(shè)置監(jiān)聽(從而達(dá)到當(dāng)鼠標(biāo)進(jìn)入時(shí)設(shè)置一種顏色圖片,鼠標(biāo)退出時(shí)設(shè)置一種顏色圖片),當(dāng)點(diǎn)擊按鈕時(shí)彈出對(duì)應(yīng)按鈕功能的彈窗(并為其傳遞這個(gè)用戶名信息,以便為學(xué)生登錄后可以查看自己的答題成績(jī)),然后連接數(shù)據(jù)庫查看這個(gè)用戶名是否存在,是否注冊(cè),密碼是否正確;當(dāng)點(diǎn)擊“<”時(shí)返回上一級(jí),最后為這些組件設(shè)置布局,并為這個(gè)彈窗添加兩個(gè)背景圖片

應(yīng)用數(shù)據(jù)庫代碼實(shí)現(xiàn):

String user = field_user.getText();String passwd = field_passwd.getText();String sql;if(button_text.equals("學(xué)生登錄")) {sql ="select * from student";try {int flag = 0; //用于標(biāo)識(shí)判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("sno").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用戶未注冊(cè)","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用戶名密碼錯(cuò)誤","【出錯(cuò)啦】",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, "用戶名不存在","【出錯(cuò)啦】",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }if(button_text.equals("教師登錄")) {sql ="select * from user_teacher";try {int flag = 0; //用于標(biāo)識(shí)判斷輸入的用戶名是否存在rs = st.executeQuery(sql);while(rs.next()) {if(rs.getString("id").equals(user)){flag = 1;if(rs.getString("passwd") == null) {JOptionPane.showOptionDialog(login_button, "用戶未注冊(cè)","警告",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null,null,"OK");}else if(!rs.getString("passwd").equals(passwd)) {JOptionPane.showMessageDialog(login_button, "用戶名密碼錯(cuò)誤","【出錯(cuò)啦】",JOptionPane.ERROR_MESSAGE);}else{JOptionPane.showMessageDialog(login_button, "登錄成功","OK",JOptionPane.INFORMATION_MESSAGE);new teacher().init();}break;}}if(flag == 0) {JOptionPane.showMessageDialog(login_button, "【出錯(cuò)啦】","用戶名不存在",JOptionPane.ERROR_MESSAGE); }} catch (SQLException e1) {e1.printStackTrace();} }

以下代碼太多就不一一放出來了,用文字邏輯代理

學(xué)生答題界面:在類student中:

這里也是彈窗、同理的布局;

其中當(dāng)點(diǎn)擊學(xué)生成績(jī)的時(shí)候查看學(xué)生成績(jī),也就是把從登錄傳遞過來的學(xué)號(hào)連接數(shù)據(jù)庫表student查詢?cè)搶W(xué)生的成績(jī);

這里最重要的就是那個(gè)學(xué)生然后進(jìn)行答題的,我先在該彈窗,也就是類student中定義了幾個(gè)靜態(tài)常量

public static String []content; //題目?jī)?nèi)容public static String []type; //題目類型public static String []answer; //題目答案public static String []answer_; //因?yàn)檫x擇題只需要填A(yù) B C D 所以這個(gè)為 將選中的單選框的內(nèi)容的第一個(gè)字符作為該選擇題的答案public static float []g; //該題的分值

處理方法:當(dāng)我們點(diǎn)擊開始答題的按鈕標(biāo)簽時(shí),給它添加一個(gè)監(jiān)聽事件(里面連接數(shù)據(jù)庫,并調(diào)用抽取套題的存儲(chǔ)過程,然后將得到的套題儲(chǔ)存在上面的5個(gè)靜態(tài)數(shù)組中,然后初始值傳入?yún)?shù)為第1題,并在此時(shí)new出第一個(gè)題目)

如果此時(shí)是選擇題,則把數(shù)組content[n]中的內(nèi)容按照空格進(jìn)行分割(因?yàn)闉榱说贸鯝 B C D選項(xiàng)我提前在數(shù)據(jù)庫表中錄入內(nèi)容的時(shí)候特意在其中設(shè)置了空格),第一個(gè)為題目,其余四個(gè)為單選框中的文本

如果是判斷題,直接在單選框中設(shè)置兩個(gè)選項(xiàng),對(duì)、錯(cuò)

如果是計(jì)算題或者填空題,則直接設(shè)置一個(gè)文本框,讓學(xué)生把答案填入其中即可

接著在點(diǎn)擊下一題時(shí),我們先連接數(shù)據(jù)庫,把學(xué)生選擇的答案與正確答案想比較,如果正確就為學(xué)生加相應(yīng)的分值,否則則不做操作,接著我們?cè)賜ew 出下一道題

如果是已經(jīng)到了第五題,則判斷完正確后,直接退出

數(shù)據(jù)庫代碼實(shí)現(xiàn):

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("計(jì)算題")||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();

教師工作服務(wù)界面在:teacher類中:

一樣這里也是彈窗、同樣的布局,只是實(shí)現(xiàn)的功能不一樣而已:

查看學(xué)生成績(jī) :這個(gè)我就是自己用JTabel、DefaultTableModel,然后連接數(shù)據(jù)庫查詢student表,最后把信息用彈窗顯示出來

插入題目:這個(gè)我設(shè)置了四個(gè)輸入框:題目?jī)?nèi)容、題目答案、題目類型、題目章節(jié)。而題目編號(hào)因?yàn)闉樽栽隽?#xff0c;所以不用教師輸入;題目被抽取的次數(shù)用默認(rèn)值0,因?yàn)樗€沒有被抽取。當(dāng)點(diǎn)擊確定時(shí)insert into進(jìn)problem表中

刪除題目:這個(gè)我直接設(shè)置了一個(gè)輸入題目編號(hào)的輸入框,因?yàn)轭}目編號(hào)在problem表中為主鍵。當(dāng)點(diǎn)擊確定時(shí)delete這個(gè)problem表中這條數(shù)據(jù)

題目查詢:這里分為題型查詢和章節(jié)查詢,這次連接數(shù)據(jù)庫后分別調(diào)用的兩個(gè)存儲(chǔ)過程find_type_promble、find_chapter_promble,當(dāng)回車時(shí),信息顯示在題目數(shù)量那個(gè)文本框中

題型管理:這里分為題型信息表查詢和插入題型,題型查詢直接select promble_type表;插入題型有兩個(gè)數(shù)輸入框分別為:題目類型、題目分?jǐn)?shù),然后insert into promble_type表

章節(jié)管理:這里分為章節(jié)信息表查詢和插入題型,題型查詢直接select chapter表;插入題型有兩個(gè)數(shù)輸入框分別為:題目類型、題目分?jǐn)?shù),然后insert into chapter表

套題信息:這里分為套題信息表查詢和套題匯總查詢,套題匯總查詢是直接select question表 ; 套題匯總查詢是直接 select question_view 視圖

總結(jié)

以上是生活随笔為你收集整理的数据库课程设计-题库管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久精品国产免费看久久精品 | 国产又爽又黄又嫩又猛又粗 | 亚洲av成人精品午夜一区二区 | 粉嫩精品久久99综合一区 | 成人免费看片又大又黄 | 四色在线| 欧美一区二区三区在线视频 | 欧美日韩亚洲国产精品 | 波多野在线观看 | 国产精品九 | 四虎成人免费视频 | 国产一二三在线观看 | 好吊操这里只有精品 | 成人a免费 | h无码动漫在线观看 | 手机在线播放av | 一级女性全黄久久生活片免费 | 蜜桃av网站 | 99国产精品视频免费观看一公开 | 国产传媒一区二区三区 | 中文av资源 | 尹人av| 中文天堂在线播放 | 国产一级一区二区 | 日韩高清影视在线观看 | 国产免费av一区二区 | 久久久精品网站 | 风间由美一区二区 | 香蕉国产在线观看 | 中国性老太hd大全69 | 96国产在线| 国产精品福利一区 | 日韩在线观看免费av | 国产一区在线播放 | 免费看三级黄色片 | 熟女自拍一区 | 午夜特级毛片 | 亚洲欧美成人综合 | 亚洲性生活大片 | 成人欧美一区二区三区黑人动态图 | 夜间福利在线 | 日韩激情图片 | 亚洲视频免费在线 | 久久躁日日躁aaaaxxxx | 亚洲女人初尝黑人巨大 | 蜜色视频 | 99精品国自产在线 | 青娱乐91| 国产精品第十页 | 一个人看的毛片 | 伊人久久九 | 91口爆一区二区三区在线 | 欧美性jizz18性欧美 | 色综合久久88色综合天天免费 | a网站在线| 欧美高大丰满少妇xxxx | 免费黄色看片 | 亚洲激情欧美色图 | 涩涩久久 | jvid乐乐| 日韩精品中文在线 | 久草中文在线视频 | av不卡一区二区 | 女生张开腿让男生插 | 热播网| 色综合中文网 | 激情四射av | 四川丰满少妇被弄到高潮 | 亚洲精品视频免费看 | 精品性久久 | 永久免费看mv网站入口78 | 污夜影院| 人妻体体内射精一区二区 | 久久久免费观看 | 超碰com| 丝袜人妻一区 | 国产极品一区二区 | 视频一二区 | av免播放器在线观看 | 九色视频偷拍少妇的秘密 | 日韩1区2区3区 | 6080电视影片在线观看 | 色播99| 国产大学生视频 | 极品少妇在线观看 | 色妞色| 国产日韩一级片 | 18禁肉肉无遮挡无码网站 | 椎名由奈在线观看 | 国产黄a三级三级三级看三级男男 | 久久精品1| 日韩欧美中文 | 国产精品www | 国产又爽又黄又嫩又猛又粗 | 99视频久久 | 人人妻人人玩人人澡人人爽 | 色哟哟视频在线观看 | 国产精品免费视频一区 | 男ji大巴进入女人视频 |