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

本文介绍了一个基于Java的签到程序,该程序能够实现随机点名并记录考勤情况,同时还支持展示学生头像。程序使用GUI界面,允许用户选择班级名单文件及头像文件夹,实现了考勤结果的导出。
第三周作业-实现随机点名的签到程序 第五需求,头像版
分类: javawork 2014-03-20 20:59 99人阅读 评论(0) 收藏 举报
java源代码gui
前言
老师的作业需求http://blog.youkuaiyun.com/dyz1982/article/details/21413679
基于前面的第四需求修改http://blog.youkuaiyun.com/cp_wl/article/details/21545589
按照丁老师的第五需求,加入了图片,同时,为了适应这个需求,修改了一下名字列表这个数组,同时也对整个界面做出一些调整。
另外,由于老师所收集的网络13班的头像并不齐全,并为了保护他们的一个隐私,就在网上找了一些动漫头像代替,当然,这个头像男女不分,点击这里下载头像文件。下载后解压文件。
点击这里下载可执行的JAR文件点击这里下载网络131班级花名册
另外,在写程序过程中也写了一段代码用于批量修改文件,会附上。

程序使用方法,打开后点击选择照片文件夹,选择刚才所解压的头像文件夹。PS:如需替换,只需将照片名字改成对应的学号.jPG文件,暂时只支持JPG格式,同时照片请将分辨率修改为200*200,否则会超出面板的大小。

然后点击选择文件选择花名册。
然后输入班级名称作为输出的文件名,也就是在CLASSNAME那个文本框修改。
然后就可以开始点名了,另外,随机点名人数还是总人数的1/3

下面开始上代码,总共有两个公共类,请确保在同一个包下
[java] view plaincopy
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.imageio.ImageIO;
import javax.swing.*;

public class RegisterApp2 extends JFrame implements ActionListener {

static int count2 = 0;// 读取到的行数
static JButton but1 = new JButton("到");// 两个按钮
static JButton but2 = new JButton("缺席");
static JLabel textfield = new JLabel("嗯哼", JLabel.CENTER);// 标签 用于显示名字和号数。
static JLabel textarea = new JLabel();// 文本域,用于最后的输入
static String namel[][];// 字符组 将花名册读入数组
static int count = 0;// 人数
static int nAbsent = 0;// 缺席人数
static String strAbsent;// 缺席人名
static String outname;// 输出文件名,也就是班级名称
static int name_partcount;// 部分名字数,默认为点到人数的三分之一
static int nameNo[];// 被点到的号码
static JFileChooser filechoose;// 文件选择框
static JFileChooser imgpathchooser;// 照片文件夹选择框
static JButton but_file = new JButton("选择文件");// 按钮打开文件选择框
static JButton but_img = new JButton("选择照片文件夹");// 按钮打开文件选择框
static File filein;// 文件输入
static JTextField text_outname;// 输出文件名
static JPanel panel;// 中间面板
static Image img;// 图片
static Pa p = new Pa();// 实例化面板
static String imgpath;// 照片文件夹

/**
* @param args
* @throws FileNotFoundException
*/
public static void main(String[] args) {

/************************************ 图型部分 *********************************************/
textfield.setText("请选择文件");
RegisterApp2 g = new RegisterApp2();
g.setLayout(new BorderLayout());
filechoose = new JFileChooser();
imgpathchooser = new JFileChooser();
imgpathchooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);// 只能选择目录

panel = new JPanel(new GridLayout(5, 1));// 设置
panel.add(but1);
panel.add(but2);
panel.add(but_file);
panel.add(text_outname = new JTextField("classname"));
panel.add(but_img);

g.add("North", textfield);
g.add("East", panel);
g.add("Center", p);
g.add("South", textarea);
g.setSize(345, 250);
g.setVisible(true);
// TODO Auto-generated method stub

but1.addActionListener(g);
but2.addActionListener(g);
but_file.addActionListener(g);
but_img.addActionListener(g);

g.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
/**************************************************************************************/

}

public static String ifexitimg(String x) {
String imgname = null;
File imgf = new File(imgpath + x + ".jpg");
if (imgf.exists()) {
imgname = imgf.getName();
try {
img = ImageIO.read(imgf);
p.repaint();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

} else {
imgname = "1";
}

return imgname;
}

public static void getclassname() {
outname = text_outname.getText();

}

public void onchooserfile() throws FileNotFoundException {
filein = filechoose.getSelectedFile();
Scanner fin = new Scanner(filein);
Scanner fin1 = new Scanner(filein);

while (fin.hasNext()) {// 确定人数
count++;
fin.nextLine();
}
// System.out.println(count);
fin.close();
namel = new String[count][3];
for (int a = 0; a < count; a++) {// 读入数组
namel[a][0] = fin1.next();
namel[a][1] = fin1.next();

}
fin1.close();

randomname();// 调用随机生成名字的一个方法。
textfield.setText(namel[nameNo[0]][0] + " " + namel[nameNo[0]][1]);
ifexitimg(namel[nameNo[count2]][0]);

}

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("到") && count2 < name_partcount) {

// 到时
selectis();

} else if (e.getActionCommand().equals("缺席") && count2 < name_partcount) {

// 缺席时

selectpass();

} else if (count2 == name_partcount
&& !e.getActionCommand().equals("选择文件")
&& !e.getActionCommand().equals("选择照片文件夹")) {

// 点完时
over();

} else if (e.getActionCommand().equals("选择文件")) {

// 点击选择文件时
int result = filechoose.showOpenDialog(filechoose);
if (result == 0) {
try {
onchooserfile();
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

} else {
textarea.setText("请输入文件");
}

} else if (e.getActionCommand().equals("选择照片文件夹")) {

// 选择文件夹
int result = imgpathchooser.showOpenDialog(imgpathchooser);
if (result == 0) {
imgpath = imgpathchooser.getSelectedFile().getPath() + "\\";
}
}

}

public static String redate() {// 返回日期
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHMM");// 可以方便地修改日期格式
String strDate = dateFormat.format(now);
// System.out.println("当前时间:"+strDate);
return strDate;

}

public static void randomname() {// 随机生成点名人名

name_partcount = count / 3;// 三分之一人数,用于确认需要随机生成的人数
nameNo = new int[name_partcount];
for (int a = 0; a < name_partcount; a++) {// 随即生成人名

int randomNo = (int) (Math.random() * count);

for (int i = 0; i < name_partcount; i++) {// 验证是否有重复部分

if (randomNo == nameNo[i]) {// 有重复部分时重新生成,一直到不重复
i = 0;
randomNo = (int) (Math.random() * count);
}

}
nameNo[a] = randomNo;

}
}

public static void selectis() {// 到时
namel[nameNo[count2]][2] = "1";
count2++;
if (count2 < name_partcount) {
textfield.setText(namel[nameNo[count2]][0] + " "
+ namel[nameNo[count2]][1]);
ifexitimg(namel[nameNo[count2]][0]);

}
// }

}

public static void selectpass() {// 缺课时

namel[nameNo[count2]][2] = "0";
strAbsent = strAbsent + namel[nameNo[count2]][0] + " "
+ namel[nameNo[count2]][1] + " " + "\r\n";
count2++;
nAbsent++;
if (count2 < name_partcount) {
textfield.setText(namel[nameNo[count2]][0] + " "
+ namel[nameNo[count2]][1]);
ifexitimg(namel[nameNo[count2]][0]);
}

}

public static void over() {// 点完时

getclassname();
File fileout = new File(outname + redate() + ".txt");
try {
@SuppressWarnings("resource")
PrintWriter fout = new PrintWriter(fileout);

for (int a = 0; a < name_partcount; a++) {
String s = namel[nameNo[a]][0] + " " + namel[nameNo[a]][1]
+ " " + namel[nameNo[a]][2];
fout.println(s);
}
fout.close();
textarea.setText("考勤结束." + "一共点名" + name_partcount + "人" + "一共有"
+ nAbsent + "个同学缺课" + "分别是" + strAbsent + "点击右上角关闭");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}

}

[java] view plaincopy
import java.awt.Graphics;

import javax.swing.JPanel;


public class Pa extends JPanel
{
Pa()
{
this.setSize(200, 200);
//this.paint(null);
}
public void paint(Graphics g){

g.drawImage(RegisterApp2.img, 0, 0, this);
//super.paint(g);

}

}

下面是一个批量改名
[java] view plaincopy
import java.io.File;

public class ReName {

public static void main(String[] args) {
String path = "f:\\头像文件\\";
File f= new File("f:\\","头像文件");
System.out.println(f.isDirectory());
long a = 201336615101L;
String filename[] =f.list();
for(int i=0;i<filename.length;i++){
File img = new File(path,filename[i]);
System.out.println(filename[i]);
File newname = new File(path,a+".jpg");
img.renameTo(newname);
a++;
System.out.println(i);
}
// TODO Auto-generated method stub

}

}





感谢百度和几位前辈的帮助
更多 0
上一篇:第三周作业-实现随机点名的签到程序 第四需求,非头像版
好的,让我们来一起编写一个随机点名的小程序,使用到泛型和集合框架。 首先,我们需要定义一个学生类,包含学生的姓名和学号: ```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 方法随机返回一个学生对象,并输出其姓名和学号。 这就是一个简单的随机点名程序,使用了泛型和集合框架来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值