我试图输入时程序停止工作

时间:2018-05-01 08:24:55

标签: c++ class input

我正在研究一个项目,在课堂上创建一个链表,但我甚至无法开始研究它,因为每次运行该程序时它都会在我想要的时候停止工作输入数据。

有人可以告诉我如何使用类正确输入数据吗?如果可能的话请告诉我如何改进这个计划。我所做的代码很长。

我会尽量简短,让你们明白。很多人建议我使用std::string,但我们的讲师从未提及过它,所以我们不知道如何使用它。

如果我必须使用它,这意味着我必须从头开始学习它,这意味着我需要时间来真正理解它。

我们还需要有一个功能,我们可以更新存储的数据,根据其中一个数据搜索数据并为其做一个摘要。

#include <iostream>
#include <stdlib.h>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>
#include <string>
using namespace std;
//CLASS USED IN PROGRAM
class carInsurance
{
    private:
        int total;
        int customerNo;
        string name;
        string iCno;
        char dob[10];
        string nationality;
        string address;
        char phoneNo[15];
        string email;
        string occupation;

        char carNo[10];
        char expireDate[11];
        float insuranceAmount;
        char carUsage[30];
        char manufacturingDate[11];

        int package;
        int option;
        int additional;
        int noCustomer[10];

    public:
        void add();
        void presetdata();
        static void deleteFunc(carInsurance noCustomer[]);
        static void viewAll(carInsurance noCustomer[]);


    //constructor name has to be the same as class
    carInsurance(int carInsurance_total,
                int carInsurance_customerNo,
                string carInsurance_name,
                string carInsurance_iCno,
                char carInsurance_dob[10],
                string carInsurance_nationality,
                string carInsurance_address,
                char carInsurance_phoneNo[15],
                string carInsurance_email,
                string carInsurance_occupation,

                char carInsurance_carNo[10],
                char carInsurance_expireDate[11],
                float carInsurance_insuranceAmount,
                char carInsurance_carUsage[30],
                char carInsurance_manufacturingDate[11],

                int carInsurance_package,
                int carInsurance_option,
                int carInsurance_additional)
    {
        total = carInsurance_total;
        customerNo = carInsurance_customerNo;
        name = carInsurance_name;
        iCno = carInsurance_iCno;
        dob[10] = carInsurance_dob[10];
        nationality = carInsurance_nationality;
        address = carInsurance_address;
        phoneNo[15] = carInsurance_phoneNo[15];
        email = carInsurance_email;
        occupation = carInsurance_occupation;
        carNo[10] = carInsurance_carNo[10];
        expireDate[11] = carInsurance_expireDate[11];
        insuranceAmount = carInsurance_insuranceAmount;
        carUsage[30] = carInsurance_carUsage[30];
        manufacturingDate[11] = carInsurance_manufacturingDate[11];
        package = carInsurance_package;
        option = carInsurance_option;
        additional = carInsurance_additional;
    } // end of constructor

    carInsurance()
    { // Set all variables to null

        total = 0;
        customerNo = 0;
        name = " ";
        iCno = " ";
        dob[10] = '\0';
        nationality = " ";
        address = " ";
        phoneNo[15] = '\0';
        email = " ";
        occupation = " ";
        carNo[10] = '\0';
        expireDate[11] = '\0';
        insuranceAmount = 0;
        carUsage[30] = '\0';
        manufacturingDate[11] = '\0';

        package = 0;
        option = 0;
        additional = 0;
    }

    // SET
    void setChar(char carInsurance_dob[10],
                char carInsurance_phoneNo[15],
                char carInsurance_carNo[10],
                char carInsurance_expireDate[10],
                char carInsurance_carUsage[30],
                char carInsurance_manufacturingDate[10])
    {dob[10] = carInsurance_dob[10];
     phoneNo[15] = carInsurance_phoneNo[15];
     carNo[10] = carInsurance_carNo[10];
     expireDate[11] = carInsurance_expireDate[11];
     carUsage[30] = carInsurance_carUsage[30];
     manufacturingDate[11] = carInsurance_manufacturingDate[11];}

    void setname(string carInsurance_name){name = carInsurance_name;}
    void setiCno(string carInsurance_iCno){iCno = carInsurance_iCno;}
    void setAddress(string carInsurance_address){address = carInsurance_address;}
    void setString(string carInsurance_nationality, string carInsurance_email,string carInsurance_occupation)
    {nationality = carInsurance_nationality; email = carInsurance_email; occupation = carInsurance_occupation;}
    void setInt(int carInsurance_total, int carInsurance_customerNo, int carInsurance_package, int carInsurance_option, int carInsurance_additional)
        {customerNo = carInsurance_customerNo; package = carInsurance_package; option = carInsurance_option; additional = carInsurance_additional;}
    void setFloat (float carInsurance_insuranceAmount){insuranceAmount = carInsurance_insuranceAmount;}

    // GET
    string getname(){return name;}
    string getiCno(){return iCno;}
    string getaddress(){return address;}
    string getString(){return nationality; return email; return occupation;}
    int getInt(){return total; return customerNo; return package; return option; return additional;}
    float getFloat(){return insuranceAmount;}
}; //end class

这是我的主要内容:

//function declaration
//to prevent overload run function outside
void add();


//THE MAIN FUNCTION OF PROGRAM
int main()
{
    carInsurance obj; // obj is class object
    carInsurance *noCustomer[10];
    int choice;


    while(choice != 4)
    {
        cout << "1. ADD, UPDATE, DELETE\n" << "2. SEARCH\n" << "3. VIEW ALL\n" << "4. SUMMARY REPORT\n" << "5. EXIT\n" << endl;
        cout << "Enter your choice: ";
        cin >> choice;
        system("cls");

        switch(choice)
        {
            case 1:
            {
                cout << "___________________________________\n";
                cout << "\n\tADD/UPDATE/DELETE\n";
                cout << "___________________________________\n";

                cout << "\n1. ADD\n2. UPDATE\n3. DELETE\n" << endl;
                cin >> choice;
                system("cls");

                switch(choice)
                {
                    case 1:
                    {
                        int i;
                        int total = 0;
                        cout << "How many customer? ";
                        cin >> total;
                        for(i=0; i<total; ++i)
                        {
                            cout << "________________________________\n";
                            cout << "\n\tCUSTOMER NO. " << 1 + i;
                            cout << "\n________________________________\n";
                            noCustomer[i]->add();  // this is function call to input

                        }
                        break;
                    }

                    case 2:
                    {
                        int paymentID;
                        //cout << "UPDATE" << endl;
                        cout << "\nEnter the customer ID that you want to update:";
                        cin >> paymentID;
                        // function here
                        break;
                    }

                    case 3:
                    {
                        int paymentID;
                        //cout << "DELETE" << endl;
                        cout << "\nEnter the customer ID that you want to delete:";
                        cin >> paymentID;
                        noCustomer[10]->deleteFunc(noCustomer[10]);

                        break;
                    }

                } // End of switch case for add,update,delete
                system("cls");
                break;
            } // End of case 1

            case 2:
            {
                cout << "___________________________\n";
                cout << "\n\t  SEARCH\n";
                cout << "___________________________\n";

                system("pause");
                system("cls");

                break;
            }

            case 3:
            {   cout << "___________________________\n";
                cout << "\n\tVIEW ALL\n";
                cout << "___________________________\n";
                obj.presetdata();
                noCustomer[10]->viewAll(noCustomer[10]);
                cout<<"\n";
                system("pause");
                system("cls");
                break;
            }

            case 4:
            {
                cout << "___________________________\n";
                cout << "\n\tSUMMARY REPORT\n";
                cout << "___________________________\n\n";
                cout << "1. Sorted by different month\n2. Sorted by different car type\n3. Sorted by different insurance" << endl;
                cin >> choice;

                switch(choice)
                {
                    case 1:
                    {
                        break;
                    }

                    case 2:
                    {
                        break;
                    }

                    case 3:
                    {
                        break;
                    }

                    default:
                        cout << "Wrong input! Please choose again: ";
                        cin >> choice;
                        system("pause");
                }

                break;
            }

            case 5:{
                cout << "___________________________\n";
                cout << "\n\tTHANK YOU!\t\n";
                cout << "___________________________";
                exit(0); }

            default:
                continue;
        }// End of switch case

    }// End of while

    return 0; //indicates success
}//End of main

1 个答案:

答案 0 :(得分:3)

我在内部switch语句中看到一个问题:

case 1:
{
    int i;
    int total = 0;
    cout << "How many customer? ";
    cin >> total;
    for(i=0; i<total; ++i)
    {
        cout << "________________________________\n";
        cout << "\n\tCUSTOMER NO. " << 1 + i;
        cout << "\n________________________________\n";
        noCustomer[i]->add();  // this is function call to input
        break;
    }
}

case 2:

break运算符会中断循环,但不会阻止执行case 2:分支。

还有一个问题:重新分配choice。用户可以在任何意外中断while (choice != 4)的输入请求中输入4。您可以使用break来避免麻烦,并通过使用函数重新分配。

有很多不受数组边界访问的索引等于数组大小。

目前尚不清楚你想要在dob[10] = carInsurance_dob[10];中找到什么它会复制第11个字符。也许你想要复制整个char数组。使用std::string获取无错代码。