Java Web应用开发课程大作业(电商品牌管理系统)

1 需求分析

随着电子信息行业的不断发展,网络通信以及信息技术在人类生活中的普及,利用计算机技术、网络通信技术和Internet实现商务活动的国际化、信息化,已成为各国商务发展的一大趋势, 传统模式的购物已经逐渐被方便快捷的网络购物所取代,电子商务正是为了适应市场需求而蓬勃发展起来,网上购物也随之很快成为一种时尚的购物方式,并为广大网民所接受,随着近年来电子商务的不断发展,大大小小的网络商城都逐渐涌现出来,比较成功的案例有:苏宁易购、淘宝网、卓越网、当当网等。本大作业将以苏宁易购作为参考,进行小型电子商务网站品牌管理的开发。本系统拟在Windows 系统下采取基于JSP技术,以IDEA为开发平台,Mysq8.0为后台数据库,并在软件开发过程中使用ajax、json、cookie等技术。在结构和功能上,系统主要是实现了对商品品牌信息的增加、删除、查询、修改、批量删除、分页查询、条件查询等功能,并且会在开发过程中与指导老师及时进行及时的沟通,使系统更加完善。

功能1:用户登录:输入管理员的账号、密码,判断是否在数据库中有此信息,如果有登录则成功,否则登陆失败。

功能2:用户注册:输入需要注册管理员的账号、密码,判断是否在数据库中有此信息,如果没有则注册成功,否则注册失败。

功能3:查询所有:显示所有电商品牌的信息,包括品牌名称、企业名称、排序、当前状态等。

功能4:新增品牌:新增一个电商品牌的信息,包括品牌名称、企业名称、排序、当前状态等。

功能5:修改品牌:修改一个电商品牌的信息,包括品牌名称、企业名称、排序、当前状态等。

功能6:删除品牌:删除一个电商品牌的信息,包括品牌名称、企业名称、排序、当前状态等。

功能7:批量删除:删除多个电商品牌的信息,包括品牌名称、企业名称、排序、当前状态等。

功能8:分页查询:按页数查询电商品牌信息,可以调整每一页显示的品牌个数。

功能9:条件查询:根据当前状态、商品名称、企业名称查询品牌信息,支持多条件同时查询。

2 概要设计

2.1系统功能概述

管理员需要进行登录或注册后才能看到品牌信息进行管理,主要可以实现的操作是,增加品牌信息、删除品牌信息、查询品牌信息、修改品牌信息、批量删除品牌信息、分页查询品牌信息、通过特定信息进行对品牌信息的条件查询。系统功能如下图2.1所示

 

 图2.1 电商品牌管理系统

2.2工程结构设计

工程结构包括一个主目录src,其中包括Java文件夹,里面存放Java代码,resources文件夹存放资源文件,webapp文件夹石Web项目核心目录,target文件夹是测试目录。Maven Web开发中的项目结构如下图2.1所示

 

 图2.2程序目录结构

2.3Filter设计

我希望实现的效果是用户如果登陆过了就跳转到品牌数据展示的页面,如果没有登陆就跳转到登陆页面让用户进行登陆,要实现这个效果需要在每一个资源中都写上这段逻辑,而像这种通用的操作,我们就可以放在过滤器中实现。进行Filter开发分成以下三步实现:

(1)定义类,实现 Filter接口,并重写其所有方法。

(2)配置Filter拦截资源的路径:在类上定义@WebFilter注解。而注解的value属性值/*表示拦截所有的资源。

(3)在doFilter方法判断中访问资源路径是否和登录注册相关,如果是则使用chain.doFilter(request,response);放行。

2.4代码优化设计

  1. JavaScript代码简化:使用Vue框架。Vue是一套前端框架,免除原生JavaScript中的DOM操作,简化书写。基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。Vue使用总共分为三步,第一步是新建HTML页面,引入Vue.js文件,第二步是在JS代码区域,创建Vue核心对象,进行数据绑定,第三步是编写视图。
  2. Servlet代码优化:Web层的Servlet 个数太多了,不利于管理和编写。优化方向是一个模块只定义一个Servlet,而每一个功能只需要在该Servlet中定义对应的方法。具体方案是定义一个通用的Servlet类BaseServlet,在定义其他的Servlet是不需要继承HttpServlet,而继承我们定义的BaseServlet。在BaseServlet中调用具体Servlet(如BrandServlet)中的对应方法。在发送请求时,请求资源的二级路径(如/brandServlet/selectAll)和需要调用的方法名保持相同。

3 运行环境、开发工具

3.1 运行环境

(1)硬件环境:PC机,内存16G。

(2)软件环境:操作系统:windows11。

3.2 开发工具

(1)开发环境:Idea Ultimate Edition 2021.3.3。

(2)数据库:MySQL8.0.26。

(3)编程语言:Java、JSP。

4 数据库设计

(1)tb_user表

tb_user表用来存储用户信息,包括账号和密码,结构如下表4.1所示:

4.1  tb_user用户表)

列名

类型

描述

id

int

id号,唯一,主键

username

varchar(20)

用户名称

password

varchar(20)

用户密码

(2)tb_brand表

tb_brand表用来存储品牌信息,包括品牌名称、企业名称、排序字段、描述信息、状态,结构如下表4.2所示:

4.2  tb_brand品牌表)

列名

类型

描述

id

int

id号,唯一,主键

brand_name

varchar(20)

品牌名称

company_name

varchar(20)

企业名称

ordered

int

排序字段

description

varchar(100)

描述信息

status

int

状态:0:禁用 1:启用

5 系统功能

5.1 用户登录功能

(1) 前端login.jsp页面加载完成后,通过表单发送请求和数据给Web层的LoginServlet

(2) 在LoginServlet中接收请求和数据(用户名和密码)

(3) LoginServlet接收到请求和数据后,调用Service层完成根据用户名和密码查询用户对象

(4) 在Service层需要编写UserService类,在类中实现login方法,方法中调用Dao层的UserMapper

(5) 在UserMapper接口中,声明一个根据用户名和密码查询用户信息的方法

(6) Dao层把数据查询出来以后,将返回数据封装到User对象,将对象交给Service层

(7) Service层将数据返回给Web层

(8) Web层获取到User对象后,判断User对象,如果为Null,则将错误信息响应给登录页面,如果不为Null,则跳转到列表页面,并把当前登录用户的信息存入Session携带到列表页面

该功能截图如图5.1所示。具体代码如下:

5.1 用户登录页面 

 <form action="/brand-case/loginServlet" method="post" id="form">
        <h1 id="loginMsg">LOGIN IN</h1>
        <div id="errorMsg">${login_msg} ${register_msg}</div>
        <p>Username:<input id="username" name="username" value="${cookie.username.value}" type="text"></p>

        <p>Password:<input id="password" name="password" value="${cookie.password.value}" type="password"></p>
        <p>Remember:<input id="remember" name="remember" value="1" type="checkbox"></p>
        <div id="subDiv">
            <input type="submit" class="button" value="login up">
            <input type="reset" class="button" value="reset">&nbsp;&nbsp;&nbsp;
            <a href="register.jsp">没有账号?</a>
        </div>
    </form>

Servlet中代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String remember = request.getParameter("remember");
        User user = service.login(username, password);

5.2 查询所有功能

(1) 前端brand.html页面加载完成后,通过表单发送异步请求给Web层的BrandServlet

(2) BrandServlet接收到请求后,调用Service层完成查询所有功能

(3) 在Service层需要编写BrandServiceImpl类,在类中实现List < Brand > selectAll()方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明查询所有的List < Brand > selectAll()方法

(4) 在BrandMapper接口中,声明一个查询所有的方法

(5) Dao层把数据查询出来以后,将返回数据封装到Brand对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到Brand对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取列表数据,展示获取的数据

该功能截图如图5.2所示。

 

5.2 查询所有功能 

Servlet中代码如下:

 public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Brand> brands = brandService.selectAll();
        String jsonString = JSON.toJSONString(brands);
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

5.3 新增品牌功能

(1) 前端brand.html页面,新增品牌窗口点击提交按钮,发送ajax请求,通过表单发送请求和数据给Web层的BrandServlet

(2) BrandServlet接收到请求后,调用Service层完成新增品牌功能

(3) 在Service层BrandServiceImpl类中实现void add(brand)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明新增品牌的add(brand)方法

(4) 在BrandMapper接口中,声明一个新增品牌的方法

(5) Dao层把新增数据添加以后,将返回数据封装到Brand对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到Brand对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,判断是否添加成功,关闭窗口,重新加载数据

该功能截图如图5.3所示。

 5.3 新增品牌功能

 Servlet中代码如下:

 public void add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader br = request.getReader();
        String params = br.readLine();
        Brand brand = JSON.parseObject(params, Brand.class);
        brandService.add(brand);
        response.getWriter().write("success");
    }

5.4 修改品牌功能

(1) 前端brand.html页面,修改品牌窗口点击提交按钮,发送ajax请求,通过表单发送请求和数据给Web层的BrandServlet

(2) BrandServlet接收到请求后,调用Service层完成修改品牌功能

(3) 在Service层BrandServiceImpl类中实现void updateById(brand)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明修改品牌的updateById(brand)方法

(4) 在BrandMapper接口中,声明一个修改品牌的方法

(5) Dao层把数据修改以后,将返回数据封装到Brand对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到Brand对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,判断是否修改成功,关闭修改品牌窗口,重新加载数据

该功能截图如图5.4所示。

5.4 修改品牌功能 

Servlet中代码如下: 

public void updateById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader br = request.getReader();
        String params = br.readLine();//json字符串
        Brand brand = JSON.parseObject(params, Brand.class);
        brandService.updateById(brand);
        response.getWriter().write("success");
    }

5.5 删除品牌功能

(1) 前端brand.html页面,点击删除按钮,发送ajax请求,通过表单发送请求和数据给Web层的BrandServlet

(2) BrandServlet接收到请求后,调用Service层完成删除品牌功能

(3) 在Service层BrandServiceImpl类中实现void deleteById(id)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明删除品牌的deleteById(brand)方法

(4) 在BrandMapper接口中,声明一个删除品牌的方法

(5) Dao层把数据删除以后,将返回数据封装到Brand对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到Brand对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,判断是否删除成功,重新加载数据

该功能截图如图5.5所示。

 5.5 删除品牌功能

Servlet中代码如下: 

public void deleteById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader br = request.getReader();
        String params = br.readLine();
        int id = JSON.parseObject(params,int.class);
        brandService.deleteById(id);
        response.getWriter().write("success");
    }

5.6 批量删除功能

(1) 前端brand.html页面,点击批量删除按钮,发送ajax请求,携带被选中的id数组给Web层的BrandServlet

(2) BrandServlet接收到请求后,调用Service层完成批量删除功能

(3) 在Service层BrandServiceImpl类中实现void deleteByIds(int[] ids)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明批量删除的deleteByIds(ids)方法

(4) 在BrandMapper接口中,声明一个批量删除的方法

(5) Dao层把数据删除以后,将返回数据封装到Brand对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到Brand对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,判断是否删除成功,重新加载数据

该功能截图如图5.6所示。

 5.6 批量删除功能

 Servlet中代码如下:

 public void deleteByIds(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader br = request.getReader();
        String params = br.readLine();
        int[] ids = JSON.parseObject(params, int[].class);
        brandService.deleteByIds(ids);
        response.getWriter().write("success");
    }

5.7 分页查询功能

(1) 前端brand.html页面加载完成后,发送ajax异步请求,将当前页码和每页显示条数参数给Web层的BrandServlet

(2) BrandServlet接收到参数后,调用Service层完成分页查询功能

(3) 在Service层BrandServiceImpl类中实现PageBean < Brand > selectByPage(int currentPage, int pageSize)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明分页查询的selectByPage(int currentPage, int pageSize)方法

(4) 在BrandMapper接口中,声明一个分页查询的方法

(5) Dao层把数据查询以后,将返回数据封装到PageBean对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到PageBean对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,重新加载数据,将数据设置到模型上

该功能截图如图5.7所示。

5.7 分页查询功能 

Servlet中代码如下:

public void selectByPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 url?currentPage=1&pageSize=5
        String _currentPage = request.getParameter("currentPage");
        String _pageSize = request.getParameter("pageSize");
        int currentPage = Integer.parseInt(_currentPage);
        int pageSize = Integer.parseInt(_pageSize);
        PageBean<Brand> pageBean = brandService.selectByPage(currentPage, pageSize);
        String jsonString = JSON.toJSONString(pageBean);
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

5.8 条件查询功能

(1) 前端brand.html页面绑定查询条件对象模型,点击查询按钮,发送ajax异步请求,将当前查询条件参数给Web层的BrandServlet

(2) BrandServlet接收到参数后,调用Service层完成条件查询功能

(3) 在Service层BrandServiceImpl类中实现PageBean selectByPageAndCondition(int currentPage, int pageSize, Brand brand)方法,方法中调用Dao层的BrandMapper。编写BrandService接口,声明分页查询的PageBean selectByPageAndCondition(int currentPage, int pageSize, Brand brand)方法

(4) 在BrandMapper接口中,声明一个条件查询的方法

(5) Dao层把数据查询以后,将返回数据封装到PageBean对象,将对象交给Service层

(6) Service层将数据返回给Web层

(7) Web层获取到PageBean对象后,将数据转为JSON,响应JSON数据

(8) 前端brand.html获取数据,重新加载数据,将数据设置到模型上

该功能截图如图5.8所示。

 

图5.8 条件查询功能 

Servlet中代码如下:

public void selectByPageAndCondition(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 url?currentPage=1&pageSize=5
        String _currentPage = request.getParameter("currentPage");
        String _pageSize = request.getParameter("pageSize");
        int currentPage = Integer.parseInt(_currentPage);
        int pageSize = Integer.parseInt(_pageSize);
        BufferedReader br = request.getReader();
        String params = br.readLine();//json字符串
        Brand brand = JSON.parseObject(params, Brand.class);
        PageBean<Brand> pageBean = brandService.selectByPageAndCondition(currentPage,pageSize,brand);
        String jsonString = JSON.toJSONString(pageBean);
        response.setContentType("text/json;charset=utf-8");
        response.getWriter().write(jsonString);
    }

6 调试分析

问题1:网页报404错误

解决:这是页面不存在错误,要仔细核查显示的网页是否存在(在运行的浏览器地址框中仔细查看当前路径,核实该路径是否正确、是否有路径错误、当前网页名字名字错误、是否使用了相对路径导致跳转出错等问题)。

问题2:Servlet里使用getParameter得到乱码

解决:在所有执行的方法最前面添加request.setCharacterEncoding(“utf-8”);
respose.setCharacterEncoding(“UTF-8”);即可使getParameter得到的参数不会乱码。

问题3:Navicat链接数据库报2003-Can’t connect to MySql server on localhost ‘13308’错误

解决:右键点击此次电脑选择管理,在服务和应用程序中选择服务,启动MySql80服务。

7 系统测试

7.1 增加品牌功能测试

增加前所有品牌如图7.1所示,增加品牌名称为华硕天选、企业名称为华硕电脑股份有限公司、排序为30、备注为“华硕品质坚如磐石”、状态为启用的的品牌,如图7.2所示。提交后,所有品牌如图7.3所示。对比图7.1和图7.3,可以发现添加已经成功。证明增加品牌功能正常。

图7.1 增加前所有品牌 

 图7.2 增加品牌信息

 图7.3 增加后所有品牌

7.2 批量删除功能测试

批量删除前所有品牌如图7.4所示。删除品牌名称为三只松鼠、格力、小米的品牌,如图7.5出现删除确认,确定后,所有品牌如图7.6所示。对比图7.4和图7.6可以发现,确实删除了所选品牌。证明批量删除功能正常。

 

 图7.4 删除前所有品牌

 图7.5 删除确认

图7.6 删除后所有学生 

7.3 条件查询功能测试

进行条件查询前所有品牌如图7.7所示。查询企业名称为阿里巴巴的品牌,如图7.8进行查询,查询后,所有品牌如图7.9所示。对比图7.7和图7.9可以发现,确实查询到了所需查找的品牌。证明条件查询功能正常。

 

图7.7 查询前所有品牌 

图7.8 查询阿里巴巴 

图7.9查询后所有品牌 

7.4 修改功能测试

修改前华为品牌信息如图7.10所示。修改华为品牌排序为1,状态修改为禁用,修改过程如图7.11所示,提交后,华为品牌信息如图7.12所示。对比图7.10和图7.12可以发现,确实修改了华为品牌的信息。证明修改功能正常。

图7.10 修改前华为信息 

 

 图7.11 修改华为信息

图7.12 修改后华为信息 

8 心得体会

从开始这次Java Web大作业到完成这次大作业一共经历了两周时间。在这两周时间里,一边写程序一边学习,晚上基本都学到半夜,但是当程序功能一点一点距离自己的预期时,就会觉得所有的付出都值了,学到了很多东西,其中包括:知道了如何创建和使用一个servlet,首先要继承HttpServlet,并重写service方法,以及相关的配置和需要添加的依赖、了解到了两种管理技术,包括客户端状态管理技术(cookie)和服务器端状态管理技术(session),cookie主要时用于保存客户端状态的计数,比如常用来统计用户访问量多少次servlet,session是用于保护每个用户的专用信息,比如用户登录时,获取用户的名字、密码,保存密码以及访问其他程序时的一个有效期、了解了一些HTTP协议的相关知识,首先就是HTTP协议的特点:建立连接,获取响应结果,关闭连接,其次就是了解了它的数据包格式(请求数据包、响应数据包)、请求方式(get、post)以及它的运行过程、学习了jsp的内容,它可以让数据的处理和数据的展示进行分离,里面也包含html,但还可以嵌套一些Java语言,嵌套Java相关内容可以使用el表达式实现、jstl标签使用,还可以直接用<% %>在中间添加Java语句实现、了解了过滤器和监听器的一点知识,分别了解了其配置及其执行过程,对相关知识点有了一个初步的认识、学习到了用MyBatis框架来简化JDBC代码。在开发时遇到让我印象最深的一个问题就是,Web 层的 Servlet 个数太多了,不利于管理和编写,我在网上翻看了很多博客,得到解决办法:一个模块只定义一个 servlet,而每一个功能只需要在该 servlet 中定义对应的方法。为了做到通用,定义一个通用的servlet类BaseServlet,在定义其他的servlet是不需要继承 HttpServlet,而继承我们定义的BaseServlet。在BaseServlet 中调用具体 servlet(如BrandServlet)中的对应方法。经过与指导老师沟通,发现在系统中还有一些不足,如需要先验证品牌的相关证件后,才能进行添加操作。比如在添加品牌时,需要先查看营业执照是否合格,合格后添加,不合格给出提示信息。由于时间原因,本次大作业只做了电商品牌管理的部分,待时间充裕后,会着手实现电商后台完整的系统。通过这次大作业,发现最根本的就是对数据的增删改查的基本操作,学到后面,所运用到的方法也越来越多,但核心的方面并没有改变,通过不断地练习,对数据的增删改查操作也比较熟练了,对一个网页的完成步骤也形成了一些自己的想法。

参考文献

[1]耿祥义, 张跃平. JSP实用教程(第4版). 清华大学出版社, 2020.

[2]刘继承等. Java 8程序设计及实验. 清华大学出版社, 2018.

[3]林龙,刘华贞. JSP+Servlet+Tomcat应用开发从零开始学(第2版). 清华大学出版社,2019.

[4]马建红, 李学相, 韩颖, 王瑞娟, 张晗.JSP应用与开发技术(第3版). 清华大学出版社,2018.

  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
1. 总体介绍 本次项目主要以本学期所学内容为基础,采用servlet+jsp+jdbc的技术以及mvc模式进行项目开发,本次开发的内容主要以实现CRUD核心功能为主的教务管理系统,分为学生端和教师端,前端采用jquery进行数据传输以及处理,bootstap写界面。 2. 技术架构 运行环境:tomcat9+mysql5+maven3.8+jdk8 前端技术:jquery 用以数据处理以及前端验证以及生成验证码等等 Bootstrap 前端界面处理 后端技术:servelt+jsp maven进行jar包和第三方库管理 采用jspsmart进行文件的操作处理 数据库:mysql5 基于MVC的分层思想及采用jsp+servelt技术的B/S结构的应用系统,系统主要开发语言为JAVA,JSP。数据库要求使用MySQL8.0,应用服务器选用Tomcat服务器 3. 功能介绍 系统能够提供用户有好的界面 系统具有良好的允许效率 系统具有良好的扩充性,灵活性 系统管理操作简单易懂 3.1 总体结构 3.2 模块详情 学生模块: 注册: 1. 用户点击注册,进行注册; 2. 用户输入注册信息; 3. 校验数据:如果用户名重复或者两次密码校验不合格或者密码规格不符合,则提示错误信息; 4. 若信息无错误,提示注册成功,跳转到登录页。 登录: 1. 用户进入系统未进行登录则自行跳转登录页面; 2. 点击忘记密码可进行密码找回; 3. 提交信息进行校验,查看用户名密码是否为空以及是否符合格式,随后在后台进行校验,合格则进行登录跳转到用户界面; 4. 若登录信息不正确,则提示登录错误信息。 查看成绩: 1. 点击查看成绩,打印成绩列表; 2. 支持到处成绩单为pdf格式。 导出成绩: 1. 点击到处按钮; 2. 系统自动处理并到处成pdf。 个人信息管理: 1. 选择上传头像 2. 修改个人信息:按需填写个人信息,随后进行保存则覆盖修改以往的个人信息。 退出登录: 1. 点击退出登录,自动退出到首页并删除本地和服务器缓存。 教师模块: 注册: 1用户点击注册,进行注册; 2用户输入注册信息; 3校验数据:如果用户名重复或者两次密码校验不合格或者密码规格不符合,则提示错误信息; 4若信息无错误,提示注册成功,跳转到登录页。 登录: 1用户进入系统未进行登录则自行跳转登录页面; 2点击忘记密码可进行密码找回; 3提交信息进行校验,查看用户名密码是否为空以及是否符合格式,随后在后台进行校验,合格则进行登录跳转到用户界面; 4若登录信息不正确,则提示登录错误信息。 个人信息管理: 1选择上传头像 2修改个人信息:按需填写个人信息,随后进行保存则覆盖修改以往的个人信息。 学生管理: 1. 点击添加学生,填写学生信息进行添加; 2. 修改学生信息,点击修改,按需填写要修改的学生信息,进行保存覆盖修改; 3. 点击删除学生数据,提示是否删除,确定则删除,取消则不删除; 4. 查看成绩,点击查看学生成绩,单独列出学生成绩列表; 成绩管理: 1. 点击成绩管理,列出所有学生成绩; 2. 点击修改,勾选需要修改的学生,按需填写修改信息,保存覆盖修改学生信息。 退出登录: 1点击退出登录,自动退出到首页并删除本地和服务器缓存。 4. 页面设计 静态jsp页面和jquery和bootstrap 5. 数据库设计 权限对照表: 表名: role 名称 类型 长度 允许空值 是否主键 注释 uid 整型 11 否 是 权限等级 utype 字符 255 否 否 用户等级名称 分数表: 表名: score 名称 类型 长度 允许空值 是否主键 注释 id 整型 200 否 是 学号 dat 字符 255 否 否 课程1分数 Android 字符 255 否 否 课程2分数 Jsp 字符 255 是 否 课程3分数 学生表: 表名: student 名称 类型 长度 允许空值 是否主键 注释 id 整型 59 否 是 学号 password 字符 255 否 否 登陆密码 Name 字符 255 否 否 学生姓名 Sex 字符 255 是 否 性别 School_date 字符 255 是 否 入学时间 Major 字符 255 是 否 专业 email 字符 255 是 否 邮箱 教师表: 表名: student 名称 类型 长度 允许空值 是否主键 注释 id 整型 59 否 是 教师工号 password 字符 255 否 否 登陆密码 Name 字符 255 否 否 教师姓名 Sex 字符 255 是 否 性别 email 字符 255 是 否 邮箱
Vue 项目实战电商后台管理系统的开发需要掌握以下技术: 一、前端技术 1. Vue.js:Vue.js 是目前比较流行的前端框架之一,其主要特点是轻量级、易扩展、高效等。Vue.js 的组件化和模块化特性可以帮助开发者更加方便、高效地开发电商后台管理系统。 2. Element-UI:Element-UI 是一套基于 Vue.js 的 UI 组件库,提供了丰富的 UI 组件,如表单、表格、分页、对话框等,可以帮助开发者快速开发电商后台管理系统的前端界面。 3. Axios:Axios 是一个基于 Promise 的 HTTP 库,可以帮助开发者更加方便地进行网络请求,如获取数据、提交表单等。 二、后端技术 1. Spring Boot:Spring Boot 是一个基于 Spring 框架的快速开发框架,可以帮助开发者快速搭建电商后台管理系统的后端服务。 2. MyBatis:MyBatis 是一个优秀的 Java 持久层框架,可以帮助开发者更加方便地进行数据库操作。 3. MySQL:MySQL 是一种流行的关系型数据库,可以帮助开发者存储和管理电商后台管理系统的数据。 三、其他技术 1. Git:Git 是一个版本控制工具,可以帮助开发者更好地管理代码版本,协作开发。 2. Maven:Maven 是一个 Java 项目管理工具,可以帮助开发者管理项目依赖、构建项目等。 3. Nginx:Nginx 是一个高性能的 Web 服务器和反向代理服务器,可以帮助开发者更好地管理前端和后端服务的请求。 综上所述,Vue 项目实战电商后台管理系统的开发需要掌握前端技术、后端技术以及其他相关技术。开发者需要根据项目需求灵活运用这些技术,以实现高效、稳定、可靠的电商后台管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小关不摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值