}
};
classNode//此处Node定义为类,前面都是定义为struct,这个节点当中包含为上面定义
//的类的数据成员
{
private:
Object*Info;//定义类object的指针
Node*Prev,*Next;//定义节点类型的指针,一前一后
public:
Node(){Info=0;Prev=Next=0;}//定义的指针在构造函数中初始化为0
Node(Node&node)//定义拷贝的构造函数
{
Info=node.Info;
Prev=node.Prev;
Next=node.Next;
}
voidFillInfo(Object*obj){Info=obj;}
friendclassList;
};
classList
{
Node*Head,*Tail;
public:
List(){Tail=Head=0;}
~List(){DeleteList();}
voidAddNode(Node*);
Node*DeleteNode(Node*);
Node*LookUp(Object&);
voidShowList();
voidDeleteList();
voidInsertNode(Node*);
};
voidList:
:
AddNode(Node*node)
{
if(Head==0){
Head=Tail=node;
node->Next=node->Prev=0;
}
else{
Tail->Next=node;
node->Prev=Tail;
Tail=node;
node->Next=0;
}
}
Node*List:
:
DeleteNode(Node*node)
{
if(node==Head)
if(node==Tail)
Head=Tail=0;
else{
Head=node->Next;
Head->Prev=0;
}
else{
node->Prev->Next=node->Next;
if(node!
=Tail)node->Next->Prev=node->Prev;
elseTail=node->Prev;
}
node->Prev=node->Next=0;
return(node);
}
Node*List:
:
LookUp(Object&obj)
{
Node*pn=Head;
while(pn)
{
if(pn->Info->IsEqual(obj))returnpn;
pn=pn->Next;
}
return0;
}
voidList:
:
ShowList()
{
Node*p=Head;
while(p)
{
p->Info->Show();
p=p->Next;
}
}
voidList:
:
DeleteList()
{
Node*p,*q;
p=Head;
while(p)
{
deletep->Info;
q=p;
p=p->Next;
deleteq;
}
}
voidList:
:
InsertNode(Node*p)
{
Node*pn=Head,*p1;
if(Head==0)//空表
{
Head=Tail=p;
Head->Next=Tail->Prev=0;
return;
}
if(Head->Info->IsBigger(p->Info))//小于头节点
{
p->Next=Head;
Head->Prev=p;
Head=p;
return;
}
pn=p1=Head;
while(pn->Next&&pn->Info->IsBigger(p->Info)==0)//寻找插入位置
{
p1=pn;pn=pn->Next;
}
if(pn->Info->IsBigger(p->Info)==0)//最末尾
{
Tail->Next=p;
p->Prev=Tail;
Tail=p;
p->Next=0;//注意
}
else//一般情况//插入p1和pn之间
{
p->Prev=p1;
p1->Next=p;
pn->Prev=p;
p->Next=pn;
}
}
voidmain()
{
IntObj*p;
Node*pn,*pt,node;
Listlist;
char*name[]={"jack","tom","john","mary","Sun"};
char*address[]={"sh","bj","nj","sz","gz"};
for(inti=1;i<6;i++)
{
p=newIntObj(name[i-1],address[i-1],6-i+100);
pn=newNode;
pn->FillInfo(p);
list.InsertNode(pn);
}
list.ShowList();
cout<<"\n";
IntObjda;
da.SetData("tom","bj",104);
pn=list.LookUp(da);
if(pn)pt=list.DeleteNode(pn);
list.ShowList();
cout<<"\n";
if(pn)list.InsertNode(pt);
list.ShowList();
cout<<"\n";
}
/*1.name本来指向另一个字符串,它开辟的空间长度需要人为改变,赋新的值之前要删除原
有空间,重新开辟.
*/
/*
编写一个程序,输入N个学生数据,包括学号、姓名、C++成绩,
要求输出这些学生的数据、平均分与成绩等级。
提示:
设计一个学生类Stud,除了包括id(学号)、name(姓名)和C(成绩)数据成员外,
还有两个静态成员数据sum和num,分别存放总分和人数,
另有两个普通成员函数setdata()和print(),分别用于给数据成员赋值和输出数据成员的值,
另有一个静态成员函数avg(),它用于计算平均分,并输出平均分。
同时设计一个友元函数,输出成绩对应的等级:
大于等于90:
优;80~90:
良;70~79:
中;60~69:
及格;小于60:
不及格。
在main()函数中定义了一个对象数组用于存储输入的学生数据,设计一个完整的程序。
*/
#include"stdio.h"
#include"iostream.h"
#include"string.h"
classStud
{
intid;
char*name;
intcpp;
public:
staticfloatsum,num;//定义两个静态成员数据,数值需要不断累加的sum,可以定义
//为静态,使每次修改的值都可以被保留,相对地,定义它的静态成员函数
Stud()
{
name=NULL;
num++;
};
~Stud()
{
if(name)delete[]name;
num--;
};
voidsetdata(char*s,intm_id,intm_cpp);
voidprint();
staticfloatavg();
friendvoidprintgrade(Stud&stu);//按题目要求,定义友元函数输出,可以
//访问类的任何成员
};
floatStud:
:
sum=0;//定义静态变量,原型说明和定义型说明
floatStud:
:
num=0;
voidStud:
:
setdata(char*s,intm_id,intm_cpp)
{
name=newchar[strlen(s)+1];
strcpy(name,s);
id=m_id;
cpp=m_cpp;
sum+=cpp;
}
floatStud:
:
avg()//静态函数的定义型说明,此时不用加static对函数进行原型说明
{
floatres;
if(num>0)res=sum/num;
elsecout<<"没有学生对象!
";
returnres;
}
voidStud:
:
print()
{
cout<<"学号:
"<"<"<}
voidprintgrade(Stud&stu)
{
//cout<<"学号"<";
cout<<"C++成绩等级:
";
if(stu.cpp>=90)cout<<"优"<elseif(stu.cpp>=80)cout<<"良"<elseif(stu.cpp>=70)cout<<"中"<elseif(stu.cpp>=70)cout<<"中"<elseif(stu.cpp>=60)cout<<"及格"<elsecout<<"不及格"<}
voidmain()
{
inti,n;
charname[100];
intid,cpp;
cout<<"请输入学生个数:
";
cin>>n;
Stud*pstu=newStud[n];
for(i=0;i{
cout<<"请分别输入学号,姓名和C++成绩";
cin>>id>>name>>cpp;
pstu[i].setdata(name,id,cpp);
}
for(i=0;icout<:
num<<"个学生平均分:
"<:
avg()<}
/*
1.实现描述超市的的类Suppermacket类,记录系统中现有商品(用指针实现),定义增加商品的函数Append,删除商品的函数Delete,查询商品的函数Query,
并显示查询结果;
2.定义商品类Goods,具有商品名称Name,商品价格Price,商品数量number等属性,操作Sale(销售商品,余额不足时给予提示)、Add(商品上架操作)
和ShowMe(显示商品信息)。
3.编写main函数,测试以上所要求的各种功能,完成商品的增加、删除和查询商品,以及商品销售和商品上架的操作。
4.可以利用对象成员来实现。
*/
#include
#include
classSuppermacket;
classGoods{
floatPrice;
intnumber;
charName[10];
public:
Goods(){Add();};
vo