Tree Project

All,
Here is a project I have been assigned and I am having trouble with the output of the report.dat file. I am hoping someone could help me out, I can not get the output file to look like the one in the example, thanks

Overview of Program Logic
1. You are to have a major while control loop that allows the user to enter data tree by tree until a tree number of 999 is encountered.
2. Program is to be modular and utilize getTreeNo, getSpeciesCode, getDbh, getTotHt, calcTotVol, and displayTreeData functions.
3. Edit the incoming data according to the stated specifications for legal data values. You are to use a do/while loop for data entry and keep the user in the loop until valid data is entered for the tree.
4. Total volume is calculated using the totalVol formula.
5. Write the respective tree data ( treeNo, speciesCode, dbh, totalHt, and totalVol.) for each entry once the entire record is validated. This output is to be stored on an external data file named report.dat.
6. Once a tree number of 999 is entered, the program should exit the while loop and then calculate and display (1) the total number of trees entered, and (2) the average total volume. (Note: the average totalVol is determined by the sum of totalVol values divided by the total number of trees.) The above output is to be displayed on report.dat as well as the standard cout device.



Your report should look similar to the following. Feel free to make the format a little more attractive and even up the spacing. The report is to be stored on report.dat external data file.

Forest Inventory Detail Edit and Volume Calculation

Tree No. Species Description DBH Tot. Ht. Tot. Vol.
123 11 Loblolly Pine 5.8 120 9.984
124 12 White Pine 10.2 140 32.575
125 22 RedOak 15.6 142 71.858

Total trees measured = 3
Average total volume = 38.19

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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
#include<iostream>
#include<fstream>
#include<iomanip>
#include<string>

using namespace std;

// function prototype
int getTreeNo();
int getSpeciesCode(int[],string[]);
double getDbh();
int getTotHt();
double calcTotVol(int,int[],double[],double[],double, int);
void displayTreeData(ofstream&,int ,int ,int [], string [],double,int,double);

int main()
{

	int treeNo;
	int	speciesCode;
	int totalHt;
	int	noTrees;
	double dbh;
	double totalVol;
	double avgTotVol;

	int Species[6]={11,12,13,21,22,23};
	string speciesDesc[6]={"Loblolly Pine","White Pine","Red Pine","White Oak","Red Oak","Other Oak"};
	double b0[6]={1.2446,0.000,2.0822,.7316,1.6378,.7554};
	double b1[6]={.002165,.002364,.002046,.001951,.002032,.002174};
	noTrees=0;
	avgTotVol=0.0;

// open outdata
	ofstream out("report.dat");
	out<<"Forest Inventory Detail Edit and Volume Calculation\n"
	<<"Tree No. Species Description DBH Tot. Ht. Tot. Vol.";

	cout<<setiosflags(ios::fixed)<<setprecision(3);
	out<<setiosflags(ios::fixed)<<setprecision(3);

	do
	{
		treeNo=getTreeNo();
		if(treeNo!=999){
		speciesCode=getSpeciesCode(Species,speciesDesc);
		dbh=getDbh();
		totalHt=getTotHt();

		totalVol=calcTotVol(speciesCode,Species,b0,b1, dbh, totalHt);


		noTrees++;
		avgTotVol+=totalVol;

		displayTreeData(out,speciesCode,treeNo,Species,speciesDesc,dbh,totalHt,totalVol);

	}
}
	while(treeNo!=999);


		cout<<"\n\nTotal trees measured = "<<noTrees
		<<"\nAverage total volume = ";

		out<<"\n\nTotal trees measured = "<<noTrees
		<<"\nAverage total volume = ";

		if(noTrees<=0)
	{
		cout<<0;
		out<<0;
	}

		else
	{
		cout<<avgTotVol/noTrees;
		out<<avgTotVol/noTrees;
	}
		

		out.close();
		return 0;
}

//getTreeNo

	int getTreeNo()
	{
	int input;
	do
	{
		cout<<"Enter tree number(between 1-199) or 999 to finish: ";
		cin>>input >>input >>input;
	if((input<1||input>199)&&input!=999){
		cout<<"Invalid number entered.\n";
	}
}	
	while((input<1||input>199)&&input!=999);


	return input, input, input;
	}


//getSpeciesCode

	int getSpeciesCode(int Table[],string Name[]){
	int code;
	int found=0; 

	do
	{
	cout<<"\n\nCode\tDescription\n";

	for(int i=0;i<6;i++)
	{
	cout<<Table[i]<<"\t"<<Name[i]<<endl;
	}


	cout<<"\nEnter Species Code: ";
	cin>>code >>code >>code;

	//search Table to see if valid code entered
	for(int j=0;j<6;j++)
	{
	if(code==Table[j])
	{
	found =1; 
	break; 
	}
}

	if(found!=1){
	cout<<"Invalid code entered entered.\n";
	}
}
	while(found!=1);

	return code, code, code;
}


//getDbh

	double getDbh(){
	double inches;
	do
	{
		cout<<"Enter the number of inches(between 5 and 50.6): ";
		cin>>inches >>inches >>inches;
	if(inches<5||inches>50.6){
		cout<<"Invalid number entered.\n";
	}
}
	while(inches<5||inches>50.6);

	return inches, inches, inches;

}


//getTotHt

	int getTotHt(){
	int Ht;
	do
{
	cout<<"Enter the closest even total height(between 24-160): ";
	cin>>Ht >>Ht >>Ht;
	if((Ht<1||Ht>199)&&Ht%2!=0){
	cout<<"Invalid number entered Note that it must be a even number.\n";
	}
}
	while((Ht<1||Ht>199)&&Ht%2!=0);

	return Ht, Ht, Ht;
}


//calcTotVol

	double calcTotVol(int code,int table[],double b0[],double b1[],double dbh, int totalHt){
	int index;
	double totalVol;

//find index
	for(int i=0;i<6;i++){
	if(code==table[i]){
	index=i;
	break;
	}
}

//calculate totalVol = b0 + b1 (dbh)^2 ( totalHt)
	totalVol=b0[index]+b1[index]*dbh*dbh*totalHt;

	return totalVol;

}




	void displayTreeData(ofstream& out,int speciesCode,int treeNo,int table[], string Name[],double dbh,int totalHt,double totalVol){
	int index;

	//find index
	for(int i=0;i<6;i++){
	if(speciesCode==table[i]){
	index=i;
	break;
	}
}

	cout<<"\n\nTree No. Species Description DBH Tot. Ht. Tot. Vol.";
	cout<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol<<endl;
	out<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol;
	cout<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol<<endl;
	out<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol;
	cout<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol<<endl;
	out<<endl<<treeNo<<" "<<Name[index]<<" "<<setprecision(1)<<dbh<<" "<<totalHt<<" "<<setprecision(3)<<totalVol;
	return;
}
Topic archived. No new replies allowed.