0

IF ステートメントがスキップされる理由がわかりません。C++ で SQL を使用する。プログラムは最初の 2 つの IF ステートメントをスキップして、else ブランチにジャンプします。なぜこれがこれを行っているのかまったくわかりません。これは私のコーディングです。

void add_technician() {
EXEC SQL BEGIN DECLARE SECTION;
    char sn[10];
    int s = 0;
    char answer;
    int umn;
    char tname[30];
    char tadd[30];
    char tpho[10];
    char tmod[15];
EXEC SQL END DECLARE SECTION;

cout << "Enter social security number:";
cin >> sn;  

EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn;

          if (s == 1)
   { 
cout << "Employee already exists in the database."; 
   cout <<"Would you like to update the union-membership-number?";
   cin >> answer;
   if (answer == 'y'|| 'Y')
   {cout <<"Enter new union member number:";
   cin >> umn;
EXEC SQL 
    INSERT INTO Employee (ssn, union_member_no)
    VALUES (:sn, :umn);
 } 
   }
         else {
 cout << "Enter in union membership number of the new employee: ";
            cin >> umn;
            EXEC SQL INSERT INTO Employees (ssn, union_member_no) 
                   VALUES (:sn, :umn);
            EXEC SQL COMMIT WORK;
             cout << "Enter the address of the technician.";
             cin >> tadd;
 cout << "Enter the name technician name.";
             cin >> tname;

            EXEC SQL INSERT INTO Technicians (address, name , phone)
       VALUES (:tadd, :tname, :tpho);
EXEC SQL COMMIT WORK;
            cout << "Enter airplane model number that you are an expert on." ;
            cin >> tmod;
EXEC SQL INSERT INTO Experts (model_no, ssn)
    VALUES (:tmod);
EXEC SQL COMMIT WORK; }                

}
4

1 に答える 1

1

このコードでは、1 つの SSN に複数の UMN を割り当てることができますが、最初のifステートメントではそれが考慮されていません。UMN が 1 つしか割り当てられていない SSN をチェックしています。特定の SSN に複数の UMN が割り当てられている場合、SELECTが戻りcount > 1、フローがブロックにジャンプしますelse

また、2 番目のifステートメントの形式が正しくありません。if (answer == 'y'|| 'Y')は常に に評価されtrueます。answer次のように、条件の各セットで変数を指定する必要がありますif ((answer == 'y') || (answer == 'Y'))

これを試して:

void add_technician()
{
    EXEC SQL BEGIN DECLARE SECTION;
        char sn[10];
        int s = 0;
        char answer;
        int umn;
        char tname[30];
        char tadd[30];
        char tpho[10];
        char tmod[15];
    EXEC SQL END DECLARE SECTION;

    cout << "Enter social security number:";
    cin >> sn;

    EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn;

    if (s > 0)
    {
       cout << "Employee already exists in the database.";
       cout << "Would you like to add a new union membership number?";
       cin >> answer;
       if ((answer == 'y') || (answer == 'Y'))
       {
           cout << "Enter new union member number:";
           cin >> umn;
           EXEC SQL INSERT INTO Employee (ssn, union_member_no)  VALUES (:sn, :umn);
       }
    }
    else
    {
        cout << "Enter union membership number of the new employee: ";
        cin >> umn;
        EXEC SQL INSERT INTO Employees (ssn, union_member_no) VALUES (:sn, :umn);
        EXEC SQL COMMIT WORK;

        cout << "Enter the address of the technician.";
        cin >> tadd;
        cout << "Enter the name of the technician.";
        cin >> tname;
        EXEC SQL INSERT INTO Technicians (address, name , phone) VALUES (:tadd, :tname, :tpho);
        EXEC SQL COMMIT WORK;

        cout << "Enter airplane model number that the technician is an expert on." ;
        cin >> tmod;
        EXEC SQL INSERT INTO Experts (model_no, ssn) VALUES (:tmod);
        EXEC SQL COMMIT WORK;
    }
}
于 2012-04-18T21:47:12.033 に答える