Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

ДЗ ПО С++ СРОЧНО

Avet karapetyan Ученик (81), на голосовании 9 месяцев назад
Домашнее задание 8

Создайте простую таблицу в базе данных, например, для хранения информации о студентах с полями, такими как имя, возраст, класс и оценки. Можете взять похожую таблицу из предыдущих домашних заданий.

Используя язык программирования С++, напишите программу, которая будет взаимодействовать с базой данных. Задание можно делать как в консоли, так и в оконном приложении. Программа должна предоставлять следующий функционал:

Вывод списка всех студентов, находящихся в базе данных.
Вывод информации о конкретном студенте по его имени.
Протестируйте программу, добавляя записи о студентах в базу данных, выводя список студентов и обновляя информацию о них.

Проверьте работу программы на наличие ошибок и обработайте их, если они возникнут (например, отсутствие соединения с базой данных или некорректные данные).

Дополнительное задание (для более продвинутых): Реализуйте функционал удаления записей о студентах из базы данных.
Голосование за лучший ответ
Professional Professional Мудрец (15209) 10 месяцев назад
Для решения этого задания можно использовать библиотеку 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.
Похожие вопросы