首页 > 其他 > 详细

【实现】实现随机点名的签到程序

时间:2014-03-18 11:44:51      阅读:552      评论:0      收藏:0      [点我收藏+]

    在李家华程序的基础上,增加了 随机抽查的功能,具体见代码。好久没有写程序了,只是简单的一个小功能,也花了近2个多小时,查了网络上的一些资料才完成。

程序清单

/**
 * 程序功能:简单的签到程序图形界面化,能够保存签到后的结果
 * 作者:李家华
 * 时间:2014.03.14
 * QQ:*********联系博客
 * 修改:丁又专,2014.03.18,修改了字体、随机数等
 */

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Scanner;
import javax.swing.*;

public class RegisterApp {
	static int count2 = 0;
	static int count = 0;
	static String namel[][];
	static JLabel nameText =new JLabel();
	static String inname,outname;  
	static int numCheck = 0;	//随机抽查学生人数
	static int[] randArray;		//随机抽查学生序号
	
	static int aAbsent=0;
	static JLabel outlab =new JLabel();


	/**生成随机数组
	 * 输出:数值在[a,b]的数组,元素个数为num
	 * 输入:随机数的范围为[a,b],需要生成的随机数个数为num
	 */
	public static int[] createRandom(int a, int b, int num){
		//用集合HashSet来存储随机数,利用集合Set的特性——无重复元素
		java.util.HashSet<Integer> set1 = new java.util.HashSet<Integer>();
		int[] randArray = new int[num];
		
		java.util.Random r=new java.util.Random(); 
		while(set1.size()<num){
			set1.add(r.nextInt(b-a+1)+a);	//生成[a,b]之间均匀分布的随机数
		}
		//使用Iterator遍历Set中的所有元素,赋值到randArray数组中
		Iterator<Integer> it2 = set1.iterator();
		int i=0;
		while(it2.hasNext()){
			randArray[i++] = (Integer)it2.next();
		}
		Arrays.sort(randArray);		//对数组元素进行排序
		return randArray;
	}

	 public static void main(String[] args) throws FileNotFoundException {  


		//(a)运用图形界面知识,做出简单界面	
		JFrame frame = new JFrame("课堂签到程序");
		JLabel nameLab =new JLabel("请输入名字:");
		JButton yes =new JButton("到");
		JButton no =new JButton("缺席");
		JButton end =new JButton("统计");
		JPanel pan1=new JPanel();
		JPanel pan2=new JPanel();

		pan1.add(nameLab);
		pan1.add(nameText);
		pan2.add(yes);
		pan2.add(no);
		pan2.add(end);
		frame.setLayout(new BorderLayout(3,3));//使用BorderLayout布局
		frame.add(pan1,BorderLayout.NORTH);
		frame.add(pan2,BorderLayout.CENTER);
		frame.add(outlab,BorderLayout.SOUTH);
		frame.pack();
		frame.setSize(500,200);
		
		//使窗体居中
		int width = Toolkit.getDefaultToolkit().getScreenSize().width;
		int height = Toolkit.getDefaultToolkit().getScreenSize().height;
		frame.setLocation(width / 2-100 , height / 2-100);
		//设置字体参数
		nameText.setFont(new Font("", Font.BOLD, 22)); // 设置文字的字体及大小
		outlab.setFont(new Font("", Font.BOLD, 22));
		//窗体可视化
		frame.setVisible(true);
		
		/*(b)根据老师给出的签到程序RegisterApp.java,加以利用,使用命令行参数加载名单到nameText的标签上,
		     利用数组 存储学生学号,名字和输入流 Scanner类等知识   */
		if (args.length != 3) {  
			System.out.println("参数输入不对");  
			System.out.println("使用方法(示例):java RegisterApp 名单文件名称  班级名称  点名人数");  
			System.exit(0);  
		}  

		inname = args[0];  
		outname = args[1];  
		numCheck = Integer.parseInt(args[2]);
		
		File filein = new File(inname);  

		Scanner fin = new Scanner(filein);  
		Scanner fin1 = new Scanner(filein);  

		while (fin.hasNext()) {
			String str = fin.nextLine(); 
			if(!str.isEmpty()){   //考虑到文本的最后一行可能为空行的情况
				count++;  
			}			
		}  
		fin.close();  
		namel = new String[count][2];  
		for (int a = 0; a < count; a++) { 
			namel[a][0] = fin1.nextLine();  
		}  
		fin1.close();  
		
		//数组初始化,开始时全部名单标记为2
		for(int a = 0; a < count; a++){
			namel[count2][1] = "2"; 
		}
		
		//根据学生人数,产生相应的随机数组
		randArray = createRandom(0,count,numCheck);
		
		nameText.setText(namel[randArray[0]][0]);  

		//(c)通过按钮事件,读取名单,老师可以开始点名,最终统计把结果记录以文档输出
		yes.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (e.getActionCommand().equals("到") && count2 < numCheck) 
				{  
					namel[randArray[count2]][1] = "1";  
					count2++;  
					if(count2<numCheck){
						nameText.setText(namel[randArray[count2]][0]); 
					}else{
						//抽查结束
						nameText.setText("签到结束……");
					}
				}
			}
		});

		no.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("缺席") && count2 < numCheck) 
				{  
					namel[randArray[count2]][1] = "0";  
					count2++;  
					aAbsent++; 
					if(count2<numCheck){
						nameText.setText(namel[randArray[count2]][0]); 
					}else{
						nameText.setText("签到结束……");
					}
				}
			}
		});

		end.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				if (e.getActionCommand().equals("统计") && count2 == numCheck) {  

					//System.out.println(000000);
					File fileout = new File(outname+"--"+00+ ".txt");  
					try {  
						PrintWriter fout = new PrintWriter(fileout);  

						for (int a = 0; a < numCheck; a++) 
						{  
							String s = namel[randArray[a]][0] + "    " + namel[randArray[a]][1];  
							fout.println(s);  
						}  
						fout.close();
						outlab.setText("考勤结束:"+"抽查人数为"+numCheck+"人"+"一共有"+aAbsent+"个同学缺席");  

					}  
					catch (IOException e3) {  
						// TODO Auto-generated catch block  
						e3.printStackTrace();  
					}  
				}
			}
		});

	}
}


运行流程

数据文件下载:wl131

1. 把RegisterApp.java ,wl131.txt 两个文件放在同一个目录(如果在DOS环境下运行的话),假设放在 d:/demo 下

2. cd 到上目录

3. 编译该程序 javac RegisterApp.java

4. 运行该程序 java RegisterApp  wl131.txt  wl131 10      (wl131.txt:表示名单文件为wl131.txt, wl131:表示班级名称,10:表示抽查10人)

bubuko.com,布布扣


运行结果

bubuko.com,布布扣bubuko.com,布布扣

【实现】实现随机点名的签到程序,布布扣,bubuko.com

【实现】实现随机点名的签到程序

原文:http://blog.csdn.net/dyz1982/article/details/21420391

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!