小白学java------做一个歌手比赛系统(二)

2023-05-16

      完整代码加实验报告都在https://download.csdn.net/download/qq_39980334/11232331

我已经设置成0积分下载了,有需要的自行下载,如果页面打不开可能还在审核中(2020.7.7设置的),有问题的多看看代码和实验报告,我已经记不太清里面的代码的详细细节了。

好久没更新了,现在的界面进行了更新,连接上了数据库,虽然连接数据库出了很大的问题,我的配置是eclipse 32位+JDK1.6+SQL2008R2 下载了jdbc3.0驱动程序但还是连接不成功,网上找了很多方法依然连不上,最后下了JDK1.7 问题就解决了,更换JDK的时候要新建一个项目才能更换成功.

连上数据库之后的界面:

 

 

   依然还有一些功能没有实现,追加数据和评委评分基本上实现要求,添加的数据会插入数据库中,评委评分也会保存入数据库,但是没法在表格中刷新显示,只有下一次打开的时候才有刷新,这是需要改进的地方,还有排序功能,现在还在研究当中

我的数据库文件

评分界面

 

上代码:

主界面

 

package model1;


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;


import utils.DBHandler;






public class SingerManage extends JFrame implements ActionListener{
JPanel jp1, jp2,jp3,p,jp4;
JLabel jl1,jl2;
JButton jb1, jb2, jb3, jb4,jb5,jb6;
JTable jt;
JScrollPane jsp = null;
JTextField jtf;
JTable jt2 ;
JScrollPane jsp2 ;

Connection conn = null;
PreparedStatement ps = null;


public SingerManage(){

jp1 = new JPanel();
jtf = new JTextField(10);
jb1 = new JButton("数据查询");
jb1.addActionListener(this);
jl2 = new JLabel("欢迎进入歌手管理系统!");

jp3=new JPanel();
jl1 = new JLabel("请输入选手编号:");

jp1.add(jl2);

jp3.add(jl1);
jp3.add(jtf);
jp3.add(jb1);

jp2 = new JPanel();
jb2 = new JButton("成绩排序");
jb2.addActionListener(this);
jb3 = new JButton("追加数据");
jb3.addActionListener(this);
jb4 = new JButton("写入数据文件");
jb4.addActionListener(this);
jb5 = new JButton("评委评分");
jb5.addActionListener(this);
jb6 = new JButton("退出系统");
jb6.addActionListener(this);

jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);
jp2.add(jb6);

Singermodel singer=new Singermodel();
String[] columnNames={"姓名","编号","得分"};
jt = new JTable(singer.queryData(),columnNames);
jsp = new JScrollPane(jt);

jp2.setLayout(new GridLayout(5, 1));



this.add(jp1, "North");
this.add(jp2, "East");
this.add(jp3,"South");
this.add(jsp,"Center");

this.setTitle("歌手管理系统");
this.setSize(600, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){                  //数据查询
String n1=jtf.getText();
int n = Integer.valueOf(n1);
n = this.jt.getSelectedRow();

}else if(e.getSource()==jb3){                //追加数据
SingerAdd add=new SingerAdd();
Singermodel singer=new Singermodel();
jt = new JTable(singer);


}else if(e.getSource()==jb5){                //评委评分
  Judge jud=new Judge();
}else if(e.getSource()==jb2){               // "成绩排序"
Suquence squ=new Suquence();

}else if(e.getSource()==jb4){               //"写入数据文件"
DBHandler sql=new DBHandler();
sql.queryAll();
System.out.print(sql);
}else if(e.getSource()==jb6){            //"退出系统"
System.exit(0);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SingerManage demo = new SingerManage();
}



}

 

添加类:

 

package model1;


import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;


import model3.Add;
import model3.SqlConnection;


public class SingerAdd extends JDialog implements ActionListener  {
JPanel jp1,jp2,jp3;
JLabel jl1, jl2,jl3;
JButton jb1, jb2;
JTextField jf1, jf2,jf3;
public SingerAdd(){


jl1 = new JLabel("姓名");
jl2 = new JLabel("编号");
jl3 =new JLabel("得分");

jf1 = new JTextField();
jf2 = new JTextField();
jf3 = new JTextField();

jb1 = new JButton("添加");
jb2 = new JButton("取消");

jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();

jp1.setLayout(new GridLayout(4, 1));
jp2.setLayout(new GridLayout(4, 1));

jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);

jp2.add(jf1);
jp2.add(jf2);
jp2.add(jf3);
jp3.add(jb1);
jp3.add(jb2);

this.add(jp1, BorderLayout.WEST);
this.add(jp2, BorderLayout.CENTER);
this.add(jp3, BorderLayout.SOUTH);

jb1.addActionListener(this);

this.setTitle("追加数据");
this.setSize(300, 200);
this.setVisible(true);


  }


public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){   //添加
int q;
SqlFunction sql=new SqlFunction();
q=sql.add(jf1.getText(),jf2.getText(),jf3.getText());
if(q==1)
JOptionPane.showMessageDialog(SingerAdd.this,"添加成功!");
else
  JOptionPane.showMessageDialog(SingerAdd.this,"系统故障,请稍后在试!");
}
if(e.getSource()==jb2){   //取消
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
}


}

 

评分类:

package model1;


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;


import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


import model3.Score;
import model3.SqlConnection;


public class Judge extends JFrame implements ActionListener  {
JPanel jp1,jp2,jp3,jp4,jp5;
JLabel jl1, jl2,jl3,jl4;
JButton jb1, jb2,jb3;
JTextField jf1, jf2,jf3,jf4;
JTextArea ja1;
JFrame frame=new JFrame();


Container contentPane=frame.getContentPane();//获得放置组件的容器对象

@SuppressWarnings("deprecation")
public Judge(){
jl1 = new JLabel("请输入选手姓名");
jl2 = new JLabel("请输入选手编号");
jl3=new JLabel("请十个评委评分");
jb2=new JButton("得分");
   jb2.setBackground(Color.cyan);
jb2.addActionListener(this);

jf1 = new JTextField(10);
jf2 = new JTextField(10);
jf3 = new JTextField(10);
ja1=new JTextArea("",10,10);


jb1 = new JButton("Random");
jb1.addActionListener(this);
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp5= new JPanel();

jp1.add(jl1);
jp1.add(jl2);
jp1.add(jb2);

jp2.add(jf3);
jp2.add(jf1);
jp2.add(jf2);
jp2.add(jb1);

jp3.add(jl3);
jp3.add(ja1);




contentPane.setLayout(new GridLayout(1,1));//布局2行1列
jp1.setLayout(new GridLayout(4, 1));//面板布局3行1列
jp2.setLayout(new GridLayout(4, 1));//
jp3.setLayout(new GridLayout(1, 1));//
jp5.setLayout(new GridLayout(2, 2));//

jp5.add(jp1);//将面板1放入面板5中
jp5.add(jp2);//
jp5.add(jp3);//

contentPane.add(jp5);//将面板5放入框架容器




frame.pack();
frame.setTitle("评委评分");
frame.setSize(400,400);
frame.show();

}
public void countSore(String s){
StringTokenizer tokens=new StringTokenizer(s);//使用默认的分隔符集合:空格、换行、Tab符合回车作分隔符
     double sum=0;
     int i;
     List score=new ArrayList();
     for(i=0;i<=9;i++){
     
       String temp=tokens.nextToken();//从文本区取下一个数据
       double n = Double.valueOf(temp);
       sum+=n;
       score.add(n);
     } 
     double max=Collections.max(score);
     double min=Collections.min(score);
     sum=sum-max-min;
     double sc=sum/8;
     jf2.setText(""+sc);
}

public void random(){
int sum=0;
List list=new ArrayList();
for(int i=0;i<=9;i++){
int n=(int)(Math.random()*9+1);
sum+=n;
list.add(n);
}
int max=Collections.max(list);
   int min=Collections.min(list);
   sum=sum-max-min;
   int sc=sum/8;
   jf2.setText(""+sc);
        
}

public void actionPerformed(ActionEvent e) {
String name=jf3.getText();
String number=jf1.getText();

if(e.getSource()==jb2){    //得分
String s=ja1.getText();
countSore(s);
SqlFunction sql=new SqlFunction();
int  j=sql.score(jl2.getText(),jf2.getText());
if(j==1)
JOptionPane.showMessageDialog(Judge.this,"评分成功!");
else if(j==3)
  JOptionPane.showMessageDialog(Judge.this,"系统故障,请稍后在试!");
else
JOptionPane.showMessageDialog(Judge.this,"此歌手不存在!");

}else if(e.getSource()==jb1){         //随机
random();
SqlFunction sql=new SqlFunction();
int  j=sql.score(jl2.getText(),jf2.getText());
if(j==1)
JOptionPane.showMessageDialog(Judge.this,"评分成功!");
else if(j==3)
  JOptionPane.showMessageDialog(Judge.this,"系统故障,请稍后在试!");
else
JOptionPane.showMessageDialog(Judge.this,"此歌手不存在!");

}
}

数据库类:

package model1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;


public class SqlFunction{

 public Connection getConnection(){
 try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=massenge","lhx","1234567");
return con;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
     return null;
     
 }
 
 public void closeConnection(Connection connection){
 if(connection!=null)
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 }
 
 public List<Singer> queryAll(){
 List<Singer> siners=new ArrayList<Singer>();
 Connection con=getConnection();
 try{
  Statement stmt=con.createStatement();
  ResultSet rs=stmt.executeQuery("select * from massenge");
  while(rs.next()){
  Singer s=new Singer();
  s.setName(rs.getString("name"));
  s.setId(rs.getString("id

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小白学java------做一个歌手比赛系统(二) 的相关文章

  • VSCode中Git解决冲突的步骤

    VSCode中Git解决冲突的步骤 1 gt gt 合并分支后 如果存在冲突 右下角会出现一个提示框 提示 存在合并冲突 请在提交之前解决这些冲突 2 gt gt 左边导航第三个图标中 xff0c 找到产生冲突的文件 3 gt gt 打开文
  • VsCode一定要安装的几个插件

    1 Vetur VUE语法高亮 智能感知 Emmet等 xff0c 包含格式化功能 xff0c Alt 43 Shift 43 F xff08 格式化全文 xff09 xff0c Ctrl 43 K Ctrl 43 F xff08 格式化选
  • ccm-slam环境配置

    ccm slam 配置过程记录 介绍 xff1a 一种协同视觉slam方法 传统的slam是一个机器人完成定位与建图的任务 xff0c 但对于大范围的环境 xff0c 多机器人协同建图往往能提高效率 xff0c ccm slam就是基于这个
  • 从大到小排序,Comparator类型

    import java util Arrays import java util Comparator public class Main public static void main String args 注意 xff0c 要想改变默
  • 11种服务器编程语言对比(附游戏服务器框架) 2020.06

    各语言对比 语言版本TIOBE排名垃圾回收类型系统性能Web后端非Web后端特性Java142是中Python3 83是动态低C 43 43 174高不适合Node js147 是动态低PHP7 48是动态低不适合Go1 1412是中Rub
  • 【stm32定时器配置步骤和相关概念解析——LL库】

    系列文章目录 文章目录 系列文章目录前言一 cubeMX定时器介绍二 通用寄存器三 PWM模式四 LL库 PWM模式 xff08 定时器14为例 xff09 1 结构体说明2 LL库代码 前言 一 cubeMX定时器介绍 Slave Mod
  • 华为MateBook&暗影精灵游戏本恢复出厂设置

    总目录 文章目录 总目录前言一 华为MateBook恢复出厂设置1 接上电源2 重启 开机按F10 二 暗影精灵游戏本恢复出厂设置1 接上电源2 重启 开机按F11 前言 记一次个人华为笔记本和暗影精灵游戏本的恢复操作 xff0c 说不准下
  • C/C++类库大全(附github连接)

    C 43 43 资源大全中文版 浏览中发现一篇总结的很全的c c 43 43 类库 xff0c 在此做记录 xff0c 以备不时之需 github地址 xff08 内有各个库的源码连接 xff09 https github com jobb
  • VScode 中 Clangd 使用

    1 VScode 中 Clangd 使用 VScode 中 Clangd 优缺点 优点 占用系统资源确实比 C C 43 43 少了很多 xff0c 无论是 CPU 还是 内存的使用 xff08 最重要 xff09 缺点 操作相较于 C C
  • FreeRTOS 线程安全的printf输出(使用STM32F103)

    https blog csdn net baidu 23187363 article details 53811144 环境 STM32F103开发板 HAL库 xff08 标准库也没事换个串口输出函数就行 xff09 MDK5 28 ST
  • Windows下配置sphinx+reStructuredText详解

    Windows下配置sphinx 43 reStructuredText详解 最近有朋友想在windows下做个人笔记 xff0c 没有找到顺手的工具 xff0c 问我有什么好的工具推荐 正好前两天在网上看到一款做文档的利器sphinx 4
  • 进程的组成部分

    在UNIX系统中进程由以下三部分组成 xff1a 进程控制块PCB 数据段 正文段 进程控制块 PCB 是用来记录进程状态及其他相关信息的数据结构 PCB是进程存在的唯一标志 xff0c PCB存在则进程存在 系统创建进程时会产生一个PCB
  • 对一个程序的理解

    一 什么是程序 1 程序的结构 指令 数据 2 指令 操作CPU的一段指令集合 xff0c 更详细的说 xff0c 是对数据的加载 xff0c 移动 xff0c 以及需要进行的计算的集合 指令存储在 非易失存储器 xff08 一般指 xff
  • mv替换文件名前缀shell命令

    for name in prefix do mv name 96 echo e name sed s prefix g 96 done
  • VSCode Workspace使用,以及file.exclude、search.exclude的使用模板

    代码如下 xff1a 文件名 xff1a Project code workspace 文件描述 xff1a 此文件文件为VSCode工作区启动文件 文件内容 xff1a 代码路径 工作区设置 不包含的文件 包含路径 文件编码 针对的编译器
  • roslaunch turtlebot_gazebo turtlebot_world.launch 报错ResourceNotFound

    报错 xff1a ResourceNotFound gazebo ros 这里是引用 logging to home kwunphi ros log e14aa722 32b9 11ea 94f7 00d8613afe77 roslaunc
  • 基于MDK Keil将中断及中断服务函数定位到RAM中的.sct文件

    VectorTable ROM 0x08000000 0x00000200 VectorTable RAM 0x20000000 0x00000200 o RESET 43 First IntFunction ROM 0x08000200
  • Linux镜像各种文件名来源

    vmlinux或vmlinuz xff1a Linux直接编译得到 的elf文件 Image xff1a 上面的 elf 文件会比较大 xff0c 为了烧录方便 xff0c 会使用 objcopy工具制作成镜像文件 xff0c 叫 Imag
  • 字节序最本质的地方

    个人理解 xff1a 1 数据的传输路径是 内存 gt 总线 gt 内存 xff1b 2 内存有存放顺序 xff1b 3 总线有发送顺序 xff1b 4 不同的机器内存的存放顺序可能不同 xff1b 5 总线发送顺序也有不同 xff1b 所
  • gcc 关于目标平台相关选项的查询

    gcc target help 列出目标平台可以指定的选项 xff0c 包括gcc选项 汇编选项 链接选项 gcc help 61 target 列出目标平台可以指定的选项 xff0c 只有gcc选项 gcc march 61 armv7

随机推荐

  • 描述点云关键点提取ISS3D、Harris3D、NARF、SIFT3D算法原理

    ISS3D xff08 Intrinsic Shape Signatures 3D xff09 xff1a ISS3D算法是一种基于曲率变化的点云关键点提取算法 它通过计算每个点与其近邻点的曲率变化 xff0c 得到该点的稳定性和自适应尺度
  • 描述相机内部参数以及外部参数

    内部参数和外部参数是数字摄影测量中经常使用的两个概念 xff0c 它们分别用于描述相机内部性能和相机与物体之间的几何关系 内部参数 xff1a 内部参数是相机的内部性能参数 xff0c 包括焦距 主点位置 径向畸变等 这些参数决定了相机成像
  • 最优化建模、算法与理论(二)—— 典型优化问题

    参考书籍 最优化 xff1a 建模 算法与理论 文章目录 1 线性规划2 最小二乘问题3 复合优化问题4 随机优化问题5 半定规划6 矩阵优化7 整数优化附录 常用软件包 库或软件 1 线性规划 一般形式 min
  • 蒙特卡罗求积分(使用MATLAB实现,分层抽样,重点抽样,对偶变量,控制变量,Metropolis Hasting,Gibbs)

    蒙特卡罗求积分 64 author HCF 背景概述 为了解决某问题 xff0c 首先需要把它变成一个概率模型的求解问题 xff0c 然后产生符合模型的大量随机数 xff0c 最后对产生的随机数进行分析从而求解问题 xff0c 这种方法叫做
  • docker容器编译程序 的两种方案

    如果用docker 容器编译程序 有两种方案可供选择 1 xff0c 激活镜像作为slave编译 采用Jenkins提供的jnlp slave 或ssh slave 标准镜像二次封装 xff0c 或者初始镜像 xff0c 然后通过label
  • 安卓与串口通信-校验篇

    前言 一些闲话 时隔好几个月 xff0c 终于又继续更新安卓与串口通信系列了 这几个月太颓废了 xff0c 每天不是在睡觉就是虚度光阴 xff0c 最近准备重新开始上进了 xff0c 所以将会继续填坑 今天这篇文章 xff0c 我们来说说串
  • vscode的git冲突

    vscode的git冲突 vscode中使用git进行代码管理 xff0c 如果出现冲突了 xff0c git pull会报错 xff0c 需要进行以下步骤 xff1a git stash git pull git stash pop gi
  • 树莓派4b ubuntu mate 18.04设置开机自动登录,解决无HDMI无法开机问题

    一 树莓派4b ubuntu mate 18 04设置开机自动登录 之前安装的是树莓派4b Ubuntu server 的18 04版本 xff0c 通过命令行安装的ubuntu mate 18 04 xff0c 由于官方没有18 04ma
  • TX2 NX核心板-VNC远程桌面

    文章目录 前言一 前期准备二 TX2端安装VNC1 安装vino2 使能VNC服务3 编辑org gnome4 设置为Gnome编译模式5 设置VNC 登录密码6 配置本地网络地址为静态7 开机自启VNC 二 WINDOWS端安装VNC参考
  • docker(三)dockerfile

    文章目录 dockerfile构建过程基础知识dockerfile 的指令简单的dockerfile实验docker historyCMD 和 ENTRYPOUNT的区别举例 tomcat镜像 dockerfile构建过程 编写一个dock
  • FIND_IN_SET函数

    FIND IN SET函数是IN函数的升级版 功能类似 区别在于 如果是常量 xff0c 则可以直接用IN xff0c 否则要用FIND IN SET 函数 MySQL中原型为 xff1a FIND IN SET str strlist 假
  • 浅谈两轮平衡车的控制原理

    前言 xff1a 在IT行业摸爬滚打了好几年 xff0c 好不容易从学生熬成了社会人士 xff0c 通过自己的不断努力又从社会人士熬成了学生 这几年的修行 xff0c 同道博友给了我很多的帮助 xff0c 很早之前就有写博客的想法 xff0
  • 浅谈两轮平衡车的控制原理(续)

    前言 xff1a 上次云里雾里的说了一通 xff0c 不知道对平衡车的控制有没有说到点子上 单纯的讲解原理可能会很无聊 xff0c 但是作为一个技术宅来说 xff0c 就算头皮发麻也要接着看下去 哈哈 xff0c 吾理小子争取用通俗的语言把
  • 基于OpenCV3.0的车牌识别系统设计(一)--系统综述

    写在前面的话 车牌识别是图像处理技术的实际生活中一个非常重要的应用场景 xff0c 目前车牌识别系统已经非常完善 xff0c 识别准确率高达99 以上 作为学生 xff0c 在学习图像处理时 xff0c 自己搭建车牌识别系统是非常有价值的
  • 基于OpenCV3.0的车牌识别系统设计(二)--车牌提取

    写在前面的话 上一篇开篇博文写好之后找女朋友看了一下 xff0c 希望她提一点建设性建议 结果她很委婉的告诉我 xff0c 写的还行就是太表面了 xff0c 告诉我要注意细节的描述与具体的实现过程与原理等等 其实我只是想骗她看一下增加一下点
  • gazebo模型之间的转换:xacro>urdf>sdf

    gazebo模型之间的转换 xff1a xacro gt urdf gt sdf 前言1 xacro转urdf2 urdf转sdf3 其他工具结语 前言 gazebo的模型描述文件有三种形式 xff1a urdf xacro sdf urd
  • 电池SOC仿真系列-基于卡尔曼滤波算法的电池参数辨识

    基于 卡尔曼滤波算法电池参数辨识 本期在已经确定的电池模型的基础上 xff0c 建立二阶RC等效电路模型 以数学模型中的五个参数变量为卡尔曼滤波的状态变量 xff0c 根据已知的端电压数据估算出各个时刻的参数值 xff0c 进而得到相应的模
  • emWin 卡顿 触屏失效 黑屏 解决方法

    emWin初体验 刚学了uC OS体验到了操作系统的方便 xff0c 于是想体验下图形处理第三方的强大 xff0c emWin便是首选 我移植emWin一共遇到了两个问题 1 一直黑屏 最后实在整不出来 xff0c 有点郁闷 把例程和自己的
  • 小白学java——做一个歌手比赛系统(一)

    xfeff xfeff 完整代码加实验报告都在https download csdn net download qq 39980334 11232331 我已经设置成0积分下载了 xff0c 有需要的自行下载 xff0c 有问题的多看看代码
  • 小白学java------做一个歌手比赛系统(二)

    完整代码加实验报告都在 https download csdn net download qq 39980334 11232331 我已经设置成0积分下载了 xff0c 有需要的自行下载 xff0c 如果页面打不开可能还在审核中 xff08