我编写了一个包含电话号码的简单数据库。不要看“修改”和“备份”功能,因为我仍然必须这样做。所以我想问:
如果(毕竟)我的基本代码很清楚。
如何解决以下问题:如果我要添加记录(具有相对功能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();
}