2011-03-07 125 views
3

我花了兩週的時間讓我的程序正常工作,但我決定改變它,但我需要一些幫助,這個想法看起來不錯,但是當它編寫代碼的時候,我不知道在哪裏開始:(我希望程序用戶輸入他們的車牌號碼,然後在一天結束時管理員應該能夠看到每個客戶的所有車牌號碼以及他們的總數如下如何顯示存儲的信息?

客戶1 A1546 $ 20

我希望它能以相反的方式工作,管理員應該能夠輸入車牌號碼和信息應該顯示。我一直在想辦法做到這一點,唯一的辦法是我認爲可能的工作是將所有信息保存在文件中,然後程序讀取該文件e文件並顯示它?任何幫助將被真正讚賞。下面 代碼:

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

} 
+10

將數據保存到文件可能是一個合理的選擇。用一個模糊的問題發佈數百行代碼,如「我該怎麼做?」恐怕不太好。 – 2011-03-07 02:59:55

+0

感謝Jerry Coffin編輯我的文章和快速回復。我知道它有很多編碼,它的含義很模糊,但我需要的是一個小例子,讓我步入正確的步驟,以便繼續,而不是要求任何人爲我這樣做,因爲我想向你們學習/ gals :) – user647530 2011-03-07 03:11:31

+0

是否有這個功課?通常一個隨機數字不會被認爲是唯一足以用作收據號碼的。 – 2011-03-07 03:42:14

回答

0

的文件聽起來像一個良好的開端,如果你正在學習C.你也將不得不拿出格式化你想要的信息的某種方式(姓名,執照等)在記錄中(一行=記錄?)。

然後你會發現它很慢,因爲你得到大量的記錄,因爲你的搜索將需要搜索整個文件。您可以使用二進制搜索,但添加新記錄需要插入(緩慢且麻煩)。那麼解決方案就是使用數據庫。 SQLite可能值得一看(我從來沒有使用它),甚至使用外部RDBMS。

+1

感謝您的幫助:)我現在不是真的關心程序的速度,只是想得到它工作:PI將不得不尋找二進制搜索,因爲它聽起來像它可以做的工作 – user647530 2011-03-07 04:58:20

3

好吧,稍微虛僞一點,我會盡量提供幾點建議。首先,不要使用k & [R風格的函數頭,如:

void Lo_op (count,Total) 

始終指定類型:

Lo_op(int count, int Total) 

其次,當你發現自己寫的重複的代碼,你必須在main(基本上相同的代碼重複4種類型的車輛和5段時間)試圖找出一種方法來消除重複,如將數據放入一個數組,並根據輸入訪問正確的數據。下面是我如何會處​​理這個問題草圖:

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

好吧,我無法想象真正接近問題的這種方式。如果你打算這樣做,看起來它只是需要成爲一個帶有按鈕網格的自助終端模式GUI應用程序。當然,在典型的情況下,它還需要支持一些更小的細節,如信用卡交易,以使其餘的任何其他信息都有用。儘管如此,如果我真的不得不在這個一般的訂單上做一個基於文本的應用程序,這至少會更接近現實。

+0

哇哇,看起來比我的許多線路好得多,你的也做同樣的事情:),你的也是合乎邏輯的,但我真的新的這個,所以我給了我最好的我可以。在最後的顯示信息仍然有點令人費解,我會嘗試在線閱讀並再次在這裏報告:) – user647530 2011-03-07 04:56:29

+0

所以我一直在閱讀C文件,並得到了程序來創建一個.txt文件,我可以像hello world等那樣寫簡單的文件到這個文件中,但是我怎樣才能將程序的輸出寫入文件,這樣當管理員想要的時候它可以顯示在程序中?這是我唯一的問題,它的壓力很大:( – user647530 2011-03-08 05:13:22