如何在java中使用寄存器系统的自动增量



我正在使用文件为学生创建一个注册系统,当我使用该程序时,自动增量运行良好,但当我再次破坏它时,自动递增返回1,并且我不允许使用MySQL数据库我以的主要形式初始化它

public class FrmPrincipal extends javax.swing.JFrame {
AdmonOrgSecuencial a = new AdmonOrgSecuencial("Datos.dat","Id.dat");
public static int idProveedor=1;

/**
* Creates new form FrmPrincipal
*/
public FrmPrincipal() {
initComponents();
Idp gen = new Idp(idProveedor);
a.idEscribir(gen);
}

这是我用来创建和显示学生的代码

public class FrmAltas extends javax.swing.JDialog {
AdmonOrgSecuencial a = new AdmonOrgSecuencial("Datos.dat", "Id.dat");

/**
* Creates new form FrmAltas
*/

public FrmAltas(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
Idp proid;
int cve;
int clave;
int generador=FrmPrincipal.idProveedor;
proid= a.busquedaId(generador);
clave = proid.getIdp();
txtClave.setText(String.valueOf(clave));
}
private void btnGrabarActionPerformed(java.awt.event.ActionEvent evt) {                                          
Idp proid;

int clave;
int generador= FrmPrincipal.idProveedor;
proid=  a.busquedaId(generador);

clave = proid.getIdp();

String nombre = txtNombre.getText();
float promedio = Float.parseFloat(txtPromedio.getText());
Alumno alu = new Alumno(clave, nombre, promedio);
a.altas(alu);

a.bajasId(generador);
FrmPrincipal.idProveedor=generador+1;
int mas=FrmPrincipal.idProveedor;
Idp proid2= new Idp(mas);

a.idEscribir(proid2);

this.dispose();
}  

这些是我使用的方法

public void idEscribir(Idp cve){
try{
{
fos = new FileOutputStream(idArchivo, true);
dos = new DataOutputStream(fos);
dos.writeInt(cve.getIdp());
cont++;
}
}
catch(FileNotFoundException e){

}
catch(IOException e){
System.out.println("Error:" +e.getMessage());
}finally{
cerrarArchivoEscritura();
}

}

public void bajasId(int elmr){
copiarIncremental(elmr);
borrarRenombrarId();
}
public void copiarIncremental(int idc){
int idg;
try{
fis = new FileInputStream(idArchivo);
dis = new DataInputStream(fis);
fos = new FileOutputStream("Temporario.dat");
dos = new DataOutputStream(fos);
while(true){
idg = dis.readInt();

if(idg != idc){
dos.writeInt(idg);

}
}
}catch(EOFException e){

}catch(IOException e){
System.out.println("Error"+ e.getMessage());
}finally{
cerrarArchivoLectura();
cerrarArchivoEscritura();
}
}

public void borrarRenombrarId(){
File original = new File(idArchivo);
original.delete();
File temporal = new File("Temporario.dat");
temporal.renameTo(original);
}
public Idp busquedaId(int clave){
boolean existe= false;
int cve;

try{
fis= new FileInputStream(idArchivo);
dis= new DataInputStream(fis);
while(existe == false){
cve = dis.readInt();

if(clave == cve){           
existe = true;
return new Idp(clave);
}

}
return null;
}catch(FileNotFoundException e){
return null;
}
catch(EOFException e){
return null;
}catch(IOException e){
System.out.println("Error"+ e.getMessage());
return null;
}finally{
cerrarArchivoLectura();
}  

}

程序将其数据存储在主存中。在程序退出时,所有这些数据都会丢失。因此,当您重新启动程序时,所有字段(如自动递增编号(将不再保持以前的值。

要解决此问题,您需要将自动递增编号写入磁盘,例如将其存储在文件中。然后,在程序启动时,您希望将以前保存的号码加载回主存储器。

最新更新