软件工程基础实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一
可行性研究与项目计划
一、实验室名称
综合
二、实验项目名称
图书管理系统
三、实验目的
1.了解和使用甘特图,系统流程图,线性时间图来描绘系统
开发流程和进度;
2.学会使用visio绘制常用的流程图。
四、实验内容
图书管管理系统更便于对图书进行分类和管理,对借阅者进行时间限定,使得借书的效益更高更安全。
提高工作效益,便于操作,能有效地对数据进行更新、查询,并能在一定程度上实现了自动化。
图书管管理系统的主要功能为:书目管理、借阅证管理、借还图书、查询、缴费。
书目管理主要是针对管理员身份而言的(比如新增书目,删除书目等等);借阅证管理分为五部分:注册、补发、挂失、暂停、注销;借还图书:借书、还书;查询:
图书查询、借阅时间缴费主要是计算超期罚款并交纳费用。
图书管管理系统的系统流程图如图1所示。
图1 系统流程图
试对系统进行可行性研究,用Visio绘制图书管管理系统的系统流程图,同时制定系统的开发计划,用Gantt图和时间线图描述进度计划安排。
五、实验方案分析与设计
运用专业的方法整理分析图书管理流程,并对功能进行整合。
六、实验器材(设备,元器件)
七、实验步骤
1.对图书管理系统进行分析,整合用户权限和操作;
2.根据用户操作流程画出系统流程图;
3.对系统做出概要分析,拟定开发流程;
4.绘制出甘特图;
5.绘制线性时间图。
八、实验数据记录结果分析
系统流程图:
甘特图:
线性时间图:
九、实验结论
成功绘制出图书管理系统的系统流程图,甘特图,线性时间图。
十、实验总结
对系统流程的理解直接决定业务逻辑的正确与否,错误的系统流程将导致系统开发逻辑设计不合理。
甘特图和线性时间图能直观的展示出系统开发的进度,有利于监督项目开发,调整开发进度。
实验二
需求分析
一、实验室名称
综合
二、试验项目名称
需求分析
三、实验目的
1.学会如何根据客户的需求整合需求分析报告;
2.了解和使用IDEF1X图和UML类图对系统做出概要设计;
3.学会使用visio绘制IDEF1X图和UML类图;
4.学会使用visio绘制用例图。
四、实验内容
1、请从下面的描述中找出绘制数据流图的四种成分并用Visio 绘制数据流图。
某培训中心要研制一个计算机管理系统。
它的业务是:将学员发来的信件收集分类后,按几种不同的情况处理。
(1) 如果是报名的,则将报名数据送给负责报名事务的职员,他们将查阅课程文件,检查该课程是否额满,然后在学生文
件、课程文件上登记,并开出报告单交财务部门,财务人员开出发票给学生。
(2) 如果是想注销原来已选修的课程,则由注销人员在课程文件、学生文件和帐目文件上做相应的修改,并给学生注销单。
(3)如果是付款的,则由财务人员在帐目文件上登记,也给学生一张收费收据。
2、有一简单选课系统,用文字描述如下,试用IDEF1X图和UML类图描述该系统的信息模型,并用Visio绘制该IDEF1X图和UML类图。
1)基本描述:在该系统中,有学院、教师、课程、学生等实体,他们的属性分别是:
学院:学院编号、学院名称、地址、联系电话、院长等基本属性;
教师:教师编号、姓名、性别、年龄、职称、所在学院等属性;
课程:课程编号、课程名称、课程性质(必修/选修)、学分、开课学院等属性;
学生:学号、姓名、性别、年龄、入学时间、学院等属性。
教学班实体:教学班号、上课教师、课程、上课学期、上课时间、上课周次。
2)功能需求如下:
(1)能完成基本信息的维护:即各实体的基本信息的增、删、
改、查。
(2)排课:为教师安排一学期所上的课程。
一位教师在一学期可以上一门课或多门课,也可以不上课;一门课可以有多个教师上,但是不同的教师上的课应该属于不同的教学班。
(3)学生选课:学生根据教学要求进行选课。
在学生选课之前检查该学生是否有选课资格(比如是否欠费、前期课程是否修完并通过);一个学生可以选多门课、一门课可以被多个学生选修,但是一个学生不能选择同一门课的不同教学班;
如果学生选了一门课的某个教学班后再选该门课的其他教学班系统应做出出错提示;统计已选教学班的学生人数;一个教学班的选课名额有限;学生选课后,如果发现选课不合理可以退选、重选;选课结束后应提供打印课程表的功能。
3、请用Visio或Rational Rose绘制如图2所示的用例图。
五、试验方案分析与设计
整理分析各个功能需求。
六、实验器材(设备,元器件)
七、实验步骤
1.对系统进行分析,整合用户需求;
2.绘制数据流图;
3.绘制IDEF1X图;
4.绘制UML类图;
5.绘制用例图。
八、实验数据记录结果分析
数据流图:
IDEF1X图:
UML类图:
用例图:
九、实验结论
成功绘制出数据流图,绘制IDEF1X图,绘制UML类
图,绘制用例图。
十、实验总结
对visio不熟悉导致进度特别慢,以后应该加强对工具使
用的练习,要熟练使用常用工具。
绘制UML类图的时候
要明确各个类之间的关系。
实验三
系统设计
一.实验室名称
二综
二.试验项目名称
系统设计
三.实验目的
1.掌握:结构化数据流设计技术、面向对象设计技术;
2.掌握:Visio工具绘制软件结构图;
3.掌握:Rose或Visio工具绘制UML模型图。
四.实验内容
1、试针对实验二的培训中心管理系统,试用结构化设计方法对其进行设计,并用Visio绘制其对应的软件结构图。
(选做)
2、某室内保温系统的描述如下:
如果主开关置于“加热”状态,保温系统的控制器负责开关锅炉,监视锅炉系统的燃油流量和燃烧状态,进而调节进入房间的热流量。
当室内温度降至(T r-2)度以下,控制器启动锅炉。
这里T r是用户设定的理想室温。
锅炉启动过程如下:
(1)控制器向锅炉的马达发送信号;
(2)控制器监视马达速度。
马达达到正常操作速度时,启动点火并打开油阀;
(3)控制器监视水温,一旦水温达到预定值,发信号打开水流循环阀。
热水开始在室内循环。
(4)如果发生异常情况,燃油流量指示器和光感器向控制器发信号。
此时控制器发信号关闭系统。
(5)一旦室内温度达到(T r-2)度,控制器首先关闭油阀,延迟5秒钟后关闭锅炉马达。
系统须满足以下限制:
(1)锅炉停机后重启必须延迟5秒钟;
(2)在主开关关闭或油阀关闭5秒钟内应指示锅炉停机。
试据此对系统进行设计,采用Rational Rose绘制控制器的状态图,同时用顺序图描述锅炉启动过程。
五.试验方案分析与设计
依据软件设计原则,对系统进行设计。
六.实验器材(设备,元器件)
七.实验步骤
(1)建立软件结构图的基本步骤:
1. 先添加函数/子例程;
2. 再添加有条件调用;
3. 然后添加调用连线;
4. 最后为调用线添加数据流或标志流。
(2)Rose建立UML图的基本步骤:
1. 启动Rose,建立新模型,保存模型;
2. 在某视图下建立模型。
八.实验数据记录结果分析
控制器状态图:
锅炉启动过程顺序图:
九.实验结论
成功绘制出控制器状态图和锅炉启动过程顺序图。
十.实验总结
对visio不熟悉导致进度特别慢,自学软件使用技巧的能
力差,以后应该加强对工具使用的练习,要熟练使用常用
工具。
绘制UML类图的时候要明确各个类之间的关系。
实验四
系统实现
一.实验室名称
二综
二.试验项目名称
系统实现
三.实验目的
1.掌握:系统实现的有关技术及其相关工具。
四.实验内容
1、试对图3所示的课程管理对象类图,采用Java在Eclipse下编码实现,并用JUnit框架对某Java类进行测试。
图3 类图
2、针对某网站,采用SilkTest和SilkPerformer分别进行功能测试和性能测试。
(选做)
五.试验方案分析与设计
1.设计的系统功能如下:
六.实验器材(设备,元器件)
七.实验步骤
1. 进入:[Window]菜单下的[Preferences],选择Java
支:
⏹检测已安装的JRE;
⏹设置工作台选项;
⏹设置新建项目选项;
⏹设置Java编辑器。
2. 选择[File]->[New]->[Project],从弹出的窗口中选[Java]->[Java Project],单击下一步;
3. 输入项目名,并确定项目保存的文件目录,单击完成即可,在Java透视图中的“资源管理器”中便可看到创建的项目。
4. 选择新建的项目;
5. 在工具栏中单击“创建Java类”按钮(带有一个C标记);
6. 在弹出的窗口中输入类名称,并设置有关属性(如选中public static void main(String[] args)),单击完成,则Java编辑窗口会自动打开。
7. 在Window主菜单下选择Preferences;
8. 从弹出的菜单中打开Java菜单,单击Classpath Variables;
9. 单击New,在弹出的对话框中设置junit.jar的路径信息,单击确定即可。
八.实验数据记录结果分析
1.用户登录界面User.java
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class User extends JFrame{
private JLabel use,password;
private JTextField k1;//用户名输入框
private JPasswordField k2;//密码输入框
private JButton b1,b2;
//登录窗口
public User(JFrame f){
super("系统登录");
Container c=getContentPane();
c.setLayout(new FlowLayout());
use=new JLabel("学号: ");
use.setFont(new
Font("Serif",Font.PLAIN,20));
password=new JLabel("密码: ");
password.setFont(new
Font("Serif",Font.PLAIN,20));
k1=new JTextField(12);
k2=new JPasswordField(12);
b1=new JButton("登录");
b2=new JButton("退出");
// 设置登录方法
// BHandler b=new BHandler();
// EXIT d=new EXIT();
// b1.addActionListener(b);
// b2.addActionListener(d);
//添加控件
c.add(use);
c.add(k1);
c.add(password);
c.add(k2);
c.add(b1);
c.add(b2);
setBounds(600,300,250,150);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);}
//主函数
public static void main(String[] args) { User f1=new User(new JFrame());}}
效果图:
2.用户界面:Menu.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Menu extends JFrame implements ActionListener{
Addstu 增加学生界面;
Updatastu 修改学生界面;
Delstu 删除学生界面;
AddC 增加课程界面;
DelC 删除课程界面;
UpdateC 修改课程界面;
AddSC 增加选课界面;
DelSC 删除选课界面;
UpdateSC 修改选课界面;
Selstu 学生查询界面;
JPanel pCenter;
CardLayout card=null;
JLabel label=null;
JMenuBar mb=new JMenuBar();//菜单栏
JMenu m1=new JMenu("学生管理");
JMenuItem add1=new JMenuItem("add1 ");
JMenuItem updata1=new JMenuItem("updata1 ");
JMenuItem delete1=new JMenuItem("delete1 ");
JMenu m2=new JMenu("课程管理");
JMenuItem add2=new JMenuItem("add2 ");
JMenuItem updata2=new JMenuItem("updata2 ");
JMenuItem delete2=new JMenuItem("delete2 ");
JMenu m3=new JMenu("选课管理");
JMenuItem add3=new JMenuItem("add3 ");
JMenuItem updata3=new JMenuItem("updata3 ");
JMenuItem delete3=new JMenuItem("delete3 ");
JMenu m4=new JMenu("查询管理");
JMenuItem 学生查询=new JMenuItem("查询信息");
JMenuItem m5=new JMenuItem("系统退出");
Font t=new Font ("sanerif",Font.PLAIN,12);
public Menu (){
this.setTitle("学生选课管理系统");
try
{UIManager.setLookAndFeel(UIManager.getSystemLoo kAndFeelClassName());}
catch(Exception e){System.err.println("不能设置外观: "+e);}
//组合菜单
addMenu1();
addMenu2();
addMenu3();
addMenu4();
addJMenuBar();
setJMenuBar(mb);
label=new JLabel("选课管理系统
",JLabel.CENTER);
label.setFont(new Font("宋体
",Font.BOLD,36));
label.setHorizontalTextPosition(SwingConstants .CENTER);
label.setForeground(Color.red);
//点击事件
add1.addActionListener(this);
updata1.addActionListener(this);
delete1.addActionListener(this);
m5.addActionListener(this);
add2.addActionListener(this);
delete2.addActionListener(this);
updata2.addActionListener(this);
add3.addActionListener(this);
delete3.addActionListener(this);
updata3.addActionListener(this);
学生查询.addActionListener(this);
card=new CardLayout();
pCenter=new JPanel();
pCenter.setLayout(card);
增加学生界面=new Addstu();
修改学生界面=new Updatastu();
删除学生界面=new Delstu();
增加课程界面=new AddC();
删除课程界面=new DelC();
修改课程界面=new UpdateC();
增加选课界面=new AddSC();
删除选课界面=new DelSC();
修改选课界面=new UpdateSC();
学生查询界面=new Selstu();
pCenter.add("欢迎界面",label); pCenter.add("增加学生界面",增加学生界面); pCenter.add("修改学生界面",修改学生界面); pCenter.add("删除学生界面",删除学生界面); pCenter.add("增加课程界面",增加课程界面); pCenter.add("删除课程界面",删除课程界面); pCenter.add("修改课程界面",修改课程界面); pCenter.add("增加选课界面",增加选课界面);
pCenter.add("删除选课界面",删除选课界面);
pCenter.add("修改选课界面",修改选课界面);
pCenter.add("学生查询界面", 学生查询界面);
add(pCenter,BorderLayout.CENTER);
validate();
setVisible(true);
setBounds(400,150,400,280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
addWindowListener(new WindowAdapter(){//关闭程序时的操作
public void windowClosing(WindowEvent e){System.exit(0);} });
validate();}
private void addJMenuBar() {
mb.add(m1);mb.add(m2);mb.add(m3);mb.add(m4);mb .add(m5);}
private void addMenu4() {
m4.add(学生查询);m4.setFont(t);}
private void addMenu3() {
m3.add(add3);m3.add(updata3);m3.add(delete3);m 3.setFont(t); }
private void addMenu2() {//将菜单加入到菜单栏中
m2.add(add2);m2.add(updata2);m2.add(delete2);m 2.setFont(t); }
private void addMenu1() {
m1.add(add1);m1.add(updata1);m1.add(delete1);m 1.setFont(t); }
public void actionPerformed(ActionEvent e){ Object obj=e.getSource();
if(obj==m5){System.exit(0);}
else{if(obj==add1){card.show(pCenter,"增加学生界面");}
else{if(obj==updata1){ card.show(pCenter,"修改学生界面");}
else{if(obj==delete1){ card.show(pCenter, "删除学生界面");}
else{if(obj==add2){ card.show(pCenter, "增加课程界面");}
else{if(obj==delete2){ card.show(pCenter, "删除课程界面");}
else{if(obj==updata2){ card.show(pCenter, "修改课程界面");}
else{if(obj==add3){ card.show(pCenter, "增加选课界面");}
else{if(obj==delete3){ card.show(pCenter, "删除选课界面");}
else{if(obj==updata3){ card.show(pCenter, "修改选课界面");}
else{if(obj==学生查询){ card.show(pCenter, "学生查询界面");
}}}}}}}}}}}}
public static void main(String[] args) {new Menu();}}
效果图:
3.添加界面:AddC.java/AddSC.java/Addstu.java import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
public class AddC extends JPanel implements ActionListener{
JTextField 课号,课名;
JButton 录入;
public AddC(){
try
{UIManager.setLookAndFeel(UIManager.getSystemLoo kAndFeelClassName());}catch(Exception
e){System.err.println("不能设置外观: "+e);}
课号=new JTextField(12);
课名=new JTextField(12);
录入=new JButton("录入");
录入.addActionListener(this);
Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox();
Box box3=Box.createHorizontalBox();
Box box4=Box.createHorizontalBox();
box1.add(new JLabel("课号:"));
box1.add(课号);
box2.add(new JLabel("课名:"));
box2.add(课名);
box4.add(录入);
Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
boxH.add(Box.createVerticalGlue());
JPanel messPanel=new JPanel();
messPanel.add(boxH);
setLayout(new BorderLayout());
add(messPanel,BorderLayout.CENTER);
validate();}
效果图:
4.添加界面:UpdateC.java/UpdateSC.java
/Updatestu.java
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
public class UpdateC extends JPanel implements ActionListener{
String save=null;
JTextField 课号1,课号,课名;
JButton 修改,查找;
public UpdateC(){
try
{UIManager.setLookAndFeel(UIManager.getSystemLoo
kAndFeelClassName());}catch(Exception
e){System.err.println("不能设置外观: "+e);}
课号1=new JTextField(12);
课号=new JTextField(12);
课名=new JTextField(12);
修改=new JButton("修改");
查找=new JButton("查找");
Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox();
Box box3=Box.createHorizontalBox();
Box box4=Box.createHorizontalBox();
Box box5=Box.createHorizontalBox();
box1.add(new JLabel("课号:",JLabel.CENTER));
box1.add(课号);
box2.add(new JLabel("课名:",JLabel.CENTER));
box2.add(课名);
box3.add(修改);
box5.add(new JLabel("课号:",JLabel.CENTER));
box5.add(课号1);
box5.add(查找);
修改.addActionListener(this);
查找.addActionListener(this);
Box boxH=Box.createVerticalBox();//竖放box
boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
boxH.add(Box.createVerticalGlue());
JPanel picPanel=new JPanel();
JPanel messPanel=new JPanel();
messPanel.add(box5);
picPanel.add(boxH);
setLayout(new BorderLayout());
JSplitPane splitV=new
JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,p icPanel);//分割
add(splitV,BorderLayout.CENTER);
validate();}
5.删除界面:DelC.java/DelSC.java /Deltu.java
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
public class DelC extends JPanel implements ActionListener{
String save=null;
JTextField 课号1,课号,课名;
JButton 删除,查找;
public DelC(){
try
{UIManager.setLookAndFeel(UIManager.getSystemLoo kAndFeelClassName());}catch(Exception
e){System.err.println("不能设置外观: "+e);}
课号1=new JTextField(12);
课号=new JTextField(12);
课名=new JTextField(12);
删除=new JButton("删除");
查找=new JButton("查找");
Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox();
Box box3=Box.createHorizontalBox();
Box box4=Box.createHorizontalBox();
Box box5=Box.createHorizontalBox();
box1.add(new JLabel("课号:",JLabel.CENTER)); box1.add(课号);
box2.add(new JLabel("课名:",JLabel.CENTER)); box2.add(课名);
box4.add(删除);
box5.add(new JLabel("课号:",JLabel.CENTER)); box5.add(课号1);
box5.add(查找);
Box boxH=Box.createVerticalBox();//竖放box boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
boxH.add(Box.createVerticalGlue());
删除.addActionListener(this);
查找.addActionListener(this);
JPanel picPanel=new JPanel();
JPanel messPanel=new JPanel();
messPanel.add(box5);
picPanel.add(boxH);
setLayout(new BorderLayout());
JSplitPane splitV=new
JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,p icPanel);//分割
add(splitV,BorderLayout.CENTER);
validate();}
6.查询界面:Selsto.java
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
public class Selstu extends JPanel implements ActionListener{
JTextField 学号,姓名,系别;
JButton 查找;
JTextField 课号,课名;
JButton 查找1;
JTextField 课号1,学号1,成绩;
JButton 查找2;
public Selstu (){
学号=new JTextField(12);
姓名=new JTextField(12);
系别=new JTextField(12);
课号=new JTextField(12);
课名=new JTextField(12);
课号1=new JTextField(12);
学号1=new JTextField(12);
成绩=new JTextField(12);
查找=new JButton("查找学生信息");
查找1=new JButton("查找课程信息");
查找2=new JButton("查找选课信息");
Box box1=Box.createHorizontalBox();//横放box Box box2=Box.createHorizontalBox();
Box box4=Box.createHorizontalBox();
Box box5=Box.createHorizontalBox();
Box box6=Box.createHorizontalBox();
Box box7=Box.createHorizontalBox();
box1.add(new JLabel("学号:",JLabel.CENTER));
box1.add(学号);
box1.add(new JLabel("姓名:",JLabel.CENTER)); box1.add(姓名);
box1.add(new JLabel("系别:",JLabel.CENTER)); box1.add(系别);
box2.add(查找);
box4.add(new JLabel("课号:",JLabel.CENTER)); box4.add(课号);
box4.add(new JLabel("课名:",JLabel.CENTER)); box4.add(课名);
box6.add(查找1);
box5.add(new JLabel("课号:",JLabel.CENTER)); box5.add(课号1);
box5.add(new JLabel("学号:",JLabel.CENTER)); box5.add(学号1);
box5.add(new JLabel("成绩:",JLabel.CENTER)); box5.add(成绩);
box7.add(查找2);
Box boxH1=Box.createVerticalBox();//竖放box boxH1.add(box1);
boxH1.add(box2);
boxH1.add(Box.createVerticalGlue());
Box boxH2=Box.createVerticalBox();//竖放box
boxH2.add(box4);
boxH2.add(box6);
boxH2.add(Box.createVerticalGlue());
Box boxH3=Box.createVerticalBox();//竖放box
boxH3.add(box5);
boxH3.add(box7);
boxH3.add(Box.createVerticalGlue());
查找.addActionListener(this);
查找1.addActionListener(this);
查找2.addActionListener(this);
JPanel messPanel=new JPanel();
JPanel picPanel=new JPanel();
JPanel threePanel=new JPanel();
messPanel.add(boxH1);
picPanel.add(boxH2);
threePanel.add(boxH3);
setLayout(new BorderLayout());
JSplitPane splitV=new
JSplitPane(JSplitPane.VERTICAL_SPLIT,messPanel,p icPanel);//分割
add(splitV,BorderLayout.CENTER);
JSplitPane splitV1=new
JSplitPane(JSplitPane.VERTICAL_SPLIT,splitV,thre ePanel);//分割
add(splitV1,BorderLayout.CENTER);
validate();}
效果图:
九.实验结论
十.实验总结
通过本次实验提高了自己的动手能力认真领悟了软件工
程设计过程。