Explication super détaillée de la déchirure du système de gestion des étudiants——[c++]

Exigences du sujet : concevoir un programme de gestion des performances des élèves pour compléter la saisie et la modification des informations sur les performances des élèves par classe et les enregistrer dans des fichiers. Réalisez la sortie des relevés de notes des étudiants par classe ; réalisez la requête par numéro et nom d'étudiant, et triez par note moyenne.


  • Description du problème

L'objectif du programme est de fournir un outil de gestion des performances des étudiants simple et facile à utiliser afin que les établissements d'enseignement puissent saisir, modifier, interroger et trier efficacement les informations sur les performances des étudiants. La persistance des données est assurée en enregistrant les informations sur les étudiants dans des fichiers, ce qui permet de conserver et de restaurer les données de performance des étudiants même après la fermeture du programme.

  • exigences de base

L'exigence de base de ce programme est de mettre en œuvre un système de gestion des performances des étudiants, qui nécessite les fonctions suivantes :

1. Saisie des notes des étudiants : il peut recevoir la saisie par l'utilisateur du nom, du numéro d'étudiant, de la classe et du score de l'étudiant, et enregistrer ces informations dans une structure de données en mémoire, telle qu'un vecteur ou une liste chaînée.

2. Modifier les notes des étudiants : l'étudiant correspondant peut être trouvé en fonction de l'ID étudiant saisi par l'utilisateur, et l'utilisateur est autorisé à modifier le score de l'étudiant.

3. Enregistrer les notes des étudiants dans des fichiers : il est possible d'enregistrer les données des étudiants dans la mémoire actuelle dans un fichier afin qu'elles puissent être chargées et utilisées la prochaine fois que le programme s'exécute.

4. Sortie des relevés de notes des étudiants par classe : selon le nom de la classe saisi par l'utilisateur, le nom, le numéro d'étudiant, la classe et le score des étudiants de la classe peuvent être imprimés.

5. Interroger les notes des étudiants par numéro et nom d'étudiant : selon la méthode de recherche (numéro ou nom d'étudiant) sélectionnée par l'utilisateur, il peut recevoir le numéro ou le nom d'étudiant saisi par l'utilisateur, puis imprimer les informations correspondantes sur l'étudiant.

6. Tri par note moyenne: capable de trier en fonction de la note moyenne des étudiants et d'imprimer les informations triées sur les étudiants.

Le programme doit avoir une bonne interaction avec l'utilisateur, c'est-à-dire fournir aux utilisateurs des options de menu claires et des informations rapides afin que les utilisateurs puissent utiliser facilement diverses fonctions.

En outre, le programme doit également prendre en compte la gestion des erreurs et la gestion des exceptions. Par exemple, lorsque l'utilisateur saisit une option non valide ou que les informations sur l'étudiant n'existent pas, une invite d'erreur appropriée doit être affichée.

Enfin, pour assurer la persistance des données des étudiants, le programme doit pouvoir enregistrer les notes des étudiants dans un fichier et charger les données du fichier à chaque démarrage. De cette façon, les données des étudiants sont conservées et restaurées même si le programme est fermé et rouvert.

trois. analyse de la demande 

L'analyse des besoins de ce programme comprend principalement les aspects suivants :

1. Conditions de saisie des données :

   - L'utilisateur doit être en mesure d'entrer le nom de l'étudiant, le numéro d'étudiant, la classe et le niveau.

   - Le programme doit être capable de stocker les informations saisies sur les étudiants dans une structure de données en mémoire pour les opérations ultérieures.

   - Les informations sur la classe de l'élève doivent être incluses dans les données saisies.

2. Conditions de modification des données :

   - L'utilisateur doit pouvoir sélectionner l'élève à modifier en fonction de l'identifiant de l'élève.

   - Le programme devrait pouvoir trouver l'étudiant avec le numéro d'étudiant correspondant et fournir une option pour modifier le score.

   - Les données modifiées doivent pouvoir être mises à jour en mémoire pour les opérations ultérieures.

3. Conditions de stockage des données :

   - L'utilisateur souhaite pouvoir enregistrer les données de l'élève actuellement en mémoire dans un fichier afin qu'elles puissent être chargées au prochain démarrage du programme.

   - Le programme devrait fournir une fonction de sauvegarde pour écrire les informations sur les élèves dans un fichier.

4. Exigences de sortie de transcription :

   - Les utilisateurs doivent pouvoir exporter les relevés de notes des étudiants par classe.

   - Le programme doit rechercher les élèves de la classe correspondante en fonction du nom de classe entré par l'utilisateur et afficher le nom de l'élève, son numéro, sa classe et sa note.

5. Les demandes d'informations sur les étudiants doivent :

   - Les utilisateurs doivent pouvoir interroger les informations sur les étudiants en fonction de leur identifiant ou de leur nom.

   - Le programme doit saisir le numéro ou le nom de l'étudiant correspondant en fonction de la méthode de requête sélectionnée par l'utilisateur, puis afficher les informations correspondantes sur l'étudiant.

6. Exigences de tri pour les grades :

   - L'utilisateur doit pouvoir trier les étudiants par moyenne pondérée cumulative.

   - Le programme doit trier les informations sur les étudiants en fonction de la note moyenne des étudiants et produire les informations triées sur les étudiants.

7. Exigences de gestion des erreurs :

   - Le programme doit être capable de gérer les erreurs de saisie de l'utilisateur, telles que les options non valides ou les informations correspondantes sur les étudiants introuvables.

   - Lorsqu'une erreur se produit, le programme doit donner un message d'erreur correspondant pour aider l'utilisateur à fonctionner correctement.

8. Exigences de persévérance :

   - Le programme doit pouvoir enregistrer les informations sur les notes des étudiants dans un fichier et pouvoir charger les données du fichier au démarrage du programme.

   - En conservant les données, les notes des étudiants peuvent être conservées et restaurées après la fermeture du programme.

Ce qui précède est l'analyse des exigences du programme, qui aide à déterminer les fonctions et les besoins des utilisateurs auxquels le programme doit répondre. Lors de la mise en œuvre du programme, il doit être progressivement développé et testé en fonction de ces exigences pour s'assurer que le programme peut atteindre les objectifs attendus.

  • conception de contour

La conception de haut niveau de ce programme comprend les composants suivants :

1. Structure "Étudiant": Indique les informations de base de l'étudiant, y compris le nom, le numéro d'étudiant, la classe et le score.

2. Fonction `addStudent` : utilisée pour saisir les informations sur l'étudiant, recevoir le nom de l'étudiant, le numéro de l'étudiant, la classe et le score saisis par l'utilisateur, et ajouter les informations sur l'étudiant à la structure de données de l'étudiant.

3. La fonction `modifyScore` : trouve un étudiant en fonction du numéro d'étudiant et permet à l'utilisateur de modifier le score de l'étudiant.

4. Fonction `saveToFile` : enregistre les données actuelles de l'étudiant en mémoire dans un fichier.

5. Fonction `loadFromFile` : charge les données des élèves du fichier dans la mémoire.

6. Fonction `printClassScores` : Selon le nom de la classe, imprimez les notes des élèves de la classe.

7. Fonction `searchStudent` : selon la méthode de recherche sélectionnée (numéro ou nom de l'étudiant), recevez le numéro ou le nom de l'étudiant saisi par l'utilisateur et imprimez les informations correspondantes sur l'étudiant.

8. Fonction `sortByAverageScore`: trier par la note moyenne des étudiants et imprimer les informations triées sur les étudiants.

9. Programme principal : fournissez l'interface utilisateur, recevez la sélection d'opération de l'utilisateur et appelez la fonction correspondante pour réaliser la fonction.

Le déroulement principal du programme est le suivant :

1. Le programme principal démarre et charge le fichier de données de l'élève (s'il existe).

2. Affichez le menu principal et laissez l'utilisateur choisir une action.

3. Selon le choix de l'utilisateur, appeler la fonction correspondante pour exécuter la fonction correspondante.

4. Après avoir effectué l'opération, retournez au menu principal et attendez le prochain choix de l'utilisateur.

5. Lorsque l'utilisateur choisit de quitter, les données de l'élève sont enregistrées dans un fichier et le programme se termine.

Les fonctions et les composants de la conception d'ensemble sont conçus pour réaliser la gestion et le fonctionnement des notes des étudiants. Grâce à une division et une organisation raisonnables des fonctions, le programme peut avoir une bonne structure et une bonne évolutivité. Les détails et les algorithmes de mise en œuvre réels doivent être conçus et développés en fonction du langage de programmation et des exigences spécifiques.

cinq. conception détaillée

Il s'agit d'un programme relativement complexe, voici sa conception détaillée :

1. Structure étudiante :

cpp

structure Étudiant {

    std::nom de chaîne ;

    identifiant int ;

    std::string className ;

    score entier ;

} ;

2. Fonction addStudent :

cpp

void addStudent(std::vector<Student>& étudiants) {

    std::nom de chaîne ;

    identifiant int ;

    std::string className ;

    score entier ;

    std::cout << "Veuillez entrer le nom de l'élève : " ;

    std :: cin >> nom ;

    std::cout << "Veuillez saisir l'identifiant étudiant : " ;

    std :: cin >> identifiant ;

    std::cout << "Veuillez saisir la classe de l'élève : " ;

    std :: cin >> nom_classe ;

    std::cout << "Veuillez saisir la note de l'étudiant : " ;

    std :: cin >> score ;

    étudiants.push_back({name, id, className, score});

    std::cout << "Informations sur l'étudiant saisies avec succès." << std::endl;

}

3. Fonction de modification du score :

cpp

void modifyScore(std::vector<Student>& étudiants) {

    identifiant int ;

    int nouveauScore ;

    std::cout << "Veuillez saisir le numéro d'étudiant pour modifier la note :" ;

    std :: cin >> identifiant ;

    booléen trouvé = faux ;

    pour (auto& étudiant : étudiants) {

        si (étudiant.id == id) {

            std::cout << "Veuillez entrer un nouveau score : " ;

            std :: cin >> nouveau score ;

            étudiant.score = nouveauScore ;

            trouvé = vrai ;

            std::cout << "La note de l'étudiant a été modifiée avec succès." << std::endl;

            casser;

        }

    }

    si trouvé) {

        std::cout << "Aucun étudiant avec l'ID étudiant correspondant n'a été trouvé." << std::endl;

    }

}

4. fonction saveToFile :

cpp

void saveToFile(const std::vector<Etudiant>& étudiants) {

    std::ofstream file("students.txt");

    si (fichier.is_open()) {

        for (const auto& étudiant : étudiants) {

            fichier << étudiant.nom << " " << étudiant.id << " " << étudiant.classeNom << " " << étudiant.score << std :: endl;

        }

        fichier.close();

        std::cout << "Informations sur l'étudiant enregistrées avec succès." << std::endl;

    } autre {

        std::cout << "Impossible d'ouvrir le fichier pour l'enregistrement." << std::endl;

    }

}

5. Fonction loadFromFile :

cpp

void loadFromFile(std::vector<Student>& étudiants) {

    std::ifstream file("students.txt");

    si (fichier.is_open()) {

        std :: ligne de chaîne ;

        tandis que (std::getline(fichier, ligne)) {

            std :: isstringstream iss(ligne);

            std::nom de chaîne ;

            identifiant int ;

            std::string className ;

            score entier ;

            if (iss >> name >> id >> className >> score) {

                étudiants.push_back({name, id, className, score});

            }

        }

        fichier.close();

        std::cout << "Informations sur l'étudiant chargées avec succès." << std::endl;

    } autre {

        std::cout << "Impossible d'ouvrir le fichier pour le chargement." << std::endl;

    }

}

6. Fonction printClassScores :

cpp

void printClassScores(const std::vector<Étudiant>& étudiants) {

    std::string className ;

    std::cout << "Veuillez saisir le nom de la classe : " ;

    std :: cin >> nom_classe ;

    std::cout << "class" << className << " étudiants

Transcription : " << std :: endl;

    booléen trouvé = faux ;

    for (const auto& étudiant : étudiants) {

        if (student.className == className) {

            std::cout << "姓名:" << student.name << "\t学号:" << student.id << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

            trouvé = vrai ;

        }

    }

    si trouvé) {

        std::cout << "Aucun élève de la classe correspondante n'a été trouvé." << std::endl;

    }

}

7. Fonction searchStudent :

cpp

void searchStudent(const std::vector<Student>& étudiants) {

    int choix ;

    std::cout << "Veuillez sélectionner la méthode de requête :\n1. numéro d'étudiant\n2. nom\n" ;

    std :: cin >> choix ;

    si (choix == 1) {

        identifiant int ;

        std::cout << "Veuillez entrer le numéro d'étudiant : " ;

        std :: cin >> identifiant ;

        booléen trouvé = faux ;

        for (const auto& étudiant : étudiants) {

            si (étudiant.id == id) {

                std::cout << "学号:" << student.id << "\t姓名:" << student.name << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

                trouvé = vrai ;

                casser;

            }

        }

        si trouvé) {

            std::cout << "Aucun étudiant avec l'ID étudiant correspondant n'a été trouvé." << std::endl;

        }

    } sinon si (choix == 2) {

        std::nom de chaîne ;

        std::cout << "Veuillez entrer le nom : " ;

        std :: cin >> nom ;

        booléen trouvé = faux ;

        for (const auto& étudiant : étudiants) {

            if (student.name == nom) {

                std::cout << "学号:" << student.id << "\t姓名:" << student.name << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

                trouvé = vrai ;

            }

        }

        si trouvé) {

            std::cout << "Aucun étudiant avec le nom correspondant trouvé." << std::endl;

        }

    } autre {

        std::cout << "Choix invalide." << std::endl;

    }

}

8. Fonction sortByAverageScore :

cpp

bool compareByAverageScore(const Étudiant& étudiant1, const Étudiant& étudiant2) {

    retour (étudiant1.score + étudiant2.score) / 2.0 > (étudiant2.score + étudiant2.score) / 2.0 ;

}

void sortByAverageScore(std::vector<Student>& étudiants) {

    std :: sort (étudiants.begin (), étudiants. fin (), compareByAverageScore);

    std::cout << "Trier les réussites par note moyenne." << std::endl;

}

9. Programme principal :

cpp

int main() {

    std::vector<Student> étudiants ;

    loadFromFile(étudiants);

    int choix ;

    faire {

        std::cout << "\n1. Saisissez les notes des étudiants\n2. Modifiez les notes des étudiants\n3. Enregistrez les notes des étudiants dans des fichiers\n4. Générez les relevés de notes des étudiants par classe\n5. Interrogez les notes des étudiants par numéro et nom d'étudiant\n6. Triez par GPA\n0. Quitter\n" ;

        std :: cin >> choix ;

        interrupteur (choix) {

            cas 1:

                addStudent(étudiants);

                casser;

            cas 2 :

                modifierScore(élèves

);

                casser;

            cas 3 :

                saveToFile(étudiants);

                casser;

            cas 4 :

                printClassScores(étudiants);

                casser;

            cas 5 :

                rechercherÉtudiant(étudiants);

                casser;

            cas 6 :

                sortByAverageScore(étudiants);

                casser;

            cas 0 :

                saveToFile(étudiants);

                std::cout << "Les notes des étudiants ont été enregistrées dans le fichier, le programme est sur le point de se fermer." << std::endl;

                casser;

            défaut:

                std::cout << "Choix invalide." << std::endl;

                casser;

        }

    } tandis que (choix != 0);

    renvoie 0 ;

}

Cette conception détaillée fournit les détails d'implémentation de chaque fonction, y compris les paramètres, le type de retour et les principales étapes de fonctionnement. Grâce à ces conceptions, le programme peut gérer et exploiter les notes des élèves selon les besoins.

  • analyse de débogage

Au cours du processus de débogage, certains problèmes peuvent être rencontrés. Voici quelques problèmes rencontrés et leurs solutions, ainsi qu'un examen, une discussion et une analyse de la conception et de la mise en œuvre :

1. Problème : lors de la saisie des informations sur l'étudiant, le score saisi dépasse la plage valide.

   Solution : ajoutez une logique de validation appropriée dans la fonction "addStudent" pour vous assurer que les scores saisis se situent dans la plage valide.

2. Problème : Lors du chargement d'un fichier de données d'élèves, le fichier n'existe pas ou est au mauvais format.

   Solution : Ajoutez une gestion des erreurs appropriée dans la fonction "loadFromFile", telle que la vérification de l'existence du fichier et la validation du formatage lors de la lecture de chaque ligne de données.

3. Problème : Lors de la modification du score d'un élève, l'élève avec le numéro d'élève correspondant est introuvable.

   Solution : Ajoutez un jugement indiquant si l'étudiant existe dans la fonction "modifyScore" et donnez un message d'erreur correspondant.

4. Problème : lors de l'exportation des relevés de notes des étudiants par classe, la classe n'existe pas ou il n'y a pas de données sur les étudiants.

   Solution : Ajoutez un jugement sur l'existence de la classe et si les données de l'étudiant sont vides dans la fonction "printClassScores", et donnez un message d'erreur correspondant.

5. Problème : lors de la recherche des notes des étudiants par numéro ou nom d'étudiant, aucun étudiant correspondant ne peut être trouvé.

   Solution : Ajoutez un jugement indiquant si un étudiant existe dans la fonction "searchStudent" et donnez un message d'erreur correspondant.

6. Problème : Lors du tri des notes des élèves, la logique de tri est erronée.

   Solution : vérifiez la logique de tri dans la fonction "sortByAverageScore" pour garantir un tri correct par score moyen.

  • Mode d'emploi

Voici les étapes détaillées pour utiliser le programme de gestion du rendement des élèves :

1. Ouvrez un terminal ou une invite de commande et entrez le répertoire où se trouve le programme.

2. Compilez le code source du programme.

3. Exécutez le programme.

4. Après le démarrage du programme, un menu s'affiche pour vous permettre de choisir une opération.

5. Sélectionnez l'option dans le menu pour effectuer l'opération correspondante :

    Option 1 : Saisie des notes des étudiants

      Entrez le nom de l'étudiant, son numéro d'étudiant, sa classe et sa note, puis suivez les invites du programme pour entrer.

      Une fois la saisie terminée, le programme affichera que les informations sur l'élève ont été saisies avec succès.

    Option 2 : Modifier les notes des étudiants

      Entrez le numéro d'étudiant de l'étudiant dont le score doit être modifié.

      Saisissez une nouvelle note.

      Une fois la modification terminée, le programme affichera que le score de l'élève a été modifié avec succès.

    Option 3 : Enregistrer les notes des élèves dans un fichier

      Les informations sur les étudiants sont enregistrées dans un fichier appelé "students.txt".

      Le programme affichera que les informations sur l'étudiant ont été enregistrées avec succès.

    Option 4 : produire les relevés de notes des étudiants par classe

      Entrez le nom de la classe pour exporter la transcription.

      Le programme recherchera les étudiants en fonction du nom de la classe et affichera les relevés de notes des étudiants de la classe correspondante.

    Option 5 : Interroger les notes des étudiants par numéro et nom d'étudiant

      Sélectionnez la méthode de recherche : par numéro d'étudiant ou par nom.

      Entrez le numéro ou le nom de l'étudiant correspondant pour vous renseigner.

      Le programme trouvera et affichera les informations sur les étudiants correspondants.

    Option 6 : Trier par moyenne pondérée cumulative

      Les informations sur les étudiants seront triées par moyenne pondérée cumulative.

      Le programme affichera le succès trié par moyenne pondérée cumulative.

    Option 0 : quitter le programme

      Les notes des étudiants sont automatiquement enregistrées dans le fichier "students.txt".

      Le programme affiche que les notes des élèves ont été enregistrées dans le fichier, puis se ferme.

6. Sélectionnez l'option appropriée selon vos besoins et suivez les invites du programme.

7. Après avoir effectué l'opération sélectionnée, vous pouvez choisir de continuer avec d'autres opérations ou de quitter le programme.

Veuillez noter qu'avant d'exécuter le programme, assurez-vous d'avoir créé le fichier "students.txt" et d'avoir enregistré les informations sur l'étudiant dans le bon format. Si vous avez besoin d'importer des données existantes sur les étudiants, vous pouvez entrer les informations sur les étudiants dans le fichier "students.txt" par ligne et utiliser des espaces pour séparer chaque champ.

En suivant les étapes ci-dessus, vous pouvez utiliser le programme My Student Grade Management pour saisir, modifier, interroger, trier et effectuer d'autres opérations sur les informations des étudiants, et enregistrer les informations sur les étudiants dans un fichier.

  • Résultats de test

Données de test:

Résultats de test:

  • Résumé de la conception du programme

Le but de cette conception de programme est de réaliser le système de gestion du rendement des élèves. Grâce à l'analyse des exigences, à la conception des grandes lignes et à la conception détaillée du programme, nous avons réalisé un programme de gestion du rendement des élèves basé sur C++.

À l'étape de l'analyse de la demande, nous avons défini les exigences de base du programme, y compris les fonctions de saisie, de modification, de sauvegarde, de sortie, de recherche et de tri des notes des étudiants. Ces exigences nous aident à définir les limites fonctionnelles du programme et les besoins des utilisateurs.

À l'étape de conception des grandes lignes, nous avons conçu les principaux modules et fonctions du programme, et défini la classe d'élèves et les fonctions de gestion des informations sur le rendement des élèves. Ces conceptions nous aident à trier la structure et la logique du programme.

Dans la phase de conception détaillée, nous décrivons plus en détail les détails d'implémentation de chaque fonction, y compris les paramètres de la fonction, le type de retour et les étapes de l'opération. Ces conceptions nous aident à comprendre plus clairement le flux d'exécution et le traitement des données du programme.

Dans le processus de réalisation, nous avons suivi les conseils de la conception, réalisé chaque module fonctionnel étape par étape et effectué des tests et un débogage. Grâce à l'utilisation de données de test, nous avons vérifié l'exhaustivité fonctionnelle et l'exactitude du programme.

Grâce à cette conception de programme, nous avons appris le résumé d'expérience suivant :

1. L'analyse des besoins est une étape clé du processus de conception. La définition des besoins peut nous aider à garantir que les fonctions du programme répondent aux besoins des utilisateurs et à éviter les redondances fonctionnelles inutiles.

2. La conception générale et la conception détaillée sont des étapes importantes de la conception du programme, elles nous aident à établir la structure globale et la logique détaillée du programme, et fournissent des conseils pour le codage.

3. La conception modulaire peut améliorer la lisibilité et la maintenabilité du programme. Diviser le programme en différents modules ou fonctions permet de réduire la complexité et d'améliorer la réutilisation du code.

4. Dans le processus de mise en œuvre, les tests et le débogage étape par étape sont très importants, ce qui peut nous aider à trouver et à résoudre les problèmes potentiels et à garantir l'exactitude du programme.

5. Lors de la conception et de l'écriture du code, il est très important de prêter attention à la lisibilité et à la maintenabilité du code, comme nommer les variables et les fonctions de manière appropriée, ajouter des commentaires, suivre les normes de codage, etc.

En général, cette conception de programme nous permet de comprendre et d'appliquer pleinement les principes et méthodes de base du génie logiciel, y compris l'analyse des exigences, la conception, la mise en œuvre, les tests et le débogage. En même temps, cela nous rappelle également de prêter attention aux détails et à la qualité dans le processus de conception et de codage afin de développer des logiciels efficaces, fiables et faciles à entretenir.

  • les références

1. C++ Primer (5e édition) par Stanley B. Lippman, Josée Lajoie et Barbara E. Moo

2. Analyse de la structure des données et des algorithmes (description du langage C++) par Mark Allen Weiss

3. Introduction aux systèmes de bases de données par Abraham Silberschatz, Henry F. Korth et S. Sudarshan

4. Code Complete (deuxième édition) par Steve McConnell

5. Référence C++ (cppreference.com)

6. Débordement de pile (stackoverflow.com)

  • Description du problème

L'objectif du programme est de fournir un outil de gestion des performances des étudiants simple et facile à utiliser afin que les établissements d'enseignement puissent saisir, modifier, interroger et trier efficacement les informations sur les performances des étudiants. La persistance des données est assurée en enregistrant les informations sur les étudiants dans des fichiers, ce qui permet de conserver et de restaurer les données de performance des étudiants même après la fermeture du programme.

  • exigences de base

L'exigence de base de ce programme est de mettre en œuvre un système de gestion des performances des étudiants, qui nécessite les fonctions suivantes :

1. Saisie des notes des étudiants : il peut recevoir la saisie par l'utilisateur du nom, du numéro d'étudiant, de la classe et du score de l'étudiant, et enregistrer ces informations dans une structure de données en mémoire, telle qu'un vecteur ou une liste chaînée.

2. Modifier les notes des étudiants : l'étudiant correspondant peut être trouvé en fonction de l'ID étudiant saisi par l'utilisateur, et l'utilisateur est autorisé à modifier le score de l'étudiant.

3. Enregistrer les notes des étudiants dans des fichiers : il est possible d'enregistrer les données des étudiants dans la mémoire actuelle dans un fichier afin qu'elles puissent être chargées et utilisées la prochaine fois que le programme s'exécute.

4. Sortie des relevés de notes des étudiants par classe : selon le nom de la classe saisi par l'utilisateur, le nom, le numéro d'étudiant, la classe et le score des étudiants de la classe peuvent être imprimés.

5. Interroger les notes des étudiants par numéro et nom d'étudiant : selon la méthode de recherche (numéro ou nom d'étudiant) sélectionnée par l'utilisateur, il peut recevoir le numéro ou le nom d'étudiant saisi par l'utilisateur, puis imprimer les informations correspondantes sur l'étudiant.

6. Tri par note moyenne: capable de trier en fonction de la note moyenne des étudiants et d'imprimer les informations triées sur les étudiants.

Le programme doit avoir une bonne interaction avec l'utilisateur, c'est-à-dire fournir aux utilisateurs des options de menu claires et des informations rapides afin que les utilisateurs puissent utiliser facilement diverses fonctions.

En outre, le programme doit également prendre en compte la gestion des erreurs et la gestion des exceptions. Par exemple, lorsque l'utilisateur saisit une option non valide ou que les informations sur l'étudiant n'existent pas, une invite d'erreur appropriée doit être affichée.

Enfin, pour assurer la persistance des données des étudiants, le programme doit pouvoir enregistrer les notes des étudiants dans un fichier et charger les données du fichier à chaque démarrage. De cette façon, les données des étudiants sont conservées et restaurées même si le programme est fermé et rouvert.

trois. analyse de la demande 

L'analyse des besoins de ce programme comprend principalement les aspects suivants :

1. Conditions de saisie des données :

   - L'utilisateur doit être en mesure d'entrer le nom de l'étudiant, le numéro d'étudiant, la classe et le niveau.

   - Le programme doit être capable de stocker les informations saisies sur les étudiants dans une structure de données en mémoire pour les opérations ultérieures.

   - Les informations sur la classe de l'élève doivent être incluses dans les données saisies.

2. Conditions de modification des données :

   - L'utilisateur doit pouvoir sélectionner l'élève à modifier en fonction de l'identifiant de l'élève.

   - Le programme devrait pouvoir trouver l'étudiant avec le numéro d'étudiant correspondant et fournir une option pour modifier le score.

   - Les données modifiées doivent pouvoir être mises à jour en mémoire pour les opérations ultérieures.

3. Conditions de stockage des données :

   - L'utilisateur souhaite pouvoir enregistrer les données de l'élève actuellement en mémoire dans un fichier afin qu'elles puissent être chargées au prochain démarrage du programme.

   - Le programme devrait fournir une fonction de sauvegarde pour écrire les informations sur les élèves dans un fichier.

4. Exigences de sortie de transcription :

   - Les utilisateurs doivent pouvoir exporter les relevés de notes des étudiants par classe.

   - Le programme doit rechercher les élèves de la classe correspondante en fonction du nom de classe entré par l'utilisateur et afficher le nom de l'élève, son numéro, sa classe et sa note.

5. Les demandes d'informations sur les étudiants doivent :

   - Les utilisateurs doivent pouvoir interroger les informations sur les étudiants en fonction de leur identifiant ou de leur nom.

   - Le programme doit saisir le numéro ou le nom de l'étudiant correspondant en fonction de la méthode de requête sélectionnée par l'utilisateur, puis afficher les informations correspondantes sur l'étudiant.

6. Exigences de tri pour les grades :

   - L'utilisateur doit pouvoir trier les étudiants par moyenne pondérée cumulative.

   - Le programme doit trier les informations sur les étudiants en fonction de la note moyenne des étudiants et produire les informations triées sur les étudiants.

7. Exigences de gestion des erreurs :

   - Le programme doit être capable de gérer les erreurs de saisie de l'utilisateur, telles que les options non valides ou les informations correspondantes sur les étudiants introuvables.

   - Lorsqu'une erreur se produit, le programme doit donner un message d'erreur correspondant pour aider l'utilisateur à fonctionner correctement.

8. Exigences de persévérance :

   - Le programme doit pouvoir enregistrer les informations sur les notes des étudiants dans un fichier et pouvoir charger les données du fichier au démarrage du programme.

   - En conservant les données, les notes des étudiants peuvent être conservées et restaurées après la fermeture du programme.

Ce qui précède est l'analyse des exigences du programme, qui aide à déterminer les fonctions et les besoins des utilisateurs auxquels le programme doit répondre. Lors de la mise en œuvre du programme, il doit être progressivement développé et testé en fonction de ces exigences pour s'assurer que le programme peut atteindre les objectifs attendus.

  • conception de contour

La conception de haut niveau de ce programme comprend les composants suivants :

1. Structure "Étudiant": Indique les informations de base de l'étudiant, y compris le nom, le numéro d'étudiant, la classe et le score.

2. Fonction `addStudent` : utilisée pour saisir les informations sur l'étudiant, recevoir le nom de l'étudiant, le numéro de l'étudiant, la classe et le score saisis par l'utilisateur, et ajouter les informations sur l'étudiant à la structure de données de l'étudiant.

3. La fonction `modifyScore` : trouve un étudiant en fonction du numéro d'étudiant et permet à l'utilisateur de modifier le score de l'étudiant.

4. Fonction `saveToFile` : enregistre les données actuelles de l'étudiant en mémoire dans un fichier.

5. Fonction `loadFromFile` : charge les données des élèves du fichier dans la mémoire.

6. Fonction `printClassScores` : Selon le nom de la classe, imprimez les notes des élèves de la classe.

7. Fonction `searchStudent` : selon la méthode de recherche sélectionnée (numéro ou nom de l'étudiant), recevez le numéro ou le nom de l'étudiant saisi par l'utilisateur et imprimez les informations correspondantes sur l'étudiant.

8. Fonction `sortByAverageScore`: trier par la note moyenne des étudiants et imprimer les informations triées sur les étudiants.

9. Programme principal : fournissez l'interface utilisateur, recevez la sélection d'opération de l'utilisateur et appelez la fonction correspondante pour réaliser la fonction.

Le déroulement principal du programme est le suivant :

1. Le programme principal démarre et charge le fichier de données de l'élève (s'il existe).

2. Affichez le menu principal et laissez l'utilisateur choisir une action.

3. Selon le choix de l'utilisateur, appeler la fonction correspondante pour exécuter la fonction correspondante.

4. Après avoir effectué l'opération, retournez au menu principal et attendez le prochain choix de l'utilisateur.

5. Lorsque l'utilisateur choisit de quitter, les données de l'élève sont enregistrées dans un fichier et le programme se termine.

Les fonctions et les composants de la conception d'ensemble sont conçus pour réaliser la gestion et le fonctionnement des notes des étudiants. Grâce à une division et une organisation raisonnables des fonctions, le programme peut avoir une bonne structure et une bonne évolutivité. Les détails et les algorithmes de mise en œuvre réels doivent être conçus et développés en fonction du langage de programmation et des exigences spécifiques.

cinq. conception détaillée

Il s'agit d'un programme relativement complexe, voici sa conception détaillée :

1. Structure étudiante :

cpp

structure Étudiant {

    std::nom de chaîne ;

    identifiant int ;

    std::string className ;

    score entier ;

} ;

2. Fonction addStudent :

cpp

void addStudent(std::vector<Student>& étudiants) {

    std::nom de chaîne ;

    identifiant int ;

    std::string className ;

    score entier ;

    std::cout << "Veuillez entrer le nom de l'élève : " ;

    std :: cin >> nom ;

    std::cout << "Veuillez saisir l'identifiant étudiant : " ;

    std :: cin >> identifiant ;

    std::cout << "Veuillez saisir la classe de l'élève : " ;

    std :: cin >> nom_classe ;

    std::cout << "Veuillez saisir la note de l'étudiant : " ;

    std :: cin >> score ;

    étudiants.push_back({name, id, className, score});

    std::cout << "Informations sur l'étudiant saisies avec succès." << std::endl;

}

3. Fonction de modification du score :

cpp

void modifyScore(std::vector<Student>& étudiants) {

    identifiant int ;

    int nouveauScore ;

    std::cout << "Veuillez saisir le numéro d'étudiant pour modifier la note :" ;

    std :: cin >> identifiant ;

    booléen trouvé = faux ;

    pour (auto& étudiant : étudiants) {

        si (étudiant.id == id) {

            std::cout << "Veuillez entrer un nouveau score : " ;

            std :: cin >> nouveau score ;

            étudiant.score = nouveauScore ;

            trouvé = vrai ;

            std::cout << "La note de l'étudiant a été modifiée avec succès." << std::endl;

            casser;

        }

    }

    si trouvé) {

        std::cout << "Aucun étudiant avec l'ID étudiant correspondant n'a été trouvé." << std::endl;

    }

}

4. fonction saveToFile :

cpp

void saveToFile(const std::vector<Etudiant>& étudiants) {

    std::ofstream file("students.txt");

    si (fichier.is_open()) {

        for (const auto& étudiant : étudiants) {

            fichier << étudiant.nom << " " << étudiant.id << " " << étudiant.classeNom << " " << étudiant.score << std :: endl;

        }

        fichier.close();

        std::cout << "Informations sur l'étudiant enregistrées avec succès." << std::endl;

    } autre {

        std::cout << "Impossible d'ouvrir le fichier pour l'enregistrement." << std::endl;

    }

}

5. Fonction loadFromFile :

cpp

void loadFromFile(std::vector<Student>& étudiants) {

    std::ifstream file("students.txt");

    si (fichier.is_open()) {

        std :: ligne de chaîne ;

        tandis que (std::getline(fichier, ligne)) {

            std :: isstringstream iss(ligne);

            std::nom de chaîne ;

            identifiant int ;

            std::string className ;

            score entier ;

            if (iss >> name >> id >> className >> score) {

                étudiants.push_back({name, id, className, score});

            }

        }

        fichier.close();

        std::cout << "Informations sur l'étudiant chargées avec succès." << std::endl;

    } autre {

        std::cout << "Impossible d'ouvrir le fichier pour le chargement." << std::endl;

    }

}

6. Fonction printClassScores :

cpp

void printClassScores(const std::vector<Étudiant>& étudiants) {

    std::string className ;

    std::cout << "Veuillez saisir le nom de la classe : " ;

    std :: cin >> nom_classe ;

    std::cout << "class" << className << " étudiants

Transcription : " << std :: endl;

    booléen trouvé = faux ;

    for (const auto& étudiant : étudiants) {

        if (student.className == className) {

            std::cout << "姓名:" << student.name << "\t学号:" << student.id << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

            trouvé = vrai ;

        }

    }

    si trouvé) {

        std::cout << "Aucun élève de la classe correspondante n'a été trouvé." << std::endl;

    }

}

7. Fonction searchStudent :

cpp

void searchStudent(const std::vector<Student>& étudiants) {

    int choix ;

    std::cout << "Veuillez sélectionner la méthode de requête :\n1. numéro d'étudiant\n2. nom\n" ;

    std :: cin >> choix ;

    si (choix == 1) {

        identifiant int ;

        std::cout << "Veuillez entrer le numéro d'étudiant : " ;

        std :: cin >> identifiant ;

        booléen trouvé = faux ;

        for (const auto& étudiant : étudiants) {

            si (étudiant.id == id) {

                std::cout << "学号:" << student.id << "\t姓名:" << student.name << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

                trouvé = vrai ;

                casser;

            }

        }

        si trouvé) {

            std::cout << "Aucun étudiant avec l'ID étudiant correspondant n'a été trouvé." << std::endl;

        }

    } sinon si (choix == 2) {

        std::nom de chaîne ;

        std::cout << "Veuillez entrer le nom : " ;

        std :: cin >> nom ;

        booléen trouvé = faux ;

        for (const auto& étudiant : étudiants) {

            if (student.name == nom) {

                std::cout << "学号:" << student.id << "\t姓名:" << student.name << "\t班级:" << student.className << "\t分数:" << étudiant.score << std::endl;

                trouvé = vrai ;

            }

        }

        si trouvé) {

            std::cout << "Aucun étudiant avec le nom correspondant trouvé." << std::endl;

        }

    } autre {

        std::cout << "Choix invalide." << std::endl;

    }

}

8. Fonction sortByAverageScore :

cpp

bool compareByAverageScore(const Étudiant& étudiant1, const Étudiant& étudiant2) {

    retour (étudiant1.score + étudiant2.score) / 2.0 > (étudiant2.score + étudiant2.score) / 2.0 ;

}

void sortByAverageScore(std::vector<Student>& étudiants) {

    std :: sort (étudiants.begin (), étudiants. fin (), compareByAverageScore);

    std::cout << "Trier les réussites par note moyenne." << std::endl;

}

9. Programme principal :

cpp

int main() {

    std::vector<Student> étudiants ;

    loadFromFile(étudiants);

    int choix ;

    faire {

        std::cout << "\n1. Saisissez les notes des étudiants\n2. Modifiez les notes des étudiants\n3. Enregistrez les notes des étudiants dans des fichiers\n4. Générez les relevés de notes des étudiants par classe\n5. Interrogez les notes des étudiants par numéro et nom d'étudiant\n6. Triez par GPA\n0. Quitter\n" ;

        std :: cin >> choix ;

        interrupteur (choix) {

            cas 1:

                addStudent(étudiants);

                casser;

            cas 2 :

                modifierScore(élèves

);

                casser;

            cas 3 :

                saveToFile(étudiants);

                casser;

            cas 4 :

                printClassScores(étudiants);

                casser;

            cas 5 :

                rechercherÉtudiant(étudiants);

                casser;

            cas 6 :

                sortByAverageScore(étudiants);

                casser;

            cas 0 :

                saveToFile(étudiants);

                std::cout << "Les notes des étudiants ont été enregistrées dans le fichier, le programme est sur le point de se fermer." << std::endl;

                casser;

            défaut:

                std::cout << "Choix invalide." << std::endl;

                casser;

        }

    } tandis que (choix != 0);

    renvoie 0 ;

}

Cette conception détaillée fournit les détails d'implémentation de chaque fonction, y compris les paramètres, le type de retour et les principales étapes de fonctionnement. Grâce à ces conceptions, le programme peut gérer et exploiter les notes des élèves selon les besoins.

  • analyse de débogage

Au cours du processus de débogage, certains problèmes peuvent être rencontrés. Voici quelques problèmes rencontrés et leurs solutions, ainsi qu'un examen, une discussion et une analyse de la conception et de la mise en œuvre :

1. Problème : lors de la saisie des informations sur l'étudiant, le score saisi dépasse la plage valide.

   Solution : ajoutez une logique de validation appropriée dans la fonction "addStudent" pour vous assurer que les scores saisis se situent dans la plage valide.

2. Problème : Lors du chargement d'un fichier de données d'élèves, le fichier n'existe pas ou est au mauvais format.

   Solution : Ajoutez une gestion des erreurs appropriée dans la fonction "loadFromFile", telle que la vérification de l'existence du fichier et la validation du formatage lors de la lecture de chaque ligne de données.

3. Problème : Lors de la modification du score d'un élève, l'élève avec le numéro d'élève correspondant est introuvable.

   Solution : Ajoutez un jugement indiquant si l'étudiant existe dans la fonction "modifyScore" et donnez un message d'erreur correspondant.

4. Problème : lors de l'exportation des relevés de notes des étudiants par classe, la classe n'existe pas ou il n'y a pas de données sur les étudiants.

   Solution : Ajoutez un jugement sur l'existence de la classe et si les données de l'étudiant sont vides dans la fonction "printClassScores", et donnez un message d'erreur correspondant.

5. Problème : lors de la recherche des notes des étudiants par numéro ou nom d'étudiant, aucun étudiant correspondant ne peut être trouvé.

   Solution : Ajoutez un jugement indiquant si un étudiant existe dans la fonction "searchStudent" et donnez un message d'erreur correspondant.

6. Problème : Lors du tri des notes des élèves, la logique de tri est erronée.

   Solution : vérifiez la logique de tri dans la fonction "sortByAverageScore" pour garantir un tri correct par score moyen.

  • Mode d'emploi

Voici les étapes détaillées pour utiliser le programme de gestion du rendement des élèves :

1. Ouvrez un terminal ou une invite de commande et entrez le répertoire où se trouve le programme.

2. Compilez le code source du programme.

3. Exécutez le programme.

4. Après le démarrage du programme, un menu s'affiche pour vous permettre de choisir une opération.

5. Sélectionnez l'option dans le menu pour effectuer l'opération correspondante :

    Option 1 : Saisie des notes des étudiants

      Entrez le nom de l'étudiant, son numéro d'étudiant, sa classe et sa note, puis suivez les invites du programme pour entrer.

      Une fois la saisie terminée, le programme affichera que les informations sur l'élève ont été saisies avec succès.

    Option 2 : Modifier les notes des étudiants

      Entrez le numéro d'étudiant de l'étudiant dont le score doit être modifié.

      Saisissez une nouvelle note.

      Une fois la modification terminée, le programme affichera que le score de l'élève a été modifié avec succès.

    Option 3 : Enregistrer les notes des élèves dans un fichier

      Les informations sur les étudiants sont enregistrées dans un fichier appelé "students.txt".

      Le programme affichera que les informations sur l'étudiant ont été enregistrées avec succès.

    Option 4 : produire les relevés de notes des étudiants par classe

      Entrez le nom de la classe pour exporter la transcription.

      Le programme recherchera les étudiants en fonction du nom de la classe et affichera les relevés de notes des étudiants de la classe correspondante.

    Option 5 : Interroger les notes des étudiants par numéro et nom d'étudiant

      Sélectionnez la méthode de recherche : par numéro d'étudiant ou par nom.

      Entrez le numéro ou le nom de l'étudiant correspondant pour vous renseigner.

      Le programme trouvera et affichera les informations sur les étudiants correspondants.

    Option 6 : Trier par moyenne pondérée cumulative

      Les informations sur les étudiants seront triées par moyenne pondérée cumulative.

      Le programme affichera le succès trié par moyenne pondérée cumulative.

    Option 0 : quitter le programme

      Les notes des étudiants sont automatiquement enregistrées dans le fichier "students.txt".

      Le programme affiche que les notes des élèves ont été enregistrées dans le fichier, puis se ferme.

6. Sélectionnez l'option appropriée selon vos besoins et suivez les invites du programme.

7. Après avoir effectué l'opération sélectionnée, vous pouvez choisir de continuer avec d'autres opérations ou de quitter le programme.

Veuillez noter qu'avant d'exécuter le programme, assurez-vous d'avoir créé le fichier "students.txt" et d'avoir enregistré les informations sur l'étudiant dans le bon format. Si vous avez besoin d'importer des données existantes sur les étudiants, vous pouvez entrer les informations sur les étudiants dans le fichier "students.txt" par ligne et utiliser des espaces pour séparer chaque champ.

En suivant les étapes ci-dessus, vous pouvez utiliser le programme My Student Grade Management pour saisir, modifier, interroger, trier et effectuer d'autres opérations sur les informations des étudiants, et enregistrer les informations sur les étudiants dans un fichier.

  • Résultats de test

Données de test:

Résultats de test:

Ci-dessous, nous montrons tout le code pour ce projet:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

struct Student {
    std::string name;
    int id;
    std::string className;
    int score;
};

// 函数声明
void addStudent(std::vector<Student>& students);
void updateStudent(std::vector<Student>& students);
void saveToFile(const std::vector<Student>& students);
void loadFromFile(std::vector<Student>& students);
void printClassScores(const std::vector<Student>& students);
void searchStudent(const std::vector<Student>& students);
void sortByAverageScore(std::vector<Student>& students);

int main() {
    std::vector<Student> students;
    loadFromFile(students);

    int choice;
    do {
        std::cout << "学生成绩管理程序" << std::endl;
        std::cout << "1. 录入学生成绩" << std::endl;
        std::cout << "2. 修改学生成绩" << std::endl;
        std::cout << "3. 保存学生成绩到文件" << std::endl;
        std::cout << "4. 按班级输出学生成绩单" << std::endl;
        std::cout << "5. 按学号和姓名查询学生成绩" << std::endl;
        std::cout << "6. 按平均成绩排序" << std::endl;
        std::cout << "0. 退出程序" << std::endl;
        std::cout << "请选择操作: ";
        std::cin >> choice;

        switch (choice) {
        case 1:
            addStudent(students);
            break;
        case 2:
            updateStudent(students);
            break;
        case 3:
            saveToFile(students);
            break;
        case 4:
            printClassScores(students);
            break;
        case 5:
            searchStudent(students);
            break;
        case 6:
            sortByAverageScore(students);
            break;
        case 0:
            saveToFile(students);
            std::cout << "程序已退出。" << std::endl;
            break;
        default:
            std::cout << "无效的选择,请重新选择操作。" << std::endl;
            break;
        }

        std::cout << std::endl;
    } while (choice != 0);

    return 0;
}

void addStudent(std::vector<Student>& students) {
    Student student;
    std::cout << "请输入学生姓名: ";
    std::cin >> student.name;
    std::cout << "请输入学生学号: ";
    std::cin >> student.id;
    std::cout << "请输入学生班级: ";
    std::cin >> student.className;
    std::cout << "请输入学生分数: ";
    std::cin >> student.score;

    students.push_back(student);
}

void updateStudent(std::vector<Student>& students) {
    int id;
    std::cout << "请输入要修改的学生学号: ";
    std::cin >> id;

    bool found = false;
    for (auto& student : students) {
        if (student.id == id) {
            std::cout << "请输入修改后的学生分数: ";
            std::cin >> student.score;
            found = true;
            break;
        }
    }

    if (!found) {
        std::cout << "未找到学号为 " << id << " 的学生。" << std::endl;
    }
}

void saveToFile(const std::vector<Student>& students) {
    std::ofstream file("students.txt");
    if (file.is_open()) {
        for (const auto& student : students) {
            file << student.name << " " << student.id << " " << student.className << " " << student.score << std::endl;
        }
        file.close();
        std::cout << "学生成绩已保存到文件。" << std::endl;
    }
    else {
        std::cout << "无法打开文件进行保存。" << std::endl;
    }
}

void loadFromFile(std::vector<Student>& students) {
    std::ifstream file("students.txt");
    if (file.is_open()) {
        std::string name, className;
        int id, score;
        while (file >> name >> id >> className >> score) {
            Student student;
            student.name = name;
            student.id = id;
            student.className = className;
            student.score = score;
            students.push_back(student);
        }
        file.close();
        std::cout << "从文件加载了 " << students.size() << " 条学生成绩信息。" << std::endl;
    }
    else {
        std::cout << "无法打开文件进行加载。" << std::endl;
    }
}

void printClassScores(const std::vector<Student>& students) {
    std::cout << "请输入班级名称: ";
    std::string className;
    std::cin >> className;

    std::cout << "班级成绩单:" << std::endl;
    for (const auto& student : students) {
        if (student.className == className) {
            std::cout << "姓名: " << student.name << ", 学号: " << student.id << ", 班级: " << student.className << ", 分数: " << student.score << std::endl;
        }
    }
}

void searchStudent(const std::vector<Student>& students) {
    std::cout << "请选择查询方式:" << std::endl;
    std::cout << "1. 按学号查询" << std::endl;
    std::cout << "2. 按姓名查询" << std::endl;
    std::cout << "请选择操作: ";
    int choice;
    std::cin >> choice;

    if (choice == 1) {
        int id;
        std::cout << "请输入学生学号: ";
        std::cin >> id;

        bool found = false;
        for (const auto& student : students) {
            if (student.id == id) {
                std::cout << "姓名: " << student.name << ", 学号: " << student.id << ", 班级: " << student.className << ", 分数: " << student.score << std::endl;
                found = true;
                break;
            }
        }

        if (!found) {
            std::cout << "未找到学号为 " << id << " 的学生。" << std::endl;
        }
    }
    else if (choice == 2) {
        std::string name;
        std::cout << "请输入学生姓名: ";
        std::cin >> name;

        bool found = false;
        for (const auto& student : students) {
            if (student.name == name) {
                std::cout << "姓名: " << student.name << ", 学号: " << student.id << ", 班级: " << student.className << ", 分数: " << student.score << std::endl;
                found = true;
            }
        }

        if (!found) {
            std::cout << "未找到姓名为 " << name << " 的学生。" << std::endl;
        }
    }
    else {
        std::cout << "无效的选择,请重新选择操作。" << std::endl;
    }
}

void sortByAverageScore(std::vector<Student>& students) {
    std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
        return a.score < b.score;
        });

    std::cout << "按平均成绩排序:" << std::endl;
    for (const auto& student : students) {
        std::cout << "姓名: " << student.name << ", 学号: " << student.id << ", 班级: " << student.className << ", 分数: " << student.score << std::endl;
    }
}

  • Résumé de la conception du programme

Le but de cette conception de programme est de réaliser le système de gestion du rendement des élèves. Grâce à l'analyse des exigences, à la conception des grandes lignes et à la conception détaillée du programme, nous avons réalisé un programme de gestion du rendement des élèves basé sur C++.

À l'étape de l'analyse de la demande, nous avons défini les exigences de base du programme, y compris les fonctions de saisie, de modification, de sauvegarde, de sortie, de recherche et de tri des notes des étudiants. Ces exigences nous aident à définir les limites fonctionnelles du programme et les besoins des utilisateurs.

À l'étape de conception des grandes lignes, nous avons conçu les principaux modules et fonctions du programme, et défini la classe d'élèves et les fonctions de gestion des informations sur le rendement des élèves. Ces conceptions nous aident à trier la structure et la logique du programme.

Dans la phase de conception détaillée, nous décrivons plus en détail les détails d'implémentation de chaque fonction, y compris les paramètres de la fonction, le type de retour et les étapes de l'opération. Ces conceptions nous aident à comprendre plus clairement le flux d'exécution et le traitement des données du programme.

Dans le processus de réalisation, nous avons suivi les conseils de la conception, réalisé chaque module fonctionnel étape par étape et effectué des tests et un débogage. Grâce à l'utilisation de données de test, nous avons vérifié l'exhaustivité fonctionnelle et l'exactitude du programme.

Grâce à cette conception de programme, nous avons appris le résumé d'expérience suivant :

1. L'analyse des besoins est une étape clé du processus de conception. La définition des besoins peut nous aider à garantir que les fonctions du programme répondent aux besoins des utilisateurs et à éviter les redondances fonctionnelles inutiles.

2. La conception générale et la conception détaillée sont des étapes importantes de la conception du programme, elles nous aident à établir la structure globale et la logique détaillée du programme, et fournissent des conseils pour le codage.

3. La conception modulaire peut améliorer la lisibilité et la maintenabilité du programme. Diviser le programme en différents modules ou fonctions permet de réduire la complexité et d'améliorer la réutilisation du code.

4. Dans le processus de mise en œuvre, les tests et le débogage étape par étape sont très importants, ce qui peut nous aider à trouver et à résoudre les problèmes potentiels et à garantir l'exactitude du programme.

5. Lors de la conception et de l'écriture du code, il est très important de prêter attention à la lisibilité et à la maintenabilité du code, comme nommer les variables et les fonctions de manière appropriée, ajouter des commentaires, suivre les normes de codage, etc.

En général, cette conception de programme nous permet de comprendre et d'appliquer pleinement les principes et méthodes de base du génie logiciel, y compris l'analyse des exigences, la conception, la mise en œuvre, les tests et le débogage. En même temps, cela nous rappelle également de prêter attention aux détails et à la qualité dans le processus de conception et de codage afin de développer des logiciels efficaces, fiables et faciles à entretenir.

Guess you like

Origin blog.csdn.net/m0_74755811/article/details/131263021