实现一个安排课表的Java实验。
有以下几点要求:
①用所给的教师姓名进行课表安排
②用所给的地点进行课表安排
③不得有重复的课程名称出现
④将信息写入到文件里
⑤用窗口来进行实现
package com.xu; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; import java.io.*; public class manageclass extends JFrame{ public manageclass() throws FileNotFoundException { this.setTitle("请登录"); this.setLayout(null); //创建容器 Container c=this.getContentPane(); //创建课程名称标签 JLabel jl1=new JLabel("课程名称:"); //创建任课老师标签 JLabel jl2=new JLabel("任课老师:"); //创建上课地点标签 JLabel jl3=new JLabel("上课地点:"); //创建课程名称文本框 final JTextField jt=new JTextField(); //创建任课老师文本框 final JTextField jt2=new JTextField(); //创建上课地点文本框 final JTextField jt3=new JTextField(); //创建保存按钮 JButton jb=new JButton("保存"); //在容器中加入所有标签和按钮 c.add(jl1); c.add(jl2); c.add(jl3); c.add(jt); c.add(jt2); c.add(jt3); c.add(jb); //设置标签和文本框,按钮的位置 //x,y,width,height jl1.setBounds(10, 20, 90, 40); jl2.setBounds(10, 70, 90, 40); jl3.setBounds(10, 120, 90, 40); jt.setBounds(80, 20, 210, 40); jt2.setBounds(80,70,210,40); jt3.setBounds(80, 120,210,40); jb.setBounds(100, 180, 60, 30); //监听器的功能实现 jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub boolean flag = true; //初始化文件的写入 File file=new File("E:\\数据.txt"); Writer out=null; try { out = new FileWriter(file,true); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //来判断任课老师是否是规定的老师姓名 if(jt2.getText().trim().equals(teacher[0])||jt2.getText().trim().equals(teacher[1])||jt2.getText().trim().equals(teacher[2])||jt2.getText().trim().equals(teacher[3])||jt2.getText().trim().equals(teacher[4])) { //来判断上课地点是否为规定的上课地点 if(jt3.getText().trim().equals(where[0])||jt3.getText().trim().equals(where[1])||jt3.getText().trim().equals(where[2])||jt3.getText().trim().equals(where[3])) { //对第一个数据的存储 if(num==0) name[num]=jt.getText().trim(); //对于其它的数据存储 else { for(int i=0;i<num;i++) { //如果和之前的课程名称相重,则不进行添加,并重新输入 if(jt.getText().trim().equals(name[i])) { JOptionPane.showMessageDialog(null, "课程重复,请重新输入!"); flag=false; break; } //否则就将该信息加入到数组里 else name[num]=jt.getText().trim(); } } //如果不重 if(flag==true) { t1[num]=jt2.getText().trim(); w1[num]=jt3.getText().trim(); String s="课程名称:"+name[num]+" 任课老师:"+t1[num]+" 上课地点:"+w1[num]; //再输出窗口输出信息同时写入到文件里 System.out.println(s); try { out.write(s); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { out.write("\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //注意要将缓冲区刷新出来 try { out.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } num++; } } else { JOptionPane.showMessageDialog(null, "无该地点!"); } } else { JOptionPane.showMessageDialog(null, "无该老师!"); } //注意将文本框清除 jt.setText(""); jt2.setText(""); jt3.setText(""); } }); //设置界面大小及可见 this.setSize(500,300); this.setVisible(true); this.setResizable(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } //课程名称 static String[] name=new String[1000]; //总共信息条数 static int num=0; //老师信息 static String[] teacher=new String[1000]; //地点信息 static String[] where=new String[1000]; //实际存储老师信息 static String[] t1=new String[1000]; //实际存储地点信息 static String[] w1=new String[1000]; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub teacher[0]="王建民"; teacher[1]="刘立嘉"; teacher[2]="刘丹"; teacher[3]="王辉"; teacher[4]="杨子光"; where[0]="一教"; where[1]="二教"; where[2]="三教"; where[3]="基教"; new manageclass(); } }
实现一个简单的登录界面,其中注册页面被锁定//后期会改善,验证码采用随机数的原理,可以任意的生成一个小写/大写/数字1-9的六位验证码
package com.JTextField; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; import java.awt.Font; import java.awt.Graphics; /* * 2018316 * xulifeng * 2019-9-21 */ public class JTextFieldTest extends JFrame{ //private static final long serialVersionUID = -1929142760043481303L; static String s=new String(); public String random() { Random r=new Random(); String result = ""; //进行6次循环 for(int i = 0 ; i < 6 ; i ++) { //生成一个97~122的int型的整数 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //将intValue强制转换为char后连接到result后面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } return result; } public JTextFieldTest() { this.setTitle("请登录"); this.setLayout(null); //创建容器 Container c=this.getContentPane(); //创建用户名标签 JLabel jl1=new JLabel("用户名:"); //创建密码标签 JLabel jl2=new JLabel("密码:"); //创建验证码标签 JLabel jl3=new JLabel("验证码:"); //创建文本框 final JTextField jt=new JTextField(); //创建验证码输入文本框 final JTextField jt2=new JTextField(); //创建验证码比对文本框按钮 s=this.random(); JButton jb3=new JButton(s); jb3.setFont(new Font("楷体", Font.BOLD,20)); jb3.setForeground(Color.pink); //创建密码框 final JPasswordField jp=new JPasswordField(); jp.setEchoChar('*'); //创建登录按钮 JButton jb=new JButton("登录"); //创建注册按钮 JButton jb2=new JButton("注册"); jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if(jt.getText().trim().equals("xlf")&&new String(jp.getPassword()).trim().equals("fengge")&&jt2.getText().trim().equals(s)) { JOptionPane.showMessageDialog(null, "登陆成功!"); System.exit(-1); } else if(jt.getText().trim().equals("")||new String(jp.getPassword()).trim().equals("")||jt2.getText().trim().equals("")) { JOptionPane.showMessageDialog(null, "不能为空"); } else { JOptionPane.showMessageDialog(null, "登录错误"); } jt.setText(""); jp.setText(""); jt2.setText(""); Random r=new Random(); String result = ""; //进行6次循环 for(int i = 0 ; i < 6 ; i ++) { //生成一个97~122的int型的整数 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //将intValue强制转换为char后连接到result后面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } s=result; jb3.setText(s); } }); jb2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub JOptionPane.showMessageDialog(null, "注册成功\n用户名:xlf\n密码:fengge"); jt.setText(""); jp.setText(""); jt2.setText(""); Random r=new Random(); String result = ""; //进行6次循环 for(int i = 0 ; i < 6 ; i ++) { //生成一个97~122的int型的整数 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //将intValue强制转换为char后连接到result后面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } s=result; jb3.setText(s); } }); jb3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Random r=new Random(); String result = ""; //进行6次循环 for(int i = 0 ; i < 6 ; i ++) { //生成一个97~122的int型的整数 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int y=(r.nextInt(26)+65); int f=r.nextInt(3); //将intValue强制转换为char后连接到result后面 if(f==1) result = result + (char)intVal; else if(f==0) result = result + (char)x; else result = result + (char)y; } s=result; jb3.setText(s); } }); this.getRootPane().setDefaultButton(jb); c.add(jb); c.add(jb2); c.add(jl1); c.add(jl2); c.add(jl3); c.add(jt); c.add(jp); c.add(jt2); c.add(jb3); jl1.setBounds(10, 20, 90, 40); jt.setBounds(60, 20, 210, 40); jl2.setBounds(25, 70, 90, 40); jl3.setBounds(10, 120, 90, 40); jp.setBounds(60, 70, 210, 40); jt2.setBounds(60, 120,100,40); jb3.setBounds(180,120,100,40); jb.setBounds(100, 180, 60, 30); jb2.setBounds(100, 220, 60, 30); //设置窗体格式 this.setSize(500,300); this.setVisible(true); this.setResizable(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { // TODO Auto-generated method stub new JTextFieldTest(); } }
这是对窗体的初步练习,后期有待提高下拉框的实现和注册页面的改善