You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

423 lines
10 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<iostream>
#include<cstring>
#include<vector>
#include<fstream>
#include"list"
using namespace std;
class Data// 日期类
{
public:
void set_time( );
void show_time( );
private:
bool is_time(int, int, int);
int year;
int month;
int day;
};
void Data::set_time( )
{
char c1,c2;
cout<<"请输入日期(格式年-月-日)"<<endl;
while(1)
{
cin>>year>>c1>>month>>c2>>day;
if(c1!='-'||c2!='-')
cout<<"格式不正确,请重新输入"<<endl;
else
break;
}
}
void Data::show_time( )
{
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
class Pet
{
public:
PetAnimals(){}
PetAnimals( string Number, string Name, string Age, string Weight, string Type,
string Price, string People )
{
Cnumber=Number;//宠物编号000102 ...
Cname=Name;//宠物名称:贝贝
Cage=Age;//宠物年龄2014
Cweight=Weight;//宠物重量2045
Ctype=Type;//宠物种类cat or dog...
Cprice=Price;//宠物价格20...
Cpeople=People;//宠物主人:小明…
}
string Cnumber;
string Cname;
string Cage;
string Cweight;
string Ctype;
string Cprice;
string Cpeople;
};
class guest
{
public:
string Cnumber;
string Cname;
string Cage;
string Cweight;
string Ctype;
string Cprice;
string Cpeople;
};
class PetAnimals:public Pet
{
public:
void Insert();//添加宠物信息
bool Look();//查找宠物信息
bool Change();//修改宠物信息
void Show();//显示或浏览所有宠物信息
bool Delete();//删除宠物信息
void Read();//读取宠物信息文件
void Write();//写出宠物信息文件
};
list<PetAnimals>PetList;//使用双向链表
//添加宠物信息
void PetAnimals::Insert()
{
PetAnimals Pet;
char ch;
int symbol=0;//判断宠物信息是否存在
list<PetAnimals>::iterator first,last;
first=PetList.begin();//begin()指链表开始处
last=PetList.end();//end()指链表结尾处
do{
cout<<"【请输入宠物相关信息!】"<<endl;
cout<<"编号:";
cin>>Pet.Cnumber;
cout<<"名称:";
cin>>Pet.Cname;
cout<<"年龄:";
cin>>Pet.Cage;
cout<<"重量:";
cin>>Pet.Cweight;
cout<<"种类:";
cin>>Pet.Ctype;
cout<<"价格:";
cin>>Pet.Cprice;
cout<<"主人:";
cin>>Pet.Cpeople;
for( ; first != last ; ++first )
{
if((Pet.Cname==(*first).Cname)&&(Pet.Cprice==(*first).Cprice)
&&(Pet.Ctype==(*first).Ctype))//假设宠物可以重名
{
symbol=1;// 如果存在此宠物
cout<<endl<<"该宠物已经存在!"<<endl;
cout<<"编号:"<<(*first).Cnumber<<endl;
cout<<"名称:"<<(*first).Cname<<endl;
cout<<"年龄:"<<(*first).Cage<<endl;
cout<<"重量:"<<(*first).Cweight<<endl;
cout<<"种类:"<<(*first).Ctype<<endl;
cout<<"价格:"<<(*first).Cprice<<endl;
cout<<"主人:"<<(*first).Cpeople;
}
}
if(symbol==0)//如果不存在此宠物
{
PetList.insert(PetList.end(),Pet);
}
cout<<endl<<"继续添加宠物信息[Y或N]?";
cin>>ch;
}
while(ch=='Y'||ch=='y');
}
//查找宠物信息
bool PetAnimals::Look()
{
string name,price,type;
int symbol=0;
int option;
list <PetAnimals>::iterator first,last;
do
{
cout<<"\t【请输入你查找的方式】!"<<endl;
cout<<"\t1.按名称查找"<<endl;
cout<<"\t2.按价格查找"<<endl;
cout<<"\t3.按种类查找"<<endl;
cout<<"\t4.退出!"<<endl;
cin>>option;
switch(option)
{
case 1: cout<<"请输入名称:";
cin>>name;break;
case 2: cout<<"请输入价格:";
cin>>price;break;
case 3: cout<<"请输入种类:";
cin>>type;break;
case 4:break;
}
first=PetList.begin();
last=PetList.end();
for(;first!=last;++first)
{
if((name==(*first).Cname)&&(option==1))
{
symbol=1;
cout<<"宠物名称为"+(*first).Cname+"宠物信息如下:"<<endl;
cout<<"编号:"+(*first).Cnumber<<endl;
cout<<"名称:"+(*first).Cname<<endl;
cout<<"年龄:"+(*first).Cage<<endl;
cout<<"重量:"+(*first).Cweight<<endl;
cout<<"种类:"+(*first).Ctype<<endl;
cout<<"价格:"+(*first).Cprice<<endl;
cout<<"主人:"+(*first).Cpeople<<endl;
}
if((price==(*first).Cprice)&&(option==2))
{
symbol=1;
cout<<"宠物价格为"+(*first).Cprice+"宠物信息如下:"<<endl;
cout<<"编号:"+(*first).Cnumber<<endl;
cout<<"名称:"+(*first).Cname<<endl;
cout<<"年龄:"+(*first).Cage<<endl;
cout<<"重量:"+(*first).Cweight<<endl;
cout<<"种类:"+(*first).Ctype<<endl;
cout<<"价格:"+(*first).Cprice<<endl;
cout<<"主人:"+(*first).Cpeople<<endl;
}
if((type==(*first).Ctype)&&(option==3))
{
symbol=1;
cout<<"宠物种类为"+(*first).Ctype+"宠物信息如下:"<<endl;
cout<<"编号:"+(*first).Cnumber<<endl;
cout<<"名称:"+(*first).Cname<<endl;
cout<<"年龄:"+(*first).Cage<<endl;
cout<<"重量:"+(*first).Cweight<<endl;
cout<<"种类:"+(*first).Ctype<<endl;
cout<<"价格:"+(*first).Cprice<<endl;
cout<<"主人:"+(*first).Cpeople<<endl;
}
}
}
while(option!=4);
if((first==last)&&(symbol==0))
{
cout<<"没有该宠物信息!";
return false;}
else
return true;
}
//修改宠物资料
bool PetAnimals::Change()
{
PetAnimals pet;
string name,price,type;
int symbol=0;
cout<<"请输入名称:";
cin>>name;
cout<<"请输入价格:";
cin>>price;
cout<<"请输入种类:";
cin>>type;
list <PetAnimals>::iterator first,last;
first=PetList.begin();
last=PetList.end();
for(;first!=last;++first)
{
if((name==(*first).Cname)&&(price==(*first).Cprice)&&(type==(*first).Ctype))
{
symbol=1;
cout<<endl<<"该宠物信息找到,其修改前的宠物信息为:"<<endl;
cout<<"编号:"+(*first).Cnumber<<endl;
cout<<"名称:"+(*first).Cname<<endl;
cout<<"年龄:"+(*first).Cage<<endl;
cout<<"重量:"+(*first).Cweight<<endl;
cout<<"种类:"+(*first).Ctype<<endl;
cout<<"价格:"+(*first).Cprice<<endl;
cout<<"主人:"+(*first).Cpeople<<endl;
break;
}
}
if(symbol)
{
cout<<endl<<"修改后的宠物信息为:"<<endl;
cout<<"年龄:";
cin>>pet.Cage;
cout<<"重量:";
cin>>pet.Cweight;
cout<<"主人:";
cin>>pet.Cpeople;
pet.Cname=name;
pet.Cprice=price;
pet.Ctype=type;
for(;first!=last;++first)
{
if((name==(*first).Cname)&&(price==(*first).Cprice)&&(type==(*first).Ctype))
{
(*first)=pet;
}
}
return true;
}
else
{
cout<<"没有该宠物信息!";
return false;
}
}
//显示所有宠物信息
void PetAnimals::Show()
{
list <PetAnimals>::iterator first,last,it;
first=PetList.begin();
last=PetList.end();
for(;first!=last;++first)
{
cout<<"******************您的宠物信息**********************"<<endl;
cout<<"编号:"<<(*first).Cnumber<<endl;
cout<<"名称:"<<(*first).Cname<<endl;
cout<<"年龄:"<<(*first).Cage<<endl;
cout<<"重量:"<<(*first).Cweight<<endl;
cout<<"种类:"<<(*first).Ctype<<endl;
cout<<"价格:"<<(*first).Cprice<<endl;
cout<<"主人:"<<(*first).Cpeople<<endl;
cout<<"****************************************"<<endl;
}
}
//保存宠物信息
void PetAnimals::Write()
{
char file[256];
string FileName;
cout<<"请输入文件名:(可以加扩展名!如.txt)";
//若输入完整路径则在你输入的路径下读取文件,否则到程序所在位置的文件夹中读取
cin>>FileName;
if(FileName.find (".")>FileName.length())
{
FileName=FileName+".txt";
}
//把String型的字符串转换成char*型的字符串
strcpy(file,FileName.c_str());
ofstream fout(file);
if(!fout)
{
cout<<"★文件写入失败!请检查您的文件名!"<<endl;
return;
}
else
{
list <PetAnimals>::iterator first,last;
first=PetList.begin();
last=PetList.end();
for(;first!=last;++first)
{
fout<<endl<<"编号:"<<(*first).Cnumber<<endl<<"名称:"<<(*first).Cname<<endl
<<"年龄:"<<(*first).Cage<<endl<<"重量:"<<(*first).Cweight<<endl
<<"种类:"<<(*first).Ctype<<endl
<<"价格:"<<(*first).Cprice<<endl<<"主人:"<<(*first).Cpeople<<endl;
}
cout<<"★文件保存成功!"<<endl;
}
fout.close ();//关闭打开的文件
}
//读取宠物信息
void PetAnimals::Read()
{
char file[256];
string FileName;
cout<<"★请输入文件名:(可以加扩展名!如.txt)";
cin>>FileName;
if(FileName.find (".")>FileName.length())
{
FileName=FileName+".txt";
}
strcpy(file,FileName.c_str());
ifstream fin(file);
int index;
if(!fin)
{
cout<<"文件写入失败!请检查您的文件名!"<<endl;
return ;
}
else
{
PetList.clear ();
while(!fin.eof())//判断是否处于结尾
{
PetAnimals pet;
string str;
fin>>str;
index=str.find(":");//要":"后的内容
pet.Cnumber =str.substr(index+1);//要":"后的剩下字符串
fin>>str;
index=str.find (":");
pet.Cname =str.substr(index+1);
fin>>str;
index=str.find (":");
pet.Cage =str.substr(index+1);
fin>>str;
index=str.find (":");
pet.Cweight =str.substr(index+1);
fin>>str;
index=str.find (":");
pet.Ctype =str.substr(index+1);
fin>>str;
index=str.find (":");
pet.Cprice=str.substr(index+1);
fin>>str;
index=str.find (":");
pet.Cpeople =str.substr(index+1);
PetList.insert(PetList.end(),pet);
}
cout<<" 文件读取成功! "<<endl;
}
fin.close();
}
int main()
{
PetAnimals pet;
int option;
do
{
cout<<endl<<" 【欢迎进入宠物交易系统!】"<<endl;
cout<<" \t┌-------------------------┐"<<endl;
cout<<" \t┊ 1.添加宠物的信息 ┊"<<endl;
cout<<" \t┊ 2.查找宠物的信息 ┊"<<endl;
cout<<" \t┊ 3.修改宠物的信息 ┊"<<endl;
cout<<" \t┊ 4.显示宠物的信息 ┊"<<endl;
cout<<" \t┊ 5.保存文件 ┊"<<endl;
cout<<" \t┊ 6.读取文件 ┊"<<endl;
cout<<" \t┊ 7.退出系统 ┊"<<endl;
cout<<" \t└-------------------------┘\n"<<endl;
cin>>option;
switch(option)//选择不同函数功能
{
case 1: { pet.Insert(); break; }
case 2: { pet.Look(); break; }
case 3: { pet.Change(); break; }
case 4: { pet.Show(); break; }
case 5: { pet.Write(); break; }
case 6: { pet.Read(); break; }
case 7: { break ; }
}
}
while(option != 8);
return 0;
}