查看“Java架构设计之商品口”的源代码
←
Java架构设计之商品口
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==任务描述== 1.创建商品操作的业务逻辑层 2. 对用户操作的数据访问层做必要改动 3. 编写表示层的代码 ==实训原理== [[文件:java2020-12-3.png|500px]] ===表示层=== 表示层又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是B/S信息系统中的Web浏览页面。作为Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用BLL或者是Models进行调试,保证用户体验。 ===业务逻辑层=== 业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层UI中,实现软件功能。 ===数据访问层=== 数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。 ==数据访问层== ===GoodsDao接口=== 本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。 变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去 <nowiki> package dao; import java.util.ArrayList; import entity.Goods; public interface GoodsDao { public int getNum(); public boolean add(Goods g);//增加商品 public boolean delete(String id);//删除商品 public ArrayList<Goods> findAll();//查询所有商品 public ArrayList<Goods> find(String name);//查询某种商品是否存在 public boolean modify(String id,float p);//修改商品 public int hasGoods(String name);//查询某种商品是否存在,返回id号 }</nowiki> ===创建GoodsDaoSQL实现类=== 本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。 变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去 <nowiki> package dao; import java.sql.*; import java.util.ArrayList; import entity.*; public class GoodsDaoSQL implements GoodsDao{ // JDBC 驱动名及数据库 URL Connection conn; public GoodsDaoSQL(){ this.getConn(); } /** * 连接数据库 * @param 值为空 * @return 布尔值 */ private boolean getConn() { //Connection conn = null; try { final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8"; // static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8"; // 数据库的用户名与密码,需要根据自己的设置 final String USER = "root"; final String PASS = "000000"; Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动 this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS); System.out.println("MySQL连接成功!"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); return false; } catch (SQLException e) { System.out.println(e.getMessage()); return false; } return true; } } </nowiki> ==业务逻辑层== [[文件:java2020-12-1.png|500px]] ===创建服务类GoodsService=== <nowiki> package service; import java.util.ArrayList; import dao.*; import entity.*; //import exception.GoodsException; /** * 这个类处理与商品有关的业务逻辑 */ public class GoodsService { private GoodsDao dbset ; public GoodsService() { dbset = new GoodsDaoSQL(); } public static void main(String[] args) { } } </nowiki> ===添加商品addGoods()=== <nowiki> /** * 商品上架,向数据仓库中添加商品 * @param g 向仓库中添加的商品 * @return 值为空 */ public void addGoods(Goods g){ String name = g.getName(); int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 if(id == 0){ //如果没有该商品,再执行上架操作 if(dbset.add(g)==true) { System.out.println(" 商品 "+g.getName() +" 成功上架"); }else { System.out.println(" 商品 "+g.getName() +" 上架失败"); } }else { System.out.println(" 商品 "+g.getName() +"已存在"); } } </nowiki> ===删除商品delGoods()=== <nowiki>/** * 向数据仓库中删除商品 * @param g 向仓库中删除的商品 * @return 值为空 */ public void delGoods(String name) { //try{ System.out.println("现在开始向库中删除商品 "); int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 if(id!=0){//确定有该商品再执行删除操作 if(dbset.delete(Integer.toString(id))==true) { System.out.println("商品"+ name+" 下架成功!"); }else { System.out.println("商品"+ name+" 下架失败!"); } }else{ //throw new GoodsException("要删除的商品"+id+" 不存在哦!"); System.out.println("要删除的商品"+name+" 不存在"); } System.out.println(); //}catch(GoodsException e){ //System.out.println(e.toString()); //} }</nowiki> ===查看所有商品queryGoods( )=== <nowiki> /** * 查询仓库中的商品 * * @param 值为空 * @return 值为空 */ public void queryGoods( ){ ArrayList<Goods> goods = dbset.findAll(); System.out.println("本店现有商品数:"); for(Goods g :goods) { System.out.println(g); } System.out.println();; }</nowiki> ===搜索商品queryGoods(String name)=== <nowiki>/** * 查询仓库中的商品 * * @param 值为空 * @return 值为空 */ public void queryGoods(String name) { ArrayList<Goods> goods = dbset.find(name); System.out.println("查询到名称为"+name+"商品有:"); for(Goods g :goods) { System.out.println(g); } System.out.println();; }</nowiki> ===查询函数queryUser( )=== 这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理 <nowiki>/** * 查询仓库中的用户 */ public void queryUser( ){ System.out.println("本店现有如下用户:"); ArrayList<User> users =userset.queryUser(); //测试代码 for(User user:users){ System.out.println(user); } System.out.println(); }</nowiki> ===修改商品modifyGoods()=== <nowiki> /** * 向数据仓库中修改商品的数量 * @param g 仓库中待修改的商品 * @param p 商品修改后的价格 * @return 值为空 */ public void modifyGoods(String name,float p) { System.out.println("现在开始修改商品 "+name+ " 的价格"); //try{ int id = dbset.hasGoods(name); if(id==0){//如果查不到这个商品 //throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!"); System.out.println("要修改的商品"+name+" 不存在"); }else {//查到这个商品了,可以做进一步操作 dbset.modify(Integer.toString(id), p); System.out.println(name+" 的价格更改为 " + p+ " 元"); System.out.println(); } //}catch( GoodsException e){ //System.out.println(e.toString()); //} } </nowiki> ===在main方法中写测试代码=== <nowiki> public static void main(String[] args) { // TODO Auto-generated method stub GoodsService s = new GoodsService(); //GoodsDao s = new GoodsDaoSet(); //GoodsDao s = new GoodsDaoArrayList(); //GoodsDao s = new GoodsDaoLinkedList(); Goods g1= new Goods("1","山西刀削面",105.0f,30); Goods g2= new Noodles("2","兰州牛肉面",15.0f,20); Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false); //商品上架 System.out.println("执行添加餐品操作..."); s.addGoods(g1); s.addGoods(g2); s.addGoods(g3); //System.out.println("共找到商品?件:"+s.getNum()); System.out.println("以下为商品详情信息:"); s.queryGoods(); //商品下架 System.out.println("执行删除餐品操作..."); s.delGoods("山西刀削面"); //查询所有商品 s.queryGoods(); System.out.println("修改兰州牛肉面的价格为15:"); s.modifyGoods("兰州牛肉面", 15f); //根据商品名称查找商品 String name="牛肉面"; s.queryGoods(name); }</nowiki> ===完整代码=== <nowiki> </nowiki> ==显示层== 显示层 调用业务逻辑层的代码,完成查询 [[文件:java2020-12-4.png]] ===客户端=== main/TestUser: <nowiki>package main; import java.util.Scanner; import service.*; public class TestUser { public static void start(Scanner sc){ System.out.println("****************************"); System.out.println("*****欢迎登录商院面馆平台客户端****"); System.out.println("****************************"); System.out.println("账号:"); String uname = sc.nextLine(); System.out.println("密码:"); String pwd = sc.nextLine(); //System.out.println("用户名为:"+uname+",密码为:"+pwd); UserService us =new UserService(); us.login(uname,pwd);//向下调用业务逻辑层的代码 } public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); start(sc); } }</nowiki> 输出结果: [[文件:java2020-12-5.png]] ===管理端=== 管理端显示层功能: 1. 添加用户 2. 展示所有用户 管理员先在这两个功能中选择其一,然后根据选择、调用业务逻辑层的不同方法,实现功能。
返回至
Java架构设计之商品口
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息