博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1500+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 翰文编程CSDN博客 翰文编程-CSDN博客
文末下方有源码获取地址
4.2系统功能结构
系统的功能结构是系统实现的框架,本系统的主要结构为管理员和用户。管理员的功能为个人中心管理、公告信息管理、分类管理、鲜花管理、注册用户管理、订单管理、评价管理等。用户的功能为在线注册与登录、公告信息浏览、鲜花信息浏览、个人资料信息管理、我的购物车管理、我的订单管理、在线交流和鲜花评价。本基于Javaweb的网上花店系统用户功能结构图如下图4-1所示:
图4-1基于Javaweb的网上花店系统用户功能结构图
基于Javaweb的网上花店系统的用户功能结构图如下图4-2所示:
图4-2基于Javaweb的网上花店系统管理员功能结构图
4.2.1 数据处理与安全设计
数据的安全设计主要考虑的系统的程序和数据库的处理和安全性,数据处理的时候都设置了相应的限制,必须输入合法的数据才能进行正常操作,否则系统会有相应的提示。根据不同的安全指标采用的是不同的安全方法,系统需要有明确的权限划分,有用户权限和管理员权限,用户只能操作用户的部分,不能登录管理员权限,其次是用户之间不能相互冲突,用户名不能有重复的,其次用户登录账号密码的时候,密码需要加密不可见,必须通过正规的登录途径才能登录系统,而且用户退出系统要删除相关的标记。
4.2.2特色功能设计
本系统的特色功能是在管理员操作界面加入了可视化统计,在鲜花管理功能和销售界面都加入图形统计,方便管理员更直观的了解和分析商品信息和销售信息。
4.3数据库设计
数据库设计在系统设计中占有重大比例,数据库的设计包括ER图设计和数据库表设计。
4.3.1ER图设计
根据本系统的特点,本系统设计的主要实体包括管理员信息、用户信息、鲜花信息、订单信息、公告信息信息和评价信息。
- 管理员ER图包括的属性有管理员的编号、用户名和密码。管理员ER图如下图4-2所示:
图4-2管理员实体的ER图
- 鲜花信息包含的属性为鲜花的详细描述,有鲜花编号、鲜花名称等。鲜花信息ER图如下图4-3所示:
图4-3鲜花信息实体ER图
(3)注册用户信息的属性包括用户的个人资料,有姓名、性别、电话等。注册用户信息实体ER图如下图4-4所示:
图4-4注册用户实体ER图
(4)订单实体的属性有订单时间、订单编号、订单人等。订单实体ER图如下图4-5所示:
图4-5订单信息实体ER图
(5)评价信息实体的属性有评价人、评价内容、评价时间等。评价信息实体的ER图如下图4-6所示:
图4-6评价信息实体ER图
(6)公告信息信息实体的属性有标题、内容、发布时间。公告信息实体ER图如下图4-7所示:
图4-7公告信息实体ER图
(7)本基于Javaweb的网上花店系统的整体实体关系图如下图4-8所示:
图4-8系统关系ER图
4.3.2数据库表设计
根据数据ER图的设计,本系统的数据库表有管理员信息表、用户信息表、鲜花信息表、评价信息表等。本系统的数据库表如下图4-1至4-15所示:
表4.1:address
表4.2:cart
表4.3:config
表4.4:dictionary
表4.5:forum
表4.6:gonggao
表4.7:token
表4.8:users
表4.9:xianhua
表4.10:xianhua_collection
表4.11:xianhua_commentback
表4.12:xianhua_liuyan
表4.13:xianhua_order
表4.14:yonghu
5.1用户注册功能的界面实现
用户注册功能设计的目的是实现用户的操作。系统中想要进行操作就需要先成为注册用户,游客只能浏览信息。用户注册功能界面中设置了用户的资料字段,本界面的数据和用户信息表相连,当游客在本界面里注册成功,所填写的资料会保存到用户信息表中。用户注册功能的运行界面如下图5-1所示:
图5-1用户注册功能的运行界面
5.2登录功能的界面实现
用户注册成功后,需要登录。登录界面设计的目的是保证当前的使用角色等级。管理员同样需要登录后才可以进行操作。用户登录和管理员登录的界面分为两个,在登录时只需要填写用户账号和密码就可以实现。用户登录的时候需要输入注册时候的账号密码,然后系统会自动的跟数据库存储好的数据进行信息比对,如果比对成功就可以成功登录,如果比对错误,那么会跳出来相应的错误提示,用户登录的运行界面如下图5-2所示:
图5-2用户登录的运行界面
管理员登录的界面中包含的元素有系统题目、输入框、登录按钮。管理员登录的条件是需要账号、密码、身份。管理员登录的运行界面如下图5-3所示:
图5-3管理员登录运行界面
5.3管理员功能的设计实现
5.3.1注册用户管理功能的实现界面
用户注册后的资料管理员可以在注册用户管理功能里看到,本功能设计的目的是审核注册用户的资料,当发现不当的使用用户可以删除其账号。当删除注册用户信息后相对应的用户信息表里的信息也会随着删除掉。注册用户管理功能的运行界面如下图5-4所示:
图5-4注册用户管理功能的运行界面
5.3.2 会员等级管理功能的实现界面
本功能可以实现对会员的等级进行管理,不同的会员等级可以享受不同的优惠折扣。会员等级管理功能的运行界面如下图5-5所示:
图5-5会员等级管理功能的运行界面
5.3.3公告信息管理功能的实现界面
当管理员添加、编辑公告信息后,数据库表中的供应商信息表也会发生改变。供公告信息管理功能的运行界面如下图5-6所示:
图5-6公告信息管理功能的运行界面
5.3.4 鲜花分类管理功能的实现界面
本功能可以管理鲜花的分类,实现鲜花的条理管理。分类管理功能的运行界面如下图5-7所示:
图5-7分类管理运行界面
5.3.5 订单管理功能的实现界面
用户下订单后,管理员都可以在本功能里收到。当审核订单无误后可以进行下一步操作。然后可以安排发货,输入订单号。订单管理功能的运行界面如下图5-8所示:
图5-8订单管理功能的运行界面
5.3.6 鲜花信息管理功能的界面实现
鲜花信息由管理员进行更新,在发布鲜花信息时可以显示发布时间。鲜花信息管理的运行界面如下图5-9所示:
图5-19鲜花信息管理功能的运行界面
5.3.7论坛管理功能的界面实现
管理员可以查看论坛信息,然后可以进行回复。实现界面如下图5-10所示:
图5-10论坛管理功能的实现界面
5.4用户角色功能的界面实现
5.4.1鲜花浏览功能的界面实现
用户的功能主要展示在前台,在前台可以浏览所有分类的鲜花。鲜花详情中主要展示鲜花的图片、价格、标题。鲜花信息浏览功能的运行界面如下图5-11所示:
图5-11浏览鲜花运行界面
主要代码
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody XianhuaEntity xianhua, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,xianhua:{}",this.getClass().getName(),xianhua.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
Wrapper<XianhuaEntity> queryWrapper = new EntityWrapper<XianhuaEntity>()
.eq("xianhua_name", xianhua.getXianhuaName())
.eq("xianhua_types", xianhua.getXianhuaTypes())
.eq("xianhua_kucun_number", xianhua.getXianhuaKucunNumber())
.eq("xianhua_price", xianhua.getXianhuaPrice())
.eq("xianhua_clicknum", xianhua.getXianhuaClicknum())
.eq("shangxia_types", xianhua.getShangxiaTypes())
.eq("xianhua_delete", xianhua.getXianhuaDelete())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
XianhuaEntity xianhuaEntity = xianhuaService.selectOne(queryWrapper);
if(xianhuaEntity==null){
xianhua.setXianhuaClicknum(1);
xianhua.setShangxiaTypes(1);
xianhua.setXianhuaDelete(1);
xianhua.setCreateTime(new Date());
xianhuaService.insert(xianhua);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody XianhuaEntity xianhua, HttpServletRequest request){
logger.debug("update方法:,,Controller:{},,xianhua:{}",this.getClass().getName(),xianhua.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
//根据字段查询是否有相同数据
Wrapper<XianhuaEntity> queryWrapper = new EntityWrapper<XianhuaEntity>()
.notIn("id",xianhua.getId())
.andNew()
.eq("xianhua_name", xianhua.getXianhuaName())
.eq("xianhua_types", xianhua.getXianhuaTypes())
.eq("xianhua_kucun_number", xianhua.getXianhuaKucunNumber())
.eq("xianhua_price", xianhua.getXianhuaPrice())
.eq("xianhua_clicknum", xianhua.getXianhuaClicknum())
.eq("shangxia_types", xianhua.getShangxiaTypes())
.eq("xianhua_delete", xianhua.getXianhuaDelete())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
XianhuaEntity xianhuaEntity = xianhuaService.selectOne(queryWrapper);
if("".equals(xianhua.getXianhuaPhoto()) || "null".equals(xianhua.getXianhuaPhoto())){
xianhua.setXianhuaPhoto(null);
}
if(xianhuaEntity==null){
xianhuaService.updateById(xianhua);//根据id更新
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
ArrayList<XianhuaEntity> list = new ArrayList<>();
for(Integer id:ids){
XianhuaEntity xianhuaEntity = new XianhuaEntity();
xianhuaEntity.setId(id);
xianhuaEntity.setXianhuaDelete(2);
list.add(xianhuaEntity);
}
if(list != null && list.size() >0){
xianhuaService.updateBatchById(list);
}
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
try {
List<XianhuaEntity> xianhuaList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
XianhuaEntity xianhuaEntity = new XianhuaEntity();
// xianhuaEntity.setXianhuaName(data.get(0)); //鲜花名称 要改的
// xianhuaEntity.setXianhuaPhoto("");//照片
// xianhuaEntity.setXianhuaTypes(Integer.valueOf(data.get(0))); //鲜花类型 要改的
// xianhuaEntity.setXianhuaKucunNumber(Integer.valueOf(data.get(0))); //鲜花库存 要改的
// xianhuaEntity.setXianhuaPrice(Integer.valueOf(data.get(0))); //购买获得积分 要改的
// xianhuaEntity.setXianhuaOldMoney(data.get(0)); //鲜花原价 要改的
// xianhuaEntity.setXianhuaNewMoney(data.get(0)); //现价 要改的
// xianhuaEntity.setXianhuaClicknum(Integer.valueOf(data.get(0))); //点击次数 要改的
// xianhuaEntity.setShangxiaTypes(Integer.valueOf(data.get(0))); //是否上架 要改的
// xianhuaEntity.setXianhuaDelete(1);//逻辑删除字段
// xianhuaEntity.setXianhuaContent("");//照片
// xianhuaEntity.setCreateTime(date);//时间
xianhuaList.add(xianhuaEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
xianhuaService.insertBatch(xianhuaList);
return R.ok();
}
}
}
}catch (Exception e){
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
// 没有指定排序字段就默认id倒序
if(StringUtil.isEmpty(String.valueOf(params.get("orderBy")))){
params.put("orderBy","id");
}
PageUtils page = xianhuaService.queryPage(params);
//字典表数据转换
List<XianhuaView> list =(List<XianhuaView>)page.getList();
for(XianhuaView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
XianhuaEntity xianhua = xianhuaService.selectById(id);
if(xianhua !=null){
//点击数量加1
xianhua.setXianhuaClicknum(xianhua.getXianhuaClicknum()+1);
xianhuaService.updateById(xianhua);
//entity转view
XianhuaView view = new XianhuaView();
BeanUtils.copyProperties( xianhua , view );//把实体数据重构到view中
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
5.4.2提交订单功能的实现界面
选择鲜花点击购买可以跳转到提交订单界面,在本界面里需要填写收货地址。提交订单功能的运行界面如下图5-12所示:
图5-12用户提交订单的运行界面
5.4.3订单管理功能的实现界面
用户在提交订单后可以在个人后台里看到订单后的订单信息,可以进行一定的修改。订单管理功能的运行界面如下图5-13所示:
图5-13订单管理功能的运行界面
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者