Я решил протестировать программу, прежде чем отправлять ее для задания, связанного с базой данных. Я должен создать систему, которая управляет таблицей сотрудников, принимая различные данные и применяя их к базе данных.
Во время разработки я убедился, что каждый вход работал несколько раз. Первоначальное тестирование работало каждый раз при запуске программы. Я смог добавить пользователя с идентификатором 1010 (еще не в системе. Если идентификатор уже присутствовал, то система отбрасывает информацию и информирует пользователя), а затем сделал бессмысленного пользователя, и это сработало.
Я вернулся в программу, чтобы добавить некоторые окончательные правки, такие как правильное отображение выходных данных, лучшее форматирование и т. Д. c и просто общую очистку и комментарии, когда я заметил, что при запуске приложения и попытке использовать те же функции программа показала странное поведение.
- При первом запуске программа обнаружила все введенные мной идентификаторы сотрудников (даже бессмысленные, такие как 99999) как уже существующие. Когда я вышел и вернулся в программу, этот идентификатор был внезапно принят, как будто ничего не произошло
- Когда мне удалось успешно ввести пользователя в базу данных, он сразу же приступил к автозапуску программы (выбор функций сделан через переключатель / регистр).
- После того, как 2. произошло, я попытался перезапустить программу, только для того, чтобы она многократно принимала ввод «name», а затем пропускала все остальные вводы и немедленно выходила из программы. Никакого сообщения об ошибке, ничего
- , когда я пытался отменить все свои изменения, оно продолжало происходить, даже на самой стабильной сборке, которую я сделал за несколько дней go, а затем внезапно повторил это поведение во всем снова.
Я не совсем уверен, что я сделал неправильно, чтобы заставить это сделать это. Это обычное явление в VS?
Для справки мой код указан ниже
Это код для случая 3, тот, который касается записи
case 3:
cout << "Please Enter the employee number of the employee to add" << endl;
cin >> empNum;
failsafe = findEmployee(conn, empNum, emp);
if (failsafe == 1) {
if (emp.empNum == 0) {
cout << "Employee does not exist or is not in our records. Entry can proceed" << endl;
cout << "proceeding with entry" << endl;
cout << "-------------" << endl;
cout << "Enter the employee's Number: ";
cin >> emp.empNum;
cin.ignore();
cout << "Enter the employee's first name: ";
cin >> emp.firstName;
cout << "Last name: ";
cin >> emp.lastName;
cout << "Enter Employee Email: ";
cin >> emp.email;
cout << "Enter Employee's Extension: ";
cin >> emp.extension;
cout << "Enter the employee number of the person this employee reports to: ";
cin >> emp.reportsTo;
cout << "What is this employees' current position? ";
cin >> emp.jobTitle;
cout << "What city is this employee working within? ";
cin >> emp.city;
cout << "Compiling employee data" << endl;
insertEmployee(conn, emp);
}
else {
cout << empNum;
cout << "An employee with the same number exists." << endl;
}
}
else if (failsafe == 0) {
cout << "Judging from the way this program reads data, you shouldn't be able to see this"<<endl; //In case the function for some reason *doesnt* return a 1 like it's been doing every time
}
break;
и вот код, касающийся добавления сотрудника к базе данных
void insertEmployee(MYSQL* conn, struct Employee& emp) {
int queResult;
MYSQL_RES* res;
cout << "This and the below line is just here for testing to see what exactly it's skipping over" << endl;
pause();
if (conn) {
string query = ("INSERT INTO schoolschema.employees(employeeNumber, lastName, firstName, extension, email, officeCode, reportsTo, jobTitle)"
" VALUES (" + std::string(" \' " ) + to_string(emp.empNum) + std::string(" \' ") + " , " + " \' " + emp.lastName + " \' " + " , " + " \' " + emp.firstName + " \' " + " , " + std::string(" \' ") + emp.extension + " \' " + " , " + " \' " + emp.email + " \' " + " , " + to_string(1) + " , " + std::string(" \' ") + emp.reportsTo + " \' "+ " , " + " \' " + emp.jobTitle + " \' " + ");");
const char* q = query.c_str();
queResult = mysql_query(conn, q);
if (!queResult) {
cout << "Employee successfully added, check to verify by checking the number of the employee from the main menu, or using your DBMS application" << endl;
return;
}
else {
cout << "Error occurred: " << mysql_errno(conn) << " " << mysql_error(conn) << endl;
}
}
}
и да, я в курсе всего
+ "\ '" +
вещь довольно уродливая, но это было Обходной путь для другой проблемы, которую я имел.
Я могу опубликовать дополнительные фрагменты кода, если кто-то думает, что ошибка может быть ie в другом месте.
Как добавленное примечание, я не верю, что проблема заключается в "найти сотрудника", потому что эта функция, кажется, возвращает информацию правильно, просто компилятор, кажется, выбирает и выбирает, правильны ли эти данные или нет , (ниже вы можете видеть, что я могу удалить пользователя 1010, но я не могу добавить его обратно)
произошла ошибка
********************* HR Menu *********************
1) Find Employee
2) Employees Report
3) Add Employee
4) Update Employee
5) Remove Employee
0) Exit
5
Enter employee number to delete: 1010
Employee found, deleting
Employee successfully deleted
********************* HR Menu *********************
1) Find Employee
2) Employees Report
3) Add Employee
4) Update Employee
5) Remove Employee
0) Exit
3
Please enter number to add
1010
employee does not exist, proceeding with entry
Enter Employee number: 1010
Last name: Enter Employee Email: Enter Employee's Extension: Enter the employee number of the person this employee reports to: What is this employees' current position? What city is this employee working within? Compiling employee data
Press enter to continue...
Редактировать: добавлено примечание: после появляется вышеупомянутая ошибка (вещь, которая говорит, нажмите ввод, чтобы продолжить), она отображает ошибку sql в течение бита, прежде чем немедленно предположить, что пользователь ввел «0» и выходит