SpringBoot+Vue酒店客房管理系统

news2024/9/28 23:25:42

💕💕作者:程序员徐师兄

个人简介:7 年大厂程序员经历,擅长Java、微信小程序、Python、Android等,大家有这一块的问题可以一起交流!
各类成品java毕设 。javaweb,ssh,ssm,springboot等等项目框架,源码丰富,欢迎咨询。学习资料、程序开发、技术解答、代码讲解、文档报告,需要请看文末联系方式

文章目录

  • 一、前言介绍
  • 二、系统结构
  • 三、系统详细实现
    • 3.1用户信息管理
    • 3.2会员信息管理
    • 3.3客房信息管理
    • 3.4收藏客房管理
    • 3.5用户入住管理
    • 3.6客房清扫管理
  • 四、部分核心代码
  • 源码下载

一、前言介绍

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了酒店客房管理系统的开发全过程。通过分析酒店客房管理系统管理的不足,创建了一个计算机管理酒店客房管理系统的方案。文章介绍了酒店客房管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。

本酒店客房管理系统有管理员,用户,会员,清洁人员。管理员功能有个人中心,用户管理,会员管理,清洁人员管理,客房信息管理,用户预约管理,会员预约管理,用户取消管理,会员取消管理,用户入住管理,会员入住管理,用户退房管理,会员退房管理,清扫房间管理,留言板管理,系统管理等。因而具有一定的实用性。

本站是一个B/S模式系统,后台采用 Spring
Boot框架,前台采用VUE框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得酒店客房管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高酒店客房管理系统管理效率。

二、系统结构

开发语言:Java

框架:springboot

JDK版本:JDK1.8

服务器:tomcat7

数据库:mysql 5.7/8.0

数据库工具:Navicat11

开发软件:eclipse/myeclipse/idea

Maven包:Maven3.3.9

浏览器:谷歌浏览器

本系统是基于B/S 架构的网站系统,设计的功能结构图如下图所示:

三、系统详细实现

3.1用户信息管理

酒店客房管理系统的系统管理员可以管理用户信息,可以对用户信息信息添加修改删除以及查询操作,具体界面的展示如图所示

3.2会员信息管理

系统管理员可以查看对会员信息信息进行添加,修改,删除以及查询操作。具体界面如图所示。

3.3客房信息管理

管理员可以对客房信息信息进行修改,删除以及查询操作。界面如下图所示:

3.4收藏客房管理

用户登录后可以对客房信息进行收藏,预定。界面如下图所示:

3.5用户入住管理

管理员可以对用户入住信息进行管理,可以添加,修改,删除以及清扫。界面如下图所示:

3.6客房清扫管理

清洁人员登录可以对用户入住的客房进行清扫。界面如下图所示:

四、部分核心代码

    
    /**
     * 上传文件映射表
     */
    @RestController
    @RequestMapping("file")
    @SuppressWarnings({"unchecked","rawtypes"})
    public class FileController{
    	@Autowired
        private ConfigService configService;
    	/**
    	 * 上传文件
    	 */
    	@RequestMapping("/upload")
    	public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
    		if (file.isEmpty()) {
    			throw new EIException("上传文件不能为空");
    		}
    		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
    		File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    		if(!path.exists()) {
    		    path = new File("");
    		}
    		File upload = new File(path.getAbsolutePath(),"/upload/");
    		if(!upload.exists()) {
    		    upload.mkdirs();
    		}
    		String fileName = new Date().getTime()+"."+fileExt;
    		File dest = new File(upload.getAbsolutePath()+"/"+fileName);
    		file.transferTo(dest);
    		/**
      		 * 如果使用idea或者eclipse重启项目,发现之前上传的图片或者文件丢失,将下面一行代码注释打开
       		 * 请将以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替换成你本地项目的upload路径,
     		 * 并且项目路径不能存在中文、空格等特殊字符
     		 */
    //		FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路径以后请将该行最前面的//注释去掉**/
    		if(StringUtils.isNotBlank(type) && type.equals("1")) {
    			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
    			if(configEntity==null) {
    				configEntity = new ConfigEntity();
    				configEntity.setName("faceFile");
    				configEntity.setValue(fileName);
    			} else {
    				configEntity.setValue(fileName);
    			}
    			configService.insertOrUpdate(configEntity);
    		}
    		return R.ok().put("file", fileName);
    	}
    	
    	/**
    	 * 下载文件
    	 */
    	@IgnoreAuth
    	@RequestMapping("/download")
    	public ResponseEntity<byte[]> download(@RequestParam String fileName) {
    		try {
    			File path = new File(ResourceUtils.getURL("classpath:static").getPath());
    			if(!path.exists()) {
    			    path = new File("");
    			}
    			File upload = new File(path.getAbsolutePath(),"/upload/");
    			if(!upload.exists()) {
    			    upload.mkdirs();
    			}
    			File file = new File(upload.getAbsolutePath()+"/"+fileName);
    			if(file.exists()){
    				/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
    					getResponse().sendError(403);
    				}*/
    				HttpHeaders headers = new HttpHeaders();
    			    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
    			    headers.setContentDispositionFormData("attachment", fileName);    
    			    return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
    	}
    	
    }
    
    
    
    RestController
    @RequestMapping("/kechengchengji")
    public class KechengchengjiController {
        @Autowired
        private KechengchengjiService kechengchengjiService;
    
    
        
    
    
        /**
         * 后端列表
         */
        @RequestMapping("/page")
        public R page(@RequestParam Map<String, Object> params,KechengchengjiEntity kechengchengji,
    		HttpServletRequest request){
    		String tableName = request.getSession().getAttribute("tableName").toString();
    		if(tableName.equals("jiaoshi")) {
    			kechengchengji.setJiaoshizhanghao((String)request.getSession().getAttribute("username"));
    		}
    		if(tableName.equals("xuesheng")) {
    			kechengchengji.setXuehao((String)request.getSession().getAttribute("username"));
    		}
            EntityWrapper<KechengchengjiEntity> ew = new EntityWrapper<KechengchengjiEntity>();
    		PageUtils page = kechengchengjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kechengchengji), params), params));
    
            return R.ok().put("data", page);
        }
        
        /**
         * 前端列表
         */
    	@IgnoreAuth
        @RequestMapping("/list")
        public R list(@RequestParam Map<String, Object> params,KechengchengjiEntity kechengchengji, 
    		HttpServletRequest request){
            EntityWrapper<KechengchengjiEntity> ew = new EntityWrapper<KechengchengjiEntity>();
    		PageUtils page = kechengchengjiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kechengchengji), params), params));
            return R.ok().put("data", page);
        }
    
    	/**
         * 列表
         */
        @RequestMapping("/lists")
        public R list( KechengchengjiEntity kechengchengji){
           	EntityWrapper<KechengchengjiEntity> ew = new EntityWrapper<KechengchengjiEntity>();
          	ew.allEq(MPUtil.allEQMapPre( kechengchengji, "kechengchengji")); 
            return R.ok().put("data", kechengchengjiService.selectListView(ew));
        }
    
    	 /**
         * 查询
         */
        @RequestMapping("/query")
        public R query(KechengchengjiEntity kechengchengji){
            EntityWrapper< KechengchengjiEntity> ew = new EntityWrapper< KechengchengjiEntity>();
     		ew.allEq(MPUtil.allEQMapPre( kechengchengji, "kechengchengji")); 
    		KechengchengjiView kechengchengjiView =  kechengchengjiService.selectView(ew);
    		return R.ok("查询课程成绩成功").put("data", kechengchengjiView);
        }
    	
        /**
         * 后端详情
         */
        @RequestMapping("/info/{id}")
        public R info(@PathVariable("id") Long id){
            KechengchengjiEntity kechengchengji = kechengchengjiService.selectById(id);
            return R.ok().put("data", kechengchengji);
        }
    
        /**
         * 前端详情
         */
    	@IgnoreAuth
        @RequestMapping("/detail/{id}")
        public R detail(@PathVariable("id") Long id){
            KechengchengjiEntity kechengchengji = kechengchengjiService.selectById(id);
            return R.ok().put("data", kechengchengji);
        }
        
    
    
    
        /**
         * 后端保存
         */
        @RequestMapping("/save")
        public R save(@RequestBody KechengchengjiEntity kechengchengji, HttpServletRequest request){
        	kechengchengji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
        	//ValidatorUtils.validateEntity(kechengchengji);
            kechengchengjiService.insert(kechengchengji);
            return R.ok();
        }
        
        /**
         * 前端保存
         */
        @RequestMapping("/add")
        public R add(@RequestBody KechengchengjiEntity kechengchengji, HttpServletRequest request){
        	kechengchengji.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
        	//ValidatorUtils.validateEntity(kechengchengji);
            kechengchengjiService.insert(kechengchengji);
            return R.ok();
        }
    
        /**
         * 修改
         */
        @RequestMapping("/update")
        public R update(@RequestBody KechengchengjiEntity kechengchengji, HttpServletRequest request){
            //ValidatorUtils.validateEntity(kechengchengji);
            kechengchengjiService.updateById(kechengchengji);//全部更新
            return R.ok();
        }
        
    
        /**
         * 删除
         */
        @RequestMapping("/delete")
        public R delete(@RequestBody Long[] ids){
            kechengchengjiService.deleteBatchIds(Arrays.asList(ids));
            return R.ok();
        }
        
        /**
         * 提醒接口
         */
    	@RequestMapping("/remind/{columnName}/{type}")
    	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
    						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
    		map.put("column", columnName);
    		map.put("type", type);
    		
    		if(type.equals("2")) {
    			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    			Calendar c = Calendar.getInstance();
    			Date remindStartDate = null;
    			Date remindEndDate = null;
    			if(map.get("remindstart")!=null) {
    				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
    				c.setTime(new Date()); 
    				c.add(Calendar.DAY_OF_MONTH,remindStart);
    				remindStartDate = c.getTime();
    				map.put("remindstart", sdf.format(remindStartDate));
    			}
    			if(map.get("remindend")!=null) {
    				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
    				c.setTime(new Date());
    				c.add(Calendar.DAY_OF_MONTH,remindEnd);
    				remindEndDate = c.getTime();
    				map.put("remindend", sdf.format(remindEndDate));
    			}
    		}
    		
    		Wrapper<KechengchengjiEntity> wrapper = new EntityWrapper<KechengchengjiEntity>();
    		if(map.get("remindstart")!=null) {
    			wrapper.ge(columnName, map.get("remindstart"));
    		}
    		if(map.get("remindend")!=null) {
    			wrapper.le(columnName, map.get("remindend"));
    		}
    
    		String tableName = request.getSession().getAttribute("tableName").toString();
    		if(tableName.equals("jiaoshi")) {
    			wrapper.eq("jiaoshizhanghao", (String)request.getSession().getAttribute("username"));
    		}
    		if(tableName.equals("xuesheng")) {
    			wrapper.eq("xuehao", (String)request.getSession().getAttribute("username"));
    		}
    
    		int count = kechengchengjiService.selectCount(wrapper);
    		return R.ok().put("count", count);
    	}
    	
    
    
    
    
    
    
    
    }
    

源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】

作者&#xff1a;Juan R. Terven 、Diana M. Cordova-Esparaza 摘要&#xff1a;YOLO已经成为机器人、无人驾驶汽车和视频监控应用的核心实时物体检测系统。我们对YOLO的演变进行了全面的分析&#xff0c;研究了从最初的YOLO到YOLOv8每次迭代的创新和贡献。我们首先描述了标准…

Python 中的二维插值

本文展示了如何在 Python 中进行插值&#xff0c;并研究了不同的 2d 实现方法。 我们将讨论用于双变量插值的有用函数&#xff0c;例如 scipy.interpolate.interp2d、numpy.meshgrid 和 Python 中使用的用于平滑/插值 (RBF) 的径向基函数。 我们将使用 SciPy 和 Numpy 库实现插…

树莓派配置ubuntu server 22.04环境

背景 比起raspberry系统ubuntu更通用&#xff0c;结合公司项目开发需要&#xff0c;将树莓派4B刷上ubuntu server系统&#xff0c;并且安装LXDE桌面环境。 一波next 烧写镜像 用树莓派镜像烧录软件安装比较简单&#xff0c;选择操作系统&#xff1a;Other general-purpose O…

python psutil模块常用方法

psutil 是一个功能强大的跨平台第三方库&#xff0c;用于检索系统相关信息和进程管理。它提供了一些方便的函数和方法&#xff0c;可以获取 CPU 使用率、内存使用情况、磁盘信息、网络统计数据以及进程列表等。 1. 安装psutil pip install psutil2. 获取 CPU 使用率 import p…

flutter聊天界面-聊天列表 下拉加载更多历史消息

flutter聊天界面-聊天列表 下拉加载更多历史消息 在之前实现了flutter聊天界面的富文本展示内容、自定义表情键盘实现、加号【➕】更多展开相机、相册等操作Panel、消息气泡展示实现Flexible。这里把实现的聊天界面的滑动列表及下拉加载更多历史消息记录一下 聊天界面的列表使…

MySQL索引优化原则和失效情况

目录 1. 全值匹配2. 最佳左前缀法则3. 不要在索引列上做任何计算4. 范围之后全失效5. 尽量使用覆盖索引6. 使用不等于&#xff08;!或<>&#xff09;会使索引失效7. is null 或 is not null也无法使用索引8. like通配符以%开头会使索引失效9. 字符串不加单引号导致索引失…

程序员的悲哀是什么?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 切记&#xff0c;任何文章不要过度深思&#xff08;任何东西都无法经得起审视&#xff0c;因为这世上没有同样的成长环境&#xff0c;也没有同样的认知水平同时也「没有适用于所…

大模型高效训练基础知识:梯度累积(Gradient Accumulationn)

梯度累积 梯度累积&#xff08;Gradient Accumulation&#xff09;的基本思想是将一次性的整批参数更新的梯度计算变为以一小步一小步的方式进行&#xff08;如下图&#xff09;&#xff0c;具体而言该方法以小批次的方式进行模型前向传播和反向传播&#xff0c;过程中迭代计算…

变革管理中的几个不错的模型小结

其他的变革模型&#xff1a; 变革管理流程&#xff1a;

二、Java的变量

二、变量 2.1、关键字与保留字 关键字 定义&#xff1a;赋予特殊含义&#xff0c;用做专门用途的字符串 特点&#xff1a;关键字的所有字母都为小写 保留字&#xff08;reserved word&#xff09; 现有Java版本尚未使用&#xff0c;但以后版本可能会作为关键字使用。自己命名…

使用PYQT制作人才交流管理系统

利用使用PYQT制作一个人才交流管理系统&#xff0c;先使用QT designer.exe设计好人才交流管理系统的各个UI界面&#xff0c;然后利用pyuic把生成的ui界面编译为py文件&#xff0c;在主函数文件内创建一个类继承ui.py界面的类&#xff0c;即可完成数据库逻辑与 GUI 代码分离&…

小米不再忍耐,裁员三分之一强势反击印度,印度制造或因此梦破

就在小米公司表态继续投资印度之后不久&#xff0c;印度媒体报道指小米印度公司的员工数量从1500人减少到1000人左右&#xff0c;这显示出小米开始强势反击印度&#xff0c;业界人士指出此举的影响远不止于此&#xff0c;结果很可能是导致印度制造的梦想破灭。 1.小米为印度手机…

软件工程——第9章面向对象方法学引论知识点整理

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1.当前最好的软件开发技术是&#xff1f; 2.面向对象的原则是什么&#xff1f; 3.人们把客观世界中的实体抽象为什么&#xff1f; 4.软件系统本质上…

主诉病程时长提取

编写Python函数 import re def structured_pro(original_text,keyword,out_unitNone):pattern_split_str[。&#xff0c;]pattern_splitre.compile(pattern_split_str,re.I|re.M)original_listpattern_split.split(original_text)pattern_keywordre.compile(keyword,re.I|re.M…

目前最好的MicrosoftProject替代方案

Microsoft Project是一个功能强大的项目管理工具。然而它可能是昂贵的&#xff0c;并且可能不适合所有的项目管理需求。幸运的是&#xff0c;有几个Microsoft Project的替代方案提供了类似的特性和功能。在本文中我们将探索目前可用的一些最好的Microsoft Project替代方案。 1、…

12.4 ARM异常处理

目录 ARM异常处理&#xff08;一&#xff09; 异常 概念 异常处理机制 ARM异常源 概念 ARM异常源 ARM异常模式 ARM异常处理&#xff08;二&#xff09; ARM异常响应 异常向量表 异常返回 IRQ异常举例​编辑 ARM异常处理&#xff08;三 &#xff09; 异常优先级 …

自我介绍这样写?

已经帮小伙伴改了 500 多份简历了&#xff0c;也发现了一些大家写简历时的共性问题。其中让我印象比较深刻的一个点就是 自我介绍 &#xff0c;基本上所有同学的自我介绍都是这么写的&#xff1a; 读这篇文章的朋友们&#xff0c;你是不是也是这么写自我介绍的呢&#xff1f; 这…

MySQL索引优化整合案例实现

目录 1 JOIN优化1.1 JOIN算法原理1.2 in和exists函数 2 order by优化2.1 索引排序2.2 额外排序2.3 排序优化 3 索引单表优化案例3.1. 建表3.2. 单表索引分析3.1.1 需求3.1.2 优化 4 索引多表优化案例 1 JOIN优化 1.1 JOIN算法原理 1) JOIN回顾 JOIN 是 MySQL 用来进行联表操作…

在 Jetpack Compose 中创建 BottomAppBar

Jetpack Compose 是 Android 的现代 UI 工具包&#xff0c;它使得构建美观且功能强大的应用变得更加简单。在本文中&#xff0c;我们将探讨如何使用 Jetpack Compose 创建一个 BottomAppBar。 开始之前 确保你的开发环境已经设置好了 Jetpack Compose。你需要使用 Android Stu…

矩阵Matrices

目录 矩阵的变换 向量和矩阵 矩阵的变换 房子图形的矩阵变换&#xff08;wiggle动态变换&#xff09; uicontrol的‘style’类型&#xff1a; X house dot2dot(X) theta1 wiggle(X) function dot2dot(X) % DOT2DOT Connect the points from a 2-by-n matrix. X(:,end1) X…