基于SSM架构的宠物救助管理系统的设计与实现
一、 需求概述
许多宠物救助站的信息管理仍然采用传统的人工管理方式。在这种管理模式下,进行各种信息管理工作(例如信息审核校对、数据统计和实时查询等)需要一些必要的人工操作程序步骤,如人工制表、人工信息录入、人工校对和人工查询等。然而,随着领养信息的不断增加和更新,宠物救助站工作人员的工作量将会越来越大,因此传统的信息管理方式已经无法满足现代科学管理体系的需求。
二、 详细设计
1、 数据库设计(和概要设计中的各模块信息对应上)
▲E-R图设计
在进行数据库设计前,需要明确宠物领养信息管理系统中有哪些实体对象,根据实体对象之间的关联进行数据库设计。根据需求分析可知主要实体有:用户、领养、宠物、公告,对应设计E-R图具体如下。
(1)用户E-R图如图所示。

用户E-R图
(2)领养信息E-R图如图所示。
领养信息E-R图
(3)宠物E-R图如图所示。
宠物E-R图
(4)公告E-R图如图所示。
公告E-R图
▲表结构设计
根据E-R图设计数据表,然后可以根据表结构编写SQL语句进行建表或者使用Navicat等数据库可视化软件进行建表。
(1) 用户表(t_members)主要用来维护用户相关信息,表结构如表1所示。
表1用户表结构
|
序号
|
字段名
|
数据类型
|
主键
|
长度
|
说明
|
|
1
|
id
|
bigint
|
是
|
20
|
主键
|
|
2
|
username
|
varchar
|
否
|
50
|
用户名
|
|
3
|
password
|
varchar
|
否
|
50
|
密码
|
|
4
|
real_name
|
varchar
|
否
|
50
|
姓名
|
|
5
|
user_sex
|
varchar
|
否
|
50
|
性别
|
|
6
|
user_phone
|
varchar
|
否
|
50
|
手机
|
|
7
|
user_text
|
varchar
|
否
|
50
|
备注
|
|
8
|
user_type
|
varchar
|
否
|
50
|
类型
|
(2)领养信息表(t_linyang)主要用来维护和领养相关的信息,表结构如表12所示。
表2领养信息表设计
(2) 宠物表(t_pet)主要主要用来维护宠物相关的信息,表结构如表3所示。
3宠物表结构
(4) 公告表(t_notice)主要用户来维护公告相关的信息,表结构如表4所示。
表4公告表结构
三、 系统实现
1、注册登录模块
▲数据访问层设计
用于实现和用户相关的数据库交互操作,主要是创建UserMapper接口,在该接口中定义6各方法,实现添加会员、更新会员、删除会员、按会员号查找会员、按会员名查找会员及查找所欲会员的功能。
public interface MemberMapper {
@Insert("INSERT INTO members VALUES(#{id},#{username},#{password}," +
"#{email},#{telephone})")
public int save(Member member); // 添加会员
@Delete("DELETE FROM members WHERE id=#{id}")
public int delete(int id); // 删除会员
@Update("UPDATE members SET username=#{username},password=#{password}," +
"email=#{email},telephone=#{telephone} WHERE id=#{id}")
public int update(Member member); // 更新会员
@Select("SELECT * FROM members WHERE id=#{id}")
public Member findById(int id); // 按id查找会员
@Select("SELECT * FROM members WHERE username=#{username}")
public Member findByName(String username); // 按姓名查找会员
@Select("SELECT * FROM members")
public List<Member> findAll(); // 查找全部会员
}
▲业务逻辑层设计
业务逻辑层的设计包括两部分,一是创建业务逻辑组件接口MemberService;二是创建业务逻辑组件实现类MemberServiceImpl。
业务逻辑组件接口:
public interface MemberService {
public int save(Member member); // 添加会员
public int update(Member member); // 更新会员
public int delete(int id); // 删除会员
public Member findById(int id); // 按id查找会员
public Member findByName(String username, String password); // 按姓名查找会员
public List<Member> findAll(); // 查找全部会员
}
业务逻辑组件实现类:
@Service
@Transactional
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberMapper memberMapper;
// 添加会员
@Override
public int save(Member member) {
// 如果表中不包含该会员,则添加该会员
if (memberMapper.findById(member.getId()) == null)
return memberMapper.save(member);
else
return 0;
}
// 更新会员
@Override
public int update(Member member) {
// 如果表中存在该会员,则更新该会员
if (memberMapper.findById(member.getId()) != null)
return memberMapper.update(member);
else
return 0;
}
// 删除会员
@Override
public int delete(int id) {
// 如果表中存在该会员,则删除该会员
if (memberMapper.findById(id) != null)
return memberMapper.delete(id);
else
return 0;
}
// 按id查找会员
@Override
public Member findById(int id) {
return memberMapper.findById(id);
}
// 查找全部会员
public List<Member> findAll() {
return memberMapper.findAll();
}
public Member findByName(String username, String password) {
Member member = memberMapper.findByName(username);
if (member != null && member.getPassword().equals(password)) {
return member;
}
return null;
}
}
▲控制器的开发
创建控制器MemberController
@Controller
public class MemberController {
private static final Log logger = LogFactory.getLog(MemberController.class);
@Autowired
private MemberService memberService;
// 显示注册表单
@RequestMapping(value = "/member-register", method = RequestMethod.GET)
public ModelAndView register(Model model) {
logger.info("register called");
return new ModelAndView("memberForm", "command", new Member());
}
// 添加会员
@RequestMapping(value = "/save-member")
public String saveMember(@ModelAttribute Member member, Model model) {
logger.info("save member called");
int n = memberService.save(member);
if (n == 1) {
List<Member> members = memberService.findAll();
model.addAttribute("memberList", members);
return "memberList";
} else {
return "error";
}
}
// 显示登录表单
@RequestMapping(value = "/member-login", method = RequestMethod.GET)
public ModelAndView login(Model model) {
logger.info("login called");
return new ModelAndView("memberLogin", "command", new Member());
}
// 实现会员登录
@RequestMapping(value = "/member-login", method = RequestMethod.POST)
public String memberLogin(String username, String password, Model model) {
logger.info("login member called");
Member member = memberService.findByName(username, password);
if (member != null) {
model.addAttribute("member", member);
return "welcome";
} else {
return "error";
}
}
// 查找所有会员信息
@RequestMapping(value = "/find-all-member")
public String findAllMember(Model model) {
logger.info("find all member called");
List<Member> members = memberService.findAll();
model.addAttribute("memberList", members);
return "memberList";
}
// 按编号查找会员
@RequestMapping(value = "/find-member")
public String findMemberById(Integer id, Model model) {
logger.info("findMember called");
Member member = memberService.findById(id);
model.addAttribute("member", member);
return "member";
}
// 删除会员
@RequestMapping(value = "/delete-member/{id}")
public String deleteMember(@PathVariable Integer id, Model model) {
logger.info("delete member called");
int n = memberService.delete(id);
List<Member> members = memberService.findAll();
model.addAttribute("memberList", members);
return "memberList";
}
// 修改会员
@RequestMapping(value = "/edit-member/{id}")
public String editMember(@PathVariable Integer id, Model model) {
logger.info("edit member called");
Member member = memberService.findById(id);
model.addAttribute("member", member);
return "memberEditForm";
}
// 更新会员
@RequestMapping(value = "/update-member")
public String updateMember(@ModelAttribute Member member, Model model) {
logger.info("update member called");
int n = memberService.update(member);
List<Member> members = memberService.findAll();
model.addAttribute("memberList", members);
return "memberList";
}
}
四、 项目实现
(1)注册登录模块
通过宠物救助信息管理系统的注册登录模块,用户可以创建自己的账户,然后使用该账户登录系统,在系统中进行各种操作,例如浏览、查询、修改等。同时,注册登录功能还可以防止未经授权的访问和操作,保护系统的安全性。
▲实现注册功能
对于宠物领养信息管理系统,首次使用该系统的用户需要先注册账号,如下图所示。

用户在注册的时候需要填写登录账号、登录密码并确认密码,在每一个文本框中都有文字提示。在输入所有数据以后,点击“注册”按钮,即可完成注册。
▲实现登录功能
用户完成注册后,可以对宠物领养信息管理系统进行登录操作。登录页面如下图所示。

在登录时,需要验证用户名和密码是否正确,并进行验证码校验,只有用户名、密码和验证码全部正确才能够登录成功。
(2)用户模块
用户模块的功能是对用户相关的信息如:用户名、密码、姓名、性别、手机、备注、类型等进行增加、删除、修改、查询列表、显示详情等管理操作,普通用户可以进行检索和查看,管理员可以对信息进行增加编辑和删除。
▲用户信息列表页面
用于显示用户信息列表,如下图所示。

▲用户新增界面
用于管理员在后台添加用户信息,如下图所示。

▲用户信息编辑界面
用户信息编辑页面,用于编辑用户信息,效果图如下图所示。

用户信息编辑页面
▲用户信息显示界面
用于显示用户详细信息,界面效果如下图所示。
▲用户删除
用户管理员在后台删除用户功能,管理员在用户列表页面中,单击操作列中的删除按钮,即可删除选定的用户,删除前须提醒用户确认。
(3)宠物模块
宠物模块的功能是对宠物相关的信息如:编号、昵称、类型、备注、性别等进行增加、删除、修改、查询列表、显示详情等管理操作,普通用户可以进行检索和查看,管理员可以对信息进行增加编辑和删除。
▲宠物信息列表页面
用于显示宠物信息列表,宠物信息列表如下图所示。

▲宠物信息添加界面
宠物信息添加页面效果图如下图所示。

宠物信息添加页面
▲宠物信息编辑界面
用于宠物信息的修改,效果图如下图所示。

▲宠物信息详细界面
用于显示宠物的详细信息,界面如下图所示。
▲宠物信息删除功能
用于管理员在后台删除宠物信息,管理员在宠物列表页面中,单击操作列中的删除按钮,即可删除选定的宠物信息,删除前须提醒用户确认。
(4)领养信息模块
领养信息模块的功能是对领养相关的信息如:领养人、电话、性别、地址、宠物编号、领养时间、是否同意、备注等进行增加、删除、修改、查询列表、显示详情等管理操作,普通用户可以进行检索和查看,管理员可以对信息进行增加编辑和删除。
▲领养信息列表页面
用于显示宠物领养信息列表,效果图如下图所示。

▲添加领养信息页面
用于添加宠物领养信息,界面效果图如下图所示

▲领养信息编辑页面
用于修改宠物领养信息,界面效果图如下图所示

▲宠物领养信息删除功能
用于管理员在后台删除宠物领养信息,管理员在宠物领养列表页面中,单击操作列中的删除按钮,即可删除选定的宠物领养信息,删除前须提醒用户确认。
(5)公告模块
公告模块的功能是对公告相关的信息如:标题、内容、类型、创建时间等进行增加、删除、修改、查询列表、显示详情等管理操作,普通用户可以进行检索和查看,管理员可以对信息进行增加编辑和删除。
▲公告信息列表页面
用于显示公告信息列表,效果图如下图所示。

▲添加公告信息页面
用于添加公告领养信息,界面效果图如下图所示

▲公告信息编辑页面
用于修改公告信息,界面效果图如下图所示

▲公告信息删除功能
用于管理员在后台删除公告信息,管理员在公告列表页面中,单击操作列中的删除按钮,即可删除选定的公告信息,删除前须提醒用户确认。
五、 总结