2012-02-14 2 views
1

Я новичок в объектно-ориентированном дизайне и все еще в процессе обучения. Я разработал класс для системы бронирования поездов, но я не уверен, как моделировать основной класс бронирования.Проектирование класса для системы бронирования поездов

Это как мой дизайн выглядит:

public class Station { 
    private int stationID; 
    private String stationName; 

    // Getters and Setters 
} 

public class Train { 
    private int trainID; 
    private String trainName; 
    private Map<Station, Double> trainStationsWithFares; 

    public Train(int ID, String trainName, Station[] stations) { 
    // Initialize ID and name and create a hashmap with all stations and 
    // zero fare initially for all stations. 
    .... 
    trainStationsWithFares = new HashMap<Station, Double>(); 
    for(Station s : stations) trainStationsWithFares.put(s, new Double(0.0)); 
    } 

    // Getters and Setters (including methods to add new stations with fares and 
    // update fares of existing stations 
} 

public class Passenger { 
    private String Name; 
    private int id; 
    private int age; 
    private static final enum { Male, Female } gender; 
} 

public class TicketDetails { 
    private Train t; 
    private Station from; 
    private Station to; 
    private Passenger passenger; 

    // Getters and Setters 
} 

public class TrainTicket { 
    private int ID; 
    private TicketDetails ticketDetails; 
    private Double fare; 

    public TrainTicket(TicketDetails ticketDetails) 
     throws InvalidTrainException, InvalidFromStationException, 
      InvalidToStationException { 
     ... 
     calculateFare(); 
    } 

    // Calculates fare based on Train and from and to Stations and taxes, etc. 
    private void calculateFare() { 
     this.fare = ... 
    } 
} 

// Assuming card payment only for online reservation system for simplicity. 
// Design can be modified and enhanced suitably. 
public class PaymentDetails { 
    private String cardNumber; 
    private String cardExpirationMonth; 
    private String cardExpirationYear; 
    private String cardCVV; 

    // Getters and Setters 
} 


Мой вопрос: Должен ли мой класс бронирования взгляд, как это? Если да, то как методы в этом классе смогут получить доступ к объектам других классов, например TrainTicket, PaymentDetails и т. Д.?

public abstract class ReservationSystem { 

    // Purchase train ticket by providing ticket details and payment details. 
    public abstract TrainTicket purchaseTicket(TicketDetails ticketDetails, 
     PaymentDetails paymentDetails);  

    // Cancel existing train ticket by providing ticket reference and payment details 
    // for cancellation charges. 
    public abstract boolean cancelTicket(TrainTicket tt, PaymentDetails details); 

    // Modify existing train ticket by providing existing ticket reference,new ticket 
    // details and payment details for any additional charge or modify charges. 
    public abstract TrainTicket modifyTicket(TrainTicket existingTicket, 
     TicketDetails newTicketDetails, PaymentDetails paymentDetails) { 
    } 
} 


Или это выглядеть следующим образом:

public class ReservationSystem{ 
    private Map<trainId, Train> trains; 
    private Ticketdetails ticketdetails; 
    private PaymentDetails paymentDetails; 
    private TrainTicket tt; 

    public vector<Train> getTrain(TicketDetails ticketdetails); 
    public TrainTicket purchaseTicket(TicketDetails ticketDetails, 
     PaymentDetails paymentDetails);  
    public boolean cancelTicket(TrainTicket tt, PaymentDetails details); 
    public TrainTicket modifyTicket(TrainTicket existingTicket, 
     TicketDetails newTicketDetails, PaymentDetails paymentDetails); 
} 


Я хочу знать, как следует основной доступ класса резервации методы и члены других классов.

Заранее спасибо.

+3

Это не C++. – Pubby

+2

лучше подходит для http://codereview.stackexchange.com/ – Sikorski

ответ

0

В предыдущем подходе класс ReservationSystem равен abstract, то есть они не могут быть созданы, но должны быть подклассифицированы для доступа к методам. Если у вас есть только один вид системы резервирования, тогда нет смысла создавать для него абстрактный класс. Кроме этого, я не вижу разницы между двумя альтернативами, которые вы указали для класса ReservationSystem.

Coming ко второму вопросу,

Я хочу знать, как следует основной доступ класса резервации методы и члены других классов

The Train, Station и TrainTicket классов должны предоставлять общественности аксессуаров (получателей и сеттеров) и методов доступа к их данным. Поскольку вы не указали, используете ли вы базу данных для хранения информации о бронировании (например, заказанные билеты и т. Д.), Вам необходимо будет сохранить информацию о резервировании в самом классе ReservationSystem, т. Е. Структура данных, такая как Map, для хранения Забронированные билеты (Ticket.Id - самый вероятный ключ), аннулированные билеты и так далее. Призыв к bookTicket() добавит билет в Map и cancelTicket() удалит билет с Map.

Кроме того, ReservationSystem также должен поддерживать список действующих поездов и станций, связанных с каждым экземпляром. Все взаимодействие с системой осуществляется через экземпляр класса ReservationSystem.

-1
import java.util.*; 
import javax.swing.JOptionPane; 
/* 
@Author 12CSE54 
@ Date 29.10.14 
*/ 

public class reservation extends javax.swing.JFrame { 
Scanner s=new Scanner(System.in); 
List arr1=new ArrayList(); 
    Set<Integer> arr= new HashSet<Integer>(); 

static String aa,bb,cc; 
static int ag; 
static int pp; 
    /** Creates new form reservation */ 
    public reservation() { 
     initComponents(); 
    } 
    public reservation(String na,int ag,String from,String to) 
    { 
    aa=na; 
    bb=from; 
    cc=to; 
    pp=ag; 

    } 
int var,c=0; 
     int b; 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     b=Integer.parseInt(JOptionPane.showInputDialog(this,"Enter the seat number")); 

     Iterator<Integer> itr=arr.iterator(); 
     while(itr.hasNext()) 
     { 
       var=itr.next(); 
       if(b==var) 
       { 
     JOptionPane.showMessageDialog(this,"ticket already reserved"); 
        c=0; 
        break; 
       } 
       else 
       { 
        c=1; 
       } 
     } 

       if(c==1) 
       { 
        JOptionPane.showMessageDialog(this,"Ticket Available Ticket Booked for you"); 
       } 
     arr.add(b); 
     JOptionPane.showMessageDialog(this,"booked sucessfully"); 
}           
int[] a=new int[100]; 
     Iterator itr=arr1.iterator();  
     int flag1=-1,f=0; 
      int b1; 
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {           

    b1=Integer.parseInt(JOptionPane.showInputDialog(this,"Enter the seat number allocated to you")); 
     Iterator<Integer> itr=arr.iterator(); 
     while(itr.hasNext()) 
     { 

       var=itr.next(); 
       if(b1==var) 
       { 
        f=1; 
        arr.remove(flag1); 
        break; 
       } 
       else 
       { 
        f=0; 
       } 
       flag1++; 
     } 
     if(f==1) 
     { 

      JOptionPane.showMessageDialog(this,"Tickets cancelled"); 

     } 
     else if(f==0) 
     { 
      JOptionPane.showMessageDialog(this,"Tickets is not already reserved"); 
     } 



}           
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           

passengersdetails p=new passengersdetails(); 
p.setVisible(true); 
    arr.add(1); 
    arr.add(2); 
    arr.add(10); 


}           

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {           

      jFrame1.setSize(600, 600); 
      jFrame1.setVisible(true); 
    jTextField1.setText(String.valueOf(aa)); 
    jTextField2.setText(String.valueOf(pp)); 
     jTextField3.setText(String.valueOf(bb)); 
     jTextField4.setText(String.valueOf(cc)); 
     jTextField5.setText(String.valueOf(b)); 



}           

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {           
list i=new list(); 
i.setVisible(true); 
}           

private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {           
System.exit(0); 
}           
    public static void main(String args[]) 
{ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new reservation().setVisible(true); 
      } 
     }); 
    } 
+0

Сброс кода без объяснений не очень полезен, особенно если вопрос о дизайне. – Robert

+0

Также обратите внимание, что речь шла не о дизайне графического интерфейса. Классы GUI не должны загрязнять объекты домена. – Robert

Смежные вопросы