




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
軟件工程實驗報告1?實驗題目:[具體實驗題目]
實驗目的:1.深入理解軟件工程的基本概念和方法。2.掌握軟件開發(fā)過程中的需求分析、設計、編碼、測試等關鍵環(huán)節(jié)。3.通過實際操作,提高運用軟件工程知識解決實際問題的能力。
實驗環(huán)境:1.操作系統(tǒng):[具體操作系統(tǒng)名稱]2.開發(fā)工具:[列舉使用的開發(fā)工具,如IDE名稱及版本號]3.編程語言:[使用的編程語言]
一、需求分析(一)問題描述[詳細闡述要解決的實際問題,例如一個簡單的學生信息管理系統(tǒng),需要實現(xiàn)學生信息的錄入、查詢、修改和刪除等功能]
(二)用戶需求1.功能需求學生信息錄入:能夠準確錄入學生的基本信息,包括姓名、學號、性別、年齡、專業(yè)等。信息查詢:可以根據(jù)學號、姓名等條件查詢學生信息。信息修改:對已錄入的學生信息進行修改。信息刪除:刪除指定的學生信息。2.性能需求系統(tǒng)響應時間應在合理范圍內(nèi),對于常見操作(如查詢、修改)不超過[X]秒。能夠支持多用戶同時操作,確保數(shù)據(jù)的一致性和完整性。3.界面需求界面設計簡潔、直觀,易于操作。提供清晰的輸入提示和操作反饋。
(三)需求規(guī)格說明書1.學生信息管理系統(tǒng)功能規(guī)格|功能|描述|輸入|輸出|||||||學生信息錄入|錄入學生基本信息|姓名、學號、性別、年齡、專業(yè)|成功提示或錯誤信息||信息查詢|根據(jù)學號或姓名查詢學生信息|學號或姓名|學生信息詳情或無匹配提示||信息修改|修改指定學生的信息|學號及新的信息|成功提示或錯誤信息||信息刪除|刪除指定學號的學生信息|學號|成功提示或錯誤信息|2.性能規(guī)格系統(tǒng)響應時間:常見操作平均響應時間不超過[X]秒。并發(fā)處理能力:支持[X]個用戶同時在線操作。3.界面規(guī)格整體布局合理,操作按鈕和輸入框排列整齊。輸入框有明確的輸入提示文字,如"請輸入姓名"。操作成功或失敗時給出相應的提示框,如"信息錄入成功"或"學號不存在,請重新輸入"。
二、總體設計(一)系統(tǒng)架構設計1.分層架構表示層:負責與用戶交互,提供系統(tǒng)的界面。業(yè)務邏輯層:處理系統(tǒng)的業(yè)務邏輯,如學生信息的驗證、數(shù)據(jù)處理等。數(shù)據(jù)訪問層:負責與數(shù)據(jù)庫進行交互,實現(xiàn)數(shù)據(jù)的存儲和讀取。2.模塊劃分學生信息管理模塊:包含學生信息的錄入、查詢、修改和刪除功能。數(shù)據(jù)驗證模塊:對輸入的學生信息進行合法性驗證。數(shù)據(jù)庫操作模塊:封裝數(shù)據(jù)庫的連接、查詢、插入、更新和刪除操作。
(二)數(shù)據(jù)庫設計1.ER圖學生(Student):學號(Sno):主鍵,唯一標識學生。姓名(Sname):字符串類型。性別(Ssex):字符串類型。年齡(Sage):整數(shù)類型。專業(yè)(Smajor):字符串類型。2.表結構設計```sqlCREATETABLEStudent(SnoVARCHAR(20)PRIMARYKEY,SnameVARCHAR(50),SsexVARCHAR(10),SageINT,SmajorVARCHAR(50));```
(三)詳細設計1.學生信息管理模塊錄入功能:調(diào)用數(shù)據(jù)驗證模塊對輸入信息進行驗證,通過后調(diào)用數(shù)據(jù)庫操作模塊將數(shù)據(jù)插入數(shù)據(jù)庫。查詢功能:根據(jù)輸入的條件調(diào)用數(shù)據(jù)庫操作模塊查詢數(shù)據(jù),返回查詢結果。修改功能:先查詢要修改的學生信息,驗證新輸入信息,然后調(diào)用數(shù)據(jù)庫操作模塊更新數(shù)據(jù)。刪除功能:查詢要刪除的學生信息,確認后調(diào)用數(shù)據(jù)庫操作模塊刪除數(shù)據(jù)。2.數(shù)據(jù)驗證模塊學號驗證:檢查學號是否符合格式要求(例如長度、是否為數(shù)字等)。年齡驗證:確保年齡為合法的整數(shù)且在合理范圍內(nèi)。其他信息驗證:檢查姓名、性別、專業(yè)等是否為空或符合相應格式。3.數(shù)據(jù)庫操作模塊連接數(shù)據(jù)庫:使用合適的數(shù)據(jù)庫驅(qū)動建立與數(shù)據(jù)庫的連接。插入數(shù)據(jù):構建SQL插入語句,將學生信息插入到Student表中。查詢數(shù)據(jù):根據(jù)輸入條件構建SQL查詢語句,從Student表中獲取數(shù)據(jù)。更新數(shù)據(jù):構建SQL更新語句,修改指定學生的信息。刪除數(shù)據(jù):構建SQL刪除語句,刪除指定學號的學生記錄。
三、編碼實現(xiàn)(一)表示層代碼實現(xiàn)(以JavaSwing為例)```javaimportjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;
publicclassStudentInfoUIextendsJFrame{privateJTextFieldsnoField,snameField,ssexField,sageField,smajorField;
publicStudentInfoUI(){setTitle("學生信息管理系統(tǒng)");setSize(400,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLayout(newGridLayout(6,2));
JLabelsnoLabel=newJLabel("學號:");snoField=newJTextField();JLabelsnameLabel=newJLabel("姓名:");snameField=newJTextField();JLabelssexLabel=newJLabel("性別:");ssexField=newJTextField();JLabelsageLabel=newJLabel("年齡:");sageField=newJTextField();JLabelsmajorLabel=newJLabel("專業(yè):");smajorField=newJTextField();
JButtonaddButton=newJButton("添加");JButtonqueryButton=newJButton("查詢");JButtonupdateButton=newJButton("修改");JButtondeleteButton=newJButton("刪除");
add(snoLabel);add(snoField);add(snameLabel);add(snameField);add(ssexLabel);add(ssexField);add(sageLabel);add(sageField);add(smajorLabel);add(smajorField);add(addButton);add(queryButton);add(updateButton);add(deleteButton);
addButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Stringsno=snoField.getText();Stringsname=snameField.getText();Stringssex=ssexField.getText();StringsageStr=sageField.getText();Stringsmajor=smajorField.getText();
//調(diào)用業(yè)務邏輯層進行信息錄入StudentInfoLogic.addStudent(sno,sname,ssex,sageStr,smajor);}});
queryButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){StringqueryCondition=snoField.getText();if(queryCondition.isEmpty()){queryCondition=snameField.getText();}//調(diào)用業(yè)務邏輯層進行信息查詢StudentInfoLogic.queryStudent(queryCondition);}});
updateButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Stringsno=snoField.getText();Stringsname=snameField.getText();Stringssex=ssexField.getText();StringsageStr=sageField.getText();Stringsmajor=smajorField.getText();
//調(diào)用業(yè)務邏輯層進行信息修改StudentInfoLogic.updateStudent(sno,sname,ssex,sageStr,smajor);}});
deleteButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Stringsno=snoField.getText();//調(diào)用業(yè)務邏輯層進行信息刪除StudentInfoLogic.deleteStudent(sno);}});
setVisible(true);}}```
(二)業(yè)務邏輯層代碼實現(xiàn)```javapublicclassStudentInfoLogic{publicstaticvoidaddStudent(Stringsno,Stringsname,Stringssex,StringsageStr,Stringsmajor){if(!StudentInfoValidator.validateStudent(sno,sname,ssex,sageStr,smajor)){JOptionPane.showMessageDialog(null,"輸入信息不合法,請檢查!");return;}intsage=Integer.parseInt(sageStr);StudentInfoDAO.addStudent(sno,sname,ssex,sage,smajor);JOptionPane.showMessageDialog(null,"學生信息錄入成功!");}
publicstaticvoidqueryStudent(StringqueryCondition){StudentInfostudent=StudentInfoDAO.queryStudent(queryCondition);if(student!=null){JOptionPane.showMessageDialog(null,"學號:"+student.getSno()+"\n姓名:"+student.getSname()+"\n性別:"+student.getSsex()+"\n年齡:"+student.getSage()+"\n專業(yè):"+student.getSmajor());}else{JOptionPane.showMessageDialog(null,"未找到匹配的學生信息!");}}
publicstaticvoidupdateStudent(Stringsno,Stringsname,Stringssex,StringsageStr,Stringsmajor){if(!StudentInfoValidator.validateStudent(sno,sname,ssex,sageStr,smajor)){JOptionPane.showMessageDialog(null,"輸入信息不合法,請檢查!");return;}intsage=Integer.parseInt(sageStr);StudentInfoDAO.updateStudent(sno,sname,ssex,sage,smajor);JOptionPane.showMessageDialog(null,"學生信息修改成功!");}
publicstaticvoiddeleteStudent(Stringsno){if(StudentInfoDAO.deleteStudent(sno)){JOptionPane.showMessageDialog(null,"學生信息刪除成功!");}else{JOptionPane.showMessageDialog(null,"刪除失敗,未找到指定學號的學生!");}}}```
(三)數(shù)據(jù)訪問層代碼實現(xiàn)```javaimportjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;
publicclassStudentInfoDAO{privatestaticfinalStringURL="jdbc:mysql://localhost:3306/studentdb";privatestaticfinalStringUSER="root";privatestaticfinalStringPASSWORD="password";
publicstaticvoidaddStudent(Stringsno,Stringsname,Stringssex,intsage,Stringsmajor){try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD)){Stringsql="INSERTINTOStudent(Sno,Sname,Ssex,Sage,Smajor)VALUES(?,?,?,?,?)";try(PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,sno);pstmt.setString(2,sname);pstmt.setString(3,ssex);pstmt.setInt(4,sage);pstmt.setString(5,smajor);pstmt.executeUpdate();}}catch(SQLExceptione){e.printStackTrace();}}
publicstaticStudentInfoqueryStudent(StringqueryCondition){StudentInfostudent=null;try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD)){Stringsql="SELECT*FROMStudentWHERESno=?ORSname=?";try(PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,queryCondition);pstmt.setString(2,queryCondition);try(ResultSetrs=pstmt.executeQuery()){if(rs.next()){student=newStudentInfo();student.setSno(rs.getString("Sno"));student.setSname(rs.getString("Sname"));student.setSsex(rs.getString("Ssex"));student.setSage(rs.getInt("Sage"));student.setSmajor(rs.getString("Smajor"));}}}}catch(SQLExceptione){e.printStackTrace();}returnstudent;}
publicstaticvoidupdateStudent(Stringsno,Stringsname,Stringssex,intsage,Stringsmajor){try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD)){Stringsql="UPDATEStudentSETSname=?,Ssex=?,Sage=?,Smajor=?WHERESno=?";try(PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,sname);pstmt.setString(2,ssex);pstmt.setInt(3,sage);pstmt.setString(4,smajor);pstmt.setString(5,sno);pstmt.executeUpdate();}}catch(SQLExceptione){e.printStackTrace();}}
publicstaticbooleandeleteStudent(Stringsno){try(Connectionconn=DriverManager.getConnection(URL,USER,PASSWORD)){Stringsql="DELETEFROMStudentWHERESno=?";try(PreparedStatementpstmt=conn.prepareStatement(sql)){pstmt.setString(1,sno);introwsAffected=pstmt.executeUpdate();returnrowsAffected>0;}}catch(SQLExceptione){e.printStackTrace();}returnfalse;}}```
(四)數(shù)據(jù)驗證模塊代碼實現(xiàn)```javapublicclassStudentInfoValidator{publicstaticbooleanvalidateStudent(Stringsno,Stringsname,Stringssex,StringsageStr,Stringsmajor){if(sno.isEmpty()||sname.isEmpty()||ssex.isEmpty()||sageStr.isEmpty()||smajor.isEmpty()){returnfalse;}if(!sno.matches("^[09]{10}$")){returnfalse;}try{intsage=Integer.parseInt(sageStr);if(sage<1||sage>100){returnfalse;}}catch(NumberFormatExc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合川區(qū)初中“七校聯(lián)盟”2025年春期半期質(zhì)量檢測七年級 英語試題
- 投資基金合同履約金的管理
- 《Python程序設計基礎》課件 第7、8章 面向?qū)ο缶幊蹋晃募c異常
- 《Python程序設計基礎》課件 第5-8章 函數(shù)與模塊-文件與異常
- 鐵路工程安全技術石家莊鐵路35課件
- 《GB 18399-2001棉花加工機械安全要求》(2025版)深度解析
- ARM Cortex-M3嵌入式開發(fā)及應用教與學 課件 第12、13章 信號量與互斥信號量;消息郵箱與消息隊列
- 大學生職業(yè)規(guī)劃大賽《英語專業(yè)》生涯發(fā)展展示
- 簡單版度個人耕地承包協(xié)議
- 農(nóng)產(chǎn)品購銷合作協(xié)議
- 磁場對通電導線的作用力課件-高二下學期物理人教版選擇性2
- 公立醫(yī)院成本核算指導手冊
- 第16課《有為有不為》公開課一等獎創(chuàng)新教學設計
- 小米創(chuàng)業(yè)思考(商業(yè)思考)
- 國開(甘肅)2024年春《地域文化(專)》形考任務1-4終考答案
- 年產(chǎn)10噸功能益生菌凍干粉的工廠設計改
- 基于深度學習的鳥類識別系統(tǒng)的設計與實現(xiàn)
- 【走向高考】(2013春季出版)高考物理總復習 模塊整合課件 新人教版選修3-5
- 公路建設項目河大橋開工報告
- 2009研究生數(shù)值分析試題和答案-石家莊鐵道大學(word文檔良心出品)
- EDTA標準溶液的配制與標定
評論
0/150
提交評論