字体设计网站有哪些,wordpress 创建模板文件,wordpress 建站很简单,中企动力邮箱手机版✅作者简介#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者#xff0c;修心和技术同步精进。 #x1f34e;个人主页#xff1a;Java Fans的博客 #x1f34a;个人信条#xff1a;不迁怒#xff0c;不贰过。小知识#xff0c;大智慧。 #x1f49e;当前专栏… ✅作者简介2022年博客新星 第八。热爱国学的Java后端开发者修心和技术同步精进。 个人主页Java Fans的博客 个人信条不迁怒不贰过。小知识大智慧。 当前专栏前端案例分享专栏 ✨特色专栏国学周更-心性养成之路 本文内容JavaWeb酒店管理系统详细版 文章目录 一、环境版本1、数据库设计MySQL 5.72、后端开发Java3、前端开发4、集成开发工具Eclipse IDE for Java EE Developers 二、数据库设计1、新建数据库2、建表3、初始化数据4、创建日志记录表5、创建触发器6、添加索引7、存储过程 三、Web应用开发1、创建JavaWeb项目2、BaseDao单例模式3、登录功能3.1 登录页面3.2 登录逻辑使用Servlet处理登录请求 4、展示信息4.1 列表界面使用JSP展示酒店列表4.2 列表逻辑使用Servlet处理登录请求 5、添加功能5.1 添加页面使用JSP编写5.2 添加逻辑使用Servlet处理添加请求 6、修改功能6.1 修改页面使用JSP编写6.2 修改逻辑使用Servlet处理修改请求 7、注释 四、示例输入和输出 一、环境版本
1、数据库设计MySQL 5.7
数据库包括三个表HotelBrand酒店品牌表、HotelStar酒店星级表和Hotel酒店表。HotelBrand表存储酒店品牌信息HotelStar表存储酒店星级信息Hotel表存储具体酒店的信息。Hotel表中的BrandID和StarID分别作为外键关联到HotelBrand表和HotelStar表中的对应主键。
2、后端开发Java
在后端开发中您需要编写Java类来处理数据库操作包括连接数据库、查询数据、插入数据等。您可以使用JDBC来连接MySQL数据库并编写SQL语句来执行数据库操作如插入新酒店信息、查询特定品牌的酒店等。
3、前端开发
在前端开发中您可以根据数据库中的数据表结构设计合适的界面展示酒店品牌、星级和具体酒店信息。可以使用HTML、CSS和JavaScript来构建前端界面通过后端提供的数据接口来动态展示数据。
4、集成开发工具Eclipse IDE for Java EE Developers
使用Eclipse IDE来编写和调试Java代码同时集成Tomcat 9作为Web服务器来运行和测试您的Web应用程序。您可以在Eclipse中创建Java Servlet来处理HTTP请求并将数据库操作集成到Servlet中实现与数据库的交互。
二、数据库设计
1、新建数据库
CREATE DATABASE HotelManagement;2、建表
在数据库设计中满足三大范式是非常重要的可以确保数据库结构的合理性和数据的一致性。同时使用约束可以帮助确保数据的完整性和准确性。下面我将详细阐述如何设计表满足三大范式并使用主键约束和外键约束
第一范式1NF 确保每个列都是原子的不可再分。在建表时确保每个字段都是不可再分的最小数据单元不包含重复的数据。例如在酒店表Hotel中每个字段应该是原子的如Name字段只存储酒店名称Price字段只存储价格。 第二范式2NF 确保表中的非主键列完全依赖于主键而不是部分依赖。如果有部分依赖的情况需要将其拆分成单独的表。在建表时将数据分解成多个表确保每个表中的非主键列都完全依赖于主键。例如在酒店表Hotel中BrandID和StarID应该完全依赖于HotelID如果存在部分依赖的情况需要进行拆分。 第三范式3NF 确保表中的非主键列之间没有传递依赖关系即不存在传递依赖。如果存在传递依赖需要进一步拆分表。在建表时确保每个非主键列都直接依赖于主键而不是依赖于其他非主键列。例如在酒店表Hotel中如果存在非主键列之间的传递依赖需要将其拆分成独立的表以消除这种依赖关系。 约束使用 主键约束在每个表中定义一个主键用于唯一标识每条记录。主键可以确保表中的每条记录都具有唯一性。外键约束在表之间建立关联时使用外键约束来确保参照完整性。外键约束可以确保在一个表中的外键值必须在另一个表的主键中存在。在您的数据库设计中可以使用主键约束来定义主键字段如HotelID、BrandID、StarID并使用外键约束来建立表之间的关联关系如Hotel表中的BrandID和StarID与HotelBrand表和HotelStar表中的对应主键关联。
通过满足三大范式和使用主键约束、外键约束您可以设计出结构合理、数据完整的数据库表确保数据的一致性和准确性。
酒店表Hotel
CREATE TABLE HotelBrand (BrandID INT PRIMARY KEY AUTO_INCREMENT,BrandName VARCHAR(255) NOT NULL
);酒店星级表HotelStar
CREATE TABLE HotelStar (StarID INT PRIMARY KEY,StarLevel INT NOT NULL
);酒店品牌表HotelBrand
CREATE TABLE Hotel (HotelID INT PRIMARY KEY AUTO_INCREMENT,BrandID INT,StarID INT,Name VARCHAR(255) NOT NULL,Price DECIMAL(10, 2),FOREIGN KEY (BrandID) REFERENCES HotelBrand(BrandID),FOREIGN KEY (StarID) REFERENCES HotelStar(StarID)
);3、初始化数据
批量插入酒店数据
INSERT INTO Hotel (BrandID, StarID, Name, Price) VALUES
(1, 5, 五星级酒店A, 1200.00),
(2, 4, 四星级酒店B, 800.00),
(1, 5, 五星级酒店C, 1500.00),
(3, 3, 三星级酒店D, 500.00),
(2, 4, 四星级酒店E, 750.00);4、创建日志记录表
CREATE TABLE OperationLog (LogID INT PRIMARY KEY AUTO_INCREMENT,UserID INT,OperationType VARCHAR(50),OperationTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (UserID) REFERENCES Hotel (HotelID)
);5、创建触发器
DELIMITER //
CREATE TRIGGER AfterHotelUpdate
AFTER UPDATE ON Hotel
FOR EACH ROW
BEGININSERT INTO OperationLog (UserID, OperationType)VALUES (NEW.HotelID, CONCAT(Updated: , NEW.Name));
END;
//
DELIMITER ;6、添加索引
CREATE INDEX idx_hotel_name ON Hotel (Name) USING BTREE;7、存储过程
DELIMITER //
CREATE PROCEDURE AddHotel(IN brandID INT, IN starID INT, IN name VARCHAR(255), IN price DECIMAL(10, 2))
BEGININSERT INTO Hotel (BrandID, StarID, Name, Price) VALUES (brandID, starID, name, price);
END;
//
DELIMITER ;三、Web应用开发
1、创建JavaWeb项目
在创建JavaWeb项目并导入相关JAR包时您需要遵循一系列步骤来确保项目的顺利开发和运行。下面我将详细阐述如何创建JavaWeb项目并导入常用的JAR包如Servlet、JDBC、JSTL等
创建JavaWeb项目 打开Eclipse IDE选择“File” - “New” - “Dynamic Web Project”来创建一个新的JavaWeb项目。输入项目名称和选择合适的目标运行时环境如Apache Tomcat 9然后点击“Finish”来创建项目。 导入相关JAR包 Servlet JAR包Servlet是用于处理HTTP请求和生成动态内容的Java类。您可以在Apache官网下载Servlet API的JAR包如servlet-api.jar。将下载的Servlet JAR包复制到项目的WebContent/WEB-INF/lib目录下。JDBC JAR包JDBC用于连接数据库并执行SQL操作。您可以在MySQL官网下载MySQL Connector/J的JAR包。将下载的JDBC JAR包也复制到项目的WebContent/WEB-INF/lib目录下。JSTL JAR包JSTLJavaServer Pages Standard Tag Library是用于在JSP页面中编写更简洁的代码的标签库。您可以在Apache标准标签库的官网下载JSTL的JAR包。同样将下载的JSTL JAR包复制到项目的WebContent/WEB-INF/lib目录下。 配置项目构建路径 在Eclipse中右键单击项目选择“Properties” - “Java Build Path” - “Libraries”选项卡。点击“Add JARs”按钮选择刚刚导入的JAR包以将它们添加到项目的构建路径中。 编写代码 开发Servlet类来处理HTTP请求和与数据库交互。编写JSP页面来生成动态内容并展示数据。 部署和运行项目 将项目部署到Tomcat服务器上启动Tomcat服务器并访问项目的URL来查看Web应用程序运行情况。
2、BaseDao单例模式
public class BaseDao {private static BaseDao instance;private Connection conn;private BaseDao() {// 初始化数据库连接}public static synchronized BaseDao getInstance() {if (instance null) {instance new BaseDao();}return instance;}public Connection getConnection() {return conn;}
}3、登录功能
3.1 登录页面
!DOCTYPE html
html
headtitle登录页面/title
/head
bodyh2用户登录/h2%-- 显示错误信息 --%c:if test${not empty error}p stylecolor: red;${error}/p/c:ifform actionlogin methodpostlabel forusername用户名:/labelinput typetext idusername nameusername requiredbrbrlabel forpassword密码:/labelinput typepassword idpassword namepassword requiredbrbrinput typesubmit value登录/form
/body
/html在上面的代码中我添加了一个用于显示错误信息的部分并使用JSTL标签库来实现。具体优化包括
c:if 标签用于判断是否存在错误信息如果存在则显示红色的错误提示。${error} 用于显示具体的错误信息这个信息是在Servlet中设置的。表单的 action 属性指向了Servlet的URL确保提交表单时数据发送到正确的地方。
3.2 登录逻辑使用Servlet处理登录请求
WebServlet(/login)
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String username request.getParameter(username);String password request.getParameter(password);// 验证用户名和密码if (validateUser(username, password)) {request.getSession().setAttribute(username, username);response.sendRedirect(hotelList.jsp);} else {request.setAttribute(error, 用户名不存在/密码错误);request.getRequestDispatcher(login.jsp).forward(request, response);}}private boolean validateUser(String username, String password) {// 这里添加验证逻辑return true;}
}4、展示信息
4.1 列表界面使用JSP展示酒店列表
% page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8%
!DOCTYPE html
html
headmeta charsetUTF-8title酒店列表/title
/head
bodyh2酒店列表/h2table border1trth酒店名称/thth价格/thth星级/th/trc:forEach varhotel items${hotels}trtd${hotel.name}/tdtd${hotel.price}/tdtd${hotel.starLevel}/td/tr/c:forEach/table
/body
/html在上面的代码中
使用 c:forEach 标签遍历名为 hotels 的列表该列表包含要展示的酒店信息。${hotel.name}、${hotel.price} 和 ${hotel.starLevel} 分别显示每个酒店的名称、价格和星级。通过在Servlet中将酒店信息存储在 hotels 属性中并将其传递到该JSP页面以便在页面上动态展示酒店列表信息。
4.2 列表逻辑使用Servlet处理登录请求
WebServlet(/hotelList)
public class HotelListServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 模拟从数据库中获取酒店列表数据ListHotel hotels getHotelListFromDatabase();// 将酒店列表数据存储在request属性中request.setAttribute(hotels, hotels);// 转发到展示酒店列表的JSP页面RequestDispatcher dispatcher request.getRequestDispatcher(hotelList.jsp);dispatcher.forward(request, response);}private ListHotel getHotelListFromDatabase() {// 模拟从数据库中获取酒店列表数据的逻辑ListHotel hotels new ArrayList();hotels.add(new Hotel(Hotel A, 100, 5-star));hotels.add(new Hotel(Hotel B, 80, 4-star));hotels.add(new Hotel(Hotel C, 120, 5-star));return hotels;}
}
5、添加功能
5.1 添加页面使用JSP编写
!DOCTYPE html
html
headtitle添加酒店信息/title
/head
bodyh2添加酒店信息/h2form actionaddHotel methodpostlabel forname酒店名称:/labelinput typetext idname namename requiredbrbrlabel forprice价格:/labelinput typetext idprice nameprice requiredbrbrlabel forstarLevel星级:/labelinput typetext idstarLevel namestarLevel requiredbrbrinput typesubmit value添加/form
/body
/html
5.2 添加逻辑使用Servlet处理添加请求
WebServlet(/addHotel)
public class AddHotelServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name request.getParameter(name);int price Integer.parseInt(request.getParameter(price));String starLevel request.getParameter(starLevel);// 在实际应用中这里可以将酒店信息保存到数据库中// 重定向到酒店列表页面response.sendRedirect(hotelList);}
}在上面的代码中
addHotel.jsp 页面包含一个表单用户可以输入酒店名称、价格和星级信息。AddHotelServlet Servlet 接收表单提交的数据将酒店信息保存到数据库在实际应用中然后重定向到展示酒店列表的页面。
6、修改功能
6.1 修改页面使用JSP编写
!DOCTYPE html
html
headtitle修改酒店信息/title
/head
bodyh2修改酒店信息/h2form actioneditHotel methodpostlabel forname酒店名称:/labelinput typetext idname namename value${hotel.name} requiredbrbrlabel forprice价格:/labelinput typetext idprice nameprice value${hotel.price} requiredbrbrlabel forstarLevel星级:/labelinput typetext idstarLevel namestarLevel value${hotel.starLevel} requiredbrbrinput typehidden namehotelId value${hotel.id}input typesubmit value修改/form
/body
/html
6.2 修改逻辑使用Servlet处理修改请求
WebServlet(/editHotel)
public class EditHotelServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int hotelId Integer.parseInt(request.getParameter(hotelId));String name request.getParameter(name);int price Integer.parseInt(request.getParameter(price));String starLevel request.getParameter(starLevel);// 在实际应用中根据hotelId更新数据库中对应的酒店信息// 重定向到酒店列表页面response.sendRedirect(hotelList);}
}在上面的代码中
editHotel.jsp 页面包含一个表单显示当前酒店信息并允许用户修改。EditHotelServlet Servlet 接收表单提交的数据根据酒店ID更新数据库中对应的酒店信息然后重定向到展示酒店列表的页面。
7、注释
在类和方法以及重要代码中添加注释。
当为Java类和方法添加注释时通常遵循以下几个原则
在类的顶部添加类级注释描述类的作用、功能和重要信息。在方法的前面添加方法级注释描述方法的作用、参数、返回值和可能的异常。在重要的代码块或逻辑部分添加行级注释解释代码的目的和实现细节。
以下是一个示例展示如何为类和方法添加注释
WebServlet(/editHotel)
public class EditHotelServlet extends HttpServlet {/*** 处理POST请求用于修改酒店信息* param request HTTP请求对象* param response HTTP响应对象* throws ServletException Servlet异常* throws IOException IO异常*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取表单提交的数据int hotelId Integer.parseInt(request.getParameter(hotelId));String name request.getParameter(name);int price Integer.parseInt(request.getParameter(price));String starLevel request.getParameter(starLevel);// 在实际应用中根据hotelId更新数据库中对应的酒店信息// 重定向到酒店列表页面response.sendRedirect(hotelList);}
}在上面的代码中我们为 EditHotelServlet 类添加了类级注释描述了类的作用。同时在 doPost() 方法前添加了方法级注释描述了方法的作用和参数。在代码中也添加了行级注释解释了关键代码块的作用。
四、示例输入和输出
示例输入
用户名example_user密码example_password
示例输出
如果输入的用户名和密码与系统中的匹配登录成功跳转到酒店列表页面。如果输入的用户名或密码不匹配登录失败显示错误信息例如“用户名不存在/密码错误”。 码文不易本篇文章就介绍到这里如果想要学习更多Java系列知识点击关注博主博主带你零基础学习Java知识。与此同时对于日常生活有困扰的朋友欢迎阅读我的第四栏目《国学周更—心性养成之路》学习技术的同时我们也注重了心性的养成。