基于springboot+vue的软件开发管理系统【数据库设计、论文、毕设源码、开题报告】

本文介绍了如何通过遵循界面设计原则,细分系统功能结构,以及详细规划数据库设计(包括实体属性、表结构和物理设计)来创建一个具有良好用户体验的系统。作者还提供了JAVA后端代码示例,展示了登录、注册、管理等功能的实现。
摘要由CSDN通过智能技术生成

  博主介绍:👉全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战👈
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到

🔎​百套小程序APP项目实战持续更新中~​

🔎​千套JAVA项目实战持续更新中~​

🔎​百套Python实战项目持续更新中~​
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我

❤️文末获取源码联系❤️        ⚠️一定要先收藏⚠️

4 系统设计

市面上设计比较好的系统都有一个共同特征,就是主题鲜明突出。通过对页面简洁清晰的布局,让页面的内容,包括文字语言,或者视频图片等元素可以清晰表达出系统的主题。让来访用户无需花费过多精力和时间找寻需要的内容。

4.1界面设计原则

一般来说,大部分用户使用系统,有些是想从系统中获取需要的信息,有些则是使用系统提供的服务。所以,为了改善用户体验,提高系统的使用率,在对系统界面设计时,需要按照下面的原则进行。

第一点,对用户进行分析,了解用户使用系统的目的,以及使用系统的方式,考虑大部分用户的阅读习惯,设计Z字形或F型结构可以方便用户获取信息。

第二点:设计有效的导航,这个包括每个页面上都有导航条的显示,有时也可以在页面的底部设计导航条,当用户进入具体页面时,要设计相应的位置提示,在页面中比较特殊的位置,需要设计返回链接,可以返回上个页面,也可以返回首页等。

第三点:对整个系统要运用统一的设计方案,包括色彩方案的一致性,页面模板的相似性等,对相同操作和专业术语的描述在整个系统中也应该保持一致。

第四点:设计的界面要保证传达的内容清晰准确。要避免在同一个页面设计非常多的内容,另外可以准确对系统内容进行分类,把页面中用户视觉集中的位置,用来显示重要信息。

作为初学者,并没有那么多的设计经验,但是可以运用上面提到的界面设计原则设计出比较好的系统,可以让用户产生良好的使用体验。

4.2功能结构设计

为了让系统的编码可以顺利进行,特意对本系统功能进行细分设计,设计的系统功能结构见下图。

图4.1 系统功能结构图

4.3数据库设计

一般来说,对用户进行调查,了解其需求,主要还是完成功能上的分析设计,殊不知,设计功能时,也要展示对数据库的设计。数据库服务于程序,它可以按照设定的规则对程序的数据进行保存,因此,也可以说数据库就是程序相关数据的集合。为了保证程序的高质量,数据库提供的数据存储服务也需要快速响应,同时数据信息也要安全合法可靠,所以设计一个数据库这样的任务也需要高度重视,并花时间和精力去努力完成。毕竟这影响到后期程序的开发和使用。试想而知,假设设计一个不好的数据库,遇到的问题将会有:第一,面对信息处理,会有着繁琐的业务逻辑,延长事务处理时间。第二:程序编码期间,将会产生更多的代码去完成数据处理的功能,产生大量的数据冗余,而且也不方便注释代码,还会占用更多的存储空间。综上所述,设计出合理的数据库是多么的重要。

(1)下图是项目经理实体和其具备的属性。


项目经理实体属性图

(2)下图是项目信息实体和其具备的属性。


项目信息实体属性图

(3)下图是公告信息实体和其具备的属性。


公告信息实体属性图

(4)下图是bug信息实体和其具备的属性。


bug信息实体属性图

(5)下图是需求或任务实体和其具备的属性。


需求或任务实体属性图

(6)下图是员工实体和其具备的属性。


员工实体属性图

(7)下图是开发人员实体和其具备的属性。


开发人员实体属性图

(8)下图是测试人员实体和其具备的属性。


测试人员实体属性图

4.3.2 数据库物理设计

作为程序后台的支持,本数据库也需要设计数据存储的结构。而数据存储结构的设计就包括了数据表结构的设计和创建。数据表结构包括了字段,数据类型,还有字段的取值范围等信息。而E-R模型中的实体就是一张表,实体的特征就可以作为该表中的字段,根据本程序信息存储要求,设计每个字段需要的类型,还有该字段的取值范围等。每当设计完成一张数据表,就需要及时保存在数据库里面,并对该设计的数据表准确命名,要求设置的数据表的名称尽量不要是中文,而且要方便记忆。因为在程序编码阶段,通过SQL语句可以把程序里面的数据写入在各个数据表里面,而这个环节需要使用到数据表的名称。如果数据表名称是中文的话,可能会乱码并影响程序运行。下面就以表格形式展示设计的结果。

表4.1bug信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiangmurenwu_id

Integer

项目

3

ceshi_id

Integer

测试人员

4

bugshangbao_uuid_number

String

bug编号

5

bugshangbao_name

String

标题

6

bugshangbao_types

Integer

bug类型

7

bugshangbao_content

String

详情信息

8

bug_status_types

Integer

bug状态

9

bugshangbao_delete

Integer

逻辑删除

10

insert_time

Date

录入时间

11

create_time

Date

创建时间

表4.2测试人员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

ceshi_name

String

测试人员名称

3

ceshi_phone

String

测试人员手机号

4

ceshi_photo

String

测试人员头像

5

ceshi_email

String

测试人员邮箱

6

ceshi_delete

Integer

逻辑删除

7

insert_time

Date

添加时间

8

create_time

Date

创建时间

表4.3字典表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

dic_code

String

字段

3

dic_name

String

字段名

4

code_index

Integer

编码

5

index_name

String

编码名字

6

super_id

Integer

父字段id

7

beizhu

String

备注

8

create_time

Date

创建时间

表4.4公告信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

news_name

String

公告标题

3

news_types

Integer

项目信息

4

news_photo

String

公告图片

5

insert_time

Date

添加时间

6

news_content

String

公告详情

7

create_time

Date

创建时间

表4.5项目信息表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiangmujingli_id

Integer

项目经理

3

xiangmu_uuid_number

String

项目编号

4

xiangmu_name

String

项目名称

5

xiangmu_mingcheng

String

项目负责人

6

xiangmu_phone

String

联系方式

7

xiangmu_types

Integer

项目类型

8

xiangmu_new_money

BigDecimal

项目经费

9

xiangmu_time

Date

立项时间

10

status_types

Integer

项目状态

11

xiangmu_content

String

项目介绍

12

xiangmu_yesno_types

Integer

项目申报

13

xiangmu_yesno_text

String

申报结果

14

xiangmu_delete

Integer

逻辑删除

15

insert_time

Date

录入时间

16

create_time

Date

创建时间

表4.6项目经理表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiangmujingli_name

String

项目经理名称

3

xiangmujingli_phone

String

项目经理手机号

4

xiangmujingli_photo

String

项目经理头像

5

xiangmujingli_email

String

项目经理邮箱

6

xiangmujingli_delete

Integer

逻辑删除

7

insert_time

Date

添加时间

8

create_time

Date

创建时间

表4.7需求/任务表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

xiangmu_id

Integer

项目

3

xiangmurenwu_uuid_number

String

编号

4

xiangmurenwu_name

String

标题

5

xiangmurenwu_types

Integer

类型

6

xiangmurenwu_content

String

详情信息

7

yonghu_id

Integer

开发人员

8

xiangmurenwu_file

String

回复文档

9

huifu_content

String

回复详情

10

xiangmurenwu_status_types

Integer

状态

11

xiangmurenwu_delete

Integer

逻辑删除

12

insert_time

Date

录入时间

13

create_time

Date

创建时间

表4.8开发人员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yonghu_name

String

开发人员名称

3

yonghu_phone

String

开发人员手机号

4

yonghu_photo

String

开发人员头像

5

yonghu_email

String

开发人员邮箱

6

yonghu_delete

Integer

逻辑删除

7

insert_time

Date

添加时间

8

create_time

Date

创建时间

表4.9员工表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

yuangong_name

String

员工名称

3

yuangong_phone

String

员工手机号

4

yuangong_photo

String

员工头像

5

sex_types

Integer

性别

6

yuangong_email

String

员工邮箱

7

bumen_types

Integer

部门

8

yuangong_delete

Integer

逻辑删除

9

insert_time

Date

添加时间

10

create_time

Date

创建时间

表4.10管理员表

序号

列名

数据类型

说明

允许空

1

Id

Int

id

2

username

String

医院名

3

password

String

密码

4

role

String

角色

5

addtime

Date

新增时间


5 系统实现

这个环节需要使用前面的设计方案,包括对系统模块的设计,还有对程序后台的数据支持的数据库的设计等。不过这部分内容还是强调系统编码人员的开发能力,要把前面设计的内容通过编码的形式以一个完整的,可以运行的系统呈现出来。

功能模块的实现

5.1项目经理管理

如图5.1显示的就是项目经理管理页面,此页面提供给管理员的功能有:项目经理的查询管理,可以删除项目经理、修改项目经理、新增项目经理,

还进行了对用户名称的模糊查询的条件

图5.1 项目经理管理页面

5.2 测试人员管理

如图5.2显示的就是测试人员管理页面,此页面提供给管理员的功能有:查看已发布的测试人员数据,修改测试人员,测试人员作废,即可删除,还进行了对测试人员名称的模糊查询 测试人员信息的类型查询等等一些条件。

图5.2 测试人员管理页面

5.3项目信息管理

如图5.3显示的就是项目信息管理页面,此页面提供给管理员的功能有:根据项目信息进行条件查询,还可以对项目信息进行新增、修改、查询操作等等。

图5.3 项目信息管理页面

JAVA后端代码实现

package com.controller;
 
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
 
/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;
 
	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }
 
	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }
 
    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
 
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }
 
    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }
 
    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

源码获取

大家点赞、收藏、关注 ,让更多需要的同学看到

不同开发语言专栏推荐订阅

 🔎​百套小程序APP项目实战持续更新中~​

🔎​千套JAVA项目实战持续更新中~​

🔎​百套Python实战项目持续更新中~​

👇下方有我的微信名片👇

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值