版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.JAVA程序設(shè)計課程設(shè)計報告設(shè)計題目: 學(xué)生信息管理系統(tǒng)學(xué)院名稱:信息工程學(xué)院專業(yè)班級: 13計本1姓名:學(xué)號:目錄一 需求分析。3二 概要設(shè)計。3三 詳細(xì)設(shè)計。3 3.1 數(shù)據(jù)庫設(shè)計。3 3.2 模塊及窗體設(shè)計。33.2.1 數(shù)據(jù)庫模塊設(shè)計。33.2.2用戶登錄識別模塊。53.2.3用戶信息管理模塊。6(1) 密碼修改。6(2)用戶信息添加和刪除。83.2.4學(xué)生息管理模塊。10(1)添加信息。10(2)信息查看。11(3)信息修改。12(4)刪除信息。143.2.5 系統(tǒng)管理模塊。153.2.6 主窗體菜單設(shè)計。15四軟件測試。15五總結(jié)。15參考資料:17一 需求分析 本系統(tǒng)的主要目的
2、就是實現(xiàn)學(xué)生信息管理,使學(xué)生信息管理工作更加容易,從而提高工作效率,降低管理成本. 系統(tǒng)中需要對擁護(hù)身份進(jìn)行管理,采取登陸進(jìn)入系統(tǒng)的形式.二 概要設(shè)計/*概要設(shè)計階段主要是粗略描述整個軟件的框架,并從業(yè)務(wù)的角度描述軟件的模塊、工作流程等。項目的成功取決于設(shè)計的好壞,而概要設(shè)計則是整個設(shè)計的關(guān)鍵部分。概要設(shè)計的主要任務(wù)是將用戶的需求劃分為不同的功能,然后將這些功能細(xì)分成模塊,并給模塊一些規(guī)則約束,以達(dá)到各個模塊之間可以相互交流的目的。概要設(shè)計關(guān)乎到系統(tǒng)的整體架構(gòu),因此想做好一個概要設(shè)計,不僅僅要熟悉用戶的業(yè)務(wù)流程,還要具備相當(dāng)豐富的設(shè)計經(jīng)驗。2.1 概要設(shè)計的原則概要設(shè)計是根據(jù)系統(tǒng)分析的需求和工
3、作環(huán)境的情況對整個軟件的總體結(jié)構(gòu)進(jìn)行大致的設(shè)計。概要設(shè)計要堅持以下幾個原則。(1)細(xì)分原則:軟件系統(tǒng)都是由很多不同的模塊組成,當(dāng)設(shè)計一套軟件時,要先將所有的功能分解。解決復(fù)雜問題的方法是將其分解成幾個小問題,一個個來解決。(2)提高代碼重用性:在面向?qū)ο笤O(shè)計中,首先考慮的就是代碼的重用,一個好的設(shè)計,將來在升級換代時不需要太大的改動,節(jié)省了人力物力。(3)從上而下層層分析:概要設(shè)計要從整體出發(fā),逐個剖析軟件的功能,從上而下,先分析系統(tǒng)總的功能,然后一步步細(xì)分,直到最小的功能模塊。(4)一致性原則:概要設(shè)計要求所有功能模塊在定義時使用統(tǒng)一的規(guī)范。(5)提高獨(dú)立性,減少耦合:各個模塊與模塊之間盡量
4、減少關(guān)聯(lián),否則修改一個地方就會引起其他多處的變動,不符合面向?qū)ο蟮脑瓌t。一般情況下,對類封裝后,只允許對類進(jìn)行擴(kuò)展,而不能修改,而封裝的類必須具有單一職責(zé),既理論情況下不允許兩個類共同完成一個功能。(6)模塊的大小要盡量適中:不是結(jié)構(gòu)算法越復(fù)雜的模塊越好,模塊的大小要根據(jù)實際工作目標(biāo)和其他類的耦合緊密程度來決定。經(jīng)驗表明,一個模塊的規(guī)模不應(yīng)過大,模塊的總行數(shù)應(yīng)控制在10100行的范圍內(nèi),最好為3060行,這樣理解和閱讀都較方便。過長的模塊往往是分解不充分的表現(xiàn),會增加閱讀理解的難度;但小規(guī)模太多也會使模塊之間聯(lián)系變得復(fù)雜,增大系統(tǒng)在模塊調(diào)用時傳遞信息所花費(fèi)的開銷。由于概要設(shè)計是整個設(shè)計的重中之
5、重,牽一發(fā)而動全身,所以要努力做一個好的概要設(shè)計,才能在今后軟件開發(fā)過程中不再反復(fù)?,F(xiàn)在軟件行業(yè)流行模式化驅(qū)動設(shè)計,將一些市場上比較成功的模式拿來用在自己的設(shè)計中。2.2 將用戶需求模塊化根據(jù)概要設(shè)計的原則來分析一下本項目的用戶需求,并最終轉(zhuǎn)化成用程序語言描述的模塊。什么樣的需求才是一個模塊.模塊應(yīng)該具備如下3個特征。(1)輸入和輸出:模塊必須能被調(diào)用并且正確的返回調(diào)用,而且調(diào)用都是相對一個對象而言,這是模塊獨(dú)立性的一個體現(xiàn)。(2)處理功能:模塊必須可以對調(diào)用的輸入數(shù)據(jù)進(jìn)行靈活的處理,并為輸出準(zhǔn)備好處理結(jié)果。(3)程序代碼:用來實現(xiàn)模塊功能的源代碼。3.3 確定系統(tǒng)最終模塊概要設(shè)計中最重要的就
6、是確定此項目包括哪些模塊。根據(jù)上兩節(jié)講述的設(shè)計原則和模塊特征,將用戶需求轉(zhuǎn)化為下面的模塊。*/2.1 UML用例圖1 用戶登錄信息管理2 用戶信息管理學(xué)生信息管理系統(tǒng)管理系統(tǒng)首頁用戶登陸信息管理用戶信息管理學(xué)生信息管理通過身份請求添加刪除用戶修改密碼添加查看修改刪除系統(tǒng)管理重新登陸退出登陸2.2 模塊設(shè)計1 數(shù)據(jù)庫設(shè)計模塊2用戶登錄識別模塊3 用戶信息管理模塊4學(xué)生信息管理模塊5系統(tǒng)管理模塊三詳細(xì)設(shè)計3.1 數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫名稱:student 表名:user,stud表user:存放登陸用戶的用戶名和密碼表stud:存放學(xué)生基本信息學(xué)生表(stus)字段名類型備注stusIDVarchar(
7、30)學(xué)生idstuNameNvarchar(50)Not nullstuSexNchar(1)性別'男' 或者'女'stuAgeint年齡>0stuDeptNvarchar(30)所在系3.2 模塊及窗體設(shè)計3.2.1 數(shù)據(jù)庫模塊設(shè)計將數(shù)據(jù)庫的連接包裝在一個database類中,以便其他模塊能夠輕松調(diào)用,避免每次重寫數(shù)據(jù)庫連接代碼。下表是他的基本屬性文件名成員變量成員方法database.javapublic static Connection;public static Statementst; public static ResultSet rs;p
8、ublic static boolean joinDB()publicstatic boolean executeSQL(String sqlString)public static boolean query(String sqlString)代碼如下:import java.sql.*;/引入包public class database public static Connection; /定義一個連接對象 public static Statement st;/定義一個SQL語句對象 public static ResultSet rs;/定義一個數(shù)據(jù)集 public static bo
9、olean joinDB() /用來判斷是否連接成功 boolean joinFlag; try joinFlag = true; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");/通過調(diào)用java.lang中的Class類的forName方法來實現(xiàn)JDBCODBC橋接器 = DriverManager.getConnection("jdbc:odbc:student","sa",");創(chuàng)建一個連接對象 .setCatalog("student");/加載數(shù)據(jù)庫
10、 System.out.println("數(shù)據(jù)庫連接成功"); st =.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);/返回一個可滾動的結(jié)果集,數(shù)據(jù)庫變化時結(jié)果集跟著變化;不能用結(jié)果集更新數(shù)據(jù)庫中的表 return joinFlag; catch (SQLException sqlEx) System.out.println(sqlEx.getMessage(); joinFlag = false; return joinFlag; catch (ClassNotF
11、oundException notfoundEX) System.out.println(notfoundEX.getMessage(); joinFlag = false; return joinFlag; public static boolean executeSQL(String sqlString) boolean executeFlag; try st.execute(sqlString); executeFlag = true; catch (Exception e) executeFlag = false; System.out.println("sql except
12、ion:" + e.getMessage(); return executeFlag; public static boolean query(String sqlString) try rs = null; rs = st.executeQuery(sqlString); catch (Exception Ex) System.out.println("sql exception:" + Ex); return false; return true; 3.2.2用戶登錄識別模塊代碼封裝在類Land里,所用到的信息保存在表user里下表是他的基本屬性文件名控件成員
13、方法Land.javaJLabel:labelname=newJLabel("用戶名")labelmima=new JLabel("密碼")Jbutton: btenter=new JButton("確定");btcancel=new JButton("清空");private void Judge(String sqlString)判斷用戶名和密碼是否正確的成員方法代碼:private void Judge(String sqlString) if (database.joinDB() /如果數(shù)據(jù)庫連接成功 if
14、 (database.query(sqlString) /如果SQL語句執(zhí)行成功 try if(database.rs.isBeforeFirst() /如果指向記錄集的在第一條記錄的前面 System.out.println("密碼正確"); jf.setVisible(false);/窗體不可見.close();/關(guān)閉數(shù)據(jù)庫連接 new Main();/主窗體 else System.out.println("錯誤"); new JOptionPane().showMessageDialog(null,"用戶名或密碼錯誤!",&q
15、uot;,JOptionPane.ERROR_MESSAGE); catch(Exception ex) System.out.println(ex.getMessage(); else System.out.println("連接數(shù)據(jù)庫不成功!"); 按鈕“確定”的監(jiān)聽事件代碼:public void actionPerformed (ActionEvent e) if(textname.getText().equals(")new JOptionPane().showMessageDialog(null,"用戶名不能為空!");else i
16、f(textmima.getText().equals(")new JOptionPane().showMessageDialog(null,"密碼不能為空!");elseString sql="select * from user where user_id = '" + textname.getText() + "' and password = '" + textmima.getText()+ "'"System.out.println(sql);Judge(sql)
17、;/調(diào)用成員方法,判斷是否用戶名和密碼正確3.2.3 用戶信息管理模塊(1) 密碼修改用戶名將自動從表user里檢索出來,供用戶選擇以下是它的基本屬性文件名控件名稱xgmima.javaJlabel: lbe2、lbe3、lbe4、lbe5jTextField:tf JpasswordField:pas1、pas2、pas3Jbutton: b1=new JButton("提交"); b2=new JButton("退出");將所有用用戶名讀出來 database.joinDB();/連接數(shù)據(jù)庫 String sql="select * fro
18、m user" try if(database.query(sql) while(database.rs.next()/依次將用戶名讀出 String name=database.rs.getString("user_id"); tf.addItem(name); catch(Exception e)確定“按鈕”的監(jiān)聽事件代碼:b1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String name=" + tf.getSelected
19、Item(); System.out.println(name); String sql="select * from user where user_id='"+ name +"'" System.out.println(sql); try if(database.query(sql) database.rs.next(); String ps1=pas1.getText(); String password=database.rs.getString("Password"); if(ps1.equals(passw
20、ord)if(pas2.getText().equals(pas3.getText()String supdate="update user set password='"+ pas3.getText()+"' where user_id='"+ name +"'" database.executeSQL(supdate); new JOptionPane().showMessageDialog(null,"密碼更改成功!"); else new JOptionPane().show
21、MessageDialog(null,"兩次密碼不同!"); else new JOptionPane().showMessageDialog(null,"舊密碼不正確!"); catch(Exception el) System.out.println(el); );(2)用戶信息添加和刪除上半部分用來添加用戶,下半部分用來刪除用戶基本屬性如下文件名控件名AddDeleteUser.javaprivate JButton butACancel,butDCancel,butDelete,butOk; private JComboBox cbUserNam
22、e; private JLabel jLabel1,jLabel2,jLabel3,jLabel4,jLabel5; private JPasswordField pas1,pas2,pas3; private JTextField txtname;/將所有用用戶名讀出來 database.joinDB(); String sql="select * from user" try if(database.query(sql) while(database.rs.next()/記錄集若有記錄則通過循環(huán)將數(shù)據(jù)依次讀出 String name=database.rs.getStr
23、ing("user_id"); cbUserName.addItem(name); catch(Exception e)/為添加按鈕加事件- butOk.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)if(txtname.getText().equals(") /判斷是否為空new JOptionPane().showMessageDialog(null,"用戶名不能為空!");else if(pas1.getText().equ
24、als(")new JOptionPane().showMessageDialog(null,"密碼不能為空!");else if(pas1.getText().equals(pas2.getText()String sql="insert into user values('"+ txtname.getText() +"','"+ pas1.getText() +"')"tryif(database.executeSQL(sql)/若SQL執(zhí)行成功 new JOption
25、Pane().showMessageDialog(null,"添加成功!"); cbUserName.addItem(txtname.getText(); catch(Exception ea) );刪除按鈕監(jiān)聽事件代碼butDelete.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String name=" + cbUserName.getSelectedItem();/得到用戶名 String sql="select * from
26、user where user_id='"+ name +"'" try if(database.query(sql) database.rs.next(); String pas=pas3.getText(); String password=database.rs.getString("Password"); System.out.println(password); if(pas.equals(password)/比較密碼是否與記錄集里對應(yīng)一致 String sdelete="delete from user w
27、here user_id='"+ name +"'" if(database.executeSQL(sdelete) new JOptionPane().showMessageDialog(null,"刪除成功!"); pas3.setText(");cbUserName.removeAllItems();/將刪除的條目從JcomboBox中刪除 String sql1="select * from user" if(database.query(sql1)while(database.rs.nex
28、t()/更新JcomboBox條目 String name1=database.rs.getString("user_id"); cbUserName.addItem(name1); else new JOptionPane().showMessageDialog(null,"密碼不正確!"); catch(Exception el) System.out.println(el); );3.2.4 學(xué)生信息管理模塊(1)添加信息該添加是按照先添加學(xué)生信息,添加學(xué)生信息中的“添加“按鈕代碼:butOk.addActionListener(new Actio
29、nListener() public void actionPerformed(ActionEvent e)if(jtf1.getText().equals(")new JOptionPane().showMessageDialog(null,"學(xué)號不能為空");else if(jtf2.getText().equals(")new JOptionPane().showMessageDialog(null,"姓名不能為空");else if(jtf3.getText().equals(")new JOptionPane().
30、showMessageDialog(null,"性別不能為空");else String sql="insert into stud values('"+ jtf1.getText() +"','"+ jtf2.getText() +"','"+ jtf3.getText() +"','"+ jtf4.getText()+"','"+ jtf5.getText()+"','&qu
31、ot;+ jtf6.getText()+"','"+ jtf7.getText()+"')"tryif(database.executeSQL(sql) new JOptionPane().showMessageDialog(null,"添加成功!"); catch(Exception ea) );(2)信息查看分為查看學(xué)生基本信息和查看學(xué)生成績信息,因為代碼和窗體大致相識,進(jìn)取其一講述下面是他的屬性文件名稱控件名稱viewstud.java JtextArea:te=new JTextArea();代碼為:c
32、lass viewstud extends JInternalFrameviewstud()super("查看學(xué)生基本信息");/窗體顯示得名稱Container con=getContentPane();/創(chuàng)建JinternalFrame的容器對象con.setLayout(new BorderLayout();/設(shè)定窗體布局JTextArea te=new JTextArea();JScrollPane croll=new JScrollPane(te); /加載垂直水平滾動條con.add(croll,BorderLayout.CENTER);database.joi
33、nDB(); /連接數(shù)據(jù)庫 String sql="SELECT * FROM stud" try if(database.query(sql) while(database.rs.next() te.append("學(xué)號: "+database.rs.getString(1)+" "); te.append(": "+database.rs.getString(2)+" "); te.append("性別: "+database.rs.getString(3)+"
34、 "); te.append("年齡: "+database.rs.getString(4)+" "); te.append("政治面貌:"+database.rs.getString(5)+" "); te.append("系別: "+database.rs.getString(6)+" "); te.append("班級: "+database.rs.getString(7)+" ");te.append("n&
35、quot;); catch(SQLException ex) System.out.println(ex); this.setClosable(true);/關(guān)閉窗口可用setVisible(true);/窗體可見setBounds(20,70,600,350);(3)信息修改信息修改分為學(xué)生基本信息修改,學(xué)生成績信息修改,由于原理相似就以修改學(xué)生基本信息作為例子進(jìn)行介紹下面是他的屬性信息文件名稱控件名稱xiugai.java private JButton butCancel,butOk,butShow;privateJLabel jLabel1,jLabel2,jLabel3,jLabel
36、4,jLabel5,jLabel6,jLabel7; private JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6,jtf7;顯示信息按鈕的監(jiān)聽事件代碼如下:database.joinDB(); butShow.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)if(jtf1.getText().equals(")new JOptionPane().showMessageDialog(null,"請輸入學(xué)號");els
37、e String sql="select * from grade where 學(xué)號=" + "'" +jtf1.getText() +"'"tryif(database.query(sql)/此處用了個database.executeSQL(sql)提示resultset 關(guān)閉 if(!database.rs.first()JOptionPane.showMessageDialog(null,"沒有該學(xué)生信息."); /下面是用來顯示其他文本框里的內(nèi)容else database.rs.first(
38、); jtf2.setText(database.rs.getString("VBA開發(fā)"); jtf3.setText(database.rs.getString("大學(xué)英語"); jtf4.setText(database.rs.getString("java開發(fā)"); jtf5.setText(database.rs.getString("SQLServer"); jtf6.setText(database.rs.getString("高等數(shù)學(xué)"); jtf7.setText(databa
39、se.rs.getString("網(wǎng)站建設(shè)"); butOk.setEnabled(true); catch(NullPointerException upe) System.out.println(upe.toString(); catch(SQLException sqle)System.out.println(sqle.toString();catch(Exception ex)System.out.println(ex.toString(); );(4)刪除信息刪除學(xué)生信息下面是窗口屬性文件名稱控件名稱shanchu.javaprivate JButton butC
40、ancel,butOk; private JLabel jLabel1; private JTextField jtf1;private JPanel p;butOk=new JButton("刪除");butCancel=new JButton("清空")刪除按鈕監(jiān)聽事件代碼如下:butOk.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)if(jtf1.getText().equals(")new JOptionPane().s
41、howMessageDialog(null,"請輸入學(xué)號");else String sql="select * from stud where 學(xué)號=" + "'" +jtf1.getText() +"'"tryif(database.query(sql)/此處用了個database.executeSQL(sql)提示resultset 關(guān)閉 if(!database.rs.first() JOptionPane.showMessageDialog(null,"沒有該學(xué)生信息."
42、;);else String sqq="delete from stud where 學(xué)號='" +jtf1.getText() +"'" String qll="delete from grade where 學(xué)號='"+jtf1.getText() +"'" String slq="select * from grade where 學(xué)號='"+jtf1.getText()+"'" if(database.query(slq) if(database.rs.first()if(database.executeSQL(qll) if(da
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人貨物運(yùn)輸保險附加服務(wù)合同4篇
- 2025年度大型公共設(shè)施設(shè)備安裝維修服務(wù)合同范本4篇
- 2025年新型智能商鋪?zhàn)赓U合同參考4篇
- 二零二五年度綠色建筑標(biāo)準(zhǔn)鋼管采購與技術(shù)創(chuàng)新合同3篇
- 二零二五年度電商綠色包裝與環(huán)保物流服務(wù)合同3篇
- 2025年度房產(chǎn)代持及資產(chǎn)配置顧問合同4篇
- 2025年摩托車內(nèi)燃機(jī)零配件進(jìn)口合同樣本4篇
- 個人車位轉(zhuǎn)租合同(2024版)2篇
- 二零二五年度林業(yè)碳匯交易承包服務(wù)合同范本3篇
- 2025年度美容院美容美發(fā)項目組合套餐銷售合同3篇
- DB32-T 4444-2023 單位消防安全管理規(guī)范
- 臨床三基考試題庫(附答案)
- 合同簽訂執(zhí)行風(fēng)險管控培訓(xùn)
- DB43-T 3022-2024黃柏栽培技術(shù)規(guī)程
- 九宮數(shù)獨(dú)200題(附答案全)
- 人員密集場所消防安全管理培訓(xùn)
- 《聚焦客戶創(chuàng)造價值》課件
- PTW-UNIDOS-E-放射劑量儀中文說明書
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹脂耐腐蝕立式貯罐
- 典范英語2b課文電子書
- 員工信息登記表(標(biāo)準(zhǔn)版)
評論
0/150
提交評論