家乡の战队实训项目博客二

                                                                            家乡の战队:黄金点项目博客二

 1.团队风采

组长:唐宇      16012020

队员:王松鹤  16012016

           刘计     16012024

           庞啸天 16012011

 

2.码云地址

https://gitee.com/wcnma/home_troops/tree/master

 

3. 团队分工

唐宇:团队组长,灵魂核心,领导组员完成java任务,是组员的导向标

评分:9

王松鹤:团队技术担当,高端技术人才,完成主要的java项目

评分:10

刘计:掌握了java的基础知识,擅长与客户交谈,无论客户都能凭三寸不烂之舌让客户满意(当然我们的产品也是棒棒的),完成展示项目

评分:7

庞啸天:完成Java项目细节上的部分,团队文案,完成博客

评分:8

 

4.代码展示

 

项目要求:

 

阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏:

 

N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分。记录每一次游戏每名同学的数字和分数。在实训一的基础上,自学书中第9章,第14章。将黄金点游戏开发成一个图形界面的,在局域网内,全班同学可以一起玩耍的小游戏。提供用户注册登录功能,与数据库进行连接,可以查看该用户以往的记录,根据同用以往的记录设立初级场和高级场,让用户有更友好的体验。

 代码部分:

Arrary.java

package wsh;

public class Arrary {
	public static int[] arrary = new int[3];
}


Client.java

package wsh;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

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

/**
 * 
 * @author Administrator
 *
 */

public class Client {
    public static void main(String[] args) {
        new ClientFrame("客户端");
    }
}

/*
 * 继承Jframe类表示该类可以创建一个窗口程序了,
 * 实现ActionListener:动作监听,就是一个事件发送后应该执行什么就要重新它的方法
 * 实现Runnable:实现多线程,该窗口是个客户端窗口,要开启一个线程接收显示服务器发过来的信息
 */
class ClientFrame extends JFrame implements ActionListener, Runnable {

    private static final long serialVersionUID = 1L;

    private Socket socket;
    OutputStream os = null;
    BufferedWriter bw = null;
    
    JTextArea message;
    JScrollPane scroll;
    JTextField input;
    JButton submit;
    JPanel panel;

    String uname = "";
    // 聊天页面
    JPanel chat;

    // 登录页面
    JPanel login;
    JTextField username;
    JButton ok;

    public ClientFrame(String name) {
        super(name);
    
        message = new JTextArea();
        message.setEditable(false);
        scroll = new JScrollPane(message);
        input = new JTextField(20);
        submit = new JButton("发送");
        panel = new JPanel();

        panel.add(input);
        panel.add(submit);
        chat = new JPanel(new BorderLayout());
        chat.add(scroll, "Center");
        chat.add(panel, "South");
        
        
        // 在创建客户端窗体是就要把客户端与服务端连接
        try {
            //127.0.0.1表示本机地址,地址好端口都可以改,这要看服务器那边是什么地址和端口
            socket = new Socket("127.0.0.1", 6666);
            os = socket.getOutputStream();
            bw = new BufferedWriter(new OutputStreamWriter(os));
            
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        
        /*    在创建C端窗体的时候也应该开启一个线程接收显示来自服务器的信息
         *     为什么要开启一个线程呢?因为在这个窗体里既要实现消息的发送,
         *     也要接收信息,而且两个不能按顺序进行,也互不干扰,所以开启一个线程时时刻刻等着S端发来的信息
         */
        //接收信息
        new Thread(this).start();
        
        //提交按钮工作监听器,点击提交时触发
        submit.addActionListener(this);

        login = new JPanel();
        username = new JTextField(20);
        ok = new JButton("确定");
        ok.addActionListener(this);
        JLabel label = new JLabel("请您选择功能");
        label.setFont(new Font(Font.DIALOG, Font.BOLD, 28));
        label.setForeground(Color.red);
        login.add(label);
        login.add(username);
        login.add(ok);

        this.add(chat);
        this.add(login);

        this.setResizable(false);
        this.setBounds(400, 100, 400, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == submit) {
            // 如果点击提交按钮,则表示需要将信息发送出去。
            String str = null;
            //以下三行是创建发送时间的代码
            Date date = new Date();
            SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
            String dateStr = format.format(date);
            
            str = uname+" "+dateStr+"  "+input.getText();
            
            try {
                bw.write(str);
                bw.newLine();
               System.out.println("客户端发送了:"+str);
                bw.flush();
            } catch (IOException e1) {
                System.out.println("无法发送,服务器连接异常!");
            }
            
//            System.out.println(str);
            
        } else if (e.getSource() == ok) {// 用户登录
            uname = username.getText();// 获取文本框输入的文本信息
            if ("".equals(uname)) {
                JOptionPane.showMessageDialog(this, "用户名不能为空!");
            } else {
                login.setVisible(false);
                chat.setVisible(true);
                this.setTitle(uname + " 的客户端");
                this.add(chat);
            }
        }
    }

    //run方法里面的是接受S端信息和将信息显示的代码
    @Override
    public void run() {
        BufferedReader br = null;
        InputStream is = null;
        String str = null;
        try {
            is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            while (true) {
                str = br.readLine()+"\r\n";
                message.append(str);
            }
        } catch (IOException e) {
            System.out.println("无法发送,服务器连接异常!");
        }
    }

}

DBHelper.java

package wsh;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

class DBHelper{
	public Connection connection;
	public PreparedStatement preparedStatement;
	
	public DBHelper() throws SQLException, ClassNotFoundException{
		Class.forName("org.mariadb.jdbc.Driver");
		connection = DriverManager.getConnection("jdbc:mariadb://localhost:3306/gd","test","123");
	}
	
	public ResultSet DB(String sql) throws ClassNotFoundException, SQLException{
		preparedStatement = connection.prepareStatement(sql);
	    ResultSet resultSet = preparedStatement.executeQuery();
	    return resultSet;
	}
	
	public void excuteSql(String sql) throws SQLException{
		preparedStatement = connection.prepareStatement(sql);
	    preparedStatement.executeUpdate();
	}
	
	public void downConn() throws SQLException{
		connection.close();
	}
	
}

Game.java

package wsh;

class Game {
	public void chuji() {
		shuru w = new shuru();
		w.game("初级场");
	}

	public void gaoji() {
		shuru w = new shuru();
		w.game("高级场");
	}
}

GoldenPoint.java

package wsh;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner; 
public class GoldenPoint {
public static void main(String[] args){
    GoldenPoint gd=new GoldenPoint();
    gd.goldPoint();
}
public void goldPoint(){
    HashMap<String,Double> inputMap=new HashMap<String,Double>();
    HashMap<String,Double> scoreMap=new HashMap<String,Double>();
    String name="";
    Double inputScore;
    int time;
    Double sum=0.0;
    Double aver=0.0;
    Scanner scan=new Scanner(System.in);
    for(int i=0;i<3;i++){
        System.out.println("请输入第"+(i+1)+"个参加者的姓名:");
        name=scan.next();
        System.out.println("请输入第一轮的数字:");
        System.out.println("数字范围在0~100!");
        inputScore=scan.nextDouble();
        if (inputScore<0||inputScore>100)
        {System.out.println("输入数字错误");
        break;}
        else
         inputMap.put(name, inputScore);
         scoreMap.put(name,(double) 0);
         sum+=inputScore;
    }
    aver=sum/3*0.618;
    System.out.println("aver="+aver);
    this.findWinner(inputMap, scoreMap, aver,3);
    this.show(scoreMap);
            
    
    System.out.println("游戏结束");
}
public void findWinner(HashMap<String,Double> inputMap,HashMap<String,Double> scoreMap,Double aver,int renshu){    
    Double temp;
    Double temp0;
    List<String> latest=new ArrayList<String>();
    List<String> farthest=new ArrayList<String>();
    Iterator iter = inputMap.entrySet().iterator();
    Map.Entry entry = (Map.Entry) iter.next();
    Double input = (Double) entry.getValue();
    String key0 = (String) entry.getKey();
    latest.add(key0);
    farthest.add(key0);
    temp0=temp=Math.abs(aver-input);
    while (iter.hasNext()) {    
        entry = (Map.Entry) iter.next();
        String key = (String) entry.getKey();
        input = (Double) entry.getValue();
        Double temp1=Math.abs(aver-input);
        if(temp>temp1){
            temp=temp1;
             latest.clear();
             latest.add(key);
        }else if(temp==temp1){
            latest.add(key);
        }
        if(temp0<temp1){
            temp0=temp1;
            farthest.clear();
            farthest.add(key);}
        else if(temp0==temp1){
            farthest.add(key);
        }
    }
    iter = scoreMap.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry0 = (Map.Entry) iter.next();
        String key = (String) entry0.getKey();
        Double score =(Double) entry0.getValue();
        if(this.containList(key, latest)){
            score=score+renshu;
            scoreMap.put(key, score);
            }
        if(this.containList(key, farthest)){
            score=score-2;
            scoreMap.put(key, score);
        }
        }
}
public boolean containList(String str,List<String> list){
    for(int i=0;i<list.size();i++){
        if(str.equals(list.get(i))){
            return true;
        }
    }
    return false;
}
public void show(HashMap<String,Double> scoreMap){
    System.out.println("得分情况:");
    Iterator iter = scoreMap.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry entry0 = (Map.Entry) iter.next();
        String key = (String) entry0.getKey();
        Double score =(Double) entry0.getValue();
        System.out.println(key+":"+score);
    }
}
}

 Login.java

package wsh;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import javax.swing.JPasswordField;
import javax.swing.JButton;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;

//1.定义Login类,
public class Login {

	// 1.在类中定义主函数
	public static void main(String[] args) {
		// 2.在主函数中,实例化Login类的对象,调用初始化界面的方法。
		Login login = new Login();
		login.initUI();

	}

	// 1.在类中定义初始化界面的方法;

	public void initUI() {
		// 3.在initUI方法中,实例化JFrame类的对象。
		JFrame frame = new JFrame();
		// 4.设置窗体对象的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小、可见、...
		frame.setTitle("Login");// 设置窗体的标题
		frame.setSize(400, 650);// 设置窗体的大小,单位是像素
		frame.setDefaultCloseOperation(3);// 设置窗体的关闭操作;3表示关闭窗体退出程序;2、1、0
		frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的居中位置,参数null表示窗体相对于屏幕的中央位置
		frame.setResizable(false);// 设置禁止调整窗体大小

		// 实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐,组件之间的间隔为5个像素
		FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);
		// 实例化流式布局类的对象
		frame.setLayout(fl);

		// 5.实例化元素组件对象,将元素组件对象添加到窗体上(组件添加要在窗体可见之前完成)。
		// 实例化ImageIcon图标类的对象,该对象加载磁盘上的图片文件到内存中,这里的路径要用两个\
		ImageIcon icon = new ImageIcon("/root/图片/b.gif");
		// 用标签来接收图片,实例化JLabel标签对象,该对象显示icon图标
		JLabel labIcon = new JLabel(icon);
		// 设置标签大小
		// labIcon.setSize(30,20);setSize方法只对窗体有效,如果想设置组件的大小只能用
		Dimension dim = new Dimension(400, 300);
		labIcon.setPreferredSize(dim);
		// 将labIcon标签添加到窗体上
		frame.add(labIcon);

		// 实例化JLabel标签对象,该对象显示"账号:"
		JLabel labName = new JLabel("账号:");
		// 将labName标签添加到窗体上
		frame.add(labName);

		// 实例化JTextField标签对象
		JTextField textName = new JTextField();
		Dimension dim1 = new Dimension(300, 30);
		// textName.setSize(dim);//setSize这方法只对顶级容器有效,其他组件使用无效。
		textName.setPreferredSize(dim1);// 设置除顶级容器组件其他组件的大小
		// 将textName标签添加到窗体上
		frame.add(textName);

		// 实例化JLabel标签对象,该对象显示"密码:"
		JLabel labpass = new JLabel("密码:");
		// 将labpass标签添加到窗体上
		frame.add(labpass);

		// 实例化JPasswordField
		JPasswordField textword = new JPasswordField();
		// 设置大小
		textword.setPreferredSize(dim1);// 设置组件大小
		// 添加textword到窗体上
		frame.add(textword);

		// 实例化JButton组件
		JButton button = new JButton();
		// 设置按钮的显示内容
		Dimension dim2 = new Dimension(100, 30);
		button.setText("登录");

		JButton button2 = new JButton();
		Dimension dim3 = new Dimension(100, 30);
		button2.setText("注册");

		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String login = textName.getText();
				String password = textword.getText();
				try {
					denglu ss = new denglu(login, password);
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		button2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String login = textName.getText();
				String password = textword.getText();
				try {
					zhuce aa = new zhuce(login, password);
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		// 设置按钮的大小
		button.setSize(dim2);
		frame.add(button);
		button.setSize(dim3);
		frame.add(button2);

		frame.setVisible(true);// 设置窗体为可见
	}

}

  
Server.java

 

package wsh;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;


public class Server {
    //用于保存Socket的集合,也可以说是把个C端与S端的一个连接通道保存起来
    //作用:服务器将接收到的信息发给集合里的所以socket,也就是发给每个C端
    public static List<Socket> list = new ArrayList<Socket>();

    public static void main(String[] args) {
        new ServerFrame("黄金点");
    }

}

/*
 * 继承Jframe类表示该类可以创建一个窗口程序了,
 * 实现ActionListener:动作监听,在S端点击“启动服务器”是要执行的代码
 * 实现Runnable:实现多线程,该窗口是个客户端窗口,要开启一个线程接收显示服务器发过来的信息
 */
class ServerFrame extends JFrame implements ActionListener, Runnable {

    private static final long serialVersionUID = 1L;

    private ServerSocket serverSocket = null;

    private Socket socket;

    private JButton start;
    private JTextArea message;

    public ServerFrame(String name) {
        super(name);

        start = new JButton("黄金点");
        start.addActionListener(this);
        message = new JTextArea();
        message.setEditable(false);
        this.add(start, "North");
        this.add(message, "Center");

        this.setResizable(false);
        this.setBounds(0, 0, 400, 300);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == start) {
            // 如果点击的按钮是开始按钮。则启动服务器。
            try {
                serverSocket = new ServerSocket(6666);
                message.setText("服务器已启动。。。");
                
                //单击“启动服务器”开启一个线程用于获取用户上线的情况
                new Thread(this).start();
                
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }

    //获取C端上线的情况
    @Override
    public void run() {
        String address = null;
        int port = 0;
        //用一个死循环一直让S端开启接收C端的连接,将C端的IP和端口显示在面板上
        //如果用循环的话就只能接收一次
        while (true) {
            try {
                socket = serverSocket.accept();
                Server.list.add(socket);
                address = socket.getInetAddress().getHostAddress();
                port = socket.getPort();
                message.append("\r\nip/" + address + ":" + port + "\t上线了");
                
               
            } catch (IOException e) {
//                System.out.println(address + ":" + port + "\t退出了服务器");
            }
        }
    }

}

  ServerReverse.java

package wsh;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.math.RoundingMode;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DecimalFormat;

/**
 * 文件传输Server端
 * 
 */
public class ServerReverse extends ServerSocket {

	private static final int SERVER_PORT = 8899;

	private static DecimalFormat df = null;

	static {

		df = new DecimalFormat("#0.0");
		df.setRoundingMode(RoundingMode.HALF_UP);
		df.setMinimumFractionDigits(1);
		df.setMaximumFractionDigits(1);
	}

	public ServerReverse() throws Exception {
		super(SERVER_PORT);
	}

	public void load() throws Exception {
		while (true) {
			Socket socket = this.accept();
			new Thread(new Task(socket)).start();
		}
	}

	class Task implements Runnable {

		private Socket socket;

		public Task(Socket socket) {
			this.socket = socket;
		}

		@Override
		public void run() {
	

				DataInputStream in1 = new DataInputStream(socket.getInputStream());
				DataOutputStream out1 = new DataOutputStream(socket.getOutputStream());
				
					int w = in1.readInt();
					Arrary.arrary[0] = w;
					System.out.println(Arrary.arrary[0]);
					out1.writeUTF("请等待");
				
				System.out.println("输入完毕!");
		
		
	}
	
		/**
		 * 入口
		 * 
		 * @param args
		 */
		public void main(String[] args) {
			try {
				ServerReverse server = new ServerReverse();
				server.load();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

  bl.java

package wsh;

class bl {

	public static int sc;


}

  
denglu.java

package wsh;

import java.awt.Color;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class denglu {

	public denglu(String name, String password) throws ClassNotFoundException, SQLException {
		// 默认输入的是字符串,所以建议测试的时候输入字符串

		String userID = name;

		String psw1 = password;
		// *代表的是所有列
		String sql2 = "select * from test where 用户名 =" + "'" + userID + "'" + "and 密码=" + "'" + psw1 + "'";
		// 每次新建一个对象,就是新建一个连接connection
		String sql3 = "select 胜场 from test";
		DBHelper dbHelper = new DBHelper();
		DBHelper DBcha = new DBHelper();
		ResultSet rs = DBcha.DB(sql3);
		while (rs.next()) {
			int number = rs.getInt(1);
			bl.sc= number;
			break;
		}
		// 在数据库中查询结果,若结果存在返回登录成功
		ResultSet rsResultSet = dbHelper.DB(sql2);
		if (rsResultSet.next() == true) {
			nmb q = new nmb();
			q.game();
			dbHelper.downConn();
		} else {
	        JFrame f = new JFrame("");
	        f.setSize(400, 150);
	        f.setLocationRelativeTo(null);
	        f.setLayout(null);
	        JLabel l = new JLabel("登录失败,请检查您的用户名和密码是否正确");
	        l.setForeground(Color.red);
	        l.setBounds(50, 50, 300, 30);

	        f.add(l);

	        f.setVisible(true);
			dbHelper.downConn();
		}

	}
}

  nmb.java

package wsh;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import javax.swing.JPasswordField;
import javax.swing.JButton;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;

class ButtonListener implements ActionListener {

	public void actionPerformed(ActionEvent e) {
		JButton button = (JButton) e.getSource();
		String str = button.getText();

	}
}

//1.定义Login类,
public class nmb {

	// 1.在类中定义主函数
	public void game() {
		// 2.在主函数中,实例化Login类的对象,调用初始化界面的方法。
		nmb game = new nmb();
		game.gameUI();

	}

	// 1.在类中定义初始化界面的方法;

	public void gameUI() {
		// 3.在initUI方法中,实例化JFrame类的对象。
		JFrame frame = new JFrame();
		// 4.设置窗体对象的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小、可见、...
		frame.setTitle("黄金点");// 设置窗体的标题
		frame.setSize(400, 650);// 设置窗体的大小,单位是像素
		frame.setDefaultCloseOperation(3);// 设置窗体的关闭操作;3表示关闭窗体退出程序;2、1、0
		frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的居中位置,参数null表示窗体相对于屏幕的中央位置
		frame.setResizable(false);// 设置禁止调整窗体大小

		// 实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐,组件之间的间隔为5个像素
		FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);
		// 实例化流式布局类的对象
		frame.setLayout(fl);

		// 5.实例化元素组件对象,将元素组件对象添加到窗体上(组件添加要在窗体可见之前完成)。
		// 实例化ImageIcon图标类的对象,该对象加载磁盘上的图片文件到内存中,这里的路径要用两个\
		ImageIcon icon = new ImageIcon("/root/图片/b.gif");
		// 用标签来接收图片,实例化JLabel标签对象,该对象显示icon图标
		JLabel labIcon = new JLabel(icon);
		// 设置标签大小
		// labIcon.setSize(30,20);setSize方法只对窗体有效,如果想设置组件的大小只能用
		Dimension dim = new Dimension(400, 300);
		labIcon.setPreferredSize(dim);
		// 将labIcon标签添加到窗体上
		frame.add(labIcon);
		JLabel ts = new JLabel("1.低级场 2.高级场");
		frame.add(ts);
		JLabel sc = new JLabel("您的胜场为" + bl.sc + "如果您的胜场大于5我们推荐您进入高级场");
		frame.add(sc);
		// 实例化JLabel标签对象,该对象显示"账号:"
		JLabel labName = new JLabel("请选择加入几人场");
		// 将labName标签添加到窗体上
		frame.add(labName);

		// 实例化JTextField标签对象
		JTextField textName = new JTextField();
		Dimension dim1 = new Dimension(300, 30);
		// textName.setSize(dim);//setSize这方法只对顶级容器有效,其他组件使用无效。
		textName.setPreferredSize(dim1);// 设置除顶级容器组件其他组件的大小
		// 将textName标签添加到窗体上
		frame.add(textName);

		// 实例化JButton组件
		JButton button = new JButton();
		// 设置按钮的显示内容
		Dimension dim2 = new Dimension(100, 30);
		button.setText("选择");
		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String ss = textName.getText();
				// String password = textword.getText();
				if (ss.equals("1")) {
					try {
						// denglu ss = new denglu(login, password);

						Game ss1 = new Game();
						ss1.chuji();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else if (ss.equals("2")) {
					try {
						// denglu ss = new denglu(login, password);

						Game ss1 = new Game();
						ss1.gaoji();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				} else {

					JFrame f = new JFrame("");
					f.setSize(200, 150);
					f.setLocationRelativeTo(null);
					f.setLayout(null);
					JLabel l = new JLabel("输入错误");
					// 文字颜色
					l.setForeground(Color.red);
					l.setBounds(50, 50, 280, 30);

					f.add(l);

					f.setVisible(true);

				}

			}
		});

		// 设置按钮的大小
		button.setSize(dim2);
		frame.add(button);

		frame.setVisible(true);// 设置窗体为可见
	}

}

  send.java

package wsh;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;

public class send extends Socket {

	private static final String SERVER_IP = "127.0.0.1";
	// private static final String SERVER_IP = "服务器IP";
	private static final int SERVER_PORT = 8899;

	private Socket client;

	public send() throws Exception {
		super(SERVER_IP, SERVER_PORT);
		this.client = this;
	}

	public void sendFile(String ff) throws Exception {

		DataInputStream in = new DataInputStream(client.getInputStream());
		DataOutputStream out = new DataOutputStream(client.getOutputStream());
		out.writeUTF(ff);
		String z = in.readUTF();
		System.out.println(z);

	}

	/**
	 * 入口
	 * 
	 * @param args
	 */
	public void good(String ff) {
		try {
			send client = new send(); // 启动客户端连接
			client.sendFile(ff); // 传输文件
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

  shuru.java

package wsh;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import javax.swing.JPasswordField;
import javax.swing.JButton;

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;

//1.定义Login类,
public class shuru {

	// 1.在类中定义主函数
	public void game(String w) {
		// 2.在主函数中,实例化Login类的对象,调用初始化界面的方法。
		shuru game = new shuru();
		game.gameUI(w);

	}

	// 1.在类中定义初始化界面的方法;

	public void gameUI(String w) {
		// 3.在initUI方法中,实例化JFrame类的对象。
		JFrame frame = new JFrame();
		// 4.设置窗体对象的属性值:标题、大小、显示位置、关闭操作、布局、禁止调整大小、可见、...
		frame.setTitle(w);// 设置窗体的标题
		frame.setSize(400, 650);// 设置窗体的大小,单位是像素
		frame.setDefaultCloseOperation(3);// 设置窗体的关闭操作;3表示关闭窗体退出程序;2、1、0
		frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的居中位置,参数null表示窗体相对于屏幕的中央位置
		frame.setResizable(false);// 设置禁止调整窗体大小

		// 实例化FlowLayout流式布局类的对象,指定对齐方式为居中对齐,组件之间的间隔为5个像素
		FlowLayout fl = new FlowLayout(FlowLayout.CENTER, 10, 10);
		// 实例化流式布局类的对象
		frame.setLayout(fl);

		// 5.实例化元素组件对象,将元素组件对象添加到窗体上(组件添加要在窗体可见之前完成)。
		// 实例化ImageIcon图标类的对象,该对象加载磁盘上的图片文件到内存中,这里的路径要用两个\
		ImageIcon icon = new ImageIcon("/root/图片/b.gif");
		// 用标签来接收图片,实例化JLabel标签对象,该对象显示icon图标
		JLabel labIcon = new JLabel(icon);
		// 设置标签大小
		// labIcon.setSize(30,20);setSize方法只对窗体有效,如果想设置组件的大小只能用
		Dimension dim = new Dimension(400, 300);
		labIcon.setPreferredSize(dim);
		// 将labIcon标签添加到窗体上
		frame.add(labIcon);
		JLabel ts = new JLabel("请输入你的数字:");
		frame.add(ts);

		// 实例化JTextField标签对象
		JTextField textName = new JTextField();
		Dimension dim1 = new Dimension(300, 30);
		// textName.setSize(dim);//setSize这方法只对顶级容器有效,其他组件使用无效。
		textName.setPreferredSize(dim1);// 设置除顶级容器组件其他组件的大小
		// 将textName标签添加到窗体上
		frame.add(textName);

		// 实例化JButton组件
		JButton button = new JButton();
		// 设置按钮的显示内容
		Dimension dim2 = new Dimension(100, 30);
		button.setText("确定");

		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				String shuzi = textName.getText();

				send ww;
				try {
					ww = new send();
					ww.good(shuzi);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});

		// 设置按钮的大小
		button.setSize(dim2);
		frame.add(button);

		frame.setVisible(true);// 设置窗体为可见
	}

}

  zhuce.java

package wsh;

import java.awt.Color;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import javax.swing.JFrame;

import javax.swing.JLabel;

public class zhuce{
	public zhuce(String login,String password) throws ClassNotFoundException, SQLException{
		//默认输入的是字符串,所以建议测试的时候输入字符串

			System.out.println("用户名:");
			Scanner scanner = new Scanner(System.in);
			//获取用户名
			String userID = login;
			System.out.println("密码:");
			Scanner scanner2 = new Scanner(System.in);
			//获取密码
			String psw1 = password;
			//先检查用户名是否存在,若不存在则继续注册
			String sql2 = "select * from test where 用户名 ="+"'"+userID+"'";
			DBHelper DBquery = new DBHelper();
			ResultSet rsSet =  DBquery.DB(sql2);
			if (rsSet.next()) {
				System.out.println("该用户名已被注册,请更换您的用户名再进行注册");
				DBquery.downConn();
				}
			else{
				String sql = "insert into test(用户名,密码,胜场) values ("+userID+","+psw1+","+0+")";
				DBHelper DBupdate = new DBHelper();
				DBupdate.excuteSql(sql);
				System.out.println("恭喜您注册成功");

		        JFrame f = new JFrame("");
		        f.setSize(200, 150);
		        f.setLocationRelativeTo(null);
		        f.setLayout(null);
		        JLabel l = new JLabel("恭喜您注册成功");
		        //文字颜色
		        l.setForeground(Color.red);
		        l.setBounds(50, 50, 280, 30);

		        f.add(l);

		        f.setVisible(true);
				//关闭connection的连接哦,防止泄露
				DBupdate.downConn();
				scanner.close();
				scanner2.close();
			}
		}
	
}
	

	

  

 

 运行截图:

 

    

5.总结

一根筷子折得断,四根筷子谁顶得住啊!虽然这是个相对复杂的项目,但是不要一个人扛,团队的力量才是最大的,短短几天就让我们明白了团队的重要,也让我们明白了自身能力的不足,在Java中我们还需要继续学习,完善自身的不足,在日后的工作学习生活中有用武之地。

 

 

 

 

转载于:https://www.cnblogs.com/838428689pxt/p/10173435.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值