所以我正在尝试为学校项目创建一个医疗诊所系统管理程序。这是我使用NetBeans创建GUI的第一个项目,不幸的是,我的课在这个主题上花了大约两周的时间,所以我不像我希望的那样精通这个。所以请不要对我的代码太苛刻。当我创建一个医生对象时,数据被保存到一个文件中。当我返回并尝试使用相同的ID创建另一个医生时,我的布尔isKeyPresent无法捕获它,因为(我假设)我的医生映射与保存文件中创建的任何医生都没有关联。我如何解决这个问题,使我的系统不做医生,如果ID已经在使用中?
private void btnAddDoctorActionPerformed(java.awt.event.ActionEvent evt) {
try {
String id = txtDocID.getText();
String name = txtDocName.getText();
String specialty = txtSpecialty.getText();
boolean isKeyPresent = administrative.doctors.containsKey(id);
if(isKeyPresent) {
JOptionPane.showMessageDialog(this, "Doctor ID Already Exists");
}
else {
addDoctor(name, specialty, id);
String s = name + ",";
s += specialty + ",";
s += id;
FileWriter w = new FileWriter(fileLocation);
BufferedWriter writer = new BufferedWriter(w);
writer.write(s);
writer.close();
JOptionPane.showMessageDialog(this, "Doctor Added");
}
txtDocID.setText("");
txtDocName.setText("");
txtSpecialty.setText("");
}
catch(IOException e) {
JOptionPane.showMessageDialog(this, "File Error");
}
}
首先,我建议在访问txtDocID
字段时将医生id转换为小写(String#toLowerCase
),因为这可以防止用户输入不同大小写的重复id。
我不确定你的addDoctor
方法做什么,我猜它只是把它添加到GUI。如果您包含了相应的代码将会很有用。如果是这种情况,那么您假设问题是administrative.doctors
Map没有链接到您的保存文件是正确的。
解决这个问题的一种方法是在将医生保存到保存文件后将其添加到administrative.doctors
Map中。
但是,我建议您创建一个单独的类来处理保存和存储医生。这样,您只需调用DoctorManager#saveDoctor
之类的东西,它就会写入文件并保存到内部Map中。封装Map也是值得的。
最后,关于对数据库的评论,听起来你还没有学过它们,而且对于你的用例来说,这可能不值得麻烦。将代码抽象为使用一个单独的类来管理医生的存储可能是理想的。