如何将vector ob对象保存到文件[C ++] [英] How to save vector ob object to file [C++]

查看:146
本文介绍了如何将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆