Java应用系统设计与实现--学生信息管理系统(附解决方案源码)

news2024/11/18 5:28:01

一、实验目的及要求

1.1实验目的

  1.         ·  掌握Java GUI编程技术,了解Swing框架的使用。
    1.         ·  掌握MySQL数据库的基本操作,了解如何在Java中连接和操作数据库。
      1.         ·  掌握用户权限管理的基本概念和实现方法。
        1.         ·  提升综合运用所学知识设计和实现一个完整应用系统的能力。

1.2实验要求

  1.         ·  设计并实现一个学生管理系统,包含学生信息的录入、修改、删除、查询和统计功能。
  2.         ·  实现用户权限管理,只有经过身份验证的用户才能进行操作。
  3.         ·  提供友好的人机界面,包括登录界面和功能菜单。
  4.         ·  使用MySQL数据库存储和管理学生信息。
  5.         ·  界面美观,操作简便。

二、系统设计

2.1系统总体设计

主要功能模块:

  • 用户登录与注册
  • 学生信息管理(录入、修改、删除、查询)
  • 信息统计
  • 用户权限管理

2.2 系统详细设计

2.2.1 数据库设计

使用MySQL数据库,包含两个主要表:

  • users 表:存储用户信息(用户ID、用户名、密码等)。
  • students 表:存储学生信息(学生ID、姓名、年龄、性别、班级等)。

    2.2.2 用户界面设计

    使用Java Swing框架,设计主要界面如下:

  • 1.登录界面
  • 包含用户名和密码输入框,登录按钮。

  • 2.主界面
  • 包含功能菜单(信息录入、信息修改、信息删除、信息查询、信息统计),显示学生信息的表格。

3.信息录入界面

包含学生信息输入框(姓名、年龄、性别、班级),提交按钮。

4.信息修改界面:

显示所有学生信息的表格,点击某一条记录弹出详细信息修改窗口

5.信息删除界面

显示所有学生信息的表格,选择并删除指定记录。

6.信息查询界面

包含查询输入框和按钮,显示查询结果的表格。

7.信息统计界面

显示学生人数统计信息。

2.2.3 控制器设计

控制器负责处理用户操作,并与模型进行交互,实现各项功能:

1.登录功能

验证用户身份。

如果如果输入的账号密码在数据库的user表中存在,就可以登录进去

反之

2.注册功能

添加用户

会将注册成功的用户直接添加到数据库的表格中

3.信息录入功能

获取用户输入并存储到数据库。

4.信息修改功能

获取用户选择的记录,弹出修改窗口,更新数据库。

5.信息删除功能

获取用户选择的记录,删除数据库中的记录。

6.信息查询功能

根据用户输入的关键词查询数据库,更新表格显示。

7.信息统计功能

查询数据库中的学生人数,并显示结果。

三、实验结果

·  实现了学生管理系统的主要功能,包括用户登录、学生信息录入、修改、删除、查询和统计。

·  界面美观友好,操作简便。

·  系统能够根据用户输入的关键词查询学生信息,并在表格中显示结果。

·  系统在操作过程中能够正确处理用户输入,并与数据库进行交互,确保数据的一致性和完整性。

四、总结分析

通过本次实验,掌握了Java GUI编程和MySQL数据库操作的基本技能,了解了如何将两者结合起来实现一个完整的应用系统。在实现过程中,遇到了一些问题,比如界面布局调整、事件处理等,通过查阅资料和调试,最终得以解决。整体来说,本次实验达到了预期的目的和要求,提高了综合运用所学知识解决实际问题的能力。

五、附录代码

Student类

public class Student {
    private int id;
    private String name;
    private int age;
    private String gender;
    private String studentClass;
    public Student(int id, String name, int age, String gender,String studentClass) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.studentClass=studentClass;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getStudentClass() {
        return studentClass;
    }

    public void setStudentClass(String studentClass) {
        this.studentClass = studentClass;
    }
}

Database类

public class Database {
    private Connection connection;

    public Connection getConnection() {
        return connection;
    }
    public List<Student> getAllStudents() {
        List<Student> students = new ArrayList<>();
        String query = "SELECT * FROM students";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String studentClass = resultSet.getString("class");
                students.add(new Student(id, name, age, gender, studentClass));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

    public int getStudentCount() {
        String query = "SELECT COUNT(*) AS count FROM students";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                return resultSet.getInt("count");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    // 连接数据库
    public Database() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentdb", "root", "a123");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 关闭数据库连接
    public void close() {
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 添加学生信息
    public void addStudent(Student student) {
        String query = "INSERT INTO students (id, name, age, gender, class) VALUES (?, ?, ?, ?, ?)";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, student.getId());
            preparedStatement.setString(2, student.getName());
            preparedStatement.setInt(3, student.getAge());
            preparedStatement.setString(4, student.getGender());
            preparedStatement.setString(5, student.getStudentClass());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 删除学生信息
    public void deleteStudent(int studentId) {
        String query = "DELETE FROM students WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, studentId);
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 查询学生信息
    public Student getStudent(int id) {
        String query = "SELECT * FROM students WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(1, id);
            ResultSet resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String gender = resultSet.getString("gender");
                String studentClass = resultSet.getString("class");
                return new Student(id, name, age, gender, studentClass);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    // 修改学生信息
    public void updateStudent(Student student) {
        String query = "UPDATE students SET name = ?, age = ?, gender = ?, class = ? WHERE id = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, student.getName());
            preparedStatement.setInt(2, student.getAge());
            preparedStatement.setString(3, student.getGender());
            preparedStatement.setString(4, student.getStudentClass());
            preparedStatement.setInt(5, student.getId());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    // 用户登录
    public boolean authenticateUser(String username, String password) {
        String query = "SELECT * FROM users WHERE username = ? AND password = ?";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, username);
            preparedStatement.setString(2, password);
            ResultSet resultSet = preparedStatement.executeQuery();
            return resultSet.next();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
    //用户注册
    public boolean registerUser(String username, String password) {
        String query = "INSERT INTO users (username, password, role) VALUES (?, ?, 'admin')";
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(query);
            preparedStatement.setString(1, username);
            preparedStatement.setString(2, password);
            int rowsInserted = preparedStatement.executeUpdate();
            return rowsInserted > 0;
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

}

LoginGUI类:

public class LoginGUI extends JFrame {
    private JLabel usernameLabel, passwordLabel;
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton loginButton;
    private Database db;
    private JButton registerButton;
    Font font = new Font("Serif", Font.BOLD, 20);
    public LoginGUI() {
        db = new Database();
        setTitle("学生管理系统 - 登录");
        setSize(600, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(null);

        int i=110,j=50;
        usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(35+i, 30+j, 80, 25);
        add(usernameLabel);
        usernameLabel.setFont(font);

        usernameField = new JTextField(20);
        usernameField.setBounds(110+i, 30+j, 200, 25);
        add(usernameField);


        passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(55+i, 70+j, 80, 25);
        add(passwordLabel);
        passwordLabel.setFont(font);

        passwordField = new JPasswordField(20);
        passwordField.setBounds(110+i, 70+j, 200, 25);
        add(passwordField);


        loginButton = new JButton("Login");
        loginButton.setBounds(130+i, 110+j, 150, 30);
        add(loginButton);
        loginButton.setFont(font);

        loginButton.setBackground(new Color(110, 150, 250));
        loginButton.setForeground(Color.WHITE);
        loginButton.setBorder(null);


        registerButton = new JButton("注册");
        registerButton.setBounds(130+i, 150+j, 150, 30);
        add(registerButton);
        registerButton.setFont(font);
        registerButton.setBorder(null);

        ImageIcon image = new ImageIcon("image/m_Loginimage.jpg");
        // 创建一个标签来展示图片
        JLabel label = new JLabel(image);
        // 将标签的布局设置为null,这样我们可以手动设置图片的位置
        label.setLayout(null);
        // 设置标签的大小,使其覆盖整个窗口
        label.setBounds(0, 0, 600, 400);

        // 将标签添加到窗口的内容面板中
        this.getContentPane().add(label);

        // 设置窗口的其他属性,如大小、位置等
        this.setSize(image.getIconWidth(), image.getIconHeight());
        this.setVisible(true);

        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                if (db.authenticateUser(username, password)) {
                    new MainGUI();
                    dispose();
                } else {
                    JOptionPane.showMessageDialog(null, "用户名或密码错误");
                }
            }
        });

        registerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new RegisterDialog(LoginGUI.this);
            }
        });

        setVisible(true);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        new LoginGUI();
    }
}

RegisterDialog类:

public class RegisterDialog extends JDialog {
    private JTextField usernameField;
    private JPasswordField passwordField;
    private JButton registerButton;
    private Database db;

    public RegisterDialog(JFrame parent) {
        super(parent, "注册", true);
        db = new Database();
        setSize(300, 200);
        setLocationRelativeTo(parent);
        setLayout(null);

        JLabel usernameLabel = new JLabel("用户名:");
        usernameLabel.setBounds(30, 30, 80, 25);
        add(usernameLabel);

        usernameField = new JTextField(20);
        usernameField.setBounds(110, 30, 150, 25);
        add(usernameField);

        JLabel passwordLabel = new JLabel("密码:");
        passwordLabel.setBounds(30, 70, 80, 25);
        add(passwordLabel);

        passwordField = new JPasswordField(20);
        passwordField.setBounds(110, 70, 150, 25);
        add(passwordField);

        registerButton = new JButton("注册");
        registerButton.setBounds(110, 110, 80, 25);
        add(registerButton);

        registerButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                if (username.isEmpty() || password.isEmpty()) {
                    JOptionPane.showMessageDialog(RegisterDialog.this, "请输入用户名和密码");
                } else {
                    boolean success = db.registerUser(username, password);
                    if (success) {
                        JOptionPane.showMessageDialog(RegisterDialog.this, "注册成功");
                        dispose();
                    } else {
                        JOptionPane.showMessageDialog(RegisterDialog.this, "注册失败,请重试");
                    }
                }
            }
        });

        setVisible(true);
    }
}

MainGUI类:

public class MainGUI extends JFrame {
    private JMenuBar menuBar;
    private JMenu fileMenu, editMenu;
    private JMenuItem addMenuItem, editMenuItem, deleteMenuItem, searchMenuItem, statsMenuItem, logoutMenuItem;
    private JTable table;
    private DefaultTableModel tableModel;
    private JScrollPane scrollPane;
    private Database db;

    private void loadStudentData(DefaultTableModel tableModel) {
        tableModel.setRowCount(0); // 清空表格数据
        List<Student> students = db.getAllStudents();
        for (Student student : students) {
            Object[] row = {student.getId(), student.getName(), student.getAge(), student.getGender(), student.getStudentClass()};
            tableModel.addRow(row);
        }
    }

    private void showEditStudentWindow(DefaultTableModel tableModel) {
        JFrame editFrame = new JFrame("修改学生信息");
        editFrame.setSize(600, 400);
        editFrame.setLocationRelativeTo(null);
        editFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel editPanel = new JPanel(new BorderLayout());
        JTable editTable = new JTable();
        editTable.setModel(tableModel);
        JScrollPane scrollPane = new JScrollPane(editTable);
        editPanel.add(scrollPane, BorderLayout.CENTER);

        JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JTextField searchField = new JTextField(15);
        JButton searchButton = new JButton("查询");
        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String keyword = searchField.getText();
                if (!keyword.isEmpty()) {
                    List<Student> searchResult = searchStudents(keyword);
                    updateTable(tableModel, searchResult);
                } else {
                    loadStudentData(tableModel);
                }
            }
        });
        searchPanel.add(new JLabel("关键词:"));
        searchPanel.add(searchField);
        searchPanel.add(searchButton);
        editPanel.add(searchPanel, BorderLayout.SOUTH);

        editTable.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                int selectedRow = editTable.getSelectedRow();
                int studentId = (int) editTable.getValueAt(selectedRow, 0);
                Student student = db.getStudent(studentId);
                if (student != null) {
                    showEditStudentDetailWindow(student, tableModel);
                }
            }
        });

        editFrame.add(editPanel);
        editFrame.setVisible(true);
    }

六、创建数据库说明

JDK:17

数据库需要自己创建:

创建方法:点击右上角有一个数据库

点击+号新建

找到MySQL

点击驱动程序,然后在左边这一列找到mysql

点击右边这个版本,找到8.0以上的版本,然后会自动下载

然后再点击上面的数据源

密码自己设置,其他按照下面的来,然后点击确定

先点击刚刚创建的数据源,然后再点击查询控制台也就是下面那个QL的图标,打开默认控制台就行了

然后输入代码

CREATE DATABASE studentdb;
USE studentdb;

CREATE TABLE students ( 
id INT AUTO_INCREMENT PRIMARY KEY, 
name VARCHAR(100) NOT NULL, age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class VARCHAR(50) NOT NULL 
);

CREATE TABLE users ( 
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE, 
password VARCHAR(100) NOT NULL 
);

以下是数据创建(把之前的SQL代码删除在输入下面的)

INSERT INTO students (name, age, gender, class) VALUES
('Alice', 20, 'Female', 'Class 1'),
('Bob', 21, 'Male', 'Class 1'),
('Charlie', 22, 'Male', 'Class 2'),
('Diana', 20, 'Female', 'Class 2'),
('Eve', 23, 'Female', 'Class 3'),
('Frank', 21, 'Male', 'Class 3');

下面这个是账号和密码,需要写进数据库才能登录

INSERT INTO users (username, password) VALUES
('admin', 'admin123'),
('user1', 'password1');
比如账号是admin,密码是admin123

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

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

相关文章

hid-ft260驱动学习笔记 1 - 驱动模块注册与注销

目录 1. ft260_driver_init初始化 1.1 tty设备 1.1.1 申请tty驱动设备 1.1.2 初始化tty驱动程序 1.1.3 注册tty设备 1.2 hid设备 2. ft260_driver_exit注销模块 3. 调试 hid-ft260.c的最底部可以看到该驱动的注册与注销接口的申明。 module_init(ft260_driver_init); …

Nifi脚本组件ExecuteScript 的使用(一)

ExecuteScript 组件的基本使用 前面已经介绍过Nifi中基本的数据流程&#xff0c;这里介绍一下最为常用的一个组件&#xff0c;ExecuteScript processor&#xff0c;顾名思义ExecuteScript组件是一组以自定义脚本为主体的组件&#xff0c;意思就是&#xff0c;可以在该组件内部…

如何使用特殊的参数和符号来改变图像的风格、质量、比例

🪂🌹 /imagine prompt: 一朵白色的花,透明的花瓣,深如海水,晶莹剔透+露珠,8K,HD,常春藤,花卉,热带植物 --v 5 --ar 2:1 --c 80 --s 500 -v 5切换模型版本5--ar 2:1宽高比例为2:1--c 80混沌值为80--s 500样式值为500🧑🏼‍🎨Midjourney 动漫和插画风格 🌹…

Java视频点播网站

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

Redis的八种数据类型介绍

Redis 是一个高性能的键值存储&#xff0c;它支持多种丰富的数据类型。每种数据类型都有其特定的用途和底层实现。下面我将介绍 Redis 支持的主要数据类型及其背后的数据结构。 本人这里还有几篇详细的Redis用法文章&#xff0c;可以用来进阶康康&#xff01; 1. 字符串 (Stri…

Python数据分析-分子数据分析和预测

一、设计背景 分子结构设计与性质计算对研发新型高能量密度材料具有重要意义。机器学习作为一种大数据计算模型&#xff0c;可以避免复杂、危险的实验&#xff0c;大幅提高研发效率、降低设计和计算成本。本文基于机器学习的方法以及通过构建神经网络&#xff0c;实现对高能量…

网络基础:IS-IS协议

IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;是一种链路状态路由协议&#xff0c;最初由 ISO&#xff08;International Organization for Standardization&#xff09;为 CLNS&#xff08;Connectionless Network Service&#xff09;网络设计。…

TP8/6 子域名绑定应用

原www.xxx.com/admin改为admincms.xxx.com config/app.php 官方文档&#xff1a;ThinkPHP官方手册

fastadmin 如何给页面添加水印

偶然发现fastadmin框架有个水印插件&#xff0c;看起来漂亮&#xff0c;就想也实现这样的功能&#xff0c;看到需要费用。但是现成的插件需要费用&#xff0c;自己动手丰衣足食。说干就干。 1. 找到watermark.js &#xff0c;放到assets/js/ 下面 2.具体页面引入 <script…

基于单片机的粉尘检测报警防护系统研究

摘要 &#xff1a; 粉尘检测是环境保护的重要环节&#xff0c;传统的粉尘检测防护系统的预防方式较为单一。本文设计了一种基于单片机的粉尘检测报警防护系统&#xff0c;能有效地检测粉尘浓度&#xff0c;进行多种方式的报警防护&#xff0c;以保证工作人员的生命健康和安全。…

平价猫粮新选择!福派斯鲜肉猫粮,让猫咪享受美味大餐!

福派斯鲜肉猫粮&#xff0c;作为一款备受铲屎官们青睐的猫粮品牌&#xff0c;凭借其卓越的品质和高性价比&#xff0c;为众多猫主带来了健康与美味的双重享受。接下来&#xff0c;我们将从多个维度对这款猫粮进行解析&#xff0c;让各位铲屎官更加全面地了解它的魅力所在。 1️…

强大的文档编辑工具——坤Tools正式版 V0.4.4【免费的Word转PDF、PDF转Word、替换内容、转换图片、合并图片工具】

在这个信息爆炸的时代&#xff0c;我们每个人都像是一名勇敢的探险家&#xff0c;在茫茫的数据海洋中寻找着属于自己的宝藏。 软件链接&#xff1a;吾爱原创 | 全功能批量处理器&#xff0c;绿色版本&#xff01; 今天给大家带来一款功能强大的文档编辑工具——坤Tools正式版…

孙溟㠭篆刻《睡片原谅一切,醒来不问过往》

孙溟㠭篆刻《睡片原谅一切&#xff0c;醒来不问过往》 佛陀言&#xff1a;睡前原谅一切&#xff0c;醒来不问过往&#xff0c;珍惜所有不期而遇&#xff0c;看淡所有不辞而别甲辰夏溟㠭于寒舍小窗下刊。

Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测

章节内容 上一节我们完成了&#xff1a; Hive中数据导出&#xff1a;HDFSHQL操作上传内容至Hive、增删改查等操作 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…

KIVY 3D Rotating Monkey Head¶

3D Rotating Monkey Head — Kivy 2.3.0 documentation KIVY 3D Rotating Monkey Head kivy 3D 旋转猴子头 This example demonstrates using OpenGL to display a rotating monkey head. This includes loading a Blender OBJ file, shaders written in OpenGL’s Shading…

机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 快速安装 PyCharm IDE 工具 描述&#xff1a;虽然在之前我们安装了VScode&#xff0c;但是其对于使用Python来写大型项目以及各类配置还是比较复杂的&#xff0c;所以这里我们还是推…

docker buildx 交叉编译设置

dockerd配置文件 /etc/docker/daemon.json设置&#xff1a; rootubuntu:/etc/docker# cat daemon.json {"insecure-registries":["localhost:5000","127.0.0.1:5000","172.16.67.111:5000"],"features": {"buildkit&…

三、数据库系统(考点篇)

1、三级模式一两级映像 内模式&#xff1a;管理如何存储物理的 数据 &#xff0c;对数据的存储方式、优化、存放等。 模式&#xff1a;又称为概念模式&#xff0c; 就是我们通常使用的表这个级别 &#xff0c;根据应用、需求将物理数据划分成一 张张表。 外模式&#xff1a;…

springboot出租房租赁系统-计算机毕业设计源码80250

摘 要 随着城市化进程的不断推进&#xff0c;人口流动日益频繁&#xff0c;住房租赁需求逐渐增加。为了更好地满足人们对住房租赁服务的需求&#xff0c;本论文基于Spring Boot框架&#xff0c;设计并实现了一套出租房租赁系统。 首先&#xff0c;通过对市场需求和现有系统的调…

职升网:中级统计师是否属于中级职称?

中级统计师确实属于中级职称。 在统计专业人员的职称体系中&#xff0c;中级统计师占据了重要的位置&#xff0c;它属于中级职称范畴。这个职称体系包括初级、中级、高级和正高级四个层次&#xff0c;每个层次都对应着不同的专业技术岗位等级。初级职称只设助理级&#xff0c;…