c++小學期的實驗二

  實驗一是做一個猜單詞的遊戲,bug太多,所以就不貼出來了。。。

  實驗二的題目是:

1.完成圖形類及其派生類的定義

(1) 設計一個計算圖形面積的類庫。它的頂層是一個抽象類,並且提供三個純虛函數:顯示數據成員、返回面積和返回體積。

class Shape

{public:

virtual void showData()=0;

        virtualdouble reArea()=0;

        virtualdouble reVolume()=0;

};

    第二層有Shape類派生TwoDimShape(二維圖形)和ThreeShape(三維圖形)類。他們增加了有關的數據成員,但沒有成員函數的實現。

第三層派生具體的圖形類。TwoDimShape類派生Circle(圓)、Elipse(橢圓)、Rectangle(矩形)和Triangle(三角形)等類。ThreeShape類派生Ball(球體)、Cylider(圓柱體)和RectangularParallelepiped(長方體)等類。

(2) 設計一個測試程序,全面測試你的設計,要求使用基類指針引用派生類對象的三個函數。

2.用異質鏈表組織上述各類圖形對象。

(1) 實現單鏈表:將結點數據域定義爲int,鏈表具有插入結點、刪除結點、反轉、遍歷等功能,並測試其正確性。

(2) 將結點數據域定義修改爲Shape *,用鏈表中的每個結點表示一個具體的圖形對象,創建圖形對象鏈表,並測試其正確性。

(3) 將所建單鏈表中的內容寫到一個文本文件中,反轉單鏈表並再次將其內容追加到同一文本文件中,查閱其正確性。


 代碼有點累贅,用了許多if,有需要的話可以改成switch。另外可以實現保存鏈表到txt文本,從txt文本導入鏈表。雖然質量不高,bug也很多,大家就多多擔待吧大笑

  另外代碼在cfree上編譯通過的,推薦大家用cfree或mingw運行。

#include<iostream>
#include<windows.h>
#include<fstream>
using namespace std; 
class Shape
{
	public:
		virtual void showData()=0;
		virtual double reArea()=0;
		virtual double reVolume()=0;
		virtual void saveData()=0;
		virtual int reflag()=0;
		Shape *next;
};
class TwoDimShape:public Shape
{
	public:
		double area;
		virtual void showData(){}
		virtual void saveData(){}
		virtual double reArea(){return 0;}
		virtual int reflag(){return 0;}
};
class ThreeShape:public Shape
{
	public:
		double area;
		double volume;
		virtual void showData(){}
		virtual void saveData(){}
		virtual double reArea(){return 0;}
		virtual double reVolume(){return 0;}
		virtual int reflag(){return 0;}
};
//二維派生
class Circle:public TwoDimShape//圓類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
		//area=3.14*radius*radius;
	public: 
		double reVolume(){return 0;}
		Circle(double r)
		{
			data_1=r;
		}
		void showData()
		{
			cout<<"圓的半徑是: "<<data_1<<endl;
			 
		}
		double reArea()
		{
			area=3.14*data_1*data_1;
			cout<<"圓的面積是:"<<area<<endl<<endl;
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out); 
			save<<"0"<<endl;
			save<<"1"<<endl;
			save<<data_1<<endl;
			save<<area<<endl; 
		}
		int reflag()
		{
			flag=1;
			return flag;
		}
};
class Elipse:public TwoDimShape//橢圓類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		double reVolume(){return 0;}
		Elipse(double a,double m)
		{
			data_1=a;
			data_2=m;
		}
		void showData()
		{
			cout<<"橢圓的長軸是: "<<data_1<<endl;
			cout<<"橢圓的短軸是: "<<data_2<<endl;
		}
		double reArea()
		{
			area=(3.14*data_1*data_2)/4;
			cout<<"橢圓的面積是:"<<area<<endl<<endl;
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out);
			save<<"0"<<endl; 
			save<<"2"<<endl;
			save<<data_1<<endl;
			save<<data_2<<endl;
			save<<area<<endl;
		}
		int reflag()
		{
			flag=2;
			return flag;
		}
};
class Rectangles:public TwoDimShape//長方形類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		double reVolume(){return 0;}
		Rectangles(double l,double w)
		{
			data_1=l;
			data_2=w; 
		}
		void showData()
		{
			cout<<"長方形的長是:"<<data_1<<endl;
			cout<<"長方形的寬是:"<<data_2<<endl;
		}
		double reArea()
		{
			area=data_1*data_2;
			cout<<"長方形的面積是:"<<area<<endl<<endl;
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out);
			save<<"0"<<endl;
			save<<"3"<<endl;
			save<<data_1<<endl;
			save<<data_2<<endl;
			save<<area<<endl;
		}
		int reflag()
		{
			flag=3;
			return flag;
		}
};
class Triangle:public TwoDimShape//三角形類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		double reVolume(){return 0;}
		Triangle(double b,double h)
		{
			data_1=b;
			data_2=h;
		} 
		void showData()
		{
			cout<<"三角形的底是:"<< data_1<<endl;
			cout<<"三角形的高是:"<< data_2<<endl;
		}
		double reArea()
		{
			area=(data_1*data_2)/2 ;
			cout<<"三角形的面積是:"<<area<<endl<<endl; 
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out); 
			save<<"0"<<endl;
			save<<"4"<<endl;
			save<<data_1<<endl;
			save<<data_2<<endl;
			save<<area<<endl;
		}
		int reflag()
		{
			flag=4;
			return flag;
		}
};
//三維派生
class Ball:public ThreeShape//球類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		Ball(double b)
		{
			data_1=b;
		} 
		void showData()
		{
			cout<<"球的半徑是:"<< data_1<<endl;
		}
		double reArea()
		{
			area=4*data_1*data_1;
			cout<<"球的面積是:"<< area<<endl;
		}
		double reVolume()
		{
			volume=(4/3)*data_1*data_1*data_1;
			cout<<"球的體積是:"<< volume<<endl<<endl;
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out); 
			save<<"0"<<endl;
			save<<"5"<<endl;
			save<< data_1<<endl;
			save<<area<<endl; 
			save<<area<<endl;
		}
		int reflag()
		{
			flag=5;
			return flag;
		}
};
class Cylider:public ThreeShape//圓柱類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		Cylider(double r,double h)
		{
			data_1=r;
			data_2=h;
		} 
		void showData()
		{
			cout<<"圓柱的底面半徑是:"<< data_1<<endl;
			cout<<"圓柱的高是:"<< data_2<<endl;
		}
		double reArea()
		{
			area=(2*3.14*data_1*data_1)+(2*3.14*data_1*data_2);
			cout<<"圓柱的面積是:"<< area <<endl;
		}
		double reVolume()
		{
			volume=3.14*data_1*data_1*data_2;
			cout<<"圓柱的體積是:"<< volume<<endl<<endl;
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out);
			save<<"0"<<endl; 
			save<<"6"<<endl;
			save<<data_1<<endl;
			save<<data_2<<endl;
			save<<area<<endl; 
			save<<area<<endl;
		}
		int reflag()
		{
			flag=6;
			return flag;
		}
};
class RectangularParallelepiped:public ThreeShape//長方體類
{
	private:
		double data_1;
		double data_2;
		double data_3;
		int flag;
	public:
		RectangularParallelepiped(double l,double w,double h) 
		{
			data_1=l;
			data_2=w;
			data_3=h;
		}
		void showData()
		{
			cout<<"長方體的長是:"<<data_1<<endl;
			cout<<"長方體的寬是:"<<data_2<<endl; 
			cout<<"長方體的高是:"<<data_3<<endl;
		}
		double reArea()
		{
			area=2*(data_1*data_2+data_1*data_3+data_2*data_3) ;
			cout<<"長方體的面積是:"<<area<<endl;
		} 
		double reVolume()
		{
			volume=data_1*data_2*data_3;
			cout<<"長方體的體積是:"<<volume<<endl<<endl; 
		}
		void saveData()
		{
			fstream save;
			save.open("E:\\game\\list.txt",ios::app|ios::out);
			save<<"0"<<endl;
			save<<"7"<<endl; 
			save<<data_1<<endl;
			save<<data_2<<endl;
			save<<data_3<<endl;
			save<<area<<endl; 
			save<<area<<endl;
		}
		int reflag()
		{
			flag=7;
			return flag;
		}
};

void creatlist(Shape * & head,int n)//創建鏈表
{ 
	int creat_judge=0;
	int creat_num=0;//創建節點數量
	Shape *move=NULL;
	Shape *p=NULL;//用於創建每個鏈表 
	for(creat_num=1;creat_num<=n;creat_num++)
	{
		cout<<"1 建立圓形的鏈表"<<endl<<"2 建立橢圓形的鏈表"<<endl<<"3 建立長方形的鏈表"<<endl<<"4 建立三角形的鏈表"<<endl<<"5 建立球體的鏈表"<<endl<<"6 建立圓柱體的鏈表"<<endl<<"7 建立長方體的鏈表"<<endl;
		cout<<"當每個圖形輸入數據爲0時退出!"<<endl;
		cout<<endl<<"請輸入你的選擇:";
		cin>>creat_judge;
		if(creat_judge==0)
		{
			cout<<"輸入錯誤,請從新輸入:"; 
			cin>> creat_judge;
		} 
		if(creat_judge==1)
		{
			double data;
			cout<<"請輸入半徑:";
			cin>>data;
			if(data==0)
			{
				return;
			}
			p=new Circle(data);
			p->reArea();
		}
		else if(creat_judge==2)
		{
			double data1;
			double data2;
			cout<<"請輸入長軸:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入短軸:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Elipse(data1,data2);
			p->reArea();
		}
		else if(creat_judge==3)
		{
			double data1;
			double data2;
			cout<<"請輸入長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入寬:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Rectangles(data1,data2);
			p->reArea();
		}
		else if(creat_judge==4)
		{
			double data1;
			double data2;
			cout<<"請輸入底邊:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Triangle(data1,data2);
			p->reArea();
		}
		else if(creat_judge==5)
		{
			double data1;
			cout<<"請輸入半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			p=new Ball(data1);
			p->reArea();
			p->reVolume(); 
		}
		else if(creat_judge==6)
		{
			double data1;
			double data2;
			cout<<"請輸入底面半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Cylider(data1,data2);
			p->reArea();
			p->reVolume();
		}
		else if(creat_judge==7)
		{
			double data1;
			double data2;
			double data3;
			cout<<"請輸入長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入寬:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data3;
			if(data3==0)
			{
				return; 
			}
			p=new RectangularParallelepiped(data1,data2,data3);
			p->reArea();
			p->reVolume();
		}
		p->next=NULL;
		if(head==NULL)
		{
			head=p;
			move=p;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);
			cout<<'\n'<<"第"<<creat_num<<"個鏈表創建成功!"<<'\n'<<endl;
			if(creat_num<n) 
			{
				cout<<"您現在正在創建第"<<(creat_num)+1<<"個鏈表"<<'\n'<<endl;
			} 
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
		}
		else
		{
			move->next=p;
			move=p;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);
			cout<<'\n'<<"第"<<creat_num<<"個鏈表創建成功!"<<'\n'<<endl;
			if(creat_num<n) 
			{
				cout<<"您現在正在創建第"<<(creat_num)+1<<"個鏈表"<<'\n'<<endl;
			} 
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); 
		}
	}
	
}

void browselist(Shape *head)//遍歷鏈表 
{
	if(head==NULL)
	{
		cout<<endl;
		cout<<"您還沒有建立鏈表呦~"<<endl<<endl;
		return; 
	} 
	Shape *browse=NULL;
	browse=head;
	while(browse!=NULL)
	{
		browse->showData();
		browse->reArea();
		browse->reVolume(); 
		browse=browse->next;
	}
	delete browse;
}
void insertlist(Shape * & head)//插入		第n個數據後插入數據 
{
	if(head==NULL)
	{
		cout<<endl;
		cout<<"您還沒有建立鏈表呦~"<<endl<<endl;
		return; 
	} 
	int insert_num;
	int select_num;
	int i; 
	Shape *p=NULL;
	Shape *judge=head;//判斷插入的合法性
	cout<<"在第__個鏈表後插入?"; 
	cin>>insert_num;
	for(i=2;i<=insert_num;i++)//判斷插入的合法性
	{
		judge=judge->next;
	}
	if(judge==NULL)
	{
		cout<<'\n'<<"不合法的插入!"<<endl;
  		return;
	}
	cout<<endl;
	cout<<"1 插入圓形的鏈表"<<endl<<"2 插入橢圓形的鏈表"<<endl<<"3 插入長方形的鏈表"<<endl<<"4 插入三角形的鏈表"<<endl<<"5 插入球體的鏈表"<<endl<<"6 插入圓柱體的鏈表"<<endl<<"7 插入長方體的鏈表"<<endl<<"當輸入數據爲0時退出!"<<endl;
	cout<<endl<<"請輸入你的選擇:";
	cin>>select_num;
	if(insert_num==0)//如果在頭結點插入 
	{
			if(select_num==1)
		{
			int data1;
			cout<<"請輸入半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			p=new Circle(data1);
			p->reArea();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==2)
		{
			int data1;
			int data2;
			cout<<"請輸入長軸:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入短軸:";
			cin>>data2; 
			if(data2==0)
			{
				return;
			}
			p=new Elipse(data1,data2);
			p->reArea();
			p->next=head;
			head=p;
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==3)
		{
			int data1;
			int data2;
			cout<<"請輸入長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入短寬:";
			cin>>data2; 
			if(data2==0)
			{
				return;
			}
			p=new Rectangles(data1,data2);
			p->reArea();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==4)
		{
			int data1;
			int data2;
			cout<<"請輸入底:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2; 
			if(data2==0)
			{
				return;
			}
			p=new Triangle(data1,data2);
			p->reArea();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==5)
		{
			int data1;
			cout<<"請輸入半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			p=new Ball(data1);
			p->reArea();
			p->reVolume();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==6)
		{
			int data1;
			int data2;
			cout<<"請輸入底面半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2; 
			if(data2==0)
			{
				return;
			}
			p=new Cylider(data1,data2);
			p->reArea();
			p->reVolume();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
			else if(select_num==6)
		{
			int data1;
			int data2;
			int data3; 
			cout<<"請輸入長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入寬:";
			cin>>data2; 
			if(data2==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data3; 
			if(data3==0)
			{
				return;
			}
			p=new RectangularParallelepiped(data1,data2,data3);
			p->reArea();
			p->reVolume();
			p->next=head;
			head=p;
			cout<<"數據成功插入!"<<endl;
		}
	}
	else//如果不在頭結點插入 
	{
		Shape *m;//用於指向到指定的鏈表位置 
		int i=0;//用於循環到指定的鏈表位置 
		m=head;
		for(i=1;i<insert_num;i++) 
		{
			m=m->next; 
		}
		if(select_num==1)
		{
			int data1;
			cout<<"請輸入半徑:";
			cin>>data1; 
			if(data1==0)
			{
				return;
			}
			p=new Circle(data1); 
			p->reArea();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
		else if(select_num==2)
		{
			int data1;
			int data2; 
			cout<<"請輸入長軸:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入短軸:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Elipse(data1,data2);
			p->reArea();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
		else if(select_num==3)
		{
			int data1;
			int data2; 
			cout<<"請輸入長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入寬:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Rectangles(data1,data2);
			p->reArea();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		}
		else if(select_num==4)
		{
			int data1;
			int data2; 
			cout<<"請輸入底:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Triangle(data1,data2);
			p->reArea();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
		else if(select_num==5)
		{
			int data1;
			cout<<"請輸入半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			p=new Ball(data1);
			p->reArea();
			p->reVolume();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
		else if(select_num==6)
		{
			int data1;
			int data2; 
			cout<<"請輸入底面半徑:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入高:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}
			p=new Cylider(data1,data2);
			p->reArea();
			p->reVolume();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
		else if(select_num==7)
		{
			int data1;
			int data2; 
			int data3; 
			cout<<"請輸入底面長:";
			cin>>data1;
			if(data1==0)
			{
				return;
			}
			cout<<"請輸入寬:";
			cin>>data2;
			if(data2==0)
			{
				return;
			}cout<<"請輸入高:";
			cin>>data3;
			if(data3==0)
			{
				return;
			}
			p=new RectangularParallelepiped(data1,data2,data3);
			p->reArea();
			p->reVolume();
			p->next=m->next; 
			m->next=p;
			cout<<"數據成功插入!"<<endl;
		} 
	} 
} 
void deletelist(Shape * & head)
{
	if(head==NULL)
	{
		cout<<endl;
		cout<<"您還沒有建立鏈表呦~"<<endl<<endl;
		return; 
	} 
	int delete_sel; //刪除節點的位置 
	int delete_num;//選擇刪除指定相同的節點 
	int j=0;//用於選擇刪除指定相同的節點 
	Shape *d,*e,*f;//用於指向到指定的鏈表位置的前一位 
	d=head;
	cout<<"1 刪除圓形的節點"<<endl<<"2 刪除橢圓形的節點"<<endl<<"3 刪除長方形的節點"<<endl<<"4 刪除三角形的節點"<<endl<<"5 刪除球體的節點"<<endl<<"6 刪除圓柱體的節點"<<endl<<"7 刪除長方體的節點"<<endl<<"當輸入數據爲0時退出!"<<endl;
	cout<<endl<<"請輸入你的選擇:"; 
	cin>>delete_sel;
	if(delete_sel>7)
	{
		cout<<"不合法輸入";
		return; 
	}
	cout<<"刪除此圖形的第幾個數據?"; 
	cin>> delete_num;
	for(j=0;j<delete_num;j++)
	{
		f=d; 
		for(;d->reflag()!=delete_sel;) 
		{
			f=d;
			d=d->next; 
		}
		if((j+1)!=delete_num)
		{d=d->next;}
	} 
	if(d==head)
	{
		head=head->next;
		delete d; 
		cout<<'\n'<<"刪除成功!"<<endl;
	}
	else
	{
		e=f->next;
		f->next=f->next->next;
		delete e; 
		cout<<'\n'<<"刪除成功!"<<endl;
	}
	/*if(delete_num==0)
	{
		cout<<"第1個節點纔是頭結點,請從新輸入:"; 
		cin>>delete_num;
	}
	else if(delete_num==1)
	{
		head=head->next;
		delete d; 
		cout<<'\n'<<"刪除成功!"<<endl; 
	}
	else if(delete_num>1 && delete_num<999)
	{
		for(j=2;j<delete_num;j++)
		{
			d=d->next; 
		}
		e=d->next;
		d->next=d->next->next;
		delete e; 
		cout<<'\n'<<"刪除成功!"<<endl; 
	}*/
}
void turnlist(Shape * & head)//翻轉鏈表
{
	if(head==NULL)
	{
		cout<<endl;
		cout<<"您還沒有建立鏈表呦~"<<endl<<endl;
		return;
	}
	Shape *t1=NULL;
	Shape *t2=NULL; 
	Shape *t3=NULL;//三個配合來翻轉
	t1=head;
	t2=t1->next;
	t3=t2->next;
	t1->next=NULL; 
	for(;t3!=NULL;)
	{
		t2->next=t1;
		t1=t2;
		t2=t3;
		t3=t3->next;
	} 
	if(t3==NULL)
	{
		t2->next=t1;
		delete t3;
		head=t2;
	}
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);
	cout<<'\n'<<"鏈表反轉成功!"<<'\n'<<endl;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN); 
} 
void savelist(Shape * & head)
{
	if(head==NULL)
	{
		cout<<endl;
		cout<<"您還沒有建立鏈表呦~"<<endl<<endl;
		return; 
	} 
	Shape *browse=head;
	while(browse!=NULL)
	{
		browse->saveData(); 
		browse=browse->next;
	}
	delete browse;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN | FOREGROUND_BLUE);
	cout<<endl<<"導出到文本成功!"<<endl<<endl; 
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
}
void readlist(Shape * & head)
{
	head=NULL;
	fstream read;
	read.open("E:\\game\\list.txt",ios::in);
	double m[9999];//文本數據存儲 
	int i,j;
	int judge;//只是個判斷,不用定義爲int 
	Shape *p=NULL;
	Shape *move=NULL; 
	for(i=0;!read.eof();i++)
	{
		read>>m[i];	
		//m[i+1]=0; 
	}   
	for(j=0;j<i-1;j++)
	{
		if(m[j]==0)	
		{ 
			if(m[j+1]==1)
			{
				double data1;
				data1=m[j+2];
				p=new Circle(data1); 
			}
			else if(m[j+1]==2)
			{
				double data1;
				double data2;
				data1=m[j+2];
				data2=m[j+3];
				p=new Elipse(data1,data2);
			}
			else if(m[j+1]==3)
			{
				double data1;
				double data2;
				data1=m[j+2];
				data2=m[j+3];
				p=new Rectangles(data1,data2);
			}
			else if(m[j+1]==4)
			{
				double data1;
				double data2;
				data1=m[j+2];
				data2=m[j+3];
				p=new Triangle(data1,data2);
			}
			else if(m[j+1]==5)
			{
				double data1;
				data1=m[j+2];
				p=new Ball(data1);
			}
			else if(m[j+1]==6)
			{
				double data1;
				double data2;
				data1=m[j+2];
				data2=m[j+3];
				p=new Cylider(data1,data2);
			}
			else if(m[j+1]==7)
			{
				double data1;
				double data2;
				double data3;
				data1=m[j+2];
				data2=m[j+3];
				p=new RectangularParallelepiped(data1,data2,data3);
			}
		} 
		//p->next=NULL;
		if(head==NULL)
		{
			head=p;
			//move=p;
		}
		else
		{
			move->next=p;
			//move=p;
			
		}
		move=p;
		p->next=NULL;
	}
}



int main()
{
	SetConsoleTitle("圖形鏈表錄入系統     CREATED BY 劉麒   2013.8");//設置標題
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |FOREGROUND_GREEN);
	int data_num;//鏈表個數
	int menu_sel;//菜單選擇 
	Shape *head=NULL;
	void creatlist(Shape * & head,int n);
	void browselist(Shape *head);
	void insertlist(Shape * & head);
	void deletelist(Shape * & head);
	void turnlist(Shape * & head);
	void savelist(Shape * & head);
	void readlist(Shape * & head);
	while(1) 
	{
		cout<<"■■■■■■■■■■■■■■" <<endl;
		cout<<"■1  創建鏈表		  ■"<<endl<<"■2  遍歷鏈表		  ■"<<endl<<"■3  插入鏈表		  ■"<<endl<<"■4  刪除鏈表		  ■"<<endl<<"■5  反轉鏈表		  ■"<<endl<<"■6  存儲鏈表到txt文件	  ■"<<endl<<"■7  查看鏈表文件	  ■"<<endl<<"■8  從txt文本中導入鏈表  ■"<<endl<<"■9  安全退出		  ■"<<endl;
		cout<<"■  !鏈表只可創建一次!  ■"<<endl; 
		cout<<"■■■■■■■■■■■■■■" <<endl;
		cout<<"請輸入你的選擇:"; 
		cin>>menu_sel; 
		//int showsystime();
		//showsystime();
		if(menu_sel==9)
		{
			return 0;
		} 
		else if(menu_sel==1)
		{
			if(head!=NULL)
			{
				cout<<endl<<"!鏈表只可創建一次!"<<endl<<"程序已退出!"<<endl;
				return 0;
			}
			cout<<"請輸入需要創建節點個數:"; 
			cin>>data_num;
			cout<<endl;
			if(data_num==0) 
			{
				cout<<"您沒有創建鏈表,程序退出!"<<endl; 
				return 0;
			}
			creatlist(head,data_num); 
		} 
		else if(menu_sel==2) 
		{
			browselist(head);
		}
		else if(menu_sel==3)
		{
			insertlist(head); 
		}
		else if(menu_sel==4)
		{
			deletelist(head); 
		}
		else if(menu_sel==5)
		{
			turnlist(head);
		}
		else if(menu_sel==6)
		{
			savelist(head);
		} 
		else if(menu_sel==7)
		{
			system("E:\\game\\list.txt"); 
		} 
		else if(menu_sel==8)
		{
			readlist(head);
		}
	} 
}




發佈了36 篇原創文章 · 獲贊 36 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章