简体   繁体   English

C ++:Switch语句实现

[英]C++: Switch Statement Implementation

I'm attempting to use a switch statement in the main part of my program, here is what I have... 我正在尝试在程序的主要部分中使用switch语句,这就是我所拥有的...

main()
int userOption;
while (userOption=!0)
{


cout<<"BUSINESS MANAGEMENT system <16102868>"<<endl;
cout<<"-------------------------------------"<<endl;
cout<<"EMPLOYEE OPTIONS"<<endl;
cout<<"1. Add Employee"<<endl;
cout<<"2. Edit Employee"<<endl;
cout<<"3. Layoff Employee"<<endl;
cout<<"4. View Employee List"<<endl;
cout<<"----------------------------------"<<endl;
cout<<"SCHEDULING OPTIONS"<<endl;
cout<<"5. Update Schedule"<<endl;
cout<<"6. Cancel Schedule"<<endl;
cout<<"7. View Schedule"<<endl;
cout<<"8. Export Schedule to CSV"<<endl;
cout<<"9. Export Schedule to HTML"<<endl;
cout<<"---------------------------------"<<endl;
cout<<"0. Quit"<<endl;
cout<<"----------------------------------"<<endl;
cout<<"Please enter an option:"
cin>>userOption
switch (userOption)
{
case 1:
    AddEmployee()
        break;
case 2:
    EditEmployee()
        break;
case 3:
    LayoffEmployee()
        break;
case 4:
    DisplayEmployeeList()
        break;
case 5:
    AddSchedule()
        break;
case 6:
    CancelSchedule()
        break;
case 7:
    DisplaySchedule()
        break;
case 8:
    ExportScheduleCSV()
        break;
case 9:
    ExportScheduleHTML()
        break;
default:
    cout<<"Enter a number between 1 and 9:"<<endl;
}

I can't quite figure out where I'm going wrong here. 我无法弄清楚这里我要去哪里。 Here's the code that has most of the above functions that I'm calling in it... 这是上面调用的具有上述大多数功能的代码...

class EmployeeHandler
{
  public:
    void AddEmployee()
    {
      std::string firstName;
      std::string lastName;
      float payRate;

      std::cout<<"NEW EMPLOYEE"<<std::endl;
      std::cout<<"First Name:"<<std::endl;
      std::cin>>firstName;
      std::cout<<"Last Name:"<<std::endl;
      std::cin>>lastName;
      std::cout<<"Pay Rate:"<<std::endl;
      std::cin>>payRate;
      employees_.push_back( Employee( firstName,lastName,payRate ) );
      std::cout<<"**Employee m_employeeCount added"<<std::endl;
    }

    void EditEmployee()
    {
      std::string newFirst;
      std::string newLast;
      float newPay;
      std::cout<<"Which employee would you like to edit"<<std::endl;
      int indexEdit = GetSelection();
      Employee& employee = employees_[indexEdit];
      std::cout << employee << std::endl;
      std::cout<<"Employee new first name:"<<std::endl;
      std::cin>>newFirst;
      std::cout<<"Employee new last name:"<<std::endl;
      std::cin>>newLast;
      std::cout<<"Employee new pay rate:"<<std::endl;
      std::cin>>newPay;
      employee = Employee( newFirst, newLast, newPay );
      std::cout<<"** Employee index updated"<<std::endl;
    }

    void LayoffEmployee()
    {
      int index = GetSelection();
      if( employees_[index].GetIsActive() )
      {
        std::cout << "Laying off employee:\n" << employees_[index] << std::endl;
        employees_[index].LayOff();
      }
      else
      {
        std::cerr << "Already layed off employee:" << employees_[index] << std::endl;
      }
    }

    void DisplayEmployeeList()
    {
      std::copy( employees_.begin(), employees_.end(), std::ostream_iterator<Employee>( std::cout, "\n" ) );
    }

    int GetSelection()
    {
        std::size_t indexNumber;
        std::cout << "Select an employee from the list below by specifying its number:" << std::endl;
        DisplayEmployeeList();

        do{
          while( !std::cin >> indexNumber )
          {
            std::cerr << "Select a number..." << std::endl;
          }
          if( indexNumber >= employees_.size() )
          {
            std::cerr << "Select a number within range of list below:" << std::endl;
            DisplayEmployeeList();
          }
        }
        while( indexNumber >= employees_.size() );
        return indexNumber;
    }

    Employee& operator[]( std::size_t index )
    {
      return employees_[index];
    }

    const Employee& operator[]( std::size_t index ) const
    {
      return employees_[index];
    }

    std::size_t EmployeeCount() const
    {
      return employees_.size();
    }

  private:
    std::vector<Employee> employees_;
};

Your problem is that you are calling members (functions) of a class, and you do not have an object of that class. 您的问题是您正在调用一个类的成员(函数),而没有该类的对象。

Change your code like this: 像这样更改代码:

main()
int userOption;

EmployeeHandler e;
// ....

switch (userOption)
{
case 1:
    e.AddEmployee();
    break;
 //...

There seem to be a lots of errors but maybe they are just typos (of course you should say what your error is, 'it doesn't work' is never good enough). 似乎有很多错误,但也许只是错别字(当然,您应该说出自己的错误是什么,“它不起作用”永远不够好)。 But one error is this 但是一个错误是

int userOption;
while (userOption!=0)
{

    ...

    cout<<"Please enter an option:";
    cin>>userOption;
    switch (userOption)
    {

See the problem? 看到问题了吗? Your while loop tests the value of userOption before you have given in a value. 在您输入值之前,您的while循环会测试userOption的值。

Simple fix is to change your while loop into a do ... while loop. 简单的解决方法是将while循环更改为do ... while循环。

int userOption;
do
{
    ...

    cout<<"Please enter an option:";
    cin>>userOption;
    switch (userOption)
    {
        ...
    }
}
while (userOption != 0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM