说好的不熬夜呢???!!!! -- 超市项目

本来觉得还差一点点,结果15个小时了还没有弄完,说好的不熬夜的呢???!!!

一个破超市的项目,废了我这么长时间,搞什么飞机啊?!!!

喝了6罐 ’乐虎‘ 了,这是我的常态吗?想做一个不熬夜的程序员,真的这么难吗?

每一个模块都是那么的墨迹,到处报错,我觉得吧,我不是前台弱,是前台和中间那块就是servlet比较弱,jQuery好一点了,el表达式ajax,json,好难过的。

java到数据库这边是我最熟练的,而且也比较好写,主要是分层开发嘛,从下往上写呗,sql现在也不是那么的难了。主要就是servlet,我的痛!!!

小豆腐年前就让我写的,本打算看完视频再写,可是年后回来,又搞了框架,一拖再拖,现在是该还旧账的时候了,没办法,自己欠下的。上周身体确实不适,感觉没有那么多精力,总是累,我觉得我保养的还行啊,就是睡眠少了点。

还差两个模块呢,sl会员商城还没写呢,娜女士都写的差不多了吧,好气人啊!!!

==========================系统功能============================
登录 退出
用户管理
    修改密码
    添加用户
    修改用户
    删除用户
    查看用户
供应商管理
    添加供应商
    修改供应商
    删除供应商
    查看供应商
账单管理
    添加账单
    修改账单
    删除账单
    查看账单
==========================数据库设计============================
用户表:
    主键ID
    用户账号(用户编码)
    用户密码
    用户名
    性别(1 男 2 女)
    出生日期
    用户电话
    用户地址
    用户类型(1 系统管理员 2 经理 3 普通员工)
    创建时间
    创建者(userId)
    更新时间
    更新者(userId)
    
供应商表:
    主键ID
    供应商编码
    供应商名称
    供应商描述
    供应商联系人
    联系电话
    地址
    传真
    创建时间
    创建者(userId)
    更新时间
    更新者(userId)
    
账单表:
    主键ID
    账单编码
    商品名称
    商品描述
    商品单位
    商品数量
    总金额
    供应商(providerID)
    是否付款(1 未支付 2 已支付)
    创建时间
    创建者(userId)
    更新时间
    更新者(userId)
    
    decimal(20,2)
    
    12.668 12.67
    12.248 12.24
    
    BigDecimal 12.248 12.24 12.66
    
==========================系统框架搭建============================
(java开发环境/运行时环境)bildpath 要高于或者等于 Compliler(编译时环境)
修改字符集

MVC:
jsp
servlet
jdbc
mysql

事务:3张表 1 insert 2 update 3 detele

------------------------src-------------------------
pojo:数据实体(完成与数据库表的映射)
dao:数据访问接口(与数据库操作)
service:业务逻辑层(处理业务逻辑,调用dao接口)--- 事务控制是跟业务相关,只有复杂的业务才有事务控制
servlet:控制层 (control)

------------------------webroot-------------------------
jsp:数据展示(view)
js images css (静态资源文件)


======单例======:运行期间有且仅有一个实例
关键点:
1、一个类只有一个实例---最基本的---(只提供私有的构造器)
2、它必须自行创建这个实例---(定义了静态的该类的私有对象)
3、它必须自行向整个系统提供这个实例 -----(提供一个静态的公有的方法,返回创建或者获取本身的静态私有对象)

lazy loading 延迟加载
 以时间换空间
懒汉模式:(线程不安全--1、同步 2、双重校验锁)
比较懒,在类加载的时候,不创建实例,运行调用的时候创建。
类加载快,在运行时获取对象速度慢

 以空间换时间
饿汉模式:(线程安全)
类加载的时候,就完成了初始化。所以类加载慢,但是在运行时获取对象

静态内部类(保证了lazy loading的特性)


方法的重载体现了面向对象多态的思想

=================JDBC=================
1、service (try catch)
connection.setAutoCommit(false);
dao.add()...update()...delete()
connection.commit();
connection.rollback();
close(connection、nullnull);

2、dao(throws Exception)
executeUpdate()......
close(null、prepareStatement、resultSet)

3、BaseDao(操作数据库的基类)静态类
获取连接(connection)throws Exception
查询操作(sql、params、connection、prepareStatement、resultSet)
更新操作(sql、params、connection、prepareStatement)
关闭资源(connection、prepareStatement、resultSet)


====页面结构
css
html
js

===登录、注销、查询====


===用户管理----增加用户======
修改,查看,删除

修改,查看====根据ID 获取ID 获取user信息(getUserInfoById)
保存修改信息

dao service

=====修改密码=====

1、验证旧密码是否正确(输入的旧密码和当前用户的密码)--ajax
2、保存新密码(数据库)--form

====供应商管理=====
dao================================
//1 增加供应商
boolean add(Connection connection, Provider provider)throws Exception
//2 修改供应商
boolean modify(Connection connection, Provider provider)throws Exception;
//3 删除供应商
boolean deleteProviderById(Connection connection, String delId)throws Exception;
delete from smbms_provider where id=?

扩展:如果根据供应商类型进行批量删除的话
boolean deleteProviderByProType(Connection connection, String proType)throws Exception;
delete from smbms_provider where proType=?

//封装的删除方法
deleteProvider (Connection connection, Provider provider)
sql语句要进行拼接
StringBuffer sql= new StringBuffer();
sql.append("delete from smbms_provider");
if(!StringUtils.isNULLorEmpty(provider.getId())){
    sql.append(" where id=?");
}else if(!StringUtils.isNULLorEmpty(provider.getProType())){
    sql.append(" where proType=?");
}

如果并存的情况
if(!StringUtils.isNULLorEmpty(provider.getId())){
    sql.append(" where id=?");
}
if(!StringUtils.isNULLorEmpty(provider.getProType())){
    sql.append(" where proType=?");
}

。。。。。。。
userService.deleteProvider(Provider provider);
//根据ID删除
provider.setId("2")
//根据供应商类别删除
provider.setProType("3")

//4 获取供应商列表
List<Provider> getProviderList(Connection connection,String proName)throws Exception;
select * from smbms_provider where proName= like?

List<Provider> getProviderList(Connection connection,Provider provider)throws Exception;
select * from smbms_provider where proName= like? and...and...

原则:
凡是需要用户输入的查询都是模糊查询,凡是需要用户选择的查询都是精确查询(传到后台的是id)

//5 根据ID获取供应商详细信息
Provider getProviderById(Connection connection, String id)throws Exception;

====订单管理======
//增加订单
boolean add(Connection connection, Bill bill) throws Exception;
//修改订单
项目笔记

一定要搞完!!!!

原文地址:https://www.cnblogs.com/xtdxs/p/6687274.html