2011-03-07 109 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