⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 数据结构链表的维护与文件形式的保存
💻 CPP
字号:
#include<iostream.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

typedef struct shopping
{
	int key;
	char name[16];
	char type[16];
	float price;
	int total;
	struct shopping *next;
}ShopNode;

ShopNode *head,*sn_now;//head头指针,sn_now插入点

void ShopAdd()//在最后一个商品后增加一个商品
{
	ShopNode *sn=new ShopNode;//p过渡,sn变量
	int key=1;
	char name[20],type[20];
	if(head==NULL)	{head=sn_now=sn;} //初始化
	else
	{
		sn_now=head;
		while(sn_now->next) {sn_now=sn_now->next;key+=1;}			
		sn_now->next=sn;sn_now=sn;//开辟空间	
		key+=1;
	}
	sn_now->key=key;
	sn_now->next=NULL;		
	cout<<"商品名:";cin>>name;strcpy(sn_now->name,name);
	cout<<"型号:";cin>>type;
	sn_now=head;
	while(sn_now->next)//型号相同处理
	{
		if(strcmp(sn_now->type,type)==0)
		{cout<<"\a这个商品型号已经存在了!"<<endl;cout<<"型号:";cin>>type;sn_now=head;continue;}
		sn_now=sn_now->next;
	}
	strcpy(sn_now->type,type);
	cout<<"价格:";cin>>sn_now->price;
	cout<<"进货总数:";cin>>sn_now->total;
	sn->next=NULL;

} 

void ShopDisplay()//总浏商品
{
	ShopNode *p=head;
	cout<<"===================================================================\n";
	cout<<"序号\t商品名\t\t型号\t\t价格\t\t进货总量"<<endl;
	if(head==NULL)	cout<<"\a***没有任何储存商品名***\n";
	else
		while(p)
		{
			cout<<p->key<<"\t"<<p->name<<"\t\t"<<p->type<<"\t\t$"<<p->price<<"\t\t1"<<p->total<<endl;
			p=p->next;			
		}	
	cout<<"===================================================================\n";
	
}

void ShopLookUp()
{
	ShopNode *p=head;//q记录名字相同
	int choose_1=0,choose_2=0;//choose_1选择商品的操作,choose_2选择商品属性的操作
	float price=-1.0;
	int total=-1,key=0;
	char name[20],type[20];
	
	cout<<"\t\t1.序号 2.商品名 3.型号"<<endl;
	cout<<"请按属性选择要查找的商品:";cin>>choose_1;	
	switch(choose_1)
	{
	case 1:
		cout<<"请输入序号:";cin>>key;
		if(p==NULL)	{cout<<"\a***没有任何储存商品名***\n";break;}//没商品
		while(p)//确认此序号存在,名字相同
		{
			if(p->key!=key)	p=p->next;
			else break;
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;break;}
		while(p)//显示要查找的商品的所有属性
		{
			if(p->key==key)
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;break;}
			p=p->next;
		}		
		break;
	case 2:
		cout<<"请输入商品名:";cin>>name;
		if(p==NULL)	{cout<<"\a***没有任何储存商品名***\n";break;}//没商品
		while(p)//确认此商品名存在,名字相同
		{
			if(strcmp(p->name,name)!=0)	p=p->next;
			else {break;}
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;break;}
		while(p)//显示要查找的商品的所有属性
		{
			if(strcmp(p->name,name)==0)
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;}
			p=p->next;
		}		
		break;
	case 3:
		cout<<"请输入型号:"<<endl;cin>>type;
		while(p)//确认此商品型号存在
		{
			if(strcmp(p->type,type)!=0)	p=p->next;
			else break;			
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;break;}
		if(p==NULL)	{cout<<"\a***没有任何储存商品型号***";break;}//没商品		
		while(p)//显示要修改的商品的所有属性
		{
			if(strcmp(p->type,type)==0)	
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;break;}
			p=p->next;
		}		
		break;
	}
}


void ShopDel()//删除商品
{
	ShopNode *p=head,*q=NULL,*q_first=NULL,*q_last=NULL;
	int choose=0,key=0;//choose选择商品的操作
	char name[20],type[20];

	cout<<"\t\t1.序号 2.商品名 3.型号"<<endl;
	cout<<"请按属性选择要清仓的商品:";cin>>choose;
	switch(choose)
	{
	case 1:
		cout<<"请输入序号:";cin>>key;
		if(p==NULL)	{cout<<"\a***没有任何储存商品名***\n";break;}//没商品
		while(p)//确认此序号存在,名字相同
		{
			if(p->key!=key)	p=p->next;
			else break;
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;break;}
		if(p&&p->key==key)	
		{
			head=p->next;p=head;
			while(p)	{p->key=p->key-1;p=p->next;}
			break;
		}//清除第一个商品
		while(p->next)//清除中间的商品,清除最后商品	
		{
			if(p->next->key==key)	{p->next=p->next->next;break;}
			p=p->next;
		}
		while(p->next)	{p->next->key=p->next->key-1;p=p->next;}
		break;
	case 2:
		cout<<"请输入商品名:";cin>>name;
		if(p==NULL)	{cout<<"\a***没有任何储存商品名***";break;}//没商品
		while(p)//确认此商品名存在
		{
			if(strcmp(p->name,name)!=0)	p=p->next;
			else {q=q_first=p;break;}
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;break;}
//		if(p&&strcmp(p->name,name)==0)	{head=p->next;p=head;}//清除第一个商品		
		while(p)//清除中间的商品,清除最后商品	
		{
			if(strcmp(p->name,name)==0)	
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;q_last=p;}
			p=p->next;
		}
		if(p==q) p->next=p->next->next;
		else 
		{
			cout<<"***请在上面几种同各不同型号中选择一种型号!***\n";
			cout<<"请输入型号:";cin>>type;
			while(q)//确认此商品型号存在
			{
				if(strcmp(q->type,type)!=0)	q=q->next;
				else break;			
			}
			if(q)	q=q_first;
			else	{cout<<"\a***储存室没有这个商品型号!请继续进行操作!***"<<endl;break;}
			if(q==head&&strcmp(q->type,type)==0)//清除第一个商品
			{
				head=q->next;q=head;
				while(q){q->key-=1;q=q->next;}
				break;
			}
			while(q->next&&q->next->key<=q_last->key)//清除中间的商品,清除最后商品	
			{
				if(strcmp(q->next->type,type)==0)
				{
					q->next=q->next->next;
					while(q->next){q->next->key-=1;q=q->next;}
					break;
				}
				q=q->next;
			}			
		}
		break;
	case 3:
		cout<<"请输入型号:";cin>>type;
		if(p==NULL)	{cout<<"\a***没有任何储存商品型号***";break;}//没商品
		while(p)//确认此商品型号存在
		{
			if(strcmp(p->type,type)!=0)	p=p->next;
			else break;			
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品型号!请继续进行操作!***"<<endl;break;}
		if(p&&strcmp(p->type,type)==0)//清除第一个商品
		{
			head=p->next;p=head;
			while(p){p->key-=1;p=p->next;}				
			break;
		}
		while(p->next)//清除中间的商品,清除最后商品	
		{
			if(strcmp(p->next->type,type)==0)	
			{
				p->next=p->next->next;
				while(p->next){p->next->key-=1;p=p->next;}
				break;
			}
			p=p->next;
		}		
		break;
	default:
		cout<<"\a***请继续其它操作!***\n";
		break;
	}

}

void ShopModify()//修改商品属性         相同名末处理
{
	ShopNode *p=head,*q=NULL;//q记录名字相同
	int choose_1=0,choose_2=0;//choose_1选择商品的操作,choose_2选择商品属性的操作
	float price=-1.0,key=0;
	int total=-1;
	char name[20],type[20];
	
	cout<<"\t\t1.序号 2.商品名 2.型号"<<endl;
	cout<<"请按属性选择要修改的商品:";cin>>choose_1;	
	switch(choose_1)
	{
	case 1:
		cout<<"请输入序号:";cin>>key;
		while(p)//确认此序号存在,名字相同
		{
			if(p->key!=key)	p=p->next;
			else break;
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;goto OVER;}//没商品
		while(p)//显示要查找的商品的所有属性
		{
			if(p->key==key)
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;break;}
			p=p->next;
		}		
		break;
	case 2:
		cout<<"请输入商品名:";cin>>name;
		while(p)//确认此商品名存在,名字相同
		{
			if(strcmp(p->name,name)!=0)	p=p->next;
			else {q=p;break;}
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;goto OVER;}//没商品
		while(p)//显示要修改的商品的所有属性
		{
			if(strcmp(p->name,name)==0)
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;break;}
			p=p->next;
		}		
		break;
	case 3:
		cout<<"请输入型号:"<<endl;cin>>type;
		while(p)//确认此商品型号存在
		{
			if(strcmp(p->type,type)!=0)	p=p->next;
			else break;			
		}
		if(p)	p=head;
		else	{cout<<"\a***储存室没有这个商品!请继续进行操作!***"<<endl;goto OVER;}
		if(p==NULL)	{cout<<"\a***没有任何储存商品型号***";break;}//没商品		
		while(p)//显示要修改的商品的所有属性
		{
			if(strcmp(p->type,type)==0)	
			{cout<<p->key<<"\t"<<p->name<<"\t"<<p->type<<"\t"<<p->price<<"\t"<<p->total<<endl;break;}
			p=p->next;
		}		
		break;
	}
	cout<<"\t\t1.商品名 2.型号 3.价格 4.进货总量"<<endl;
	cout<<"请选择要修改的商品的属性:";cin>>choose_2;
	switch(choose_2)
	{
	case 1:
		cout<<"# "<<p->name<<" # 请输入修改后的商品名:";cin>>name;
		strcpy(p->name,name);
		break;
	case 2:
		cout<<"# "<<p->type<<" # 请输入修改后的型号:";cin>>type;
		strcpy(p->type,type);
		break;		
	case 3:
		cout<<"# "<<p->price<<" # 请输入修改后的价格:";cin>>price;
		p->price=price;
		break;
	case 4:
		cout<<"# "<<p->total<<" # 请输入修改后的进货总量:";cin>>total;
		p->total=total;
		break;
	default:
		cout<<"\a***请继续其它操作!***\n";
		break;
	}
OVER:;
}

void WriteFile(shopping &s1)//保存文件
{
	ShopNode *sn=head;
	FILE *fptr;	
	char filename[20];
	char note[]="";
	sn_now=head;

	if(sn_now==NULL)
	{
		cout<<"\a对不起,不能保存空的记录!\n";return;
	}
	cout<<"请输入文件名称:";
	cin>>filename;
    if((fptr=fopen(filename,"wb"))==NULL)
	{
		cout<<"\n对不起,不能保存您的文件!\n";
		exit(0);
	}
	else
	{   
		while(sn)
		{
			fwrite(&s1,sizeof(s1),1,fptr);
			sn=sn->next;			
		}
		fclose(fptr);
		cout<<"\n恭喜你,保存成功!总有"<<6<<"条记录!\n";	
	}
}//WriteFile

void ReadFile(shopping &s)//读取文件
{   
	ShopNode *sn=head;
	FILE *fptr;
	char filename[20];
	cout<<"请输入文件的名称:";
	cin>>filename;

	if((fptr=fopen(filename,"rb"))==NULL)
	{	
		 cout<<"\n对不起,不能打开您要的文件!\n";
	//   exit(0);
	}
	else
	{	
		while(fread(&s,sizeof(s),1,fptr)==1)	
		{
		sn->key=s.key;
		strcpy(sn->name,s.name);
		strcpy(sn->type,s.type);
		sn->price=s.price;
		sn->total=s.total;
		sn=sn->next;}		
		fclose(fptr);
		cout<<"\n恭喜你,导入成功!\n";				
	}
}

void main()
{
	shopping s1;
	char choose=' ',op[]="";//选择操作
	while(choose!='^')
	{   cout<<"****************************************************"<<endl
		    <<"  ****************彩电销售系统********************"<<endl
		    <<"****************************************************"<<endl
		    <<"**  1.写入                 2.删除                 **"<<endl
            <<"**  3.浏览                 4.修改                 **"<<endl
		    <<"**  5.保存                 6.打开                 **"<<endl
            <<"**  7.退出                 8.查找                 **"<<endl
		    <<"****************************************************"<<endl
		    <<"请选择要进行的操作:";cin>>op;//接收正确字符
		if(strlen(op)>1)	{cout<<"\a操作错误!"<<endl;continue;}
		else	choose=op[0];
		switch(choose)
		{
		case '1':
			ShopAdd();
			break;
		case '2':
			ShopDel();
			break;
		case '3':
			ShopDisplay();
			break;
		case '4':
			ShopModify();
			break;	
		case '5':
			WriteFile(s1);
			break;
		case '6':
			ReadFile(s1);
			break;
		case '8':
			ShopLookUp();
			break;
		case '7':
			cout<<"\a确定退出系统!(Y/N):";cin>>op;						
			if(strcmp(op,"Y")==0)	choose='^';
			else if(strcmp(op,"y")==0)	choose='^';			
			break;
		default:
			cout<<"\a操作错误!"<<endl;
			break;
		}
	}
	
	
		
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -