标题:关于用链表方式实现对超市定价管理
只看楼主
丘汤媚
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-12-12
结帖率:25%
 问题点数:0 回复次数:7 
关于用链表方式实现对超市定价管理
#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;
        }
}
编译没问题,但是运行不出结果,求指教!
搜索更多相关主题的帖子: include double number return price 
2014-04-13 21:32
想飞更高的鸟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2014-4-9
得分:0 
亲,supermarket *creat(void)  函数里面的循环能跳出来吗 ??  个人见解,有什么问题再看看。好像输出的结果不如人愿,再看看吧
2014-04-14 11:23
丘汤媚
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-12-12
得分:0 
我改了一下,可是还不行啊
  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;
     }
2014-04-14 12:34
丘汤媚
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-12-12
得分:0 
谁能帮我改一下吗?
2014-04-14 12:39
想飞更高的鸟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2014-4-9
得分:0 
p1->num!=0中  p1->num不会等于零,当你新分配一个 p1=new supermarket;  空间时,p1->num 的值在这时是不确定的,不能判断等于0
2014-04-14 18:43
丘汤媚
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-12-12
得分:0 
可是我是输入了p1->num的值,才进行判断的
2014-04-14 21:57
想飞更高的鸟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2014-4-9
得分:0 
回复 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始终在屏幕上闪烁……………………
2014-04-15 21:07
想飞更高的鸟
Rank: 2
等 级:论坛游民
威 望:1
帖 子:11
专家分:31
注 册:2014-4-9
得分:0 
不好意思,是上次的回复,好像显示结果,不是先前输入的内容…………
2014-04-15 21:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430052-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.179771 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved