JAVA程序设计:报刊订阅管理系统课程设计

摘    要

        一直以来,人们在企业单位中都是使用传统人工方式管理单位的报刊订阅,这种管理方式存在着许多缺点,譬如,效率低,保密性差,而且时间一长,将产生大量的文件和数据,难以归类整理,这对于查找、更新和维护都带来了不少的麻烦。通过学习,了解了JAVA、MySQL数据库以及基于JAVA的GUI应用程序开发,并在本次课程设计中利用这些知识点,实现一个面向于企业的报刊订阅管理系统,能够通过计算机和数据库对本单位的报刊订阅进行一系列的管理,实现智能化管理,克服了传统人工管理方式的缺点以及弊端。

        在报刊订阅管理系统中,要实现一个单位指定一个管理员,管理员拥有最高的权限,可以实现录入用户信息,录入管理员信息,报刊目录信息的增删改,订单信息,同时可按用户名、报刊名、部门对系统进行相应的查询信息以及统计信息等功能。界面设计友好,方便用户的操作。然后就是用户功能:可以订阅报刊,修改自己的账户信息,查看自己的订阅记录等等。这次的系统开发可以提高学生面向对象程序设计开发能力,提高数据库管理信息系统的应用开发能力,培养成型产品项目的软件过程意识,以及项目文档的写作能力和团队协作能力。

关键词:Java技术  数据库技术  报刊订阅管理系统

1.概述
1.1背景
        一直以来,人们在企业单位中都是使用传统人工方式管理单位的报刊订阅,这种管理方式存在着许多缺点,譬如,效率低,保密性差,而且时间一长,将产生大量的文件和数据,难以归类整理,这对于查找、更新和维护都带来了不少的麻烦。针对报刊的订阅管理这一环节,本系统基本实现了用户的在线订阅报刊功能、以及管理员的相关管理功能,如报刊录入功能、账号管理、统计订阅信息等等。基本上实现了应有的功能。
1.2意义

        随着订阅报刊的信息不断增多.单纯依靠人手劳动进行的订阅保存已呈现出疲态,很难满足不断变化的报刊管理需要。与此同时。科技发展的迅速兴起,一方面打破了以往线下形态对报刊订阅在时问和空间上的限制,另一方面向传统的报刊订阅管理模式提出了新的挑战。

        通过本系统解决了大量的报刊以及订阅数据的储存问题,以及免去了大量的人工劳动。同时也使得每个人的工作量变小,使的各种管理以及操作变得更加的简单明了,工作速度效率大大提升。

1.3需求分析

        系统的主要使用对象是用户以及管理员用户订阅报刊是要察看各个报刊的详细信息,还要选择些感兴趣的报刊,需要生成对应存在的报刊表,在发现已有的订阅信息有冲突后能够修改先前选择的信息。管理员则要进行相应的添加报刊功能,在管理员通过后添加成功后才可加入报刊信息表让用户进行选择。管理员还有最主要的功能就是对于订阅信息的统计功能。在全部选定后,打印出所需要的对于的报表。管理员可以管理所有的账户信息,以及修改对应信息,还可以来查看和总体订阅情况

1.4可行性分析

技术可行性:

        报刊订阅管理系统是一款管理系统,系统囊括了订阅管理和统计管理等等的基本过程。系统覆盖用户订阅、查看、修改信息等各个环节,软件的各个模块操作界面简单、实用简单明了,用户可以在最短的时间内掌握系统的使用方法。用户可以在最短时间内找到自己所需要的信息。系统软件采用现在流行且技术很成熟的IDEA以及MYSQL设计平台进行开发并实现。可以进行高效的管理,提高工作效率。本系统具有以下特点: a.具有良好的系统性能,友好的用户界面。 b.较高的处理效率,便于使用和维护。 c.采用成熟的技术开发,全系统具有较高的技术水平 d.尽可能地简化选课的管理工作,提高工作效率

(1)Java技术特征:一、跨平台/可移植性 二、安全性 三、面向对象 四、简单性 五、高性能 六、分布式 七、多线程 八、健壮性

(2)数据库技术特征:数据结构化 ,数据之间具有联系,面向整个系统;数据的共享性高,冗余度低,易扩充;数据独立性高。小组内部具备了基本的开发能力以及相关的知识储备,对于Java以及数据库的知识,我们小组的成员都可以进行运用,对于一些新的知识的学习,例如,我负责的模块内要求的JDBC的相关知识也进行的一定的学习和知识储备。

(3)JDBC连接方式:Java与数据库系统的一种连接方式,Java程序使用DBC API与数据库进行通信,并用它操作数据库中的数据。JDBC API使Java程序与具体数据库系统独立开来,保证了Java程序高度的可移植性。

2概要设计

2.1总体设计

(1)用户端

        在系统的用户端中,包括了用户可以进行的一系列操作,例如:1、最主要的订阅报刊功能,其中还包括了部分的统计价钱功能。2、账号管理功能,在这一功能中,可以对一些个人信息进行对应的修改。3、查询订阅记录,用户可以在这里查看已经订阅了的相应的报刊。

(2)管理端

        在系统中管理员拥有所有的系统权限,也拥有最重要的对于报刊信息以及账号信息的录入,同时也可以对订阅信息的统计等等。

流程分析:

1、管理员要先对报刊信息录入才能被选择,管理员可以按照名称或者类型来对报刊进行查找。

2、管理员可以查看所有的订单信息,并且拥有统计功能。

3、管理员可以管理所有的账号信息,包括管理员和用户账号。并可以进行添加和删除操作。

(3)控制端

        整个系统的界面主要分为登录,注册,主系统界面(用户模块,管理员模块)用户模块的功能有订阅包括,统计价钱、账号管理、查看订阅记录等等。管理员模块的功能有报刊目录管理,查看所有订单信息、管理账号。

(4)数据端

        整个系统的数据分为四个表,分别是:用户表、管理员表、报刊信息表、以及订阅信息表。四个表都包括了基本的属性,同时也拥有相互之间的联系。

2.2功能模块设计

2.2.1功能结构

系统的功能模块分为三个:用户管理、管理员管理。

  1. 、用户管理:包括登录模块、订阅模块、统计模块、修改信息模块。
  2. 、管理员管理:包括登录模块、报刊增删改查模块、查询模块、统计模块

2.3.2用户管理模块

用户管理模块

用户管理包括了订阅模块、账号管理模块和订阅记录查询模块

订阅模块:系统会先查询该用户是否可以选这一报刊,然后再查询该用户是否已经选过这一报刊,也会进行对应的价钱统计,最后才会订阅成功。

账号管理模块:用户可以对个人的基本信息进行查询,如何需要进行对应的修改也可以进行相关操作。

订阅记录查询模块:用户可以在这一模块查询自己已经进行选择的报刊记录。

2.3.3管理员管理模块

管理员管理模块

管理员管理包括报刊目录管理模块、订单管理模块、账号管理模块。

报刊目录管理模块:管理员对需要进行添加的报刊信息进行录入。同时可以进行对应的查询功能,分为按照类型查询或者名称查询(支持模糊查询)

订单管理模块:管理员可以在这里看到所有的订单订阅信息,同时可以进行对应的统计,或者按照报刊名称进行查询号再对某一报刊进行统计。

账号管理模块:管理员可以对其他管理员的账号或者是用户的账号进行管理功能,同时可以进行对应的增加、删除操作,其中的管理员账号可以进行按照部门

2.3界面设计

用户模块:

主要界面,登录功能选择用户身份。

 

用户登录界面:输入对应的账号和密码进入系统

 

用户主界面:进行需要的功能选择

用户订阅报刊功能:用户进行查询报刊然后进行订阅操作,可以统计一共选择的报刊。

用户账号管理:可以查看用户个人信息,同时进行对应修改操作。

用户订阅记录功能:查询已经订阅了的报刊。

管理员模块

管理员登录:输入对应的管理员所属账号和密码登录系统。

管理员主界面:选择所需要的功能操作。

管理员目录管理:可以进行添加,查找的操作。

管理员订单管理:可以查询所有已经存在的订单信息,支持存在每一报刊的订单信息。同时具有统计功能。

管理员账号管理,分为管理员账号和用户账号。

管理员管理用户账号:可以进行添加、删除操作。

管理员管理管理员账号:可以进行添加、删除操作。

2.4小结        

        这一部分的难点在于界面的设计,由于我们上学期的GUI部分仅仅只是学习了一点点东西,根本不足以完成这次的课程设计任务,所以还得继续进行GUI的学习,同时也要一步步的跟着视频来敲代码,另外这里还有一个难点就是,GUI界面的设计美观,虽然敲出来大致的界面,但是界面有点难看,所以又要花费大量的时间在窗口的调试得到上面。最后还需要,分析优缺点,一步步优化,再实现。

3.详细设计

3.1功能流程设计

系统从登录界面开始,输入对应的账号与密码,可以分别进入对应的界面进行操作。界面包括三个:用户界面、管理员界面。

(1)用户界面

        用户通过自己的账号、密码进入到用户主界面,此时有三个选项:订阅功能、账号管理、订阅记录。学生可以根据自己的需要进行选择操作。

(2)管理员界面

        管理员可以通过其特有的账号、密码进入到管理员主面进行操作,其中有三个选项分别是报刊目录管理、订单管理、账号管理。其中报刊目录管理可以进行添加查找操作,订单管理也包含,统计查找。账号管理则是可以管理管理员和用户账号。

3.2数据库设计

        用户的需求具体体现在对各种信息的提供和查询,数据库是此类系统的核 心,系统中所有的信息都存储在数据库中,在所有ASP.NET 页面中通过ADO.NET 与数据库连接,操作数据库中的数据,从而实现所有需要的功能。数据库软件有很多,本系统中数据库采用MYSQL 作为数据库工具。数据库是网站的核心,数据库设计的合理与否对网站的建设有着至关重要的影响。 一个良好的数据库开发过程一般是先系统分析,再逻辑设计,然后物理实现。系统分析中分析数据库用户需求,并画出E-R图直观地表示出数据库系统的需求。逻辑设计中根据系统分析设计的一个关系模型。物理设计为逻辑设计中的数据模型选 取一个最合理的应用环境的物理结构,通常选取一个常用数据库软件,用数据库 软件创建与逻辑设计中数据模型对应的数据库。

3.2.1逻辑设计

(1)、数据表结构

        逻辑结构设计是将概念模型从 E-R 图转换成某种数据库管理系统支持的 数据模型, 一般是转换为关系数据模型。

        本次系统所使用的数据库表一个有四个:admin(管理员表)、newspaperdirectory(报刊表)、subscribe(订单表)、user(用户表)

(1)admin(管理员表)

用于管理员账户的相关信息。例如:管理员id、管理员名、管理员密码等等。

(2)newspaperdirectory(报刊表)

用于储存报刊的基本信息。

(3)subscribe(订单信息表)

用于已经存在的订单信息等等。

 

(4)user(用户账号表) 

用于储存用户的信息,包括:用户的id、用户名、用户密码等等。

3.2.2E-R图 设计:

        由上述数据项,可以设计出能够满足用户需求的各种实体,以及他们之间的 关系。这些实体包含了各种具体的信息,通过相互之间的作用使整个数据库可以用E-R图表示。

(1)管理员实体

管理员实体的属性由:管理员id、管理员姓名、管理员密码、管理员部门组成。

用户实体和管理员实体之间的管理关系是一对多的关系。

报刊实体和管理员实体之间的管理关系是一对多的关系。

(2)报刊实体

报刊实体的属性为:报刊号、报刊售价、报刊类型、报刊名、报刊出版社

报刊实体与用户实体之间的订阅关系为多对多关系,该关系具有成绩属性。

报刊实体和管理员实体之间的管理关系是一对多的关系。

(3)用户实体

用户实体的属性为:用户名、用户密码、用户id、用户电话、用户地址、用户登录名。

用户实体与报刊实体之间的订阅关系为多对多关系。

用户实体和管理员实体之间的管理关系是一对多的关系。

3.2.2物理设计 

        逻辑设计是面向用户的,而物理结构设计是面向计算机的。数据库物理结构 设计的主体任务就是给逻辑数据模型选择一种最适合应用要求的物理结构。其主 要内容有数据库存储结构设计、存取路径和存储方法的选择、数据索引的建立等。 高效的物理数据结构既能为系统节省存储空间,又能提高存储速度。系统开发人员在系统实施阶段可以依据物理结构设计的内容,利用所选择的数据库管理系统 对存储的数据进行相应的操作。

主要工具:IDEA、mysql、Navicat Premium 15

DBMS的选型:MYSQL

        DBMS的介绍:MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

        MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

        MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

数据库表的物理创建:

(1)admin(管理员表)

(2) newspaperdirectory(报刊表)

(3) subscribe(订单表)

 (4)user(用户表)

3.2.3小结

        本章所进行的是详细设计,包括了数据库设计、数据库表设计、E-R图等等,这些都是系统的最基本组成,数据库的设计,是对所使用的数据库的认知。数据库的表设计,是对所设计系统的数据组成,所有的操作都是基于数据库表的基础上进行的。E-R图则是对于我们所设计的表的一些属性的联系等等。还有的是物理设计,对于物理设计是面向计算机的 高效的物理数据结构既能为系统节省存储空间,又能提高存储速度。在这一章,我对于数据库软件以及相关的数据库知识进行了巩固和进步,同时也让我收获良多,使我的基础知识更加的牢固。

 4系统实现

        系统采用类似MVC模式的方式,将数据库操作、流程控制和视图分开处理。系统的项目使用了idea的模块划分,依照实现功能划分为数个模块。每个模块的controller控制器类作为该模块的入口,调用视图类、service业务类:通过业务类从dao层获取数据,经由service层的业务类处理后经controller抵达view层;也可以获取view层输入的数据,由controller层决定处理方式并由service层执行,最后从dao层进入数据库。

 4.1以用户的订阅功能为展示实现的模式

4.1.1view层

实现视图的类:

        “标准表格”窗口usersubscriberframe,提供基本的布局和表格模板的setter、getter方法。以下为标准表格窗口的代码(Ways类负责设置窗口大小及位置,在此不详细描述):

public class UserSubscribeFrame {
    public DbUtil dbUtil = new DbUtil();
    public DirectoryDao directoryDao = new DirectoryDao();
    public UserDao userDao = new UserDao();
    public OrderDao orderDao = new OrderDao();
    JTable jTable;
    JTable shop;
    public int row;
    public int row1 = -1;
    public String id;
    public String money = "0.00";
    public String price;
    public String price1;
    public JLabel number;

    public String pet;
    public String phone;
    public String address;
    public String newspaperName;
    public String newspaperPrice;

    public UserSubscribeFrame(String userName){
        SpringLayout springLayout = new SpringLayout();//弹簧布局
        JPanel pan = new JPanel(springLayout);
        JFrame fra = new JFrame("报刊订阅");//登陆页面标题
        Container con = fra.getContentPane();//得到窗体的内容面板

        JLabel title = new JLabel("报刊订阅");
        JLabel name = new JLabel("请输入报刊名称:");
        JTextField nameTxt = new JTextField();
        JButton seek = new JButton("查询");
        JButton subscribe = new JButton("加入购物车");
        JLabel user = new JLabel("用户:");
        JLabel un = new JLabel(userName);
        JLabel total = new JLabel("总价:");
        number = new JLabel(money);
        JLabel yuan = new JLabel("元");
        JLabel cart = new JLabel("购物车");
        JButton delete = new JButton("移出购物车");
        JButton finish = new JButton("确认订阅");

        String [] columns = {"编号","报刊名称","报刊类型","报刊简绍","报刊单价"};//目录表格
        DefaultTableModel model = new DefaultTableModel(columns,0);
        DefaultTableModel model1 = new DefaultTableModel(columns,0);
        jTable = new JTable(model);
        JScrollPane jScrollPane = new JScrollPane(jTable);
        jScrollPane.setPreferredSize(new Dimension(550,300));//目录表格
        shop = new JTable(model1);
        JScrollPane shopping = new JScrollPane(shop);
        shopping.setPreferredSize(new Dimension(550,250));

        title.setFont(new Font("宋体",Font.BOLD,20));
        name.setFont(new Font("宋体",Font.BOLD,15));
        nameTxt.setPreferredSize(new Dimension(200,20));
        user.setFont(new Font("宋体",Font.BOLD,15));
        un.setFont(new Font("宋体",Font.BOLD,15));
        un.setForeground(Color.blue);
        total.setFont(new Font("宋体",Font.BOLD,15));
        number.setFont(new Font("宋体",Font.BOLD,15));
        number.setForeground(Color.red);
        yuan.setFont(new Font("宋体",Font.BOLD,15));
        cart.setFont(new Font("宋体",Font.BOLD,15));
        cart.setForeground(Color.red);

        SpringLayout.Constraints titleC = springLayout.getConstraints(title);//获取title位置
        titleC.setX(Spring.constant(250));//title定位
        titleC.setY(Spring.constant(20));//title定位
        pan.add(title);
        pan.add(name);
        pan.add(nameTxt);
        pan.add(seek);
        pan.add(jScrollPane);
        pan.add(subscribe);
        pan.add(user);
        pan.add(un);
        pan.add(total);
        pan.add(number);
        pan.add(yuan);
        pan.add(shopping);
        pan.add(cart);
        pan.add(delete);
        pan.add(finish);

        seek.addActionListener(new ActionListener() {//查询按钮功能设置
            @Override
            public void actionPerformed(ActionEvent e) {
                String newspaperName = nameTxt.getText();
                Directory directory = new Directory();
                directory.setNewspaperName(newspaperName);
                fillTable(directory);
            }
        });

        jTable.addMouseListener(new MouseAdapter() {//表格点击选中处理(显示)
            @Override
            public void mousePressed(MouseEvent e) {//点击获取信息
                super.mousePressed(e);
                row = jTable.getSelectedRow();
                id = (String) jTable.getValueAt(row,0);
            }
        });

        shop.addMouseListener(new MouseAdapter() {//表格点击选中处理(显示)
            @Override
            public void mousePressed(MouseEvent e) {//点击获取信息
                super.mousePressed(e);
                row1 = shop.getSelectedRow();
            }
        });

        subscribe.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (StringUtil.isEmpty(id)){
                    return;
                }
                id = (String) jTable.getValueAt(row,0);
                price = (String) jTable.getValueAt(row,4);
                BigDecimal num1 = new BigDecimal(money);
                BigDecimal num2 = new BigDecimal(price);
                num1 = num1.add(num2);
                money = String.valueOf(num1);
                number.setText(num1.toString());
                fillShop(id);
            }
        });

        delete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                price1 = (String) shop.getValueAt(row1,4);
                if(row1 != -1){
                    model1.removeRow(row1);
                }
                row1 = -1;
                BigDecimal num1 = new BigDecimal(money);
                BigDecimal num2 = new BigDecimal(price1);
                num1 = num1.subtract(num2);
                money = String.valueOf(num1);
                number.setText(num1.toString());
            }
        });

        finish.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Connection con = null;
                try {
                    con = dbUtil.getCon();
                    ResultSet rs = userDao.all(con ,userName);
                    rs.next();
                    pet = rs.getString("name");
                    phone = rs.getString("phone");
                    address = rs.getString("address");

                    //JOptionPane.showMessageDialog(null,shop.getRowCount());
                    for(int n = shop.getRowCount()-1; n>=0; n--){
                        newspaperName = (String) shop.getValueAt(n,1);
                        newspaperPrice = (String) shop.getValueAt(n,4);
                        try {
                            con = dbUtil.getCon();
                            orderDao.insertOrder(con,userName,pet,phone,address,newspaperName,newspaperPrice);
                        }catch (Exception e2){
                            e2.printStackTrace();
                        }finally {
                            dbUtil.closeCon(con);
                        }
                    }
                    JOptionPane.showMessageDialog(null,"订阅成功!");
                }catch (Exception e1){
                    e1.printStackTrace();
                }finally {
                    try {
                        dbUtil.closeCon(con);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                }
            }
        });

        this.fillTable(new Directory());

        con.add(pan);
        fra.setLocation(300,10);//窗体位置
        fra.setSize(610,800);//窗体大小
        fra.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//点击“关闭”按钮关闭程序
        fra.setVisible(true);//窗口可见
    }

    /**
     * 填充目录表格
     * @param directory
     */
    public void fillTable(Directory directory){//填充表格
        DefaultTableModel defaultTableModel =(DefaultTableModel) jTable.getModel();
        defaultTableModel.setRowCount(0);//将列表清空
        Connection con = null;
        try {
            con = dbUtil.getCon();
            ResultSet rs = directoryDao.nameSeekDirectory(con,directory);
            while(rs.next()){
                Vector vector = new Vector();
                vector.add(rs.getString("id"));
                vector.add(rs.getString("newspaperName"));
                vector.add(rs.getString("newspaperType"));
                vector.add(rs.getString("newspaperDesc"));
                vector.add(rs.getString("newspaperPrice"));
                defaultTableModel.addRow(vector);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 加入购物车
     * @param id
     */
    public void fillShop(String id){
        Connection con = null;
        try{
            con = dbUtil.getCon();
            ResultSet rs = directoryDao.addShop(con,id);
            DefaultTableModel defaultTableModel =(DefaultTableModel) shop.getModel();
            rs.next();
            Vector vector = new Vector();
            vector.add(rs.getString("id"));
            vector.add(rs.getString("newspaperName"));
            vector.add(rs.getString("newspaperType"));
            vector.add(rs.getString("newspaperDesc"));
            vector.add(rs.getString("newspaperPrice"));
            defaultTableModel.addRow(vector);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                dbUtil.closeCon(con);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

视图如图所示:

        要先进行需要的报刊信息查询(如果不查询就会显示所有的报刊)、然后加入购物车,才能确认订阅。

4.1.2填充表格

        这里是重点,在于GUI的表格内容的获取以及填充。

public void fillTable(Directory directory){//填充表格
    DefaultTableModel defaultTableModel =(DefaultTableModel) jTable.getModel();
    defaultTableModel.setRowCount(0);//将列表清空
    Connection con = null;
    try {
        con = dbUtil.getCon();
        ResultSet rs = directoryDao.nameSeekDirectory(con,directory);
        while(rs.next()){
            Vector vector = new Vector();
            vector.add(rs.getString("id"));
            vector.add(rs.getString("newspaperName"));
            vector.add(rs.getString("newspaperType"));
            vector.add(rs.getString("newspaperDesc"));
            vector.add(rs.getString("newspaperPrice"));
            defaultTableModel.addRow(vector);
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            dbUtil.closeCon(con);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 4.1.3加入购物车:

        这里是订阅功能的主要实现,这里程序运行完就会调用dao层的sql语句将数据加入到数据库的表中,完成订阅功能。

public void fillShop(String id){
    Connection con = null;
    try{
        con = dbUtil.getCon();
        ResultSet rs = directoryDao.addShop(con,id);
        DefaultTableModel defaultTableModel =(DefaultTableModel) shop.getModel();
        rs.next();
        Vector vector = new Vector();
        vector.add(rs.getString("id"));
        vector.add(rs.getString("newspaperName"));
        vector.add(rs.getString("newspaperType"));
        vector.add(rs.getString("newspaperDesc"));
        vector.add(rs.getString("newspaperPrice"));
        defaultTableModel.addRow(vector);
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            dbUtil.closeCon(con);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 4.1.4dao层

        dao层同样有一个接口及其实现类,以下代码来自实现类。

        这里主要展示的是订阅功能的dao层结构。

public class OrderDao {
    /**
     * 增添订单信息
     * @param con
     * @param userName
     * @param name
     * @param phone
     * @param address
     * @param newspaperName
     * @param newspaperPrice
     * @return
     * @throws Exception
     */
    public int insertOrder(Connection con, String userName, String name, String phone, String address, String newspaperName, String newspaperPrice)throws Exception{
        String sql = "insert into subscribe values(null,?,?,?,?,?,?)";
        PreparedStatement pstmt = con.prepareStatement(sql);
        pstmt.setString(1,userName);
        pstmt.setString(2,name);
        pstmt.setString(3,phone);
        pstmt.setString(4,address);
        pstmt.setString(5,newspaperName);
        pstmt.setString(6,newspaperPrice);
        return pstmt.executeUpdate();
    }

    /**
     * 填充目录表格
     * @param con
     * @return
     * @throws Exception
     */
    public ResultSet fillOrder(Connection con)throws Exception{
        String sql = "select * from subscribe";
        PreparedStatement pstmt = con.prepareStatement(sql);
        return pstmt.executeQuery();
    }

    /**
     * 订阅信息查找(按报刊名称查找)
     * @param con
     * @param order
     * @return
     * @throws Exception
     */
    public ResultSet nameSeekOrder(Connection con, Order order)throws Exception{
        String sql = "select * from subscribe where newspaperName like '%"+order.getNewspaperName()+"%'";
        PreparedStatement pstmt = con.prepareStatement(sql);
        return pstmt.executeQuery();
    }

    public ResultSet petSeekOrder(Connection con, String userName)throws Exception{
        String sql = "select * from subscribe where userName =?";
        PreparedStatement pstmt = con.prepareStatement(sql);
        pstmt.setString(1,userName);
        return pstmt.executeQuery();
    }
}

下载地址:https://download.csdn.net/download/Mrh_ge/89629923?spm=1001.2014.3001.5503 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值