軟件工程學生選課系統課程設計
時間:2021-05-08 09:02:16 來源:勤學考試網 本文已影響 人
網上選課系統課程設計手冊 團隊:
學校:
隊長:
時間:2014 目 錄 1. 項目概述 ………………………………………………………………………3 1.1開發背景 ………………………………………………………………………3 1.2 開發目的 ……………………………………………………………………3 1.3 開發運行境 ……………………………………………………………………3 1.4 系統功能 ………………………………………………………………………3 2.需求分析 …………………………………………………………………………3 2.1 系統需求 ………………………………………………………………………3 2.2 功能需求 ………………………………………………………………………3 2.3 業務流圖 ………………………………………………………………………3 3.總體設計 …………………………………………………………………………4 3.1 基本設計概念和處理流程 ……………………………………………………4 3.2 系統層次模圖 …………………………………………………………………4 3.3系統層次模塊圖 ………………………………………………………………4 3.4模塊設計 ………………………………………………………………………5 4.數據庫計 …………………………………………………………………………5 4.1 數據庫的邏輯設計 ……………………………………………………………5 4.2數據庫的配置……………………………………………………………………6 5. 詳細設計 ………………………………………………………………………8 5.1 學生登錄模塊的設計與實現 …………………………………………………8 5.2 學生注冊模塊的設計與實現 …………………………………………………9 5.3 學生查詢模塊的設計與實現…………………………………………………9 5.4 學生選課模塊的設計與實現…………………………………………………10 6 測試及提交 ……………………………………………………………………10 1.項目概述 1.1 開發背景 Internet的飛速發展深刻地影響了人們的日常生活和商業運作方式。人們打開網頁瀏覽當天的新聞,發電子郵件給遠方的朋友,使用搜索引擎查找資料,進入網上商城購買商品——這一切都是在使用Internet。社會的方方面面滲透著互連網的應用,使得一向煩瑣的手工程序變得方便,快捷,而學校網上選課系統正是基于這一思想而發展起來的。
1.2 開發目的 傳統的手工選課不僅復雜,也牽涉了很多的人力,對管理也造成了諸多不變,而借助網上選課系統,學生在規定選課時間段內,可以不受地點和時間的限制完成選修課的申請,而學校也可以方便地對系統進行管理和控制,提高工作效率。
1.3 開發運行環境: 開發工具:java語言 開發環境:JDK 1.4 系統功能:
(1) 登錄、注冊功能. (2) 選課功能 (3) 查詢功能 2.需求分析 2.1 系統需求 用戶的需求具體體現在各種學習成績的提供、保存、更新和查詢方面,這就要求數據庫結構能充分滿足各種信息的輸入和輸出。收集基本數據、數據結構及數據處理的流程,組成一份詳盡數據字典,為后面的具體設計打下基礎。
2.2 功能需求 通過系統功能分析,針對一般的網上選課系統,總結出如下的需求信息:
(1) 學生的需求:網上選課、選課情況查詢;
(2) 本系統主要實現學生信息管理和選課查詢。
學生信息包括學號、姓名、班級;
課程信息包括課程名;
2.3 業務流程圖 學生 登錄 選課 查詢課程 系統 管理員 選課信息 3.總體設計 3.1 基本設計概念和處理流程 互聯網技術的飛速發展,Java等設計工具的方便實用,以及數據庫技術的發展給本系統的設計和實現提供了技術上的支持。
系統基本的流程是:用戶登錄->主界面->選擇各項子系統。
3.2 系統層次模塊圖 學生選課系統 登陸/注冊 選課 查詢 數據庫的設計 3.3系統層次模塊圖 3.4模塊設計 (1) 用戶注冊模塊:填寫用戶名、密碼、確認密碼 (2) 用戶登錄模塊:填寫已注冊的用戶名稱,填寫正確的密碼,進入主控制頁面。
(3) 用戶選課模塊:。
(4) 用戶查詢模塊:可以進行查看所選課程的操作。
4.數據庫設計 4.1 數據庫的邏輯設計 我們選用了Microsoft Access 2000。
數據通信接口采用ODBC。ODBC是微軟開發的一套讀取數據庫的解決方案,它的目的是將所有對數據庫的底層操作全部隱藏在ODBC的驅動程序內核里。對于程序員來說,只要構建了一個指向數據庫的連接,就可以采用統一的應用程序編程接口實現對數據庫的讀寫。目前ODBC驅動已經提供了對大多數常見類型數據庫的支持,包括dBase,Informix,Access,SQL Server和Oracle等。也包括了對其它類型的數據庫的支持,如文本,Excel電子表格等的支持。
根據系統功能設計的要求以及功能模塊的劃分,對于系統信息數據庫,可以列出以下數據項和數據結構:
1. 名稱:用戶信息表 表名稱標識:login 名稱 字段名稱 數據類型 主鍵 非空 用戶名 UserName 文本 No Yes 密碼 Password 文本 No No 記錄:
2.名稱:課程信息表 表名稱標識:kechengbiao 名稱 字段名稱 數據類型 主鍵 非空 學號 number 數字 No Yes 姓名 name 文本 No No 課程名稱 lesson 文本 No No 記錄:
4.2數據庫的配置 一個真正的、完整的站點是離不開數據庫的。ODBC為應用程序提供了一種標準方法來操作相關的數據庫:管理器根據數據源提供的數據庫的位置、數據庫類型及ODBC驅動程序等信息,建立起ODBC與具體數據庫的聯系。這樣,只要應用程序將數據源名提供給ODBC,ODBC就能建立起與相應數據庫的連接。
按如下步驟可以建立一個新的系統數據源。
首先,在控制面板中雙擊ODBC圖標,打開“ODBC數據源管理器”對話框,選擇“系統DSN”選項卡,單擊“添加”按鈕。如下圖所示。
在“創建新數據源”對話框中,選擇“Driver do Microsoft Access(*.mdb)”作為數據庫驅動程序并單擊“完成”按鈕。如下圖所示。
在“ODBC Microsoft Access安裝”對話框中,數據源名稱填寫為“student”,這是程序中將要引用的。單擊“選擇…”按鈕,從彈出的文件窗口中選擇student.mdb文件所在的位置。如下圖所示。
然后單擊“確定”按鈕,這樣就完成了Access數據庫的ODBC數據源設置。
以上步驟,通過ODBC管理器注冊了一個名字為student的數據源,并且指定了數據庫的驅動程序。
5. 詳細設計 5.1 學生登錄模塊的設計與實現 5.1.1. 登錄模塊 功能:本模塊主要用于對用戶身份進行鑒別。用戶通過表單提供用戶名和密碼信息,系統根據用戶提供的登錄信息對用戶進行身份查詢鑒別。如果身份合法,則將用戶導向系統的選課頁面。
輸入:用戶名、密碼 處理:
(1) 輸入用戶的登錄信息:在頁面提供的表單出輸入用戶的用戶名和密碼信息,點擊“登錄”按鈕提交表單信息到身份驗證頁面?;螯c擊“重置”按鈕,重新輸入。
(2) 用戶身份進行驗證:連接數據庫,打開用戶數據表login,檢驗用戶登錄信息。以輸入數據“用戶名”為查詢條件創建數據集查看輸入用戶名是否存在。如果存在,繼續檢驗輸入的密碼是否正確。密碼和用戶名都正確,則進入選課頁面;
如果用戶名不存在或密碼不正確,則給出登錄失敗的提示框。
輸出:學生選課頁面 5.1.2.學生登錄頁面圖如下圖所示:
5.2 學生注冊模塊的設計與實現 5.3 學生查詢模塊的設計與實現 5.4 學生選課模塊的設計與實現 6 測試及提交 7 項目小組成員及詳細分工 工作任務 徐寒亭 胡中濤 盧文琳 李爽 需求分析 數據庫的設計 查詢功能 選課功能 登陸注冊功能 查詢模塊 √ 注冊登錄模塊 √ 數據庫設計模塊 √ 選課模塊 √ 8 附:模塊源代碼 (1)登錄模塊 import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; import java.sql.*; public class Login extends Frame implements ActionListener{ Frame f,f1; Button b1; Button b2; Button b3; TextField t1; TextField t2; Label l1; Label l2; Connection con; Statement sql; //聲明Statement對象 ResultSet rs; public Login(){ f=new Frame(“學生選課系統“); Toolkit tool=f.getToolkit(); Dimension dim=tool.getScreenSize(); f.setBounds(0,0,dim.width,dim.height); Panel p=new Panel(); f.add(p); l1=new Label(“用戶名“); l2=new Label(“密碼“); t1=new TextField(20); t2=new TextField(20); b1=new Button(“登陸“); b2=new Button(“取消“); b3=new Button(“注冊“); p.add(l1); p.add(t1); p.add(l2); p.add(t2); p.add(b1); p.add(b2); p.add(b3); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); f.setVisible(true); t2.setEchoChar('*'); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e){ if(e.getSource()==b1){ if(t1.getText().equals(““)||t2.getText().equals(““)){ JOptionPane.showMessageDialog(null,“輸入不能為空!“); } else{ try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); } catch(ClassNotFoundException a){ System.out.println(““+a); } try{ con=DriverManager.getConnection(“jdbc:odbc:sun“,““,““); sql=con.createStatement(); rs=sql.executeQuery(“Select * FROM login“); //查詢數據庫 boolean check = false; while(rs.next()){ String UserName=rs.getString(1); //獲得數據庫第二列 String Password=rs.getString(2); //獲得數據庫第三列 if(t1.getText().equals(UserName) && t2.getText().equals(Password)){ //判斷語句 check = true; JOptionPane.showMessageDialog(null,“登陸成功!“); f.dispose(); new WindowBox(“選課窗口“); t1.setText(““); t2.setText(““); break; } } if(check == false){ JOptionPane.showMessageDialog(null,“登陸失敗,請重新輸入!“); } con.close(); } catch(SQLException el){} } } if(e.getSource()==b2){ t1.setText(““); t2.setText(““); } if(e.getSource()==b3){ f.dispose(); new Regist(“學生選課系統注冊界面“); } } public void windowClosing(WindowEvent e){ System.exit(0); } public static void main(String[] args) { new Login(); } } (2)注冊模塊 import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; import java.sql.*; class Regist extends Frame implements ActionListener{ Label lb1, lb2, lb3; TextField tf1, tf2, tf3; Button bt1, bt2, bt3; Regist(String s){ super(s); setLayout(null); setBounds(0,0,900,900); setVisible(true); setResizable(false); lb1 = new Label(“用戶名“); lb1.setBounds(150,100,50,20); lb2 = new Label(“密碼“); lb2.setBounds(150,200,50,20); lb3 = new Label(“確認“); lb3.setBounds(150,300,50,20); tf1 = new TextField(); tf1.setBounds(200,98,200,20); tf2 = new TextField(); tf2.setBounds(200,198,200,20); tf2.setEchoChar('*'); tf3 = new TextField(); tf3.setBounds(200,298,200,20); tf3.setEchoChar('*'); bt1 = new Button(“注冊“); bt1.setBounds(200,400,100,40); bt2 = new Button(“返回“); bt2.setBounds(350,400,100,40); bt3 = new Button(“退出“); bt3.setBounds(435,400,100,40); add(lb1); add(lb2); add(lb3); add(tf1); add(tf2); add(tf3); add(bt1); add(bt2); add(bt3); tf3.addActionListener(this); bt1.addActionListener(this); bt2.addActionListener(this); bt3.addActionListener(this); addWindowListener(new java.awt.event.WindowAdapter(){ public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } } ); } public void actionPerformed(ActionEvent e){ if(e.getSource()== bt1 || e.getSource()== tf1 || e.getSource()== tf2 || e.getSource()== tf3){ if(tf1.getText().equals(““)|| tf2.getText().equals(““) || tf3.getText().equals(““)){ JOptionPane.showMessageDialog(this,“請輸入用戶名和密碼“,“提示“,JOptionPane.ERROR_MESSAGE); //判斷文本內容語句 } else{ if(tf2.getText().equals(tf3.getText())){ try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); Connection con; Statement sq; ResultSet r; String u, p; con = DriverManager.getConnection(“jdbc:odbc:sun“,null,null); sq=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); r = sq.executeQuery(“SELECT * FROM login“); while(r.next()){ u =r.getString(1); if(tf1.getText().equals(u)){ JOptionPane.showMessageDialog(this,“用戶已存在“,“錯誤“,JOptionPane.ERROR_MESSAGE); con.close(); break; //判斷用戶是否存在 } else if(r.isLast()){ //判斷是否已經讀完整個表 u = tf1.getText(); p = tf2.getText(); sq.executeUpdate(“INSERT INTO login(UserName,Password) VALUES(“+“'“+u+“'“+“,“+“'“+p+“'“+“)“); //寫入用戶信息 JOptionPane.showMessageDialog(this,“注冊成功“,“提示“,JOptionPane.INFORMATION_MESSAGE); con.close(); dispose(); new Login(); break; } } tf1.setText(null); tf2.setText(null); tf3.setText(null); } catch(SQLException b){ JOptionPane.showMessageDialog(this,b,“錯誤“,JOptionPane.ERROR_MESSAGE); } catch(ClassNotFoundException a){ JOptionPane.showMessageDialog(this,a,“錯誤“,JOptionPane.ERROR_MESSAGE); } } else{ JOptionPane.showMessageDialog(this,“兩次密碼不一致“,“提示“,JOptionPane.ERROR_MESSAGE); tf2.setText(null); tf3.setText(null); } } } else if(e.getSource()== bt3){ System.exit(0); } else if(e.getSource()== bt2){ dispose(); new Login(); } } } public class xuhanting1 { public static void main(String args[]) { new Regist(“學生選課系統注冊界面“); } } (3)選課模塊 import java.awt.*; import java.awt.event.*; import java.sql.*; class WindowBox extends Frame implements ActionListener,ItemListener { Checkbox box1,box2,box3,box4,box5,box6; Label l1; Label l2; TextField t1; Label l3; TextField t2; TextArea t = new TextArea(); Button b1,b2; WindowBox(String s) { super(s); setLayout(new FlowLayout()); l2=new Label(“學號“); t1=new TextField(10); l3=new Label(“姓名“); t2=new TextField(10); b1=new Button(“確定“); b2=new Button(“重置“); l1=new Label(“所選課程“); box1=new Checkbox(“離散數學“,false); box2=new Checkbox(“匯編語言“,false); box3=new Checkbox(“java語言設計“,false); box4=new Checkbox(“軟件工程“,false); box5=new Checkbox(“操作系統“,false); box6=new Checkbox(“馬克思政治學“,false); box1.addItemListener(this); box2.addItemListener(this); box3.addItemListener(this); box4.addItemListener(this); box5.addItemListener(this); box6.addItemListener(this); add(l2); add(t1); add(l3); add(t2); add(b1); add(b2); add(l1); add(box1); add(box2); add(box3); add(box4); add(box5); add(box6); add(t); b1.addActionListener(this); b2.addActionListener(this); setSize(500,500); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} } ); validate();} public void itemStateChanged(ItemEvent e) { Checkbox box=(Checkbox)e.getSource(); if(box.getState()) { int n=t.getCaretPosition(); t.insert(box.getLabel(),n);} else {t.setText(““);} } public void actionPerformed(ActionEvent a) { if(a.getSource()==b1) { Connection con; Statement sql; ResultSet rs; String number1,name1,lesson1, recode,insertStr; try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); } catch(ClassNotFoundException g){ System.out.println(““+g); } try{ con=DriverManager.getConnection(“jdbc:odbc:sun“,““,““); sql=con.createStatement(); number1=t1.getText(); name1=t2.getText(); lesson1=t.getText(); recode=“(“+“'“+number1+“'“+“,“+“'“+name1+“'“+“,“+“'“+lesson1+“'“+“)“; insertStr=“INSERT INTO kechengbiao values“+recode; sql.executeUpdate(insertStr); con.close(); dispose(); RuanJian rj=new RuanJian(“查詢窗口“); } catch(SQLException h) {System.out.println(h);} } else if(a.getSource()==b2) { t1.setText(““); t2.setText(““); t.setText(““); } } } public class xuhanting3 {public static void main(String args[]) {new WindowBox(“選課窗口“);} } (4)查詢模塊 import java.awt.*; import java.awt.event.*; import java.sql.*; import javax.swing.JOptionPane; class RuanJian extends Frame implements ActionListener { Label lab1; TextField text1; Button b1,b2; TextArea t=new TextArea(); RuanJian(String s) { setTitle(s); setLayout(null); lab1=new Label(“請輸入學號“); text1=new TextField(10); b1=new Button(“確定“); b1.addActionListener(this); b2=new Button(“重置“); b2.addActionListener(this); lab1.setBounds(120,100,100,30); text1.setBounds(250,100,200,30); b1.setBounds(220,180,50,30); b2.setBounds(320,180,50,30); t.setBounds(100,250,380,300); add(lab1); add(text1); add(b1); add(b2); add(t); setBounds(100,100,600,600); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); validate(); } public void actionPerformed(ActionEvent m) { if(m.getSource()==b1) { String s; s=text1.getText(); int r=1; Connection con;//java.sql包中Connection 連接 Statement sql;//向數據庫發送sql語句 ResultSet rs;//處理查詢結果 try{ Class .forName(“sun.jdbc.odbc.JdbcOdbcDriver“);//建立jdbc與odbc連接 } catch(ClassNotFoundException e) { System.out.println(““+e); } try{ con=DriverManager.getConnection(“jdbc:odbc:sun“,““,““); sql=con.createStatement(); rs=sql.executeQuery(“select * from kechengbiao“); while(rs.next()) { String number=rs.getString(1); String name=rs.getString(2); String lesson=rs.getString(3); if(s.equals(number)) { t.append(“學號:“+number+“\n“); t.append(“姓名:“+name+“\n“); t.append(“課程:“+lesson+“\n“); r=0; break; } } if(s.equals(““)) {JOptionPane.showMessageDialog(this,“請輸入學號“,“警告對話框“,JOptionPane.WARNING_MESSAGE); } else if(r==1) {JOptionPane.showMessageDialog(this,“學號輸入錯誤“,“警告對話框“,JOptionPane.WARNING_MESSAGE); // break; } con.close(); } catch(SQLException e) { System.out.println(e); } } else if(m.getSource()==b2) { String s=““; text1.setText(s); t.setText(s); } } } public class xuhanting { public static void main(String args[]) { RuanJian rj=new RuanJian(“查詢窗口“); } }