当前位置:网站首页>Design and implementation of flower online sales management system

Design and implementation of flower online sales management system

2022-08-10 23:50:00 qq_469603589

一,项目简介

Flowers online sales management system in the development of technology,选择JSP来开发系统动态页面,系统开发工具则使用IDEA这款口碑极佳的集成开发工具,系统的后台开发方面使用SSM框架,System front-end experience is key consideration at present a problem,Good interactive machine,能有效提升用户的体验,所以我们选用比较成熟的BootStrapTo do a page development,使用JqueryFor asynchronous request processing,数据存储方面本系统数据库则使用My SQL.本系统目前主要利用这些技术和工具来开发一个网上商城交易网站,Main realization of system function:Online sales management system is a flower at the front desk after user registration,According to the registered account to log in,Browse the goods and buy,And can query in the query in the center of the individual order, etc;2 it is flowers online sales management system background management after the user login system,Can be implemented as contain the user information management、商品类别管理、商品管理、订单管理等以及网站新闻管理等信息管理的功能.

Flowers online sales management system is with the help of Internet 移动互联网的应用技术,实现了资源的共享,借助于网络平台各种形式的商品展示窗体,让网上客户能够更易地接受这个网上商城的交易网站,并且打破以往网上购买商品的局限性,缩短了用户寻找商品的难度和时间.

In order to guarantee the use of the flowers online sales system security,To a certain extent, the user account protection management,Front end users and back office users registered in landing and,Is used based onMD5To register or login password encryption processing,The encryption itself except by brute force this way is no way to them,And the cost of brute force and high.Below show the user log in the basic flow chart of safety:

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:SSM开发框架

前台开发技术:Bootstrap+Jquery+Ajax

三,系统展示

3.1 前台用户功能模块的展示

3.1.1 The front desk users browse flowers module

   Flowers online sales management system enter the mall do not need to register at the front desk users log in to view the corresponding product information of.Flowers online sales management system front-end users browse flowers specific operation interface displayed below3-1所示.

图3-1 The front desk users browse flowersUI界面

3.1.2前台用户购物车模块

    Flowers online sales management system at the front desk user,在输入账户密码后登陆系统后,可以将需要购买的产品添加到商城购物车,And can customize the purchase quantity increase or decrease.Flowers online sales management system front-end users to add a shopping cart interface below3-2所示.

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

3.1.3 前台用户购买商品模块

    The front desk after the user login flowers online sales management system,可以将喜欢的商品添加到购物车后提交订单并进行支付购买.After the flowers online sales platform to complete the product purchase can service for system、物流的速度、客服的态度等进行评分,并对产品进行相关的评论.Order flowers online sales management system users interface below3-3所示.

图3-3前台用户购物操作界面

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

    Flowers online sales management system at the front desk after the user login system, can the personal order management module in the management of personal order information.Flowers online sales management system will automatically according to the order processing status to display the current order status,主要有有未付款、己付款待发货、己收货待评价己收货己评价等几种状态.Order flowers online sales management system front-end users' personal management interface below4-4所示.

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

3.2后台功能模块的展示

3.2.1用户登录功能

    Flowers online sales management system background if you want to related information of mall management operations,首先要登录系统,才可展开相关的操作.Flowers online sales management system user login interface as the chart background3-10所示.

图3-10用户登录操作界面

3.2.2用户管理功能

    这个模块主要是对系统的用户进行管理,Flowers online sales management system administrator user login system after,点击左边的用户管理菜单后可以进入用户信息管理界面.Flowers online sales management system user management interface below3-11所示:

图3-11后台用户管理功能界面图

3.2.3一级分类管理功能

    Flowers online sales management system administrator user login system after,可以进入一级菜单进行相应的菜单信息管理.Flowers online sales management system level menu interface below3-12所示.

图3-12Flowers sales level menu management functionsUI界面

3.2.4 后台商品二级分类管理操作UI

    Flowers online sales management system administrator user login system after,可以进入二级菜单进行相应的菜单信息管理.Flowers online sales management system secondary menu interface below3-13所示.

图3-13Flowers sales secondary menu management functionsUI界面

3.2.5 后台商品管理操作UI

    Flowers online sales management system administrator user login system after,可以进入商品管理菜单进行相应的商品信息管理.其中主要包含商品的添加、修改、查询、删除操作等,添加商品时可以上传商品的图片进行展示.Flowers online sales management system commodity information management interface below3-14所示.

图3-14后台商品管理功能UI界面

3.2.6 后台商品订单管理操作UI

    Flowers online sales management system administrator user login system after,可以进入商品订单管理菜单进行相应的商品订单信息管理.其中主要包含商品订单的查询、订单明细的查看、订单发货、订单评论的回复及对评分的回复等,添加商品时可以上传商品的图片进行展示.Flowers online sales management system commodity information management interface below3-15所示.

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

3.2.7 后台商品销量统计管理操作UI

    Flowers online sales management system administrator user login system after,可以进入销量统计管理菜单进行相应的商品销售情况进行统计查看.主要以图形报表方式进行展示,其中主要以饼状图和柱状态图的形态进行展示.展示的图片可以下载也可以在线打印操作.Flowers online sales management system commodity information statistical view interface below3-16、3-17所示.

图3-16饼状图展示销售统计功能UI界面

图3-17柱状图展示销售统计功能UI界面

四,核心代码展示

package com.qst.controller;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qst.beans.*;
import com.qst.service.impl.*;
import org.apache.commons.io.FileUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Controller
@RequestMapping("/admin")
public class AdminController {

    @Autowired
    private AdminUserServiceImpl adminUserService;

    @Autowired
    private CategoryServiceImpl categoryService;

    @Autowired
    private CategorySecondServiceImpl secondService;

    @Autowired
    private ProductServiceImpl productService;

    @Autowired
    private OrderServiceImpl orderService;

    @Autowired
    private UserServiceImpl userService;

    @RequestMapping("/adminIndex")
    public String adminHome(){//To the backend login page
        return "admin/index";
    }

    @RequestMapping("/adminLogin")
    public String adminLogin(@Param("username") String username, @Param("password") String password, HttpServletRequest request){
        AdminUser adminUser = new AdminUser();
        adminUser.setUsername(username);
        adminUser.setPassword(password);

        AdminUser adminBynamePwd = adminUserService.getAdminBynamePwd(adminUser);
        System.out.println(adminBynamePwd==null?"Query to the user information is empty":adminBynamePwd);
        /*Success of the login page to manage,Otherwise, return to the login page*/
        if (adminBynamePwd!=null) {
            request.getSession().setAttribute("enterAdmin",adminBynamePwd);
            return "/admin/home";
        }
        return "/admin/index";
    }

    /*------------------The following is the administrator to the operation of the user*/
    @RequestMapping(value = ("/adminUser_findAllByPage") )
    public String findAllUserByPage(@Param("page") Integer page,HttpServletRequest request){//Find articles and pages
        PageUtils<User> userPageUtils = new PageUtils<>();
        int limit = 5;//每页的记录数
        if (page==null)
            page = 1;
        PageHelper.startPage(page,limit);
        List<User> userList = userService.findAll();
        PageInfo<User> pageInfo = new PageInfo<>(userList);//得到分页信息
        userPageUtils.setPage(page);//当前页
        userPageUtils.setList(userList);//当前页的记录数
        userPageUtils.setTotalPage(pageInfo.getPages());//All of the pages

        request.setAttribute("userPageUtils", userPageUtils);
        return "/admin/user/list";
    }
    /*Jump to a goods edit page*/
    @RequestMapping("/adminUser_edit")
    public String editUser(@RequestParam("id")Integer uid,HttpServletRequest request){
        /*根据商品IDGet a goods*/
        User user = userService.findById(uid);
        request.setAttribute("user",user);


        return "/admin/user/edit";
    }

    /*Save information modify goods,And upload again*/
    @RequestMapping("/adminUser_update")
    public String updateUser(User user,HttpServletRequest request)throws IOException {
        int save = userService.update(user);

        return "redirect: /admin/adminUser_findAllByPage";
    }

    /*删除用户*/
    @RequestMapping("/adminUser_delete")
    public String deleteUser(@Param("id") Integer uid, HttpServletRequest request){
        /*删除数据库中的记录*/
        int deleteByid = userService.deleteById(uid);
        return "redirect: /admin/adminUser_findAllByPage";
    }

    /*-------The following is the administrator to the operation of the primary classification*/

    @RequestMapping("/adminGetAllCate")
    public String getAllCategory(HttpServletRequest request){/*Find all level classification*/
        List<Category> categoryList = categoryService.findAll();
        request.setAttribute("cList",categoryList);

        return "admin/category/list";
    }

    @RequestMapping("/toAddCategory")
    public String toAddCategory(){
        System.out.println("Enter the page of adding level classification");
        return "admin/category/add";
    }

    /*As the database add level classification*/
    @RequestMapping(value="/addCategory_save" )
    public String addCategory(Category category){
        String cname = category.getCname();
        System.out.println("添加一级分类:"+cname);
        int i = categoryService.addCategory(category);
        if(i>0){
            System.out.println("添加"+category+"成功");
        }
        return "redirect: /admin/adminGetAllCate";
    }

    /*Jump to edit level classification page*/
    @RequestMapping("/adminCategory_edit")
    public String editCategory(@Param("cid") Integer cid,HttpServletRequest request){
        /*From the database to find the classification*/
        Category cByid = categoryService.findCByid(cid);
        request.setAttribute("category",cByid);
        return "admin/category/edit";
    }

    /*Update some primary classification*/
    @RequestMapping("/adminCategory_update")
    public String updateCategory(Category category){
        int i = categoryService.saveCategory(category);
        System.out.println(category.getCname()+"更新成功:"+i);
        return "redirect: /admin/adminGetAllCate";
    }

    /*删除一级分类*/
    @RequestMapping(value ="/adminCategory_delete")
    public String deleteCategory(@Param("cid") Integer cid){
        /*Before you delete level classification delete below secondary classification*/
        List<CategorySecond> categorySecondList = categoryService.findCSByCid(cid);
        for (CategorySecond cs:categorySecondList
             ) {
            System.out.println("To remove the secondary classification:"+cs.getCsname());
            int i = secondService.deleteById(cs.getCsid());
            System.out.println("删除成功与否:"+i);
        }
        /*Finally delete level classification*/
        int i = categoryService.deletByid(cid);
        System.out.println("Level classification delete success:"+i);
        return "redirect: /admin/adminGetAllCate";
    }




    /*-------The following is the administrator to the operation of the secondary classification*/
    @RequestMapping("/adminCategorySecond_findAllByPage")
    public String findCSByPage(@Param("page") Integer page,HttpServletRequest request){/*Find all the secondary classification and paging*/
        PageUtils<CategorySecond> secondPageUtils = new PageUtils<>();
        //Find all the secondary classification and paging
        int limit = 4;//Each page paging record number
        if (page==null)
            page = 1;
        PageHelper.startPage(page,limit);
        List<CategorySecond> allCS = secondService.findAllCS();
        PageInfo<CategorySecond> pageInfo = new PageInfo<>(allCS);//得到分页信息
        secondPageUtils.setPage(page);//当前页
        secondPageUtils.setList(allCS);//当前页的记录
        secondPageUtils.setTotalPage(pageInfo.getPages());//所有页数

        request.setAttribute("secondPageUtils",secondPageUtils);
        return "/admin/categorysecond/list";
    }

    /*To add secondary goods category page*/
    @RequestMapping(value = "toAddCategorySecond")
    public String toAddCategorySecond(HttpServletRequest request){
        List<Category> categoryList = categoryService.findAll();
        request.setAttribute("categoryList",categoryList);
        return "/admin/categorysecond/add";
    }
    /*Add secondary commodity categories*/
    @RequestMapping(value = "addcategorySecond_save")
    public String addcategorySecond_save(CategorySecond categorySecond){
        System.out.println("By adding the secondary directory"+categorySecond);
        int save = secondService.add(categorySecond);
        if (save>0)
            System.out.println("添加二级目录"+categorySecond+"成功");
        return "redirect: /admin/adminCategorySecond_findAllByPage";
    }

    /*Jump to edit secondary classification page*/
    @RequestMapping("/adminCategorySecond_edit")
    public String editSecondCategory(@Param("csid") Integer csid,HttpServletRequest request){
        /*From the database to find the classification*/
        CategorySecond categorySecond = secondService.findCSByid(csid);

        List<Category> categoryList = categoryService.findAll();
        request.setAttribute("categoryList", categoryList);
        request.setAttribute("categorySecond",categorySecond);
        return "/admin/categorysecond/edit";
    }

    /*Update a secondary classification*/
    @RequestMapping("/adminSecondCategory_update")
    public String updateSecondCategory(CategorySecond category){
       secondService.update(category);
        return "redirect: /admin/adminCategorySecond_findAllByPage";
    }




    /*------------------The following is the administrator to the operation of the goods*/
    @RequestMapping(value = ("/adminProduct_findAllByPage") )
    public String findAllProByPage(@Param("page") Integer page,HttpServletRequest request){//Find articles and pages
        PageUtils<Product> productPageUtils = new PageUtils<>();
        int limit = 5;//每页的记录数
        if (page==null)
            page = 1;
        PageHelper.startPage(page,limit);
        List<Product> productList = productService.findAll();
        PageInfo<Product> pageInfo = new PageInfo<>(productList);//得到分页信息
        productPageUtils.setPage(page);//当前页
        productPageUtils.setList(productList);//当前页的记录数
        productPageUtils.setTotalPage(pageInfo.getPages());//All of the pages

        request.setAttribute("productPageUtils", productPageUtils);
        return "/admin/product/list";
    }



    @RequestMapping("/toAddProduct")
    public String toAddProduct(HttpServletRequest request){//Jump to add commodity page
        //Find all of the secondary classification
        List<CategorySecond> categorySecondList = secondService.findAllCS();
        request.setAttribute("csList",categorySecondList);
        return "/admin/product/add";
    }

    /*++++++添加商品++++*/
    @RequestMapping("/addProduct_save")
    public String addProduct(Product product,@RequestParam("upload") MultipartFile upload,HttpServletRequest request)throws Exception{
        product.setPdate(new Date());
        product.setIs_hot(0);
        String realPath = request.getServletContext().getRealPath("/products");
        System.out.println(realPath);
        String originalFilename = upload.getOriginalFilename();
        File diskFile = new File(realPath + "//"+ originalFilename);
        System.out.println("目标文件:"+diskFile.getAbsolutePath());
        //Entities will upload file is copied to the specified directoryupload下
        upload.transferTo(diskFile);
        product.setImage("products/"+originalFilename);
        System.out.println("Receive goods:"+product);
        //将信息保存到数据库
        int save = productService.save(product);
        System.out.println(product.getPname()+"保存是否成功:"+save);

        return "redirect: /admin/adminProduct_findAllByPage";
    }

    /*删除产品*/
    @RequestMapping("/adminProduct_delete")
    public String deleteProduct(@Param("pid") Integer pid, HttpServletRequest request){

        /* Delete the upload file picture*/
        Product product = productService.findById(pid);
        String path = product.getImage();
        if(path!=null) {
            String realPath = request.getServletContext().getRealPath("/" + path);
            File file = new File(realPath);
            file.delete();
        }
        /*删除数据库中的记录*/
        int deleteByid = productService.deleteByid(pid);

        return "redirect: /admin/adminProduct_findAllByPage";
    }


    /*Jump to a goods edit page*/
    @RequestMapping("/adminProduct_edit")
    public String editProduct(@RequestParam("pid")Integer pid,HttpServletRequest request){
        /*根据商品IDGet a goods*/
        Product product = productService.findById(pid);
        System.out.println(product);
        request.setAttribute("product",product);
        /*All the secondary classification*/
        List<CategorySecond> allCS = secondService.findAllCS();
        request.setAttribute("csList",allCS);

        return "/admin/product/edit";
    }

    /*Save information modify goods,And upload again*/
    @RequestMapping("/adminProduct_update")
    public String updateProduct(Product product, @RequestParam("upload")MultipartFile upload,
                                HttpServletRequest request)throws IOException {
        product.setPdate(new Date());
        if(upload.getSize() >=0){
            /*删除 目录中的文件,然后重新上传
             * And update records in the database*/
            String path = product.getImage();
            if (path != null){
                String realPath = request.getServletContext().getRealPath("/" + path);
                File file = new File(realPath);
                file.delete();
            }
            String realPath = request.getServletContext().getRealPath("/products");
            String originalFilename = upload.getOriginalFilename();
            File diskFile = new File(realPath + "//"+ originalFilename);
            //Entities will upload file is copied to the specified directoryupload下
            upload.transferTo(diskFile);
            product.setImage("products/"+originalFilename);
        }
        System.out.println("商品:"+product);
        //将信息保存到数据库
        int save = productService.update(product);

        return "redirect: /admin/adminProduct_findAllByPage";
    }







    /*---------------The following is the administrator of order management,Can only modify the state of the order*/
    @RequestMapping("/adminOrder_findAllByPage")
    public String findAllOrderPage(@Param("page") Integer page, HttpServletRequest request){
        PageUtils<Order> orderPageUtils = new PageUtils<>();
        if (page == null)
            page = 1;
        PageHelper.startPage(page,5);
        List<Order> allOrder = orderService.getAllOrder();
        PageInfo<Order> pageInfo = new PageInfo<>(allOrder);
        orderPageUtils.setList(allOrder);
        orderPageUtils.setPage(page);
        orderPageUtils.setTotalPage(pageInfo.getPages());

        request.setAttribute("orderPageUtils",orderPageUtils);
        return "/admin/order/list";
    }

    /*According to the order number to find order items*/
    @RequestMapping(value = "/adminOrderItem_findById")
    @ResponseBody
    public List<OrderItem> findItemsById(@RequestBody Order order, HttpServletRequest request){
        System.out.println("Required for order itemsID:"+order.getOid());
        List<OrderItem> orderItemSet = orderService.findByOid(order.getOid());
        for (OrderItem orderitem: orderItemSet
             ) {
            System.out.println(orderitem);
        }
//        request.setAttribute("orderItems",orderItemSet);
//        return "/admin/order/orderItem";
        return orderItemSet;
    }

    @RequestMapping("/export_product_info")
    public void exportProductInfo(HttpServletResponse response)throws IOException{
        response.setCharacterEncoding("UTF-8");
        List<Product> productList = productService.findAll();
        System.out.println(productList);
        /*创建excel文件*/
        //创建excel文件
        HSSFWorkbook wb = new HSSFWorkbook();
        //创建sheet页
        HSSFSheet sheet = wb.createSheet("商品信息表");
        //创建标题行
        HSSFRow titleRow = sheet.createRow(0);
        titleRow.createCell(0).setCellValue("商品名称");
        titleRow.createCell(1).setCellValue("平台价格");
        titleRow.createCell(2).setCellValue("市场价格");
        titleRow.createCell(3).setCellValue("图片目录");
        titleRow.createCell(4).setCellValue("Commodity advertisement,");
        titleRow.createCell(5).setCellValue("销售量");
        titleRow.createCell(6).setCellValue("添加日期");
        titleRow.createCell(7).setCellValue("所属目录");

        for(Product product : productList){
            HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum()+1);
            dataRow.createCell(0).setCellValue(product.getPname());
            dataRow.createCell(1).setCellValue(product.getShop_price());
            dataRow.createCell(2).setCellValue(product.getMarket_price());
            dataRow.createCell(3).setCellValue(product.getImage());
            dataRow.createCell(4).setCellValue(product.getIs_hot());
            dataRow.createCell(5).setCellValue(product.getPdesc());
            dataRow.createCell(6).setCellValue(product.getPdate());
            dataRow.createCell(7).setCellValue(product.getCsid());
        }
        // 设置下载时客户端Excel的名称
        String filename =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + ".xls";
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + filename);
        OutputStream ouputStream = response.getOutputStream();
        wb.write(ouputStream);
        ouputStream.flush();
        ouputStream.close();

    }

    /**
     * 退出系统
     * @param request
     * @return
     */
    @RequestMapping("/exit")
    public String exit(HttpServletRequest request){
        request.getSession().invalidate();
        return "/admin/index";
    }
}
package com.qst.controller;

import com.qst.beans.DayIn;
import com.qst.beans.Product;
import com.qst.service.impl.OrderServiceImpl;
import com.qst.service.impl.ProductServiceImpl;
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.ResponseBody;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Controller
@RequestMapping("/echart")
public class AdminTongjiBijiao {

    @Resource
    private OrderServiceImpl orderService;
    @Autowired
    private ProductServiceImpl productService;/*is_hotIs the number of goods add to cart【Did not implement the data unity】,Is to buy a number of times*/

    /*All has been selling goods sales*/
    @RequestMapping(value = "/adminEachartzhu")
    @ResponseBody
    public List<Product> getAllXiaoshou(){
        System.out.println("Histogram statistics request");
        /**
         * Get the name of commodity and commodity sales number(本应该让product表与orderitemA table statistics)
         */
        List<Product> productList = productService.findAll();
        List<Product> products= new ArrayList<>();
//        List<Map<String,Integer>> products = new ArrayList<>();
        for (Product p:productList
             ) {
            System.out.print(p.getIs_hot());
            if (p.getPname()!=null&&p.getPname()!=""&&p.getIs_hot()!=null&&p.getIs_hot()>0){
//                Map<String,Integer> map = new HashMap<>();
//                map.put(p.getPname(),p.getIs_hot());
                products.add(p);
//                products.add(map);
            }


        }
        return products;
    }

    /*Jump to the sales column page*/
    @RequestMapping(value = "/toadminEachartzhu")
    public String toAdminEchart(){
        return "/admin/echart/xiaoshouZhu";
    }

    /*Jump to sales pie chart page*/
    @RequestMapping(value = "/toadminEachartBin")
    public String  toadminEachartzhu2(){
        return "admin/echart/xiaoshouBin";
    }


    /*Administrator privileges query orders recently*/
    @RequestMapping(value = "/getAllOrdersComeInByDate")
    @ResponseBody
    public List<DayIn> getAllOrdersComeInByDate(){
        System.out.println("Administrator privileges query orders recently");
        List<DayIn> ordersComeInByDate = orderService.getAllOrdersComeInByDate();
        for (DayIn map:ordersComeInByDate){
            System.out.println(map);
        }
        return ordersComeInByDate;
    }
}

五,项目总结

Flowers online sales management system in the design of choice at the beginning of his technically relatively familiarJava语言为基础,在众多的JavaTechnology platform selected inspringFramework for the overall design,As the basis of system development main frame.Flowers online sales management system USES springmvcEffective separation model and view to.Flowers online sales management system in data persistence operation on the packaging,Have no reservations to chooseMybatis框架,It flowers online sales management system of data at the bottom of theJDBCOperating effectively encapsulate,Reduced the difficulty of development,提高了开发效率.Flowers online sales management system front-end data to demonstrate thatJSP进行页面展示,同时配合JavaScript脚本和CSSStyle for the page data of beautification and interaction design,And in order to improve execution efficiency and performance of the system using theAJAX异步交互,主要基于jqueryEncapsulation of correlation function to realize.Flowers online sales management system as a whole function design in strict accordance with the flowers online sales management system requirements analysis of functional requirements and flowers online sales management system nonfunctional requirements to development to realize.

原网站

版权声明
本文为[qq_469603589]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/222/202208102322073958.html