首页 > 解决方案 > 修改链表 C++ 中的记录

问题描述

好的,所以我想要发生的是程序会要求我输入我要修改的导师的 id,然后假设在这种情况下我要修改导师的地址和电话号码。我不完全确定如何解决这个问题,所以任何帮助将不胜感激!请指导我正确的方向,谢谢!

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;



//Has functions accepts input & prints output in date format
class date {

public:
    int day, month, year;
    char seperator = '/';
    void enter() {
        cin >> day >> seperator >> month >> seperator >> year;
    }
    void display() {
        cout << day << seperator << month << seperator << year;
    }
    void reset() {
        day = 0;
        month = 0;
        year = 0;
    }
};

//Declaring tutor structure of Variables Globally (up to 100 records)
struct tutor {
    tutor* back;
    int tutorID;
    string tutorName;
    date dateJoined;
    date dateTerminate;
    float hourlyRate;
    string phoneNum;
    string address;
    int tCentreCode;
    string tCentreName;
    string tCentreLocation;
    int subjectCode;
    string subjectName;
    int rating;
    tutor* next;
}*list, *newnode, *temp, *previous, *tail;

void generateSample() {

    list = NULL;

    newnode = new tutor;
    newnode->tutorID = 1;
    newnode->tutorName = "Yow Tew Thung";
    newnode->address = "2, Jln 1/3, Bandar Sri Selamat";
    newnode->phoneNum = "0121231542";
    newnode->dateJoined.day = 15;  newnode->dateJoined.month = 01; newnode->dateJoined.year = 2017;
    newnode->dateTerminate.day = 10; newnode->dateTerminate.month = 11; newnode->dateTerminate.year = 2019;
    newnode->tCentreCode = 4;
    newnode->tCentreName = "eXcel Bukit Bintang 1";
    newnode->tCentreLocation = "Bukit Bintang";
    newnode->subjectCode = 4;
    newnode->subjectName = "History";
    newnode->rating = 5;
    newnode->hourlyRate = 45;

    list = tail = newnode;


    newnode = new tutor;
    newnode->tutorID = 2;
    newnode->tutorName = "Syed Hasif";
    newnode->address = "17, Jln Zainal Abidin 4, Suria";
    newnode->phoneNum = "0189056841";
    newnode->dateJoined.day = 05;  newnode->dateJoined.month = 05; newnode->dateJoined.year = 2019;
    newnode->dateTerminate.day = 02; newnode->dateTerminate.month = 11; newnode->dateTerminate.year = 2020;
    newnode->tCentreCode = 1;
    newnode->tCentreName = "eXcel Bukit Jalil 1";
    newnode->tCentreLocation = "Bukit Jalil";
    newnode->subjectCode = 2;
    newnode->subjectName = "Bahasa Melayu";
    newnode->rating = 3;
    newnode->hourlyRate = 45;

    newnode->back = tail;
    tail->next = newnode;
    tail = newnode;

    newnode = new tutor;
    newnode->tutorID = 3;
    newnode->tutorName = "Chong Kun Li";
    newnode->address = "34, Jalan 1/3Y, PJU8, Kiara";
    newnode->phoneNum = "0189343221";
    newnode->dateJoined.day = 05;  newnode->dateJoined.month = 05; newnode->dateJoined.year = 2019;
    newnode->dateTerminate.day = 02; newnode->dateTerminate.month = 11; newnode->dateTerminate.year = 2020;
    newnode->tCentreCode = 2;
    newnode->tCentreName = "eXcel Subang Jaya 1";
    newnode->tCentreLocation = "Subang Jaya";
    newnode->subjectCode = 3;
    newnode->subjectName = "Mathematics";
    newnode->rating = 3;
    newnode->hourlyRate = 49;

    newnode->back = tail;
    tail->next = newnode;
    tail = newnode;

    newnode = new tutor;
    newnode->tutorID = 4;
    newnode->tutorName = "Sangeta Mahad";
    newnode->address = "9, Jln 17J, Medan Keramat";
    newnode->phoneNum = "0163457985";
    newnode->dateJoined.day = 05;  newnode->dateJoined.month = 05; newnode->dateJoined.year = 2019;
    newnode->dateTerminate.day = 02; newnode->dateTerminate.month = 11; newnode->dateTerminate.year = 2020;
    newnode->tCentreCode = 3;
    newnode->tCentreName = "eXcel Subang Jaya 2";
    newnode->tCentreLocation = "Subang Jaya";
    newnode->subjectCode = 3;
    newnode->subjectName = "Mathematics";
    newnode->rating = 1;
    newnode->hourlyRate = 40;

    newnode->back = tail;
    tail->next = newnode;
    tail = newnode;

    system("PAUSE");
    system("cls");
}

标签: c++linked-list

解决方案


我建议编写一个tutor * findTutorByName(const std::string &)以导师姓名作为参数的函数,然后遍历链表以查找其tutorName字段与该名称匹配的节点,如果找到这样的节点,则返回指向该节点的指针。如果它没有找到这样的节点,它应该返回 NULL。

一旦你不这样做,剩下的问题就是调用tutor * t = findTutorByName(the_name_i_want),如果t不是 NULL 指针,则在t(例如t->phoneNum = "12345678";)中设置字段

(旁注:发布的代码有四次重复相同的 14 行代码序列。任何时候你注意到多次重复这样的几乎相同的代码,把它当作一个信号,表明有机会编写一个函数来统一它将代码放到一个位置,然后用对该函数的调用替换N个重复代码的实例。从长远来看,这将为您节省很多痛苦,因为您只需修复错误并在一个地方进行更改而不是N个地方)


推荐阅读