开发者

How to display stored information?

It took me a good 2 weeks to get my program to work as it should but I decided to alter it but I need some help,the idea looks good in my head but when its time to code it I don't know where to start :(. I want the user of the program to input their licence plate number then at the end of the day the admin should be able to see all licence plate number of each customer and their total like this

Customer 1 A1546 $20

And I would like it to work in the opposite way, the admin should be able to type the licence plate number and the info should be displayed.I have been thinking of ways to do this and the only way I think might work is by saving all the info in a file then the program reads the file and displays it? Any help would be truly appreciated. Code below:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

/*Global Declarations*/
char chContinue = 'Y';
int Continue = 1;
int  Total=1;

//************************************
//********DISCOUNT FUNCTION************
//************************************
int calculateDiscount(Total) {

    char type;
    int  Total1;
    int Discount;

    printf("\nDo you have a pilot's licence?(Y/N)\n");
    scanf("%c", &type);
    while( getchar() != '\n' ) ;

    if(type == 'Y' || type == 'y') {
    Discount = Total * 0.1;
    Total1= Total - Discount;
        printf("\nYou are eligible for a discount\nYour new price is %d ^_^",Total1);
    }

    if(type == 'N' || type == 'n') {
        printf("Thank you for parking here,please submit this ticket when leaving the compound");
    }
    return 0;
}


//************************************
//********LOOP Function****************
//************************************
void Lo_op (count,Total) {
    //char chContinue;
    char arrayname[6];
    int  Total2;
    //int Continue=0;

    printf("\nDo you wish to continue? (Y/N) ");
    scanf("%c", &chContinue);
    while( getchar() != '\n' ) ;


    if (chContinue == 'Y'|| chContinue == 'y' ) {
        Continue = 1;
    }
     else if (chContinue == 'N'|| chContinue == 'n' ) {
        printf("enter pass\n");
        scanf("%s", arrayname);
        strcmp(arrayname,"admin");
        printf ("\n>>>Welcome Administrator!<<<\nWhat would you like to do?");
    /*  printf("\n =========MENU===================\n| ");
    printf(" A) Display Total People Parked Today| \n| ");
    printf(" B) Display Today's Total            | \n| ");
    printf(" C) Exit Program                     | \n| ");
    printf("======================================\n\n"); */
        Continue = 2;
    }
    else {
        printf("Invalid input!\n");
    }

}


//************************************
//********Print Time Rates Function*****
//************************************
void Print_time () {

    printf("\n(Choose a letter corresponding with your choice)\nHow long will you be parking at our facility?\n ");
    printf("\n =========MENU===============\n| ");
    printf(" A) 30 mins               | \n| ");
    printf(" B) 1 hour                | \n| ");
    printf(" C) 2 hours               | \n| ");
    printf(" D) 5 hours               | \n| ");
    printf(" E) 1 Day                 | \n| ");
    printf(" F) Greater than 1 Day    | \n| ");
    printf("==========================\n\n");

}

//************************************
//********Print Choices For Cars********
//************************************
void  Print_carlist () {

    printf("\nChoose your type of vehicle\n===========================\n| ");
    printf("  1)Car                  |\n| ");
    printf("  2)SUV                  |\n| ");
    printf("  3)Bus                  |\n| ");
    printf("  4)Truck                |\n===========================\n\n");

}

//************************************
//********The main function.************
//***Decide Calculate and Display*******
//************************************

int main() {

    char choice;
    int Total=1, vehicle, /*Discount*/ count=1; //, Continue = 0;
    int Rate_A = 2, Rate_B = 4, Rate_C = 6, Rate_D = 8, Rate_E = 10, Rate_F = 12;
    int Car_rate = 1, Suv_rate = 2, Bus_rate = 3, Truck_rate = 4;
    time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    printf ( "The current date/time is: %s", asctime (timeinfo) );


    printf("HELLO AND WELCOME TO THE AUTOMATED PARKING TICKETING SYSTEM\n\nPLEASE FOLLOW THE INSTRUCTIONS ON THE SCREEN\n");
    //Rates(); //Here the function is called.
         srand(time(NULL));
    while (Continue == 1) {

        printf("\n                       You are parker number %d\n ",count);
        Print_time ();
        scanf("%c",&choice);
        while( getchar() != '\n' ) ;

        switch (choice) {
        case 'A':
           Print_carlist();
                scanf("%d",&vehicle);
            while( getchar() != '\n' ) ; /* flush stdin ... */




          if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
               printf("Please follow instructions  \n");
            }

           if(vehicle == 1) {
                printf("You are parking your Car for 30 mins.\n");
                Total = Rate_A * Car_rate;
                    printf("------------------------------\nYour receipt number is A#%d\n", rand()); //generates random number for receipt
                printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                count=count+1;
                 Total=Total+1;

            }

                if(vehicle == 2) {
                    printf("You are parking your SUV for 30 mins.\n");
               Total = Rate_A * Suv_rate;
                    printf("------------------------------\nYour receipt number is A#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
          count=count+1;
          Total=Total+1;
                }

           if(vehicle == 3) {
                printf("You are parking your Bus for 30 mins.\n");
                Total = Rate_A * Bus_rate;
                    printf("------------------------------\nYour receipt number is A#%d\n", rand());
                    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     count=count+1;
                      Total=Total+1;
                }

            if(vehicle == 4) {
                    printf("You are parking your Truck for 30 mins.\n");
                    Total= Rate_A * Truck_rate;
                    printf("------------------------------\nYour receipt number is A#%d\n", rand());
                    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                    count=count+1;
                    Total=Total+1;
                }

                Lo_op (count,Total);


                break;

            case 'B':
                Print_carlist();
                scanf("%d", &vehicle);
            while( getchar() != '\n' ) ; /* flush stdin ... */


            if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
                    printf("Please follow instructions  \n");
            }

                if(vehicle == 1) {
                    printf("You are parking your Car for 1 hour.\n");
                    Total = Rate_B * Car_rate;
                    printf("------------------------------\nYour receipt number is B#%d\n", rand());
                    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                   count=count+1;
                   Total=Total+1;
                }

            if(vehicle == 2) {
                    printf("You are parking your SUV for 1 hour.\n");
                    Total = Rate_B * Suv_rate;
                    printf("------------------------------\nYour receipt number is B#%d\n", rand());
                    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                   count=count+1;
                   Total=Total+1;
                }

                if(vehicle == 3) {
                    printf("You are parking your Bus for 1 hour.\n");
                    Total = Rate_B * Bus_rate;
                printf("------------------------------\nYour receipt number is B#%d\n", rand());
                printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                  count=count+1;
                   Total=Total+1;
            }

            if(vehicle == 4) {
                    printf("You are parking your Truck for 1 hour.\n");
                    Total=Rate_B*Truck_rate;
                    printf("------------------------------\nYour receipt number is B#%d\n", rand());
                    printf("You're total is %d",Total);
                    count=count+1;
                     Total=Total+1;
                }
               Lo_op ();
                break;

            case 'C':
                Print_carlist();
                scanf("%d",&vehicle);
            while( getchar() != '\n' ) ; /* flush stdin ... */


           if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
                printf("Please follow instructions  \n");
            }

          if(vehicle == 1) {
                printf("You are parking your Car for 2 hours.\n");
                Total = Rate_C * Car_rate;
                printf("------------------------------\nYour receipt number is C#%d\n", rand());
                printf("\nYou're total is %d", Total);
                count=count+1;
                 Total=Total+1;
                }

           if(vehicle == 2) {
                    printf("You are parking your SUV for 2hours  .\n");
                    Total = Rate_C * Suv_rate;
                printf("------------------------------\nYour receipt number is C#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
            }

            if(vehicle == 3) {
                printf("You are parking your Bus for 2 hours  .\n");
                Total = Rate_C * Bus_rate;
                printf("------------------------------\nYour receipt number is C#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
           }

         if(vehicle == 4) {
                    printf("You are parking your Truck for 2hours  .\n");
                    Total = Rate_C * Truck_rate;
                    printf("------------------------------\nYour receipt number is C#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
                }
                Lo_op ();
               break;

            case 'D':
          Print_carlist();
            scanf("%d", &vehicle);
                while( getchar() != '\n' ) ; /* flush stdin ... */


            if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
             printf("Please follow instructions  \n");
            }
           if(vehicle == 1) {
                printf("You are parking your Car for 5 hours.\n");
                Total = Rate_D * Car_rate;
                printf("------------------------------\nYour receipt number is D#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
                }
      if(vehicle == 2) {
                printf("You are parking your SUV for 5 hours  .\n");
                Total = Rate_D * Suv_rate;
                printf("------------------------------\nYour receipt number is D#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
                }

            if(vehicle == 3) {
                    printf("You are parking your Bus for 5 hours  .\n");
                    Total = Rate_D * Bus_rate;
                    printf("------------------------------\nYour receipt number is D#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
                }

            if(vehicle == 4) {
                    printf("You are parking your Truck for 5 hours  .\n");
                    Total = Rate_D * Truck_rate;
                    printf("------------------------------\nYour receipt number is D#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
    count=count+1;
     Total=Total+1;
                }
           Lo_op ();
                break;

            case 'E':
                Print_carlist();
                scanf("%d",&vehicle);
                while( getchar() != '\n' ) ; /* flush stdin ... */


                if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
                    printf("Please follow instructions  \n");
                }

                if(vehicle == 1) {
                    printf("You are parking your Car for 1 day .\n");
                    Total = Rate_E * Car_rate;
                    printf("------------------------------\nYour receipt number is E#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
            }
                if(vehicle == 2) {
                    printf("You are parking your SUV for 1 day  .\n");
                    Total = Rate_E * Suv_rate;
                    printf("------------------------------\nYour receipt number is E#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
                }

                if(vehicle == 3) {
                printf("You are parking your Bus for 1 day  .\n");
                    Total = Rate_E * Bus_rate;
                    printf("------------------------------\nYour receipt number is E#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
            }

                if(vehicle == 4) {
                    printf("You are parking your Truck for 1 day  .\n");
                Total = Rate_E * Truck_rate;
                    printf("------------------------------\nYour receipt number is E#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
                }
               Lo_op ();
                break;

            case 'F':
                Print_carlist();
                scanf("%d", &vehicle);
                while( getchar() != '\n' ) ; /* flush stdin ... */


                if((vehicle != 1) && (vehicle != 2) && (vehicle != 3) && (vehicle != 4)) {
                    printf("Please follow instructions  \n");
            }
                if(vehicle == 1) {
                printf("You are parking your Car for more than one day.\n");
                    Total = Rate_F * Car_rate;
                    printf("------------------------------\nYour receipt number is F#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                   calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
            }

                if(vehicle == 2) {
                    printf("You are parking your SUV for more than one day.\n");
                    Total = Rate_F * Suv_rate;
                    printf("------------------------------\nYour receipt number is F#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
                }

                if(vehicle == 3) {
                printf("You are parking your Bus for more than one day.\n");
                    Total = Rate_F * Bus_rate;
                    printf("------------------------------\nYour receipt number is F#%d\n", rand());
    printf("You're total is %d,\nPlease submit this ticket when leaving the compound\n-------------------------------",Total);
                     calculateDiscount(Total);
                    count=count+1;
                     Total=Total+1;
                }

            if(vehicle == 4) {
               printf("You are parking your Truck for more than one day.\n");
                Total = Rate_F * Truck_rate;
                printf("------------------------------\nYour receipt number is F#%d\n", rand());
                printf("You're total is %d",Tota开发者_开发百科l);
                calculateDiscount(Total);
                count=count+1;
                 Total=Total+1;
           }
                Lo_op ();
                break;

        default:
            printf("\nSorry your choice is not valid, please enter the letter associated with your choice!\n");
            break;
        }
    }

    return 0;

}


Okay, being mildly hypocritical, I'll try to offer a couple of bits of advice. First, don't use K&R style function headers like:

void Lo_op (count,Total)

Always specify the types:

Lo_op(int count, int Total)

Second, when you find yourself writing as repetitive of code as you have in main (essentially identical code repeated for 4 types of vehicles and 5 lengths of time) try to figure out a way to eliminate the repetition, such as putting the data into an array, and just accessing the right data based on the inputs. Here's a sketch of how I'd approach the problem1:

#include <stdio.h>

typedef struct { 
    char *name;
    int rate;
} data_pair;

data_pair actions[] = {
    { "Administration", 0},
    { "Park Car", 1},
    { "Park SUV", 2},
    { "Park Truck", 3},
    { "Park Bus", 4 }
};

#define num_actions (sizeof(actions)/sizeof(transactions[0]))

data_pair rates[] = {
    { "30 minutes", 2},
    { "1 hour", 4 },
    { "2 hours", 6},
    { "5 hours", 8},
    { "1 day", 10 },
    { "More than 1 day", 12}
};

#define num_rates (sizeof(rates)/sizeof(rates[0]))

typedef struct {
    int type;
    int length;
} transaction;

transaction transactions[256];
static transaction_num;

int get_value(char const *prompt, data_pair const *menu, int max) { 
    int value;
    int i;

    printf("%s\n", prompt);
    for (i=0; i<max; i++)
        printf("%d. %s\n", i+1, menu[i].name);

    printf("Please enter a number between 1 and %d: ", max);
    do { 
        scanf("%d", &value);
    } while (value < 0 || value > max+1);
    return value;
}   

int get_action() { 
    return get_value("What do you want to do?\n", actions, num_actions);
}

int get_length() { 
    return get_value("How long do you want to park\n", rates, num_rates);
}

void show_data(int vehicle_type, int length) { 
    printf("You're parking your %s for %s.\n", 
        actions[vehicle_type].name, 
        rates[length].name);
    printf("Your total is: $%f\n", 
        (double)actions[vehicle_type].rate * rates[length].rate);
}

int ask_continue() { 
    int retval;
    printf("Do you want to continue?");
    do { 
        retval = getchar();
        retval = tolower(retval);
    } while (retval != 'n' && retval != 'y');
    return retval;
}

void do_admin() {
    // For now, just display a list of recorded transactions.
    int i;
    for (i=0; i<transaction_num; i++)
        printf("%d: %s %s\n", 
            i+1, 
            actions[transactions[i].type].name, 
            rates[transactions[i].length].name);
}

int main() {
    do { 
        int action = get_action();
        int length;
        transaction t;
        if (action == 1)
            do_admin();
        else {
            length = get_length();
            show_data(action, length);
            t.length=length;
            t.type=action;
            transactions[transaction_num++] = t;
        }

    } while (ask_continue() == 'y'); 
    return 0;
}

1Okay, I can't imagine really approaching the problem this way. If you were going to do this at all, it seems like it'd just about need to be a kiosk-mode GUI app with a grid of buttons. Of course, in a typical case it would also need to support a few more minor details like credit card transactions to make any of the rest useful at all. Nonetheless, if I really had to do a text-based application on this general order, this would at least be closer to reality.


A file does sound like a good start if you are learning C. You are also going to have to come up with some way of formatting the information you want (name, license, etc) inti a record (one line=a record?).

Then you will find it is quite slow as you get lots of records, because your search will need to search the entire file. You could use a binary search, but then adding new records will require an insert (slow, and cumbersome). The solution then, is to use a database. SQLite might be worth a look (I've never used it) or even using an external RDBMS.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜