前言
一个简单的实现简便 "map集合" 数据存储本地。
适合不会SQL但又想实现数据存储本地的同学。
操作使用都非常简单。
文件只做了简单的加密处理,如果需要复杂加密的同学可以修改加密函数。
项目结构
1.创建头文件——CAB.h
//
// Created by xw on 2024/2/7.
//
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>
using namespace std;
#ifndef UNTITLED_FUN_H
#define UNTITLED_FUN_H
//数据库 结构体
struct DataBase
{
//文件写入
void write(string road,map<string,string>maps){
//创建文件输出流对象
ofstream ofs;
//打开文件,若文件不存在则创建文件
ofs.open(road);
//将maps转换成字符串
string s = transferStr(maps);
//加密处理
//写入字符串到文件
ofs<<s;
//关闭文件
ofs.close();
//cout<<"---文件写入完毕---"<<endl;
}
//将maps转换成字符串
string transferStr(map<string,string> maps){
string s="";
map<string, string>::iterator iter;
for(iter = maps.begin(); iter != maps.end(); iter++)
{
s= s + iter->first + "*" + iter->second + "\n";
}
return s;
}
//读取文件
map<string,string> read(string road){
//定义集合
map<string,string> maps;
//定义文件流
ifstream ifs;
//打开文件
ifs.open(road);
//定义字符串
string buffer;
//循环得到结果
while (getline(ifs,buffer)){
//定义key value
string key;
string value;
//获取内容长度
int len = buffer.length();
//处理buffer
buffer=buffer.substr(0,len);
//测试输出字符串
//cout<<buffer<<endl;
for (int i = 0; i < len; ++i) {
if (buffer[i]=='*'){
key = buffer.substr(0,i);
value = buffer.substr(i+1,len);
//cout<<key<<" "<<value<<endl;
maps[key]=value;
}
}
}
//关闭文件
ifs.close();
//cout<<"---文件读取完毕---"<<endl;
return maps;
}
//加密
string encrypt(string s){
//字符串长度
int length = s.length();
//
string newS = "";
//加密
for (int i = 0; i < length; i++) {
s[i] = char (s[i] + 1);
//cout<<s[i];
newS = newS + s[i];
}
cout<<newS<<endl;
//返回加密字符串
return newS;
}
//解密
string decrypt(string s){
//字符串长度
int length = s.length();
//
string newS = "";
//解密
for (int i = 0; i < length; i++) {
s[i] = char (s[i] - 1);
//cout<<s[i];
newS = newS + s[i];
}
cout<<newS<<endl;
//返回解密字符串
return newS;
}
};
#endif //UNTITLED_FUN_H
2.测试使用代码——main.cpp
#include <map>
#include "CAB.h"
using namespace std;
int main() {
//定义结构体对象
DataBase dataBase;
//定义map集合
map<string ,string >maps;
//向maps中添加元素
//key值和value值只能是字符串
maps["zhangsan"]="zhangsan";
maps["lisi"]="lisi";
maps["wangwu"]="wangwu";
//向数据库中写入maps集合
dataBase.write("test.txt",maps);
//从数据库中拿数据
map<string ,string >tempMaps;
tempMaps = dataBase.read("test.txt");
cout<<"打印数据tempMaps:"<<endl;
//遍历打印
map<string, string>::iterator iter;
for(iter = tempMaps.begin(); iter != tempMaps.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
/*
dataBase.encrypt("hello world");
dataBase.decrypt("ifmmp!xpsme");
*/
return 0;
}
3.效果展示
控制台输出
数据成功保存到文件中