예제 #1
0
        private void btnModifier_Click(object sender, EventArgs e)
        {
            SEmploye emp = default(SEmploye);
            int      NoEmploye, i = 0;
            double   SalEmploye;
            bool     Conversion;

            //Conversion UI en variables
            Conversion = Int32.TryParse(txtNumero.Text, out NoEmploye);
            Conversion = Double.TryParse(txtSalaire.Text, out SalEmploye);

            /// Validate
            if (!Conversion)
            {
                MessageBox.Show("Vous devez entrer des informations valides pour faire des modifications", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            while (NoEmploye != m_Index[i].Cle)
            {
                i++;
                if (i == m_NbreEnrg)
                {
                    MessageBox.Show("L'employé que vous essayez d'effacer n'existe pas.", "Erreur",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (NoEmploye == m_Index[i].Cle && m_Index[i].ADetruire == true)
                {
                    MessageBox.Show("Cet employé a été supprimé.", "Erreur",
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            emp.NoEmp   = NoEmploye;
            emp.Nom     = txtNom.Text;
            emp.Salaire = SalEmploye;

            //Écrire le nouvel employé à la fin du fichier
            m_FSE.Seek(0, SeekOrigin.End);
            long position = m_FSE.Position;

            emp.Ecrire(m_FSE, m_BWE);

            //Ajouter au tableau d'indice après
            m_Index[i].Position  = position;//Ne pas mettre fin du fichier mais la position du pointeur
            m_Index[i].Cle       = NoEmploye;
            m_Index[i].ADetruire = false;

            MessageBox.Show("Vos changements ont été effectués avec succès.", "Félicitations !",
                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }
예제 #2
0
        private void Save_(object sender, EventArgs e)
        {
            int        NbEmploye  = 0;
            SEmploye   emp        = default(SEmploye);
            FileStream Temporaire = new FileStream(Directory.GetCurrentDirectory() + @"\Replacement.tmp",
                                                   FileMode.Create, FileAccess.Write, FileShare.None);
            BinaryWriter BWE = new BinaryWriter(Temporaire);

            for (int i = 0; i < m_NbreEnrg; i++) // Transférer tout le fichier d'index dans le nouveau fichier temporaire
            {
                bool Flag = !m_Index[i].ADetruire;
                if (Flag)
                {
                    emp.Lire(m_Index[i].Position, m_FSE, m_BRE);
                    m_Index[i].Position = Temporaire.Position;
                    emp.Ecrire(Temporaire, BWE);
                    NbEmploye++;
                }
            }
            //On ferme tout
            m_BRE.Close();
            m_FSE.Close();
            m_BWE.Close();
            BWE.Close();
            Temporaire.Close();

            File.Replace("Replacement.tmp", "Employes.don", "Employe.bak");
            //On réécrit les bonnes valeurs qui doivent êtres présentes dans le fichier
            FileStream   FichierIndex = new FileStream(Directory.GetCurrentDirectory() + @"\Index.ndx", FileMode.Truncate, FileAccess.Write, FileShare.None);
            BinaryWriter bwe          = new BinaryWriter(FichierIndex);
            string       Signature    = "Index Employés";

            FichierIndex.Seek(0, SeekOrigin.Begin);

            bwe.Write(Signature);
            bwe.Write(NbEmploye);

            //Réécriture
            for (int i = 0; i < m_NbreEnrg; i++) // Transférer tout le fichier d'index dans le nouveau fichier temporaire
            {
                bool Flag = !m_Index[i].ADetruire;
                if (Flag)
                {
                    bwe.Write(m_Index[i].ADetruire);
                    bwe.Write(m_Index[i].Cle);
                    bwe.Write(m_Index[i].Position);
                }
            }
            FichierIndex.Close();
            bwe.Close();
            this.Form1_Load(sender, e);
        }
예제 #3
0
        //******************************************************************
        //
        //  Ce bouton est là pour se déboguer
        //  à retirer pour la remise du projet
        //
        //*******************************************************************
        private void btnAfficher_Click(object sender, EventArgs e)
        {
            string   s   = "";
            SEmploye emp = default(SEmploye);
            int      pos = 0;

            m_FSE.Seek(0, SeekOrigin.Begin);
            for (int i = 0; pos < m_FSE.Length; i++)
            {
                emp.Lire(pos, m_FSE, m_BRE);
                s  += "Numéro d'employé : " + (emp.Nom).ToString() + "\tNom : " + (emp.Nom).ToString() + "\tSalaire : " + (emp.Salaire).ToString() + "\n";
                pos = (int)this.m_FSE.Position;
            }
            MessageBox.Show(s);
        }
예제 #4
0
        private void btnRechercher_Click(object sender, EventArgs e)
        {
            int i = 0, NoEmploye;

            m_BRE = new BinaryReader(m_FSE);
            SEmploye PEmp         = new SEmploye();
            bool     ConversionNo = Int32.TryParse(txtNumero.Text, out NoEmploye);

            if (!ConversionNo)//Savoir si on a pu trouver le dossier associé au numéro.
            {
                MessageBox.Show("Vous devez entrer un numéro d'employé valide pour le rechercher.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            while (i < m_NbreEnrg && m_Index[i].Cle != NoEmploye)
            {
                i++;
            }
            if (i == m_NbreEnrg && m_Index[i].Cle != NoEmploye)
            {
                MessageBox.Show("L'employé que vous essayez de trouver n'existe pas.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                btnModifier.Enabled  = false;
                btnSupprimer.Enabled = false;
                txtNom.Text          = "";
                txtSalaire.Text      = "";
                return;
            }
            else
            {
                long Position = m_Index[i].Position;
                PEmp.Lire(Position, m_FSE, m_BRE);
                Affichage(PEmp);
                btnModifier.Enabled  = true;
                btnSupprimer.Enabled = true;
            }
        }
예제 #5
0
        private void btnAjouter_Click(object sender, EventArgs e)
        {
            int    NoEmploye;
            string NomEmploye;
            double SalEmploye;
            SIndex Ind = new SIndex();
            bool   ConversionNo, ConversionSal;

            m_BWE = new BinaryWriter(m_FSE);

            //Conversion des textbox dans les variables
            NomEmploye    = txtNom.Text;
            ConversionNo  = Int32.TryParse(txtNumero.Text, out NoEmploye);
            ConversionSal = Double.TryParse(txtSalaire.Text, out SalEmploye);

            /// Validate
            if (!ConversionNo)
            {
                MessageBox.Show("Vous devez entrer un numéro d'employé valide pour l'indexer.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (!ConversionSal)
            {
                MessageBox.Show("Le salaire de l'employé que vous essayez d'enregistrer est invalide.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (NomEmploye == "")
            {
                MessageBox.Show("Le nom de l'employé que vous essayez d'enregistrer est invalide.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            int  i;
            long pos  = GetEmploye(NoEmploye, out i);
            bool flag = pos != -1;

            if (i == -1)
            {
                MessageBox.Show("Vous ne pouvez pas ajouter cet employé puisqu'il est déjà existant.", "Erreur",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //Association a la structure
            SEmploye Employe = new SEmploye();

            Employe.NoEmp   = NoEmploye;
            Employe.Nom     = NomEmploye;
            Employe.Salaire = SalEmploye;

            m_FSE.Seek(0, SeekOrigin.End);
            long Pointer = m_FSE.Position; // Savoir la position initiale de la struct

            Employe.Ecrire(m_FSE, m_BWE);

            //Associate Index
            m_NbreEnrg++;
            m_Index[m_NbreEnrg - 1].Position  = Pointer;
            m_Index[m_NbreEnrg - 1].Cle       = NoEmploye;
            m_Index[m_NbreEnrg - 1].ADetruire = false;


            MessageBox.Show("Votre nouvel employé a été enregistré avec succès.", "Félicitations !",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
예제 #6
0
 private void Affichage(SEmploye Employe)
 {
     txtNumero.Text  = Employe.NoEmp.ToString();
     txtNom.Text     = Employe.Nom;
     txtSalaire.Text = Employe.Salaire.ToString();
 }