如何制作一个计算我所订单总数并增加价格的功能?

时间:2012-03-30 00:07:13

标签: c

我提示用户是否要订购鱼,一旦他们订购了鱼,他们被要求订购薯片,然后喝。一旦饮料完成,我需要总共所有价格,然后我需要列出它们。

问题是,我不知道如何“统计”所有总数。我如何编写一个函数来计算小计?

我的程序获取subTotal的方式是:

subTotal(typeOfFood, foodChoice, foodSize, foodOrders);

在我的小计函数中,根据他们选择的食物类型,它只有subtotal+= $x.xx

我尝试制作这样的函数:

float accumTotal(int total){     float finalTotal;     finalTotal + =总数;     return finalTotal; }

但这没效果。

我的proglram的

OUTPUT

Do you order FISH (Y/N)? y
Fish choice (K- Haddock, T- Halibut): t
What size (L-Large, M-Medium, S-Small): l
How many orders do you want? (>=0): 2
You ordered: [fish]: [Halibut], Size: [Large], ordered: [2], subtotal: [8.00]

Do you order FISH (Y/N)? y
Fish choice (K- Haddock, T- Halibut): t
What size (L-Large, M-Medium, S-Small): s
How many orders do you want? (>=0): 2
You ordered: [fish]: [Halibut], Size: [Small], ordered: [2], subtotal: [4.80]

Do you order FISH (Y/N)? n

Do you order CHIPS (Y/N)? y
Chips choice (C- Cut, R- Rings): r
What size (L-Large, M-Medium, S-Small): m
How many orders do you want? (>=0): 5
You ordered: [chips]: [Ring], Size: [Medium], ordered: [5], subtotal: [12.00]

Do you order CHIPS (Y/N)? n

Do you order DRINKS (Y/N)? n
============================
ACCUMULATIVE TOTAL = $x.xx

消息来源:虽然不是真的必要

#include <stdio.h>
#include <string.h>
int processing(char *typeOfFood, char foodChoice, char foodSize, int foodOrders);
float subTotal(char *typeOfFood, char foodChoice, char foodSize, int foodOrders);
float accumTotal(int total);

float subTotal(char *typeOfFood, char foodChoice, char foodSize, int foodOrders) {

    float subTotal = 0;

    if ((strcmp(typeOfFood, "fish")) == 0) {
        if (foodChoice == 'k' || foodChoice == 'K') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 3.00;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 4.00;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 5.00;
            }
        }
        else if (foodChoice == 't' || foodChoice == 'T') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 2.40;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 3.20;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 4.00;
            }
        }
    }
    if ((strcmp(typeOfFood, "chips")) == 0) {
        if (foodChoice == 'c' || foodChoice == 'C') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 1.20;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 1.60;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 2.00;
            }
        }
        else if (foodChoice == 'r' || foodChoice == 'R') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 1.80;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 2.40;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 3.00;
            }
        }
    }
    if ((strcmp(typeOfFood, "drink")) == 0) {
        if (foodChoice == 's' || foodChoice == 'S') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 1.20;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 1.60;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 2.00;
            }
        }
        else if (foodChoice == 'c' || foodChoice == 'C') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 1.05;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 1.40;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 1.75;
            }
        }
        else if (foodChoice == 't' || foodChoice == 'T') {
            if (foodSize == 's' || foodSize == 'S') {
                subTotal += 0.90;
            }
            else if (foodSize == 'm' || foodSize == 'M') {
                subTotal += 1.20;
            }
            else if (foodSize == 'l' || foodSize == 'L'){
                subTotal += 1.50;
            }
        }
    } // ifs

    subTotal = subTotal * foodOrders;
    return subTotal;

}

float accumTotal(int total) {

    // float finalTotal;

    // finalTotal += total;
    // printf("[%lf]", finalTotal);
    // return finalTotal;
}

int processing(char *typeOfFood, char foodChoice, char foodSize, int foodOrders){

    char *foodSizeSelect, *foodChoiceSelect;
    float total = subTotal(typeOfFood, foodChoice, foodSize, foodOrders);

    if ((strcmp(typeOfFood, "fish")) == 0){
        switch (foodChoice) {
            case 'k':
                foodChoiceSelect = "Haddock";
            break;
            case 'K':
                foodChoiceSelect = "Haddock";
            break;
            case 't':
                foodChoiceSelect = "Halibut";
            break;
            case 'T':
                foodChoiceSelect = "Halibut";
            break;
        }
    }
    else if ((strcmp(typeOfFood, "chips")) == 0){
        switch (foodChoice) {
            case 'c':
                foodChoiceSelect = "Cut";
            break;
            case 'C':
                foodChoiceSelect = "Cut";
            break;
            case 'r':
                foodChoiceSelect = "Ring";
            break;
            case 'R':
                foodChoiceSelect = "Ring";
            break;
        }
    }
    else if ((strcmp(typeOfFood, "drinks")) == 0){
        switch (foodChoice) {
            case 's':
                foodChoiceSelect = "Softdrink";
            break;
            case 'S':
                foodChoiceSelect = "Softdrink";
            break;
            case 'c':
                foodChoiceSelect = "Coffee";
            break;
            case 'C':
                foodChoiceSelect = "Coffee";
            break;
            case 't':
                foodChoiceSelect = "Tea";
            break;
            case 'T':
                foodChoiceSelect = "Tea";
            break;
        }
    }
    switch (foodSize) {
        case 's':
            foodSizeSelect = "Small";
        break;
        case 'S':
            foodSizeSelect = "Small";
        break;
        case 'm':
            foodSizeSelect = "Medium";
        break;
        case 'M':
            foodSizeSelect = "Medium";
        break;
        case 'l':
            foodSizeSelect = "Large";
        break;
        case 'L':
            foodSizeSelect = "Large";
        break;
    }

    printf("You ordered: [%s]: [%s], Size: [%s], ordered: [%d], subtotal: [%.2lf]\n\n", typeOfFood, foodChoiceSelect, foodSizeSelect, foodOrders, total);

}

int main() {

    char fishYesNo, chipsYesNo, drinksYesNo;
    char fishChoice, fishSize; int fishOrders;
    char chipsChoice, chipsSize; int chipsOrders;
    char drinksChoice, drinksSize; int drinksOrders;

    char *typeOfFood;

    do {
        typeOfFood = "fish";
        printf("Do you order FISH (Y/N)? ");
        scanf(" %c", &fishYesNo);
        if (fishYesNo != 'n' || fishYesNo != 'n') {
            printf("Fish choice (K- Haddock, T- Halibut): ");
                scanf(" %c", &fishChoice);
            printf("What size (L-Large, M-Medium, S-Small): ");
                scanf(" %c", &fishSize);
            printf("How many orders do you want? (>=0): ");
                scanf("%d", &fishOrders);
            processing(typeOfFood, fishChoice, fishSize, fishOrders);
        }
        else if (fishYesNo == 'n' || fishYesNo == 'N') {
            typeOfFood = "chips";
        }

    } while ((strcmp(typeOfFood, "fish")) == 0);

    do {
    typeOfFood = "chips";
        printf("Do you order CHIPS (Y/N)? ");
        scanf(" %c", &chipsYesNo);
        if (chipsYesNo != 'n') {
            printf("Chips choice (C- Cut, R- Rings): ");
                scanf(" %c", &chipsChoice);
            printf("What size (L-Large, M-Medium, S-Small): ");
                scanf(" %c", &chipsSize);
            printf("How many orders do you want? (>=0): ");
                scanf("%d", &chipsOrders);
            processing(typeOfFood, chipsChoice, chipsSize, chipsOrders);
        }
        else if (chipsYesNo == 'n' || chipsYesNo == 'N') {
            typeOfFood = "drinks";
        }

    } while ((strcmp(typeOfFood, "chips")) == 0);

    do {
    typeOfFood = "drinks";
        printf("Do you order DRINKS (Y/N)? ");
        scanf(" %c", &drinksYesNo);
        if (drinksYesNo != 'n') {
            printf("Drinks choice (S- Softdrink, C- Coffee, T- Tea): ");
                scanf(" %c", &drinksChoice);
            printf("What size (L-Large, M-Medium, S-Small): ");
                scanf(" %c", &drinksSize);
            printf("How many orders do you want? (>=0): ");
                scanf("%d", &drinksOrders);
            processing(typeOfFood, drinksChoice, drinksSize, drinksOrders);
        }
        else if (drinksYesNo == 'n' || drinksYesNo == 'N') {

        }

    } while ((strcmp(typeOfFood, "drinks")) == 0);

}

1 个答案:

答案 0 :(得分:3)

您需要的是一个跟踪变量来记录运行总计:

void processing(char *typeOfFood, char foodChoice, char foodSize, int foodOrders, float *subTotal)
{
    ...
    printf("You ordered: [%s]: [%s], Size: [%s], ordered: [%d], subtotal: [%.2lf]\n\n", typeOfFood, foodChoiceSelect, foodSizeSelect, foodOrders, total);
    *subTotal += total; // add to the total.
}

int main () {
   ...
   char *typeOfFood;
   float subTotal = 0.0f;
   ...

   ...
   // for each call to 'processing'
   processing(typeOfFood, fishChoice, fishSize, fishOrders, &subTotal);
   ...

   ...
   // when the drinks are done:
   else if (drinksYesNo == 'n' || drinksYesNo == 'N') {
        printf("your bill totals to $%.2f", subTotal);
        break;   // note the added 'break' so that the program exits.
   }    
   ...
}