Gestion de restaurant avec JAVA code source
![Gestion de restaurant avec JAVA code source](/images/remos_downloads/id-11065_t_prev.jpg)
Gestion de restaurant avec JAVA code source
Cet article propose en détaille une application Java pour la gestion des commandes dans une restaurant
Vous pourrez télécharger le fichier au format zip il contient le code sources les classes, les images, …
Cette application contient deux parties :
- Partie Serveur : une interface Swing pour lancer et arrêter le serveur d’écoute, ce dernier est connecté en background avec un serveur de Base de Données MySQL, intégration d'un moniteur de log pour afficher les clients connectés et leur adresses IP/port.
- Partie Client: on trouve ici deux types de clients, une serveuse ordinaire qui va demander une commande faite par un client, et une partie réservée au aux cuisiniers du restaurant, ces derniers vont pouvoir modifier le menu du restau, visualiser les commandes reçues, commencer ou annuler les commandes des serveuses.
Fonctionnement :
- Le Serveur doit être lancé avant le Client(Serveuse/Cuisinier)
- Les images sont stockées sous forme binaire (Blob)
- Compte Client: client/client
- Compte Cuisinier : cuisinier/cuisinier
Les fonctionnalités principale qu'une serveuse (Client) peut faire sont :
- parcourir le Menu
- Commander des Plats
- visualiser les commandes en cours de traitement
- visualiser les commandes reçues
- générer une facture des commandes consommés
Les fonctionnalités principale qu'un cuisinier peut faire sont :
- Ajout/Modif/Suppression des Plats du Menu
- afficher les commandes demandés, pour commencer/annuler leur traitement
- afficher les commandes en cours de traitement (avec progressBar), et quand la commande est prête une notification est envoyé au serveuse (Client).
- afficher les commandes déjà servies
Extrait du code source :
package Form;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.table.DefaultTableModel;
import org.apache.commons.io.IOUtils;
import shared.Commande;
import shared.Message;
public class CommandeEnCours_Client extends javax.swing.JInternalFrame {
public MainApp parentMainApp;
static public DefaultTableModel table = null;
public static ArrayList<Commande> listeCommandeEnCours_Client = new ArrayList<Commande>();
public static javax.swing.JTable CommandesEnCoursClient_jTable = new javax.swing.JTable();
public CommandeEnCours_Client(MainApp parent) {
initComponents();
parentMainApp = parent;
parentMainApp.client.send(new Message("ListCommandesEnCours_Client", parentMainApp.client.getUsername(), "SendMeTheListOfCommandesEnCours_Client", "SERVER"));
}
private void initComponents() {
Title_jLabel = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
DetailsPlat_jPanel = new javax.swing.JPanel();
Nom_jTextField = new javax.swing.JTextField();
Image_jLabel = new javax.swing.JLabel();
Image_jTextField = new javax.swing.JTextField();
Nom_jLabel = new javax.swing.JLabel();
Categorie_jComboBox = new javax.swing.JComboBox();
duree_jTextField = new javax.swing.JTextField();
Categorie_jLabel = new javax.swing.JLabel();
Prix_jLabel = new javax.swing.JLabel();
Prix_jTextField = new javax.swing.JTextField();
duree_jLabel = new javax.swing.JLabel();
Image_jPanel = new javax.swing.JPanel();
BX = new javax.swing.JLabel();
Quantite_jTextField = new javax.swing.JTextField();
Quantite_jLabel1 = new javax.swing.JLabel();
TempsEcouleX_jLabel = new javax.swing.JLabel();
setBackground(java.awt.SystemColor.inactiveCaption);
setClosable(true);
setIconifiable(true);
setMaximizable(true);
setResizable(true);
setTitle("Liste des Commandes En Cours");
Title_jLabel.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
Title_jLabel.setText("Liste des Commandes En Cours de Preparation");
CommandesEnCoursClient_jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
CommandesEnCoursClient_jTableMouseClicked(evt);
}
public void mousePressed(java.awt.event.MouseEvent evt) {
CommandesEnCoursClient_jTableMousePressed(evt);
}
});
CommandesEnCoursClient_jTable.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
CommandesEnCoursClient_jTableKeyPressed(evt);
}
});
jScrollPane1.setViewportView(CommandesEnCoursClient_jTable);
DetailsPlat_jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Détails du Plat"));
Image_jLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
Image_jLabel.setText("Image du Plat :");
Nom_jLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
Nom_jLabel.setText("Nom Plat :");
Categorie_jComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Entrée", "Soupe", "Plat principal", "Dessert", "Boisson", "Confiserie" }));
Categorie_jLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
Categorie_jLabel.setText("Categorie Plat :");
Prix_jLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
Prix_jLabel.setText("Prix du Plat :");
duree_jLabel.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
duree_jLabel.setText("Durée Préparation :");
Image_jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Image du Plat"));
javax.swing.GroupLayout Image_jPanelLayout = new javax.swing.GroupLayout(Image_jPanel);
Image_jPanel.setLayout(Image_jPanelLayout);
Image_jPanelLayout.setHorizontalGroup( Image_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(Image_jPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(BX, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(22, Short.MAX_VALUE))
);
Image_jPanelLayout.setVerticalGroup( Image_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(BX, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 264, Short.MAX_VALUE)
);
Quantite_jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
Quantite_jLabel1.setText("Quantité demandé");
javax.swing.GroupLayout DetailsPlat_jPanelLayout = new javax.swing.GroupLayout(DetailsPlat_jPanel);
DetailsPlat_jPanel.setLayout(DetailsPlat_jPanelLayout);
DetailsPlat_jPanelLayout.setHorizontalGroup( DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, DetailsPlat_jPanelLayout.createSequentialGroup()
.addContainerGap() .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup() .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup() .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(Nom_jLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(Categorie_jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Prix_jLabel)
.addComponent(duree_jLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE))
.addGap(18, 18, 18))
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup()
.addComponent(Quantite_jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 154, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Prix_jTextField)
.addComponent(duree_jTextField)
.addComponent(Image_jTextField)
.addComponent(Categorie_jComboBox, 0, 335, Short.MAX_VALUE)
.addComponent(Nom_jTextField)
.addComponent(Quantite_jTextField)))
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup() .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Image_jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup()
.addGap(156, 156, 156)
.addComponent(TempsEcouleX_jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(Image_jPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
DetailsPlat_jPanelLayout.setVerticalGroup( DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup()
.addContainerGap(19, Short.MAX_VALUE) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(Image_jPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup()
.addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Categorie_jComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Categorie_jLabel))
.addGap(7, 7, 7) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Nom_jLabel)
.addComponent(Nom_jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Prix_jLabel)
.addComponent(Prix_jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(duree_jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(DetailsPlat_jPanelLayout.createSequentialGroup()
.addGap(3, 3, 3)
.addComponent(duree_jLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGap(18, 18, 18) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Image_jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Image_jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(DetailsPlat_jPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(Quantite_jTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(Quantite_jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(56, 56, 56)
.addComponent(TempsEcouleX_jLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 753, Short.MAX_VALUE)
.addComponent(DetailsPlat_jPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(209, 209, 209)
.addComponent(Title_jLabel)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(Title_jLabel)
.addGap(18, 18, 18)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(DetailsPlat_jPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>
private void CommandesEnCoursClient_jTableMouseClicked(java.awt.event.MouseEvent evt) {
SelectAction();
}
private void CommandesEnCoursClient_jTableMousePressed(java.awt.event.MouseEvent evt) {
SelectAction();
}
private void CommandesEnCoursClient_jTableKeyPressed(java.awt.event.KeyEvent evt) {
SelectAction();
}
public void SelectAction()
{
try {
BX.setIcon(null);
Selected_Row = CommandesEnCoursClient_jTable.getSelectedRow();
Temp_Commande = parentMainApp.listeCommandeEnCours_Client.get(Selected_Row);
Selected_categorie = Temp_Commande.getCommandePlat().getCategorie();
Selected_nom = Temp_Commande.getCommandePlat().getNom();
Selected_prix = Temp_Commande.getCommandePlat().getPrix();
Selected_duree = Temp_Commande.getCommandePlat().getDuree();
Selected_nom_image = Temp_Commande.getCommandePlat().getNom_image();
Selected_image = Temp_Commande.getCommandePlat().getImage();
Categorie_jComboBox.setSelectedItem(Selected_categorie);
Nom_jTextField.setText(Selected_nom);
Prix_jTextField.setText(""+Selected_prix);
duree_jTextField.setText(""+Selected_duree);
Image_jTextField.setText("./images/"+Selected_nom_image);
Quantite_jTextField.setText(String.valueOf(Temp_Commande.getQuantite()));
Selected_FilePath = "./images/"+Selected_nom_image;
if(ArchOS){ Selected_FilePath = Selected_FilePath.replace("\\", "/"); }
Selected_File = new File(Selected_FilePath);
int blobLength = (int) Selected_image.length();
Selected_bytes = Selected_image.getBytes(1, blobLength);
ByteArrayInputStream in = new ByteArrayInputStream(Selected_bytes);
FileOutputStream out = new FileOutputStream(Selected_File);
IOUtils.copy(in, out);
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
BufferedImage image;
image = ImageIO.read(Selected_File);
if(image == null) System.out.println("image null");
ImageIcon icon;
icon = new ImageIcon(image);
Image img = icon.getImage();
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
g.drawImage(img, 0, 0, 250, 215, null);
ImageIcon newIcon = new ImageIcon(bi);
BX.setIcon(newIcon);
} catch (SQLException | IOException ex) {
ex.printStackTrace();
}
}
int Selected_Row=99999;
String Selected_categorie;
String Selected_nom;
double Selected_prix;
int Selected_duree;
String Selected_nom_image;
Blob Selected_image;
String Selected_FilePath;
File Selected_File;
byte[] Selected_bytes;
public static Commande Temp_Commande = null;
boolean ArchOS = System.getProperty("os.name").startsWith("Windows");
private javax.swing.JLabel BX;
private javax.swing.JComboBox Categorie_jComboBox;
private javax.swing.JLabel Categorie_jLabel;
private javax.swing.JPanel DetailsPlat_jPanel;
private javax.swing.JLabel Image_jLabel;
private javax.swing.JPanel Image_jPanel;
private javax.swing.JTextField Image_jTextField;
private javax.swing.JLabel Nom_jLabel;
private javax.swing.JTextField Nom_jTextField;
private javax.swing.JLabel Prix_jLabel;
private javax.swing.JTextField Prix_jTextField;
private javax.swing.JLabel Quantite_jLabel1;
private javax.swing.JTextField Quantite_jTextField;
private javax.swing.JLabel TempsEcouleX_jLabel;
private javax.swing.JLabel Title_jLabel;
private javax.swing.JLabel duree_jLabel;
private javax.swing.JTextField duree_jTextField;
private javax.swing.JScrollPane jScrollPane1;
}