商品超市管理系统作业

五一放假前,老师布置的一个小项目,就是做界面实现用户的登陆,商品的增删改查及显示商品,实现与数据库连接,放假回来基本完成。登陆界面主界面
如何完成的?这里想记录下过程,反思反思,首先,创建一个工程,然后在src里面就要想一下包的划分了:商品是一个类,属于实体;再就是界面,登陆界面,主界面,增删改查的界面;还有就是操作了,就是你在界面点击按钮之后需要实现什么操作与数据库之间,需要一个类,实现沟通;还有就是连接数据库,关闭连接一个工具类。。。我自己的设计
登陆实现起来感觉问题不大,首先数据库里有用户表,我们需要做的就是通过工具包代码连接数据库后判断一下,感觉问题来了,因为这里用到了存储过程,因为感觉写起来简单o(︶︿︶)o 唉

create or replace procedure isture_namepassword (uname in VARCHAR2,upassword in VARCHAR2,num out int)
as
begin
  select count(*) into num from my_user where USER_NAME=uname and USER_PASSWORD=upassword;
end;

之后有的对数据库的操作又没有用,老师后面又讲最好不要用操作过程,也懒得改了。。登陆成功后,会进入到主界面,当然不成功会有温馨提示,哈哈,那么一大块显示商品,用到的是JScrollPanel里面加了JList,把每一个商品信息拼接成字符串显示出来

        //商品展示区
        list = new JList();
        //给list 绑定监听,获取当前点击的是哪一行
        list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                // TODO Auto-generated method stub
                if(e.getValueIsAdjusting()){
                    delPosition = list.getSelectedIndex();

                }
            }
        });
        //给list 绑定数据来源 Product[] list
        DefaultListModel model = new DefaultListModel();
        //增加数据
        for(String line:productDao.showProduct()){
            model.addElement(line);
        }
        list.setModel(model);
        //定义一个JscrollPanel
        JScrollPane scrollPanel = new JScrollPane();
        scrollPanel.setSize(list.getWidth(), list.getHeight());
        scrollPanel.setViewportView(list);

其实现在想想,也就是现在做这个小项目,真正的大的商品超市你想显示数据库里面的商品那不得卡爆,写到这里又想到了其实自己删除做的不好,没有独立出一个单独的UI,在主界面直接实现了,点击要删除的商品,会获得点击的下标,然后get之前拼接的字符串,分离得到商品主键ID,直接删掉,同时把所有model移除掉,重新加载显示。之所以删除做的不好,是因为觉得显示所有商品这个可以实现但是必要性不大,不用在主界面直接显示,完全可以在查询里添加,删除的话,弹出个UI,输入ID直接删掉就行了。
做的界面很粗糙,不友好,嘿嘿,这里不研究,现在说一下功能的实现,点击增加按钮,汗,也是储存过程实现

            con=DBDMLUtil.getConnection();//连接数据库
            CallableStatement cstmt = con.prepareCall("{call add_product(?,?,?)}");//调用过程
            //注册参数
            cstmt.setString(1, p.getName());
            cstmt.setInt(2, p.getAmount());
            cstmt.setDouble(3, p.getPrice());
            cstmt.execute();//执行
----------以下是简单的存储过程---------
create or replace procedure add_product (pname  VARCHAR2,pamount int,pprice NUMBER)
as
    num int;
begin
  select count(*)into num  from product where NAME=pname and price=pprice;
  if  num=1 then
      update product set amount=amount+pamount where NAME=pname and price=pprice;
  else
      insert into product values(product_seq.nextval,pname,pamount,pprice);
  end if;
 commit;
end;

增加时考虑到同一个商品同一个价格就不是一个新的商品,但是用的主键是通过序列生成的,所以会判断成两个商品,这里我们设定了一下。
删除之前提到了。。

delBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //监听事件,点击按钮后
                DefaultListModel model = ( DefaultListModel) list.getModel();//得到在JList中加的model
                String line=(String) model.getElementAt(delPosition);//delPosition是要删除的商品的在model中的下标,调用getElementAt()方法获得内容强转为String
                try {
                    productDao.delProduct(line);//调用删除方法
                } catch (Exception e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                //以下是重新加载到JList
                model.removeAllElements();
                for(String line2:productDao.showProduct()){
                    model.addElement(line2);
                }
                list.setModel(model);
            }
        });

接下来是修改,修改时也是点击要修改的商品(不合理,理由同上),获得点击的下标,同时弹出修改UI这里写图片描述
截图下面小瑕疵自动忽略,修改这里遇到问题了,不知道怎么得到要修改的ID,因为是在主界面点击得到的下标从而得到拼接的字符串,没有想到更好的传递给UpdateUI,最后没有办法只好在UpdateUI定义了一个static变量,传递过去。。。

public void updProduct(String upd_line,String pname,int pamount,double pprice) throws Exception{
        //get ID
        String str=upd_line.substring(0,10);
        String s = str.replaceAll("[^0-9]", "");
        int id=Integer.parseInt(s);
        //连接数据库进行操作
        Connection con=null;
        try {
            con=DBDMLUtil.getConnection();
            String sql="update product set name='"+pname+"',amount="+pamount+",price="+pprice+" where id="+id;
            Statement stmt = con.createStatement();
            stmt.executeUpdate(sql);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{
            DBDMLUtil.closeConnection(con);
        }
    }

最后这个查询卡了得有半个小时实现查询
精确查询还好说,因为会得到商品的名字。模糊查询,输入商品的部分名字其中想了很多错误的方法,因为sql语言 那个like后面有‘ ’然后好好的想了想,还是自己拼接字符串的错,平时学的太粗了

create or replace procedure get_amount_FselectProduct (spname in VARCHAR2,num out int)
as
  pname VARCHAR2(20):='%'||spname||'%';
begin
  select count(*)into num from product where name like pname;
end;

OK,要十点了,回宿舍,弄得头昏脑胀,明天再想想,今天先写这些。。。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值