《數(shù)據(jù)庫信息管理系統(tǒng)》課程設(shè)計報告學(xué)生成績管理系統(tǒng)
《《數(shù)據(jù)庫信息管理系統(tǒng)》課程設(shè)計報告學(xué)生成績管理系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫信息管理系統(tǒng)》課程設(shè)計報告學(xué)生成績管理系統(tǒng)(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、數(shù)據(jù)庫開發(fā)與實踐 《數(shù)據(jù)庫信息管理系統(tǒng)》 課程設(shè)計報告 學(xué)院:現(xiàn)代科技學(xué)院 專業(yè):計算機科學(xué)與技術(shù) 班級:08-3班 姓名: 學(xué)號: 指導(dǎo)教師: 同組成員: 2011年7月1日 一.開發(fā)背景及目的 學(xué)生成績管理系統(tǒng)是一個教育單位不可缺少的部分,它的內(nèi)容對于學(xué)校的決策者和管理者來說都至關(guān)重要,所以學(xué)生成績管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段。但一直以來人們使用傳統(tǒng)人工的方式管理文件學(xué)生成績,這種管理方式存在著許多缺點,如:效率低、保密性差,另外時間一長,將產(chǎn)生大量的文件和數(shù)據(jù),這對于查找、更新和維護都帶來了不少的
2、困難。 隨著科學(xué)技術(shù)的不斷提高,計算機科學(xué)日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領(lǐng)域并發(fā)揮著越來越重要的作用。 作為計算機應(yīng)用的一部分,使用計算機對學(xué)生成績信息進行管理,具有手工管理所無法比擬的優(yōu)點.例如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高學(xué)生成績管理的效率,也是企業(yè)的科學(xué)化、正規(guī)化管理,與世界接軌的重要條件。。 通過調(diào)研目前教學(xué)管理系統(tǒng)中的成績管理子系統(tǒng),了解成績管理子系統(tǒng)的業(yè)務(wù)流程;通過分析比較,結(jié)合用戶對成績管理子系統(tǒng)的改進意見與實現(xiàn)情況,運用面向?qū)ο笏枷敕椒ǎO(shè)計和實現(xiàn)一個滿足功能和性能,并有所創(chuàng)新的
3、成績管理子系統(tǒng),以提高成績管理的自動化、友好性等。本系統(tǒng)基于oracle10數(shù)據(jù)庫和前臺java語言圖形界面設(shè)計,并且通過odbc進行后臺數(shù)據(jù)庫和前臺界面的連接。 二.?dāng)?shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫設(shè)計(后臺設(shè)計) 2.1由需求分析,E-R圖如下: 2.2數(shù)據(jù)結(jié)構(gòu) 學(xué)生管理={學(xué)籍,學(xué)生學(xué)籍,組成:{學(xué)號,姓名,性別,出生日期,班級,電話}} 班級管理={班級,班級情況,組成:{班號,年級,班主任,教室}} 課程管理={課程,課程分配,組成:{課程號,課程名字,課程形式,備注}} 年級課程={年級課程,年級課程分配,組成:{年級,課程號}} 成績={成績,成績
4、情況,組成:{考試學(xué)期,學(xué)號,課程名字,成績,評語分級}} 用戶={用戶,用戶管理,組成:{用戶名,口令,權(quán)限}} 2.3由E-R圖,有如下至少滿足3NF的的關(guān)系模式 學(xué)生(學(xué)號,姓名,性別,出生日期,班級,電話); 班級(班號,年級,班主任,教室); 課程(課程號,課程名字,課程形式,備注); 年級課程(年級,課程號); 成績(考試學(xué)期,學(xué)號,課程名字,成績,評語分級); 2.4數(shù)據(jù)流 數(shù)據(jù)流如下圖所示: 2.5系統(tǒng)功能結(jié)構(gòu)圖 2.6流程圖 查詢 用戶登入 數(shù)據(jù)庫后臺 插入 管理 2.7數(shù)據(jù)庫設(shè)計
5、 本例采用oracle10作為后臺數(shù)據(jù)庫。 2.7.1模型設(shè)計 用PowerDesigner畫出對應(yīng)的CDM圖,有系統(tǒng)自動生成PDM圖 PDM圖如下: 2.7.2建立數(shù)據(jù)庫表 學(xué)生表: CREATE TABLE student( student_ID int PRIMARY KEY, student_Name varchar(50) UNIQUE, student_Sex char(2), born_Date datetime, class_NO int, tele_Number varchar(50) ) 班級表: CREATE TABL
6、E class( class_No int PRIMARY KEY, grade int, director char(10), classroom_No char(10) ) 課程表: CREATE TABLE course( course_No int PRIMARY KEY, course_Name varchar(50), course_Type char(10), course_Des char(50) ) 課程年級表: CREATE TABLE gradecourse( grade char(10), course_Name c
7、har(20) ) 成績表 CREATE TABLE result( exam_No char(10), student_ID int, course_Name varchar(50), result float, level char(10) ) 2.7.3建立數(shù)據(jù)庫觸發(fā)器語句: create table student_before_log( student_id number(9,0), student_name varchar2(50), student_sex char(4), born_date d
8、ate, class_no number(4,0), tele_number varchar2(50), ru_date date, address varchar2(50), when date ); create or replace trigger biufer_student before insert or update or delete on student for each row begin insert into student_before_log values (:old.student_id,:old.
9、student_name,:old.student_sex,:old.born_date,:old.class_no,:old.tele_number,:old.ru_date,:old.address,sysdate); end; create table class_before_log( class_No number(4,0), grade number(20,0), director char(10), classroom_No char(10), when date ); create or replace trig
10、ger biufer_class before insert or update or delete on class for each row begin insert into class_before_log values (:old.class_No,:old.grade,:old.director ,:old.classroom_No,sysdate); end; create table course_before_log( course_No number(20,0), course_name varchar2(50), cour
11、se_Type varchar2(50), course_des char(50), when date ); create or replace trigger biufer_course before insert or update or delete on course for each row begin insert into class_before_log values (:old.course_No,:old.course_name,:old.course_Type ,:old.course_des,sysdate); end; c
12、reate table result_before_log( exam_No char(10), student_id number(9,0), student_name varchar2(50), class_No number(4,0), course_name varchar2(50), result binary_float , when date ); create or replace trigger biufer_result before insert or update or delete on r
13、esult for each row begin insert into result_before_log values (:old.exam_No,:old.student_id,:old.student_name ,:old.class_No,:old.course_name,:old.result,sysdate); end; 建立的表如下圖: 3. 建立用戶界面(前臺設(shè)計) 本實驗采用odbc進行前臺java語言和后臺oracle數(shù)據(jù)庫的鏈接,連接過程如下: 3.1前臺程序,用戶登陸連接數(shù)據(jù)庫代碼:
14、 import java.sql.*; public class qtdm { public static void main(String[] args) throws SQLException, ClassNotFoundException { //定義了數(shù)據(jù)庫連接串 String dbUrl = "jdbc:odbc:test"; //數(shù)據(jù)庫的用戶名 String user = "test"; //數(shù)據(jù)庫的用戶口令 String password = "test"; // 加載jdbc-odbc bridge驅(qū)動程序 Class.forNam
15、e("sun.jdbc.odbc.JdbcOdbcDriver"); // 與url指定的數(shù)據(jù)源建立連接 Connection conn = DriverManager.getConnection(dbUrl, user, password); //采用Statement進行查詢 Statement state = conn.createStatement(); System.out.println("sucessful" ); state.close(); conn.close(); } // 關(guān)閉Statement,其上的ResultSet也將關(guān)
16、閉 } 3.2插入信息代碼: import java.awt.CardLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; impor
17、t javax.swing.JMenuItem; public class xueshengjm extends JFrame implements ActionListener{ JMenuBar jm = new JMenuBar(); JMenu jm1 = new JMenu("信息"); JMenu jm2 = new JMenu("成績"); JMenuItem jmi1 = new JMenuItem("錄入"); JMenuItem jmi2 = new JMenuItem("查詢"); JMenuItem jmi21 = new JMenuItem(
18、"錄入"); JMenuItem jmi22 = new JMenuItem("查詢"); public xueshengjm(){ this.setTitle("老師界面"); this.setLayout(null); this.setJMenuBar(jm); jm.add(jm1); jm.add(jm2); jm1.add(jmi1); jm1.add(jmi2); JLabel JL1 = new JLabel("歡迎進入老師查詢界面"); jmi1.addActionListener(this); jmi2.addActionLis
19、tener(this); jm2.add(jmi21); jm2.add(jmi22); jm2.addActionListener(this); jmi2.addActionListener(this); jmi21.addActionListener(this); this.add(JL1); JL1.setForeground(Color.red); JL1.setFont(new java.awt.Font("宋體",Font.PLAIN,20)); JL1.setBounds(150, 80, 200, 200)
20、; this.setBounds(400, 250, 500, 400); this.setVisible(true); } public void actionPerformed(ActionEvent e){ } public static void main(String agrs[]){ new xueshengjm(); } } 3.3添加學(xué)生信息代碼: import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; impor
21、t java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.ButtonGroup; import j
22、avax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JRadioButton; import javax.swing.JTextField; public class chaxun extends JFrame implements ActionListener { JLabel JL = new JLabel("查詢成績",JLabel.CENTER); JLab
23、el JLNumber = new JLabel("請輸入學(xué)號:"); JTextField JTNumber =new JTextField(); JButton JBset =new JButton("查詢"); JButton JBnext = new JButton("重置"); JButton JBcr = new JButton("插入"); JLabel JLName = new JLabel("姓名"); JTextField JTName = new JTextField();
24、 JLabel JLClass = new JLabel("班級"); JTextField JTClass = new JTextField(); JLabel JL1 = new JLabel("數(shù)學(xué)"); JTextField JT1 = new JTextField(); JLabel JL2 = new JLabel("語文"); JTextField JT2 =new JTextField(); String sql= "" ; public chaxun(){
25、 this.setTitle("查詢成績"); this.setLayout(null); JL.setForeground(Color.red); JL.setFont(new java.awt.Font("宋體",Font.PLAIN,19)); JL.setBounds(100, 30, 200, 40); this.add(JL); JLNumber.setBounds(100, 80, 100, 20); this.add(JLNumber); JTNumber.setBounds(200, 80, 80, 20); this.add(JTNumbe
26、r); JLName.setBounds(100, 160, 80, 20); this.add(JLName); JTName.setBounds(200, 160, 80, 20); this.add(JTName); JL2.setBounds(100, 240, 100, 20); this.add(JL2); JT2.setBounds(200, 240, 80, 20); this.add(JT2); JLClass.setBounds(100, 280, 60, 20); this.add(JLClass); JTClass.setBou
27、nds(200, 280, 80, 20); this.add(JTClass); JL1.setBounds(100, 320, 60, 20); this.add(JL1); JT1.setBounds(200, 320, 80, 20); this.add(JT1); JBset.setBounds(80, 120, 90, 20); this.add(JBset); JBset.addActionListener(this); JBnext.setBounds(190, 120, 90, 20); this.add(JBnext); JBnext.ad
28、dActionListener(this); JBcr.setBounds(300, 120, 90, 20); this.add(JBcr); JBcr.addActionListener(this); this.setBounds(400, 250, 500, 400); this.setVisible(true); //通過內(nèi)部內(nèi)重寫關(guān)閉的方法 } public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSour
29、ce()==JBcr){ //處理登錄事件; this.hide(); xiugai cx=new xiugai();} if(e.getSource()==JBset){ String snumber =JTNumber.getText(); String sname=JTName.getText(); String sclass=JTClass.getText(); String ssex ="女"; String sbir =JT2.getText(); String scollect=JT1.getText(
30、); sql="select*from student where Id="+snumber+""; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection cot = DriverManager.getConnection("jdbc:odbc://student","root","123"); Statement stm =cot.createStatement();//提交查巡 ResultSet rs =stm.executeQuer
31、y(sql);//取得查巡結(jié)果 if(rs.next()) { String name =rs.getString(2); JTName.setText(name); String clas =rs.getString(3); JTClass.setText(clas); String collect=rs.getString(5); JT1.setText(collect); String bir = rs.getString(6);
32、 JT2.setText(bir); //對數(shù)苦苦進行查詢 int n = stm.executeUpdate(sql); if(n>0) JOptionPane.showMessageDialog(null, "查詢成功"); else JOptionPane.showMessageDialog(null, "查詢失敗"); }//通過showmessagedialog()打印信息 else { JOptionPane.showMessageDialog(null
33、, "次用戶不在"); } } catch(Exception ee) { } } if(e.getSource()==JBnext) { JTNumber.setText(null); JTName.setText(null); JTClass.setText(null); JT1.setText(null); JT2.setText(null); } } public static void qtlj(String[] args)
34、 throws SQLException, ClassNotFoundException { //定義了數(shù)據(jù)庫連接串 String dbUrl = "jdbc:odbc:test"; //數(shù)據(jù)庫的用戶名 String user = "test"; //數(shù)據(jù)庫的用戶口令 String password = "test"; // 加載jdbc-odbc bridge驅(qū)動程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 與url指定的數(shù)據(jù)源建立連接 Connection conn =
35、DriverManager.getConnection(dbUrl, user, password); //采用Statement進行查詢 Statement state = conn.createStatement(); System.out.println("sucessful" ); } public static void main(String[] args) { new chaxun(); } } 3.4修改學(xué)生信息代碼: import java.awt.Color; import java.sql.*; impor
36、t java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; impor
37、t javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JRadioButton; import javax.swing.JTextField; public class xiugai extends JFrame implements ActionListener { JLabel JL = new
38、JLabel("添加基本信息",JLabel.CENTER); JLabel JLNumber =new JLabel ("學(xué)號:"); JTextField JTNumber = new JTextField(); JLabel JLName = new JLabel("姓名:"); JTextField JTName = new JTextField(); JLabel JLClass = new JLabel("班級:"); JTextField JTClass = new JTextField(); JLabel JLsex = new JLabel("性別:
39、"); ButtonGroup BG = new ButtonGroup(); JRadioButton JRB1 = new JRadioButton("男"); JRadioButton JRB2 = new JRadioButton("女"); JLabel JL1 = new JLabel("學(xué)院:"); JTextField JT1 = new JTextField(); JButton JBAdd = new JButton("添加"); JButton JBNext = new JButton("重置"); String sql=""; publ
40、ic xiugai() { this.setTitle("添加學(xué)生信息"); this.setLayout(null); JL.setForeground(Color.red); JL.setBounds(100, 30, 200, 40); this.add(JL); JLNumber.setBounds(100, 80, 100, 20); this.add(JLNumber); JTNumber.setBounds(200, 80, 80, 20); this.add(JTNumber); JLName.setBounds(
41、100, 120, 60, 20); this.add(JLName); JTName.setBounds(200, 120, 80, 20); this.add(JTName); JLsex.setBounds(100, 160, 100, 20); this.add(JLsex); JRB1.setBounds(200, 160, 40, 20); JRB2.setBounds(300, 160, 40, 20); this.add(JRB1); this.add(JRB2); BG.add(JRB1); BG.add(JRB2
42、); JLClass.setBounds(100, 240, 60, 20); this.add(JLClass); JTClass.setBounds(200, 240, 80, 20); this.add(JTClass); JL1.setBounds(100, 280, 60, 20); this.add(JL1); JT1.setBounds(200, 280, 100, 20); this.add(JT1); JBAdd.setBounds(80, 320, 90, 20); this.add(JBAdd);
43、 JBAdd.addActionListener(this); JBNext.setBounds(190, 320, 90, 20); this.add(JBNext); JBNext.addActionListener(this); this.setBounds(400, 250, 500, 400); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==JBAdd){ String snumber= JT
44、Number.getText(); String sname = JTName.getText(); String sclass = JTClass.getText(); String ssex ="女"; if(JRB1.isSelected()) ssex="男"; String scollect = JT1.getText(); sql="select * from student where snumber ="+snumber+""; try{ Class.forName("com.mysql.jdbc.Dri
45、ver").newInstance(); Connection cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/student?characterEncoding=gbk" ,"root","123"); Statement stm =cot.createStatement();//提交查巡 ResultSet rs =stm.executeQuery(sql);//取得查巡結(jié)果 if(rs.next()) JOptionPane.showMessageDialog
46、(null, "該號已經(jīng)存在"); else{ sql="insert into student values ("+snumber+","+sname+","+sclass+","+ssex+","+scollect+")"; int i =stm.executeUpdate(sql); if(i>0) JOptionPane.showMessageDialog(null, "添加成功"); else JOptionPane.showMessageDialog(null, "刪除失敗"); } }
47、 catch(Exception ee){ } } if(e.getSource()==JBNext){ JTNumber.setText(null); JTName.setText(null); JTClass.setText(null); JT1.setText(null); } } public static void main(String agrs[]){ new xiugai(); } } 四、運行調(diào)試 1.
48、主登錄界面 2. 登入后二級主界面 (1) 學(xué)生界面 (2) 教師界面 3.插入信息界面 4. 查詢基本信息界面 5. 查詢學(xué)生成績界面 五、心得體會及總結(jié) 做這次課程設(shè)計過程中,可以說“困難重重”,但是也學(xué)到不少東西。 接到課設(shè)題目時,和Java課設(shè)對比了一下,之間只有一個是重疊的:學(xué)生學(xué)籍管理系統(tǒng)。但是兩個的側(cè)重點也不同:數(shù)據(jù)庫課設(shè)的重點是后臺數(shù)據(jù)庫的設(shè)計和實現(xiàn)要合理、科學(xué)、安全,至少要滿足3NF范式;Java課設(shè)要求前臺應(yīng)用程序要人性化,實用性強,對后臺數(shù)據(jù)庫要求不嚴格。 在整個課程設(shè)計過程中,我們小組6個成員以團隊方式共進退,以項目方式管理,設(shè)計了整個系統(tǒng)。我認為這是對我們最大的考研也是最大的收獲。我主要參與了E-R圖的構(gòu)建,后臺數(shù)據(jù)庫中學(xué)生表,課程表的設(shè)計和前臺中登陸界面的設(shè)計。 但是在做的過程中,發(fā)現(xiàn)最大的問題是Java和Oracle連接有問題,為此找了很多資料,最終在同組成員的共同努力以及在強彥老師的悉心幫助下才得以解決。 通過這次課設(shè),確實加深了對數(shù)據(jù)庫的以及與其他平臺的兼容和協(xié)調(diào)性的認識。在解決連接數(shù)據(jù)庫問題的過程中,更是對自己數(shù)據(jù)庫知識和Java水平的考驗,不過最終還是圓滿解決。 - 24 -
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 火力發(fā)電廠各設(shè)備的主要作用大全
- 3.高壓電工考試判斷練習(xí)題含答案
- 企業(yè)電氣防爆知識
- 13 低壓電工電工作業(yè)模擬考試題庫試卷含答案
- 電氣設(shè)備維修的十項原則
- 2.電氣電纜與直流模擬考試復(fù)習(xí)題含答案
- 電氣節(jié)能措施總結(jié)
- 2.電氣電機(一)模擬考試復(fù)習(xí)題含答案
- 接地電阻測量原理與測量方法
- 3.高壓電工作業(yè)模擬考試題庫試卷含答案
- 礦山維修電工安全技術(shù)操作規(guī)程
- 電工基礎(chǔ)口訣總結(jié)
- 3.某電廠值長面試題含答案解析
- 電工基礎(chǔ)知識順口溜
- 配電系統(tǒng)詳解