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

📄 examclient.java

📁 c/s客户端服务器的在线考试系统内含源码和试题
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Timer;
import java.util.TimerTask;

public class ExamClient extends Frame implements ActionListener, ItemListener,Runnable { // 客户端
	static String url = "";			 // 用于存放url的字符串
	Panel p1, p2, p3;				// p1是左下方的面板,p2是开始考试下面的第一个面板,p3是右下角的面板
	Label lab, lab1, lab2; 			// lab用于提示客户输入IP,lab1用于提示是否连接成功,lab2提示选择试题
	TextField tf1, tf2; 			// tf1用于输入IP,tf2显示时间
	Button b1, b2, b3, b4, b5, b6;// b1呼叫,b2将试题文件添加到下拉列表,b3开始考试,b4提交该题答案,b5读取下一题,b6查看得分
	Choice c;						// 下拉列表框选择试题
	int choicenum = 0;				// 列表框的数目
	int step = 0;					// 用于while循环的步骤
	TextArea ta1, ta2;				// ta1显示答案和分数,ta2显示试题
	CheckboxGroup cbg;				// 复选框
	boolean bConnected = false;		// 判断是否连接
	boolean isSelected = false;		// 判断下拉列表是否可用
	boolean success = false;		// 文件是否成功传送完毕
	Socket socket = null;			// socket
	Thread threadMessage = null;		// 用于控制时间的线程
	private DataInputStream inFromServer;	// 来自服务器的输入流
	private DataOutputStream outToServer;	// 发给服务器的输出流
	long alltime = 0;
	Timer timer = null;
	boolean stopwatch = true;

	public ExamClient(String title) {	// 构造方法
		super(title);
		timer = new Timer();
		threadMessage = new Thread(this);
	}

	public void startFrame() {		// 生成客户端面板的方法
		this.setSize(787, 545);		// 设置大小
		setVisible(true);			// 设置可见
		setResizable(false);		// 不能调整大小

		setLayout(null);			// 布局管理器为null
		addWindowListener(new WindowAdapter() { // 匿名内部类用于监听窗口关闭事件
			public void windowClosing(WindowEvent e) {
				System.out.println("退出考试系统了!");
				disconnect();		// 关闭连接
				System.exit(0);
			}
		});

		lab = new Label("输入服务器的IP或域名,如192.168.0.218");// label标签
		lab.setBounds(25, 30, 263, 24);	// 设置lab的位置和大小
		lab.setVisible(true);	// 可见
		add(lab);				// 添加到fram面板

		tf1 = new TextField(10); // 文本框
		tf1.setBounds(53, 136, 163, 24);
		tf1.setVisible(true);
		add(tf1);

		b1 = new Button("呼叫"); 		// 呼叫按钮
		b1.setBounds(223, 136, 44, 24);
		b1.addActionListener(this); 	// 给"呼叫"按钮注册监视器
		b1.setVisible(true);
		add(b1);

		lab1 = new Label("提示是否连接成功的标签"); // panel里的标签 用于提示登陆信息
		lab1.setAlignment(Label.CENTER);
		lab1.setBounds(53, 242, 230, 24);
		lab1.setVisible(true);
		add(lab1);

		p1 = new Panel(); 						// 第一个panel
		p1.setBounds(0, 237, 313, 313);
		p1.setVisible(false);					// 初始不显示,连接成功再显示

		lab2 = new Label("选择一个文件后,单击开始考试按钮"); // 第二个标签
		lab2.setAlignment(Label.CENTER);		// 居中放置
		lab2.setBounds(33, 106, 238, 24);
		lab2.setVisible(true);
		p1.add(lab2);							// 将lab2添加到p1

		b2 = new Button("将试题文件添加到下拉列表中"); // panel里的按钮,将试题文件添加到下拉列表中
		b2.setBounds(14, 214, 202, 24);
		b2.setVisible(true);
		b2.addActionListener(this); 			// 给"将试题文件添加到下拉列表中"按钮注册监视器

		p1.add(b2);

		c = new Choice(); 						// 下拉列表
		c.setBounds(223, 214, 78, 24);
		c.addItemListener(this);
		p1.add(c);

		add(p1);

		b3 = new Button("开始考试");				// 右边的组件 第一个按钮
		b3.setBounds(320, 26, 467, 28);
		b3.setVisible(true);
		b3.setEnabled(false);
		b3.addActionListener(this);				// 给"开始考试"按钮注册监视器
		add(b3);

		p2 = new Panel(); 						// 右边的组件 考试下面的第一个panel
		p2.setBounds(320, 56, 467, 387);
		p2.setVisible(false);

		ta1 = new TextArea("单击查看得分按钮,可以在这里看到得分和正确答案");// 用于查看分数的
		ta1.setBounds(0, 0, 467, 82);
		ta1.setVisible(true);
		ta1.setForeground(Color.RED);
		p2.add(ta1);

		ta2 = new TextArea("你选择了试题:" + "java.txt");// 用于显示试题内容和一些提示
		ta2.setBounds(0, 82, 467, 303);
		ta2.setVisible(true);
		ta2.setForeground(Color.BLUE);
		p2.add(ta2);

		p3 = new Panel(); 						// 右边的组件 考试下面的第二个panel
		p3.setBounds(320, 440, 467, 108);
		p3.setVisible(false);

		cbg = new CheckboxGroup();// 单选框
		Checkbox cb1 = new Checkbox("A", cbg, true);// 添加A
		cb1.addItemListener(this);// 给单选框A注册监视器
		Checkbox cb2 = new Checkbox("B", cbg, false);// 添加B
		cb2.addItemListener(this);// 给单选框B注册监视器
		Checkbox cb3 = new Checkbox("C", cbg, false);// 添加C
		cb3.addItemListener(this);// 给单选框C注册监视器
		Checkbox cb4 = new Checkbox("D", cbg, false);// 添加D
		cb4.addItemListener(this);// 给单选框D注册监视器

		cb1.setBounds(16, 18, 30, 20);// 设置位置和大小
		cb2.setBounds(56, 18, 30, 20);
		cb3.setBounds(96, 18, 30, 20);
		cb4.setBounds(136, 18, 30, 20);
		cb1.setVisible(true);		// 设置初始可见
		cb2.setVisible(true);
		cb3.setVisible(true);
		cb4.setVisible(true);
		p3.add(cb1);				// 添加到p3
		p3.add(cb2);
		p3.add(cb3);
		p3.add(cb4);

		b4 = new Button("提交该题答案");
		b4.setBounds(177, 16, 100, 24);
		b4.setVisible(true);
		b4.addActionListener(this); // 给"提交该题答案"按钮注册监视器
		p3.add(b4);

		b5 = new Button("读取下一题");
		b5.setBounds(284, 16, 87, 24);
		b5.setVisible(true);
		b5.addActionListener(this); // 给"读取下一题"按钮注册监视器
		p3.add(b5);

		b6 = new Button("查看得分");
		b6.setBounds(378, 16, 73, 24);
		b6.setVisible(true);
		b6.addActionListener(this); // 给"查看得分"按钮注册监视器
		p3.add(b6);

		tf2 = new TextField(""); // 用于显示时间的文本框
		tf2.setBounds(102, 60, 260, 24);
		tf2.setVisible(true);
		tf2.setForeground(Color.RED);
		p3.add(tf2);

		add(p2);
		add(p3);
	}

	public void connect() { 						// 连接服务器的方法
		try {
			url = tf1.getText();					// 从tf1取得字符串
			socket = new Socket(url, 5000);
			inFromServer = new DataInputStream(socket.getInputStream());// 获得输入流
			outToServer = new DataOutputStream(socket.getOutputStream());// 获得输出流
			// thread = new Thread(this);
			System.out.println("正在连接服务器...");						// 提示信息
			bConnected = true;											// 连接成功
			if (socket != null) {					// socket不为空时获得IP地址
				try {
					InetAddress address = socket.getInetAddress();
					p1.setVisible(true);								// p1显示出来
					lab1.setText("您呼叫:" + address + "成功");
					System.out.println("连接服务器成功!");
				} catch (Exception e) {
					System.out.println("找不到您要找的服务器!");
				}
			}
		} catch (Exception e) {
			System.out.println("您输入的IP地址有误!请重新输入!");			// 异常输出提示
			lab1.setText("您呼叫失败!请重新输入IP地址!");
			disconnect();												// 断开连接
			System.exit(-1);											// 退出客户端
		}
	}

	public void disconnect() { 										// 断开连接的方法
		try {
			if (outToServer != null) {								// 输出流不为空时关闭
				outToServer.close();
			}
			if (inFromServer != null) {								// 输入流不为空时关闭

⌨️ 快捷键说明

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