首先数据库建表:

项目如何搭建?
我使用的是maven,导入相应的jar包,和依赖

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version>
</dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version>
</dependency>
<dependency><groupId>com.guicedee.services</groupId><artifactId>javax.servlet-api</artifactId><version>62</version>
</dependency><dependency><groupId>javax.servlet.jsp.jstl</groupId><artifactId>javax.servlet.jsp.jstl-api</artifactId><version>1.2.2</version>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version>
</dependency><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version>
</dependency>

搭建项目准备工作

  1. 搭建一个maven web项目
  2. 配置Smart tomcat
  3. 测试项目是否能跑起来
  4. 导入项目中需要的jar包,jsp,Servlet,MySQL驱动jstl,standard,junit等
  5. 构建项目包结构

    6.编写实体类、ROM映射:表–类映射
    7.编写基础公共类
  6. 数据库配置文件
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/smbms?useSSL=true&useUnicode=true&characterEncoding=utf-8
    username=root
    password=password
    

    2.编写数据库公共类

package com.happy.dao;import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;/*** 操作数据库的基类--静态类*/
public class BaseDao {static{//静态代码块,在类加载的时候执行init();}private static String driver;private static String url;private static String username;private static String password;//初始化连接参数,从配置文件里获得public static void init(){Properties properties=new Properties();String configFile = "db.properties";InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);try {properties.load(is);} catch (IOException e) {e.printStackTrace();}driver=properties.getProperty("driver");url=properties.getProperty("url");username=properties.getProperty("username");password=properties.getProperty("password");}   //获取数据库连接//staticpublic static  Connection getConnection(){Connection connection = null;try {Class.forName(driver);connection = DriverManager.getConnection(url, username, password);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return connection;}/*** 查询操作* @param connection* @param sql* @param params*///static//编写公共查询方法public static ResultSet execute(Connection connection,PreparedStatement preparedStatement,ResultSet resultSet,String sql,Object[] params) throws Exception{//预编译的sql不需要传参,直接执行即可preparedStatement = connection.prepareStatement(sql);for(int i = 0; i < params.length; i++){//setObject占位符从1开始,但是我们的数组是从0开始preparedStatement.setObject(i+1, params[i]);}resultSet = preparedStatement.executeQuery();//新添加sqlreturn resultSet;}/*** 更新操作* @param connection* @param sql* @param params* @throws Exception*///static//编写增删改公共方法public static int execute(Connection connection,PreparedStatement preparedStatement,String sql,Object[] params) throws Exception{int updateRows = 0;preparedStatement = connection.prepareStatement(sql);for(int i = 0; i < params.length; i++){preparedStatement.setObject(i+1, params[i]);}updateRows = preparedStatement.executeUpdate();return updateRows;}/*** 释放资源* @param connection*///staticpublic static  boolean closeResource(Connection connection,PreparedStatement preparedStatement, ResultSet resultSet){boolean flag = true;if(resultSet != null){try {resultSet.close();resultSet = null;//GC回收} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();flag = false;}}if(preparedStatement != null){try {preparedStatement.close();preparedStatement = null;//GC回收} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();flag = false;}}if(connection != null){try {connection.close();connection = null;//GC回收} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();flag = false;}}return flag;}
}

3.编写字符编码过滤器

 servletRequest.setCharacterEncoding("utf-8");servletResponse.setCharacterEncoding("utf-8");filterChain.doFilter(servletRequest,servletResponse);

8.导入静态资源

登录功能实现
1.编写前端页面
2.设置首页
1.设置欢迎首页

<!--设置欢迎页面-->
<welcome-file-list><welcome-file>login.jsp</welcome-file>
</welcome-file-list>

根据三层架构我们需要先从dao层写,用户登录的接口(面向接口的编程)
三层架构:dao---->service---->servlet

//得到要登录的用户
public User getLoginUser(Connection connection, String userCode) throws Exception;

4.编写dao层接口的实现类


public class UserDaoImpl implements UserDao{//持久层只做查询数据库的内容public User getLoginUser(Connection connection, String userCode) throws Exception{//准备三个对象PreparedStatement pstm = null;ResultSet rs = null;User user = null;//判断是否连接成功if(null != connection){String sql = "select * from smbms_user where userCode=?";Object[] params = {userCode};rs = BaseDao.execute(connection, pstm, rs, sql, params);if(rs.next()){user = new User();user.setId(rs.getInt("id"));user.setUserCode(rs.getString("userCode"));user.setUserName(rs.getString("userName"));user.setUserPassword(rs.getString("userPassword"));user.setGender(rs.getInt("gender"));user.setBirthday(rs.getDate("birthday"));user.setPhone(rs.getString("phone"));user.setAddress(rs.getString("address"));user.setUserRole(rs.getInt("userRole"));user.setCreatedBy(rs.getInt("createdBy"));user.setCreationDate(rs.getTimestamp("creationDate"));user.setModifyBy(rs.getInt("modifyBy"));user.setModifyDate(rs.getTimestamp("modifyDate"));}BaseDao.closeResource(null, pstm, rs);}return user;}
}

5.编写业务层接口

//用户登录
public User login(String userCode,String password);

6.业务层实现接口类

public class UserServiceImpl implements UserService{//业务层都会调用dao层,所以我们要引入dao层//只处理对应业务private UserDao userDao;public UserServiceImpl(){userDao = new UserDaoImpl();}public User login(String userCode, String password) {Connection connection = null;//通过业务层调用相应的具体数据数据库操作User user =null;try {connection = BaseDao.getConnection();user = userDao.getLoginUser(connection, userCode);} catch (Exception e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return user;}//测试代码/*@Testpublic void test() {UserServiceImpl userService = new UserServiceImpl();String userCode = "admin";String userPassword = "12345678";User admin = userService.login(userCode, userPassword);System.out.println(admin.getUserPassword());}*/
}

7.编写Servlet

public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("LoginServlet--->start...");//获取用户名和密码String userCode = req.getParameter("userCode");String userPassword = req.getParameter("userPassword");//和数据库中的密码进行对比,调用业务层UserService userService = new UserServiceImpl();User user = userService.login(userCode, userPassword);//这里已经把登陆的人给查出来了if (user!=null){//放入sessionreq.getSession().setAttribute(Constants.USER_SESSION,user);resp.sendRedirect("jsp/frame.jsp");}else {//查无此人,无法登录//转发回登陆界面,顺带提示他,用户名或者密码不正确req.setAttribute("error","用户名或者密码不正确");req.getRequestDispatcher("login.jsp").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

8.注册Servlet(一定要记得)

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.happy.servlet.user.LoginServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/login.do</url-pattern>
</servlet-mapping>

9.测试访问,保证以上功能可以成功

登录功能优化
注销功能:思路---->移除session,返回登录页面

public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//移除用户的sessionreq.getSession().removeAttribute(Constants.USER_SESSION);resp.sendRedirect(req.getContextPath()+"/login.jsp");//返回登录页面}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

**注册xml

<servlet><servlet-name>LogoutServlet</servlet-name><servlet-class>com.happy.servlet.user.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>LogoutServlet</servlet-name><url-pattern>/jsp/logout.do</url-pattern>
</servlet-mapping>

登录拦截优化
编写一个过滤器,并注册

public class SysFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest rep, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) rep; //为了获得sessionHttpServletResponse response = (HttpServletResponse) resp; //为了重定向//过滤器从session中获取用户User user = (User) request.getSession().getAttribute(Constants.USER_SESSION);if (user==null){  //已经被移除或者注销了,或者未登录response.sendRedirect("/smbms/error.jsp");}else {filterChain.doFilter(rep,resp);}}@Overridepublic void destroy() {}
}

注册xml

<filter><filter-name>SysFilter</filter-name><filter-class>com.happy.filter.SysFilter</filter-class>
</filter>
<filter-mapping><filter-name>SysFilter</filter-name><url-pattern>/jsp/*</url-pattern>
</filter-mapping>

测试,登录,注册,权限,都要保证可以运行

密码修改
1.导入前端素材

<li><a href="${pageContext.request.contextPath }/jsp/pwdmodify.jsp">密码修改</a></li>

2.写项目,建议从底层向上写

3.UserDao接口

//修改当前用户密码
public int updatePwd(Connection connection, int id, String password) throws Exception;

4.UserDao接口实现类

//修改当前用户密码
@Override
public int updatePwd(Connection connection, int id, String password) throws Exception {System.out.println("Uservlet: "+password);PreparedStatement pstm = null;int execute = 0;if (connection!=null){String sql ="update smbms_user set userPassword = ? where id = ?";Object params[] = {password,id};execute = BaseDao.execute(connection,pstm,sql,params);BaseDao.closeResource(null,pstm,null);//各司其职,所以有两个为null}return execute;
}

5.UserServece层

//根据用户的id修改密码
public boolean updatePwd(int id,String pwd);

6.编写UserService实现类

//根据用户的id修改密码
@Override
public boolean updatePwd(int id, String pwd) {System.out.println("Uservlet: "+pwd);Connection connection = null;boolean flag = false;//修改密码try {connection = BaseDao.getConnection();if (userDao.updatePwd(connection,id,pwd)>0){flag = true;}} catch (Exception e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return flag;
}

7.servlet记得实现复用,要提取出方法!在 dao层 和 service层 自己写映射类和实现类,下面是 servlet层 的主体

public class UserServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String method = req.getParameter("method");if (method != "savepwd" && method != null) {this.updatePwd(req, resp);}//实现复用// 想添加新的增删改查,直接用if(method != "savepwd" && method != null);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}public void updatePwd(HttpServletRequest req, HttpServletResponse resp) {// 通过session获得用户idObject o = req.getSession().getAttribute(Constants.USER_SESSION);String newpassword = req.getParameter("newpassword");boolean flag = false;if (o != null && newpassword != null) {UserService userService = new UserServiceImpl();try {flag = userService.updatePwd(((User) o).getId(), newpassword);} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}if (flag) {req.setAttribute("message", "密码修改成功,请退出,使用新密码登录");// 密码修改成功,移除session(移除后不能再次修改密码,建议不移除)req.getSession().removeAttribute(Constants.USER_SESSION);} else {// 密码修改失败req.setAttribute("message", "密码修改失败");}} else {// 密码修改有问题req.setAttribute("message", "新密码有问题");}try {req.getRequestDispatcher("/jsp/pwdmodify.jsp").forward(req, resp);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

注册xml

<servlet><servlet-name>UserServlet</servlet-name><servlet-class>com.happy.servlet.user.UserServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/jsp/user.do</url-pattern>
</servlet-mapping>

8.测试,修改

优化密码修改使用Ajax
1.导入阿里巴巴的fastjson

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version>
</dependency>

验证旧密码

public void pwdmodify(HttpServletRequest req,HttpServletResponse resp){Object o = req.getSession().getAttribute(Constants.USER_SESSION);String oldpassword = req.getParameter("oldpassword");Map<String, String> resultMap = new HashMap<String, String>();if (o==null){ //session过期了,过期了resultMap.put("result","sessionerror");}else if (StringUtils.isNullOrEmpty(oldpassword)){resultMap.put("result","error");}else {String userPassword = ((User) o).getUserPassword();if (oldpassword.equals(userPassword)){resultMap.put("result","true");}else {resultMap.put("result","false");}}try {resp.setContentType("application/json");PrintWriter writer = resp.getWriter();writer.write(JSONArray.toJSONString(resultMap));writer.flush();writer.close();} catch (IOException e) {e.printStackTrace();}
}

测试!

用户管理实现

1.导入分页的工具类-PageSupport
2.用户列表页面导入userlist.jsp

1.获取用户数量
1.UserDaoImpl(接口)

//根据用户名或者角色查询用户总数
public int getUserCount(Connection connection, String username, int userRole) throws Exception;

2.UserDaoImpl(实现类)

//根据用户名或者角色查询用户总数
@Override
public int getUserCount(Connection connection, String userName, int userRole) throws Exception {PreparedStatement pstm = null;ResultSet rs = null;int count = 0;if (connection!=null){StringBuffer sql = new StringBuffer();sql.append("select count(1) as count from smbms_user u,smbms_role r where u.userRole = r.id");ArrayList<Object> list = new ArrayList<Object>();if (!StringUtils.isNullOrEmpty(userName)){sql.append(" and u.userName like ?");list.add("%"+userName+"%"); //index:0}if (userRole>0){sql.append(" and u.userRole = ?");list.add(userRole);//index:1}//怎么把list转换为数组Object[] params = list.toArray();System.out.println("UserDaoImpl-->getUserCount:"+sql.toString());//输出最后完整的sql语句rs = BaseDao.execute(connection,pstm,rs,sql.toString(),params);if (rs.next()) {count = rs.getInt("count");//从结果集中获取最终的数量}BaseDao.closeResource(null,pstm,rs);}return count;
}

3.UserService(接口)

//查询记录数
public int getUserCount(String username,int userRole);

4.UserServiceImpl实现类

//查询记录数
@Override
public int getUserCount(String username, int userRole) {Connection connection = null;int count = 0;try {connection = BaseDao.getConnection();count = userDao.getUserCount(connection, username, userRole);} catch (Exception e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return count;
}

2.获取用户列表
1.UserDao(接口)

//通过条件查询-userList
public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws Exception;

2.UserDaoImpl(实现类)

//通过条件查询-userList
@Override
public List<User> getUserList(Connection connection, String userName, int userRole, int currentPageNo, int pageSize) throws Exception {PreparedStatement pstm = null;ResultSet rs = null;List<User> userList = new ArrayList<User>();if(connection != null){StringBuffer sql = new StringBuffer(); //需要拼接就用StringBuffersql.append("select u.*,r.roleName as userRoleName from smbms_user u,smbms_role r where u.userRole = r.id");List<Object> list = new ArrayList<Object>();if(!StringUtils.isNullOrEmpty(userName)){sql.append(" and u.userName like ?");list.add("%"+userName+"%");}if(userRole > 0){sql.append(" and u.userRole = ?");list.add(userRole);}//当前页(当前页-1)*页面大小//0,5    1,0  01234//5,5 5,0  56789//10,5    10,0 10~sql.append(" order by creationDate DESC limit ?,?");currentPageNo = (currentPageNo-1)*pageSize;list.add(currentPageNo);list.add(pageSize);Object[] params = list.toArray();System.out.println("sql ----> " + sql.toString());rs = BaseDao.execute(connection, pstm, rs, sql.toString(), params);while(rs.next()){User _user = new User();_user.setId(rs.getInt("id"));_user.setUserCode(rs.getString("userCode"));_user.setUserName(rs.getString("userName"));_user.setGender(rs.getInt("gender"));_user.setBirthday(rs.getDate("birthday"));_user.setPhone(rs.getString("phone"));_user.setUserRole(rs.getInt("userRole"));_user.setUserRoleName(rs.getString("userRoleName"));userList.add(_user);}BaseDao.closeResource(null, pstm, rs);}return userList;
}

3.UserService(接口)

//根据条件查询用户列表
public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize);

4.UserServiceImpl(实现类)

//根据条件查询用户列表
@Override
public List<User> getUserList(String queryUserName, int queryUserRole, int currentPageNo, int pageSize) {// TODO Auto-generated method stubConnection connection = null;List<User> userList = null;System.out.println("queryUserName ---- > " + queryUserName);System.out.println("queryUserRole ---- > " + queryUserRole);System.out.println("currentPageNo ---- > " + currentPageNo);System.out.println("pageSize ---- > " + pageSize);try {connection = BaseDao.getConnection();userList = userDao.getUserList(connection, queryUserName,queryUserRole,currentPageNo,pageSize);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{BaseDao.closeResource(connection, null, null);}return userList;
}

3、获取角色操作
为了我们的职责统一,我们可以把角色的操作单独放在一个包中,和pojo类对应
1、RoleDao(接口)

//获取角色列表
public List<Role> getRoleList(Connection connection)throws Exception;

2、RoleDaoIpml(实现类)

public class RoleDaoImpl implements RoleDao {@Overridepublic List<Role> getRoleList(Connection connection) throws Exception {PreparedStatement pstm = null;ResultSet rs = null;List<Role> roleList = new ArrayList<Role>();if (connection != null) {String sql = "select * from smbms_role";Object[] params = {};rs = BaseDao.execute(connection, pstm, rs, sql, params);while (rs.next()) {Role _role = new Role();_role.setId(rs.getInt("id"));_role.setRoleCode(rs.getString("roleCode"));_role.setRoleName(rs.getString("roleName"));roleList.add(_role);}BaseDao.closeResource(null, pstm, rs);}return roleList;}
}

3.RoleService(接口)

//角色列表查询
public List<Role> getRoleList();

4、RoleServiceIpml(实现类)

public class RoleServiceImpl implements RoleService{//引入Dao层private RoleDao roleDao;public RoleServiceImpl(){roleDao = new RoleDaoImpl();}public List<Role> getRoleList() {Connection connection = null;List<Role> roleList = null;try {connection = BaseDao.getConnection();roleList = roleDao.getRoleList(connection);} catch (Exception e) {e.printStackTrace();}finally {BaseDao.closeResource(connection,null,null);}return roleList;}//测试类@Testpublic void Test(){RoleServiceImpl roleService = new RoleServiceImpl();List<Role> roleList = roleService.getRoleList();for (Role role : roleList){System.out.println(role.getRoleName());}}
}

4.用户显示的servlet
1.获取用户前端的数据(查询)
2.判断请求是否需要执行,看参数的值判断
3.为了实现分页,需要计算出当前页面和总页面,页面大小
4.用户列表展示
5.返回前端

public void query(HttpServletRequest req,HttpServletResponse resp){//查询用户列表//从前端获取数据;String queryUserName = req.getParameter("queryname");String temp = req.getParameter("queryUserRole");String pageIndex = req.getParameter("pageIndex");int queryUserRole = 0;//防止为空,所以定义为0;//获取用户列表UserServiceImpl userService = new UserServiceImpl();List<User> userList = null;//第一次请求一定是走第一页,页面大小固定的int pageSize = 5;int currentPageNo = 1;if (queryUserName==null){queryUserName="";}if (temp!=null && temp.equals("")){queryUserRole = Integer.parseInt(temp);//给查询赋值!0 1 2 3}if (pageIndex!=null){currentPageNo = Integer.parseInt(pageIndex);}//获取用户的总数(分页:上一页,下一页的情况)int totalCount = userService.getUserCount(queryUserName,queryUserRole);//总页数支持PageSupport pageSupport = new PageSupport();pageSupport.setCurrentPageNo(currentPageNo);pageSupport.setPageSize(pageSize);pageSupport.setTotalCount(totalCount);int totalPageCount = ((int)(totalCount/pageSize))+1;//控制首页和尾页//如果页面要小于1了,就显示第一页的东西if (currentPageNo<1){currentPageNo=1;}else if (currentPageNo>totalPageCount){//当前页大于总页数currentPageNo=totalPageCount;}//用户列表展示userList = userService.getUserList(queryUserName,queryUserRole,currentPageNo,pageSize);req.setAttribute("userList",userList);RoleServiceImpl roleService = new RoleServiceImpl();List<Role> roleList = roleService.getRoleList();req.setAttribute("roleList",roleList);req.setAttribute("totalCount",totalCount);req.setAttribute("currentPageNo",currentPageNo);req.setAttribute("totalPageCount",totalPageCount);req.setAttribute("queryUserName",queryUserName);req.setAttribute("queryUserRole",queryUserRole);//返回前端try {req.getRequestDispatcher("userlist.jsp").forward(req,resp);} catch (ServletException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}

这个项目到这差不多就完了,剩下的代码都是和上面一样,增删改查,修改一行代码的问题,还是根据三层架构的思想去编写代码,从后往前!

SMBMS(超市管理系统)相关推荐

  1. smbms超市管理系统项目总结

    前言 跟着 遇见狂神说 javaWeb课程做的smbms超市管理系统项目 具体实现在项目中可看代码(无需收费)点击跳转到项目下载 一.smbms超市管理系统介绍 对于用户的信息存储,完成了用户登录验证 ...

  2. SMBMS超市管理系统

    SMBMS超市管理系统 环境搭建 注意设置jsp的头为<%@ page pageEncoding="UTF-8"%>,解决中文乱码 欢迎页面 <welcome-f ...

  3. smbms(超市管理系统)源码 + 分析

    在项目开始之前,我们首先要对项目的整体架构分析一下,该项目一共分为四个模块,登录注销.用户管理.订单管理.供应商管理,其中用户管理.订单管理以及供应商管理都是需要对数据库进行crud的.项目的整体架构 ...

  4. smbms超市管理系统数据库建表sql

    ```sql /* SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.7.17 : Database - smbms *************************** ...

  5. 狂神说smbms超市管理系统项目源码

    视频地址:B站狂神说 视频用到的项目资源 链接:https://pan.baidu.com/s/1q4xh_m3_ASLwXtsOtwt06A 提取码:9hnf 下面我自己根据视频改过后的源码 Jav ...

  6. SMBMS 超市订单管理系统

    SMBMS 超市订单管理系统 文章目录 前言 SMBMS 超市订单管理系统 项目搭建准备工作 1. smbms项目搭建 0.数据库: 1.搭建一个mavenWeb项目 2.配置Tomcat 3.测试项 ...

  7. JavaWeb项目smbms超市订单管理系统

    项目简介 smbms超市订单管理系统,主要用于用户管理.订单管理.供应商管理等功能,是学习JavaWeb练习的一个小项目 这个博客只讲了部分功能(用户登录界面,和密码修改界面),以及用户管理的实现. ...

  8. JSP+Servlet+MySql超市管理系统项目源码

    一. 开发背景 软件名称:超市管理系统(servlet+jsp) 使用对象:学习或了解过 java 基础课程,开始接触 javaWeb 的学生和软件爱好者 源码链接https://pan.baidu. ...

  9. 终于有人手把手用Java实现超市管理系统

    今天我们根据GUI 界面写的简易计算器,实现加减乘除功能以及计算器标准型和科学型之间的转换,有兴趣可以看看 Java混合计算器以及界面切换 .这次咱们写的超市管理系统,实现的功能有账户的注册.登录,超 ...

  10. 基于Javaweb实现超市管理系统

    本系统基于JSP和Servlet实现开发一套小型超市管理系统,功能完整,结构清晰,使用技术结构简单,系统介绍:大学校内超市管理系统,实现收银台,商品分类管理,商品库存管理,商品管理,营收统计等功能 运 ...

最新文章

  1. linux命令:ln 使用方法
  2. mysql密码有格式要求吗_高考日语作文10个格式要求!你能看出图中5处错误吗?...
  3. .NET 6新特性试用 | DateOnly和TimeOnly类型
  4. Problem G. Graph 2015-2016 acmicpc neerc 拓扑排序模拟
  5. (day 34 - 哈希表 or 双指针 )剑指 Offer 57. 和为s的两个数字
  6. 主机与虚拟机ping通
  7. HTTP 405 Method Not Allowed问题的解决
  8. Android一键加群实现
  9. 环境保护概论课程作业
  10. mysql 主从1146_MySQL5.7主从复制slave报Last_Errno: 1146错误解决
  11. 这个充电宝不仅支持无线充,关键还小
  12. java中复数类中相加,复数运算的JAVA类
  13. Joomla安装及使用
  14. MySQL5.7 常见调优参数速查
  15. Laravel技巧集锦(30):使用api_toke前后端分离
  16. Java基本数据类型(范围 默认值 占用字节 精度
  17. 数据处理(一):点到直线距离
  18. 2014年最新电脑公司系统下载
  19. 程序员修炼之道(跨年阅读)-----精彩---经典---(待整理)
  20. 推荐一款照片文件恢复大师

热门文章

  1. github修改描述
  2. PID的学习与理解(一)
  3. php批量添加水印图片,php 批量给图片加水印代码_PHP教程
  4. java 自动退出_java程序自动退出
  5. SteamVR2.0开发指南
  6. 北邮2018计算机院考研复试机试上机题解+结果统计
  7. ap计算机笔记,重磅!AP确定线上开卷考,公开喊话赶紧做笔记!
  8. oracle中or的使用,Oracle Or
  9. 毕业三年,拿了北京户口,从年薪20W到年薪40W,说一点对后人有用的经验
  10. Ubuntu 无法运行 eclipse,提示 没有为可执行文件 文件类型安装应用程序。