Upload
huza-bianca
View
217
Download
0
Embed Size (px)
Citation preview
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 1/15
package domain;import java.io.Serializable;
public class Masina implements Serializable
{
private String Marca;private String NrMatr;
private boolean Inchiriata;
public Masina(String Marca, String NrMatr, boolean Inchiriata){
this.Marca = Marca;this.NrMatr = NrMatr;
this.Inchiriata = Inchiriata;
}
public String getMarca() { return Marca; }
public String getNrMatr() { return NrMatr; }
public boolean getInchiriata() { return Inchiriata; }
public void SetMarca(String Marca) { this.Marca = Marca; }
public void SetNrMatr(String NrMatr) { this.NrMatr = NrMatr; }
public void SetInchiriere(boolean Inchiriata) { this.Inchiriata = Inchiriata;}
public boolean equals(Masina m){
if( this.NrMatr.equals(m.NrMatr) ) // String-urile se compara
cu: s1.equals(s2)
if( this.Marca.equals(m.Marca) )if( this.Inchiriata == m.Inchiriata ) // boolean
(tipurile primitive) se compara cu: == return true;
return false;}
public String toString() { return Marca+" "+NrMatr+" "+Inchiriata+" "; }}
package repository;
import java.io.BufferedReader;import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;import java.io.IOException;
import domain.Masina;
public class Repository
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 2/15
{
private FileReader fileReader; // this is theinput
private FileWriter fileWriter; // this is theoutput
private BufferedReader bufferedReader; // this is the
buffered reader private BufferedWriter bufferedWriter; // this is the
buffered writer private String file;private int Capacitate = 100;private Masina[] masini;
private int Dimensiune; //dimensiunea vectorului, adica cate pozitii dinvector sunt ocupate
public Repository(){
this.Dimensiune = 0;masini = new Masina[Capacitate];
readFile(file);}
public Repository(String file){
this.file = file;this.Dimensiune = 0;
masini = new Masina[Capacitate];readFile(file);
}
public int getDimensiune() { return this.Dimensiune; }
public String getFile() { return this.file; }
public boolean EImprumutata(Masina m) { return m.getInchiriata(); }
public void clear() { Dimensiune = 0; }
public String toString(){
String s="";
for(int i=0; i<Dimensiune; i++){
s = s + masini[i].toString() + "\n";}
return s;}
public Masina[] getMasini(){
Masina[] masini = new Masina[Dimensiune];
for(int i=0; i<Dimensiune; i++)masini[i] = this.masini[i];
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 3/15
return masini;
}
public void Dublare(){
Capacitate = Capacitate*2;
Masina[] nou = new Masina[Capacitate];for(int i=0; i<Dimensiune; i++)
{nou[i] = masini[i];
}masini = nou;
}
public void Adaugare(Masina m) throws RepositoryException
{if(Dimensiune > Capacitate) // daca nu mai avem capacitate,
o dublamDublare();
for(int i=0; i<Dimensiune; i++) // cautam daca exista duplicat(sa aiba acelasi nr de inmatriculare)
if(masini[i].getNrMatr().equals(m.getNrMatr()))
throw new RepositoryException("Eroare: NumarMatricol " +m.getNrMatr() + " duplicat!");
masini[Dimensiune] = m; // adaugam masina Dimensiune = Dimensiune + 1; // crestem dimensiunea repositoriului
writeFile(file); // actualizam fisierul }
public void Modificare(String nr, Masina m){
for(int i = 0; i < Dimensiune; i++)
if(masini[i].getNrMatr().equals(nr) )
masini[i] = m;
writeFile(file); // actualizamfisierul
}
public void Sterge(String NrMatr){
for(int i =0; i < Dimensiune; i++)
if ( masini[i].getNrMatr().equals(NrMatr)){
for(int j = i ; j < Dimensiune-1 ; j++) // stergemelementul de la pozitia i
masini[j] = masini [j+1]; //aducem elementele cu o pozitie mai la stanga
Dimensiune = Dimensiune - 1; //
actualizam dimensiunea }
writeFile(file); // actualizamsi fisierul
}
public void writeFile(String filename)
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 4/15
{
try {
fileWriter = new FileWriter(filename);bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(new Integer(Dimensiune).toString()+"\n");for(int i=0; i < Dimensiune; i++)
{bufferedWriter.write(masini[i].toString()+"\n");
}bufferedWriter.close();
fileWriter.close();}
catch (IOException e) { System.out.println(e); }
}
public void readFile(String filename){
try {fileReader = new FileReader(filename);
bufferedReader = new BufferedReader(fileReader);
clear();int dim = Integer. parseInt(bufferedReader.readLine());
Masina m;String line;String str[] = new String[3];
boolean Da;
for(int i=0; i<dim; i++){
line = bufferedReader.readLine();
str = line.split(" ");
if( str[2].equals("true") )Da = true;
else Da = false;
m = new Masina(str[0], str[1], Da);try
{Adaugare(m);
}catch (RepositoryException e){} // daca a fost
vreun duplicat il ignora
}
bufferedReader.close();fileReader.close();
}//try catch (IOException e) { System.out.println(e); }
}
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 5/15
}
package repository;
public class RepositoryException extends Exception{
String error;public RepositoryException(String error) { this.error = error; }
public String getError() { return error;}}
package controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JOptionPane;
import model.ModelException;
import model.Model;import view.View;
public class Controller{
private Model model;
private View view;
public Controller(View view, Model model){
this.view = view;
this.model = model;this.view.addAddListener(new addListener());
this.view.addDelListener(new delListener());this.view.addModListener(new modListener());
}
class modListener implements ActionListener
{public void actionPerformed(ActionEvent e){
String s_vechi_nr;
String s_nr;String s_marca;
boolean b_inchiriat;
try {s_vechi_nr = view.getNrMatVechi();
if ( s_vechi_nr.equals("") )throw new Exception(); // daca e vid
arunca exceptie
}catch (Exception ex){ // daca a fost o exceptie afiseaza eroare
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 6/15
JOptionPane.showMessageDialog(view, "Dati vechiul numar de
inmatriculare!", "Error", JOptionPane.ERROR_MESSAGE );return; //
sari peste restul validarilor }
try {
s_nr = view.getNrMat();if ( s_nr.equals("") )
throw new Exception(); // daca e vidarunca exceptie
}catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare
JOptionPane.showMessageDialog(view, "Dati noul numar deinmatriculare!", "Error", JOptionPane.ERROR_MESSAGE );
return; //sari peste restul validarilor
}
try
{s_marca = view.getMarca();
if ( s_marca.equals("") )throw new Exception(); // daca e vid
arunca exceptie }catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare JOptionPane.showMessageDialog(view, "Dati noua marca!",
"Error", JOptionPane.ERROR_MESSAGE );
return; //
sari peste restul validarilor
}
try {
b_inchiriat = view.getInchiriata();}
catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare JOptionPane.showMessageDialog(view, "Setati Inchiriata!",
"Error", JOptionPane.ERROR_MESSAGE );return; //
sari peste restul validarilor }
// daca ajunge aici atunci toate sunt valide
model.Modificare(s_vechi_nr, s_marca, s_nr, b_inchiriat);// modifica masina
model.setValue(model.toVector());// actualizez lista
}
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 7/15
}
class addListener implements ActionListener{
public void actionPerformed(ActionEvent e)
{
String s_nr;String s_marca;
boolean b_inchiriat;
try {
s_nr = view.getNrMat();if ( s_nr.equals("") )
throw new Exception(); // daca e vid
arunca exceptie }
catch (Exception ex){ // daca a fost o exceptie afiseaza eroare
JOptionPane.showMessageDialog(view, "Dati numar deinmatriculare!", "Error", JOptionPane.ERROR_MESSAGE );
return; //
sari peste restul validarilor }
try
{s_marca = view.getMarca();if ( s_marca.equals("") )
throw new Exception(); // daca e vidarunca exceptie
}
catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare
JOptionPane.showMessageDialog(view, "Dati marca!","Error", JOptionPane.ERROR_MESSAGE );
return; //sari peste restul validarilor
}
try
{b_inchiriat = view.getInchiriata();
}catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare JOptionPane.showMessageDialog(view, "Setati Inchiriata!",
"Error", JOptionPane.ERROR_MESSAGE );
return;// sari peste restul validarilor
}
// daca ajunge aici atunci toate sunt valide
try {
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 8/15
model.AddMasina(s_marca, s_nr, b_inchiriat);
// adauga masina } catch (ModelException e1) {
JOptionPane.showMessageDialog(view, e1.getError(),"Error", JOptionPane.ERROR_MESSAGE );
}
model.setValue(model.toVector()); // actualizezlista
}}
class delListener implements ActionListener
{public void actionPerformed(ActionEvent e)
{
String s_nr; // numar de inmatriculare try {
s_nr = view.getNrMat();
if ( s_nr.equals("") )throw new Exception(); // daca e vidarunca exceptie
model.DeleteMasina(s_nr); // altfel sterge masina model.setValue(model.toVector()); // actualizez lista
}catch (Exception ex)
{ // daca a fost o exceptie afiseaza eroare JOptionPane.showMessageDialog(view, "Dati numar de
inmatriculare!", "Error", JOptionPane.ERROR_MESSAGE );
}}
}
}
package model;
import java.util.Observable;import java.util.Vector;
import domain.Masina;
import repository.Repository;
import repository.RepositoryException;
public class Model extends Observable{private Repository repo;private Vector list;
public Model(Repository r) { this.repo = r; reset(); }
public Masina[] getMasini() { return this.repo.getMasini(); }
public Vector toVector() // returneaza un vector de elemente generice E
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 9/15
{
Vector masini = new Vector();Masina[] toate = getMasini();for(int i=0; i<toate.length; i++ )
masini.add(toate[i]);
return masini;
}
public void DeleteMasina(String NrMatr) { repo.Sterge(NrMatr); }
public void AddMasina (String marca,String NrMatr, boolean Inchiriata) throws ModelException
{Masina m = new Masina (marca, NrMatr, Inchiriata);
try
{repo.Adaugare(m);
}catch (RepositoryException e) { throw new ModelException(e.getError());
} }
public void Modificare (String NrVechi, String MarcaNou, String NrNou, boolean InchiriataNou)
{Masina m = new Masina (MarcaNou, NrNou, InchiriataNou);
repo.Modificare(NrVechi, m);}
public void Clear() { repo.clear(); }
/** Reset to initial value. */
public void reset() {
setValue(this.toVector());
}
public void setValue(Vector vec){
list = vec;setChanged();//!!!!!!!!!!!!!!!!!
notifyObservers();
}
public Vector getValue(){
return list;}
}
package model;
public class ModelException extends Exception{
String error;public ModelException(String error) { this.error = error; }
public String getError() { return error;}
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 10/15
}
package view;
import java.awt.Color;
import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Window;
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import java.util.Observable;
import java.util.Observer;import java.util.Vector;
import javax.swing.DefaultListModel;import javax.swing.JButton;
import javax.swing.JCheckBox;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;import javax.swing.JOptionPane;
import javax.swing.JPanel;import javax.swing.JScrollPane;
import javax.swing.JTextField;import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import model.ModelException;
import model.Model;
import controller.Controller;
public class View extends JFrame implements Observer{
private Model model;private JLabel label_NrInmat;
private JLabel label_NrInmatVechi;private JLabel label_Marca;
private JLabel label_Masini;private JTextField nrInmat_vechi;
private JTextField nrInmat;
private JTextField Marca;private JButton btn_add;
private JButton btn_mod;private JButton btn_del;private JCheckBox checkBox_Inchiriata;private JList lista;
private DefaultListModel listModel;
public View(Model model)
{this.model = model;
model.addObserver(this);
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 11/15
try {UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName () ); // pune tema sistemului(iconite, bare, culori)
}
catch (Exception e){e.printStackTrace();
}
this.setTitle("Masini Application");this.setLayout( new GridLayout(1,2,10,10) ); // linii, coloane,
spatiere_orizontala, spatiere_verticala this.addWindowListener(new WindowCloser());
this.setSize(this.getPreferredSize());this.pack();//frame.setVisible(true);
initComponents(); // adaugacomponentele reset();
}
public Dimension getPreferredSize() { return new Dimension(600, 300); } //pixeli orizontala, pixeli verticala
public DefaultListModel getListModel() { return listModel; }// returnam modelul listei ca sa il putem accesa din afara clasei
public String getNrMat() { return nrInmat.getText(); }// returnam continutul fieldului nrInmat
public String getNrMatVechi() { return nrInmat_vechi.getText(); } //
returnam continutul fieldului nrInmat_vechi
public String getMarca() { return Marca.getText(); }// returnam continutul fieldului Marca
public boolean getInchiriata() // returnam daca e
inchiriata sau nu
{boolean da = false; // nu e selectata
if (checkBox_Inchiriata.isSelected()) // daca e selectata ii dam true da = true;
return da; // returnamcum e
}
public void addAddListener(ActionListener add) {btn_add.addActionListener(add); }
public void addModListener(ActionListener mod) {btn_mod.addActionListener(mod); }
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 12/15
public void addDelListener(ActionListener del) {
btn_del.addActionListener(del); }
private JPanel addCheckBox(){
JPanel subPanel = new JPanel(); //
creez un nou panel checkBox_Inchiriata = new JCheckBox("Inchiriata"); // creez checkbox
// checkBox_Inchiriata.addActionListener(this); // ii adaug unlistener
subPanel.add(checkBox_Inchiriata); //adaug checkboxul la panel
return subPanel;// returnez panelul
}
private JPanel addButonAdd(){
JPanel subPanel = new JPanel();
btn_add = new JButton("Adauga");subPanel.add(btn_add);
return subPanel;
}
private JPanel addButonModifica(){
JPanel subPanel = new JPanel();btn_mod = new JButton("Modifica");subPanel.add(btn_mod);
return subPanel;}
private JPanel addButonSterge()
{
JPanel subPanel=new JPanel();btn_del = new JButton("Sterge");
subPanel.add(btn_del);return subPanel;
}
private JPanel addInmatVechi()
{JPanel subPanel = new JPanel();
label_NrInmatVechi = new JLabel("Numar Inmat Pt Modif:");subPanel.add(label_NrInmatVechi);
nrInmat_vechi = new JTextField(10);label_NrInmatVechi.setLabelFor(nrInmat_vechi);
subPanel.add(nrInmat_vechi);
return subPanel;}
private JPanel addInmat()
{JPanel subPanel = new JPanel();
label_NrInmat = new JLabel("Numar Inmatriculare:");
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 13/15
subPanel.add(label_NrInmat);
nrInmat = new JTextField(10);label_NrInmat.setLabelFor(nrInmat);subPanel.add(nrInmat);return subPanel;
}
private JPanel addMarca(){
JPanel subPanel = new JPanel();label_Marca = new JLabel("Marca:");subPanel.add(label_Marca);Marca = new JTextField(10);
label_Marca.setLabelFor(Marca);subPanel.add(Marca);
return subPanel;
}
private JPanel addList(){
JPanel subPanel = new JPanel();label_Masini = new JLabel("Masini"); // creez unnou label
listModel = new DefaultListModel(); //creez un nou model pt lista (ca sa pot face actualizari)
lista = new JList(listModel); // creez o lista cuvalorile initiale
lista.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); // faclista sa suporte selectie simpla (cea multipla e implicita)
lista.setSelectedIndex(0);// selectez primul index
JScrollPane listScrollPane = new JScrollPane(lista); // pun
lista intr-un scrollPane(in caz ca elementele nu incap, vor aparea bare de scroll)
label_Masini.setLabelFor(listScrollPane);// setez labelul la lista
subPanel.add(label_Masini);// adaug label la panel
subPanel.add(listScrollPane); //
adaug scrollPane la panel
return subPanel;// returnez panelul
}
private void actualizareLista(DefaultListModel model, Vector v) // functionto reload the list
{
int size = v.size();model.clear(); // golesc modelul model.setSize(size); // ii pun noua dimensiune
for(int i=0; i<size; i++)model.set(i, v.get(i)); // ii setez fiecare element
}
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 14/15
private void initComponents(){
JPanel subPanel = new JPanel(); // creeazapanel
JPanel subPanel_stanga = new JPanel();
JPanel subPanel_dreapta = new JPanel();JPanel subPanel_dreapta_sus = new JPanel();
JPanel subPanel_dreapta_jos = new JPanel();
subPanel_stanga.add( addList() ); // adaugalista
actualizareLista(listModel, model.toVector()); // actualizez lista
subPanel_dreapta_sus.add( addInmatVechi() ); // adauga camp nr vechi
subPanel_dreapta_sus.add( addInmat() ); // adauga camp nrnou
subPanel_dreapta_sus.add( addMarca() ); // adauga campmarca
subPanel_dreapta_sus.add( addCheckBox() ); // adauga campinchiriata
subPanel_dreapta_jos.add( addButonAdd() ); // adauga butonadaugare
subPanel_dreapta_jos.add( addButonModifica() ); // adauga butonmodifica
subPanel_dreapta_jos.add( addButonSterge() ); // adauga buton stergere
subPanel_dreapta.setLayout( new GridLayout(2,1) ); // 2 linii, 1
coloana subPanel_dreapta.add(subPanel_dreapta_sus); // adaug
partea de sus subPanel_dreapta.add(subPanel_dreapta_jos); // adaug
partea de jos
add(subPanel_stanga); // adauga stanga
add(subPanel_dreapta); // adauga dreapta }
private void reset()
{
model.reset();actualizareLista(listModel, model.getValue());
}
public void update(Observable a, Object b){
actualizareLista(listModel, model.getValue());
}
public class WindowCloser<E> extends WindowAdapter // ca sa se poatainchide aplicatia de la x
{public void windowClosing(WindowEvent e)
{
7/30/2019 Firma de leasing - implementare Java (cod sursa)
http://slidepdf.com/reader/full/firma-de-leasing-implementare-java-cod-sursa 15/15
Window win = e.getWindow();
// recomandat win.setVisible(false);System.exit(0);
// necesar
}
}
}
APPlication:
import repository.Repository;
import controller.Controller;
import view.View;import model.Model;
public class App{
public static void main( String [ ] args ){
Repository repo = new Repository("repository");Model model = new Model(repo);
View view = new View(model);Controller controller = new Controller(view, model);
view.setVisible(true);}
}