-3

我有一个带有优先队列和常规队列的项目。我需要使用优先级队列按从最小到最大的 ID 组织产品。

然后使用常规队列,我需要将它们分为 3 类:(库存过剩、库存不足、在限制范围内);所以输出应该是这样的:

库存不足

14887 10 美元 14

15678 $1 298

积压

12565 4 539 美元

18967 美元 12 401

限额内库存

19847 2 220 美元

我写了这段代码,但有些东西我不确定,我的输出看起来像:

积压

12565 4 539 美元

库存不足

14887 10 美元 14

库存不足

15678 $1 298

积压

18967 美元 12 401

StockWithInLimits

19847 2 220 美元

int main() 
{ 
    ifstream inFile; // file containing operations 
    ofstream outFile; // file containing output 
    string inFileName = "product.txt"; 
    string outFileName = "result.txt"; 
    inFile.open (inFileName.c_str()); 
    outFile.open (outFileName.c_str()); 
    ItemType item;//declare a temp item that trows into pQue 
    PQType<ItemType> pqueue(50);//priority queue that sorts items by ID 
    QueueADT <ItemType> que; 
    QueueADT <ItemType> lowQ;
    QueueADT <ItemType> highQ;
    QueueADT <ItemType> withinQ;

    while ( item.readProduct (inFile) ) 
    { 
        pqueue.Enqueue(item); 

    } 

    while (!pqueue.IsEmpty()) 
    { 
        pqueue.Dequeue (item); 
        int tempcurinvent = item.getcurrentInventory (); 
        int tempmax = item.getMax (); 
        int tempmin =item.getMin (); 

    if ((tempcurinvent < tempmin) && (tempcurinvent < tempmax))//UnderStock 
        {
            lowQ.Enqueue (item);
        }

if ((tempcurinvent < tempmax) && ( tempcurinvent  > tempmin)) //WithINLimits
        { 
            withinQ.Enqueue (item);
        } 
else if ((tempcurinvent > tempmin) && (tempcurinvent > tempmax))//OverStock 
        { 
            highQ.Enqueue (item);
        }
        outFile << "UnderStock" << endl;
        item.printProduct (outFile);
        lowQ.Dequeue (item);

        outFile << "WithINLimits:" << endl;
        item.printProduct (outFile); 
        withinQ.Dequeue (item);

        outFile << "OverStock" << endl; 
        item.printProduct (outFile); 
        highQ.Dequeue (item);

    }

    inFile.close (); 
    outFile.close (); 



  return 0; 
} 
4

2 回答 2

0

优先级队列的奇怪用途,但我想这是要求。

(1) 你把所有东西都放在 pqueue 中。那挺好的。然后,您应该清空 pqueue 并使用 under/over/within 逻辑将项目放入三个常规队列之一。然后读取每个队列(首先打印标题“over”,“under”,“within”)并将它们打印出来。

(2)

QueueADT <int> que;

que.Enqueue (n);

看起来不对。为什么要排队 int 而不是 item?为什么你有一个队列而不是三个?这也适用于 que.Deque(n) 语句。

(3) 你真的不需要复合 IF 语句。据推测,如果某物低于最小值,它也低于最大值。

所以像

 if belowMin
     put in lowQ
     readagain

 if aboveMax
     put in highQ
     readagain

 put in withinQ

还要小心确保您想要 item < max 而不是 item <= max,具体取决于规范所说的内容。

编辑

这些需要在当前的while循环之外:

outFile << "UnderStock" << endl;
while (!lowQ.IsEmpty())
{
    lowQ.Dequeue (item);
    item.printProduct (outFile);
}

outFile << "WithINLimits:" << endl;
while (!withinQ.IsEmpty())
{
    withinQ.Dequeue (item);
    item.printProduct (outFile);
}

outFile << "Overstock:" << endl;
while (!highQ.IsEmpty())
{
    highQ.Dequeue (item);
    item.printProduct (outFile);
}
于 2012-05-06T03:33:29.007 回答
-1
include<iostream.h>
#include<conio.h>

#define g_per_f 7.481

void main(void)
{
    cout<<"### Programmed By Amahdy(MrJava) ,right restricted.~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
    cout<<"-------------------------------------------------------------------------------\n\n";

    float n_gallons;

    do{
        cout<<"Enter the number of gallons  : \xdb\t";
        cin >>n_gallons;
        cout<<"The equivalent in cubic feet : \xdb\t"<<n_gallons / 
            g_per_f<<endl;
        cout<<"\n !Press c to continue or any key to exit."<<endl<<endl;
    } while(getch()=='c');
}
于 2018-03-04T09:22:59.177 回答