我花了两个星期的时间让我的程序正常工作,但我决定改变它,但我需要一些帮助,这个想法看起来很好,但是当它编写代码的时候我不知道从哪里开始:(。我希望程序的用户输入他们的车牌号码,然后在一天结束时,管理员应该能够看到每个客户的所有车牌号码及其总数,如此
客户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;
}
答案 0 :(得分:3)
好吧,有点虚伪,我会尝试提供一些建议。首先,不要使用K&amp; 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 好吧,我无法想象真的以这种方式解决问题。如果您打算这样做,似乎只需要成为一个带有按钮网格的信息亭模式GUI应用程序。当然,在一个典型的情况下,它还需要支持一些更小的细节,如信用卡交易,以使其他任何一个都有用。尽管如此,如果我真的不得不在这个一般订单上做一个基于文本的应用程序,这至少会更接近现实。
答案 1 :(得分:0)
如果您正在学习C,那么文件听起来似乎是一个好的开始。您还必须想出一些方法来格式化您想要的信息(名称,许可证等)inti a record(一行= a记录?)。
然后你会发现它很慢,因为你获得了大量的记录,因为你的搜索需要搜索整个文件。您可以使用二进制搜索,但随后添加新记录将需要插入(缓慢且繁琐)。那么解决方案是使用数据库。 SQLite可能值得一看(我从未使用过它),甚至使用外部RDBMS。