Как отобразить сохраненную информацию? - PullRequest
3 голосов
/ 07 марта 2011

Мне потребовались хорошие 2 недели, чтобы заставить мою программу работать должным образом, но я решил изменить ее, но мне нужна помощь, идея хорошо выглядит в моей голове, но когда пришло время ее кодировать, я не знаюс чего начать :(. Я хочу, чтобы пользователь программы ввел свой номерной знак, тогда в конце дня администратор сможет увидеть все номерные знаки каждого клиента и их общее количество, например:

Клиент 1 A1546 $ 20

И я хотел бы, чтобы он работал наоборот, администратор должен иметь возможность вводить номерной знак, и информация должна отображаться. Я думал о способах сделать этои единственный способ, который, я думаю, мог бы работать, - это сохранить всю информацию в файле, а затем программа читает файл и отображает его. Любая помощь будет по-настоящему оценена. Код ниже:

#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",Total);
                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;

}

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Хорошо, будучи слегка лицемерным, я постараюсь дать пару советов.Во-первых, не используйте заголовки функций в стиле K & R, такие как:

void Lo_op (count,Total)

Всегда указывайте типы:

Lo_op(int count, int Total)

Во-вторых, когда вы пишете такой же повторяющийся код, как вОсновной (по сути идентичный код повторяется для 4 типов транспортных средств и 5 отрезков времени) пытается выяснить способ устранения повторения, такой как помещение данных в массив и просто доступ к нужным данным на основе входных данных.Вот набросок того, как я подхожу к проблеме 1 :

#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;
}

1 Хорошо, я не могу представить, что действительно приближаетсяпроблема в этом.Если вы собираетесь сделать это вообще, похоже, что вам просто нужно было бы приложение с графическим интерфейсом в режиме киоска с сеткой кнопок.Конечно, в типичном случае необходимо также поддерживать несколько более мелких деталей, таких как транзакции по кредитным картам, чтобы сделать все остальное полезным.Тем не менее, если бы мне действительно нужно было сделать текстовое приложение в этом общем порядке, это было бы по крайней мере ближе к реальности.

0 голосов
/ 07 марта 2011

Файл звучит как хорошее начало, если вы изучаете C. Вы также должны будете найти какой-то способ форматирования необходимой вам информации (имя, лицензия и т. Д.) В записи (одна строка = a запись?).

Тогда вы обнаружите, что это довольно медленно, так как вы получаете много записей, потому что ваш поиск должен искать весь файл. Вы можете использовать бинарный поиск, но для добавления новых записей потребуется вставка (медленная и громоздкая). Решение в том, чтобы использовать базу данных. SQLite может стоить посмотреть (я никогда не использовал его) или даже использовать внешнюю СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...