diff --git a/app/src/main/java/com/example/outilcuisson/AfficherFragment.java b/app/src/main/java/com/example/outilcuisson/AfficherFragment.java index 3130be9..38d6863 100644 --- a/app/src/main/java/com/example/outilcuisson/AfficherFragment.java +++ b/app/src/main/java/com/example/outilcuisson/AfficherFragment.java @@ -24,13 +24,6 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; -import com.google.android.material.navigation.NavigationView; - -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.util.ArrayList; public class AfficherFragment extends Fragment { @@ -38,7 +31,7 @@ public class AfficherFragment extends Fragment { /** * TODO */ - public ListView listeCuissons; + public ListView listView; /** * TODO @@ -46,14 +39,7 @@ public class AfficherFragment extends Fragment { public static ArrayAdapter adapterCuissons; - /** - * Liste des cuissons enregistrées dans l'application - */ - public static ArrayList cuissonAffichees; - - - public AfficherFragment() { - } + public AfficherFragment() {} public static AfficherFragment newInstance() { return new AfficherFragment(); @@ -70,25 +56,35 @@ public class AfficherFragment extends Fragment { Bundle savedInstanceState) { View view = inflater.inflate(R.layout.afficher_fragment, container, false); - cuissonAffichees = new ArrayList<>(); - listeCuissons = view.findViewById(R.id.listeCuisson); + listView = view.findViewById(R.id.listeCuisson); adapterCuissons = new ArrayAdapter<>(getActivity(), - R.layout.ligne_liste, R.id.item_cuisson, cuissonAffichees); - listeCuissons.setAdapter(adapterCuissons); - registerForContextMenu(listeCuissons); + R.layout.ligne_liste, R.id.item_cuisson, new ArrayList<>()); + listView.setAdapter(adapterCuissons); + registerForContextMenu(listView); return view; } - /** - * Ajouter une cuisson - * - * @param cuisson La cuisson à ajouter - */ - public void addCuisson(Cuisson cuisson) { - adapterCuissons.add(cuisson.toString()); + @Override + public void onResume() { + super.onResume(); + afficherCuisson(); + } + + public void afficherCuisson() { + adapterCuissons.clear(); + + /* Ajoute l'objet cuisson */ + ArrayList listeCuisson = ((MainActivity)getActivity()).getListeCuisson(); + + /* On affiche toutes les cuissons de la liste dans la view */ + for (Cuisson cuisson : listeCuisson) { + adapterCuissons.add(cuisson.toString()); + } + + /* Met à jour la liste */ adapterCuissons.notifyDataSetChanged(); - listeCuissons.requestLayout(); + listView.requestLayout(); } /** @@ -112,30 +108,30 @@ public class AfficherFragment extends Fragment { AdapterView.AdapterContextMenuInfo information = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + int index = information.position; + switch (item.getItemId()) { case R.id.thermosContext: - afficherThermos(cuissonAffichees.get(information.position)); + afficherThermos(index); break; case R.id.modifierContext: -// modifierCuisson(); + ((MainActivity) getActivity()).editerCuisson(index); break; case R.id.supprContext: - cuissonAffichees.remove(information.position); - adapterCuissons.notifyDataSetChanged(); - listeCuissons.requestLayout(); - break; - - case R.id.cancelContext: + supprimerCuisson(index); break; } return super.onContextItemSelected(item); } - public void afficherThermos(String cuisson) { + public void afficherThermos(int index) { + /* Recupère l'objet cuisson */ + Cuisson cuisson = ((MainActivity) getActivity()).getListeCuisson().get(index); + String content = getString(R.string.alert_content_thermos, - Cuisson.extrairePlat(cuisson), - Cuisson.extraireTemperature(cuisson), - Cuisson.thermostat(Cuisson.extraireTemperature(cuisson))); + cuisson.getPlat(), + cuisson.getDegree(), + cuisson.getThermostat()); new AlertDialog.Builder(getContext()).setTitle(R.string.alert_title_thermos) .setMessage(content) .setNeutralButton( @@ -144,13 +140,12 @@ public class AfficherFragment extends Fragment { .show(); } - public void modifierCuisson() { -// ((MainActivity)getActivity()).changeFragment(1); - Fragment fragment = new AjouterFragment(); - FragmentManager fragmentManager = fragment.getChildFragmentManager(); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.ajouter_fragment, fragment, fragment.toString()); - fragmentTransaction.addToBackStack(fragment.toString()); - fragmentTransaction.commit(); + /** + * Supprime l'objet correspondant cuisson + * @param index + */ + public void supprimerCuisson(int index) { + ((MainActivity) getActivity()).getListeCuisson().remove(index); + afficherCuisson(); } } diff --git a/app/src/main/java/com/example/outilcuisson/AjouterFragment.java b/app/src/main/java/com/example/outilcuisson/AjouterFragment.java index 418adb4..f645cb2 100644 --- a/app/src/main/java/com/example/outilcuisson/AjouterFragment.java +++ b/app/src/main/java/com/example/outilcuisson/AjouterFragment.java @@ -20,9 +20,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import com.example.outilcuisson.OutilCuisson; -import com.example.outilcuisson.Cuisson; - public class AjouterFragment extends Fragment { EditText inputPlat; @@ -31,24 +28,15 @@ public class AjouterFragment extends Fragment { Button btnEffacer; Button btnValider; - public AjouterFragment() { - } + public AjouterFragment() {} public static AjouterFragment newInstance() { return new AjouterFragment(); } - public interface EcouteurAjout { - void recevoirCuisson(Cuisson cuisson); - } - - private EcouteurAjout activiteQuiMEcoute; - @Override public void onAttach(@NonNull Context context) { super.onAttach(context); - - activiteQuiMEcoute = (EcouteurAjout) context; } @Override @@ -60,8 +48,8 @@ public class AjouterFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.ajouter_fragment, container, - false); + + View view = inflater.inflate(R.layout.ajouter_fragment, container,false); /* Liste des éléments intéractifs */ inputPlat = view.findViewById(R.id.input_plat); @@ -70,71 +58,106 @@ public class AjouterFragment extends Fragment { btnEffacer = view.findViewById(R.id.btn_effacer); btnValider = view.findViewById(R.id.btn_valider); - /* Initialise le TimePicker en format 24h avec par défaut la valeur - 0h40 */ + /* Initialise le TimePicker en format 24h et met les champs par défaut */ inputDuree.setIs24HourView(true); - inputDuree.setHour(0); - inputDuree.setMinute(40); + champsDefaut(); - /* - * Action de création de la nouvelle cuisson - */ - btnValider.setOnClickListener(view1 -> { - /* Récupère toutes les valeurs des champs */ - String txtPlat = inputPlat.getText().toString(); - String txtTemperature = inputTemperature.getText().toString(); - int hDuree = inputDuree.getHour(); - int mDuree = inputDuree.getMinute(); - - /* Convertis la température en entier */ - int temperature = txtTemperature.isEmpty() ? -1 : Integer.parseInt( - txtTemperature); - - /* Cas ou les valeurs ne sont pas valides */ - if (!OutilCuisson.platValide(txtPlat) - || !OutilCuisson.heureCuissonValide(hDuree) - || !OutilCuisson.minuteCuissonValide(mDuree) - || !OutilCuisson.temperatureValide(temperature)) { - - System.out.println("Erreur"); - - } - - /* Cas ou les valeurs sont valides : on ajoute une nouvelle - cuisson dans la liste a afficher */ - try { - Cuisson cuisson = new Cuisson(txtPlat, hDuree, mDuree, - temperature); - activiteQuiMEcoute.recevoirCuisson(cuisson); - viderChamps(); - String content = getString(R.string.toast_ajout_ok, - cuisson.getPlat()); - Toast.makeText(getContext(), content, Toast.LENGTH_SHORT) - .show(); - } catch (Exception e) { - new AlertDialog.Builder(getContext()).setTitle( - R.string.alert_title_error) - .setMessage( - R.string.alert_content_error) - .setNeutralButton( - R.string.alert_neutral_button, - null) - .show(); - e.printStackTrace(); - } - }); - - /* - * Efface le contenu des champs de textes et met le TimePicker à 0h40 - */ - btnEffacer.setOnClickListener(view2 -> { - viderChamps(); - }); + /* Actions des buttons */ + btnValider.setOnClickListener(this::actionBtnValider); + btnEffacer.setOnClickListener(this::actionBtnEffacer); return view; } - private void viderChamps() { + @Override + public void onResume() { + super.onResume(); + + /* Si on est en mode edition, on préremplis le champs */ + if ( ((MainActivity)getActivity()).modeEdition) { + Cuisson cuisson = ((MainActivity)getActivity()).cuissonAEditer; + + System.out.println(cuisson); + + /* On remplis les champs */ + inputPlat.setText(cuisson.getPlat()); + inputDuree.setHour(cuisson.getHeure()); + inputDuree.setMinute(cuisson.getMinute()); + inputTemperature.setText(Integer.toString(cuisson.getDegree())); + } + } + + @Override + public void onPause() { + super.onPause(); + ((MainActivity)getActivity()).modeEdition = false; + champsDefaut(); + } + + private void actionBtnValider(View view) { + /* Récupère toutes les valeurs des champs */ + String txtPlat = inputPlat.getText().toString(); + String txtTemperature = inputTemperature.getText().toString(); + int hDuree = inputDuree.getHour(); + int mDuree = inputDuree.getMinute(); + + /* Convertis la température en entier */ + int temperature = txtTemperature.isEmpty() ? -1 : Integer.parseInt(txtTemperature); + + if (((MainActivity)getActivity()).modeEdition) { + Cuisson cuisson = ((MainActivity)getActivity()).cuissonAEditer; + try { + cuisson.editCuisson(txtPlat, hDuree, mDuree, temperature); + + ((MainActivity)getActivity()).changeFragment(0); + } catch (IllegalArgumentException e) { + /* Crée un boite de dialogue qui informe que les valeurs sont incorrectes */ + new AlertDialog + .Builder(getContext()) + .setTitle(R.string.alert_title_error) + .setMessage(R.string.alert_content_error) + .setNeutralButton(R.string.alert_neutral_button,null) + .show(); + e.printStackTrace(); + } + } else { + /* On essaye de créer une nouvelle cuisson */ + try { + Cuisson cuisson = new Cuisson(txtPlat, hDuree, mDuree, temperature); + + /* On ajoute la cuisson a la liste des cuisson */ + ((MainActivity) getActivity()).addCuisson(cuisson); + + champsDefaut(); + + /* Message d'ajout */ + String content = getString(R.string.toast_ajout_ok, + cuisson.getPlat()); + Toast.makeText(getContext(), content, Toast.LENGTH_SHORT).show(); + } catch (IllegalArgumentException e) { + + /* Crée un boite de dialogue qui informe que les valeurs sont incorrectes */ + new AlertDialog + .Builder(getContext()) + .setTitle(R.string.alert_title_error) + .setMessage(R.string.alert_content_error) + .setNeutralButton(R.string.alert_neutral_button,null) + .show(); + e.printStackTrace(); + } + } + } + + /** + * Efface le contenu des champs de textes et met le TimePicker à 0h40 + * @param view non utilisé + */ + private void actionBtnEffacer(View view) { + ((MainActivity)getActivity()).modeEdition = false; + champsDefaut(); + } + + private void champsDefaut() { inputPlat.setText(""); inputDuree.setHour(0); inputDuree.setMinute(40); diff --git a/app/src/main/java/com/example/outilcuisson/Cuisson.java b/app/src/main/java/com/example/outilcuisson/Cuisson.java index 9fbc428..f7b8987 100644 --- a/app/src/main/java/com/example/outilcuisson/Cuisson.java +++ b/app/src/main/java/com/example/outilcuisson/Cuisson.java @@ -24,18 +24,25 @@ public class Cuisson implements Serializable { /** * Nombre maximum de caractères pour le nom du plat */ - private static final int LG_MAX_PLAT = 18; + private static final int LG_MAX_PLAT = 20; + /** + * Le nom du plat + */ private String plat; + + /** + * La durée en heure de la cuisson du plat + */ private int heure; private int minute; private int degree; - public Cuisson(String plat, int heure, int minute, int degree) throws - Exception { - if (!platValide(plat) || !heureCuissonValide(heure) - || !minuteCuissonValide(minute) || !temperatureValide(degree)) { - throw new Exception(CHAINE_DEFAUT); + public Cuisson(String plat, int heure, int minute, int degree) { + if (!platValide(plat) + || !horaireValide(heure, minute) + || !temperatureValide(degree)) { + throw new IllegalArgumentException(CHAINE_DEFAUT); } this.plat = plat; this.heure = heure; @@ -56,6 +63,12 @@ public class Cuisson implements Serializable { && !nomPlat.contains("|"); } + public static boolean horaireValide(int heure, int minute) { + return !(heure == 0 && minute == 0) + && heureCuissonValide(heure) + && minuteCuissonValide(minute); + } + /** * Détermine si le nombre d'heures d'une durée de cuisson est valide * (comprise entre 0 et 9) @@ -63,7 +76,7 @@ public class Cuisson implements Serializable { * @param heureCuisson heure à tester * @return un booléen égal à vrai ssi l'heure de la durée est valide */ - public static boolean heureCuissonValide(int heureCuisson) { + private static boolean heureCuissonValide(int heureCuisson) { return 0 <= heureCuisson && heureCuisson <= HEURE_MAX; } @@ -75,7 +88,7 @@ public class Cuisson implements Serializable { * @return un booléen égal à vrai ssi le nombre de minutes de la durée * est valide */ - public static boolean minuteCuissonValide(int minuteCuisson) { + private static boolean minuteCuissonValide(int minuteCuisson) { return 0 <= minuteCuisson && minuteCuisson <= 59; } @@ -90,6 +103,9 @@ public class Cuisson implements Serializable { return 0 < temperature && temperature <= TEMPERATURE_MAX; } + /** + * @return + */ public String getPlat() { return plat; } @@ -106,11 +122,20 @@ public class Cuisson implements Serializable { return degree; } + public void editCuisson(String plat, int heure, int minute, int degree) { + if (!platValide(plat) || !horaireValide(heure, minute) || !temperatureValide(degree)) + throw new IllegalArgumentException(); + + this.plat = plat; + this.heure = heure; + this.minute = minute; + this.degree = degree; + } + @Override public String toString() { StringBuilder aRenvoyer = new StringBuilder(); - // on insère le nom du plat aRenvoyer.append(plat); aRenvoyer.append(chaineEspace(LG_MAX_PLAT - plat.length())); @@ -161,8 +186,7 @@ public class Cuisson implements Serializable { */ public static int extraireTemperature(String source) { int temperature; // température extraite - String - chaineTemperature; // température extraite en tant que chaîne + String chaineTemperature; // température extraite en tant que chaîne try { @@ -184,20 +208,17 @@ public class Cuisson implements Serializable { * Renvoie le thermostat correspondant à la temperature argument * (celle-ci doit être inférieure à TEMPERATURE_MAX) * - * @param temperature température à convertir * @return l'entier égal au thermostat ou -1 si la température est invalide */ - public static int thermostat(int temperature) { - int aRenvoyer; // valeur du thermostat à renvoyer - if (temperature <= 0 || temperature > TEMPERATURE_MAX) { - aRenvoyer = -1; - } else { - aRenvoyer = temperature / 30; - if (temperature % 30 > 15) { - aRenvoyer++; - } + public int getThermostat() { + int thermostat = -1; + + if (temperatureValide(degree)) { + thermostat = degree / 30; + if (degree % 30 > 15) thermostat++; } - return aRenvoyer; + + return thermostat; } /** @@ -209,9 +230,7 @@ public class Cuisson implements Serializable { */ private static String chaineEspace(int nbEspace) { StringBuilder aRenvoyer = new StringBuilder(); - for (int i = 1; i <= nbEspace; i++) { - aRenvoyer.append(" "); - } + for (int i = 1; i <= nbEspace; i++) aRenvoyer.append(" "); return aRenvoyer.toString(); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/outilcuisson/MainActivity.java b/app/src/main/java/com/example/outilcuisson/MainActivity.java index 23a4979..03085ac 100644 --- a/app/src/main/java/com/example/outilcuisson/MainActivity.java +++ b/app/src/main/java/com/example/outilcuisson/MainActivity.java @@ -1,60 +1,43 @@ package com.example.outilcuisson; import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; import android.os.Bundle; -import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.FragmentManager; import androidx.viewpager2.widget.ViewPager2; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.List; -public class MainActivity extends AppCompatActivity implements AjouterFragment.EcouteurAjout { +public class MainActivity extends AppCompatActivity { /** * Le nom du fichier de sauvegarde */ private static final String NOM_FICHIER = "cuisson.txt"; - /** - * Tag utilisé dans les messages de log. Les messages de log sont - * affichés en cas - * de problème lors de l'accès au fichier - */ - private static final String TAG = "Cuisson"; + private ArrayList listeCuisson; private ViewPager2 gestionnairePagination; + public boolean modeEdition = false; + public Cuisson cuissonAEditer; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -73,68 +56,83 @@ public class MainActivity extends AppCompatActivity implements AjouterFragment.E new TabLayoutMediator(gestionnaireOnglet, gestionnairePagination, (tab, position) -> tab.setText( titreOnglet[position])).attach(); + + /* Crée la liste des cuissons */ + listeCuisson = new ArrayList<>(); } @Override - protected void onStart() { - super.onStart(); - readFromFile(); - System.out.println("onResume : " + AfficherFragment.cuissonAffichees); + protected void onResume() { + super.onResume(); + chargerFichier(); } @Override - protected void onDestroy() { - System.out.println( - "Avant write : " + AfficherFragment.cuissonAffichees); - writeToFile(); - System.out.println( - "Après write : " + AfficherFragment.cuissonAffichees); - super.onDestroy(); + protected void onPause() { + sauvegarderFichier(); + super.onPause(); } - private void writeToFile() { - try { - File path = getFilesDir(); - File file = new File(path, NOM_FICHIER); + /** + * Ajoute une cuisson a la liste des cuissons + * + * @param cuisson Objet cuisson a ajouter dans la liste + */ + public void addCuisson(Cuisson cuisson) { + if (estDansCuisson(cuisson)) throw new IllegalArgumentException("Il existe deja un plat avec ce nom"); - if (!path.exists()) { - path.mkdirs(); - } + listeCuisson.add(cuisson); - FileOutputStream fos = new FileOutputStream(file); - ObjectOutputStream oos = new ObjectOutputStream(fos); + /* Test affichage du contennu de la liste des cuisson */ + System.out.println(Arrays.asList(listeCuisson)); + } - oos.writeObject(AfficherFragment.cuissonAffichees); + public ArrayList getListeCuisson() { + return listeCuisson; + } - oos.close(); - fos.close(); - System.out.println("Ecriture réalisée"); - - } catch (IOException e) { - Log.e(TAG, "File write failed: " + e.toString()); + private boolean estDansCuisson(Cuisson aTester) { + for (Cuisson cuisson : listeCuisson) { + if (cuisson.getPlat().equals(aTester.getPlat())) return true; } + return false; } - private void readFromFile() { - try { - File path = getFilesDir(); - File file = new File(path, NOM_FICHIER); + public void editerCuisson(int index) { + changeFragment(1); + modeEdition = true; + cuissonAEditer = listeCuisson.get(index); + } - FileInputStream fis = new FileInputStream(file); + + private void chargerFichier() { + try { + + + FileInputStream fis = openFileInput(NOM_FICHIER); ObjectInputStream ois = new ObjectInputStream(fis); - AfficherFragment.cuissonAffichees - = (ArrayList) ois.readObject(); + listeCuisson = (ArrayList) ois.readObject(); ois.close(); fis.close(); - System.out.println("Lecture réalisée"); - } catch (FileNotFoundException e) { - Log.e(TAG, "File not found: " + e.toString()); + } catch (IOException | ClassNotFoundException e) { + e.printStackTrace(); + } + } + + private void sauvegarderFichier() { + try { + FileOutputStream fos = openFileOutput(NOM_FICHIER, MODE_PRIVATE); + ObjectOutputStream oos = new ObjectOutputStream(fos); + + oos.writeObject(listeCuisson); + + oos.close(); + fos.close(); + } catch (IOException e) { - Log.e(TAG, "Can not read file: " + e.toString()); - } catch (ClassNotFoundException e) { e.printStackTrace(); } } @@ -163,37 +161,22 @@ public class MainActivity extends AppCompatActivity implements AjouterFragment.E } public void afficherAide() { - new AlertDialog.Builder(this).setTitle(R.string.alert_title_aide) - .setMessage(R.string.alert_content_help) - .setNeutralButton( - R.string.alert_neutral_button, null) - .show(); + new AlertDialog.Builder(this) + .setTitle(R.string.alert_title_aide) + .setMessage(R.string.alert_content_help) + .setNeutralButton(R.string.alert_neutral_button, null) + .show(); } public void reinitData() { - new AlertDialog.Builder(this).setTitle(R.string.alert_title_reinit) - .setMessage(R.string.alert_content_reinit) - .setNeutralButton( - R.string.alert_neutral_button, null) - .setPositiveButton(R.string.btn_valider, - (dialogInterface, i) -> { - AfficherFragment.adapterCuissons - .clear(); - AfficherFragment.adapterCuissons - .notifyDataSetChanged(); - }) - .show(); - } - - @Override - public void recevoirCuisson(Cuisson cuisson) { - AfficherFragment fragmentAModifier - = (AfficherFragment) getSupportFragmentManager().findFragmentByTag( - "f0"); - - if (fragmentAModifier != null) { - fragmentAModifier.addCuisson(cuisson); - } + new AlertDialog.Builder(this) + .setTitle(R.string.alert_title_reinit) + .setMessage(R.string.alert_content_reinit) + .setNeutralButton(R.string.alert_neutral_button, null) + .setPositiveButton(R.string.btn_valider, (dialogInterface, i) -> { + AfficherFragment.adapterCuissons.clear(); + AfficherFragment.adapterCuissons.notifyDataSetChanged();}) + .show(); } public void changeFragment(int pos) { diff --git a/app/src/main/java/com/example/outilcuisson/OutilCuisson.java b/app/src/main/java/com/example/outilcuisson/OutilCuisson.java index 6a84c1f..73cfa6a 100644 --- a/app/src/main/java/com/example/outilcuisson/OutilCuisson.java +++ b/app/src/main/java/com/example/outilcuisson/OutilCuisson.java @@ -1,242 +1,242 @@ -/* **************************************************************************** * - * IUT de Rodez - Département Informatique * - * Semestre 4 - Applications mobiles * - * * - * SUJET CONTROLE MARS 2019 * - * ANNEXES * - * * - * **************************************************************************** */ - - -/* - * Classe avec des méthodes outils pour gérer une chaîne de caractères contenant - * les caractéristiques d'une cuisson au four - * OutilCuisson.java 12/21 - */ - -/* A priori de fichier ne doit pas être modifié. Vous restez libre de le modifier si - besoin - */ -package com.example.outilcuisson; - - -/** - * Cette classe est une classe utilitaire qui contient des méthodes outils pour gérer - * une chaîne de caractères contenant le descriptif d'une cuisson au four. - * Les caractéristiques d'une cuisson sont : - * - le nom du plat (une chaîne non vide) - * - les heures de la durée de la cuisson (un entier entre 0 et 9) - * - les minutes de la durée de la cuisson (un entier entre O et 50) - * - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX) - * - * @author INFO2 Semestre 4 - */ -public class OutilCuisson { - - /** - * Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques - * de la cuisson est invalide - */ - private static final String CHAINE_DEFAUT = "Information incohérente"; - - /** - * Température maximale pour la cuisson - */ - public static final int TEMPERATURE_MAX = 300; - - - /** - * Valeur maximale pour le nombre d'heures d'une cuisson - */ - public static final int HEURE_MAX = 9; - - /** - * Nombre maximum de caractères pour le nom du plat - */ - private static final int LG_MAX_PLAT = 18; - - - /** - * Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne - * contient pas le caractère '|') - * - * @param nomPlat chaîne à testesr - * @return un booléen égal à vrai ssi la chaîne à tester est valide - */ - public static boolean platValide(String nomPlat) { - return nomPlat.length() > 0 && nomPlat.length() <= LG_MAX_PLAT - && !nomPlat.contains("|"); - } - - - /** - * Détermine si le nombre d'heures d'une durée de cuisson est valide - * (comprise entre 0 et 9) - * - * @param heureCuisson heure à tester - * @return un booléen égal à vrai ssi l'heure de la durée est valide - */ - public static boolean heureCuissonValide(int heureCuisson) { - return 0 <= heureCuisson && heureCuisson <= HEURE_MAX; - } - - - /** - * Détermine si le nombre de minutes d'une durée de cuisson est valide - * (comprise entre 0 et 59) - * - * @param minuteCuisson minute à tester - * @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide - */ - public static boolean minuteCuissonValide(int minuteCuisson) { - return 0 <= minuteCuisson && minuteCuisson <= 59; - } - - - /** - * Détermine si une température de cuisson est valide - * (strictement positive et inférieure ou égale à TEMPERATURE_MAX) - * - * @param temperature temperature à tester - * @return un booléen égal à vrai ssi la température est valide - */ - public static boolean temperatureValide(int temperature) { - return 0 < temperature && temperature <= TEMPERATURE_MAX; - } - - - /** - * Concatène les arguments dans une chaîne de caractères. Celle-ci aura le format - * suivant : - * nom du plat | temps de cuisson en heures et minutes | température - * Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui - * est renvoyée - * - * @param nomPlat nom du plat. Doit être non vide, avec au plus - * LG_MAX_PLAT caractères, ne doit pas contenir | - * @param heureCuisson nombre d'heures de la durée de la cuisson - * doit être compris entre 0 et 9 - * @param minuteCuisson nombre de minutes de la durée de la cuisson - * doit être compris entre 0 et 59 - * @param temperature température de la cuisson. Doit être comprise entre - * 1 et TEMPERATURE_MAX - * @return une chaîne contenant le descriptif de la cuisson si les paramètres - * sont valides. Sinon la chaîne CHAINE_DEFAUT - */ - public static String transformeEnChaine(String nomPlat, int heureCuisson, - int minuteCuisson, int temperature) { - StringBuilder aRenvoyer = new StringBuilder(); - - if (platValide(nomPlat) && heureCuissonValide(heureCuisson) - && minuteCuissonValide(minuteCuisson) && temperatureValide(temperature)) { - - // on insère le nom du plat - aRenvoyer.append(nomPlat); - aRenvoyer.append(chaineEspace(LG_MAX_PLAT - nomPlat.length())); - aRenvoyer.append(" | "); - - // on insère la durée - aRenvoyer.append(String.valueOf(heureCuisson)); - aRenvoyer.append(" h "); - if (minuteCuisson < 10) { - aRenvoyer.append("0"); - } - aRenvoyer.append(String.valueOf(minuteCuisson)); - aRenvoyer.append(" | "); - - // on insère la température - aRenvoyer.append(String.format("%3d", temperature)); - } else { - - // l'un des arguments est invalide - aRenvoyer.append(CHAINE_DEFAUT); - } - return aRenvoyer.toString(); - } - - - /** - * Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement - * formatée dans le format de la description d'une cuisson gérée par cette classe - * (les 20 premiers caractères de la chaîne sont extraits) - * - * @param source chaîne source de l'extraction - * @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne - * argument est trop courte - */ - public static String extrairePlat(String source) { - if (source.length() < LG_MAX_PLAT) { - return CHAINE_DEFAUT; - } else { - return source.substring(0, LG_MAX_PLAT); - } - } - - - /** - * Extrait d'une chaîne la température de cuisson. On suppose que la chaîne - * est correctement formatée dans le format de la description d'une cuisson - * gérée par cette classe (la température est présente sur les 3 derniers - * caractères de la chaîne) - * - * @param source chaîne source de l'extraction - * @return un entier égal à la température extraite ou bien -1 si un - * problème inattendu a été rencontré avec le format de la chaîne - */ - public static int extraireTemperature(String source) { - int temperature; // température extraite - String chaineTemperature; // température extraite en tant que chaîne - - - try { - chaineTemperature = source.substring(source.length() - 3, source.length()); - temperature = Integer.parseInt(chaineTemperature); - } catch (NumberFormatException | IndexOutOfBoundsException erreur) { - - /* - * erreur lors de l'extraction des 3 derniers caractère - * ou lors de la transformation en entier - */ - temperature = -1; - } - return temperature; - } - - - /** - * Renvoie le thermostat correspondant à la temperature arguemnt - * (celle-ci doit être inférieure à TEMPERATURE_MAX) - * - * @param temperature température à convertir - * @return l'entier égal au thermostat ou -1 si la température est invalide - */ - public static int thermostat(int temperature) { - int aRenvoyer; // valeur du thermostat à renvoyer - if (temperature <= 0 || temperature > TEMPERATURE_MAX) { - aRenvoyer = -1; - } else { - aRenvoyer = temperature / 30; - if (temperature % 30 > 15) { - aRenvoyer++; - } - } - return aRenvoyer; - } - - - /** - * Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué - * par le paramètre. - * - * @param nbEspace nombre d'espaces à placer dans la chaîne - * @return une chaîne constituée du caractère espace - */ - private static String chaineEspace(int nbEspace) { - StringBuilder aRenvoyer = new StringBuilder(); - for (int i = 1; i <= nbEspace; i++) { - aRenvoyer.append(" "); - } - return aRenvoyer.toString(); - } - -} \ No newline at end of file +///* **************************************************************************** * +// * IUT de Rodez - Département Informatique * +// * Semestre 4 - Applications mobiles * +// * * +// * SUJET CONTROLE MARS 2019 * +// * ANNEXES * +// * * +// * **************************************************************************** */ +// +// +///* +// * Classe avec des méthodes outils pour gérer une chaîne de caractères contenant +// * les caractéristiques d'une cuisson au four +// * OutilCuisson.java 12/21 +// */ +// +///* A priori de fichier ne doit pas être modifié. Vous restez libre de le modifier si +// besoin +// */ +//package com.example.outilcuisson; +// +// +///** +// * Cette classe est une classe utilitaire qui contient des méthodes outils pour gérer +// * une chaîne de caractères contenant le descriptif d'une cuisson au four. +// * Les caractéristiques d'une cuisson sont : +// * - le nom du plat (une chaîne non vide) +// * - les heures de la durée de la cuisson (un entier entre 0 et 9) +// * - les minutes de la durée de la cuisson (un entier entre O et 50) +// * - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX) +// * +// * @author INFO2 Semestre 4 +// */ +//public class OutilCuisson { +// +// /** +// * Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques +// * de la cuisson est invalide +// */ +// private static final String CHAINE_DEFAUT = "Information incohérente"; +// +// /** +// * Température maximale pour la cuisson +// */ +// public static final int TEMPERATURE_MAX = 300; +// +// +// /** +// * Valeur maximale pour le nombre d'heures d'une cuisson +// */ +// public static final int HEURE_MAX = 9; +// +// /** +// * Nombre maximum de caractères pour le nom du plat +// */ +// private static final int LG_MAX_PLAT = 18; +// +// +// /** +// * Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne +// * contient pas le caractère '|') +// * +// * @param nomPlat chaîne à testesr +// * @return un booléen égal à vrai ssi la chaîne à tester est valide +// */ +// public static boolean platValide(String nomPlat) { +// return nomPlat.length() > 0 && nomPlat.length() <= LG_MAX_PLAT +// && !nomPlat.contains("|"); +// } +// +// +// /** +// * Détermine si le nombre d'heures d'une durée de cuisson est valide +// * (comprise entre 0 et 9) +// * +// * @param heureCuisson heure à tester +// * @return un booléen égal à vrai ssi l'heure de la durée est valide +// */ +// public static boolean heureCuissonValide(int heureCuisson) { +// return 0 <= heureCuisson && heureCuisson <= HEURE_MAX; +// } +// +// +// /** +// * Détermine si le nombre de minutes d'une durée de cuisson est valide +// * (comprise entre 0 et 59) +// * +// * @param minuteCuisson minute à tester +// * @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide +// */ +// public static boolean minuteCuissonValide(int minuteCuisson) { +// return 0 <= minuteCuisson && minuteCuisson <= 59; +// } +// +// +// /** +// * Détermine si une température de cuisson est valide +// * (strictement positive et inférieure ou égale à TEMPERATURE_MAX) +// * +// * @param temperature temperature à tester +// * @return un booléen égal à vrai ssi la température est valide +// */ +// public static boolean temperatureValide(int temperature) { +// return 0 < temperature && temperature <= TEMPERATURE_MAX; +// } +// +// +// /** +// * Concatène les arguments dans une chaîne de caractères. Celle-ci aura le format +// * suivant : +// * nom du plat | temps de cuisson en heures et minutes | température +// * Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui +// * est renvoyée +// * +// * @param nomPlat nom du plat. Doit être non vide, avec au plus +// * LG_MAX_PLAT caractères, ne doit pas contenir | +// * @param heureCuisson nombre d'heures de la durée de la cuisson +// * doit être compris entre 0 et 9 +// * @param minuteCuisson nombre de minutes de la durée de la cuisson +// * doit être compris entre 0 et 59 +// * @param temperature température de la cuisson. Doit être comprise entre +// * 1 et TEMPERATURE_MAX +// * @return une chaîne contenant le descriptif de la cuisson si les paramètres +// * sont valides. Sinon la chaîne CHAINE_DEFAUT +// */ +// public static String transformeEnChaine(String nomPlat, int heureCuisson, +// int minuteCuisson, int temperature) { +// StringBuilder aRenvoyer = new StringBuilder(); +// +// if (platValide(nomPlat) && heureCuissonValide(heureCuisson) +// && minuteCuissonValide(minuteCuisson) && temperatureValide(temperature)) { +// +// // on insère le nom du plat +// aRenvoyer.append(nomPlat); +// aRenvoyer.append(chaineEspace(LG_MAX_PLAT - nomPlat.length())); +// aRenvoyer.append(" | "); +// +// // on insère la durée +// aRenvoyer.append(String.valueOf(heureCuisson)); +// aRenvoyer.append(" h "); +// if (minuteCuisson < 10) { +// aRenvoyer.append("0"); +// } +// aRenvoyer.append(String.valueOf(minuteCuisson)); +// aRenvoyer.append(" | "); +// +// // on insère la température +// aRenvoyer.append(String.format("%3d", temperature)); +// } else { +// +// // l'un des arguments est invalide +// aRenvoyer.append(CHAINE_DEFAUT); +// } +// return aRenvoyer.toString(); +// } +// +// +// /** +// * Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement +// * formatée dans le format de la description d'une cuisson gérée par cette classe +// * (les 20 premiers caractères de la chaîne sont extraits) +// * +// * @param source chaîne source de l'extraction +// * @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne +// * argument est trop courte +// */ +// public static String extrairePlat(String source) { +// if (source.length() < LG_MAX_PLAT) { +// return CHAINE_DEFAUT; +// } else { +// return source.substring(0, LG_MAX_PLAT); +// } +// } +// +// +// /** +// * Extrait d'une chaîne la température de cuisson. On suppose que la chaîne +// * est correctement formatée dans le format de la description d'une cuisson +// * gérée par cette classe (la température est présente sur les 3 derniers +// * caractères de la chaîne) +// * +// * @param source chaîne source de l'extraction +// * @return un entier égal à la température extraite ou bien -1 si un +// * problème inattendu a été rencontré avec le format de la chaîne +// */ +// public static int extraireTemperature(String source) { +// int temperature; // température extraite +// String chaineTemperature; // température extraite en tant que chaîne +// +// +// try { +// chaineTemperature = source.substring(source.length() - 3, source.length()); +// temperature = Integer.parseInt(chaineTemperature); +// } catch (NumberFormatException | IndexOutOfBoundsException erreur) { +// +// /* +// * erreur lors de l'extraction des 3 derniers caractère +// * ou lors de la transformation en entier +// */ +// temperature = -1; +// } +// return temperature; +// } +// +// +// /** +// * Renvoie le thermostat correspondant à la temperature arguemnt +// * (celle-ci doit être inférieure à TEMPERATURE_MAX) +// * +// * @param temperature température à convertir +// * @return l'entier égal au thermostat ou -1 si la température est invalide +// */ +// public static int thermostat(int temperature) { +// int aRenvoyer; // valeur du thermostat à renvoyer +// if (temperature <= 0 || temperature > TEMPERATURE_MAX) { +// aRenvoyer = -1; +// } else { +// aRenvoyer = temperature / 30; +// if (temperature % 30 > 15) { +// aRenvoyer++; +// } +// } +// return aRenvoyer; +// } +// +// +// /** +// * Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué +// * par le paramètre. +// * +// * @param nbEspace nombre d'espaces à placer dans la chaîne +// * @return une chaîne constituée du caractère espace +// */ +// private static String chaineEspace(int nbEspace) { +// StringBuilder aRenvoyer = new StringBuilder(); +// for (int i = 1; i <= nbEspace; i++) { +// aRenvoyer.append(" "); +// } +// return aRenvoyer.toString(); +// } +// +//} \ No newline at end of file