首页 > 分享 > 基于springboot宠物猫店管理系统的设计与实现

基于springboot宠物猫店管理系统的设计与实现

博主介绍:专注于Java vue  .net  php phython  小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
 

☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
文章底部 有源码下载获取地址

文章开始 献上系统美照

系统分析 可行性分析 法律可行性分析

开发软件有没有触犯法律,这涉及到软件或者系统能不能发布的问题。如果触犯了法律,就必将会受到法律的制裁。常见法律问题就是软件抄袭问题,若是抄袭别人软件,将会受到严厉惩罚。

技术可行性分析

软件产业经过多年的发展,现在已经达到了很大的规模,从事软件开发的专业人员不计其数,软件产业的重要性已经上升到了影响和推动国民经济发展的核心地位。本系统基于的架构,目前技术已经非常的成熟,是不存在技术上面难以实现的麻烦。

经济可行性分析

开发软件所需的时间、人力和物力成本,开发完成后的收益如何,从投资回报的角度软件所需功能在现有经济条件能不能实现等进行深入的考虑,都符合实际的要求。所以宠物猫店管理系统具有经济可行性和实用性,可以节约管理成本

功能需求分析

宠物猫店管理系统主要是为了更加地完善宠物猫店的情况,对用户的信息、猫猫用品、订单中心、会员中心、服务中心、服务分类、预约管理等提供了方便的机制。本系统有多类使用者,分别是管理员和用户注册。以下是从这两种用户的角度分别介绍本系统所要实现的功能。

用户:

注册:首先检查用户名和邮箱是否存在,如不存在即可进行注册,并将用户输入的密码进行MD5加密,注册成功后提示注册成功,并将用户信息保存到数据库中。

登录:使用宠物猫店管理系统前是需要用户登录个人账号。

宠物资讯:用户登录宠物猫店管理系统首页时,可以浏览宠物资讯信息,根据不同地宠物可以查看每个不同宠物饲养地方式等,还可以将自己感兴趣的资讯点赞以及加入收藏列表中。

会员中心:用户可以在系统中的宠物信息栏内搜索宠物信息,具体包括:封面图、标题、分类、标签等。

猫猫用品:用户可以浏览猫猫用品,可以自行搜索某样猫猫用品相关详情。具体功能需求如下:猫猫用品搜索:前台用户可以直接在前台输入框内输入关键词进行搜索,页面弹跳出对应猫猫用品信息。

服务中心:用户可以查看宠物服务信息表的宠物状态,可以根据宠物状态发起服务申请:包括填写活动标题、内容、要求、图片。

管理员:

用户管理:对用户进行管理,用户的注册,包括用户昵称、用户名、用户的宠物信息(宠物类别、宠物性别、年龄等)用户的账号信息:

猫猫用品:增加与猫猫用品相关的信息,对用品进行列表,列表信息包括:商品编号、商品名称、商品图片、商品价格、商品库存、商品规格、商品详情。

订单列表管理:

(1)按购买订单编号查询购买订单;

(2)查看购买订单详情;

(3)支付情况;

非功能需求分析

系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。

用例分析

1.普通用户主要使用宠物猫店管理系统,下图所示为普通用户的用例               

图3-1 普通用户用例图

2.管理员主要负责用户管理、猫猫用品、订单中心、会员中心、服务中心、服务分类、预约管理,下图所示描述管理员的用例图。

图3-2 管理员用例图

业务流程分析

系统业务流程图如下所示。

图3-3 系统业务流程图

业务流程图(TFD)通过一些特定的符号描述业务的处理过程,它重点强调业务过程中每一项处理活动和具体业务部门的关系,选择部分模块进行具体描述。重点对本系统整体业务中最为主要的宠物交易及订单业务进行描述,用户进入宠物猫店管理系统后进行各种模块信息的浏览,选择想要购买的宠物添加到购买订单,对宠物饲料下单,用户确认购买、填写订单信息,另外,管理人员进入后端管理,以执行该订单信息控制模块的相关管理方法,并在解决后向客户提供反馈机制。

数据流程分析

如下为系统的顶层数据流图,外部实体有用户和管理员,分别对系统输入数据,从而得到要输出的数据。

图3-4系统顶层数据流图

如下图所示为系统底层数据流图。

图3-5系统底层数据流图

宠物猫店管理系统底层数据流图主要描述系统底层模块的数据流、数据载体、数据处理、外部实体的具体交互。本系统就是管理员和普通用户在用户管理、宠物管理、疫苗药物管理、订单列表管理、下单管理、会员信息管理等模块上的数据交互。

系统设计 系统架构设计

本系统架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。

图4-1系统架构图

系统功能结构

为了将系统从“做什么”落实到“怎么做”,基于系统设计原则,对系统功能进行更适合编码实现的功能划分。根据上图的系统架构设计,整理出规范的系统功能结构图,为系统的实现编码做好准备。

如下图所示为系统功能结构图。

图4-2系统功能结构图

功能模块设计

用户管理针对所有用户和管理员。未注册用户点击注册,进入注册页面填写新用户信息,得到自定义生成账号后,注册完成。未注册用户注册的活动图如下图所示。

图4-3未注册用户注册活动图

用户可进行登录使用更多功能,首先进入用户登录界面,输入用户账号和密码,后台对账号和密码信息进行核对验证,验证成功则页面直接显示登录用户昵称代表登录成功,否则返回用户登录界面。用户登录活动图如下图。

图4-4用户登录活动图

用户登录后,进入功能页面,可对自己的信息进行管理,包括个人信息,公告栏、宠物资讯、猫猫用品、会员中心、服务中心。用户使用功能活动图如下图所示。

图4-5用户使用功能活动图

用户功能界面可对自己的密码进行修改。进入修改密码界面后核对当前密码,核对成功后填写新密码。修改密码活动图如下图所示。

图4-6修改密码活动图

数据库设计

宠物猫店管理系统采用的数据库是MySQL,该部分将根据系统需求和设计,设计合理的数据库。本系统考虑到之后系统的扩展集群,数据库将不使用外键。此外,不用外键时数据管理也较为简单,操作更加方便,性能更高。

E-R图

E-R图,更加直观的告诉开发人员系统的各个数据的属性,各个数据之间的联系,各个数据的类型。能通过该模型更直观地了解数据库的设计,并根据对其逐渐改善。

本系统图设计,如下图所示。

图4-7系统E-R图

表结构设计

本系统根据第三范式的思想设计数据库,减少最大程度的冗余,总共建立有多个表,用户注册表、管理员表、招聘员工表、宠物信息表、遗弃宠物表、活动中心表、会员信息表、疫苗药物表、志愿者申请表等。

表结构如下所示。

user_registration表:

名称

类型

长度

不是null

主键

注释

user_registration_id

int

11

用户注册ID

user_account

varchar

64

用户账号

gender

varchar

64

性别

age

varchar

64

年龄

membership_level

varchar

64

会员等级

member_discount

varchar

64

会员折扣

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

service_classification表:

名称

类型

长度

不是null

主键

注释

service_classification_id

int

11

服务分类ID

service_type

varchar

64

服务类型

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

service_centre表:

名称

类型

长度

不是null

主键

注释

service_centre_id

int

11

服务中心ID

service_type

varchar

64

服务类型

single_price

varchar

64

单次价格

shop_address

varchar

64

 店铺地址

contacts

varchar

64

联系人

contact_number

varchar

64

联系电话

remarks

text

0

备注

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

order_center表:

名称

类型

长度

不是null

主键

注释

order_center_id

int

11

订单中心ID

order_number

varchar

64

订单编号

commodity_number

varchar

64

商品编号

trade_name

varchar

64

商品名称

commodity_price

varchar

64

商品价格

membership_level

varchar

64

会员等级

member_discount

varchar

64

会员折扣

purchase_quantity

int

11

购买数量

total_price

varchar

64

总价格

user_account

int

11

用户账号

order_date_

date

0

下单日期

examine_state

varchar

16

审核状态

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

membership_center表:

名称

类型

长度

不是null

主键

注释

membership_center_id

int

11

会员中心ID

member_number

varchar

64

会员编号

member_nickname

varchar

64

会员昵称

membership_level

varchar

64

会员等级

member_discount

varchar

64

会员折扣

user_account

int

11

用户账号

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

cat_products表:

名称

类型

长度

不是null

主键

注释

cat_products_id

int

11

猫猫用品ID

commodity_number

varchar

64

商品编号

trade_name

varchar

64

商品名称

product_picture

varchar

255

商品图片

commodity_price

varchar

64

商品价格

merchandise_inventory

varchar

64

商品库存

commodity_specifications

varchar

64

商品规格

product_details

text

0

商品详情

hits

int

11

点击数

praise_len

int

11

点赞数

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

booking_management表:

名称

类型

长度

不是null

主键

注释

booking_management_id

int

11

预约管理ID

service_type

varchar

64

服务类型

shop_address

varchar

64

 店铺地址

contacts

varchar

64

联系人

contact_number

varchar

64

联系电话

single_price

varchar

64

单次价格

service_times

int

11

服务次数

total_price

varchar

64

总价格

time_of_appointment

date

0

预约时间

user_account

int

11

用户账号

examine_state

varchar

16

审核状态

pay_state

varchar

16

支付状态

pay_type

varchar

16

支付类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

系统实现 开发工具

系统中应用的开发工具总结如下表所示。

表5-1开发工具

名称

工具

版本

操作系统

IDE(Integrated Development Environment)

Windows

Eclipse

7/8/10

2017

服务器

Tomcat

9.10.7

JDK(Java Development Kit)

JDK

Java SE 8.0 (1.8.0)

数据库

浏览器

界面工具

MySQL

谷歌

Photoshop

5.7

6.0

2016

注册模块

未注册用户在用户注册界面uerRegister.jsp,输入新用户信息,点击注册后,新用户信息由界面传入控制层userAction,调用addUser(user)方法,通过userDAOImp向数据库用户表插入用户信息,由于用户账号是自动生成的,若成功则反馈注册成功,并提示新用户的用户账号;若失败则回到登录界面,并显示登录失败。

注册界面如下所示。

图5-1注册界面

用户注册关键代码如下所示。

/**

     * 注册

     * @param user

     * @return

     */

    @PostMapping("register")

    public Map<String, Object> signUp(@RequestBody User user) {

        // 查询用户

        Map<String, String> query = new HashMap<>();

        query.put("username",user.getUsername());

        List list = service.select(query, new HashMap<>()).getResultList();

        if (list.size()>0){

            return error(30000, "用户已存在");

        }

        user.setUserId(null);

        user.setPassword(service.encryption(user.getPassword()));

        service.save(user);

        return success(1);

}

/**

     * 用户ID:[0,8388607]用户获取其他与用户相关的数据

     */

    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "user_id")

    private Integer userId;

    /**

     * 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

     */

    @Basic

    @Column(name = "state")

    private Integer state;

    /**

     * 所在用户组:[0,32767]决定用户身份和权限

     */

    @Basic

    @Column(name = "user_group")

    private String userGroup;

    /**

     * 上次登录时间:

     */

    @Basic

    @Column(name = "login_time")

    private Timestamp loginTime;

    /**

     * 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "phone")

    private String phone;

    /**

     * 手机认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "phone_state")

    private Integer phoneState;

    /**

     * 用户名:[0,16]用户登录时所用的账户名称

     */

    @Basic

    @Column(name = "username")

    private String username;

    /**

     * 昵称:[0,16]

     */

    @Basic

    @Column(name = "nickname")

    private String nickname;

    /**

     * 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

     */

    @Basic

    @Column(name = "password")

    private String password;

    /**

     * 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

     */

    @Basic

    @Column(name = "email")

    private String email;

    /**

     * 邮箱认证:[0,1](0未认证|1审核中|2已认证)

     */

    @Basic

    @Column(name = "email_state")

    private Integer emailState;

    /**

     * 头像地址:[0,255]

     */

    @Basic

    @Column(name = "avatar")

    private String avatar;

    /**

     * 创建时间:

     */

    @Basic

    @Column(name = "create_time")

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

    private Timestamp createTime;

    @Basic

    @Transient

    private String code;

}

登录/注销模块

用户在首页点击登录,进入用户登录界面uerLogin.jsp,输入用户账号和密码,点击登录,用户账号和密码信息由界面传入控制层userAction,调用userLogin(user)方法,通过userDAOImp向数据库用户表搜索该用户账号与密码,将最终结果反馈到前端。若成功则回到首页;用户成功登录,若失败则回到登录界面,并显示登录失败。

用户点击注销,清空浏览器session值,然后返回登录页或者首页。

登录界面如下所示。

图5-2登录界面

登录界面关键代码如下所示。

/**

     * 登录

     * @param data

     * @param httpServletRequest

     * @return

     */

    @PostMapping("login")

    public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

        log.info("[执行登录接口]");

        String username = data.get("username");

        String email = data.get("email");

        String phone = data.get("phone");

        String password = data.get("password");

        List resultList = null;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }else{

            return error(30000, "账号或密码不能为空");

        }

        if (resultList == null || password == null) {

            return error(30000, "账号或密码不能为空");

        }

        //判断是否有这个用户

        if (resultList.size()<=0){

            return error(30000,"用户不存在");

        }

        User byUsername = (User) resultList.get(0);

        Map<String, String> groupMap = new HashMap<>();

        groupMap.put("name",byUsername.getUserGroup());

        List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            if (res==null){

                return error(30000,"用户不存在");

            }

            if (!res.equals("已通过")){

                return error(30000,"该用户审核未通过");

            }

        }

        //查询用户状态

        if (byUsername.getState()!=1){

            return error(30000,"用户非可用状态,不能登录");

        }

        String md5password = service.encryption(password);

        if (byUsername.getPassword().equals(md5password)) {

            // 存储Token到数据库

            AccessToken accessToken = new AccessToken();

            accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

            accessToken.setUser_id(byUsername.getUserId());

            tokenService.save(accessToken);

            // 返回用户信息

            JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

            user.put("token", accessToken.getToken());

            JSONObject ret = new JSONObject();

            ret.put("obj",user);

            return success(ret);

        } else {

            return error(30000, "账号或密码不正确");

        }

}

用户模块 个人资料模块

登录用户在首页点击进入用户中心userCenter.jsp,再点击修改个人信息按钮进入userChangeInfo.jsp界面,系统根据session中存储的目前登录的用户的账号,向控制层userAction发送请求,搜索当前用户信息,userAction向userDAOImp调用queryByUserId(user),向数据库的用户表搜索当前用户信息并将用户信息以对象的形式层层返回到userChangeInfo.jsp界面,显示出当前用户的个人信息。

若用户要对个人信息进行修改,则通过修改当前信息之后点击确认,向控制层userAction发送更改后的用户信息,调用changeUser(user)方法,通过userDAOImp向数据库用户表更新用户信息,若成功则反馈注册成功,则返回的userChangeInfo.jsp界面被更改成功;若失败则显示修改失败。

会员中心模块

用户可以在首页进行会员中心搜索,在搜索框输入关键词后,前台发起请求,将传递的keyword参数信息从前台传递ShangpinController类里,匹配到list()方法,list()方法调用ShangpinServiceImpl类的getShangpinByKeywordCategory()方法,如果没有该关键词,则返回空的结果集。

会员中心界面如下。

图5-3会员中心界面

猫猫用品模块

用户在登录状态下浏览猫猫用品时可将该猫猫用品加入宠物购买订单,从session中取出该用户的信息,点击加入猫猫用品后前台发起请求,将对应的商品数量shuliang、id参数信息从前台传递GoumaiController类里,匹配到add()方法,add()方法调用GoumaiServiceImpl类的add()方法。

猫猫用品界面如下所示。

图5-4猫猫用品界面

服务中心模块

用户在登录状态下浏览服务中心信息时可将该服务中心信息加入收藏记录,从session中取出该用户的信息,点击加入服务中心信息收藏前台发起请求,将对应的服务中心信息shichang、id参数信息从前台传递XiadanController类里,匹配到add()方法,add()方法调用XiadanServiceImpl类的add()方法。

服务中心信息界面如下所示。

图5-5服务中心界面

管理员模块 会员中心列表模块

管理员在后台管理界面点击到所有会员中心列表界面shangpinxinxi_list.jsp,向控制层shangpinxinxiAction发送请求,搜索当前所有会员信息,shangpinxinxiAction向shangpinxinxiDAOImp调用搜索全部会员中心的请求,向数据库的会员中心表搜索当前所有会员并将留言信息以对象的形式层层返回到shangpinxinxi_list.jsp界面,显示出当前所有会员中心信息。若要对会员中心列表信息进行修改和删除,则分别进入shangpinxinxi_updt.jsp或shangpinxinxi_delete.jsp,通过shangpinxinxiAction向shangpinxinxiDAOImp调用对应的修改或删除方法,向数据库的会员中心表做相应的持久层操作。

会员中心列表界面如下所示。

图5-7会员中心列表界面

宠物资讯管理模块

管理员在后台管理界面点击到所有宠物资讯界面chongwufuwuxinxi_list.jsp,向控制层chongwufuwuxinxiAction发送请求,搜索当前所有宠物资讯,chongwufuwuxinxiAction向chongwufuwuxinxiDAOImp调用搜索全部宠物资讯的请求,向数据库的宠物资讯表搜索当前所有宠物资讯并将宠物资讯以对象的形式层层返回到chongwufuwuxinxi_list.jsp界面,显示出当前所有宠物资讯列表。

宠物资讯列表管理界面如下所示。

图5-8宠物资讯列表管理界面

订单中心管理模块

根据需求,需要对订单中心进行添加、删除或修改详情信息。删除或修改订单时,系统根据订单中心的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询订单状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。

添加订单中心时,会给出数据填写的页面,该页面根据填写好的订单同样会事先发送Ajax请求查询订单号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。

订单中心页面设计效果如下图所示。

图5-9订单中心界面图

订单中心管理的关键代码如下。

  @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){

        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{

            br = reader;

            String str;

            while ((str = br.readLine()) != null){

                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){

            e.printStackTrace();

        }finally{

            if (null != br){

                try{

                    br.close();

                }catch (IOException e){

                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

源码 文档下载获取地址

(springboot+myssql)宠物猫店管理系统.zip资源-CSDN文库 (含文档)


大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

相关知识

(附源码)基于Spring Boot的宠物猫店管理系统的设计与实现 毕业设计140909
基于JavaSpringBoot+Vue的宠物猫店管理系统设计与实现
【开题报告】基于SpringBoot的宠物猫用品商城的设计与实现
【开题报告】基于SpringBoot的宠物寄存商店管理系统的设计与实现
基于Spring Boot的宠物猫店管理系统的设计与实现毕业设计源码140909
基于SpringBoot的宠物管理系统的设计与实现
基于springboot宠物猫店管理系统的设计与实现
基于JavaSpringBoot+vue宠物猫店管理系统设计实现
【开题报告】基于SpringBoot的宠物电商社区系统的设计与实现
【2024】基于springboot的宠物领养管理系统设计与实现研究思路

网址: 基于springboot宠物猫店管理系统的设计与实现 https://m.mcbbbk.com/newsview299856.html

所属分类:萌宠日常
上一篇: 基于Spring Boot的宠物
下一篇: 宠物猫(源码+开题)