用c++写一个简单的完整数据库
时间: 2024-05-13 13:15:43 浏览: 11
要实现一个完整的数据库需要考虑很多方面,包括数据结构、算法、存储和管理等等。以下是一个简单的C++数据库示例,只包含基本的增删改查操作,可能不够完整和健壮,但可以作为初学者的参考。
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct Record {
int id;
string name;
int age;
};
class Database {
public:
Database(const string& filename);
~Database();
void add_record(const Record& record);
void delete_record(int id);
void update_record(int id, const Record& record);
Record search_record(int id);
private:
string filename_;
vector<Record> records_;
void load();
void save();
};
Database::Database(const string& filename) : filename_(filename) {
load();
}
Database::~Database() {
save();
}
void Database::add_record(const Record& record) {
records_.push_back(record);
}
void Database::delete_record(int id) {
auto it = find_if(records_.begin(), records_.end(), [id](const Record& record) {
return record.id == id;
});
if (it != records_.end()) {
records_.erase(it);
}
}
void Database::update_record(int id, const Record& record) {
auto it = find_if(records_.begin(), records_.end(), [id](const Record& r) {
return r.id == id;
});
if (it != records_.end()) {
*it = record;
}
}
Record Database::search_record(int id) {
auto it = find_if(records_.begin(), records_.end(), [id](const Record& r) {
return r.id == id;
});
return it != records_.end() ? *it : (Record){0, "", 0}; // return a default record if not found
}
void Database::load() {
ifstream ifs(filename_);
if (!ifs.is_open()) {
return;
}
while (!ifs.eof()) {
Record record;
ifs >> record.id >> record.name >> record.age;
if (!ifs.fail()) {
records_.push_back(record);
}
}
ifs.close();
}
void Database::save() {
ofstream ofs(filename_);
for (const auto& record : records_) {
ofs << record.id << " " << record.name << " " << record.age << endl;
}
ofs.close();
}
int main() {
Database db("data.txt");
// add a record
db.add_record({1, "Alice", 20});
// search a record
Record r = db.search_record(1);
cout << r.id << " " << r.name << " " << r.age << endl;
// update a record
db.update_record(1, {1, "Bob", 25});
// delete a record
db.delete_record(1);
return 0;
}
```
在这个示例中,我们使用一个简单的文件来存储记录,每一行代表一个记录,包含id,name和age字段。在实际应用中,你可能需要使用更高效的数据存储方式,例如内存数据库或者服务器端数据库。