⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servermain.java

📁 抢答器
💻 JAVA
字号:
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.table.*;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

import java.util.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.regex.*;

public class ServerMain extends JFrame  implements Runnable,ActionListener
{

	/**
	 * @param args
	 */
	
	private ServerInfo serverInfo;
	
	private int currentQues=1;
	private String [] playerInfo;
	private ArrayList players = new ArrayList();
	private String currentNum;
	private boolean canAnswer = true;
	
	private JTable table = null;
	private MyTable1 defaultModel = null;
	private JLabel JLQuestion ;
	private JButton JBUp ;
	private JButton JBDown;
	
	private Socket currentSocket;
	
	private ArrayList orderNumList = new ArrayList();
	
	
	
	public ServerMain(ServerInfo serverInfo)
	{
		this.serverInfo = serverInfo;
		init();
	}
	
	private void init()
	{
		this.setTitle(serverInfo.getTitle());
		this.setBounds(0, 0, 900, 700);
		
		JPanel jpUp  = new JPanel();
		jpUp.setBackground(new Color(85,141,142));
		
		JPanel jpMid  = new JPanel();
		JPanel jpDown  = new JPanel();
		
		this.setLayout(new BorderLayout());
		this.add(jpUp,BorderLayout.NORTH);
		this.add(jpMid,BorderLayout.CENTER);
		this.add(jpDown,BorderLayout.SOUTH);
		
		
		JPanel jpDown1  = new JPanel();
		JPanel jpDown2 = new JPanel();
		jpDown1.setBackground(new Color(85,141,142));
		jpDown2.setBackground(new Color(85,141,142));
		jpDown.setLayout(new GridLayout(2,1));
		jpDown.add(jpDown1);
		jpDown.add(jpDown2);
		
		JLabel JLTitle = new JLabel(serverInfo.getTitle());
		JLTitle.setFont(new Font("宋体",Font.BOLD,80));
		jpUp.add(JLTitle);
		
		String[] n = {""};;
		String [][] p = new String[serverInfo.getQuestionNumber()+3][1];		
		p[0][0] = "学号";
		p[1][0] = "姓名";
		p[2][0] = "积分";
		for(int i=3; i<(serverInfo.getQuestionNumber()+3); i++)
		{
			p[i][0] = (String)( "第"+(i-2)+"题");
		}
			
			
			
		
		
		defaultModel = new MyTable1(p,n);
		
		
		//用Object[] 一样可以实现,就不用Vector了
		//Vector newVector = defaultModel.convert(newcolumn);
		
		
		table=new JTable(defaultModel);
		//让第一题所在行处于选中状态
		table.setRowSelectionInterval(currentQues+2, currentQues+2);
		//table.;
		//table.setFocusable(true);//
		
		table.setFont(new Font("宋体",Font.BOLD,50));
		table.setForeground(Color.RED);
		table.setRowHeight(60);
		table.setRowHeight(0, 100);
		table.setRowHeight(1, 100);
		table.setRowHeight(2, 100);
		//table.revalidate();
		//table.setPreferredScrollableViewportSize(new Dimension(400, 80));
		JScrollPane s = new JScrollPane(table);
		this.add(s,BorderLayout.CENTER);
		
		
		JLabel JLRule = new JLabel("竞赛规则:原始积分"+serverInfo.getInitScore()
				+"分,答对一题加"+serverInfo.getRightAddScore()
				+"分,答错一题扣"+serverInfo.getWrongSubScore()
				+"分,犯规罚扣"+serverInfo.getFaultSubScore()+"分。");
		jpDown1.setLayout(null);
		JLRule.setBounds(10, 10, 700, 20);
		JLRule.setFont(new Font("宋体",Font.BOLD,15));
		jpDown1.add(JLRule);
		
		JLQuestion = new JLabel("目前正在进行的是第1题");
		JBUp = new JButton("上一题");
		JBDown = new JButton("下一题");
		JBUp.setBackground(new Color(123,175,176));
		JBDown.setBackground(new Color(123,175,176));
		JBUp.setForeground(Color.RED);
		JBDown.setForeground(Color.RED);
		JLQuestion.setFont(new Font("宋体",Font.BOLD,20));
		JBUp.setFont(new Font("宋体",Font.BOLD,15));
		JBDown.setFont(new Font("宋体",Font.BOLD,15));
		jpDown2.add(JLQuestion);
		jpDown2.add(JBUp);
		jpDown2.add(JBDown);
		
		JBUp.addActionListener(this);
		JBDown.addActionListener(this);
		
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public ServerInfo getServerInfo()
	{
		return this.serverInfo;
	}
	
	public void setSocket(Socket currentSocket)
	{
		this.currentSocket = currentSocket;
	}
	
	public void setCanAnswer(boolean b)
	{
		canAnswer = b;
	}
	
	public void addQuesNum()
	{
		currentQues++;
		JLQuestion.setText("目前正在进行的是第"+(currentQues)+"题");
		table.setRowSelectionInterval(currentQues+2, currentQues+2);
		
	}
	
	public void update(int answerType, int quesType)
	{
		for(int i=1; i<defaultModel.getColumnCount();i++)
		{
			if(defaultModel.getValueAt(0, i).equals(currentNum))
				{
					updateScore(answerType,quesType,2,i);
					updateFlag(answerType,currentQues+2,i);
				}
		}
	}
	private void updateScore(int type, int quesType,int rowIndex,int colIndex)
	{
		String calScore = (String)defaultModel.getValueAt(rowIndex, colIndex);
		String result;
		switch(type)
		{
			case 1:
				result = new Integer(Integer.parseInt(calScore) +serverInfo.getRightAddScore()*quesType).toString();
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			case 2:
				result = new Integer(Integer.parseInt(calScore) -serverInfo.getWrongSubScore()*quesType).toString();
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			case 3:
				result = new Integer(Integer.parseInt(calScore) -serverInfo.getFaultSubScore()*quesType).toString();
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			default:
				System.out.println("答题结果类型错误!");
		}
	}
	
	private void updateFlag(int type,int rowIndex,int colIndex)
	{
		String flag = (String)defaultModel.getValueAt(rowIndex, colIndex);
		if(flag == null)
		{
			flag = "";
		}
		String result;
		switch(type)
		{
			case 1:
				result = flag+"√";
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			case 2:
				result = flag+"×";
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			case 3:
				result = flag+"※";
				defaultModel.setValueAt(result,rowIndex,colIndex);
				break;
			default:
				System.out.println("答题结果类型错误!");
		}
	}
	
	public void actionPerformed(ActionEvent e)
	{
		//static int i=0;
		Object command = e.getSource();
	
		if(command == JBUp)
		{
			if(currentQues > 1)
			{
				JLQuestion.setText("目前正在进行的是第"+(--currentQues)+"题");
				table.setRowSelectionInterval(currentQues+2, currentQues+2);
			}
			
		}
		if(command == JBDown)
		{
		
			JLQuestion.setText("目前正在进行的是第"+(++currentQues)+"题");
			table.setRowSelectionInterval(currentQues+2, currentQues+2);
		}
		
		
		
	}
	private boolean isOrderNumExist(String orderNum)
	{
		for(int i=0; i < orderNumList.size(); i++)
		{
			if(orderNum.equals((String)orderNumList.get(i)))
			{
				return true;
			}
		}
		
		return false;
	}
	public void run() 
	{
		// TODO Auto-generated method stub
		byte [] buf = new byte[1024];
		int len = 0;
		String reserveData;
			
		InputStream threadIs = null;
		OutputStream threadOs = null;
		try
		{
			threadIs = currentSocket.getInputStream();
			len = threadIs.read(buf);
			reserveData= new String(buf,0,len);
			
			System.out.println(reserveData);
			
			Pattern pattern = Pattern.compile(":");
			playerInfo = pattern.split(reserveData);
			players.add(playerInfo);
			
			String [] newcolumn = new String[serverInfo.getQuestionNumber()+3];
			
			threadOs = currentSocket.getOutputStream();
			if(isOrderNumExist(playerInfo[0]))
			{		
				
				threadOs.write("0".getBytes());
				System.out.println("failure");
				
			}
			else
			{
				threadOs.write("success".getBytes());
				orderNumList.add(playerInfo[0]);
				
				newcolumn[0] = playerInfo[0];
				newcolumn[1] = playerInfo[1];
				newcolumn[2] = new Integer(serverInfo.getInitScore()).toString();
				
				defaultModel.addColumn("",newcolumn);
				table.setRowHeight(0, 100);
				table.setRowHeight(1, 100);
				table.setRowHeight(2, 100);
				
			
			
				while(true)
				{
						
					len = threadIs.read(buf);
					if(canAnswer)
					{
						canAnswer = false;	
						currentNum= new String(buf,0,len);
						String [] player = null;
						for(int i=0;i < players.size();i++)
						{
							System.out.println("第"+i+"位选手");
							System.out.println(currentNum+"选手");
							
							player = (String [])players.get(i);
							
							if(player[0].equals(currentNum))
							{
								break;
							}
							
						}
						
						if(player != null)
						{
							System.out.println(player[0]);
							System.out.println(player[1]);
							new AnswerRight(player[0],player[1],this);
						}
					}
					
				}
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	
	}
	
	/*
	public String answerFirst()
	{
		Iterator itr = inputStreamList.iterator();
		
	}
	*/
	
	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		/*ServerInfo serverInfo = new ServerInfo();
		serverInfo.setTitle("sdfsdf");
			
			serverInfo.setRightAddScore("90");
			serverInfo.setWrongSubScore("90");
			serverInfo.setFaultSubScore("90");
			serverInfo.setInitScore("90");
			serverInfo.setPlayerNumber("90");
			serverInfo.setAnswerTime("90");
		ServerMain serverMain = new ServerMain(serverInfo);
		
		try
		{
			ServerSocket ss = new ServerSocket(9999);
			while(true)
			{
				Socket s = ss.accept();
				
				InputStream is = s.getInputStream();
				serverMain.setInputStream(is);
				
				new Thread(serverMain).start();
				
				
			}
		}
		catch(Exception e)
		{
			System.out.println("服务器套接字创建失败");
			e.printStackTrace();
		}
	*/	
	}

	

}

class MyTable1 extends DefaultTableModel
{
	
	public MyTable1()
	{
		super();
	}
	public MyTable1(Object[][] data, Object[] columnNames)
	{
		super(data,columnNames)	;
	}
	
	
	public boolean isCellEditable(int rowIndex,int columnIndex)
	{
		return false;
	}
	
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -