-
Notifications
You must be signed in to change notification settings - Fork 0
/
CarData-Structures.c
144 lines (128 loc) · 3.24 KB
/
CarData-Structures.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/******************************************************************************
* Roger Greer
* Chapter 10
* PURPOSE: This program displays vehicle informaion from an in-put file using
* structures.
******************************************************************************/
#include <stdio.h>
#define strSize 20
/* Structure defines the date */
typedef struct
{
int month, day, year;
} date_t;
/* Structure defines the capacity and current fuel level of the fuel tank */
typedef struct
{
double capacity, current;
} tank_t;
/* Structure defines the automobile */
typedef struct
{
char make[strSize], model[strSize];
int odometer;
date_t man, purch;
tank_t tank;
} auto_t;
/* Provides user instructions */
void instruct(void)
{
printf("\nThis program displays vehicle informaion from an in-put file\n");
printf("located in the programs directory\n\n");
}
/* Scan data into auto struct */
int scan_auto(auto_t *vehicle, FILE *fp)
{
return fscanf(fp, "%s %s %d", vehicle->make, vehicle->model, &vehicle->odometer);
}
/* Scan data into date struct */
int scan_date(auto_t *vehicle, FILE *fp)
{
return fscanf(fp, "%d %d %d %d %d %d"
, &vehicle->man.month
, &vehicle->man.day
, &vehicle->man.year
, &vehicle->purch.month
, &vehicle->purch.day
, &vehicle->purch.year);
}
/* Scan data into tank struct */
int scan_tank(auto_t *vehicle, FILE *fp)
{
return fscanf(fp, "%lf %lf"
, &vehicle->tank.capacity
, &vehicle->tank.current);
}
/* Print data from auto struct */
void print_auto(auto_t vehicle)
{
printf("%s\t%2s\t%d\t"
, vehicle.make
, vehicle.model
, vehicle.odometer);
}
/* Print data from date struct */
void print_date(auto_t vehicle)
{
printf("%8d-%d-%d\t %d-%d-%d\t"
, vehicle.man.month
, vehicle.man.day
, vehicle.man.year
, vehicle.purch.month
, vehicle.purch.day
, vehicle.purch.year);
}
/* Print data from tank struct */
void print_tank(auto_t vehicle)
{
printf("%7.1lfgal%12.1lfgal\n"
, vehicle.tank.capacity
, vehicle.tank.current);
}
int main()
{
auto_t vehicle;
FILE *fp;
char fileName[20];
instruct();
printf("Enter the name of the data file => ");
scanf("%s", fileName);
fp = fopen(fileName,"r");
if (fp == NULL)
{
printf("File not found!");
}
else
{
printf("\n MAKE MODEL ODOMETER MANUFACTURE DATE PURCHASE DATE TANK CAPACITY FUEL LEVEL\n");
printf("\n-------------------------------------------------------------------------------------------\n");
while(1)
{
/* Validate scan_auto(&vehicle) */
if(scan_auto(&vehicle, fp) == EOF)
{
break;
}
/* Validate scan_date(&date) */
if(scan_date(&vehicle, fp) == EOF)
{
break;
}
/* Validate scan_tank(&tank) */
if(scan_tank(&vehicle, fp) == EOF)
{
break;
}
/* Print data */
print_auto(vehicle);
print_date(vehicle);
print_tank(vehicle);
}
}
getch();
return (0);
}
/* Project Data
Mercury Sable 99842 1 18 2001 5 30 1991 16 12.5
Mazda Navajo 123961 2 20 1993 6 15 1993 19.3 16.7
*/