使用类和指针从单独的文件中查找最大价格

时间:2018-02-10 04:49:24

标签: c++ class pointers switch-statement swap

这是家庭作业

所以这是一个工作正常的功能。我必须从文件中找到最昂贵的汽车并将其打印到终端。我将发布我的功能并澄清下面的内容。

以下是文件的格式化方式

赫兹93619

2014年丰田塔科马115.12 1

2012年本田CRV 85.10 0

2015 Ford Fusion 90.89 0

2013 GMC Yukon 110.43 0

2009 Dodge Neon 45.25 1

Alamo 89502

2011丰田Rav4 65.02 1

2012年马自达CX5 120.75 1

2016斯巴鲁傲虎71.27 0

2015福特F150 112.83 1

2010 Toyota Corolla 50.36 1

预算93035

2008福特嘉年华42.48 0

2009 Dodge Charger 55.36 1

2012 Chevy Volt 89.03 0

2007 Subaru Legacy 59.19 0

2010 Nissan Maxima 51.68 1

void mostExpense(Agency *agencyptr)
{
float largest = 0.0f;
int agencyPosition = 0;
int carPosition = 0;

Car *carptr = agencyptr -> inventory;

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if ((carptr -> getPrice()) > largest)
        {
            largest = carptr -> getPrice();
            agencyPosition = i + 1;
            carPosition = j + 1;
        }
        carptr++;
    }
    agencyptr++;
    carptr = agencyptr -> inventory;
}

switch (agencyPosition)
{
    case 1:
        agencyptr--; agencyptr--; agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
    case 2:
        agencyptr--; agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
    case 3:
        agencyptr--;
        carptr = agencyptr -> inventory;
        switch (carPosition)
        {
            case 1:
                carptr -> print();
                break;
            case 2:
                carptr++;
                carptr -> print();
                break;
            case 3:
                carptr++; carptr++;
                carptr -> print();
                break;
            case 4:
                carptr++; carptr++; carptr++;
                carptr -> print();
                break;
            case 5:
                carptr++; carptr++; carptr++; carptr++;
                carptr -> print();
                break;
        }
        break;
}
}

因此,我对我的项目所拥有的是,我们有3家不同的公司提供汽车租赁服务。每家公司有5辆汽车。我现在所拥有的工作,但它是多余的,它是近200行代码。我遇到的主要问题是我的switch语句。我有3种不同的情况(每个用于3个汽车租赁场所),我首先从最后一个租车场开始。然后我通过每一辆车找到价格。我这样做了3次迭代,我的if功能测试汽车价格相互之间,然后最终打印出最昂贵的汽车。我想要做的是使用switch语句更改我的过程。我该怎么做才能使这个功能更短但仍能提供相同的输出。我已经尝试了很多东西,但这是唯一真正有效的东西,而且我希望有更短的东西,所以当我将来做类似的项目时,我没有近1000行代码一个文件做一些应该相当简单的事情。

任何帮助将不胜感激!

如果需要澄清,请在评论中告诉我。

价格在品牌和型号之后

0和1是真/假(如果汽车可用或不可用)

1 个答案:

答案 0 :(得分:1)

似乎您可以将agencyPosition切换案例减少为单个减法。首先确保agencyPosition为1或2或3.然后从agencyPtr中减去4 - agencyPosition。

注意:4-1 = 3,4-2 = 2,4-3 = 1.

if (agencyPosition >= 1 and agencyPosition <= 3) {
    agencyPtr -= 4 - agencyPosition;
    carptr = agencyptr -> inventory;
    switch (carPosition)
    // Everything else remains the same.
}