任务要求:(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,其窗体大小和组件大小数值可自行调试,代码中的数值是多次调试之后确定的个人比较满意的数值。