询问用户是否要添加重复信息

Ask the user whether he wants to add duplicate information?

本文关键字:信息 添加 用户 是否      更新时间:2023-10-16

我正在编写这个程序,它允许用户将信息添加到.txt学生列表中。如果输入的信息与列表中的一个学生完全相同(相同的姓名,相同的出生日期,相同的地址,相同的入学年份和相同的专业),我想让程序询问用户是否还想将该学生添加到列表中。知道怎么做吗?下面是我的代码:

void StudentList:: Add_Student () {
    int new_pid, new_ent_year;
    string new_fname, new_dob, new_addr, new_major;
    cout << endl << "Enter student information:" << endl;
    cout << "Full name: "; cin.ignore(1); getline (cin,new_fname);
    cout << "Date of birth: "; getline (cin,new_dob);
    cout << "Address: "; getline (cin,new_addr);
    cout << "Entrance year: "; cin >> new_ent_year;
    cout << "Major: "; cin.ignore(1); getline (cin,new_major);
    new_pid = tail->Get_pid()+1;
    Student *p = new Student (new_pid, new_fname, new_dob, new_addr, new_ent_year, new_major);
    //  p->Show();
    AddTail (p);
    // write to file
    f.seekg(0, ios::end);
    f << endl << new_pid << ":" << new_fname << ":" << new_dob << ":" << new_addr << ":" << new_ent_year << ":" << new_major;
}

您已经有了Student对象的列表,因此只需在其中循环查找具有匹配信息的现有Student

bool StudentList::Student_Exists(const string &fname, const string &dob, const string &addr, int ent_year, const string &major)
{
    // search the list of Student objects for matching values
    // and return true/false accordingly...
}
void StudentList::Add_Student()
{
    int new_pid, new_ent_year;
    string new_fname, new_dob, new_addr, new_major;
    cout << endl << "Enter student information:" << endl;
    cout << "Full name: "; cin.ignore(1); getline (cin,new_fname);
    cout << "Date of birth: "; getline (cin,new_dob);
    cout << "Address: "; getline (cin,new_addr);
    cout << "Entrance year: "; cin >> new_ent_year;
    cout << "Major: "; cin.ignore(1); getline (cin,new_major);
    if (Student_Exists(new_fname, new_dob, new_addr, new_ent_year, new_major))
    {
        string choice;
        cout << "That student already exists. Add anyway? [y/n] "; cin.ignore(1); getline (cin, proceed);
        if ((choice != "y") && (choice != "Y"))
            return;
    }
    new_pid = tail->Get_pid()+1;
    Student *p = new Student (new_pid, new_fname, new_dob, new_addr, new_ent_year, new_major);
    //  p->Show();
    AddTail (p);
    // write to file
    f.seekg(0, ios::end);
    f << endl << new_pid << ":" << new_fname << ":" << new_dob << ":" << new_addr << ":" << new_ent_year << ":" << new_major;
}

显然,您必须实现Student_Exists()才能在Student列表中搜索与指定条件匹配的现有条目。如何做到这一点取决于StudentList实际上如何跟踪Student对象。

// ...
bool duplicate = is_duplicate(new_pid, new_ent_year, new_fname, new_dob, new_addr, new_major); // call function to check for duplicate info
if (duplicate) {
    string proceed;
    cout << "That's a duplicate!  Proceed? [y/n] "; cin.ignore(1); getline (cin, proceed);
    if (proceed != "y") {
        return;
    }
}
Student *p = new Student (new_pid, new_fname, new_dob, new_addr, new_ent_year, new_major);
// ...