关于使用txt文件管理c ++数据库的问题

时间:2019-07-20 10:41:21

标签: c++ database

我编写了一个包含电话号码的简单数据库。不要看“修改”和“备份”功能,因为我仍然必须这样做。所以我想问:

  1. 如果(毕竟)我的基本代码很清楚。

  2. 如何解决以下问题:如果我要添加记录(具有相对功能addData),它将在txt文件中创建“ \ n”。 例如,如果文件包含:

    first record

    second record

如果我添加第三条记录,我希望它变成这样:

first record\n
second record\n
third record

但它变成这样:

first record\n
second record\n\n
third record

(请参见双\ n)

有一个终点线(那我失败了吗?)

//modificabile, causa lib. iomanip applicato, visualizzazione max 3 colonne circa func printAll
//mancano ancora da fare modifica e backup (funzioni)

#include<iostream>
#include<iomanip>
#include<fstream>
#include<Windows.h>
#include<string>
#include<cstring>
#include <cstdio>

using namespace std;

void loading();
void openRubrica(ifstream& inData, ofstream& outData);
void openSwap(ofstream& outSwap);
void openBackup(ofstream& outData);
void closeRubrica(ifstream& inData, ofstream& outData);
void closeSwap(ofstream& outSwap);
void closeBackup(ofstream& outData);
void GUI(int& choice);

void printAllData();
void printSpecificData();
void addData();
void cancelData();
void modifyData();
void backupData();

int main()
{
system("MODE 100, 50");

int choice = 0;
bool exitFlag = false;
bool errorFlag = false;

loading();

while (exitFlag == false)
{
    exitFlag = false;
    errorFlag = false;

    system("CLS");
    GUI(choice);

    if (!cin)
        errorFlag = true;
    switch (choice)
    {
    case 0:
        if (errorFlag == true)
        {
            system("CLS");
            cout << "Input failure!";
            cin.clear();
            cin.ignore(10, '\n');
            Sleep(1000);
        }
        else if (errorFlag == false)
        {
            system("CLS");
            cout << "I\'m closing the program\n\n";
            loading();
            cout << "\n\n\n";
            exitFlag = true;
        }
        break;

    case 1:
        system("CLS");
        printAllData();
        break;

    case 2:
        system("CLS");
        printSpecificData();
        break;

    case 3:
        system("CLS");
        addData();
        break;

    case 4:
        system("CLS");
        cancelData();
        break;

    case 5:
        system("CLS");
        modifyData();
        break;

    case 6:
        system("CLS");
        backupData();
        break;

    default:
        system("CLS");
        cout << "Please, enter a valid integer value!";
        Sleep(1000);
    }
}

return 0;
}

void loading()
{
cout << "Loading";
for (int count = 0; count < 3; count++)
{
    cout << " .";
    Sleep(250);
}
}

void openRubrica(ifstream& inData, ofstream& outData)
{
inData.open("C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_rubrica.txt", ios::app);
outData.open("C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_rubrica.txt", ios::app);
}

void openSwap(ofstream& outSwap)
{
outSwap.open("C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_swap.txt");
}

void openBackup(ofstream& outData)
{
outData.open("");
}

void GUI(int& choice)
{
cout << left;
cout << "Select an option:\n\n"
    << setw(25) << "Print all data" << "--> 1\n"
    << setw(25) << "Print specific data" << "--> 2\n"
    << setw(25) << "Add data" << "--> 3\n"
    << setw(25) << "Cancel data" << "--> 4\n"
    << setw(25) << "Modify data" << "--> 5\n"
    << setw(25) << "Backup data" << "--> 6\n"
    << setw(25) << "Exit" << "--> 0\n\n\n";
cin >> choice;
}

void printAllData()
{
ifstream inData;
ofstream outData;
string record;

openRubrica(inData, outData);

while (!inData.eof())
{
    getline(inData, record);
    record = record + ";";

    while (record.length() != 0)
    {
        cout << left;
        cout << setw(15) << record.substr(0, record.find(";", 0)) << " ";
        record.erase(0, record.find(";", 0) + 1);
    }

    cout << endl;
    Sleep(25);
}

system("PAUSE");
closeRubrica(inData, outData);
}

void printSpecificData()
{
ifstream inData;
ofstream outData;
string surname;
string searched;
string surnameTry;
string number;

openRubrica(inData, outData);

bool foundFlag = false;

cout << "Search by surname.\n"
    << "Write the first letter in uppercase.\n"
    << "Enter a surname:\t";
cin >> searched;
cout << endl;

while (!inData.eof())
{
    getline(inData, surname);
    surname.erase(0, surname.find(";", 0)+1);
    surnameTry = surname.substr(0, surname.find(";", 0));

    if (searched==surnameTry)
    {
        foundFlag = true;
        surname.erase(0, surname.find(";", 0) + 1);
        number = surname;
        cout << "Founded!\n" << number << "\n\n\n";
    }
}

if(foundFlag==false)
    cout << "There is no \"" << searched << "\".\n\n\n";

system("PAUSE");
closeRubrica(inData, outData);
}

void addData()
{
ifstream inData;
ofstream outData;
string name;
string surname;
string number;

openRubrica(inData, outData);

cout << "Insert name:\t";
cin >> name;
cout << "Insert surname:\t";
cin >> surname;
cout << "Insert number:\t";
cin >> number;
cin.ignore();

outData << endl << name + ";" + surname + ";" + number;

system("PAUSE");
closeRubrica(inData, outData);
}

void cancelData()
{
ifstream inData;
ofstream outData;
ofstream outSwap;
string searched;
string record;
string surnameTry;
bool exitFlag = false;
bool foundFlag = false;
int position = 1;
int count = 1;

openRubrica(inData, outData);

cout << "Insert the surname of people which will be eliminated:\t";
cin >> searched;
cout << endl;

while (!inData.eof() && exitFlag == false)
{
    getline(inData, record);
    record.erase(0, record.find(";", 0) + 1);
    surnameTry = record.substr(0, record.find(";", 0));

    if (searched == surnameTry)
    {
        exitFlag = true;
        foundFlag = true;
        cout << "Founded!\n";
    }
    position++;
}

if (foundFlag == false)
    cout << "There is no \"" << searched << "\".\n\n\n";

if (foundFlag == true)
{
    closeRubrica(inData, outData);
    openRubrica(inData, outData);
    openSwap(outSwap);

    position--;

    while (!inData.eof())
    {
        getline(inData, record);
        if (position != count)
            outSwap << record << endl;
        count++;
    }
}

system("PAUSE");
closeRubrica(inData, outData);
closeSwap(outSwap);

if (foundFlag == true)
{
    remove("C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_rubrica.txt");
    rename("C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_swap.txt", "C:\\Users\\Riccardo\\Desktop\\input-output\\io-Database rubrica\\db_rubrica.txt");
}
}

void modifyData()
{

}

void backupData()
{

}

void closeRubrica(ifstream& inData, ofstream& outData)
{
inData.close();
outData.close();
}

void closeSwap(ofstream& outSwap)
{
outSwap.close();
}

void closeBackup(ofstream& outData)
{
outData.close();
}

0 个答案:

没有答案