- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Với sự phát triển không ngừng của công nghệ mạng và mở rộng quy mô trường học, nhu cầu về hệ thống quản lý học sinh tự học ngày càng tăng. power. thiết kế để nâng cao hiệu quả sử dụng và quản lý phòng học, cung cấp dịch vụ sinh viên đặt phòng học thuận tiện tiện ích và nhanh chóng, đồng thời cung cấp cho quản trị viên công cụ quản lý hiệu quả tài nguyên.
Các chức năng chính được yêu cầu của bao hệ thống bao gồm:
1. Quản lý người dùng: đăng nhập và đăng nhập của quản trị viên và sinh viên.
2. Quản lý phòng học: nhập và truy vấn loại phòng học, thông tin chỗ ngồi.
3. Đặt chỗ: Học sinh đặt chỗ trong phòng học và xem tình trạng, lịch sử đặt chỗ.
4. Hoạt động của quản trị viên: Quản trị viên có thể xem trạng thái đặt trước và quản lý việc phân bổ tài nguyên.
1. Lựa chọn kỹ thuật:
2. Thiết kế kiến trúc:
Kiến trúc ba tầng:
1. Bảng Users (người dùng): lưu trữ thông tin người dùng.
TẠO người dùng BẢNG ( id INT AUTO_INCREMENT PRIMARY KEY, tên người dùng VARCHAR(50) NOT NULL UNIQUE, mật khẩu VARCHAR(50) NOT NULL, role VARCHAR(10) NOT NULL CHECK (role IN ('student', 'admin')) );
2. Bảng phòng học (study_rooms): lưu trữ thông tin phòng học.
TẠO BẢNG phòng học ( id INT AUTO_INCREMENT PRIMARY KEY, room_name VARCHAR(50) NOT NULL, dung lượng INT NOT NULL );
3. Chỗ ngồi: lưu trữ thông tin chỗ ngồi.
TẠO BẢNG chỗ ngồi ( id INT AUTO_INCREMENT PRIMARY KEY, room_id INT NOT NULL, trạng thái VARCHAR(10) NOT NULL CHECK (trạng thái IN ('có sẵn', 'đã đặt')), FORIGN KEY (room_id) REFERENCES Study_rooms(id) );
4. Đặt chỗ: lưu trữ thông tin đặt chỗ.
TẠO bảng đặt chỗ ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, Seat_id INT NOT NULL, start_time DATETIME NOT NULL, end_time DATETIME NOT NULL, FOREIGN KEY (user_id) THAM KHẢO người dùng(id), FORIGN KEY (seat_id) TÀI LIỆU THAM KHẢO chỗ ngồi(id ) );
nhập java.sql.Connection; nhập java.sql.DriverManager; nhập java.sql.SQLException; lớp công khai DBUtil { Chuỗi cuối cùng tĩnh riêng DB_URL = "jdbc:mysql://localhost:3306/study_management"; = "root"; Chuỗi cuối cùng tĩnh riêng tư DB_PASSWORD = "your_password" Kết nối kết nối tĩnh riêng tư = null; static { try { Class.forName("com.mysql.cj.jdbc.Driver"); kết nối = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); } bắt (ClassNotFoundException | SQLException e) { e.printStackTrace() ; } } public static Connection getConnection() { return Connection; } // Các phương thức vận hành cơ sở dữ liệu khác (thêm, xóa, sửa đổi, kiểm tra) }
Người dùngDao.java:
import java.sql.*; import java.util.ArrayList; import java.util.List; public class UserDao { public boolean registerUser(String username, String pass, String role) { String sql = "INSERT INTO user (tên người dùng, mật khẩu) , vai trò) GIÁ TRỊ (?, ?, ?)"; thử (PreparedStatement pst = DBUtil.getConnection().prepareStatement(sql)) { pst.setString(1, tên người dùng); pst.setString(2, mật khẩu); pst.setString(3, vai trò); return pst.executeUpdate() } bắt (SQLException e) { e.printStackTrace(); return false; } } // Các phương thức khác (đăng nhập, truy vấn người dùng, v.v.) }
Việc triển khai StudyRoomDao.java tương tự như SeatDao.java và DepositDao.java, bao gồm các phương pháp bổ sung, xóa, sửa đổi và tìm kiếm tương ứng.
Dịch vụ người dùng.java:
public class UserService { public boolean register(String username, String pass, String role) { return UserDao.registerUser(username, pass, role } // Các phương thức khác (xác minh đăng nhập, truy vấn thông tin người dùng, v.v.) }
StudyRoomService.java, SeatService.java và DepositService.java tương tự nhau và chứa quy trình xử lý logic kinh doanh riêng.
RegisterServlet.java:
nhập javax.servlet.*; nhập javax.servlet.http.*; nhập java.io.IOException; lớp công khai RegisterServlet mở rộng HttpServlet { protected void doPost(Yêu cầu HttpServletRequest, phản hồi HttpServletResponse) ném ServletException, IOException { Tên người dùng chuỗi = request.getParameter ("tên người dùng"); Mật khẩu chuỗi = request.getParameter("password"); vai trò = request.getParameter ("vai trò"); boolean isRegistered = UserService.register(tên người dùng, mật khẩu, vai trò); if (isRegistered) { reply.sendRedirect("login.jsp"); ", "Đăng ký không thành công!"); request.getRequestDispatcher("register.jsp").forward(request, reply); } } // Các phương thức khác (đăng nhập Servlet, đặt trước Servlet, v.v.) }
nhập java.sql.Connection; nhập java.sql.DriverManager; nhập java.sql.SQLException; lớp công khai JDBCUtils { URL chuỗi tĩnh cuối cùng = "jdbc:mysql://localhost:3306/StudyMan ManagementSystem?useSSL=false&serverTimezone=UTC" ; Chuỗi tĩnh cuối cùng riêng tư USER = "root"; Chuỗi cuối cùng tĩnh riêng tư PASSWORD = "your_password"; // Vui lòng thay thế bằng mật khẩu cơ sở dữ liệu của bạn public static Connection getConnection() ném SQLException { return DriverManager.getConnection(URL, USER, PASSWORD);
nhập javax.servlet.ServletException; nhập javax.servlet.annotation.WebServlet; nhập javax.servlet.http.HttpServlet; nhập javax.servlet.http.HttpServletRequest; nhập java.sql.Connection; nhập java.sql.PreparedStatement; java.sql.SQLException; @WebServlet("/addStudent") lớp công khai AddStudentServlet mở rộng HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse reply) ném ServletException, IOException { String name = request.getParameter("name"); chính = request.getParameter("chính"); int lớp = Integer.parseInt(request.getParameter("grade")); Chuỗi phone = request.getParameter("phone"); Chuỗi sql = "INSERT INTO Sinh viên (tên, chuyên ngành, lớp, điện thoại) GIÁ TRỊ (?, ?, ?, ?)"; thử (Kết nối conn = JDBCUtils.getConnection(); preparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, name); pstmt.setString(2, Major); pstmt.setInt(3, lớp); pstmt.setString(4, điện thoại); pstmt.executeUpdate(); jsp"); // Chuyển hướng đến trang danh sách sinh viên} Catch (SQLException e) { e.printStackTrace(); request.setAttribution("error", "Không thêm được học sinh, vui lòng thử lại sau!" "); request.getRequestDispatcher("addStudent.jsp").forward(yêu cầu, phản hồi); } } }
添加学生 添加学生
${error}
Xem sitemap của VNExpress
注意:为了使用JSP标签库(如
并且,您需要在项目的WEB-INF/lib目录下添加JSTL库(如jstl-1.2.jar). ${error} 登录页面(login.jsp)** 和 其他页面(如自习室管理页面、座位预约页面等)类似,通过表单提交数据到相应的Servlet进行处理. Giả sử cấu trúc dự án như sau: 首先,定义一个简单的User类来表示用户信息. 创建一个简单的登录页面. Hoặc truy cập Quản lý phòng học hoặc Đặt chỗ (không cần đăng nhập).< /p> Xem sitemap của VNExpress
Servlet xử lý việc gửi biểu mẫu đăng nhập. Hiển thị trang quản lý phòng học (giả sử người dùng đã đăng nhập). Đây là nơi bạn có thể quản lý phòng học. Hiển thị trang web (có thể truy cập ngay khi người dùng chưa đăng nhập). Bạn có thể đặt chỗ tại đây. Servlet Servlet for Servlet (mặc định các chú thích được sử dụng nhưng chúng cũng có thể được định cấu hình tại đây). Ví dụ về cách tạo một ứng dụng Web Java đơn giản, bao gồm trang đăng nhập, trang quản lý phòng học và trang đặt trang và xử lý việc gửi biểu mẫu qua Servlet thông tin. Người dùng giao diện sử dụng các trang JSP để hiển thị. đơn giản. Lưu ý: Để có được danh sách thành viên sinh viên, bạn cần có một Servlet để xử lý yêu cầu này và lấy dữ liệu thành viên sinh viên từ cơ sở dữ liệu data. JSP. Kiểm tra DAO lớp đơn vị. Giả sử chúng ta có một lớp UserDao chứa một số cơ sở dữ liệu truy cập phương thức. Lớp kiểm tra đơn vị UserDaoTest: Kiểm tra dịch vụ lớp đơn vị Giả sử chúng ta có lớp UserService phụ thuộc vào UserDao. Lớp kiểm tra đơn vị UserServiceTest: Kiểm tra tích hợp thường xuyên bằng cách sử dụng kiểm tra khung của Spring Boot để mô phỏng HTTP yêu cầu. kiểm tra hiệu suất thường không được thực thi thông qua mã hóa mà sử dụng các công cụ kiểm tra hiệu suất như JMeter, Gatling, vv bên dưới đây là ví dụ đơn giản về cấu hình kiểm tra kế hoạch JMeter: JMeter kiểm tra cấu hình cấu hình. (1) Kiểm tra kế hoạch lập trình: (2) Add nhóm topic: (3) Add HTTP request: (4) Thêm người nghe: (5) Chạy thử nghiệm: (6) Kết quả phân tích: Thông qua các bước trên, bạn có thể tiến hành kiểm tra đơn vị chi tiết, kiểm tra hợp nhất và kiểm tra hiệu suất trên hệ thống để đảm bảo rằng mỗi phương pháp đều hoạt động bình thường, sự cộng tác giữa các mô-đun diễn đàn phản ứng của hệ thống được mong đợi một cách thường xuyên và hiệu quả. Cơ sở dữ liệu ưu hóa tối ưu là một trong những mắt xích quan trọng trong việc cải thiện hệ thống hiệu suất và liên quan đến nhiều cạnh: Mã hóa ưu tiên cũng quan trọng không tốn kém, ảnh hưởng trực tiếp đến hiệu quả thực thi và sử dụng tài nguyên của ứng dụng: Bộ nhớ đệm công nghệ có thể cải thiện đáng kể tốc độ hồi phục của hệ thống: Hệ thống triển khai là quá trình phát triển khai phần mềm đã phát triển môi trường sản xuất: Giám sát tình trạng sức khỏe hệ thống là cơ sở cho công tác vận hành và bảo trì: Sao lưu dữ liệu là biện pháp quan trọng để đảm bảo an toàn dữ liệu: Cập nhật hệ thống là chìa khóa để giữ cho hệ thống của bạn luôn hoạt động và đáp ứng nhu cầu của người dùng: Tóm lại, việc phát triển hệ thống quản lý tự học của sinh viên JavaWeb là một kinh nghiệm thực tế quý giá, nó không chỉ nâng cao trình độ kỹ thuật của chúng tôi mà còn giúp chúng tôi hiểu sâu hơn về phát triển phần mềm. Nội dung trên chỉ mang tính tham khảo cho độc giả phát triển. Trong tương lai, chúng tôi sẽ tiếp tục tối ưu hóa và cải tiến hệ thống để cung cấp cho sinh viên các dịch vụ quản lý tự học thuận tiện và hiệu quả hơn. Cuối cùng, bài viết về hệ thống quản lý tự học của sinh viên JavaWeb kết thúc tại đây. Nếu bạn muốn biết thêm về hệ thống quản lý tự học của sinh viên JavaWeb, vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. blog trong tương lai! .jsp复制代码 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
5. Triển khai giao diện người dùng
1.注册页面(register.jsp):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Register
2.Trang đăng nhập (login.jsp)
(1)项目结构
MyWebApp/ │ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ ├── controller/ │ │ │ │ ├── LoginServlet.java │ │ │ │ ├── StudyRoomServlet.java │ │ │ │ └── SeatReservationServlet.java │ │ │ └── model/ │ │ │ └── User.java │ │ └── webapp/ │ │ ├── WEB-INF/ │ │ │ ├── web.xml │ │ └── │ │ ├── login.jsp │ │ ├── studyRoom.jsp │ │ └── seatReservation.jsp
(2)
người dùng
模型类// src/main/java/com/example/model/User.java package com.example.model; public class User { private String username; private String password; // Getters and Setters public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
(3)登录页面 (
login.jsp
)
Đăng nhập
(4) Xử lý đăng nhập Servlet (
Đăng nhậpServlet.java
)// src/main/java/com/example/controller/LoginServlet.java gói com.example.controller; nhập vào com.example.model.User; nhập javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; input java.io.IOException; @WebServlet("/login") lớp công khai Đăng nhập Servlet mở rộng HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse reply) ServletException, IOException { String username = request .getParameter("tên người dùng"); Chuỗi mật khẩu = request.getParameter("password"); ("admin".equals(username) && "password123".equals(password)) { User user = new User(); setUsername(tên người dùng user.setPassword(password); "người dùng", người dùng); reply.sendRedirect("studyRoom.jsp"); reply.sendRedirect("login.jsp?error=true");
(5) Trang quản lý phòng học (
nghiên cứuRoom.jsp
)
Quản lý phòng học
<% if (session.getAttribution("user") == null) { reply.sendRedirect("login.jsp");Xin chào mừng bạn, <%= session.getAttribution("user").getUsername() %>!(6) Trang đặt chỗ (
phòngngồiReservation.jsp
)
Đặt chỗ
(7) Xử lý Servlet đăng xuất (
Đăng xuấtServlet.java
)(8)
web.xml
Cấu hình file
(9)Trang danh sách sinh viên
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Danh sách sinh viên
Thêm thành viên sinh viên Xem sitemap của VNExpress
Tên Chuyên ngành< /th> Lớp Điện thoại ${sinh viên.name ${student.major ${student.grade ${sinh viên.phone 6. Kiểm tra hệ thống
1. Kiểm tra đơn vị thử: Sử dụng JUnit để thực hiện kiểm tra đơn vị trên từng lớp DAO và Dịch vụ
// UserDao.java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository giao diện khai báo UserDao mở rộng JpaRepository;
// UserDaoTest.java nhập tĩnh org.junit.jupiter.api.Assertions.*; nhập org.junit.jupiter.api.BeforeEach; nhập org.junit.jupiter.api.Test mở rộng tiện ích. org.mockito.InjectMocks; nhập org.mockito.Mock; org.mockito.junit.jupiter.MockitoExtension; nhập @ExtendWith(MockitoExtension.class) lớp công khai UserDaoTest { @Mock userDao userDao; void setUp() { người dùng = mới Người dùng; user.setId(1L); user.setUsername("testuser"); testFindByUsername() { when(userDao.findByUsername("testuser")).thenReturn(user); "người kiểm tra"); defNotNull(foundUser); xác nhậnEquals("testuser", FoundUser.getUsername());
// UserService.java input org.springframework.beans.factory.annotation.Autowired; input org.springframework.stereotype.Service @Service public class UserService { @Autowired userDao userDao;
// UserServiceTest.java nhập tĩnh org.junit.jupiter.api.Assertions.*; nhập org.junit.jupiter.api.BeforeEach; org.mockito.InjectMocks; nhập org.mockito.Mock; org.mockito.junit.jupiter.MockitoExtension @ExtendWith(MockitoExtension.class) lớp công khai UserServiceTest { @Mock userDao userDao; @BeforeEach public void setUp() { user = new User( ); user.setId(1L); user.setUsername("testuser"); testGetUserByUsername() { when(userDao.findByUsername("testuser")).thenReturn(user ); Người dùng FoundUser = userService.getUserByUsername("testuser"); confirmNotNull(foundUser); xác nhậnEquals("testuser", FoundUser.getUsername()) ;
2. Kiểm thử tích hợp: Kiểm thử tích hợp: tổng thể của
// UserControllerTest.java nhập tĩnh org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; nhập tĩnh org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; nhập org.junit.jupiter.api.Test; nhập org.junit.jupiter.api.extension.ExtendWith; org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; nhập org.springframework.boot.test.mock.mockito.MockBean; nhập org.springframework.test.context.junit.jupiter.SpringExtension; .servlet.MockMvc @ExtendWith(SpringExtension.class) @WebMvcTest(UserController.class) lớp công khai UserControllerTest { @Autowired Private MockMvc mockMvc; @MockBean Private UserService userService; @Test public void testGetUserByUsername() Xử lý ngoại lệ { User user = new User(); setUsername("người dùng thử"); khi(userService.getUserByUsername("testuser")).thenReturn(user); mockMvc.perform(get("/users/testuser")) .andExpect(status().isOk() ) .andExpect(content().json ("{\"id\":1,\"tên người dùng\":\"testuser\"}"));
3. Kiểm tra hiệu suất: Sử dụng các công cụ (như JMeter) để thực hiện kiểm tra khả năng trên hệ thống
7. Tối ưu hóa hiệu suất
1. Cơ sở dữ liệu tối ưu hóa
2. Mã hóa tối ưu
3. Bộ đệm tối ưu hóa
8. Triển khai và vận hành, bảo trì
1. Triển khai
2. Giám sát
3. Sao lưu
4. Cập nhật
9. Tóm tắt dự án
Tôi là một lập trình viên xuất sắc, rất xuất sắc!