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

📄 web158_com.java

📁 java socket 网上在线考试系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	//选择
	//判断选项//自己定义类
	protected void getSelect(String str)
	{
		if(str.equals("A"))
		{
			examPanel.A.setSelected(true);
			examPanel.B.setSelected(false);
			examPanel.C.setSelected(false);
			examPanel.D.setSelected(false);
		}
		if(str.equals("B"))
		{
			examPanel.A.setSelected(false);
			examPanel.B.setSelected(true);
			examPanel.C.setSelected(false);
			examPanel.D.setSelected(false);
		}
		if(str.equals("C"))
		{
			examPanel.A.setSelected(false);
			examPanel.B.setSelected(false);
			examPanel.C.setSelected(true);
			examPanel.D.setSelected(false);
		}
		if(str.equals("D"))
		{
			examPanel.A.setSelected(false);
			examPanel.B.setSelected(false);
			examPanel.C.setSelected(false);
			examPanel.D.setSelected(true);
		}
	}//end of getSelect()
	void initQuestion(String question,String a,String b,String c,String d,String answer)
	{
		examPanel.txtinfo.setText(question);
		examPanel.txt_a.setText(a);
		examPanel.txt_b.setText(b);
		examPanel.txt_c.setText(c);
		examPanel.txt_d.setText(d);
		//是否已经答过
		if(!answer.equals("web158.com"))
		{
			getSelect(answer);
		}
		//第一次答题,把原来答案清空
		else
		{
			examPanel.A.setSelected(false);
			examPanel.B.setSelected(false);
			examPanel.C.setSelected(false);
			examPanel.D.setSelected(false);
		}
	}//end of initQuestion
	void getQuestion(int id,String flag)
	{
		//是否存在小于1的ID
		if(id<1)
		{
			JOptionPane.showMessageDialog(null, "请选择下一题,上一题不存在");
			return;
		}
		//如果是操作题目,没有上一条
		System.out.println(totalchoose);
		if(flag.equals("operate")&&id<=totalchoose)
		{
			JOptionPane.showMessageDialog(null, "请选择下一题,上一题不存在");
			return;
		}
		//开始数据库操作
		String driver="sun.jdbc.odbc.JdbcOdbcDriver";
		String dbUrl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=web158_exam/exam.dll";
		Statement stmt=null;
	 	Connection conn=null;
		
		//加载驱动
		//**************************
		try
		{
			Class.forName(driver);
		}
		catch(java.lang.ClassNotFoundException nofound)
		{
			JOptionPane.showMessageDialog(null, "读取试卷时数据驱动错误");
			System.err.println(nofound.getMessage());
			return ;
		}
		//开始添加试题	
		//**********************************
		try{
			//取选择题目
			if(flag.equals("choose"))
			{
				String sql="select * from exam where id="+id+"";
				conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
				stmt=conn.createStatement();
				ResultSet rs=stmt.executeQuery(sql);
				//如果题库中存在题
				if(rs.next())
				{
					String question=rs.getString("question");
					String a=rs.getString("a");
					String b=rs.getString("b");
					String c=rs.getString("c");
					String d=rs.getString("d");
					int nowid=rs.getInt("id");
					String stua=rs.getString("stuanswer");

					//初始化试题
					initQuestion(id+"、"+question,a,b,c,d,stua);
					//写上当前题号
					nowexamid=nowid;
				}
				else
				{
					System.out.println(nowexamid);
					totalchoose=nowexamid;//写清选择题目总数
					int n=JOptionPane.showConfirmDialog(this, "选择题已经答完,确定开始答操作题吗?","确认",JOptionPane.YES_NO_OPTION);
					if(n==JOptionPane.YES_OPTION)
					{
						//开始操作题
						initOperate();
						//提交按钮有效
						web158_com_submit.setEnabled(true);
						return ;
					}
					return ;
					
				}
				//关闭连接
				stmt.close();
				conn.close();
			}
			if(flag.equals("operate"))
			{
				String sql="select * from operate where id="+id+"";
				conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
				stmt=conn.createStatement();
				ResultSet rs=stmt.executeQuery(sql);
				//如果题库中存在题
				if(rs.next())
				{
					int nowid=rs.getInt("id");
					String question=rs.getString("question");

					//初始化试题
					initQuestion_operate(id+"、"+question);
					//写上当前题号
					nowexamid=nowid;
				}
				else
				{
					
					JOptionPane.showMessageDialog(null, "题目已经全部答完,如果需要更改请点击上一题,不需要更改请提交试卷");
					return ;
					
				}
				//关闭连接
				stmt.close();
				conn.close();
			}
		}
		catch(Exception ef)
		{
			JOptionPane.showMessageDialog(null, "你的试卷存在问题,请联系监考人员");
			System.out.println(ef.getMessage());
			return ;
		}
		finally
		{
			try
			{
				stmt.close();
				conn.close();
			}catch(Exception ef)
			{}
		}
	}

	//考试面板
	void getExamPanel()
	{
		initAccess("update exam set stuanswer='web158.com'");
		getQuestion(nowexamid,"choose");
		//web158_info();
		//timer.start();
		//先添加按钮事件
		examPanel.A.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				getSelect("A");
			}
		});
		examPanel.B.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				getSelect("B");
			}
		});
		examPanel.C.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				getSelect("C");
			}
		});
		examPanel.D.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				getSelect("D");
			}
		});
		//添加上一题下一题目按钮
		examPanel.button_last.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				if(isSelect()==false)
				{
					JOptionPane.showMessageDialog(null, "请选择答案");
					return;
				}
				String answer=getNowAnswer();
				initAccess("update exam set stuanswer='"+answer+"' where id="+nowexamid+"");
				//JOptionPane.showMessageDialog(null, answer);
				getQuestion(nowexamid-1,"choose");
			}
		});
		//下一题目
		examPanel.button_next.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				//是不是没有选择
				if(isSelect()==false)
				{
					JOptionPane.showMessageDialog(null, "请选择答案");
					return;
				}
				else
				{
					String answer=getNowAnswer();
					initAccess("update exam set stuanswer='"+answer+"' where id="+nowexamid+"");
					//JOptionPane.showMessageDialog(null, answer);
					getQuestion(nowexamid+1,"choose");
				}
			}
		});
		//添加
		web158_com_Cpanel.removeAll();
		web158_com_Cpanel.add(examPanel);
		web158_com_Cpanel.repaint();
		web158_com_Cpanel.validate();
	}//end of  getExamPanel()
	
	/**************************************************************************************
	 * 
	 *操作题目处理模块
	 */
	void initQuestion_operate(String question)
	{
		operatePanel.txtinfo.setText(question);
	}
	//添加操作题Panel
	void initOperate()
	{
		//提示信息
		txtinfo.setText("操作题答题要求:\n\n把所有操作题作完后,请在D盘myexam文件夹中新建文件夹exam,把所有试卷答案文件存到exam文件夹后打包成为exam.rar,然后提交试卷!");
		getQuestion(nowexamid+1,"operate");
		//添加上一题下一题目按钮
		operatePanel.button_last.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
				getQuestion(nowexamid-1,"operate");
			}
		});
		//下一题目
		operatePanel.button_next.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e)
			{
					getQuestion(nowexamid+1,"operate");
			}
		});
		//添加
		web158_com_Cpanel.removeAll();
		web158_com_Cpanel.add(operatePanel);
		web158_com_Cpanel.repaint();
		web158_com_Cpanel.validate();
	}
	
	

	//更新答案
	void initAccess(String sql)
	{
		String driver="sun.jdbc.odbc.JdbcOdbcDriver";
		String dbUrl="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=web158_exam/exam.dll";
		Statement stmt=null;
	 	Connection conn=null;
		
		//加载驱动
		//**************************
		try
		{
			Class.forName(driver);
		}
		catch(java.lang.ClassNotFoundException nofound)
		{
			JOptionPane.showMessageDialog(null, "读取试卷时数据驱动错误");
			System.err.println(nofound.getMessage());
			return ;
		}
		//开始添加试题	
		//**********************************
		try{
			conn=DriverManager.getConnection(dbUrl,"web158.com","web158.com");
			stmt=conn.createStatement();
			stmt.executeUpdate(sql);
			//关闭连接
			stmt.close();
			conn.close();
			
		}
		catch(Exception ef)
		{
			JOptionPane.showMessageDialog(null, "初始化选择题更新时失败");
			System.out.println(ef.getMessage());
			return ;
		}
		finally
		{
			try
			{
				stmt.close();
				conn.close();
			}catch(Exception ef)
			{}
		}
	}
	
	//提交试卷
	public void sendAnswer()
	{
		//需要返回的字
		//String str="";
		File f=new File("D:/myexam/exam.rar");
		if(!f.exists())
		{
			JOptionPane.showMessageDialog(null, "您的操作题答案文件不存在,请检查\n请查看"+f);
			return;
		}
		if(createAnswer(getChoose()))
		{
			JOptionPane.showMessageDialog(null, "多人提交可能速度很慢,请耐心等待");
			//开启发送试卷信息
			try
			{
				System.out.println("正在与服务器建立连接...");
				socket=new Socket(serverip,sendport);
	            System.out.println("连接已经建立");
	            out = new PrintWriter(socket.getOutputStream(),true);
	            out.println(stuid+"¤"+stuname+"¤"+score);
	            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
	            System.out.println(in.readLine()); //按行输入
	            String order=in.readLine();
	            System.out.print(order);
	            //如果是成功刚开始发送答案
	            if(order.equals("oksend"))
	            {
	            	try
	            	{
		            	//System.out.print("你发送的请求我收到,我现在给你发我的答案");
		            	Thread.sleep(100);
		            	nowSendAnswer("web158_exam/answer.dll");
		            	Thread.sleep(100);
		            	nowSendAnswer("D:/myexam/exam.rar");
		            	//删除文件
		            	delExt();
		            	JOptionPane.showMessageDialog(null, "试卷提交成功,请关闭系统退出考场,系统将自动在3分钟后退出");
		            	//初始退出面板
		            	//顶上的空地
		            	JLabel temp=new JLabel();
		            	temp.setPreferredSize(new Dimension(510,120));
		            	examed.add(temp);
		            	examed_label.setText("考试完毕,请退出系统离开考场!");
		            	examed_label.setFont(new Font("宋体",Font.BOLD,16));
		            	examed.setPreferredSize(new Dimension(510,445));
		            	examed.setOpaque(false);
		            	examed.add(examed_label);
		            	//更改面板
		            	web158_com_Cpanel.removeAll();
		            	web158_com_Cpanel.add(examed);
		            	web158_com_Cpanel.repaint();
		            	web158_com_Cpanel.validate();
		            	//不许重提交
		            	web158_com_submit.setEnabled(false);
		            	//关闭开始
		            	timer.stop();
		            	exitTimer.start();
	            	}catch(Exception ef)
	            	{
	            		System.out.println(ef.getMessage());
	            	}
	            	
	            }
	            else
	            {
	            	JOptionPane.showMessageDialog(null, "提交试卷出错,请联系监考人员手动提交");
	            }
	            out.close();
	            in.close();
	            socket.close();
	            //str="试题提取成功";
	            //return str;
			}
		    catch(IOException e)
		     	{
		         System.out.println("服务器没有开启"+e.getMessage()+serverip+":"+sendport);
		         JOptionPane.showMessageDialog(null, "提交试题失败,与服务器:"+serverip+":"+sendport+"建立连接失败...");
		        // return "提交试题失败,与服务器:"+serverip+":"+sendport+"建立连接失败...";
		         //return e.getMessage();
		     }
		     finally
		     {
		    	 try
		    	 {
		    	 socket.close();
		    	 out.close();
		    	 in.close();
		    	 }
		    	 catch(Exception ef)
		    	 {}
		     }
			
		}
		//return str;
	}
	//生成考试题文件
	boolean createAnswer(String question)
	{
		try
		{
			//创建文件对象
			File f=new File("web158_exam/answer.dll");
			//如果没有答案文件新建
			if(!f.exists())
			{
				f.createNewFile();
			}
			FileWriter writeto=new FileWriter(f);
			BufferedWriter out=new BufferedWriter(writeto);
			out.write(question,0,question.length());
			out.flush();
			out.close();
			writeto.close();
			return true;
		}
		catch(IOException e)
		{
			System.out.print(e.getMessage());
			return false;
		}
	}
	//向服务器发送答案
    public void nowSendAnswer(String f) 
    {
    	Socket clientSocket;
    	DataInputStream in;
    	DataOutputStream out;
        try {
                clientSocket = new Socket(serverip, receiveport);

                File file = new File(f);
                byte[] buffer = new byte[1024];
                int length = 0;

⌨️ 快捷键说明

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