软件编码与软件测试 —以学生信息管理系统为例

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

查找学生信息

管理员、老师登录成功后,可以输入学生编号查询信息

如输入老师编号存在,显示该老师信息

与预期结果一致

五、实验结果

  

  

  

  

六、实验总结

经过大家的努力,学生信息管理系统终于做完了,通过这次实习系统设计,总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到的知识更多。更进一步的了解了数据库的基本操作,在这之前,数据库的学习仅仅刚开了个头,我们只是在了解一些概念性的东西。在做这个系统之前,我连基本的连接数据库、配文件、数据库查询语句等这些东西都不熟练,现在对于数据库的增删改查操作比较熟练了,对于初学者来说,比较头疼的就是对于单引号的处理。我的建议是如果不理解先把按照课本上正确的语句敲下来,然后在多次进行数据库的链接,增删改查操作不断总结规律。这次设计的学生信息管理系统,全在自己所掌握的知识下,进行编程设计,完全体现了自己在数据库语言和程序设计课程学习状况,充分地为自己以后更深入了数据库语言奠下深厚的基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值