任务要求:(1)新课程信息必须唯一,如有重复,提示课程名称重复,重新录入;(2)要求判断任课教师为5位教师中的一位(此处不写明教师名称);(3)要求上课地点开头为”一教,二教,三教,基教“四个地点中的一个;(4)将信息保存入库,此处老师要求将信息存入txt文档即可
代码如下:
1 import java.awt.Font; 2 import java.awt.event.*; 3 import java.io.BufferedWriter; 4 import java.io.BufferedReader; 5 import java.io.File; 6 import java.io.FileReader; 7 import java.io.FileWriter; 8 import javax.swing.*; 9 10 class screen extends JFrame{ 11 private JFrame js = new JFrame("提示"); 12 private JPanel jsp = new JPanel(); 13 private JLabel error1l = new JLabel("课程名称重复,请重新录入"); 14 private JLabel error2l = new JLabel("教师信息出错"); 15 private JLabel error3l = new JLabel("上课地点错误"); 16 private JLabel finishl = new JLabel("操作成功"); 17 18 public screen() { //生成窗体 19 js.setSize(400, 150); 20 js.setLocationRelativeTo(null); 21 js.add(jsp); 22 js.setDefaultCloseOperation(2); 23 js.setVisible(true); 24 } 25 26 public void err1() { //提示错误1:课程名称错误 27 error1l.setFont(new Font("Dialog",1,20)); 28 jsp.add(error1l); 29 } 30 31 public void err2() { //提示错误2:教师信息错误 32 error2l.setFont(new Font("Dialog",1,20)); 33 jsp.add(error2l); 34 } 35 36 public void err3() { //提示错误3:上课地点错误 37 error3l.setFont(new Font("Dialog",1,20)); 38 jsp.add(error3l); 39 } 40 public void fin() { //提示成功 41 finishl.setFont(new Font("Dialog",1,20)); 42 jsp.add(finishl); 43 } 44 45 } 46 public class NewClassIn extends JFrame{ 47 private JFrame jf = new JFrame("LOGIN"); 48 private JPanel jp = new JPanel(); 49 private JLabel classL = new JLabel("课程名称:"); 50 private static JTextField classT = new JTextField(); 51 private JLabel teacherL = new JLabel("任课教师:"); 52 private static JTextField teacherT = new JTextField(); 53 private JLabel locationL = new JLabel("上课地点:"); 54 private static JTextField locationT = new JTextField(); 55 private JButton loginB = new JButton("保存"); 56 57 File file = new File("manage.txt"); //存入所有信息的文档 58 File file2 = new File("class.txt"); //存入课程信息的文档,用于判定课程是否重复 59 String jud1[] = {"王建民","刘立嘉","刘丹","王辉","杨子光"}; 60 String jud2[] = {"一教","二教","三教","基教"}; 61 62 public NewClassIn() { 63 jf.setSize(450, 300); 64 jf.setLocationRelativeTo(null); 65 jf.add(jp); 66 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 67 Components(jp); 68 jf.setVisible(true); 69 loginB.addActionListener(new ActionListener() { //监听事件 70 public void actionPerformed(ActionEvent c) { 71 String s1 = classT.getText(); 72 String s2 = teacherT.getText(); 73 String s3 = locationT.getText(); 74 int temp = 1; //配合if语句进行检查操作。 75 if(temp == 1) //检查课程名称 76 { 77 try { 78 FileReader fr = new FileReader(file2); 79 BufferedReader bufr = new BufferedReader(fr); 80 String s0 = null; 81 while((s0 = bufr.readLine())!=null) { 82 if(s1.equals(s0)) 83 { 84 screen k1 = new screen(); 85 k1.err1(); 86 temp--; 87 break; 88 } 89 } 90 bufr.close(); 91 fr.close(); 92 }catch(Exception e) { 93 e.printStackTrace(); 94 } 95 temp++; 96 } 97 if(temp == 2) // 检查教师信息 98 { 99 int temp2 = 0; 100 for(int i = 0;i < jud1.length;i++) 101 { 102 if(s2.equals(jud1[i])) 103 { 104 temp2 = 1; 105 break; 106 } 107 } 108 if(temp2 == 0) 109 { 110 temp--; 111 screen k2 = new screen(); 112 k2.err2(); 113 } 114 else 115 { 116 temp++; 117 } 118 } 119 if(temp == 3) //检查上课地点 120 { 121 int temp3 = 0; 122 String subs3 = s3.substring(0, 2); 123 for(int i = 0; i < jud2.length; i++) 124 { 125 if(subs3.equals(jud2[i])) 126 { 127 temp3 = 1; 128 break; 129 } 130 } 131 if(temp3 == 0) 132 { 133 temp--; 134 screen k3 = new screen(); 135 k3.err3(); 136 } 137 else 138 { 139 temp++; 140 } 141 } 142 if(temp == 4) //确认无误,存入文档 143 { 144 try { 145 FileWriter out = new FileWriter(file,true); 146 FileWriter out2 = new FileWriter(file2,true); 147 BufferedWriter bufw = new BufferedWriter(out); 148 BufferedWriter bufw2 = new BufferedWriter(out2); 149 String str1 = classT.getText(); 150 String str2 = teacherT.getText(); 151 String str3 = locationT.getText(); 152 bufw.write(str1); 153 bufw.newLine(); 154 bufw2.write(str1); 155 bufw2.newLine(); 156 bufw.write(str2); 157 bufw.newLine(); 158 bufw.write(str3); 159 bufw.newLine(); 160 bufw.close(); 161 bufw2.close(); 162 out.close(); 163 out2.close(); 164 }catch(Exception e) { 165 e.printStackTrace(); 166 } 167 screen k4 = new screen(); //弹出操作成功提示框 168 k4.fin(); 169 } 170 } 171 }); 172 } 173 174 private void Components(JPanel p) { //向窗体添加标签 175 p.setLayout(null); 176 classL.setBounds(60, 30, 100, 25); 177 classL.setFont(new Font("Dialog",1,20)); 178 p.add(classL); 179 classT.setBounds(160, 30, 165, 25); 180 p.add(classT); 181 teacherL.setBounds(60, 60, 100, 25); 182 teacherL.setFont(new Font("Dialog",1,20)); 183 p.add(teacherL); 184 teacherT.setBounds(160, 60, 165, 25); 185 p.add(teacherT); 186 locationL.setBounds(60, 90, 100, 25); 187 locationL.setFont(new Font("Dialog",1,20)); 188 p.add(locationL); 189 locationT.setBounds(160, 90, 165, 25); 190 p.add(locationT); 191 loginB.setBounds(150, 150, 80, 25); 192 p.add(loginB); 193 } 194 public static void main(String[] args) { //主函数,执行操作 195 new NewClassIn(); 196 } 197 }
运行结果显示:
因未知原因,原JFrame窗口中的字体大小与主窗体(LOGIN)中按钮的“保存”字体一样大小,因此使用setFont调整了字体大小。完成该任务核心在于窗体构建,信息录入以及核对信息。抓取输入文本框的信息运用getText()函数。核对时,教师信息和上课地点要求有明确规划,直接用字符串数组存入,届时遍历数组比较即可。而课程信息存储数量未知,因此除了用于存储全部信息的“manage.txt”文件外,另外设置了单独存储课程名称信息的“class.txt”文件,在核对课程名称信息时,只需读取该文件并进行比较即可。
另外,为了方便文件的读取操作,这里使用的是BufferedWriter和BufferedReader,目的是将信息单行录入,读取时只要单行读取即可。
最后就是窗体构建,着重使用JFrame,JPanel,JLabel和JButton,其窗体大小和组件大小数值可自行调试,代码中的数值是多次调试之后确定的个人比较满意的数值。