实训二——博客二
2018-12-26 21:57 wxl! 阅读(164) 评论(0) 编辑 收藏 举报团队作业所有同学的学号
16012118 黄硕(组长)
16012117 董琪
16012122 田朝阳
16012101 王雪莲
作业GIT的提交地址:https://gitee.com/tzy123/goldteamtraining_ii
团队编程的过程性照片:
团队分工,及每个团队成员的个人贡献分。
姓名 | 团队分工 | 个人贡献分 |
黄硕 | 数据库连接 | 10 |
董琪
|
修改代码 | 7 |
田朝阳
|
写游戏界面代码 | 9 |
王雪莲
|
修改代码 | 8 |
主要代码的功能解释:
//登录窗口 import javax.swing.*; public class Client_Login extends JFrame{ Client_Socket client; //Socket操作 JLabel label1; //标签 账号 JLabel label2; //标签 密码 JButton button1; //按钮 登陆 JButton button2; //按钮 注册 JTextField text1; //账号 文本框 JTextField text2; //密码 文本框 Client_Login(){ label1 = new JLabel("账号"); //标签初始化 label2 = new JLabel("密码"); text1 = new JTextField(); //文本框初始化 text2 = new JTextField(); button1 = new JButton("登陆"); //按钮初始化 button2 = new JButton("注册"); label1.setBounds(70, 30, 50, 25); //标签位置,大小 label2.setBounds(70, 60, 50, 25); text1.setBounds(120, 30, 160, 25); //文本框位置,大小 text2.setBounds(120, 60, 160, 25); button1.setBounds(75, 100, 80, 25); //按钮位置,大小 button2.setBounds(175, 100, 80, 25); setTitle("登录界面"); //设置窗口名称 setSize(427,427); //设置窗口大小 setLayout(null); //布局为空布局 setLocationRelativeTo(null); //窗口居中 setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置窗口关闭方式(关闭当前窗口) add(label1); //向窗口增加部件 add(label2); add(text1); add(text2); add(button1); add(button2); setVisible(true); //设置窗口可见 client = new Client_Socket(); //初始化Socket操作 button1.addActionListener(new Client_Login_button1(this)); button2.addActionListener(new Client_Login_button2()); } }
//注册窗口 import javax.swing.*; public class Client_zc extends JFrame{ JLabel label1; //标签 账号 JLabel label2; //标签 密码 JLabel label3; //标签 确认密码 JButton button1; //按钮 注册 JButton button2; //按钮 返回 JTextField text1; //账号 文本框 JTextField text2; //密码 文本框 JTextField text3; //确认密码 文本框 Client_zc(){ label1 = new JLabel("账号"); label2 = new JLabel("密码"); label3 = new JLabel("确认密码"); text1 = new JTextField(); text2 = new JTextField(); text3 = new JTextField(); button1 = new JButton("注册"); button2 = new JButton("返回"); label1.setBounds(50, 30, 50, 25); label2.setBounds(50, 60, 50, 25); label3.setBounds(50, 90, 60, 25); text1.setBounds(120, 30, 160, 25); text2.setBounds(120, 60, 160, 25); text3.setBounds(120, 90, 160, 25); button1.setBounds(75, 150, 80, 25); button2.setBounds(175, 150, 80, 25); setTitle("注册界面"); setSize(350, 240); setLayout(null); setLocationRelativeTo(null); setDefaultCloseOperation(DISPOSE_ON_CLOSE); add(label1); add(label2); add(label3); add(text1); add(text2); add(text3); add(button1); add(button2); button1.addActionListener(new Client_zc_button1(this)); button2.addActionListener(new AllWinClose_button(this)); setVisible(true); } }
//服务器信息窗口 import javax.swing.*; public class Server_DataWin extends JFrame{ static JTextArea area; //文本区 static JScrollPane js; //滚动面板 static Server_Match[] match; //当前可用的游戏对局 Server_Database mysql; //数据库操作 Server_Socket serverSocket; //Socket操作 Server_DataWin(){ area = new JTextArea(); //初始化文本区 area.setEditable(false); //文本区不可编辑 area.setBounds(30, 30, 300, 200); //文本框位置,大小 js = new JScrollPane(area); //将文本区添加到滚动面板中 js.setBounds(30, 30, 300, 200); //滚动面板位置,大小(必须与文本区一致) setTitle("服务器界面"); //设置窗口名称 setSize(370, 400); //设置窗口大小 setLayout(null); //窗口布局为空 setLocationRelativeTo(null); //窗口居中 setDefaultCloseOperation(EXIT_ON_CLOSE); //设置窗口关闭方式(退出程序) add(js); //向窗口增加部件(滚动面板) setVisible(true); //设置窗口可见 mysql = new Server_Database(); //初始化数据库操作 serverSocket = new Server_Socket(); //初始化Socket操作 } }
//数据库操作 import java.sql.*; public class Server_Database { Connection con; //用于与数据库建立连接 static Statement stmt; //用于发送sql语句 Server_Database(){ try { Class.forName("com.mysql.cj.jdbc.Driver"); //驱动信息 String url = "jdbc:mysql:// 127.0.0.1:3306/game? useSSL=true&characterEncoding=gb2312&serverTimezone=GMT%2B8"; //?之后是一些参数,不写的话很大几率报错 con = DriverManager.getConnection(url, "root", "111111"); stmt = con.createStatement(); Server_DataWin.area.append("数据库连接成功!\n"); }catch(Exception e) { Server_DataWin.area.append("数据库连接失败!"); } String sql ="create table `玩家信息`"+ "(`账号` char(20),`密码` char(10),`总场数` int,`总分数` int,`总胜利局数` int,"+ "primary key(`账号`))"; largeUpdata(sql); } static void largeUpdata(String s){ //用于创建表 try { stmt.executeLargeUpdate(s); }catch(SQLException e) {} } static void update(String s) { //用于更新数据 try { stmt.executeUpdate(s); }catch(SQLException e) {} } static String queryOne(String s) { //用于查询单一数据 ResultSet rs = null; String s1 = ""; try { rs = stmt.executeQuery(s); rs.next(); s1 = rs.getString(1); }catch(Exception e) {} return s1; } static String query1(String s) { //用于查询玩家信息 ResultSet rs = null; String data = ""; try { rs = stmt.executeQuery(s); rs.next(); data = "总场数: "+rs.getString(1)+"\n"; data = data+"总分数: "+rs.getString(2)+"\n"; data = data+"赢数: "+rs.getString(3)+"\n"; }catch(Exception e) {} return data; } }
//输入玩家个数 import java.util.Scanner; public class game { game(){ //输入玩家个数 游戏局数 System.out.println("请输入大于10的游戏人数:"); Scanner reader=new Scanner(System.in); int N=reader.nextInt(); System.out.println("游戏局数:"); int b=reader.nextInt(); Scanner scanner=new Scanner(System.in); double sum; double max,min; int maxzf=0; int minzf=0; int []zf=new int[100]; double []v=new double[100]; int [][]grade=new int[100][100]; for(int j=1;j<=b;j++) { sum=0.0; max=0.0; System.out.println("第"+j+"轮游戏"); for(int i=1;i<=N;i++) { System.out.print("请玩家"+i+"输入数字:"); double num=scanner.nextDouble();//玩家给出数字 while(num>=100||num<0){ System.out.println("请重新输入"); num=scanner.nextDouble(); } v[i]=num; sum=sum+num;//所有玩家的总分 } double G=(sum/N)*0.618;//计算G值 System.out.println("G="+G); min=Math.abs(v[1]-G);//MATH.ABS绝对值 //跟G比较,最近最远 for(int I=1;I<=N;I++) { if(Math.abs(v[I]-G)>=max) { max=Math.abs(v[I]-G); } if(Math.abs(v[I]-G)<=min) { min=Math.abs(v[I]-G); } } //将得分放到适当的位置 for(int m=1;m<=N;m++) { if(Math.abs(v[m]-G)==max) { grade[j][m]=-2; } else if(Math.abs(v[m]-G)==min) { grade[j][m]=N; } else { grade[j][m]=0; } System.out.println("第"+m+"名游戏玩家所得分数为:"+grade[j][m]); } } //求总分 for(int p=1;p<=N;p++) { for(int q=1;q<=b;q++) { zf[p]=grade[q][p]+zf[p]; } System.out.println("第"+p+"名玩家所得总分为:"+zf[p]); } //求最大值最小值 for(int s=1;s<=N;s++) { if(zf[s]>=maxzf) { maxzf=zf[s]; } if(zf[s]<=minzf) { minzf=zf[s]; } } //最大值最小值赋值输出 for(int t=1;t<=N;t++) { if(zf[t]==maxzf) { System.out.println("玩家"+t+"胜利!"); } if(zf[t]==minzf) { System.out.println("玩家"+t+"失败!"); } } } }
//一个Socket对应一个玩家 import java.io.*; import java.net.Socket; public class Server_SocketToClient{ Socket socket; DataInputStream in; DataOutputStream out; String user; String password; String sql; int isReady; //是否准备,0没准备,1追备好了 double num; //每轮提交的数字 int grade; //对局的成绩 Server_SocketToClient(Socket socket){ isReady = 0; grade = 0; num = 0; this.socket = socket; try { in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); new Server_SocketToClient_Receive(this).start(); }catch(Exception e) {} } void register(){ try { user = in.readUTF(); password = in.readUTF(); }catch(Exception e) {} sql = "select `账号` from `玩家信息` where `账号`='"+user+"'"; if(Server_Database.queryOne(sql).equals("")) { sql = "insert into `玩家信息` values('"+user+"','"+password+"',0,0,0)"; Server_Database.update(sql); sql = "create table `"+user+"-战绩`"+ "(`日期` date,`时间` time,`场级` char(6),"+ "`人数` int,`排名` int,"+ "primary key(`日期`,时间))"; Server_Database.largeUpdata(sql); try { out.writeUTF("注册成功"); }catch(Exception e) {} }else { try { out.writeUTF("此账号已存在"); }catch(Exception e) {} } } void login() { try { user = in.readUTF(); password = in.readUTF(); }catch(Exception e) {} sql = "select `账号` from `玩家信息` where `账号`='"+user+"'"; if(Server_Database.queryOne(sql).equals("")) { try { out.writeUTF("此用户不存在"); }catch(Exception e) {} }else { sql = "select `密码` from `玩家信息` where `账号`='"+user+"'"; if(Server_Database.queryOne(sql).equals(password)) { try { out.writeUTF("登陆成功"); }catch(Exception e) {} }else { try { out.writeUTF("密码错误"); }catch(Exception e) {} } } } void query() { String data = Server_Database.query1("select * from `"+user+"-战绩`"); String data1 = Server_Database.query1("select `总场数`,`总分数`,`赢数` from `玩家信息` where `账号`='"+user+"'"); try { out.writeUTF(data); out.writeUTF(data1); }catch(Exception e) {} } }
团队作业的运行截图:
小结感受:
在本次团队合作中,遇到了很多问题,虽然游戏代码可以正确运行,但是出现了新的问题就是无法将各个部分正确的连接在一起,尤其是数据库
的链接,这个人问题困扰了我们很长时间,虽然我们经过修改找资料,仍就无法正确连接,在其他小组引导下。终于成功了!。在此过程中,收
获了很多。也学会了付出,和吸取他人意见。