我似乎无法弄清楚为什么我的IF语句被跳过了。使用SQL和C ++。 该程序跳过我的前两个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; }
}
答案 0 :(得分:1)
代码允许单个SSN分配多个UMN,但第一个if
语句没有考虑到这一点。它正在检查仅分配了1个UMN的SSN。如果指定的SSN分配了多个UMN,则SELECT
将返回count > 1
,并且流将跳转到您的else
阻止。
此外,您的第二个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;
}
}