基于WEB的电子产品商城网站的设计与实施

简介: 基于WEB的电子产品商城网站的设计与实施

项目编号:BS-SC-028

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

开发技术:SSM+JSP

二,项目简介

网络销售已经成为现在商品销售的一个主流趋势,传统的代理模式己经不在适合现在的商业的生态发展。网络销售可以实现F2C的这种厂家直销到客户手中的方式,这种方式可以降低销售成本,减少中间环节,让利给消费者,并且可以打破地域和时空的限制,让买卖更加的自由灵活。

经过调研开发的这套SSM手机商城系统,主要基于SSM框架进行商城系统的整体开发实现。前端使用Bootstrap进行页面布局,并使用MySql5.7关系型数据库进行商品和业务数据的存储。系统整体功能完整,操作简洁方便。

本商城系统主要实现在线销售各类品牌手机的功能,包含前端商品展示和购买以及后台管理功能。主要实现商品浏览、在线下单购买手机、热销手机查看、个人中心管理、后台的用户数据、订单数据、产品数据的管理等相关功能。本商城的上线必定能为商家的产品销售提供更好的销售渠道。

 SSM手机商城系统的使用者主要包含两种用户角色,其一是商城后台管理员角色,其二是商城前端用户角色,这两个角色的具体功能如下:

   管理员角色:管理员登录手机商城系统后台管理,对系统中相关的业务数据可以进行相应的管理操作,主要包含:前端客户管理、手机商品管理、手机订单管理、手机分类管理等操作;

前台用户角色:前台用户登录SSM手机商城系统后可以进行手机商品信息浏览、选择手机添加到购物车、在线下单购买、个人中心管理等操作。

下面展示一下SSM手机商城的功能结构图,如下图3-1所示。

图2-1 系统功能结构图

系统各模块功能介绍如下:

前台用户功能:

  1. 注册登陆:前端用户注册成功后可以输入自己的账户密码进行登陆,未登陆用户可以在线浏览相应的商品,但是不能购买,只有登陆系统后能执行相关的购买下单等操作。
  2. 个人信息:主要对个人信息,登陆密码进行修改维护。
  3. 浏览商品:可以查看所有类别的商品,并可以根据后台发布的热销产品进行查看,同进可以进行全文检索来搜索相关商品,实现基于商品名称的模糊查询。
  4. 在线下单:用户查看商品详情时,可以将商品添加到购物车中进行在线下单购买
  5. 我的订单:在我的订单中可以查看个人所有的订单信息。

   后台用户进行相应的业务数据管理功能如下:

  1.   用户管理:可以管理前端注册的客户信息,进行相应的数据增删改查操作。
  2.   商品管理:可以管理手机商城系统中展示的手机商品信息,进行相应的数据增删改查操作。
  3.   订单管理:对前端用户的下单信息进行相应的管理操作。
  4.   类目管理:主要实现对前端商城里展示的手机分类信息进行管理。
  5.   修改密码:可以修改后台管理员的登陆密码。  

下面展示一下具体的表结构设计。

用户信息表主要存储前端用户注册的相关信息,具体表结构如下。

表1 users表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

username

varchar(255)

N

Y

账户名

phone

varchar(255)

N

Y

电话

password

varchar(255)

N

Y

密码

name

varchar(255)

N

Y

用户名

address

varchar(255)

N

Y

地址

管理员信息表主要用来存储系统后台管理员的账户信息,具体的表结构如下。

表2 admins表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

username

varchar(255)

N

Y

用户名

password

varchar(255)

N

Y

密码

手机商品信息表主要存储手机商品的相关信息,具体表结构如下。

表3 goods表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

name

varchar(255)

N

Y

商品名

cover

varchar(255)

N

Y

封面图

image1

varchar(255)

N

Y

详细图1

image2

varchar(255)

N

Y

详细图2

price

double

N

Y

价格

intro

varchar(255)

N

Y

商品介绍

stock

Int(11)

N

Y

库存

type_id

timestamp

N

Y

所属类型

手机品牌类型表主要存储手机所属品牌类型的基本信息,具体表结构如下所示。

表4 types表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

name

varchar(255)

N

Y

类型名

商品热销信息表主要存储热销商品的相关信息,具体表结构如下所示。

表5 tops表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

type

varchar(255)

N

Y

类型

good_id

varchar(255)

N

Y

商品编号

定单信息表主要存储订单的相关信息,具体表结构如下所示。

表6 orders表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

name

varchar(255)

N

Y

收件人

phone

varchar(255)

N

Y

电话

address

varchar(255)

N

Y

地址

total

int(11)

N

Y

总价

amount

int(11)

N

Y

数量

user_id

int(3)

N

Y

用户编号

paytype

int(11)

N

Y

支付类型

systime

timestamp

N

Y

创建时间

status

int(11)

N

Y

订单状态

定单明细信息表主要存储订单的相关的详情信息,具体表结构如下所示。

表7 items表

字段名称

数据类型

主键

是否空

说明

id

bigint(20)

Y

N

主键

order_id

varchar(255)

N

Y

订单编号

good_id

varchar(255)

N

Y

商品品编号

amount

varchar(255)

N

Y

数量

price

varchar(255)

N

Y

单价

三,系统展示

3.1 SSM手机商城功能模块的展示

3.1.1 前台首页展示

  SSM手机商城前端主要就是实现商品的信息浏览及购买下单操作,主要包含商品浏览、在线下单、个人中心、我的订单等。具体操作界面展示如下图3-1所示。

图3-1 前台首页界面

3.1.2 商品分类浏览模块

用户进入SSM手机商城后进入分类查看即可查看不同手机品牌分类的商品信息列表,具体如下图6-2所示:

图3-2 分类查看界面

3.1.3前台用户购物车模块

   SSM手机商场面前台用户登陆系统后可以进入手机详情页面中将手机添加到购物车。然后在购物车中可以实现在线下单购买操作。添加购物车及用户下单操作界面如下图4-3、4-4所示。

图4-3 前台用户添加购物车操作界面

图4-4 前台用户提交订单操作界面

4.1.4 前台用户购买支付模块

   前台用户登陆SSM手机商城系统后,可以在提交订单后支付购买。相关管理操作界面如下图4-5所示。

图4-5前台用户订单支付界面

4.1.5前台用户个人订单管理模块

   SSM手机商城系统前台用户登陆系统后可以在个人订单管理模块中管理个人的订单信息。可以根据订单状态显示相关信息,并可以对未支付的订单进行支付操作,前端用户个人订单管理操作界面如下图4-6所示。

图4-6前台用户个人订单管理操作界面

4.1.6前台用户个人信息管理模块

   SSM手机商城系统前台用户登陆系统后可以在个人信息管理模块中管理个人的相关信息。前端用户个人信息管理操作界面如下图4-7所示。

图4-7前台用户个人信息管理操作界面

4.2后台功能模块的展示

4.2.1后台用户登录功能

   SSM手机商城系统后台用户如果想要对商城的相关信息进行管理操作,首先要登录系统,才可展开相关的操作。输入手机号和密码后用户登陆界面如下图4-6所示。

图4-10后台用户登录操作界面

4.2.2客户管理功能

   SSM手机商城系统系统管理员用户登陆系统后,可以进入客户管理菜单进行相应的管理员客户信息管理。用户管理操作界面如下图4-11、4-12所示:

图4-11后台客户管理功能界面图

图4-12后台客户新增界面图

4.2.3 后台手机商品管理操作UI

   SSM手机商城系统管理员用户登陆系统后,可以进入商品管理菜单进行相应的手机商品信息管理。其中主要包含手机商品的添加、修改、查询、加入条幅、加入新品、加入热销以及相应的移出操作等。商品信息管理操作界面如下图4-13、4-14所示。

图4-13后台商品管理功能UI界面

图4-14商台餐品新增功能UI界面

4.2.4 后台订单管理操作UI

   SSM手机商城系统系统管理员用户登陆系统后,可以进入商品订单管理菜单进行相应的商品订单信息管理。其中主要包含订单的查询、订单明细的查看等,可以根据订单不同的完成状态来查行查看,并可以根据用户的付款情况,收货情况等来设置订单的不同完成状,订单信息管理操作界面如下图4-15所示。

图4-15后台订单管理功能UI界面

4.2.5 后台商品类目管理操作UI

   SSM手机商城系统管理员用户登陆系统后,可以进入商品类目管理模块管理餐品的分类信息。商品类目管理界面如下图4-16所示。

图4-16商品类目管理功能UI界面

四,核心代码展示

package com.controller;
import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.entity.Admins;
import com.entity.Goods;
import com.entity.Tops;
import com.entity.Types;
import com.entity.Users;
import com.service.AdminService;
import com.service.GoodService;
import com.service.OrderService;
import com.service.TopService;
import com.service.TypeService;
import com.service.UserService;
import com.util.PageUtil;
import com.util.SafeUtil;
import com.util.UploadUtil;
/**
 * 后台相关接口
 */
@Controller
@RequestMapping("/admin")
public class AdminController {
  private static final int rows = 10;
  @Autowired
  private AdminService adminService;
  @Autowired
  private OrderService orderService;
  @Autowired
  private UserService userService;
  @Autowired
  private GoodService goodService;
  @Autowired
  private TopService topService;
  @Autowired
  private TypeService typeService;
  /**
   * 管理员登录
   * @return
   */
  @RequestMapping("/login")
  public String login(Admins admin, HttpServletRequest request, HttpSession session) {
    if (adminService.checkUser(admin.getUsername(), admin.getPassword())) {
      session.setAttribute("username", admin.getUsername());
      return "redirect:index";
    }
    request.setAttribute("msg", "用户名或密码错误!");
    return "/admin/login.jsp";
  }
  /**
   * 退出
   * @return
   */
  @RequestMapping("/logout")
  public String logout(HttpSession session) {
    session.removeAttribute("admin");
    return "/admin/login.jsp";
  }
  /**
   * 后台首页
   * @return
   */
  @RequestMapping("/index")
  public String index(HttpServletRequest request) {
    request.setAttribute("msg", "恭喜你! 登录成功了");
    return "/admin/index.jsp";
  }
  /**
   * 订单列表
   * 
   * @return
   */
  @RequestMapping("/orderList")
  public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,
      @RequestParam(required=false, defaultValue="1") int page) {
    request.setAttribute("flag", 1);
    request.setAttribute("status", status);
    request.setAttribute("orderList", orderService.getList(status, page, rows));
    request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows));
    return "/admin/order_list.jsp";
  }
  /**
   * 订单发货
   * 
   * @return
   */
  @RequestMapping("/orderDispose")
  public String orderDispose(int id, byte status,
      @RequestParam(required=false, defaultValue="1") int page) {
    orderService.dispose(id);
    return "redirect:orderList?flag=1&status="+status+"&page="+page;
  }
  /**
   * 订单完成
   * 
   * @return
   */
  @RequestMapping("/orderFinish")
  public String orderFinish(int id, byte status,
      @RequestParam(required=false, defaultValue="1") int page) {
    orderService.finish(id);
    return "redirect:orderList?flag=1&status="+status+"&page="+page;
  }
  /**
   * 订单删除
   * 
   * @return
   */
  @RequestMapping("/orderDelete")
  public String orderDelete(int id, byte status,
      @RequestParam(required=false, defaultValue="1") int page) {
    orderService.delete(id);
    return "redirect:orderList?flag=1&status="+status+"&page="+page;
  }
  /**
   * 顾客管理
   * 
   * @return
   */
  @RequestMapping("/userList")
  public String userList(HttpServletRequest request,
      @RequestParam(required=false, defaultValue="1") int page) {
    request.setAttribute("flag", 2);
    request.setAttribute("userList", userService.getList(page, rows));
    request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows));
    return "/admin/user_list.jsp";
  }
  /**
   * 顾客添加
   * 
   * @return
   */
  @RequestMapping("/userAdd")
  public String userAdd(HttpServletRequest request) {
    request.setAttribute("flag", 2);
    return "/admin/user_add.jsp";
  }
  /**
   * 顾客添加
   * 
   * @return
   */
  @RequestMapping("/userSave")
  public String userSave(Users user, HttpServletRequest request, 
      @RequestParam(required=false, defaultValue="1") int page) {
    if (userService.isExist(user.getUsername())) {
      request.setAttribute("msg", "用户名已存在!");
      return "/admin/user_add.jsp";
    }
    userService.add(user);
    return "redirect:userList?flag=2&page="+page;
  }
  /**
   * 顾客密码重置页面
   * 
   * @return
   */
  @RequestMapping("/userRe")
  public String userRe(int id, HttpServletRequest request) {
    request.setAttribute("flag", 2);
    request.setAttribute("user", userService.get(id));
    return "/admin/user_reset.jsp";
  }
  /**
   * 顾客密码重置
   * 
   * @return
   */
  @RequestMapping("/userReset")
  public String userReset(Users user, 
      @RequestParam(required=false, defaultValue="1") int page) {
    String password = SafeUtil.encode(user.getPassword());
    user = userService.get(user.getId());
    user.setPassword(password);
    userService.update(user);
    return "redirect:userList?flag=2&page="+page;
  }
  /**
   * 顾客更新
   * 
   * @return
   */
  @RequestMapping("/userEdit")
  public String userEdit(int id, HttpServletRequest request) {
    request.setAttribute("flag", 2);
    request.setAttribute("user", userService.get(id));
    return "/admin/user_edit.jsp";
  }
  /**
   * 顾客更新
   * 
   * @return
   */
  @RequestMapping("/userUpdate")
  public String userUpdate(Users user, 
      @RequestParam(required=false, defaultValue="1") int page) {
    userService.update(user);
    return "redirect:userList?flag=2&page="+page;
  }
  /**
   * 顾客删除
   * 
   * @return
   */
  @RequestMapping("/userDelete")
  public String userDelete(Users user, 
      @RequestParam(required=false, defaultValue="1") int page) {
    userService.delete(user);
    return "redirect:userList?flag=2&page="+page;
  }
  /**
   * 产品列表
   * 
   * @return
   */
  @RequestMapping("/goodList")
  public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request, 
      @RequestParam(required=false, defaultValue="1") int page) {
    request.setAttribute("flag", 3);
    request.setAttribute("page", page);
    request.setAttribute("status", status);
    request.setAttribute("goodList", goodService.getList(status, page, rows));
    request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));
    return "/admin/good_list.jsp";
  }
  /**
   * 产品添加
   * 
   * @return
   */
  @RequestMapping("/goodAdd")
  public String goodAdd(HttpServletRequest request) {
    request.setAttribute("flag", 3);
    request.setAttribute("typeList", typeService.getList());
    return "/admin/good_add.jsp";
  }
  /**
   * 产品添加
   * 
   * @return
   * @throws Exception 
   */
  @RequestMapping("/goodSave")
  public String goodSave(String name, int price, String intro, int stock, int typeId, 
      MultipartFile cover, MultipartFile image1, MultipartFile image2, 
      @RequestParam(required=false, defaultValue="1") int page) throws Exception {
    Goods good = new Goods();
    good.setName(name);
    good.setPrice(price);
    good.setIntro(intro);
    good.setStock(stock);
    good.setTypeId(typeId);
    good.setCover(UploadUtil.fileUpload(cover));
    good.setImage1(UploadUtil.fileUpload(image1));
    good.setImage2(UploadUtil.fileUpload(image2));
    goodService.add(good);
    return "redirect:goodList?flag=3&page="+page;
  }
  /**
   * 产品更新
   * 
   * @return
   */
  @RequestMapping("/goodEdit")
  public String goodEdit(int id, HttpServletRequest request) {
    request.setAttribute("flag", 3);
    request.setAttribute("typeList", typeService.getList());
    request.setAttribute("good", goodService.get(id));
    return "/admin/good_edit.jsp";
  }
  /**
   * 产品更新
   * 
   * @return
   * @throws Exception 
   */
  @RequestMapping("/goodUpdate")
  public String goodUpdate(int id, String name, int price, String intro, int stock, int typeId,  
      MultipartFile cover, MultipartFile image1, MultipartFile image2,
      @RequestParam(required=false, defaultValue="1") int page) throws Exception {
    Goods good = goodService.get(id);
    good.setName(name);
    good.setPrice(price);
    good.setIntro(intro);
    good.setStock(stock);
    good.setTypeId(typeId);
    if (Objects.nonNull(cover) && !cover.isEmpty()) {
      good.setCover(UploadUtil.fileUpload(cover));
    }
    if (Objects.nonNull(image1) && !image1.isEmpty()) {
      good.setImage1(UploadUtil.fileUpload(image1));
    }
    if (Objects.nonNull(image2) && !image2.isEmpty()) {
      good.setImage2(UploadUtil.fileUpload(image2));
    }
    goodService.update(good);
    return "redirect:goodList?flag=3&page="+page;
  }
  /**
   * 产品删除
   * 
   * @return
   */
  @RequestMapping("/goodDelete")
  public String goodDelete(int id, 
      @RequestParam(required=false, defaultValue="1") int page) {
    goodService.delete(id);
    return "redirect:goodList?flag=3&page="+page;
  }
  /**
   * 添加推荐
   * @return
   */
  @RequestMapping("/topSave")
  public @ResponseBody String topSave(Tops tops, 
      @RequestParam(required=false, defaultValue="0")byte status,
      @RequestParam(required=false, defaultValue="1") int page) {
    int id = topService.add(tops);
    return id > 0 ? "ok" : null;
  }
  /**
   * 删除推荐
   * @return
   */
  @RequestMapping("/topDelete")
  public @ResponseBody String topDelete(Tops tops, 
      @RequestParam(required=false, defaultValue="0")byte status,
      @RequestParam(required=false, defaultValue="1") int page) {
    boolean flag = topService.delete(tops);
    return flag ? "ok" : null;
  }
  /**
   * 类目列表
   * 
   * @return
   */
  @RequestMapping("/typeList")
  public String typeList(HttpServletRequest request) {
    request.setAttribute("flag", 4);
    request.setAttribute("typeList", typeService.getList());
    return "/admin/type_list.jsp";
  }
  /**
   * 类目添加
   * 
   * @return
   */
  @RequestMapping("/typeSave")
  public String typeSave(Types type, 
      @RequestParam(required=false, defaultValue="1") int page) {
    typeService.add(type);
    return "redirect:typeList?flag=4&page="+page;
  }
  /**
   * 类目更新
   * 
   * @return
   */
  @RequestMapping("/typeEdit")
  public String typeUp(int id, HttpServletRequest request) {
    request.setAttribute("flag", 4);
    request.setAttribute("type", typeService.get(id));
    return "/admin/type_edit.jsp";
  }
  /**
   * 类目更新
   * 
   * @return
   */
  @RequestMapping("/typeUpdate")
  public String typeUpdate(Types type, 
      @RequestParam(required=false, defaultValue="1") int page) {
    typeService.update(type);
    return "redirect:typeList?flag=4&page="+page;
  }
  /**
   * 类目删除
   * 
   * @return
   */
  @RequestMapping("/typeDelete")
  public String typeDelete(Types type, 
      @RequestParam(required=false, defaultValue="1") int page) {
    typeService.delete(type);
    return "redirect:typeList?flag=4&page="+page;
  }
  /**
   * 管理员列表
   * 
   * @return
   */
  @RequestMapping("/adminList")
  public String adminList(HttpServletRequest request, 
      @RequestParam(required=false, defaultValue="1") int page) {
    request.setAttribute("flag", 5);
    request.setAttribute("adminList", adminService.getList(page, rows));
    request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows));
    return "/admin/admin_list.jsp";
  }
  /**
   * 管理员修改自己密码
   * 
   * @return
   */
  @RequestMapping("/adminRe")
  public String adminRe(HttpServletRequest request, HttpSession session) {
    request.setAttribute("flag", 5);
    request.setAttribute("admin", adminService.getByUsername(String.valueOf(session.getAttribute("username"))));
    return "/admin/admin_reset.jsp";
  }
  /**
   * 管理员修改自己密码
   * 
   * @return
   */
  @RequestMapping("/adminReset")
  public String adminReset(Admins admin, HttpServletRequest request) {
    request.setAttribute("flag", 5);
    if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) {
      admin.setPassword(SafeUtil.encode(admin.getPasswordNew()));
      adminService.update(admin);
      request.setAttribute("admin", admin);
      request.setAttribute("msg", "修改成功!");
    }else {
      request.setAttribute("msg", "原密码错误!");
    }
    return "/admin/admin_reset.jsp";
  }
  /**
   * 管理员添加
   * 
   * @return
   */
  @RequestMapping("/adminSave")
  public String adminSave(Admins admin, HttpServletRequest request, 
      @RequestParam(required=false, defaultValue="1") int page) {
    if (adminService.isExist(admin.getUsername())) {
      request.setAttribute("msg", "用户名已存在!");
      return "/admin/admin_add.jsp";
    }
    adminService.add(admin);
    return "redirect:adminList?flag=5&page="+page;
  }
  /**
   * 管理员修改
   * 
   * @return
   */
  @RequestMapping("/adminEdit")
  public String adminEdit(int id, HttpServletRequest request) {
    request.setAttribute("flag", 5);
    request.setAttribute("admin", adminService.get(id));
    return "/admin/admin_edit.jsp";
  }
  /**
   * 管理员更新
   * 
   * @return
   */
  @RequestMapping("/adminUpdate")
  public String adminUpdate(Admins admin, 
      @RequestParam(required=false, defaultValue="1") int page) {
    admin.setPassword(SafeUtil.encode(admin.getPassword()));
    adminService.update(admin);
    return "redirect:adminList?flag=5&page="+page;
  }
  /**
   * 管理员删除
   * 
   * @return
   */
  @RequestMapping("/adminDelete")
  public String adminDelete(Admins admin, 
      @RequestParam(required=false, defaultValue="1") int page) {
    adminService.delete(admin);
    return "redirect:adminList?flag=5&page="+page;
  }
}

五,项目总结

中国的电子商城1990年开始了发展之路,该阶段电子商城还是刚刚开始发展。这一阶段出现了许多比较经典的公司,如淘宝,京东等。随着人们对电子商城的逐渐认知,产生了许多企业并从B2B、B2C到B2B2C发展。

计算机信息技术的重大发展,诞生了商业化的互联网环境。这为电子商城在世界的发展提供了一个绝好的平台。互联网给我们提供了一个网络平台,我们在互联网上不仅可以获取到各种各样的信息,而且还实现了电子商城、在线支付、网络交友等各种新型的产业链。

随着计算机信息技术的不断的发展,越来越多的人参与到了互联网中。正因为如此,许多人也盲目的加入了互联网的大潮中[1]。从2003年中国电子商城进入低谷期,在绝大多数人选择放弃电子商城的情况下,依旧有些企业仍未放弃,并苦苦坚持电子商城的发展。该现象使得他们重新定位新一代的电子商城,所以本阶段的中国电子商城发展的第一步应该从这个时候开始的。因此,本文针对电子商城的发展,采用了JSP的技术设计并实现了一个商城系统。

本文设计并实现的商城系统,通过互联网来实现电子商城这一新兴产业,电子商城主要依靠于计算机互联网技术。如果缺少了这个技术,就没有办法实现电子商城,如果要想完美实现,互联网技术就要有重大发展。这样,电子商城就带动了科技的巨大进步。用户就可以随时随地完成搜索商品、挑选商品、购买商品的全部过程。对于商家而言,网上购买商品有如下优点:不受场地限制、购买成本低、降低了风险、有利于更好的刺激用户去消费购买。对于消费者来说,网上购买商品有如下优点:价格便宜方便性、足不出户就能买到满意的商品。对商家而言,网上出售商品有如下优点:可以为商家节省了商店的租金、人力成本减少,

相关文章
|
2月前
|
Web App开发 前端开发 JavaScript
Web开发者必收藏的10个实用网站,你还没收藏吗?
将这些网站收藏起来,定期访问,使它们成为您日常工作的一部分,助您在快速发展的 Web 开发领域保持领先。
114 2
Web开发者必收藏的10个实用网站,你还没收藏吗?
|
1月前
|
人工智能 搜索推荐 PHP
PHP在Web开发中的璀璨星辰:构建动态网站的幕后英雄###
【10月更文挑战第25天】 本文将带您穿越至PHP的宇宙,揭示其作为Web开发常青树的奥秘。通过生动实例与深入解析,展现PHP如何以简便、高效、灵活的姿态,赋能开发者打造动态交互式网站,同时不忘探讨其在新时代技术浪潮中面临的挑战与机遇,激发对技术创新与应用的无限思考。 ###
34 1
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
69 0
|
7月前
|
存储 缓存 前端开发
揭秘Web缓存:提升网站性能与用户体验
揭秘Web缓存:提升网站性能与用户体验
|
7月前
|
SQL 云安全 安全
常见的web漏洞,网站漏洞该怎么办
随着互联网的发展,网站安全成为企业和个人关注焦点,尤其网站漏洞可能导致数据泄露、系统崩溃等严重后果。本文介绍了四种常见网站漏洞:XSS、SQL注入、文件包含和CSRF,以及它们的危害。为解决这些问题,建议加强代码审查、输入验证、使用安全API和库、访问控制等措施。此外,德迅云安全的漏洞扫描VSS服务可在Web漏洞扫描、弱密码扫描和中间件扫描等场景中发挥作用,帮助企业及时发现并处理安全问题,保障网站安全。
|
7月前
|
缓存 前端开发 JavaScript
使用Web前端性能优化提高网站加载效率
前端性能优化关键在于提高用户体验和降低资源消耗,Webpack是重要工具。基础优化策略包括减少HTTP请求、资源压缩与缓存、异步加载。Webpack优化配置涉及Tree Shaking、代码分割。高级策略涵盖Long-term Caching、缓存提升和插件优化。打包部署时,自动化流程和环境管理也至关重要。通过这些方法,可提升Web应用速度和体验。
189 0
|
4月前
|
存储 前端开发 搜索推荐
Web前端网站(三)- 记事本
【8月更文挑战第8天】多种颜色搭配的动态粒子背景特效(粒子会随着鼠标的移动进行吸附,好看又好玩),左右摆动的文字特效,并且使用localStorage进行数据的持久化存储,使记事本的内容可以长期的保存在浏览器中,功能包括添加留言、显示留言、删除留言。每一行代码都有详细注释~~~大家可以尽情创作
70 5
Web前端网站(三)- 记事本
|
4月前
|
前端开发 搜索推荐 JavaScript
Web前端网站(四)- 音乐播放器
【8月更文挑战第9天】页面整体色调背景采用柔和渐变的方式呈现,与主页面的“毒药水式”色彩搭配形成了强烈的对比;周边花瓣缓缓飘落到水面之上形成涟漪。整体给人一种温馨、浪漫的感觉,还可以通过中间的3个按钮来控制音乐的切换和播放效果。每一行代码都有详细注释~~~大家可以尽情创作
48 2
Web前端网站(四)- 音乐播放器
|
4月前
|
前端开发 安全 JavaScript
PHP与现代Web开发:探索PHP在构建动态网站中的角色和优势
【8月更文挑战第29天】 在数字时代的浪潮下,PHP以其独特的灵活性、易用性以及强大的社区支持,持续成为Web开发领域的重要力量。本文将深入探讨PHP如何适应现代Web开发的需求,通过具体示例揭示PHP的实际应用,并分析其在面对新兴技术挑战时的应对策略。我们将一探究竟,PHP如何在众多编程语言中脱颖而出,成为许多开发者和企业的首选。
|
6月前
|
前端开发 搜索推荐 JavaScript
Web前端网站(二)- 主页
页面星空是可动的哦~~~毒药水特效的颜色搭配,文字渐变的动态效果,图片360度旋转展示特效等等等;每一次的按钮点击都是满满的惊艳 ~ ~ ~
53 4
Web前端网站(二)- 主页