第三周作业-实现随机点名的签到程序 非头像版

虽然只做出了文件选择框和实习随机点名!但花费还是挺多时间的!

实现文件选择框的 FileDialog 类比较难实现,我花了很多时间研究却还是用不上,最后改用 JFileChooser类 却很简单实现了。

(这个看似简单的文件选择框坑了我很多时间- -!)

随机抽查的话,我直接看了丁老师的方法后 理解上加以利用!   

缺点:界面总体上看也不美观!!!


/**
 * 程序功能:签到程序GUI增加功能:能够使用文件选择框,和随机抽查人数
 * 作者:李家华
 * 时间:2014.03.20
 * QQ:*********联系博客
 */

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
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.Iterator;
import java.util.Scanner;
import javax.swing.*;

public class Registre1 {
	static int count2 = 0;
	static int count = 0;  //记录名单数据人数
	static String namel[][];
	static JLabel nameText =new JLabel();
	static String inname,outname;  
	static int aAbsent=0;
	static JLabel outlab =new JLabel();
	static JButton open = new JButton("选择文件");
	static File filein;  
	static JFileChooser filechoose;
	static FileDialog fd;
	static JTextField rs= new JTextField(3);
	static JButton act = new JButton("开始");
	static String nu;    //获取文本框数值

	static int numCheck = 0;	//随机抽查学生人数
	static int[] 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();
		//fd=new FileDialog(new Frame(),"测试",FileDialog.LOAD);
		filechoose = new JFileChooser();  

		pan1.add(nameLab);
		pan1.add(nameText);
		pan1.add(rs);
		//pan1.add(act);
		pan2.add(open);
		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);
		frame.setVisible(true);
		nameText.setFont(new Font("", Font.BOLD, 15)); 
		outlab.setFont(new Font("", Font.BOLD, 20));
		nameLab.setFont(new Font("", Font.BOLD, 20));
		yes.setFont(new Font("", Font.BOLD, 20));
		no.setFont(new Font("", Font.BOLD, 20));
		end.setFont(new Font("", Font.BOLD, 20));
		open.setFont(new Font("", Font.BOLD, 20));

		nameText.setText("请输入人数和选择文件");
		outlab.setText("欢迎使用课堂签到程序 = =!");

		open.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if (e.getActionCommand().equals("选择文件")) {  
					nu=rs.getText();
					int result = filechoose.showOpenDialog(filechoose);  
					if(result==0){  
						try { 
							numCheck =Integer.parseInt(nu);  
							filein=filechoose.getSelectedFile();  
							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();  
							}  

							//根据学生人数,产生相应的随机数组
							randArray = createRandom(0,count,numCheck);
							fin1.close();  

							nameText.setText(namel[randArray[0]][0]);  

						} catch (FileNotFoundException e1) {  
							// TODO Auto-generated catch block  
							e1.printStackTrace();  
						}  
					}else {
						outlab.setText("请输入文件");
					}
				}
			}

		});

		//(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();  
					}  
				}
			}
		});


	}

	//查看丁老师的实习随机抽查人数的方法
	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;  
	}  


}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,让我们来一起编写一个随机点名的小程序,使用到泛型和集合框架。 首先,我们需要定义一个学生类,包含学生的姓名和学号: ```java public class Student { private String name; private String id; public Student(String name, String id) { this.name = name; this.id = id; } public String getName() { return name; } public String getId() { return id; } } ``` 接下来,我们可以使用一个泛型类来表示班级,其包含了所有的学生对象: ```java import java.util.ArrayList; import java.util.List; import java.util.Random; public class Class<T extends Student> { private List<T> students; public Class() { students = new ArrayList<>(); } public void addStudent(T student) { students.add(student); } public T getRandomStudent() { Random random = new Random(); int index = random.nextInt(students.size()); return students.get(index); } } ``` 在这个泛型类,我们使用了一个 ArrayList 来保存所有的学生对象,然后通过 getRandomStudent 方法随机返回一个学生对象。 最后,我们可以编写一个测试类来模拟随机点名的过程: ```java public class Test { public static void main(String[] args) { Class<Student> class1 = new Class<>(); class1.addStudent(new Student("张三", "001")); class1.addStudent(new Student("李四", "002")); class1.addStudent(new Student("王五", "003")); System.out.println("随机点名结果:"); Student student = class1.getRandomStudent(); System.out.println(student.getName() + " " + student.getId()); } } ``` 在这个测试类,我们创建了一个班级对象 class1,并添加了三个学生对象。然后通过调用 getRandomStudent 方法随机返回一个学生对象,并输出其姓名和学号。 这就是一个简单的随机点名程序,使用了泛型和集合框架来实现
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值