关于链表的C++文件读写

课程设计时需要构建一个商品表,我使用的是一个链表来存储一个个商品,那么在过程中需要将信息存储进文件,再从文件读取到内存的链表中。

思路不是很难,但是还是卡在了一些细节上。

细节1:存储1~n个商品时,在最后一个商品及n商品时,在文件末尾会多一个换行符,这个换行符会影响到文件的读写操作。

细节2:链表的每个商品信息在读取时都需要动态分配内存,以及一些指针的操作问题。(平时只注重于算法的学习了,对于链表不熟悉吃的亏,在此感谢队友jameslee的Debug)

细节3:对于类的存储,我想到的是用二进制而不是一般存储,因为二进制是按照字节来存储的,方便文件读写,当然文件存储信息是一个过渡,学完数据库就方便了。

文件写入商品信息:

#include   
#include   
#include 
#include 
class Goods
{
protected:
	char goods_name[50]; //商品名称
	int goods_number; //商品代码
	char person_name[30]; //经办人
	int price; //进货价
	int amount; //库存量
	Goods *next;//定义指向类Goods的指针变量next
public:
	Goods(int goods_number=0,char*goods_name="null",char*person_name="null",int price=0,int amount=0)//定义构造函数
	{
		this->goods_number=goods_number;
		strcpy(this->goods_name,goods_name);
		strcpy(this->person_name,person_name);
		this->price=price;
		this->amount=amount;
	}
	void ShowData()//定义输出函数
	{
		cout<<"goods_number:"<
文件读入内存的链表中:

#include   
#include   
#include 
#include 
class Goods
{
	public:
	char goods_name[50]; //商品名称
	int goods_number; //商品代码
	char person_name[30]; //经办人
	int price; //进货价
	int amount; //库存量
	Goods *next;//定义指向类Goods的指针变量next
	Goods(int goods_number=0,char*goods_name="null",char*person_name="null",int price=0,int amount=0)//定义构造函数
	{
		this->goods_number=goods_number;
		strcpy(this->goods_name,goods_name);
		strcpy(this->person_name,person_name);
		this->price=price;
		this->amount=amount;
	}
	void ShowData()//定义输出函数
	{
		cout<<"goods_number:"<next=new Goods;
			p=p->next;
		}
		in.read((char*)&(*p),sizeof(*p));
		p->next=NULL;
		if(in.eof())
		{
			free(p2->next);
			p2->next=NULL;
			break;
		}//目的是清除最后一次重复计入的商品,这个操作和\n以及eof有关
   }
   p->next=NULL;
   p=goods;
   while(p)
   {
	p->ShowData();
	p=p->next;
   }//打印链表
   return 0;
}
商品表及链表,所选取的数据结构和实际需要应该还是很贴切的。


你可能感兴趣的:(C++,c++,数据结构)