注册 登录
编程论坛 VC++/MFC

关于用链表方式实现对超市定价管理

丘汤媚 发布于 2014-04-13 21:32, 776 次点击
#include<iostream>
#include<string>
using namespace std;
struct supermarket
{int num;string name;double price_trade;int pre_days;double price_retail;int count;supermarket *next;};
supermarket *creat(void);
void sum(supermarket *,int);
int n;
int main()
{
    char c;
    int number;
    bool prime=true;
    supermarket *head,*q;
    cout<<"calculate retail price(y).exit program(n)."<<endl;
    cin>>c;
    if(c=='y'|| c=='Y')
        head=creat();      
    else return 0;
    while(prime)
    {
        cin>>number;
        sum(head,number);
        cout<<"continue or not?"<<endl;
        cin>>c;
        if(c=='y'|| c=='Y')
            prime=true;
        else prime=false;
    }
    q=head;
    cout<<"商品的销售情况:"<<endl;
    while(head!=0&&q!=0)
    {
        cout<<q->num<<' '<<q->name<<' '<<q->price_retail<<q->count;
        q=q->next;
    }
    return 0;
}

   
supermarket *creat(void)
{
    supermarket *head,*p1,*p2;
    n=0;
    p1=p2=new supermarket;
    cout<<"请输入各个商品的编号,名称,批发价,预售天数:"<<endl;
    cin>>p1->num>>p1->name>>p1->price_trade>>p1->pre_days;
    p1->price_retail=p1->price_trade+p1->pre_days/4;
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else p2->next=p1;
        p2=p1;
        p1=new supermarket;
        p1->price_retail=p1->price_trade+p1->pre_days/4;
    }
    p2->next=NULL;
    return head;
}

void sum(supermarket *head,int n)
{
    supermarket *p;  
    p=head;
    p->count=0;
    if(head!=NULL)
        while(p!=NULL)
        {
            if(p->num==n)
            {p->count=p->count+1;break;}
             p=p->next;
        }
}
编译没问题,但是运行不出结果,求指教!
7 回复
#2
想飞更高的鸟2014-04-14 11:23
亲,supermarket *creat(void)  函数里面的循环能跳出来吗 ??  个人见解,有什么问题再看看。好像输出的结果不如人愿,再看看吧
#3
丘汤媚2014-04-14 12:34
我改了一下,可是还不行啊
  while(p1->num!=0)
     {
         n=n+1;
         if(n==1)
             head=p1;
         else p2->next=p1;
         p2=p1;
         p1->price_retail=p1->price_trade+p1->pre_days/4;
         p1=new supermarket;
         cin>>p1->num>>p1->name>>p1->price_trade>>p1->pre_days;
     }
#4
丘汤媚2014-04-14 12:39
谁能帮我改一下吗?
#5
想飞更高的鸟2014-04-14 18:43
p1->num!=0中  p1->num不会等于零,当你新分配一个 p1=new supermarket;  空间时,p1->num 的值在这时是不确定的,不能判断等于0
#6
丘汤媚2014-04-14 21:57
可是我是输入了p1->num的值,才进行判断的
#7
想飞更高的鸟2014-04-15 21:07
回复 6 楼 丘汤媚
while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else p2->next=p1;
        p2=p1;
        p1=new supermarket;
        p1->price_retail=p1->price_trade+p1->pre_days/4;
    }
第一次判断p1->num 是你输入的值,能进入循环,再看第一遍运行到   p1=new supermarket;   时, p1->num  的值没有了,因为你新分配了一个supermarket大小空间时,在第一步循环运行完,并未对p1->num复制输入 ,开始进行第二遍循环时 p1->num 这个时候是一个乱码,就不能跳出,你可以在这个循环里做一下输出看一下;
while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else p2->next=p1;
        p2=p1;
        p1=new supermarket;
        p1->price_retail=p1->price_trade+p1->pre_days/4;
        cout<<"1+1";
    }
就会知道1+1始终在屏幕上闪烁……………………
#8
想飞更高的鸟2014-04-15 21:11
不好意思,是上次的回复,好像显示结果,不是先前输入的内容…………
1