Calcul cours [Résolu]

Signaler
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021
-
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
-
Bonjour, comment vous allez?
J'ai créé une application pour gérer les cours et devoirs d'un établissement.
Il fallait d'abord que je crée une table enseignant qui permettra de voir quel enseignant on peut prendre pour le cour en voyant son temps libre , le nombre d'heure qu'il proposera et la matière qu'il fera.
Apres avoir fait pour l'enseignant, j'ai créé la table cours, qui permet d'insérer des données à partir du formulaire cours. Ce que je voudrais c'est que ca fasse des calcul en arrière pour nous permettre de savoir a tout moment le nombre d'heure qui reste a l'enseignant à chaque fois que j'ajouterai une séance de cours.
Je sais pas comment y arrivé a cela. Si vous pouviez m'aider.
Merci.

18 réponses

Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Bonjour

Tu veux faire ça dans C# ou dans la base de données ?
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

dans C#
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
J'imagine que tu as écrit une classe Enseignant et une classe Cours.

Peux tu les poster?
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

D'accord.
Pour enseignant:


Pour cours:
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Puisque tu veux faire ça dans C#; la base de données ne m'intéresse pas.
Je t'ai demandé les classe C#.
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

Ah oui je n'avais pas bien compris

........................Pour enseignant: c'est la partie lorsque l'administrateur approuve la demande de l'enseignant..............
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using System.Windows.Forms;
using WindowsFormsApp1.BLL;
using WindowsFormsApp1.DAL;
using WindowsFormsApp1.TOOL;
using MySql.Data.MySqlClient;

namespace WindowsFormsApp1.Windows_Form.enseignant
{
    public partial class modifierense : Form
    {
        //Appel des controleurs , info et chaines de connexion
        databasehelper dh = new databasehelper();
        MySqlDataReader dr;
        operateurcontroleur opc = new operateurcontroleur();
        operateurinfo opi = new operateurinfo();
        FormCollection listform;
        DataSet ds1, ds2, ds3;

        //variable
        bool result;

        private UserControl modiens;
        public modifierense(UserControl mde)
        {
            InitializeComponent();
            this.modiens = mde;
        }

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
        {

        }

        private void button4_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void button4_BackColorChanged(object sender, EventArgs e)
        {
            
        }

        private void txtdemande_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if (txtdemande.Text == "Accepter")
                {

                    button4.FlatAppearance.MouseOverBackColor = Color.ForestGreen;
                    button4.FlatAppearance.MouseDownBackColor = Color.ForestGreen;
                    
                }
                else if (txtdemande.Text == "En attente")
                {
                    button4.FlatAppearance.MouseOverBackColor = Color.Orange;
                    button4.FlatAppearance.MouseDownBackColor = Color.Orange;
                    
                }
                else if (txtdemande.Text == "Refuser")
                {
                    button4.FlatAppearance.MouseOverBackColor = Color.Red;
                    button4.FlatAppearance.MouseDownBackColor = Color.Red;
                    
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void modifierense_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
           
        }
       
        private void button4_Click(object sender, EventArgs e)
        {
            try
            {

                if (MessageBox.Show("Voulez vous modifier cet programme enseignant?", "GSED", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {

                    dh.ExecuteNonQuery("update enseignant set demande_de_permission = '" + txtdemande.Text.Replace("'", "''") + "' where code_enseignant='" + txtcodeenseignant.Text + "' ");

                    MessageBox.Show("Le Programme enseignant modifié avec succès", "GSED");
                    (modiens as UCenseignant).affie();

                    txtnom.Text = "";
                    txtnom.Focus();
                    txtfiliere.Focus();
                    txtfiliere.Text = "";
                    txtniveau.Text = "";
                    txtniveau.Focus();
                    txtmatiere.Text = "";
                    txtmatiere.Focus();
                    txtcours.Text = "";
                    txtcours.Focus();
                    txtdevoir.Text = "";
                    txtdevoir.Focus();
                    txttotal.Text = "";
                    txttotal.Focus();
                    txtfiliere.Focus();
                    txtfiliere.Text = "";
                    txtniveau.Text = "";
                    txtniveau.Focus();
                    txtmatiere.Text = "";
                    txtmatiere.Focus();
                    txtsemaine.Text = "";
                    txtsemaine.Focus();

                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}



........................................................................................................Pour le cours:.....................................................................
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using System.Windows.Forms;
using WindowsFormsApp1.BLL;
using WindowsFormsApp1.DAL;
using WindowsFormsApp1.TOOL;
using MySql.Data.MySqlClient;
using WindowsFormsApp1.user_controler;

namespace WindowsFormsApp1.Windows_Form.cours
{
    public partial class ajoutcours : Form
    {
        databasehelper dh = new databasehelper();
        MySqlDataReader dr;
        operateurcontroleur opc = new operateurcontroleur();
        operateurinfo opi = new operateurinfo();
        FormCollection listform;
        DataSet ds1, ds2, ds3,ds4,ds5,ds6;

        //variable
        bool result;

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtsalle_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void txttotal_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void label7_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
          
          
        }

        private void txtfin_ValueChanged(object sender, EventArgs e)
        {
            //calcul d'heure

            TimeSpan rr = TimeSpan.Parse(txtfin.Text) - TimeSpan.Parse(txtdebut.Text);
            txttotal.Text = rr.ToString();
        }

        private void txtdebut_ValueChanged(object sender, EventArgs e)
        {
           
            //calcul d'heure

            TimeSpan rr = TimeSpan.Parse(txtfin.Text) - TimeSpan.Parse(txtdebut.Text);
            txttotal.Text = rr.ToString();
        }

        private UserControl ajoucou;

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
           
        }

        public ajoutcours(UserControl ajc)
        {
            InitializeComponent();
            this.ajoucou = ajc;

            txtcodecours.Enabled = false;
            txttotal.Enabled = false;
        
        }

        private void ajoutcours_Load(object sender, EventArgs e)
        {
            try
            {
                


                //charger les noms des matieres
                ds1 = dh.ExecuteDataSet("select distinct nom_matiere from matiere order by nom_matiere asc");
                txtmatiere.DataSource = ds1.Tables[0];
                txtmatiere.DisplayMember = "nom_matiere";
                txtmatiere.Text = "";

                //charger les noms des filieres 
                ds2 = dh.ExecuteDataSet("select distinct abrege from filiere order by abrege asc");
                txtfiliere.DataSource = ds2.Tables[0];
                txtfiliere.DisplayMember = "abrege";
                txtfiliere.Text = "";

                //charger les noms des niveaux
                ds3 = dh.ExecuteDataSet("select distinct abrege from niveau order by abrege asc");
                txtniveau.DataSource = ds3.Tables[0];
                txtniveau.DisplayMember = "abrege";
                txtniveau.Text = "";

                //charger les noms des enseignants
                ds4 = dh.ExecuteDataSet("select distinct nom_enseignant from enseignant where demande_de_permission='Accepter' order by nom_enseignant asc  ");
                txtenseig.DataSource = ds4.Tables[0];
                txtenseig.DisplayMember = "nom_enseignant";
                txtenseig.Text = "";

                //charger les noms des salles
                ds5 = dh.ExecuteDataSet("select distinct numero from salle order by numero asc");
                txtsalle.DataSource = ds5.Tables[0];
                txtsalle.DisplayMember = "numero";
                txtsalle.Text = "";
             
               
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {


                if (txtmatiere.Text == "" || txtfiliere.Text == "" || txtniveau.Text == "" || txtenseignant.Text == "" || date.Text == "" || txtdebut.Text == "" || txtfin.Text == "" || txttotal.Text == "" || txtjour.Text == "" ||txtsalle.Text=="")
                {
                    MessageBox.Show("Désolé tous les champs doivent être renseignés", "GSED");
                }
                else
                {


                    dh.ExecuteNonQuery("insert into cours (code_matiere,code_filiere,code_niveau, code_enseignant,date,heure_debut,heure_fin,nbr_heure,jour,salle ) values ('" + txtmatiere.Text.Replace("'", "''") + "', '" + txtfiliere.Text.Replace("'", "''") + "','" + txtniveau.Text.Replace("'", "''") + "','" + txtenseig.Text.Replace("'", "''") + "','" + DateTime.Now.ToString("yyyy/MM/dd") + "','" + txtdebut.Text.Replace("'", "''") + "','" + txtfin.Text.Replace("'", "''") + "','" + txttotal.Text.Replace("'", "''") + "','" + txtjour.Text.Replace("'", "''") + "','" + txtsalle.Text.Replace("'", "''") + "')");

                    MessageBox.Show("La séance a été enregistré avec succès");
                    (ajoucou as UCcours).affic();
                    txtmatiere.Text = "";
                    txtmatiere.Focus();
                    txtfiliere.Text = "";
                    txtfiliere.Focus();
                    txtniveau.Text = "";
                    txtniveau.Focus();
                    txtenseignant.Text = "";
                    txtenseignant.Focus();
                    date.Text = "";
                    date.Focus();
                    txtdebut.Focus();
                    txtdebut.Text = "";
                    txtfin.Text = "";
                    txtfin.Focus();
                    txttotal.Text = "";
                    txttotal.Focus();
                    txtjour.Text = "";
                    txtjour.Focus();
                    txtsalle.Text = "";
                    txtsalle.Focus();


                }




            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
OK.

Tu as indiqué précédement que tu débutes. On y est tous passé c'est pas un problème.

Là où ça peut devenir un problème, c'est de le faire en dépit du bon sens.
Le bon sens, c'est de commencer par apprendre les bases.
J'émets l'hypothèse que tu as sauté cette étape, car le code que tu présentes c'est du bricolage.

La majorité des bons cours (même les gratuits) font apprendre à écrire et manipuler des objets métiers (classes) bien avant de traiter de l'interface graphique.
Celui de Tahé par exemple https://tahe.developpez.com/dotnet/csharp/ traite les classes au chapitre 2 et winform au chapitre 5.
C'est à dire, que selon cette progression, tu es sensé savoir te servir correctement des objets métiers, bien avant d'avoir poser un bouton ou un datetimepicker sur un formulaire.

Le meilleur conseil que je puisse te donner, c'est de prendre quelques jours pour suivre le cours de Tahé de A à Z. Ensuite de réfléchir au fait que je t'ai parlé de classe Enseignant et de classe Cours.
Et enfin de revenir pour qu'on avance en C#
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

D'accord.
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

Bonjour, Je viens de voir le cours sur les classes, au début je voulais faire dans C# et j'ai remarqué que c'était compliqué donc je préfère que ca soit dans la base de donnée.
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549 >
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

Ok mais ce nombre d'heure c'est par semaines, par mois, par année, pour toute sa vie?
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021
>
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021

c'est pour l'année comme ca , lorsque une année passe on réinitialise ca. on remet les compteurs a zero.
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549 >
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

Ok et doit on faire apparaitre des indisponibilités, par exemple, il ne travaille pas le mardi après-midi, il est en congé tel ou tel jour etc...
>
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021

Oui j'ai fait un truc là, où l'enseignant doit dire les jours kil est disponible, mais au niveau de la base de données. Mais je sais pas cmt on peut le faire à travers la classe enseignant
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549 > Kfaycal
Je te propose une classe abstraite "CreneauHoraire" (ou un nom qui te parle dans ce thème).
Elle a une propriété ID, une propriété DateTime "Debut", une propriété DateTime "Fin", une propriéte TimeSpan en lecture seule qui retourne la durée.

Cette classe est dérivée en 2 classes, "Cours" et "Absence", cours a au moins en plus une propriété "Matiere", peut avoir une propriété "Raison" (Congé, maladie, jour off etc...)

Et enfin une classe enseignant, avec toutes les biodatas de la personne, un ID, et une collection de "CreneauHoraire" dans laquelle il y a des cours et des absences.
A chaque ajout de cours, la somme est faite pour avoir la durée réalisée et elle est soustraite au total pour avoir ce qui reste
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

D'accord pas de souci.
J'ai essayé d'une autre façon pour le calcul. J'envoie une photo de mon formulaire ajoutcours:

Vous verrez une partie un peu grisé, qui concerne la table enseignant:

Car je me disais que c'est possible de faire un appel de enseignant sur le formulaire pour faire les calculs d'heure, mais le souci c'est que le deux textbox où on met l'heure total concerne le champ nbr_heure_total_rest dans la table enseignant. Et l'autre textbox qui est le reste , c'est a ce niveau qu'il y'aura le resultat du calcul. Je veux faire ( Heure total - nombre d'heure). J'ai essayé d'appliquer un timespan mais ca ne marche pas.
Merci
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Un exemple au plus simple (notamment, je n'ai pas vérifié que l'heure de fin est après l'heure de début, ni que 2 plages ne peuvent pas se chevaucher...)

Enseignant
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;

namespace Tests
{
    class Enseignant
    {
        public Enseignant(string LeNom, TimeSpan LaDureeCoursPrevue)
        {
            Nom = LeNom;
            DureeCoursPrevue = LaDureeCoursPrevue;
            Creneaux.CollectionChanged += Creneaux_CollectionChanged;
        }


        /// <summary>
        /// Quand la collection subit un changement
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Creneaux_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            switch(e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                case NotifyCollectionChangedAction.Remove:
                case NotifyCollectionChangedAction.Reset:
                case NotifyCollectionChangedAction.Replace:
                    DureeCoursRestant = DureeCoursPrevue - TimeSpan.FromHours(Creneaux.OfType<Cours>().Sum(cours => cours.Duree.TotalHours));
                    break;
            }
        }

        /// <summary>
        /// Nom de l'enseignant
        /// </summary>
        public string Nom { get; private set; }

        /// <summary>
        /// Creneaux de l'enseignant
        /// </summary>
        public ObservableCollection<Creneau> Creneaux { get; private set; } = new ObservableCollection<Creneau>();

        /// <summary>
        /// Durée de cours prévue
        /// </summary>
        public TimeSpan DureeCoursPrevue { get; private set; }

        /// <summary>
        /// Durée de cours restant
        /// </summary>
        public TimeSpan DureeCoursRestant { get; private set; }
    }
}


Les 3 classes Creneau
using System;

namespace Tests
{
    /// <summary>
    /// Définit un créneau
    /// </summary>
    abstract class Creneau
    {
        protected string info;

        protected Creneau(DateTime LeDebut, DateTime LaFin)
        {
            debut = LeDebut;
            fin = LaFin;
        }

        protected DateTime debut;
        /// <summary>
        /// Debut du créneau horaire
        /// </summary>
        public DateTime Debut
        {
            get { return debut; }
            set { debut = value; }
        }


        private DateTime fin;
        /// <summary>
        /// Fin du créneau horaire
        /// </summary>
        public DateTime Fin
        {
            get { return fin; }
            set { fin = value; }
        }

        /// <summary>
        /// Fin du créneau horaire
        /// </summary>
        public TimeSpan Duree
        {
            get { return fin - debut; }
        }

        public override string ToString()
        {
            return string.Format(
 @"{0}
Le {1:dd/MM/yyyy}
De {1:HH:mm} à {2:HH:mm}
Durée {3}
",
info, Debut,Fin, Duree);
        }
    }

    class Cours : Creneau
    {
        public Cours(DateTime LeDebut, DateTime LaFin, string LaMatiere) : base(LeDebut, LaFin)
        {
            info = LaMatiere;
        }

        public string Matiere { get { return info; } }

    }

    class Abscence : Creneau
    {
        public Abscence(DateTime LeDebut, DateTime LaFin, string LaRaison) : base(LeDebut, LaFin)
        {
            info = LaRaison;
        }

        public string Raison { get { return info; } }
    }
}


Création d'un enseignant, affectation d'indispos et de cours
            Enseignant en = new Enseignant("Prof", TimeSpan.FromHours(5));
            en.Creneaux.Add(new Abscence(DateTime.Parse("01/06/2021 8:00"), DateTime.Parse("01/06/2021 18:00"), "Congés"));

            DateTime pasLesJeudisPM = DateTime.Parse("03/06/2021 12:00");

            while(pasLesJeudisPM.Month < 7)
            {
                en.Creneaux.Add(new Abscence(pasLesJeudisPM, pasLesJeudisPM.AddHours(6), "Pas les jeudis après midi"));
                pasLesJeudisPM = pasLesJeudisPM.AddDays(7);
            }

            string duree1 = en.DureeCoursRestant.ToString();

            en.Creneaux.Add(new Cours(DateTime.Parse("02/06/2021 8:00"), DateTime.Parse("02/06/2021 9:00"), "Maths"));

            string duree2 = en.DureeCoursRestant.ToString();

            en.Creneaux.Add(new Cours(DateTime.Parse("04/06/2021 11:00"), DateTime.Parse("04/06/2021 12:00"), "Maths"));

            string duree3 = en.DureeCoursRestant.ToString();

            foreach (Creneau cr in en.Creneaux)
                Console.WriteLine(cr);
            

            Console.WriteLine("durée 1 {0}", duree1);
            Console.WriteLine("durée 2 {0}", duree2);
            Console.WriteLine("durée 3 {0}", duree3);


Et le résultat dans la console

Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

Bonjour, vraiment merci .
J'ai utilise une autre méthode pour le calcul de l'heure , voici:


le problème est que a chaque fois que j'essaie d'ouvrir le formulaire qui contient le calcul il y'a un souci: le formulaire heure ne s'ouvre pas. j'ai mis le calcul dans les textbox .Pour que des qu'on ouvre on commence a faire les calculs mais rien a faire toujours pareil.
Je me suis di au lieu de faire un textbox pour l'heure vaut mieux faire deux un pour l'heure et l'autre pour la minute en convertissant le string en entier.
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Je t'ai déjà dit que le texte ça peut servir à afficher une donnée temporelle de façon compréhensible pour l'homme, mais en aucun c'est une donnée.

Les textbox ne servent pas à faire des calculs. Ca sert à afficher et à saisir (si on ne sait pas saisir directement la donnée). Les calculs se font à partir des données.

Dans l'absolue, il en va de même pour le formulaire son job c'est d'afficher et de permettre la saisie ou le lancement d'actions.
Calculer et faire les actions, c'est le job des objets "métiers". Si cette façon de penser le code ne te convient pas, choisit un langage moins objet, voire pas du tout objet.

J'essaye de te donner les indications pour coder correctement et efficacement, mais si tu ne veux pas en tenir compte, je ne peux rien pour toi.

Ok dans mon exemple, je n'ai pas pris en compte les devoirs, mais je ne sais pas ce que tu appelles devoir.
Pour moi ça a 2 sens
  • l'élève qui a du travail à faire chez lui (je ne vois pas le lien avec les heures de l'enseignant)
  • une épreuve notée (on dit devoir sur table) mais c'est pendant les heures de cours

J'imagine que ça un autre sens pour toi et qu'il est important que ce soit séparé.
Et bien, il suffit de dériver une 3 classes, de faire la somme des cours, la somme des devoirs et la somme des 2 précédentes, dans la classe métier.

Dans ce formulaire, il ne devrait jamais y avoir de textbox, le résultat d'un calcul s'affiche, il ne se saisit pas. Pour afficher, il faut un label par exemple, et un seul par info (voire un seul pour toutes les infos).
D'ailleurs un formulaire rien que pour ça est-ce nécessaire?
Une info bulle sur la liste de enseignant ferait le job aussi.

Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

D'accord je vais faire ce que tu as di. Mais chez nous on a les heures de devoirs et les heures de cours et c'est la sommation qui nous donne l'heure totale de l'enseignant.
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

la méthode que vous venez de me montrer la , j'ai appliqué a mon formulaire cours et ca marche et j'ai utilisé en plus de cela une autre méthode qu'une personne dans ce groupe avait montré. Ce que j'essaie de faire c'est que a chaque fois que j'ajoute une heure de cours pour cette filière , il faut que ca fasse une décrémentation sur l'heure totale de cours que cette personne doit donner a cette filière (qui se passe dans la table enseignant).
je vous envois une photo sur le cour et l'autre sur la partie enseignant
photo de la liste de cours regarde la partie sélectionnée qui correspond a la partie sélectionnée de enseignant:

photo ajout cour:


Photo de la liste des enseignant, toujours sur la partie sélectionnée:
Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Il faut que tu postes les codes concernés
Messages postés
44
Date d'inscription
vendredi 16 avril 2021
Statut
Membre
Dernière intervention
24 mai 2021

D'accord voici pour le formulaire ajoutcour:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using System.Windows.Forms;
using WindowsFormsApp1.BLL;
using WindowsFormsApp1.DAL;
using WindowsFormsApp1.TOOL;
using MySql.Data.MySqlClient;
using WindowsFormsApp1.user_controler;

namespace WindowsFormsApp1.Windows_Form.cours
{
    public partial class ajoutcours : Form
    {
        databasehelper dh = new databasehelper();
        MySqlDataReader dr;
        operateurcontroleur opc = new operateurcontroleur();
        operateurinfo opi = new operateurinfo();
        FormCollection listform;
        DataSet ds1, ds2, ds3,ds4,ds5,ds6, ds7,ds8;

        //variable
        bool result;

        private UserControl ajoucou;
        public ajoutcours(UserControl ajc)
        {
            InitializeComponent();
            this.ajoucou = ajc;

           
            txtnb.Enabled = false;
            txtenseig.Enabled = false;
            txtmatiere.Enabled = false;
            txtfiliere.Enabled = false;
            txtniveau.Enabled = false;
            txtrest.Enabled = false;
            txttotal.Enabled = false;
        }
        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtsalle_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void txttotal_TextChanged(object sender, EventArgs e)
        {
            string Total = txttotal.Text;
            string nombre = txtnb.Text;
            string[] T = Total.Split(':');
            string[] Nbr = nombre.Split(':');
            //pour l'heure
            int T0 = int.Parse(T[0]);
            int Nbr0 = int.Parse(Nbr[0]);
            //Pour les minutes
            int T1 = int.Parse(T[1]);
            int Nbr1 = int.Parse(Nbr[1]);
            //Pour les secondes
           int T2= int.Parse(T[2]);
             int Nbr2 = int.Parse(Nbr[2]);
            
            int restheure = T0 - Nbr0;
            int restminute = T1 + Nbr1;
            int restsecond = T2 + Nbr2;
            if(int.Parse(Nbr[1]) > int.Parse(T[1]))
            {
               
                restheure = restheure - 1;
                restminute = 60 - int.Parse(Nbr[1]);
              
               
            }
            string resultat = restheure.ToString() + ":" + restminute.ToString() + ":" + restsecond.ToString();
            txtrest.Text = resultat.ToString();
        }

        private void label7_Click(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
          
          
        }

        private void txtfin_ValueChanged(object sender, EventArgs e)
        {
          

            TimeSpan rr = TimeSpan.Parse(txtfin.Text) - TimeSpan.Parse(txtdebut.Text);
            txtnb.Text = rr.ToString();
        }

        private void txtdebut_ValueChanged(object sender, EventArgs e)
        {
          
        }

        private void txttotal_SelectedIndexChanged(object sender, EventArgs e)
        {
           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //calcul d'heure

            //TimeSpan rr = TimeSpan.Parse(txtrest1.Text) - TimeSpan.Parse(txtnb.Text);
            //txtreste.Text = rr.ToString();
        }

        private void txtrest1_ValueChanged(object sender, EventArgs e)
        {
            
        }

        private void txttotal1_TextChanged(object sender, EventArgs e)
        {
           
        }

        private void btnfermer_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void txtrest1_TextChanged(object sender, EventArgs e)
        {
        }

        private void txttotal_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            
        }

        

        private void txteneig_SelectedIndexChanged(object sender, EventArgs e)
        {
            ds6 = dh.ExecuteDataSet("select distinct nom_enseignant from enseignant where code_enseignant ='" + txtcden.Text + "'  ");
            txtenseig.DataSource = ds6.Tables[0];
            txtenseig.DisplayMember = "nom_enseignant";
            txtenseig.Text = "";

            ds1 = dh.ExecuteDataSet("select distinct code_matiere from enseignant where code_enseignant ='" + txtcden.Text + "'  ");
            txtmatiere.DataSource = ds1.Tables[0];
            txtmatiere.DisplayMember = "code_matiere";
            txtmatiere.Text = "";

            ds2 = dh.ExecuteDataSet("select distinct code_filiere from enseignant where code_enseignant ='" + txtcden.Text + "'  ");
            txtfiliere.DataSource = ds2.Tables[0];
            txtfiliere.DisplayMember = "code_filiere";
            txtfiliere.Text = "";

            ds3 = dh.ExecuteDataSet("select distinct code_niveau from enseignant where code_enseignant ='" + txtcden.Text + "'  ");
            txtniveau.DataSource = ds3.Tables[0];
            txtniveau.DisplayMember = "code_niveau";
            txtniveau.Text = "";

            ds7 = dh.ExecuteDataSet("select distinct heure_cours_rest from enseignant where code_enseignant ='" + txtcden.Text + "'  ");
            txttotal.DataSource = ds7.Tables[0];
            txttotal.DisplayMember = "heure_cours_rest";
            txttotal.Text = "";

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
           
        }

       

        private void ajoutcours_Load(object sender, EventArgs e)
        {
            try
            {


                //charger les noms des enseignants
                ds4 = dh.ExecuteDataSet("select distinct code_enseignant from enseignant where demande_de_permission='Accepter' order by nom_enseignant asc  ");
                txtcden.DataSource = ds4.Tables[0];
                txtcden.DisplayMember = "code_enseignant";
                txtcden.Text = "";

                //charger les noms des salles
                ds5 = dh.ExecuteDataSet("select distinct numero from salle order by numero asc");
                txtsalle.DataSource = ds5.Tables[0];
                txtsalle.DisplayMember = "numero";
                txtsalle.Text = "";


            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                string Total = txttotal.Text;
                string nombre = txtnb.Text;
                string[] T = Total.Split(':');
                string[] Nbr = nombre.Split(':');
                //pour l'heure
                int T0 = int.Parse(T[0]);
                int Nbr0 = int.Parse(Nbr[0]);
                //Pour les minutes
                int T1 = int.Parse(T[1]);
                int Nbr1 = int.Parse(Nbr[1]);
                //Pour les secondes
                int T2 = int.Parse(T[2]);
                int Nbr2 = int.Parse(Nbr[2]);
                string nbr = Nbr0.ToString();
                string nb = Nbr1.ToString();
                string th = T0.ToString();
                string tm = T1.ToString();
                if (txtmatiere.Text == "" || txtfiliere.Text == "" || txtniveau.Text == "" || txtenseignant.Text == "" || date.Text == "" || txtdebut.Text == "" || txtfin.Text == "" || txtnb.Text == "" || txtjour.Text == "" || txtsalle.Text == "")
                {
                    MessageBox.Show("Désolé tous les champs doivent être renseignés", "GSED");
                }
                else
            {
                    if (Nbr0 > T0)
                    {
                        MessageBox.Show("Désolé vous pouvez pas ajouter une séance de '" + nbr + "'h'" + nb + "'mn alors qu'il vous reste un total de '" + th + "'h'" + tm + "'mn", "GSED", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else
                    {
                        dh.ExecuteNonQuery("insert into cours (code_matiere,code_filiere,code_niveau, code_enseignant,date,heure_debut,heure_fin,nbr_heure,jour,salle ) values ('" + txtmatiere.Text.Replace("'", "''") + "', '" + txtfiliere.Text.Replace("'", "''") + "','" + txtniveau.Text.Replace("'", "''") + "','" + txtenseig.Text.Replace("'", "''") + "','" + DateTime.Now.ToString("yyyy/MM/dd") + "','" + txtdebut.Text.Replace("'", "''") + "','" + txtfin.Text.Replace("'", "''") + "','" + txtnb.Text.Replace("'", "''") + "','" + txtjour.Text.Replace("'", "''") + "','" + txtsalle.Text.Replace("'", "''") + "')");
                        dh.ExecuteNonQuery("update enseignant set heure_cours ='"+txtrest.Text.Replace("'", "''") + "' where code_enseignant='" + txtcden.Text + "' ");

                        MessageBox.Show("La séance a été enregistré avec succès");
                        (ajoucou as UCcours).affic();
                        txtmatiere.Text = "";
                        txtmatiere.Focus();
                        txtfiliere.Text = "";
                        txtfiliere.Focus();
                        txtniveau.Text = "";
                        txtniveau.Focus();
                        txtenseig.Text = "";
                        txtenseig.Focus();
                        date.Text = "";
                        date.Focus();
                        txtdebut.Focus();
                        txtdebut.Text = "";
                        txtfin.Text = "";
                        txtfin.Focus();
                        txtnb.Text = "";
                        txtnb.Focus();
                        txtjour.Text = "";
                        txtjour.Focus();
                        txtsalle.Text = "";
                        txtsalle.Focus();
                    }
                


            }




        }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Messages postés
16009
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
6 juin 2021
549
Hier, sur l'autre discussion je t'ai dit que ce code c'est pourri au point que j'ai supprimé le message en question. Pourquoi me le reproposes tu aujourd'hui?


As tu réellement suivi le cours de Tahé?
As tu essayé de comprendre l'exemple que je t'ai posté le 16 mai ? (normalement après le cours de Tahé ça aurait du être largement possible)