📄 travel.c
字号:
fp = fopen(s2, "rt");
if(fp == '\0')
looking = 0;
else{
fclose(fp);
sprintf(s, ".%d", ++k);
strcpy(s2, file_name);
strcat(s2, s);
} /* ends else tried another name */
} /* ends while looking */
strcpy(file_name, s2);
#endif
#ifdef DOS_SYSTEM
looking = 1;
while(looking){
printf("\n\nEnter the name of the file you");
printf("\nwant to use as the data file: ");
gets(s2);
fp = fopen(s2, "r");
if(fp == '\0')
looking = 0;
else{
fclose(fp);
printf("\nFile %s already exists", s2);
printf("\nTry another file name");
} /* ends else tried another name */
} /* ends while looking */
strcpy(file_name, s2);
#endif
} /* ends get_data_file_name */
/*****************************************************/
/*****************************************************/
/*PAGE get_orn
Interact with the user to get the
ORN.
*/
get_orn(a)
char a[];
{
int i;
printf("\n\t\tORN:");
gets(a);
} /* ends get_orn */
/*****************************************************/
/*****************************************************/
/*PAGE get_money
This function interacts with the user
to get a money value. It gets it as
a float and returns it to the caller
as a long.
*/
long get_money()
{
char r[L];
float f;
long l;
gets(r);
f = atof(r);
f = f + 0.005;
l = pennies_of(f);
return(l);
} /* ends get_money */
/*****************************************************/
/*****************************************************/
/*PAGE get_number
This functions prompts the user with
the string given in the input, reads
an integer from the keyboard, and
returns that integer to the calling
function.
*/
get_number(s)
char s[];
{
char r[80];
int result;
printf("\n\t%s: ", s);
gets(r);
result = atoi(r);
return(result);
} /* ends get_number */
/*****************************************************/
/*****************************************************/
/*PAGE get_transportation_cost
This function gets the
transportation cost structures.
*/
struct trans_struct * get_transportation_cost()
{
char s[L];
int first=1, j, not_done=1;
struct trans_struct *current, *new1, *result;
while(not_done){
printf("\n\tMode:");
printf("(enter 0 to quit)");
gets(s);
if(s[0] == '0'){
not_done = 0;
/* if the user enters 0 on the first try,
then create at least one instance of
the struct to pass back. */
if(first){
first = 0;
new1 = (struct trans_struct *)
calloc(1, sizeof(struct trans_struct));
new1->next = END_OF_LIST;
result = new1;
strcpy(result->mode, s);
} /* ends if first */
} /* ends if s[0] == '0' */
else{ /* get data */
new1 = (struct trans_struct *)
calloc(1, sizeof(struct trans_struct));
new1->next = END_OF_LIST;
if(first){
result = new1;
current = new1;
first = 0;
}
else{
current->next = new1;
current = new1;
}
strcpy(current->mode, s);
printf("\n\tCarrier:");
gets(current->carrier);
printf("\n\tTravel Class:");
gets(current->travel_class);
printf("\n\tAmount:");
current->amount = get_money();
} /* ends else get data */
} /* ends while not_done */
return(result);
} /* ends get_transportation_cost */
/*****************************************************/
/*****************************************************/
/*PAGE get_GTRs
This function gets the GTR
advances.
*/
struct GTR_struct * get_GTRs()
{
int first=1, not_done=1;
long a;
struct GTR_struct *current, *new1, *result;
while(not_done){
printf("\nGTR or Ticket Advance Amount:");
a = get_money();
if(a == 0){
not_done = 0;
/* if the user enters 0 on the first try,
then create at least one instance of
the struct to pass back. */
if(first){
first = 0;
new1 = (struct GTR_struct *)
calloc(1, sizeof(struct GTR_struct));
new1->next = END_OF_LIST;
new1->GTR = 0;
result = new1;
} /* ends if first == 1 */
} /* ends if a == 0 */
else{ /* get data */
new1 = (struct GTR_struct *)
calloc(1, sizeof(struct GTR_struct));
new1->next = END_OF_LIST;
if(first){
result = new1;
current = new1;
first = 0;
}
else{
current->next = new1;
current = new1;
}
current->GTR = a;
} /* ends else get data */
} /* ends while not_done */
return(result);
} /* ends get_GTRs */
/*****************************************************/
/*****************************************************/
/*PAGE get_itinerarys
This function gets the itinerary
for the traveler.
*/
struct itinerary_struct * get_itinerarys()
{
char s[L];
int i, first=1, not_done=1;
struct MDY_struct dummy;
struct itinerary_struct *current, *new1, *result;
while(not_done){
printf("\n\t\tItinerary:");
printf("\n\t\t(enter -1 for month to quit)");
printf("\nDEPARTURE");
get_mdy(&dummy);
if(dummy.month == -1){
not_done = 0;
/* if the user enters 0 on the first try,
then create at least one instance of
the struct to pass back. */
if(first){
first = 0;
new1 = (struct itinerary_struct *)
calloc(1, sizeof(struct itinerary_struct));
new1->next = END_OF_LIST;
result = new1;
result->depart_date.month = -1;
} /* ends if first */
} /* ends if dummy.month == -1 */
else{ /* get data */
new1 = (struct itinerary_struct *)
calloc(1, sizeof(struct itinerary_struct));
new1->next = END_OF_LIST;
/* If first time through, then set the
result pointer to the new struct. */
if(first){
result = new1;
current = new1;
first = 0;
}
else{
current->next = new1;
current = new1;
}
current->depart_date.month = dummy.month;
current->depart_date.day = dummy.day;
current->depart_date.year = dummy.year;
printf("\nLeaving:");
gets(current->leave_loc);
printf("\nAt: (24 hour time - no colon)");
gets(s);
current->depart_time = atoi(s);
printf("\nVia:");
gets(current->depart_via);
printf("\nARRIVAL");
get_mdy(&dummy);
current->arrive_date.month = dummy.month;
current->arrive_date.day = dummy.day;
current->arrive_date.year = dummy.year;
printf("\nArriving:");
gets(current->arrive_loc);
printf("\nAt: (24 hour time - no colon)");
gets(s);
current->arrive_time = atoi(s);
} /* ends else get the data */
} /* ends while not_done */
return(result);
} /* ends get_intenerarys */
/*****************************************************/
/*****************************************************/
/*PAGE get_daily_expenses
This function runs through the
days of the trip and gets all
the expenses and descriptions.
*/
struct daily_struct * get_daily_expenses(first_day, last_day, days)
short *days;
struct MDY_struct *first_day, *last_day;
{
char s[L];
int j, looping = 1, not_done = 1;
struct daily_struct *current, *new1, *result;
struct MDY_struct dummy, next_day;
new1 = (struct daily_struct *)
calloc(1, sizeof(struct daily_struct));
new1->next = END_OF_LIST;
result = new1;
current = new1;
*days = *days + 1;
current->today.month = first_day->month;
current->today.day = first_day->day;
current->today.year = first_day->year;
while(looping){
dummy.month = current->today.month;
dummy.day = current->today.day;
dummy.year = current->today.year;
printf("\nDaily Expense");
show_mdy(&dummy);
printf("\nMax Lodging at TDY Point:");
current->max_lodging = get_money();
not_done = 1;
while(not_done){
printf("\nM&IE at TDY Point:");
current->mie = get_money();
/* change - added 3 MIE values here
4-15-93 - DP */
if(current->mie != MIE1 &&
current->mie != MIE2 &&
current->mie != MIE3 &&
current->mie != MIE4 &&
current->mie != MIE5){
printf("\nMust equal");
show_money(MIE1);
printf(", ");
show_money(MIE2);
printf(", ");
show_money(MIE3);
printf(", ");
show_money(MIE4);
printf(", ");
show_money(MIE5);
} /* ends if MIE values */
else
not_done = 0;
} /* ends M&IE loop */
printf("\nActual Lodging:");
current->actual_lodging = get_money();
printf("\nPOV Miles:");
gets(s);
current->pov_miles = atoi(s);
printf("\nDesc:");
gets(current->pov_desc);
printf("\nRental Car:");
current->rental_car = get_money();
printf("\nDesc:");
gets(current->rental_car_desc);
printf("\nTaxi:");
current->taxi = get_money();
printf("\nDesc:");
gets(current->taxi_desc);
printf("\nParking:");
current->parking = get_money();
printf("\nDesc:");
gets(current->parking_desc);
printf("\nOfficial Phone:");
current->phone = get_money();
printf("\nDesc:");
gets(current->phone_desc);
printf("\nOther:");
current->other = get_money();
printf("\nDesc:");
gets(current->other_desc);
/* now test for the end */
if(current->today.month == last_day->month &&
current->today.day == last_day->day &&
current->today.year == last_day->year)
looping = 0;
else{
new1 = (struct daily_struct *)
calloc(1, sizeof(struct daily_struct));
new1->next = END_OF_LIST;
current->next = new1;
current = new1;
*days = *days + 1;
tomorrow_is(&dummy, &next_day);
current->today.month = next_day.month;
current->today.day = next_day.day;
current->today.year = next_day.year;
} /* ends else not done looping */
} /* ends loop over the days */
return(result);
} /* ends get_daily_expenses */
/*****************************************************/
/*****************************************************/
/*PAGE get_rental_expenses
This function gets the personal rental
car costs from the user. There is only one
struct. This is not a linked list.
*/
struct rental_struct * get_rental_expenses()
{
char s[L];
long temp;
struct rental_struct *result;
result = (struct rental_struct *)
calloc(1, sizeof(struct rental_struct));
printf("\n");
printf("\nYou will be asked to sign a statement");
printf(" certifying personal");
printf("\nuse of your vehicle. If you did not");
printf("\nhave any personal use of the vehicle,");
printf("\nanswer 0 to the following three questions.");
printf("\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -