基于JavaWeb的收银台系统_java开源收银系统_Altanter的博客-程序员资料

技术标签: Java  java  

简介
本项目采用WEB+Servlet+HTML+CSS+JS实现,模拟收银台实现基本的操作。

重要知识点
1、Java类集的使用
2、Servlet的使用
3、前端部分知识的简单运用。
4、数据库的表的设计,尤其是订单和订单项之间的设计
5、JDBC编程

核心需求
实现如下的操作:
1、上架商品
2、浏览商品
3、更新商品信息
4、购买商品
5、浏览订单

数据库设计
账户表(account)
在这里插入图片描述
商品表(goods)
在这里插入图片描述
订单表(order)
在这里插入图片描述
订单项表(order_item)
在这里插入图片描述
创建数据库代码:注意为了避免价格会出现小数,在存入数据库的同时,需要转化为整数
– 数据库
drop database if exists cash;
create database if not exists cash character set utf8;

– 使用数据库
use cash;

– 帐号
drop table if exists account;
create table if not exists account
(
id int primary key auto_increment comment ‘帐号编号’,
username varchar(12) not null comment ‘帐号’,
password varchar(128) not null comment ‘密码’
);
– 商品信息
drop table if exists goods;
create table if not exists goods
(
id int primary key auto_increment comment ‘商品编号’,
name varchar(128) not null comment ‘商品名称’,
introduce varchar(256) default ‘暂无’ not null comment ‘商品简介’,
stock int not null comment ‘商品库存’,
unit varchar(12) not null comment ‘库存单位’,
price int not null comment ‘商品价格,单位:分’,
discount int default 100 not null comment ‘商品折扣,[0,100]’
);

– 订单
drop table if exists order;
create table if not exists order
(
id varchar(32) primary key comment ‘订单编号’,
account_id int not null comment ‘帐号编号’,
account_name varchar(12) not null comment ‘帐号’,
create_time datetime not null comment ‘创建时间’,
finish_time datetime default null comment ‘完成时间’,
actual_amount int not null comment ‘实际金额,单位:分’,
total_money int not null comment ‘总金额,单位:分’,
order_status int not null comment ‘支付状态 1 待支付 2 完成’
);
– 订单项
drop table if exists order_item;
create table if not exists order_item
(
id int primary key auto_increment comment ‘订单条目编号’,
order_id varchar(32) not null comment ‘订单编号’,
goods_id int not null comment ‘商品编号’,
goods_name varchar(128) not null comment ‘商品名称’,
goods_introduce varchar(256) default ‘暂无’ not null comment ‘商品简介’,
goods_num int not null comment ‘商品数量’,
goods_unit varchar(12) not null comment ‘库存单位’,
goods_price int not null comment ‘商品价格,单位:分’,
goods_discount int default 100 not null comment ‘商品折扣,[0,100]’
);

功能展示
用户登陆
在这里插入图片描述
功能菜单展示
在这里插入图片描述
上架商品
在这里插入图片描述
浏览商品
在这里插入图片描述
更新商品信息
在这里插入图片描述
浏览订单
在这里插入图片描述
购买商品
在这里插入图片描述
项目整体框架
在这里插入图片描述
@WebServlet注解配置Servlet
Servlet配置有两种方式:
1、Servlet类上使用@WebServlet注解进行配置
2、web.xml文件中配置

客户端和服务器通信方式-Servlet
Servlet 是服务器端程序,主要用来交互式地浏览和修改数据,生成动态web内容。web服务器接收到客户端的Servlet 请求后,如果检查到已经装载并创建了该Servlet的实例对象,则会创建一个用于封装HTTP请求消息的HttpServletRequest 对象和一个代表Http响应消息的 HttpServletResponse 对象,然后调用Servlet的service()方法,将请求和响应对象作为参数传递进去,这样客户端通过 HttpServletRequest 对象将请求发送给服务器,服务器通过 HttpServletResponse 对象将响应传递给客户端,达到通信的目的。

项目目录结构
在这里插入图片描述
服务器与客户端的交互
get方法一般用于请求服务器数据,post方法一般用于客户端发送数据给服务器
1、登录、注册
在这里插入图片描述
在这里插入图片描述

2、商品上架
在这里插入图片描述

3、商品浏览
在这里插入图片描述
js和ajax代码:

$( function() {
    
$.ajax({
    
url: "goods",
type:"get",
dataType: "json",
success: function(data){
    
console.log(data.length);
console.log(data);
var s = "";
for (var i = 0; i < data.length; i++) {
    
s += "<tr >";
s += "<td id = \"infoTr\">" + data[i].id + "</td>";
s += "<td>" + data[i].name + "</td>";
s += "<td>" + data[i]["introduce"] + "</td>";
s += "<td>" + data[i].stock + "</td>";
s += "<td>" + data[i].unit + "</td>";
s += "<td>" + data[i].price + "</td>";
s += "<td>" + data[i].discount + "</td>";
s+="<td class=\"delete\"><button οnclick=\"deleteInfo('"+ data[i].id + "
')\" ><i class=\"icon-trash bigger-120\"></i>下架</button></td>";
s += "</tr>";
} c
onsole.log(s);
$("#tbRecord>tbody").html(s);
},
});
});

4、商品下架
在这里插入图片描述
下架商品的ajax代码

function deleteInfo(obj) {
    
console.log(obj);
if (obj != null) {
    
$.ajax({
    
url:"delGoods",
//async: true,
type: "post",
//设置需要请求的参数类型
data: {
    "id": obj},
success: function (data) {
    
alert("删除成功!");
// 删除成功后刷新页面
window.location.reload();
},
error: function () {
    
alert("请求失败");
},
dataType: "text"
});
}
}

5、更新商品信息
更新商品信息与上架商品类型,都是从页面提交表单,通过servlet,更新数据库信息。注意:此时更新商品的时
候,页面输入的数字是元为单位
逻辑:提交表单之后,需要先通过id进行查询该商品是否存在,存在更新数据库,不存在更新失败。

6、购买商品
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7、浏览订单
浏览订单与浏览商品类似,也是通过ajax向服务器发送请求,服务器返回一个 json 字符串,客户端进行解析,将信
息插入到HTML页面上。
浏览订单主要是通过当前的用户id进行查询,当前ID对应的所有订单。
在这里插入图片描述

$(function() {
    
$.ajax({
    
url: "orderbrowse",
type:"get",
dataType: "json",
success: function(data){
    
console.log(data);
var s = "";
for (var i = 0; i < data.length; i++) {
    
s += "<tr >";
s += "<td>";//默认无序列表
s += "<li > 【订单号】:" + data[i].id+"</li>";
s += "<li > 【订单状态】:" + data[i].order_status+"</li>";
s += "<li > 【订单创建时间】:" + data[i].create_time+"</li>";
s += "<li > 【订单完成时间】:" + data[i].finish_time+"</li>";
s += "</td>";
s += "<td>";
s += "<ol>";
for (var j = 0; j < data[i].orderItemList.length; j++) {
    
s += "<li>" + data[i].orderItemList[j].goodsName +" "+
data[i].orderItemList[j].goodsNum
+ data[i].orderItemList[j].goodsUnit+" "+
data[i].orderItemList[j].goodsPrice * data[i].orderItemList[j].goodsNum+"元</li>";
} s
+= "</ol>";
s += "</td>";
s += "<td>";
s += "<li > 【总金额】:" + data[i].total_money+"元</li>";
s += "<li> 【优惠金额】:" + data[i].discount+"元</li>";
比特科技s += "<li> 【应支付金额】:" + data[i].actual_amount+"元</li>";
s += "<td>";
s += "</td>";
s += "</tr>";
} c
onsole.log(s);
$("#tbRecord>tbody").html(s);
}
});
});

项目总结
优点:界面简洁,使用简单。
扩展:可以增加购物车功能,界面更美观一些。

项目源码:https://github.com/fantasyer/CashDemo

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Antalander/article/details/108322570

智能推荐

【C】函数指针_November's chopin的博客-程序员资料

案例环境代码#include &lt;stdio.h&gt;int max(int x, int y){ return x &gt; y ? x : y;}int main(){ int (* p)(int ,int) = &amp; max; int a, b, c, d; printf("请输入三个整数:\n"); scanf("%...

良好性能和高质量视觉效果_圣空老宅的博客-程序员资料

译者:赵菁菁(轩语轩缘)  审校:李笑达(DDBC4747)对于任何追求UE4性能最佳、同时又想保持极高质量视觉效果的人来说,本文有一些可遵循的一般性建议和原则。 局限性为了性能,你通常受CPU时间(通常和游戏设置相关)和GPU时间限制(渲染场景花费的时间)。CPU创建由GPU渲染的场景会耗费一些时间。通常情况下,当你发现游戏的运行速度不像你想要的那么快时,第一步是找出

Xamarin.Android入门_低调丶林的博客-程序员资料

大家好,今天给大家介绍一下Xamarin.Android的整体开发环境。    首先,我在这里说下为啥写技术博客:最近遇到一个前辈,他已经干了七年了,算是个老手了,无意中看到他的博客,他也是从新手过来的,他写博客的初衷是希望记录自己学过的点点滴滴,并且跟他人分享自己所学的、与他人进行技术交流,从而学到更多的东西,我觉得很不错,所以我会坚持写博客,有学到新的东西就与大家分享,也欢迎大家可以一起探讨问题

2015总结_Surenon的博客-程序员资料

2015总结 1.真心学到了很多东西。每天朝9晚9+的,程序员最考验的是身体了。2.全栈是个不小而甘愿进入的坑。3.golang真心喜欢。开发守护进程,后端,后台非常开心。4.学会了和女孩子相处。(首先要有钱,或者多才多艺,兼得最好。当然,打代码速度快是不算艺术的,毕竟女程序猿太少了)5.不要过多的集中于业务逻辑,我是一个工程师...

《移动平台开发实践》第一周学习总结_weixin_30289831的博客-程序员资料

20169214 2016-2017-2《移动平台开发实践》第一周学习总结教学内容总结1.JAVA基础在开始编译和运行Java程序之前,需要下载和安装JDK,并且配置一些系统环境变量。总的来说,Java的安装可在三种操作系统平台上进行,Windows、Linux、Mac OS X,但无论哪种方式,都得事先进行工具包JDK的安装配置,然后进行测试,以检验是否配置正确。Java代码...

随便推点

mac中安装git并忽略.DS_Store_mac .gitignore 忽略ds__q2826621520的博客-程序员资料

一Homebrew安装git1.安装 Homebrew/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"2.安装gitbrew install git二xcode安装git1.在mac终端中直接输入git.提示是否安装开发者...

执行main方法时出现java.lang.SecurityException异常_live_and_learn_CC的博客-程序员资料

1.执行main方法时弹出 Error: A JNI error has occurred, please check your installation and try againe2.执行后控制台报的错误3.进入ClassLoader.java中,4.原因:在开始执行main方法时就已经加载了以java开头的包路径,所有类加载器在加载文件时会抛出异常5.解决方法:改包...

【opencv】goodFeaturesToTrack源码分析-2-Shi-Tomasi角点检测_Denny#的博客-程序员资料

本文章是【opencv】goodFeaturesToTrack源码分析-1的后续,主要描述Shi-Tomasi角点检测算法原理及opencv实现。1、算法原理Shi-Tomasi算法是Harris算法的改进,在Harris算法中,是根据协方差矩阵M的两个特征值的组合来判断是否角点。而在Shi-Tomasi算法中,是根据较小的特征值是否大于阈值来判断是否角点。 这个判断依据是:较小的特征值表示在该特

tensorflow源码例子mnist源码——mnist.py_修炼打怪的小乌龟的博客-程序员资料

# Copyright 2015 The TensorFlow Authors. All Rights Reserved.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# Y