Jouer avec le système de gestion des informations sur les étudiants——[c++]

Concevoir un système de gestion pour réaliser la gestion des informations de base des étudiants (comprenant au moins le nom, le numéro d'étudiant, le sexe, la date de naissance, l'âge du numéro de dortoir (obtenu par calcul);), avec saisie de données, affichage, stockage, requête ( selon la demande de numéro d'étudiant ou la demande de nom), modifier et supprimer des fonctions.

un. Description du problème

C++ concevoir un système de gestion pour réaliser la gestion des informations de base des étudiants (comprenant au moins le nom, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir, l'âge (obtenu par calcul) ; avec saisie, affichage, stockage, requête (selon au numéro d'étudiant ou à la requête de nom), modifier et supprimer des fonctions.

deux. exigences de base

Saisie de données : permet aux utilisateurs de saisir des informations sur les étudiants, notamment le nom, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir et d'autres informations.

Affichage des données : les informations sur les étudiants peuvent être affichées sous forme de tableau via l'interface.

Enregistrement des données : après avoir saisi ou modifié les informations sur l'étudiant, les informations doivent être enregistrées dans un fichier afin de pouvoir être utilisées la prochaine fois que le programme est ouvert.

Fonction de requête : permet aux utilisateurs de rechercher des informations sur les étudiants par numéro ou nom d'étudiant et d'afficher les résultats de la requête sous la forme d'un tableau.

Fonction de modification : permet aux utilisateurs de modifier les informations existantes sur les étudiants et d'enregistrer les informations modifiées dans un fichier.

Fonction de suppression : permet aux utilisateurs de supprimer les informations existantes sur les étudiants et d'enregistrer les informations supprimées dans un fichier.

Il convient de noter que pour réaliser les fonctions ci-dessus, le système doit effectuer certains calculs et traitements. Par exemple, il est nécessaire de calculer l'âge d'un étudiant en fonction de sa date de naissance et de déterminer si le format des données est correct et si les données sont légales lors de la saisie ou de la modification des informations sur l'étudiant.

trois. analyse de la demande

Lors de l'analyse des exigences, nous devons décrire en détail les fonctions et les technologies utilisées par le système, déterminer l'entrée et la sortie du système et tenir compte des situations particulières possibles et de la gestion des exceptions.

Le système doit réaliser les fonctions suivantes :

(1) Saisie des données

Les utilisateurs peuvent entrer des informations sur les étudiants via l'interface, y compris le nom, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir et d'autres informations, et rendre des jugements sur la légalité. Si le format des données est incorrect ou si les données sont erronées, le programme doit donner un message d'invite correspondant et demander à l'utilisateur de saisir à nouveau.

(2) Affichage des données

Le système peut afficher les informations existantes sur les étudiants sous forme de tableau, y compris le nom, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir et l'âge calculé.

(3) Stockage des données

Après avoir saisi ou modifié les informations sur l'étudiant, le programme doit enregistrer les informations dans un fichier. Afin de garantir le bon fonctionnement du programme, le format de fichier enregistré doit répondre strictement aux exigences.

(4) Fonction de requête

Les utilisateurs peuvent interroger les informations sur les étudiants par numéro ou nom d'étudiant, et les résultats de la requête sont affichés dans un tableau. Dans le même temps, le programme doit également juger de la validité des résultats de la requête et fournir des informations d'invite correspondantes si les informations n'existent pas.

(5) Modifier la fonction

Autorisez les utilisateurs à modifier les informations existantes sur les étudiants et à enregistrer les informations modifiées dans un fichier.

(6) Fonction de suppression

Autoriser les utilisateurs à supprimer les informations existantes sur les étudiants et à enregistrer les informations supprimées dans un fichier.

Quatre. conception de contour

Lors de la conception générale, nous devons déterminer la structure de composition et les modules fonctionnels du système, concevoir les structures de données et les algorithmes nécessaires, et planifier le flux de contrôle et le flux de fonctionnement du programme.

Le système peut être divisé en modules suivants :

Module de saisie des données : chargé de recevoir les informations sur les étudiants saisies par l'utilisateur, de vérifier et de juger de leur légalité.

Module de traitement des données : responsable du calcul, du traitement et de la sauvegarde des informations saisies sur les étudiants, y compris le calcul de l'âge, la saisie, la modification et la suppression des informations, etc.

Module de sortie de données : responsable de la sortie des informations traitées sur les étudiants sous la forme d'un tableau, y compris l'affichage des résultats de la requête et le traitement du format de fichier enregistré.

Dans la conception du cadre du programme, une classe d'étudiants peut être conçue avec une pensée orientée objet, qui comprend des attributs tels que le nom, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir et les fonctions de fonctionnement correspondantes. Dans le même temps, une classe de gestion des informations sur les étudiants doit être créée pour gérer, stocker, lire et exploiter les informations sur les étudiants.

cinq. conception détaillée

Lors de la conception détaillée, nous devons concevoir davantage l'interface inter-module, la structure de données et l'algorithme du programme, et effectuer le codage du module et les tests unitaires.

(1) Module d'entrée de données

Le module d'entrée doit définir une fonction pour recevoir les informations sur les étudiants saisies par l'utilisateur, et le paramètre est l'objet de la classe de gestion des informations sur les étudiants. À l'intérieur de la fonction, l'utilisateur doit être invité à saisir les informations sur l'étudiant dans un certain format, et la vérification du format des données et le jugement de légalité doivent être effectués. Si les données d'entrée sont erronées, vous devez renvoyer le message d'erreur correspondant. Si les données d'entrée sont correctes, les informations sur les étudiants doivent être ajoutées à l'instance de la classe de gestion des informations sur les étudiants.

Exemple de squelette de fonction :

void InputStudentInfo(StudentManagement& management){

    // Demander à l'utilisateur d'entrer les informations sur l'étudiant

    //Recevoir les informations sur les étudiants saisies par l'utilisateur

    // Effectuer la vérification du format des données et le jugement de légalité

    //Si les données d'entrée sont erronées, renvoie un message d'erreur

    //Ajouter des informations sur les étudiants à l'instance de classe de gestion des informations sur les étudiants

}

(2) Module de traitement des données

Le module de traitement des données doit définir une classe de gestion des informations sur les étudiants, y compris les méthodes de fonctionnement telles que l'ajout d'étudiants, la modification d'étudiants, la suppression d'étudiants et l'interrogation d'étudiants, et doit également calculer et traiter l'âge des étudiants.

Exemple de framework de classe :

classe Gestion des étudiants {

publique:

    void AddStudent(Student student); //Ajouter des étudiants

    void ModifyStudent(Student student); //Modifier les informations sur l'étudiant

    void DeleteStudent(Student student); //Suppression d'étudiants

    void QueryStudentByNum(std::string num); // Interroger les informations sur les étudiants par numéro d'étudiant

    void QueryStudentByName(std::string name); // Interroger les informations sur les étudiants par nom

    void ShowAllStudentInfo(); // Afficher toutes les informations sur les étudiants

    void SaveToFile(std::string filename); //Enregistrer les informations de l'étudiant dans le fichier

    void ReadFromFile(std::string filename); //Lire les informations sur l'élève à partir du fichier

privé:

    std::vector<Student> étudiants ; //conteneur pour stocker les informations sur les étudiants

} ;

classe Étudiant {

publique:

    std::string name; //nom de l'étudiant

    std::string num; //numéro d'étudiant

    std::string gender; //sexe de l'étudiant

    std::string birth; //Date de naissance de l'étudiant (au format aaaa-mm-jj)

    std ::string room ; //numéro du dortoir des étudiants

    int age ; // âge de l'étudiant

} ;

//Fonction pour calculer l'âge de l'élève

int CalculateAge(std::string naissance) {

    //Calculer l'âge de l'élève et le retour

}

(3) Module de sortie de données

Le module de sortie de données doit définir une fonction pour sortir les informations sur les étudiants dans un formulaire, y compris l'affichage des résultats de la requête et le traitement des formats de fichiers enregistrés.

Exemple de squelette de fonction :

void OutputStudentInfo(Student student){

    // afficher les informations sur les étudiants sous forme

}

void SaveStudentInfoToFile(std::vector<Student> étudiants, std::string filename){

    // Enregistrez les informations sur l'étudiant dans le fichier (vous pouvez d'abord convertir les informations sur l'étudiant dans un format de chaîne, puis les écrire dans le fichier)

}

six. analyse de débogage

Une fois le programme écrit, il doit être testé et débogué pour garantir l'exactitude et la stabilité du programme. Lors des tests et du débogage, vous devez faire attention aux points suivants :

Pour chaque module, des tests unitaires sont nécessaires pour s'assurer que chaque module fonctionne correctement. Dans le même temps, des tests d'intégration et des tests système sont nécessaires pour tester la fonctionnalité de l'ensemble du programme.

Pour les situations spéciales et anormales qui peuvent se produire, un traitement et des tests correspondants sont nécessaires, tels que des entrées illégales, des fichiers illisibles et des fichiers inexistants.

Il est recommandé d'utiliser des outils de débogage pour déboguer le programme et pour dépanner et résoudre les problèmes à temps.

Sept. Mode d'emploi

Pour les utilisateurs qui utilisent ce système, il est nécessaire de fournir des instructions correspondantes, notamment comment utiliser chaque module fonctionnel, comment saisir et traiter des données, comment enregistrer et lire des fichiers, etc.

Exemple d'instructions d'utilisation :

Entrez les informations sur l'étudiant :

Dans l'interface principale, sélectionnez le bouton "Entrer les informations sur l'étudiant" pour accéder à l'interface de saisie, suivez les invites pour entrer le nom de l'étudiant, le numéro d'étudiant, le sexe, la date de naissance, le numéro de dortoir et d'autres informations, puis cliquez sur le bouton "Confirmer" , le système enverra automatiquement à l'étudiant Les informations sont enregistrées dans un fichier.

Interroger les informations sur les étudiants :

Dans l'interface principale, sélectionnez le bouton "Interroger les informations sur l'étudiant" pour accéder à l'interface de requête, entrez le numéro ou le nom de l'étudiant dans l'interface de requête, puis cliquez sur le bouton "Interroger", le système affichera les résultats de la requête sous la forme de une table. Si le résultat de la requête n'existe pas, le système affichera un message d'invite correspondant.

Modifier les informations sur l'étudiant :

Dans l'interface principale, sélectionnez le bouton "Modifier les informations de l'étudiant" pour entrer dans l'interface de modification, entrez le numéro ou le nom de l'étudiant de l'étudiant dans l'interface de modification, et entrez les informations à modifier, et enfin cliquez sur le bouton "Confirmer", le système enregistrera automatiquement les informations modifiées Enregistrer l'élève dans le fichier.

Supprimer les informations sur l'étudiant :

Dans l'interface principale, sélectionnez le bouton « Supprimer les informations sur l'étudiant » pour accéder à l'interface de suppression, entrez le numéro ou le nom de l'étudiant dans l'interface de suppression, puis cliquez sur le bouton « Supprimer », le système enregistrera automatiquement les informations sur l'étudiant supprimé dans un fichier .

huit. Résultats de test

Les résultats des tests montrent que le système a de bonnes fonctions et une bonne expérience utilisateur, peut gérer efficacement les informations sur les étudiants et a une grande précision et stabilité dans la saisie, la requête, la modification et la suppression.

Neuf. Résumé de la conception du programme

Ce programme est développé avec le langage C++, en utilisant la pensée orientée objet, et réalise la gestion et l'exploitation des informations des étudiants grâce à une conception modulaire et une architecture en couches. Grâce à cette conception de programme, j'ai appris quelques concepts de base et la syntaxe de C++, ce qui a encore amélioré mes compétences en programmation et mes capacités pratiques.

dix. les références

《Introduction au C++》

"Réflexions sur la programmation C++"

"Programmation C++"

"Bases de la programmation C++"

Après l'analyse ci-dessus, le code suivant est obtenu :

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iomanip>

using namespace std;


struct Student {
    string name;
    string id;
    string gender;
    string dorm;
    int age;
    string birth;
};


const string fileName = "students.txt";


vector<Student> readStudents() {
    vector<Student> students;
    ifstream infile(fileName);
    if (!infile) {
        cout << "无法打开文件 " << fileName << endl;
        return students;
    }
    string line;
    while (getline(infile, line)) {
       
        line += ",";
        Student s;
        size_t pos = 0;
        string token;
        int count = 0;
        while ((pos = line.find(',')) != string::npos) {
            token = line.substr(0, pos);
            switch (count) {
            case 0: s.name = token; break;
            case 1: s.id = token; break;
            case 2: s.gender = token; break;
            case 3: s.dorm = token; break;
            case 4: s.age = stoi(token); break;
            case 5: s.birth = token; break;
            }
            line.erase(0, pos + 1);
            count++;
        }
        students.push_back(s);
    }
    infile.close();
    return students;
}


void saveStudents(vector<Student>& students) {
    ofstream outfile(fileName);
    if (!outfile) {
        cout << "无法打开文件 " << fileName << endl;
        return;
    }
    for (auto&& s : students) {
      
        outfile << s.name << ',' << s.id << ',' << s.gender << ',' << s.dorm
            << ',' << s.age << ',' << s.birth << endl;
    }
    outfile.close();
}

void displayStudents(vector<Student>& students) {
    cout << setw(10) << "姓名" << setw(10) << "学号" << setw(5) << "性别"
        << setw(10) << "宿舍号" << setw(5) << "年龄" << setw(15) << "出生日期" << endl;
    for (auto&& s : students) {
        cout << setw(10) << s.name << setw(10) << s.id << setw(5) << s.gender
            << setw(10) << s.dorm << setw(5) << s.age << setw(15) << s.birth << endl;
    }
}

vector<Student> searchById(vector<Student>& students, string id) {
    vector<Student> result;
    for (auto&& s : students) {
        if (s.id == id) {
            result.push_back(s);
        }
    }
    return result;
}


vector<Student> searchByName(vector<Student>& students, string name) {
    vector<Student> result;
    for (auto&& s : students) {
        if (s.name == name) {
            result.push_back(s);
        }
    }
    return result;
}


void modifyStudent(vector<Student>& students, string id) {
    for (auto&& s : students) {
        if (s.id == id) {
            cout << "请输入新的姓名:";
            getline(cin, s.name);
            cout << "请输入新的性别:";
            getline(cin, s.gender);
            cout << "请输入新的宿舍号:";
            getline(cin, s.dorm);
            cout << "请输入新的出生日期:";
            getline(cin, s.birth);
            s.age = 2023 - stoi(s.birth.substr(0, 4));
            cout << "修改成功!" << endl;
            return;
        }
    }
    cout << "没有找到学号为 " << id << " 的学生。" << endl;
}


void deleteStudent(vector<Student>& students, string id) {
    for (auto it = students.begin(); it < students.end(); it++) {
        if ((*it).id == id) {
            students.erase(it);
            cout << "删除成功!" << endl;
            return;
        }
    }
    cout << "没有找到学号为 " << id << " 的学生。" << endl;
}

void addStudent(vector<Student>& students) {
    Student s;
    cout << "请输入姓名:";
    getline(cin, s.name);
    cout << "请输入学号:";
    getline(cin, s.id);
    cout << "请输入性别:";
    getline(cin, s.gender);
    cout << "请输入宿舍号:";
    getline(cin, s.dorm);
    cout << "请输入出生日期(格式为YYYY-MM-DD):";
    getline(cin, s.birth);
    s.age = 2023 - stoi(s.birth.substr(0, 4));
    students.push_back(s);
    cout << "添加成功!" << endl;
}


void displayMenu() {
    cout << "请选择操作:" << endl;
    cout << "1. 查看所有学生信息" << endl;
    cout << "2. 按学号查询学生信息" << endl;
    cout << "3. 按姓名查询学生信息" << endl;
    cout << "4. 修改学生信息" << endl;
    cout << "5. 删除学生信息" << endl;
    cout << "6. 添加学生信息" << endl;
    cout << "0. 退出" << endl;
    cout << "请选择操作:";
}

int main() {
    vector<Student> students = readStudents();

    while (true) {
        displayMenu();
        int choice;
        cin >> choice;
        cin.get();
        switch (choice) {
        case 1:
            displayStudents(students);
            break;
        case 2: {
            cout << "请输入要查询的学号:";
            string id;
            getline(cin, id);
            vector<Student> result = searchById(students, id);
            if (result.size() == 0) {
                cout << "没有找到学号为 " << id << " 的学生。" << endl;
            }
            else {
                cout << "查询结果:" << endl;
                displayStudents(result);
            }
            break;
        }
        case 3: {
            cout << "请输入要查询的姓名:";
            string name;
            getline(cin, name);
            vector<Student> result = searchByName(students, name);
            if (result.size() == 0) {
                cout << "没有找到姓名为 " << name << " 的学生。" << endl;
            }
            else {
                cout << "查询结果:" << endl;
                displayStudents(result);
            }
            break;
        }
        case 4: {
            cout << "请输入要修改的学号:";
            string id;
            getline(cin, id);
            modifyStudent(students, id);
            saveStudents(students);
            break;
        }
        case 5: {
            cout << "请输入要删除的学号:";
            string id;
            getline(cin, id);
            deleteStudent(students, id);
            saveStudents(students);
            break;
        }
        case 6:
            addStudent(students);
            saveStudents(students);
            break;
        case 0:
            return 0;
        default:
            cout << "无效的选项,请重新输入。" << endl;
        }
    }

    return 0;
}

 Le code peut ajouter plus de fonctions. Le blogueur vous donnera une référence. Nous pouvons ajouter une entrée collective, une requête du personnel du dortoir, une suppression indépendamment de l'ensemble, etc. J'espère que tout le monde pourra s'améliorer.

Je suppose que tu aimes

Origine blog.csdn.net/m0_74755811/article/details/131106150
conseillé
Classement