考虑下面的结构声明:
struct customer {
char fullname[35];
double payment;
};
编写一个程序,它从栈中添加和删除customer结构(栈用Stack类声明表示)。每次customer结构被删除时,其payment的值都被加入到总数中,并报告总数。注意:应该可以直接使用Stack类而不作修改;只需修改typedef声明,使Item的类型为customer,而不是unsigned long即可。
#ifndef STACK_H_
#define STACK_H_
struct custormer
{
char fullname[35];
double payment;
};
typedef custormer Item;
class Stack
{
public:
Stack();
bool isempty() const;
bool isfull() const;
bool push(const Item &item);
bool pop(Item &item);
private:
enum {MAX=10};
Item items[MAX];
int top;
};
#endif STACK_H_
//以上为头文件
#include <iostream>
#include "stack.h"
using namespace std;
Stack::Stack()
{
top=0;
}
bool Stack::isempty() const
{
return top==0;
}
bool Stack::isfull() const
{
return top==MAX;
}
bool Stack::push(const Item &item)
{
if (top<MAX)
{
items[top++]=item;
return true;
}
else return false;
}
bool Stack::pop(Item &item)
{
if (top>0)
{
item=items[--top];
return true;
}
else return false;
}
int main()
{
Stack st;
custormer cust;
double sum_payment=0;
char select;
cout<<"Select a (add),p(pop),q(quit)";
while (cin.get(select)&&select!='q')
{
while(cin.get()!='\n') continue;
if (select=='a')
{
cout<<"Enter a custormer's name:";
cin.getline(cust.fullname,35);
cout<<"Enter a custormer payment:";
cin>>cust.payment;
while(cin.get()!='\n') continue;
st.push(cust);
cout<<"Item pushed"<<endl;
}
if (select=='p')
{
st.pop(cust);
sum_payment=cust.payment+sum_payment;
cout<<"Pop item's info:"<<endl<<"Name:"<<cust.fullname<<endl;
cout<<"Payment: "<<cust.payment<<endl;
cout<<"Now,sum of payment:"<<sum_payment<<endl;
}
cout<<"Select a (add),p(pop),q(quit)";
}
cout<<"Bye"<<endl;
system("pause");
return 0;
}