软件工程实验报告1_第1页
软件工程实验报告1_第2页
软件工程实验报告1_第3页
软件工程实验报告1_第4页
软件工程实验报告1_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程实验报告1实验题目:[具体实验题目]

实验目的:1.深入理解软件工程的基本概念和方法。2.掌握软件开发过程中的需求分析、设计、编码、测试等关键环节。3.通过实际操作,提高运用软件工程知识解决实际问题的能力。

实验环境:1.操作系统:[具体操作系统名称]2.开发工具:[列举使用的开发工具,如IDE名称及版本号]3.编程语言:[使用的编程语言]

一、需求分析(一)问题描述[详细阐述要解决的实际问题,例如一个简单的学生信息管理系统,需要实现学生信息的录入、查询、修改和删除等功能]

(二)用户需求1.功能需求学生信息录入:能够准确录入学生的基本信息,包括姓名、学号、性别、年龄、专业等。信息查询:可以根据学号、姓名等条件查询学生信息。信息修改:对已录入的学生信息进行修改。信息删除:删除指定的学生信息。2.性能需求系统响应时间应在合理范围内,对于常见操作(如查询、修改)不超过[X]秒。能够支持多用户同时操作,确保数据的一致性和完整性。3.界面需求界面设计简洁、直观,易于操作。提供清晰的输入提示和操作反馈。

(三)需求规格说明书1.学生信息管理系统功能规格|功能|描述|输入|输出|||||||学生信息录入|录入学生基本信息|姓名、学号、性别、年龄、专业|成功提示或错误信息||信息查询|根据学号或姓名查询学生信息|学号或姓名|学生信息详情或无匹配提示||信息修改|修改指定学生的信息|学号及新的信息|成功提示或错误信息||信息删除|删除指定学号的学生信息|学号|成功提示或错误信息|2.性能规格系统响应时间:常见操作平均响应时间不超过[X]秒。并发处理能力:支持[X]个用户同时在线操作。3.界面规格整体布局合理,操作按钮和输入框排列整齐。输入框有明确的输入提示文字,如"请输入姓名"。操作成功或失败时给出相应的提示框,如"信息录入成功"或"学号不存在,请重新输入"。

二、总体设计(一)系统架构设计1.分层架构表示层:负责与用户交互,提供系统的界面。业务逻辑层:处理系统的业务逻辑,如学生信息的验证、数据处理等。数据访问层:负责与数据库进行交互,实现数据的存储和读取。2.模块划分学生信息管理模块:包含学生信息的录入、查询、修改和删除功能。数据验证模块:对输入的学生信息进行合法性验证。数据库操作模块:封装数据库的连接、查询、插入、更新和删除操作。

(二)数据库设计1.ER图学生(Student):学号(Sno):主键,唯一标识学生。姓名(Sname):字符串类型。性别(Ssex):字符串类型。年龄(Sage):整数类型。专业(Smajor):字符串类型。2.表结构设计```sqlCREATETABLEStudent(SnoVARCHAR(20)PRIMARYKEY,SnameVARCHAR(50),SsexVARCHAR(10),SageINT,SmajorVARCHAR(50));```

(三)详细设计1.学生信息管理模块录入功能:调用数据验证模块对输入信息进行验证,通过后调用数据库操作模块将数据插入数据库。查询功能:根据输入的条件调用数据库操作模块查询数据,返回查询结果。修改功能:先查询要修改的学生信息,验证新输入信息,然后调用数据库操作模块更新数据。删除功能:查询要删除的学生信息,确认后调用数据库操作模块删除数据。2.数据验证模块学号验证:检查学号是否符合格式要求(例如长度、是否为数字等)。年龄验证:确保年龄为合法的整数且在合理范围内。其他信息验证:检查姓名、性别、专业等是否为空或符合相应格式。3.数据库操作模块连接数据库:使用合适的数据库驱动建立与数据库的连接。插入数据:构建SQL插入语句,将学生信息插入到Student表中。查询数据:根据输入条件构建SQL查询语句,从Student表中获取数据。更新数据:构建SQL更新语句,修改指定学生的信息。删除数据:构建SQL删除语句,删除指定学号的学生记录。

三、编码实现(一)表示层代码实现(以JavaSwing为例)```javaimportjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;

publicclassStudentInfoUIextendsJFrame{privateJTextFieldsnoField,snameField,ssexField,sageField,smajorField;

publicStudentInfoUI(){setTitle("学生信息管理系统");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("专业:");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();

//调用业务逻辑层进行信息录入StudentInfoLogic.addStudent(sno,sname,ssex,sageStr,smajor);}});

queryButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){StringqueryCondition=snoField.getText();if(queryCondition.isEmpty()){queryCondition=snameField.getText();}//调用业务逻辑层进行信息查询StudentInfoLogic.queryStudent(queryCondition);}});

updateButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Stringsno=snoField.getText();Stringsname=snameField.getText();Stringssex=ssexField.getText();StringsageStr=sageField.getText();Stringsmajor=smajorField.getText();

//调用业务逻辑层进行信息修改StudentInfoLogic.updateStudent(sno,sname,ssex,sageStr,smajor);}});

deleteButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){Stringsno=snoField.getText();//调用业务逻辑层进行信息删除StudentInfoLogic.deleteStudent(sno);}});

setVisible(true);}}```

(二)业务逻辑层代码实现```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专业:"+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,"删除失败,未找到指定学号的学生!");}}}```

(三)数据访问层代码实现```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;}}```

(四)数据验证模块代码实现```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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论