【JAVAWEB學習筆記】網上商城實戰3:購物模塊和訂單模塊

来源:http://www.cnblogs.com/xieyupeng/archive/2017/06/05/6943451.html
-Advertisement-
Play Games

網上商城實戰3 今日任務 完成購物模塊的功能 完成訂單模塊的功能 1.1 購物模塊: 1.1.1 功能演示: 商品詳情: 購物車模塊: 1.1.2 代碼實現: 1.在商品詳情的頁面中點擊【加入購物車】鏈及. 2.提交到Servlet中: * 提交購買的商品的數量. * 提交購買的商品的ID. 3.將 ...


網上商城實戰3

今日任務

  • 完成購物模塊的功能
  • 完成訂單模塊的功能

1.1      購物模塊:

1.1.1    功能演示:

商品詳情:

 

購物車模塊:

 

1.1.2    代碼實現:

1.在商品詳情的頁面中點擊【加入購物車】鏈及.

2.提交到Servlet中:

    * 提交購買的商品的數量.

    * 提交購買的商品的ID.

3.將購物的信息存入到session中.

    * 將購物車的信息存入到session中.

    * 購物項對象的封裝(購物車中的每個購買商品的信息)

        * 商品的對象:

        * 數量

        * 小計

    * 購物車對象的封裝(購買所有商品的信息)

        * 購物項的集合

        * 總計

4.在頁面中將購物車的信息獲得到.

    * 在頁面中顯示出來.

 

【購物項的實體的封裝:CartItem】

public class CartItem {

    private Product product;// 購買的商品的信息

    private int count; // 購買的數量

    private double subtotal; // 購買商品的小計

   

    public Product getProduct() {

        return product;

    }

    public void setProduct(Product product) {

        this.product = product;

    }

    public int getCount() {

        return count;

    }

    public void setCount(int count) {

        this.count = count;

    }

    public double getSubtotal() {

        return count * product.getShop_price();

    }

    /*public void setSubtotal(double subtotal) {

        this.subtotal = subtotal;

    }*/
}

 

【購物車的實體:Cart】

public class Cart {

    // 定義一個購物項的集合的屬性:集合採用Map集合,因為移除購物項的時候方便.使用商品的id作為Map的key

    // 使用購物項作為Map的value.

    private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();

    // 定義購物車中的總計:

    private double total;

   

    public Map<String, CartItem> getMap() {

        return map;

    }

   

    public double getTotal() {

        return total;

    }

   

    // 方法:將購物項添加到購物車

    public void addCart(CartItem cartItem){

        // 判斷購物車中是否已經存在該購物項.

        String id = cartItem.getProduct().getPid();

        if(map.containsKey(id)){

            // 如果已經存在:在原來的數量的基礎上+新買的數量. 總計發生變化.

            // 獲得購物車中的原來購物項的信息

            CartItem _cartItem = map.get(id);

            _cartItem.setCount(_cartItem.getCount()+cartItem.getCount());

        }else{

            // 如果不存在:在集合中添加一個新的購物項. 總計發生變化.

            map.put(id, cartItem);

        }

       

        total += cartItem.getSubtotal();

       

    }

   

    // 方法:從購物車中移除購物項

    public void removeCart(String id){

        // 從map中移除選中的元素.

        // CartItem cartItem = map.get(id);

        CartItem cartItem = map.remove(id);

        // 將總計 - 移除購物項的小計

        total -= cartItem.getSubtotal();

       

    }

   

    // 方法:清空購物車

    public void clearCart(){ //

        //  將map集合清空.

        map.clear();

        // 將總結設置為0.

        total = 0;

    }

}

 

 

 

【在購物詳情頁面點擊加入購物車的鏈接】

   

public String addCart(HttpServletRequest req,HttpServletResponse resp){

        // 接收參數:

        String pid = req.getParameter("pid");

        int count = Integer.parseInt(req.getParameter("count"));

       

        try {

            // 封裝購物項:

            CartItem cartItem = new CartItem();

            // 商品對象:通過商品ID查詢商品.

            ProductService productService = (ProductService) BeanFactory.getBean("productService");

            Product product = productService.findById(pid);

            cartItem.setProduct(product);

            cartItem.setCount(count);

            // 調用購物車中的添加到購物車的方法:

            // Cart cart = new Cart();

            Cart cart = getCart(req);

            cart.addCart(cartItem);

           

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

 【在購物車頁面點擊清空購物車】

    public String clearCart(HttpServletRequest req,HttpServletResponse resp){

        // 獲得購物車對象.

        Cart cart = getCart(req);

        // 調用購物車中的方法:

        cart.clearCart();

        try {

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

 

【在購物車頁面點擊刪除鏈接】

   

public String removeCart(HttpServletRequest req,HttpServletResponse resp){

        try {

            // 接收參數:

            String pid = req.getParameter("pid");

            // 獲得購物車:

            Cart cart = getCart(req);

            cart.removeCart(pid);

            // 頁面跳轉

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

 

1.2      訂單模塊:

1.2.1    功能演示:

 

 

1.2.2    代碼實現:

1.2.2.1  創建表和實體:

CREATE TABLE `orders` (

  `oid` varchar(32) NOT NULL,

  `ordertime` datetime DEFAULT NULL,

  `total` double DEFAULT NULL,

  `state` int(11) DEFAULT NULL,

  `address` varchar(30) DEFAULT NULL,

  `name` varchar(20) DEFAULT NULL,

  `telephone` varchar(20) DEFAULT NULL,

  `uid` varchar(32) DEFAULT NULL,

  PRIMARY KEY (`oid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

CREATE TABLE `orderitem` (

  `itemid` varchar(32) NOT NULL,

  `count` int(11) DEFAULT NULL,

  `subtotal` double DEFAULT NULL,

  `pid` varchar(32) DEFAULT NULL,

  `oid` varchar(32) DEFAULT NULL,

  PRIMARY KEY (`itemid`),

  KEY `fk_0001` (`pid`),

  KEY `fk_0002` (`oid`),

  CONSTRAINT `fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`),

  CONSTRAINT `fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

1.2.2.2  生成訂單:

【在購物車的頁面點擊提交訂單】

提交到Servlet:

    * 封裝訂單和訂單項.

    * 調用業務層

    * 清空購物車

    * 頁面跳轉


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、BIOS更改 首先來bios更改:我們知道,uefi+gpt引導雖然出來的時間比較長,但是win7還不能完全的支持,所以在使用uefi+gpt安裝win7的時候就會出現各種錯誤!所以我們在安裝Windows 7的時候,不能把BIOS設置為“純UEFI”,並且必須禁用“Secure Boot”。下 ...
  • 一、Samba服務 Samba服務主要用於Linux伺服器給Windows用戶分享文件用 配置伺服器都需要以下5步操作 1.準備環境 1)關閉防火牆 systemctl stop firewalld 2)臨時關閉selinux sentenforce 0 或者在配置文件中永久關閉selinux vi ...
  • 分享一個由於KDE未被正確安裝導致ubuntu 無法用ssh正常訪問的問題解決過程 ...
  • 大家在學習正則表達式之前,首先要明確一點,並把它牢牢記在心裡,那就是: 在linux中,通配符是由shell解釋的,而正則表達式則是由命令解釋的,不要把二者搞混了。切記!!! 通常有三種文本處理工具/命令:grep、sed、awk,它們三者均可以解釋正則。下麵我就為大家介紹grep命令的使用方法。 ...
  • 一.介紹 二.服務端配置 1.關閉系統防火牆和selinux 查看系統防火牆的狀態,可以看到防火牆是開著的 [root@bogon ~] systemctl status firewalld ● firewalld.service firewalld dynamic firewall daemon ...
  • . NET Core 從2016年6月28日發佈,過去了將近一年的時間,但是在工作中發現大家對.net core的接受程度並不高,這隻是一個感覺,俗話說“沒有調查就沒有發言權”, 這兩天通過微信小程式在微信群里做了一個調查,參與的人數大概230人,從結果看大家都在等待.NET Core 2.0, 期 ...
  • 淺談orm 記得四年前在學校第一次接觸到 Ling to Sql,那時候瞬間發現不用手寫sql語句是多麼的方便,後面慢慢的接觸了許多orm框架,像 EF,Dapper,Hibernate,ServiceStack.OrmLite 等。當然每種orm都有各自的優勢,也有不足的地方。園子里也有很多大神開 ...
  • python2.7的編碼格式不再是ASCII碼,直接就是UTF-8. 導入sys模塊,通過getdefaultencoding方法可以查看編碼格式。 因此,python2.7解決中文字元的編碼問題可以直接聲明編碼格式,不再通過麻煩的decode和encode進行轉換。 此處仍然需要在中文字元前加入u ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...