C ++:Switch语句实现

时间:2013-09-27 19:58:27

标签: c++ function class switch-statement

我正在尝试在程序的主要部分使用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;
}

我无法弄清楚我在哪里出错了。这是我在其中调用的大部分上述函数的代码......

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_;
};

2 个答案:

答案 0 :(得分:3)

您的问题是您正在调用类的成员(函数),并且您没有该类的对象。

更改您的代码:

main()
int userOption;

EmployeeHandler e;
// ....

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

答案 1 :(得分:2)

似乎有很多错误,但也许它们只是错别字(当然你应该你的错误是什么,'它不起作用'永远不够好)。但是有一个错误就是这个

int userOption;
while (userOption!=0)
{

    ...

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

看到问题?您的while循环在给出值之前测试userOption的值。

简单的解决方法是将while循环更改为do ... while循环。

int userOption;
do
{
    ...

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