如何将vector ob对象保存到文件[C ++] [英] How to save vector ob object to file [C++]
本文介绍了如何将vector ob对象保存到文件[C ++]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>
using namespace std;
class Medicine{
private:
string productName;
double productPrice;
public:
Medicine(string productName, double productPrice){
this->productName = productName;
this->productPrice = productPrice;
}
void printMedicineDetails(){
cout << "Product Name: " << this->productName << "\n"
<< "Product Price: " << this->productPrice << "\n";
}
// Getter and setter
string getProductName(){
return productName;
}
void setProductName(string productName){
productName = productName;
}
};
//Function Prototype
void addMedicine(vector<Medicine>& medicineCollection);
void printAllMedicine(vector<Medicine>& medicineCollection);
void deleteMedicine(vector<Medicine>& medicineCollection);
void searchMedicine(vector<Medicine>& medicineCollection);
vector<Medicine> readMedicineRecordFromFile(string filename);
void writeMedicineRecordToFile(vector<Medicine>& medicineCollection, string filename);
int main()
{
vector <Medicine> medicineCollection;
string MedicineRecordFilename = "MedicineRecord.txt";
int menuOption;
do
{
system("CLS");
cout << "1. Add Medicine" << "\n";
cout << "2. Delete Medicine" << "\n";
cout << "3. Modify Medicine" << "\n";
cout << "4. Search Medicine" << "\n";
cout << "5. Medicine Expiry Date" << "\n";
cout << "6. Return to Login menu " << "\n";
cout << "7. Exit " << "\n\n";
cout << "Enter option: ";
cin >> menuOption;
switch (menuOption) {
case 1:
addMedicine(medicineCollection);
system("PAUSE");
break;
case 2:
deleteMedicine(medicineCollection);
system("PAUSE");
break;
case 3:
printAllMedicine(medicineCollection);
system("PAUSE");
break;
case 4:
searchMedicine(medicineCollection);
system("PAUSE");
break;
case 7:
cout << "System Terminal succesfully" << "\n";
system("PAUSE");
system(0);
default:
cout << "Invalid Input, Please try again." << "\n";
break;
}
} while (menuOption != 7);
getchar();
return 0;
}
void addMedicine(vector<Medicine>& medicineCollection) {
string productName;
double productPrice;
cout << "Enter Product Name: ";
cin >> productName;
cout << "Enter Product Price: ";
cin >> productPrice;
Medicine newMedicine(productName, productPrice);
medicineCollection.push_back(newMedicine);
cout << "Medicine succesfully recorded.";
}
void printAllMedicine(vector<Medicine>& medicineCollection) {
if (medicineCollection.empty()){
cout << "No, Medicine record yet." << "\n";
return;
}
for (Medicine medicine : medicineCollection) {
cout << medicine.getProductName() << "\n";
}
}
void deleteMedicine(vector<Medicine>& medicineCollection) {
string productName;
if (medicineCollection.empty()) {
cout << "No, Medicine record yet." << "\n";
return;
}
cout << "Enter Product Name: ";
cin >> productName;
for (unsigned int i = 0; i < medicineCollection.size(); i++) {
if (productName.compare(medicineCollection[i].getProductName()) == 0) {
medicineCollection.erase(medicineCollection.begin() + i);
cout << "Medicine record has succesfully deleted.";
return;
}
cout << "Sorry Medicine record not found.";
}
}
void searchMedicine(vector<Medicine>& medicineCollection) {
string productName;
if (medicineCollection.empty()) {
cout << "No, Medicine record yet." << "\n";
return;
}
cout << "Enter Product Name: ";
cin >> productName;
for (unsigned int i = 0; i < medicineCollection.size(); i++) {
if (productName.compare(medicineCollection[i].getProductName()) == 0) {
medicineCollection[i].printMedicineDetails();
return;
}
cout << "Sorry Medicine record not found.";
}
}
我的尝试:
我尝试将药物矢量保存到文件但它不起作用,请帮帮我吗?!
What I have tried:
I try to save the medicine vector to file but it doesn't not work, please help me out ?!
std::ofstream outFile;
outFile.open(fileName, ios::out);
for(int i=0;i<obj.size();i++)
{
outFile.write((const char *)(obj.data()),sizeof(vector<vector<Medicine> >)*obj.size());
}
outFile.close();
推荐答案
看看Serialization [ ^ ]。我建议你为 Medicine
类添加序列化支持(例如加载/保存方法),然后迭代向量项以序列化整个容器。
Have a look at Serialization[^]. I suggest you to add serialization support to your Medicine
class (e.g. load/save methods) and then iterate over the vector items in order to serialize the whole container.
这篇关于如何将vector ob对象保存到文件[C ++]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文