基于mysql+jdbc+java swing的学生成绩信息管理系统

Java课程设计

前言

来csdn也有两年了,在这期间学了很多的知识,也跟着许多的大神做了几个小项目。但自己也在想什么时候能够有个自己的项目,之前在学校做过一个基于集合存储数据的学生信息管理系统,现在想着改进一下,于是趁着暑假做了一个小项目吧(基于mysql+jdbc+java swing的学生成绩信息管理系统)。一来是巩固自己的学习成果,二来是记录自己的学习历程,期待后面能做出更多的项目吧。

设计需求和思路

设计需求

1.利用jdbc将java程序与mysql建立连接

2.利用java swing将学生信息和成绩信息显现出来

3.通过使用sql指令来实现对学生信息和成绩信息的crud(增查改删)操作

设计思路

1.利用Navicat创建两个数据表(stu和classes),同时两个数据表用外键约束连接(

CONSTRAINT `fk_classes_stu` FOREIGN KEY (`class_id`) REFERENCES `stu` (`stu_num`) ON DELETE CASCADE

)

2.使用sql指令对数据表中数据进行增删改查,并通过java swing显示

3.查询所有学生信息,利用连接查询将两个数据表的信息一并显示

详细操作

1.设计主界面(登录注册界面)

账号和密码通过HashMap来存储,账号为键密码为值,利用其基本方法来添加账号密码(注册),以及登录。

package view;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;public class MainView extends JFrame {private Map<String,String> userhashmap=new HashMap<>();JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();JLabel welcome=new JLabel("欢迎来到学生信息管理系统");JLabel username=new JLabel("账号:");JLabel password=new JLabel("密码:");JTextField usernametext=new JTextField(10);JPasswordField passwordField=new JPasswordField(10);JButton confirm=new JButton("确认");JButton exit=new JButton("退出");JButton register=new JButton("注册");public MainView() {this.setTitle("学生信息管理系统");this.setSize(800, 500);this.setLayout(new GridLayout(4, 1,10,10));this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);p4.add(welcome);p1.add(username);p1.add(usernametext);p2.add(password);p2.add(passwordField);p3.add(confirm);p3.add(register);p3.add(exit);this.add(p4);this.add(p1);this.add(p2);this.add(p3);register.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==register){if(userhashmap.containsKey(usernametext.getText())){JOptionPane.showMessageDialog(null,"注册失败,您的账号已存在","警告",JOptionPane.WARNING_MESSAGE);return;}userhashmap.put(usernametext.getText(),passwordField.getText());JOptionPane.showMessageDialog(null,"注册成功","通知",JOptionPane.INFORMATION_MESSAGE);}}});confirm.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (e.getSource() == confirm) {if (userhashmap.containsKey(usernametext.getText())) {if (userhashmap.get(usernametext.getText()).equals(passwordField.getText())) {JOptionPane.showMessageDialog(null,"登陆成功","通知",JOptionPane.INFORMATION_MESSAGE);dispose();ManagerView mv=new ManagerView();mv.setVisible(true);} else {JOptionPane.showMessageDialog(null,"密码错误","警告",JOptionPane.WARNING_MESSAGE);}}else{JOptionPane.showMessageDialog(null,"该用户不存在","警告",JOptionPane.WARNING_MESSAGE);}}}});exit.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});}public static void main(String[] args) {MainView m=new MainView();m.setVisible(true);}
}

 

 2.设计学生信息管理界面和成绩信息管理界面

使用GridBagLayout布局设置左边为学生信息管理的按钮,右边为成绩信息管理的按钮

package view;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class ManagerView extends JFrame{JButton insert=new JButton("添加学生信息");JButton delete=new JButton("删除学生");JButton update=new JButton("学生信息修改");JButton query=new JButton("查询学生信息");JButton queryall=new JButton("查询所有学生信息");JButton insertclass=new JButton("添加成绩信息");JButton deleteclass=new JButton("删除成绩信息");JButton updateclass=new JButton("修改成绩信息");JLabel labelstu=new JLabel("学生管理系统");//设置“学生管理系统”标签JLabel labelclass=new JLabel("成绩管理系统");//设置“成绩管理系统”标签public ManagerView(){this.setTitle("学生成绩管理");this.setSize(1200,500);this.setLayout(new GridBagLayout());this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置每个按钮长,高为140,120Dimension dimension=new Dimension(140,30);//通过setPreferredSize()方法来设置按钮和标签大小,但要传入Dimension对象insert.setPreferredSize(dimension);delete.setPreferredSize(dimension);update.setPreferredSize(dimension);query.setPreferredSize(dimension);queryall.setPreferredSize(dimension);insertclass.setPreferredSize(dimension);deleteclass.setPreferredSize(dimension);updateclass.setPreferredSize(dimension);labelstu.setPreferredSize(dimension);labelclass.setPreferredSize(dimension);GridBagConstraints constraintsleft=new GridBagConstraints();constraintsleft.gridx = 0; // 列为0constraintsleft.gridy = GridBagConstraints.RELATIVE; // 按钮的行相对于前一个按钮的行constraintsleft.anchor = GridBagConstraints.CENTER; // 设置水平方向上的位置居中constraintsleft.fill = GridBagConstraints.HORIZONTAL; // 填充水平方向/*constraintsleft.weightx = 0.5; // 水平方向上的权重为0.5*/constraintsleft.insets = new Insets(5, 5, 5, 200); // 设置按钮的内边距constraintsleft.ipadx = 10;this.add(labelstu,constraintsleft);this.add(insert,constraintsleft);this.add(delete,constraintsleft);this.add(update,constraintsleft);this.add(query,constraintsleft);this.add(queryall,constraintsleft);GridBagConstraints constraintsright=new GridBagConstraints();constraintsright.gridx=1;constraintsleft.gridy = GridBagConstraints.RELATIVE; // 按钮的行相对于前一个按钮的行constraintsleft.anchor = GridBagConstraints.CENTER; // 设置水平方向上的位置居中constraintsleft.fill = GridBagConstraints.HORIZONTAL; // 填充水平方向/*constraintsleft.weightx = 0.5; // 水平方向上的权重为0.5*/constraintsleft.insets = new Insets(5, 200, 5, 5); // 设置按钮的内边距constraintsleft.ipadx = 10;this.add(labelclass,constraintsright);this.add(insertclass,constraintsright);this.add(deleteclass,constraintsright);this.add(updateclass,constraintsright);insert.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {InsertStuView insertStuView=new InsertStuView();insertStuView.setVisible(true);}});delete.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DeleteStuView deleteStuView=new DeleteStuView();deleteStuView.setVisible(true);}});update.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {UpdateStuview updateStuview=new UpdateStuview();updateStuview.setVisible(true);}});query.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {QueryStuView queryStuView=new QueryStuView();queryStuView.setVisible(true);}});insertclass.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {InsertClassView insertClassView=new InsertClassView();insertClassView.setVisible(true);}});deleteclass.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {DeleteClassView deleteClassView=new DeleteClassView();deleteClassView.setVisible(true);}});updateclass.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {UpdateClassView updateClassView =new UpdateClassView();updateClassView.setVisible(true);}});
/*        p1.add(insert);p2.add(delete);p3.add(query);p4.add(update);p5.add(orderby);*/queryall.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {QueryAllView queryAllView=new QueryAllView();queryAllView.setVisible(true);}});}
}

 3.设计学生信息操作

添加学生信息
package view;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import service.StuManage;public class InsertStuView extends JFrame {JLabel labelname=new JLabel("请输入您的姓名");JLabel labelgender=new JLabel("请输入您的性别");JLabel labelid=new JLabel("请输入您的学号");JTextField textname=new JTextField(15);JTextField textgender=new JTextField(15);JTextField textid=new JTextField(15);JButton confirm=new JButton("确定");JButton cancel=new JButton("取消");JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();public InsertStuView(){this.setSize(500,300);this.setTitle("请添加学生信息");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(new GridLayout(4,1,10,10));p1.add(labelname);p1.add(textname);p2.add(labelgender);p2.add(textgender);p3.add(labelid);p3.add(textid);p4.add(confirm);p4.add(cancel);this.add(p1);this.add(p2);this.add(p3);this.add(p4);confirm.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {StuManage.insertStudata(textname.getText(),textgender.getText(),textid.getText());} catch (Exception ex) {JOptionPane.showMessageDialog(null,"添加失败","警告",JOptionPane.WARNING_MESSAGE);}dispose();}});cancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dispose();}});}
}

通过学号删除学生,因为学号不会重复
package view;import service.StuManage;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class DeleteStuView extends JFrame {JLabel labelid=new JLabel("请输入您想删除学生的学号");JTextField textField=new JTextField(15);JPanel p1=new JPanel();JPanel p2=new JPanel();JButton confirm=new JButton("确定");JButton cancel=new JButton("取消");public DeleteStuView(){this.setSize(500,300);this.setLayout(new GridLayout(2,1,0,0));this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("删除学生");p1.add(labelid);p1.add(textField);p2.add(confirm);p2.add(cancel);p1.setBorder(BorderFactory.createEmptyBorder(70,0,0,0));this.add(p1);this.add(p2);confirm.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try{StuManage.deleteStudata(textField.getText());}catch(Exception ex){JOptionPane.showMessageDialog(null,"删除失败","警告",JOptionPane.WARNING_MESSAGE);}dispose();}});cancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dispose();}});}
}

 学生信息修改
package view;
import service.StuManage;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class UpdateStuview extends JFrame{
JLabel labeloldid=new JLabel("请输入您要修改学生的学号");
JLabel labelname=new JLabel("请输入您要修改后的姓名");
JLabel labelgender=new JLabel("请输入您要修改后的性别");
JLabel labelid=new JLabel("请输入您要修改后的学号");
JTextField textFieldoldid=new JTextField(15);
JTextField textname=new JTextField(15);
JTextField textgender=new JTextField(15);
JTextField textid=new JTextField(15);
JButton confirm=new JButton("确定");
JButton cancel=new JButton("取消");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JPanel p5=new JPanel();
public UpdateStuview(){
this.setSize(500,300);
this.setTitle("请修改学生信息");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new GridLayout(5,1,10,10));
p1.add(labeloldid);
p1.add(textFieldoldid);
p2.add(labelname);
p2.add(textname);
p3.add(labelgender);
p3.add(textgender);
p4.add(labelid);
p4.add(textid);
p5.add(confirm);
p5.add(cancel);this.add(p1);
this.add(p2);
this.add(p3);
this.add(p4);
this.add(p5);
confirm.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
StuManage.updateStudata(textname.getText(),textgender.getText(),textid.getText(),textFieldoldid.getText());
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,"修改失败","警告",JOptionPane.WARNING_MESSAGE);
}
dispose();
}
});
cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
}

 查询学生信息
package view;import service.ClassManage;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class QueryStuView extends JFrame {JLabel id=new JLabel("请输入学生的id");JTextField textid=new JTextField(15);JButton confirm=new JButton("确定");JButton cancel=new JButton("取消");JLabel labelstu=new JLabel("学生信息表");JLabel labelscore=new JLabel("成绩信息表");JPanel p1=new JPanel();JPanel p2=new JPanel();JPanel p3=new JPanel();JPanel p4=new JPanel();String[] stucolumnname={"姓名","性别","学号"};String[] scorecolumnname={"学科","分数","教师"};
public QueryStuView(){this.setLayout(new GridLayout(4,4,10,10));this.setTitle("学生信息查询");this.setSize(1000,700);DefaultTableModel stumodel=new DefaultTableModel();DefaultTableModel scoremodel=new DefaultTableModel();stumodel.setColumnIdentifiers(stucolumnname);scoremodel.setColumnIdentifiers(scorecolumnname);JTable stutable = new JTable(stumodel);JTable scoretable=new JTable(scoremodel);JScrollPane scrollstu=new JScrollPane(stutable);JScrollPane scrollscore=new JScrollPane(scoretable);p1.setBorder(BorderFactory.createEmptyBorder(70,0,0,0));p1.add(id);p1.add(textid);p2.add(confirm);p2.add(cancel);p3.add(labelstu);p3.add(scrollstu);p4.add(labelscore);p4.add(scrollscore);this.add(p1);this.add(p2);this.add(p3);this.add(p4);confirm.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try{stumodel.setRowCount(0);scoremodel.setRowCount(0);ClassManage.querystu(textid.getText(),stumodel,scoremodel);}catch(Exception ex){JOptionPane.showMessageDialog(null,"查找失败","警告",JOptionPane.WARNING_MESSAGE);}}});cancel.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {dispose();}});}
}

查询所有学生信息
package view;import service.ClassManage;import javax.swing.*;
import javax.swing.table.DefaultTableModel;public class QueryAllView extends JFrame{JLabel text=new JLabel("学生信息查询");DefaultTableModel model=new DefaultTableModel();JTable queryall=new JTable(model);JScrollPane jScrollPane=new JScrollPane(queryall);JPanel p1=new JPanel();JPanel p2=new JPanel();public QueryAllView(){this.setTitle("学生成绩查询");this.setSize(1000,700);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);String[] columnname={"姓名","性别","学号","科目","分数"};model.setColumnIdentifiers(columnname);p1.add(text);p2.add(jScrollPane);this.add(p1);this.add(p2);try{ClassManage.queryall(model);}catch(Exception ex){JOptionPane.showMessageDialog(null,"查询失败","警告",JOptionPane.WARNING_MESSAGE);}}
}

 功能效果展示

1.项目结构

 2.stu数据表和classes数据表初始数据

3.登录和注册功能演示

 

 

 

4.添加学生信息

 

 

5. 删除学生

 

6.学生信息修改

 

 7.查询学生信息

8.查询所有学生信息

 9.添加学生成绩

 

 10.删除学生成绩信息(学号为20210004的学生的Java成绩信息全被删除)

 11.修改学生成绩信息(修改学号为20210004的学生的C++成绩,修改为100)

 

 mysql数据表结构

1.学生数据表(stu)结构

 前言:先创建名为pro_stumanage的数据库,再使用改数据,其次再创建两个数据表

2.成绩数据表(classes)结构

tips:通过外键约束将classes的class_id和stu的stu_num关联,并且添加了删除的级联操作,这样删除学生,其成绩也会删除

 总结

花了三四天的时间做了个小项目,基本上我想要做的功能已基本实现了,能够基本实现对学生信息的增删改查操作。同时,我学到了很多之前没学到的知识,也对近期学的知识进行了巩固和复习。不过我是学完之后再做,所以可能有些bug和小问题,也欢迎各位来提问指正问题,也期待自己能够作出更多更优质的项目。如果想要源码可以直接私信或者通过百度网盘下载源码。

百度网盘下载链接:

链接:https://pan.baidu.com/s/1LKKdetbWrXk0K3Ynz-E6Sg
提取码:0718

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推广主要指标及定义

推广主要指标以直通车为例解释&#xff0c;如图所示 1.展示量&#xff1a;当消费者搜索某个词&#xff0c;推广计划在天猫直通车展示位上被买家看到的次数&#xff08;去掉被消费者快进划过、主图未完金展现等情况产生的曝光)&#xff1b; 2.点击量&#xff1a;消费者看到广告…

单片机的RTC获取网络时间

理解网络同步校准RTC的原理需要考虑NTP、SNTP、RTC这三个关键组件的作用和交互。下面详细解释这个过程&#xff1a; 1. NTP&#xff08;Network Time Protocol&#xff09;&#xff1a; 协议目的&#xff1a;NTP是用于同步计算机和设备时钟的协议。它通过在网络上与时间服务器通…

基于包围盒算法的三维点云数据压缩和曲面重建matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 包围盒构建 4.2 点云压缩 4.3 曲面重建 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................…

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测

多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | …

LeetCode刷题--- 优美的排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.cs…

TrustZone之与非安全虚拟化交互

到目前为止&#xff0c;我们在示例中忽略了非安全状态中可能存在的虚拟化程序。当存在虚拟化程序时&#xff0c;虚拟机与安全状态之间的许多通信将通过虚拟化程序进行。 例如&#xff0c;在虚拟化环境中&#xff0c;SMC用于访问固件功能和可信服务。固件功能包括诸如电源管理之…

关于“Python”的核心知识点整理大全43

目录 ​编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9…

【微服务面试题(三十三道)】

文章目录 微服务面试题&#xff08;三十三道&#xff09;概述1.什么是微服务&#xff1f;2.微服务带来了哪些挑战&#xff1f;3.现在有哪些流行的微服务解决方案&#xff1f;这三种方案有什么区别吗&#xff1f; 4.说下微服务有哪些组件&#xff1f; 注册中心5.注册中心是用来干…

网络编程套接字socket

哈哈哈&#xff0c;之前的保存成草稿忘了发 目录 一 . 先回顾一下网络初始中的相关概念&#xff1a; 1.网络通信&#xff1a; 2.局域网&#xff1a; 3.广域网&#xff1a; 4.IP地址&#xff1a; 5.端口&#xff1a; 概念 格式 6.协议&#xff1a; 7.五元组&#xff1a; 8.分层…

【cesium-4】cesium空间数据加载与管理

目录 一、cesium空间数据加载 1、cesium画线 2、cesium绘制矩形 3、cesium绘制平面 4、飞机模型加载 5、标签加载 6、cesium绘制多边形 二、cesium空间数据管理 一、cesium空间数据加载 空间数据包括&#xff1a; 矢量数据&#xff1a;几何体、模型、标签等&#xff…

如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…

单片机第三季-第七课:STM32中断体系

目录 1&#xff0c;NVIC 2&#xff0c;中断和事件的区别 3&#xff0c;优先级的概念 4&#xff0c;如何实际编程使用外部中断 5&#xff0c;STM32开发板通过按键控制LED 5.1&#xff0c;打开相应GPIO模块时钟 5.2&#xff0c;NVIC设置 5.3&#xff0c;外部中断线和配套…

【网络奇缘】——奈氏准则和香农定理从理论到实践一站式服务|计算机网络

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 失真 - 信号的变化 影响信号失真的因素&#xff1a; ​编辑 失真的一种现象&#xff1a;码间…

udp多播/组播那些事

多播与组播 多播&#xff08;multicast&#xff09;和组播&#xff08;groupcast&#xff09;是相同的概念&#xff0c;用于描述在网络中一对多的通信方式。在网络通信中&#xff0c;单播&#xff08;unicast&#xff09;是一对一的通信方式&#xff0c;广播&#xff08;broad…

Azure Machine Learning - Azure OpenAI GPT 3.5 Turbo 微调教程

本教程将引导你在Azure平台完成对 gpt-35-turbo-0613 模型的微调。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&…

使用travelbook架设自己的实时位置共享服务

travelbook 是一款开源的安卓APP&#xff0c;它能以低功耗提供实时位置共享&#xff0c;它包含功能如下&#xff1a; 好友之间分享实时位置&#xff1b;记录行程轨迹&#xff1b;标记收藏地点&#xff1b; 这款软件的主要解决的问题包括&#xff1a; 场景1&#xff1a;查看老…

云原生系列3-Kubernetes

1、Kubernetes概述 k8s缩写是因为k和s之间有八个字符。k8s是基于容器技术的分布式架构方案。官网&#xff1a;https://kubernetes.io/zh-cn/ Google在 2014年开源了Kubernetes项目&#xff0c;Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的…

智能优化算法应用:基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于原子轨道搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.原子轨道搜索算法4.实验参数设定…

uniapp在中app,登录页能记住多个账号以及密码功能完整代码

如图所示&#x1f447;&#xff1a; 1.可以选择下拉&#xff0c;选取曾经登录成功的账户&#x1f447; 2.选择好下拉后自动赋值&#xff0c;账号密码。 3.勾选记住我则记住该账户以及密码 4.选择下拉后&#xff0c;点选删除账户&#xff0c;则删除 <template><view…

【数据结构和算法】找到最高海拔

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 前缀和的解题模板 2.1.1 最长递增子序列长度 2.1.2 寻找数组中第 k 大的元素 2.1.3 最长公共子序列…