资源描述
1.1 实验一 结构化需求分析
一.实验类型
图书馆管理系统
假定校图书馆需要你设计一个图书馆管理系统,要求包括以下功能:
l 图书管理员可以管理馆藏图书,包括每本图书的藏书编号、书名、编著者、ISBN号、出版社、出版时间、入馆时间、馆藏数量(如果馆藏数量为1,则标明为孤本图书)、在馆数量、学科类别等(或其它你认为有用的信息);
l 管理员可以查询、统计所有图书、每一类图书或每一本书的借阅记录;
l 图书管理员可以管理所有读者的信息,包括读者类型(学生、教师、社会人士)、姓名、图书证编号、办证时间、证件状态(正常、挂失、冻结)等信息;
l 图书管理员可以查询和统计所有读者、每一类读者或每一个读者的借阅记录;
l 读者可以通过本系统查询馆藏图书;
l 读者可以通过本系统借阅读书。但对于孤本图书或在馆数量为1的图书则不准外借;
l 管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年不归还图书的读者冻结其图书证;
l 读者可以通地本系统归还图书。如果图书超期,则自动计算罚款金额。
二.实验目的
1.掌握数据流的分析技术
2.掌握软件需求分析的过程和方法。
3.熟悉项目开发计划和需求规格说明书的制定方法。
三.实验内容和要求
1.用结构化数据流分析技术进行软件系统需求分析,得出系统的数据流图和数据字典。
2.正确运用图表工具进行表示。
3.按规范正确编写软件文档。
四.实验步骤
1.理解所承担项目的业务流程和业务内容。
本软件项目是面向中小型学校、单位机构对于图书管理的基于服务的一款便捷式软件。能满足一系列常用图书管理的功能模块,提供简介、准确的操作性,可以很大程度减少人为因素带来的数据错误,统计错误,系统逻辑错误。并且规模小,很容易进行推广。
l 本项目的参与对象有图书管理员及读者。
l 对于读者,能通过该软件浏览馆藏的所有图书。读者在图书馆找到自己喜欢的书后,能自行通过该软件操作完成借阅操作。若读者是第一次借书,必须通过图书管理员进行添加读者记录,登记读者信息。读者在登陆后方能完成借阅操作,对于孤本图书(即图书馆中馆藏只有一本的图书)则拒绝进行借阅操作。在规定期限内,读者可以通过该软件完成还书操作,对于超期的图书,应将扣除一定罚款金额,对于超期一年不归还图书的读者冻结其图书证。并且读者能修改个人信息。
l 对于图书管理员,能管理自己和比自己低一级管理权限的管理员。一级管理员能完成维护管理员的基本信息和二级管理员的一切操作。二级管理员则能维护自己的信息和添加读者、添加图书的功能。管理员可以对超期未归还图书的读者发送电子邮件进行提醒,对于超期一年不归还图书的读者冻结其图书证;
2.按照系统的功能及性能要求,系统的作业范围等,确定软件系统的开发环境(操作系统、开发工具、程序设计语言等)。
根据软件编程经验,本系统将采用面向对象的设计方法,使用Eclipse开发工具,java窗体应用程序,操作系统使用Win8。
3.绘制数据流图、功能分析图等。
0层数据流图:
4.编写数据字典、数据加工处理的描述等。
数据字典(数据字典卡片形式):
5.阅读相关的软件开发的标准文档。
6.编写需求规格说明书。
1.2 实验二 结构化软件设计
一.实验类型
设计性(总体设计)
二.实验目的
1.掌握结构化软件设计的过程和方法。
2.掌握设计说明书的编写。
三.实验内容和要求
1.在需求分析的基础上,用结构化软件设计方法进行系统设计,给出系统合理的体系结构。
2.完成数据设计、软件结构设计、接口设计及过程设计。
过程设计:可以参看系统体系结构,对整个系统运行的状态都有详细的描述,不再赘述。
3.正确运用图表工具进行表示,如层次图、HIPO图、结构图、N—S图、PAD图、判定表及伪码等描述方式。
4.按规范正确编写软件文档。
四.实验步骤
1.分析数据流特性,确定流类型(变换流/事务流),进行系统结构设计。
2.处理过程设计(Jackson方法)。
由Jackson方法的处理过程如下:
(一) 读者检索图书的输入输出数据结构的Jackson图
(二) 读者借阅图书的输入输出数据结构的Jackson图
(三)读者归还图书的输入输出数据结构的Jackson图
3.界面设计。
登陆界面:
学生用户界面:
学生图书查询界面:
借阅图书界面:
还书界面:
4.存储文件格式设计(数据库结构设计)。
5.阅读相关的软件开发标准文档。
6.编写设计说明书(概要设计说明书或详细设计说明书)。
1.3 实验三 面向对象的软件分析
一.实验类型
设计性实验
二.实验目的
掌握面向对象的软件分析方法
三.实验内容和要求
1.用面向对象的分析方法进行软件系统需求分析,得出系统的分析模型(对象模型、动态模型、功能模型)。
2.正确运用图表工具进行表示。
3.按规范正确编写软件文档。
四.实验步骤
1.建立问题域的对象模型,确定类与对象、确定关联、确定属性等。(用对象图表示)
2.建立动态模型,定义行为、过程和事件。(用顺序图、协作图、状态图、活动图等表示)
主要活动描述如下
读者借书
顺序图
活动图:
图书的状态图:
3.建立功能模型,表明系统内的数据如何由输入值得到输出值。(用数据流图表示)
4.编写分析文档。
1.4 实验四 软件编码与测试
一.实验类型
设计性实验
二.实验目的
1.掌握软件测试的过程和方法。
2.掌握测试用例的设计方法。
3.熟悉测试计划说明书、测试记录与分析报告的编写。
三.实验内容和要求
1.用程序设计所规定的编程语言,编写一段代码实现软件需求给出的一个功能。每个小组至少有两个功能模块。
2.根据前面实验中完成的软件项目进行相应软件测试,制定测试计划、设计测试用例,特别是一些异常情况的处理。
3.模块的动态测试以黑盒法为主,辅以白盒法。重要执行路径的测试使用白盒法。白盒法必须先列出所有判定,再选择覆盖标准,根据不同的覆盖标准所列出的情况,设计测试用例。
4.集成测试重点测试模块的接口部分,要求保留测试过程所设计的驱动模块或桩模块。
5.应根据需求规格说明书所确定的系统功能和性能设计测试用例。
6.阅读相关的软件开发标准文档,正确编写测试计划、测试记录与分析报告。
四.实验步骤
1.编写一段代码实现软件项目的一个功能。
2.制定测试计划,设计软件项目相应的测试用例。
3.测试数据,调试运行策略。
4.编写测试记录与分析报告。
5.完成实验报告。
附主要代码:(主要是与数据库相关代码)
(一):注册文件
JDBC_DRIVER = com.mysql.jdbc.Driver
DB_URL = jdbc:mysql://localhost:3306/LibraryManageSystem
DB_USER = root
DB_PASSWORD = mysql123
(二):解析注册文件
public class PropertyReader {
static private Properties ps;
static{
ps = new Properties();
try{
//db.conf与PropertyReader.class位于同一目录下
InputStream in = PropertyReader.class.getResourceAsStream("db.conf.txt");
ps.load(in); //载入属性
in.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static String get (String key){ //读取属性
return (String)ps.getProperty(key);
}
}
(三):获取数据库的Connection
public class ConnectionProvider {
private String JDBC_DRIVER;
private String DB_URL;
private String DB_USER;
private String DB_PASSWORD;
public ConnectionProvider(){
JDBC_DRIVER = PropertyReader.get("JDBC_DRIVER");
DB_URL = PropertyReader.get("DB_URL");
DB_USER = PropertyReader.get("DB_USER");
DB_PASSWORD = PropertyReader.get("DB_PASSWORD");
try{
Class.forName(JDBC_DRIVER);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public Connection getConnection(){
Connection con = null;
try{
con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
}catch(SQLException e){
e.printStackTrace();
}
return con;
}
}
(四):增,删,改,查等操作(以查询为例,其他类似)
public Book getBook(String id)throws SQLException{ //返回用户信息
Connection con = null;
PreparedStatement pstmt = null;
Book book = new Book ();
con = provider.getConnection();
String sql = "select * from Book where ID = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
book.setID(rs.getString("ID"));
book.setAuthor(rs.getString("Author"));
book.setName(rs.getString("Name"));
book.setDate(rs.getString("Date"));
book.setPrice(rs.getString("Price"));
book.setIntro(rs.getString("intro"));
}
closeResultSet(rs);
closeStatement(pstmt);
closeConnection(con);
return book;
}
展开阅读全文