1.实验目的
1)进行图书馆管理信息系统的详细设计;
2)掌握数据流图、界面设计和主要代码编程等内容;
3)掌握系统详细设计的步骤和方法。
2.实验要求
1)实验前做好充分准备,包括复习第六章至第八章所学内容,事先预习好本次实验内容。
2)实验时记录实验结果,按要求完成各题。
3)实验结束后,给出实验总结与截图分析并及时给出本次实验的实验报告。
- 实验内容和系统结构
1.实验内容
图书馆管理信息系统的详细设计(包括登录系统界面的设计、信息服务子系统的设计、管理和维护子系统的设计、各系统设计包括数据流图、界面设计和主要代码编程。)
2.系统结构
用两层体系结构作为图书馆管理信息系统软件解决方案的核心,把信息系统按功能划分为管理和维护、信息服务和信息查询三大块,分别放置在相同或不同的硬件平台上,并将系统的操作人员划分为三类:读者,工作人员,系统管理员。
《图书管理系统》的总体功能描述
1)浏览
列出当前数据库文件中书籍和读者的所有记录;
可选定一项记录,显示所有域;
2)查询功能
书目匹配查询;
读者匹配查询;
书目和读者相关匹配查询;
3)插入功能
增加一个书目记录;
增加一个读者记录;
4)修改功能
修改某一已存在的记录内容,提供确认机制;
5)删除功能
删除一个记录,提供确认机制;
6)授权功能
授权读者访问数据的权限;
三、实验主要仪器设备
1)硬件
PC机,要求:内存≥4GB,硬盘空间≥10GB
2)软件
Windows7或以上
3)开发软件、相关开发工具包
四、实验过程
1. 登录界面
如果用户密码错误,则会弹窗错误提示对话框
2.完成登录系统界面的详细设计
登录进去后,学生和管理员分别进入不同的界面,因为可以进行的操作不同。管理员的界面是:
3.完成信息服务子系统的详细设计,包括信息服务子系统功能模块设计、数据流图、界面设计和主要代码编程
查询数据:
try {
/*1.加载驱动包*/
Class.forName("com.mysql.jdbc.Driver");
/*2.创建数据库连接*/
try {
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/movie-manager?useUnicode=true&characterEncoding=utf8","root","root");
/*3.创建sql语句*/
String sql="select * from mm_userinfo";
/*4.获取执行器*/
PreparedStatement pstm=conn.prepareStatement(sql);
/*5.执行sql并接收结果*/
ResultSet rs=pstm.executeQuery();/*executeQuery是查询专用方法*/
/*6.处理结果*/
while(rs.next()){
System.out.println("编号:"+rs.getInt("id"));
System.out.println("用户名:"+rs.getString("username"));
System.out.println("昵称:"+rs.getObject("nickname"));
System.out.println("创建时间:"+rs.getDate("create_time"));
System.out.println("===================================");
}
/*7.关闭资源*/
/*一定要按顺序,顺序不能乱,类似于析构函数*/
rs.close();
pstm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
添加数据:
/*初始化用户输入工具类:*/
Scanner scanner=new Scanner(System.in);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/movie-manager?useUnicode=true&characterEncoding=utf8","root","root");
String sql="insert into mm_userinfo values(null,?,?,?,?,1,?,?,null,null)";
System.out.println("请输入用户名:");
String username=scanner.next();
System.out.println("请输入密码:");
String password=scanner.next();
System.out.println("请输入昵称:");
String nickname=scanner.next();
Integer createAdmin=1;
Date createDate=new Date();
PreparedStatement pstm=conn.prepareStatement(sql);
pstm.setObject(1,username);
pstm.setObject(2,password);
pstm.setObject(3,nickname);
pstm.setObject(4,avatar);
pstm.setObject(5,createAdmin);
pstm.setObject(6,createDate);
int result=pstm.executeUpdate();
if(result>0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
}
修改数据:
Scanner scanner=new Scanner(System.in);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/movie-manager?useUnicode=true&characterEncoding=utf8","root","root");
String sql="update mm_userinfo set nickname=?,avatar=?,update_admin=?,update_time=? where id=?";
PreparedStatement pstm=conn.prepareStatement(sql);
System.out.println("请输入要修改的编号:");
Integer id=scanner.nextInt();
System.out.println("请输入要修改的昵称");
String nickname=scanner.next()
Integer updateAdmin=1;
Date updateTime=new Date();
pstm.setObject(1,nickname);
pstm.setObject(2,avatar);
pstm.setObject(3,updateAdmin);
pstm.setObject(4,updateTime);
pstm.setObject(5,id);
int result= pstm.executeUpdate();
if(result>0){
System.out.println("修改成功");
System.out.println("当前最新数据如下:");
String sql2="select * from mm_userinfo";
PreparedStatement pstm2=conn.prepareStatement(sql2);
ResultSet rs= pstm2.executeQuery();
while(rs.next()){
System.out.println("编号:"+rs.getObject("id"));
System.out.println("昵称:"+rs.getObject("nickname"));
}
rs.close();
pstm2.close();
}else{
System.out.println("修改失败");
}
pstm.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
删除数据:
Scanner scanner=new Scanner(System.in);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/movie-manager?useUnicode=true&characterEncoding=utf8","root","root");
String sql="delete from mm_userinfo where id=?";
PreparedStatement pstm=conn.prepareStatement(sql);
System.out.println("请输入要删除的id");
Integer id= scanner.nextInt();
pstm.setObject(1,id);
int result= pstm.executeUpdate();
if(result>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
pstm.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
5.软件测试
(1) 白盒测试
白盒测试是可以查看程序代码的,他的测试重点测试对象就是源程序,所以又叫透明盒测试,他的方法有:基本路径测试法,逻辑覆盖法,路径覆盖法等,白盒测试的基本原则有很多,主要可以概括为四条,第一是必须保证每个模块中所有的路径都被测试次,拿最简单的登陆模块来说,必须保证用户名错误,密码错误,用户名和密码都错误,用户名和密码都正确这四条路径被测试一次,第二是所有业务逻辑都要测试真假这两种情况,如上例中的登陆,都要测试成功和失败两种情况,第三就比较复杂化,要深入到检查代码内部的数据结构是否有效,第四就是检查各种临界点,如本系统中定义了用户名为 6-16 位,就必须测试第 5,6,16,17 位的用户名。
(2)黑盒测试
黑盒测试是不管程序的内部构造,只关心输入相应的数值程序是否能走通,程序的功能是否全部实现,是站在用户的角度来思考问题的,从输入数据与输出数据的对应关系出发进行测试的。现实的软件错综复杂,很不好测试,为了提高测试的有效性并收集产品特定方面的信息,我们采取的是一种有效测试技术功能性测试
序号 | 测试内容 | 测试方法 | 预期测试结果 | 实际结果 |
1 | 登录 | 输入用户名和密码,登录页面 | 若用户名和密码正确,则登录成功,否则会给出相应的提示 | 与预期结果一致 |
2 | 成绩信息管理 | 输入学生编号,点击查询 | 若学号存在,可以得到该学生的成绩 | 与预期结果一致 |
3 | 添加老师 | 输入想添加的信息,点击添加 | 若信息格式填写正确就会添加成功,否则会给出相应 的提示 | 与预期结果一致 |
4 | 修改老师密码 | 输入想要修改的教师信息,点击修改 | 若信息格式填写正确就会修改成功,否则会给出相应的提示 | 与预期结果不一致,无法修改 |
5 | 删除老师 | 管理员登录成功后,可以点击相应的老师信息进行删除 | 删除成功这条信息会从数据库中消失 | 与预期结果一致 |
6 | 查找老师信息 | 管理员登录成功后,可以输入老师编号查询信息 | 若输入老师编号存在,显示该老师信息 | 与预期结果一致 |
7 | 添加学生信息 | 输入想要添加的学生信息,点击添加 | 若信息格式填写正确就会添加成功,否则会给出相应的提示 | 与预期结果一致 |
8 | 修改学生信息 | 输入想要修改的学生信息,点击修改 | 若信息格式填写正确就会修改成功,否则会给出相应的提示 | 与预期结果一致 |
9 | 删除学生信息 | 输入想要删除的学生信息,点击删除 | 删除成功这条信息会从数据库中消失 | 与预期结果一致 |
10 | 查找学生信息 | 管理员、老师登录成功后,可以输入学生编号查询信息 | 如输入老师编号存在,显示该老师信息 | 与预期结果一致 |
五、实验结果
六、实验总结
经过大家的努力,学生信息管理系统终于做完了,通过这次实习系统设计,总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到的知识更多。更进一步的了解了数据库的基本操作,在这之前,数据库的学习仅仅刚开了个头,我们只是在了解一些概念性的东西。在做这个系统之前,我连基本的连接数据库、配文件、数据库查询语句等这些东西都不熟练,现在对于数据库的增删改查操作比较熟练了,对于初学者来说,比较头疼的就是对于单引号的处理。我的建议是如果不理解先把按照课本上正确的语句敲下来,然后在多次进行数据库的链接,增删改查操作不断总结规律。这次设计的学生信息管理系统,全在自己所掌握的知识下,进行编程设计,完全体现了自己在数据库语言和程序设计课程学习状况,充分地为自己以后更深入了数据库语言奠下深厚的基础。