本次项目研究,主要是基于前端的HTML、CSS、JavaScriptScript、VUE全家桶等知识,以及后端基于谷歌v8引擎的NODE、Express技术和数据库MYSQL,对项目实现前后端分离,以接口的形式进行访问交互。使用这些知识到实际项目中去,达到完成项目的目的。本项目运用最新的技术栈,实现对管理员、学生、教师进行管理,包括会议类别信息管理、会议纪要报告管理等。实现对学院会议纪要管理信息落后的情况加以技术支持。
Nodejs语言是目前使用率最高的一个语言类程序,并且他的代码还是开源的,任何的软件开发者都可以进行使用,目前已经在人类计算机编程语言发展史上产生了深远影响。所以Nodejs语言是很成熟的,将他应用到我们的系统的开发中是不错的选择,而且由于常见所以绝大多数的人们都可以操作。
Nodejs语言具有非常多种的特性,他的代码编写非常的简单,并且有多种编写方式,他有很好的面向对象性,而且他对使用的平台没有任何的要求,所有的平台都可以进行操作,他的安全性能也很高,因此他非常适合该系统的开发。
Nodejs可以对平台没有任何的要求限制,可以在任何的平台上进行运行,不需要借助其他的语言编辑器来对代码进行编辑就可以开始运行了,这一点是非常好的,不仅我们在使用的时候更加的方便而且由于不需要借助其他的程序就能实现,所以可以节约我们的开发成本,而且经过Nodejs编辑过的程序代码,可以直接进行使用,不需要重新编译,因此它是非常便利的,而且程序的运用不需要有专业的技术就可以运行了,为软件开发提供了很大的可行性。
后端管理员:
1、登录。默认一个系统管理员账号
2、添加用户。管理员可对用户(老师、学生)进行批量添加(或可以通过Excel导入),密码默认123456
3、修改用户权限。对前端用户的学生、老师进行权限修改(系统默认学生、老师注册后只能查看会议纪要、查看会前公告栏;修改用户权限页面老师和学生要分类,权限最好用“开关”的方式进行修改)
4、管理员同时拥有用户端的查看会议纪要、录入会议纪要、修改会议纪要、删除会议纪要的功能,与用户界面功能细节一样
前端用户、老师:;老师比学生多了一个审核会议纪要功能,学生提交的会议纪要需要老师审核,老师提交的会议纪要需要有权限的老师审核:学生比老师多了个发布会议预告的功能;
1、登录。学生通过学号;12位;登录、老师通过工号;6位;登录,密码默认123456
2、查看会议纪要。;可以按会议类别、参会人、会议时间、会议主题多条件查询:除了时间查询,其他查询都可用关键字查询,查询条件也可为空:查询的结果以跳转新的页面形式,会议数量较多时有页数选项;
3、录入会议纪要。;录入会议纪要,实现提交可发布到系统上,供人查询:会议日期有日期选项可以选,会议类型总体布局和细节如图下;
4、修改会议纪要。;查询到具体的会议纪要后,可以对其“议题结论及后续安排进行修改”,其他的不能;
5、删除会议纪要文档。;对会议纪要文档直接删除;
6、审核会议纪要。;老师可查看未审核的会议纪要信息进行审核,修改会议纪要的状态:“已审核”,并给会议纪要附上审核老师名称;
7、发布会议纪要预告。;预告不需要审核,可直接删除:发布的会议预告以轮播图的形式进行展示;
/**
* 登录相关
*/
@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);
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
目录
1 绪论 1
1.1课题背景 1
1.2课题研究现状 1
1.3初步设计方法与实施方案 2
1.4本文研究内容 2
2 系统开发环境 4
2.1 使用工具简介 4
2.2 环境配置 4
2.3 B/S结构简介 4
2.4 MySQL数据库 5
2.5 框架介绍 5
3 系统分析 6
3.1系统可行性分析 6
3.1.1经济可行性 6
3.1.2技术可行性 6
3.1.3运行可行性 6
3.2系统现状分析 6
3.3功能需求分析 7
3.4系统设计规则与运行环境 8
3.5系统流程分析 8
3.5.1操作流程 8
3.5.2添加信息流程 9
3.5.3删除信息流程 10
4 系统设计 11
4.1系统设计主要功能 11
4.2数据库设计 11
4.2.1数据库设计规范 11
4.2.2 E/R图 11
4.2.3数据表 12
5 系统实现 25
5.1系统功能模块 25
5.2后台模块 27
5.2.1管理员功能模块 27
5.2.2用户功能模块 30
6 系统测试 33
6.1功能测试 33
6.2可用性测试 33
6.3性能测试 34
6.4测试结果分析 34
7结 论 35
参考文献 36
致 谢 37