Professional Professional
Мудрец
(14332)
3 месяца назад
Для решения этого задания можно использовать библиотеку SQLite, которая предоставляет возможность работы с базами данных SQL прямо в C++. Вот пример программы, которая выполняет все необходимые операции:
```cpp
#include <sqlite3.h>
#include <iostream>
#include <string>
void showAll(sqlite3* db) {
const char* sql = "SELECT * FROM students;";
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, 0) == SQLITE_OK) {
while (sqlite3_step(stmt) == SQLITE_ROW) {
std::cout << sqlite3_column_text(stmt, 0) << " "
<< sqlite3_column_text(stmt, 1) << " "
<< sqlite3_column_text(stmt, 2) << " "
<< sqlite3_column_text(stmt, 3) << std::endl;
}
}
sqlite3_finalize(stmt);
}
void findByName(sqlite3* db, const std::string& name) {
const char* sql = "SELECT * FROM students WHERE name = ?;";
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, 0) == SQLITE_OK) {
sqlite3_bind_text(stmt, 1, name.c_str(), -1, SQLITE_STATIC);
if (sqlite3_step(stmt) == SQLITE_ROW) {
std::cout << sqlite3_column_text(stmt, 0) << " "
<< sqlite3_column_text(stmt, 1) << " "
<< sqlite3_column_text(stmt, 2) << " "
<< sqlite3_column_text(stmt, 3) << std::endl;
} else {
std::cout << "No student found with the name " << name << std::endl;
}
}
sqlite3_finalize(stmt);
}
int main() {
sqlite3* db;
if (sqlite3_open(":memory:", &db) != SQLITE_OK) {
std::cout << "Can't open database: " << sqlite3_errmsg(db) << std::endl;
return -1;
}
const char* sql = "CREATE TABLE students (name TEXT, age INTEGER, class TEXT, grade REAL);";
if (sqlite3_exec(db, sql, 0, 0, 0) != SQLITE_OK) {
std::cout << "SQL error: " << sqlite3_errmsg(db) << std::endl;
return -1;
}
// TODO: Insert some students
showAll(db);
findByName(db, "John");
sqlite3_close(db);
return 0;
}
```
Прежде чем протестировать эту программу, вам нужно добавить в базу данных некоторых студентов с помощью оператора SQL INSERT INTO.
Также обратите внимание, что этот код открывает базу данных в памяти (`:memory:`), а не в файле на диске, поэтому все ваши данные будут потеряны после завершения программы. Если вы хотите сохранить данные на диске, вы должны заменить `:memory:` на имя файла базы данных.
Для удаления записи о студенте можно добавить новую функцию, использующую оператор SQL DELETE.
Создайте простую таблицу в базе данных, например, для хранения информации о студентах с полями, такими как имя, возраст, класс и оценки. Можете взять похожую таблицу из предыдущих домашних заданий.
Используя язык программирования С++, напишите программу, которая будет взаимодействовать с базой данных. Задание можно делать как в консоли, так и в оконном приложении. Программа должна предоставлять следующий функционал:
Вывод списка всех студентов, находящихся в базе данных.
Вывод информации о конкретном студенте по его имени.
Протестируйте программу, добавляя записи о студентах в базу данных, выводя список студентов и обновляя информацию о них.
Проверьте работу программы на наличие ошибок и обработайте их, если они возникнут (например, отсутствие соединения с базой данных или некорректные данные).
Дополнительное задание (для более продвинутых): Реализуйте функционал удаления записей о студентах из базы данных.