C++ 在int main中使用for循环测试类

C++ 在int main中使用for循环测试类,c++,C++,主要来说,我必须测试我用for循环制作的类,但是有点卡住了。我必须循环3次,并获取票务系统的用户输入。我试着制作一个数组并存储用户输入,但到目前为止我所做的任何尝试都不起作用。我试图用我的循环调用SetWorkTicket #include<iostream> #include<iomanip> #include<stdexcept> #include<sstream> using namespace s

主要来说,我必须测试我用for循环制作的类,但是有点卡住了。我必须循环3次,并获取票务系统的用户输入。我试着制作一个数组并存储用户输入,但到目前为止我所做的任何尝试都不起作用。我试图用我的循环调用SetWorkTicket

    #include<iostream>
    #include<iomanip>
    #include<stdexcept>
    #include<sstream>


    using namespace std;

    // start of the WorkTicket class 
    class WorkTicket{

        public:

        // defailt constructors, if the parameters are not specified the ticket will be set to 0 and the date to 1/1/2000. The rest empty strings 

        WorkTicket() : myTicketNumber(0), myClientId(""), myDay (1), myMonth (1), myYear(2000), myDescription ("") { }
        WorkTicket(int ticketNumber, string clientId, int month, int day, int year, string description);

        // mutator method that sets all attributes of the object to the parameters as long as valid. If no problems are being detected set TRUE if not then FALSE.....
        bool SetWorkTicket(int ticketNumber, string clientId, int month, int day, int year, string description);

        //  accessor method that will show all the attributes of the ticket in the console menu
        void ShowWorkTicket() const; 

        // here are the sets and gets for the attributes 

        // ticket number 

        void SetTicketNumber(int ticketNumber);
        int GetTicketNumber() const {return myTicketNumber;}

        // client id 

        void SetClientId(string clientId) {myClientId = clientId;}
        string GetClientId() const { return myClientId;}

        // date by day 

        void SetDay(int day);
        int GetDay() const { return myDay; }

        // date by month

        void SetMonth(int month);
        int GetMonth() const { return myMonth; } 

        // date by year 

        void SetYear(int year);
        int GetYear() const { return myYear; }

        // description 

        void SetDescription(string description) { myDescription = description; }  
        string GetDescription() const { return myDescription; }


        private: 

        int myTicketNumber; 
        string myClientId; 
        int myDay; 
        int myMonth;
        int myYear; 
        string myDescription; 

    };



    // the work ticket constructor definition 
    WorkTicket::WorkTicket(int ticketNumber, string clientId, int month, int day, int year, string description)
    {

        SetTicketNumber(ticketNumber);
        SetClientId(clientId);
        SetMonth(month);
        SetDay(day);
        SetYear(year);
        SetDescription(description);
    }

    // set work ticket 
    bool WorkTicket::SetWorkTicket(int ticketNumber, string clientId, int month, int day, int year, string description)
    {
         const int MAX_DAY = 31; // setting max day to 31
         const int MAX_MONTH = 12; // max month to 12 
         const int MIN_YEAR = 2000; // the min year 2000 as specified 
         const int MAX_YEAR = 2099; // max year 2099 as speciified 
         bool valid = true; 
        //  setting the limits 
         if(ticketNumber < 0 || month < 1 || month > MAX_MONTH ||
            day < 1 || day > MAX_DAY ||
            year < MIN_YEAR || year > MAX_YEAR)
            valid = false;

         else if (clientId.length() < 1 || description.length() < 1)
            valid = false;
         else 
         {    
            myTicketNumber = ticketNumber;
            myClientId = clientId;
            myDay = day;
            myMonth = month;
            myYear = year;
            myDescription = description;
         }

         return valid;
    }

    // this is to show the work ticket, it will show everything in the console..
    void WorkTicket::ShowWorkTicket() const
    {
         cout << "\nWork Ticket Number: " << myTicketNumber
              << "\nClient ID:     " << myClientId
              << "\nDate:   " << setw(2) << setfill('0') << myMonth
              << "/" << setw(2) << setfill('0') << myDay
              << "/" << myYear
              << "\nIssue:         " << myDescription << endl;
    }

    void WorkTicket::SetTicketNumber(int ticketNumber)
    {
            if(ticketNumber > 0)
            {
                myTicketNumber = ticketNumber;
            }
            else
            {
                throw invalid_argument("Try Again.");
            }
    }

    // WorkTicket::SetDay definition
    void WorkTicket::SetDay(int day)
    {
            const int MIN_VALID = 1;
            const int MAX_VALID = 31;
            if(day >= MIN_VALID && day <= MAX_VALID)
            {
                myDay = day;
            }
            else
            {
                throw invalid_argument("Try Again.");
            }
    }

    // WorkTicket::SetMonth definition
    void WorkTicket::SetMonth(int month)
    {
            const int MIN_VALID = 1;
            const int MAX_VALID = 12;
            if(month >= MIN_VALID && month <= MAX_VALID)
            {
                myMonth = month;
            }
            else
            {
                throw invalid_argument("Try Again.");
            }
    }

    // WorkTicket::SetYear definition
    void WorkTicket::SetYear(int year)
    {
            const int MIN_VALID = 2000;
            const int MAX_VALID = 2099;
            if(year >= MIN_VALID && year <= MAX_VALID)
            {
                myYear = year;
            }
            else
            {
                throw invalid_argument("Try Again.");
            }
    }

    int main()
    {   
        const int NUMBER_OF_TICKETS = 3;  
        WorkTicket tickets[NUMBER_OF_TICKETS]; 

        int ticketNumber;
        string clientId; 
        int day;
        int month;
        int year; 
        string description; 

        for (int i = 0; i <NUMBER_OF_TICKETS; i++)  
        {
            cout << "\WorkTicket [" << i << "]: " << endl; 

            cout << "Enter the ticket number: " << endl; 
            cout << "Enter the client ID: " << endl; 
            getline(cin, clientId);
            day = SetDay("Enter a day number: ");  

        }
    }
#包括
#包括
#包括
#包括
使用名称空间std;
//工作票类的开始
班级工作票{
公众:
//定义构造函数,如果未指定参数,则票证将设置为0,日期设置为1/1/2000。其余为空字符串
工作票证():myTicketNumber(0),myClientId(“”),myDay(1),myMonth(1),myYear(2000),myDescription(“”{}
工作票(int ticketNumber、字符串clientId、int month、int day、int year、字符串描述);
//将对象的所有属性设置为参数的mutator方法,只要该方法有效。如果未检测到任何问题,则将其设置为TRUE,否则设置为FALSE。。。。。
bool SetWorkTicket(int ticketNumber,string clientId,int month,int day,int year,string description);
//访问器方法,该方法将在控制台菜单中显示票据的所有属性
作废ShowWorkTicket()常量;
//以下是属性的集合和获取
//车票号码
无效设置票号(int票号);
int GetTicketNumber()常量{return myTicketNumber;}
//客户端id
void SetClientId(字符串clientId){myClientId=clientId;}
字符串GetClientId()常量{return myClientId;}
//逐日
无效设定日(整数日);
int GetDay()常量{return myDay;}
//逐月日期
无效设置月(整数月);
int GetMonth()常量{return myMonth;}
//年复一年
无效设置年份(整数年);
int GetYear()常量{return myYear;}
//描述
void SetDescription(字符串描述){myDescription=description;}
字符串GetDescription()常量{return myDescription;}
私人:
int myTicketNumber;
字符串myClientId;
int myDay;
int myMonth;
国际年;
字符串myDescription;
};
//工作通知单构造函数定义
工作票::工作票(int-ticketNumber、字符串clientId、int-month、int-day、int-year、字符串描述)
{
设置ticketNumber(ticketNumber);
SetClientId(clientId);
设定月(月);
设定日(天);;
设定年份(年);
设置描述(描述);
}
//工作票
bool WorkTicket::SetWorkTicket(int-ticketNumber、字符串clientId、int-month、int-day、int-year、字符串描述)
{
const int MAX_DAY=31;//将MAX DAY设置为31
const int MAX_MONTH=12;//最大月份到12
const int MIN_YEAR=2000;//指定的最小年份2000
const int MAX_YEAR=2099;//指定的最大年份2099
bool valid=true;
//设定限制
如果(票号<0 | | |月<1 | |月>最长|月||
日<1 | |日>最长日||
年份<最小年|年>最大年)
有效=错误;
else if(clientId.length()<1 | | description.length()<1)
有效=错误;
其他的
{    
myTicketNumber=ticketNumber;
myClientId=clientId;
myDay=天;
myMonth=月份;
myYear=年;
myDescription=描述;
}
返回有效;
}
//这是为了显示工作票,它将显示控制台中的所有内容。。
作废工作票::ShowWorkTicket()常量
{

cout假设您的其余代码正常工作,并且您只在主要方面存在问题:

正如其他人在main中的代码中所评论的那样,存在一些问题:

1) 您声明了
工作票票证[票证数量];
但没有在任何地方使用它

2) 变量
tickets
是一个数组,因此for循环
tickets[i]
的类型为
WorkTicket

3)
SetDay
WorkTicket
的成员函数,并将
int
作为参数

有鉴于此,做出了以下更改:

for (int i = 0; i <NUMBER_OF_TICKETS; i++)  
{
    cout << "\WorkTicket [" << i << "]: " << endl; 

    cout << "Enter the ticket number: " << endl; 
    cout << "Enter the client ID: " << endl; 
    getline(cin, clientId);
    cout<<"Enter a day number:";
    int day;
    cin>>day;
    tickets[i].SetDay(day);  //day is int and tickets[i] is of WorkTicket

}

for(int i=0;i收集输入,然后构造一个工作票证。将票证推到一个向量中。在尚未编写的代码中,可以测试新创建的工作票证的正确性

确保在文件顶部包含vector

int main()
{   
    const int NUMBER_OF_TICKETS = 3;  

    int ticketNumber;
    string clientId; 
    int day;
    int month;
    int year; 
    string description; 
    std::vector<WorkTicket> tickets;

    for (int i = 0; i <NUMBER_OF_TICKETS; i++)  
    {
        cout << "WorkTicket [" << i << "]: " << endl; 

        cout << "Enter the ticket number: " << endl; 
        cin>> ticketNumber;
        cout << "Enter the client ID: " << endl; 
        cin >> clientId;
        cout << "Enter a day number: " << endl; 
        cin >>  day;
        cout << "Enter a month number: " << endl; 
        cin>> month;
        cout << "Enter a year number: " << endl; 
        cin>> year;
        cout << "Enter a description : " << endl; 
        cin >> description;
        try {
           tickets.push_back({ticketNumber, clientId, month, day, year, description});
        } 
        catch(std::exception e)
        {
           std::cout << e.what() << std::endl;
        }
    }
}
intmain()
{   
const int票证数量=3;
国际票号;
字符串clientId;
国际日;
整月;
国际年;
字符串描述;
std::向量票据;

对于(int i=0;i您的问题似乎有很多代码未被揭示。请尝试创建一个并发布它。为什么当您的
SetDay
函数接受整数时会传递一个字符串?在声明后,您在
main
中的
WorkTicket
数组在哪里使用?您必须实际使用数组
在某个时候,但你没有用它做任何事情。一点解释会很有帮助,否则一个正在形成中。