Chapter 11
Chapter 12
1
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
Switch statement
2
Oracle Testing—allows rapid data entry for thorough testing of all branches of code
(every if, else, case, etc)
Recording Output—maintaining records of program executions
Word processing—storing documents that can be edited and revised when a word processor runs
3
A file name should reflect its contents
Payroll.dat
Students.txt
Grades.txt
A file’s extension indicates the kind of data the file holds
.dat, .txt general program input or output
.cpp C++ source file
.doc
Microsoft word document
4
A stream in C++ is a conduit (pipe) through which data passes
Input passes through the istream object and output passes through the ostream object. Input and output are managed by the istream object cin and the ostream object cout
The istream class defines the use of the extraction operator ‘ >> ’ (used with cin)
5
#include <iostream>
Input (stream extraction): cin
>> // takes data from stream and sticks in variable
Output (stream insertion): cout
<< // takes data from variable and puts into stream
Input (Extraction) skips whitespace!
‘\n’, ‘\t’, ‘ ‘, ‘\r’, ‘\v’
6
Input from a file is managed by an ifstream object in the same way that the input from the keyboard is managed by the istream object cin
Similarly, output to a file is managed by an ofstream object in the same way that the output to the monitor is managed by the ostream object cout
The difference is that ifstream and o fstream objects have to be declared explicitly and initialized with the external name of the file which they manage
#include the <fstream> header file
7
#include <fstream>
Declare a file stream variable ifstream inFile; //input file stream ofstream outFile; //output file stream
Open the files inFile.open(“MyInput.dat”); outFile.open(“MyOutput.dat”);
8
#include<fstream>
#include<iostream> void main()
{
Create a new file stream newfile ofstream newfile;
Connect newfile to the file on disk newfile.open("students.txt");
} newfile<<“this is written to the file”; cout<<“this is written to the monitor”;
9
char done = 'y'; int acntnum; //an account number float balance; // an account balance ofstream outfile; // a file variable.
outfile.open ("accnts.dat");
// prepare database file for writing
10
// Now input values from keyboard and write to the disk.
while (done != 'n')
{ cout << "enter an accnt number and balance: "; cin >> acntnum >> balance;
}
} outfile << acntnum << " " << balance << endl; cout << "another account? enter `y' or `n':"; cin >> done;
Download Lab11 & Try 1) Now!
11
float sum = 0.0;
ifstream infile; // a file var. for the input infile.open ("accnts.dat"); //prepare file for reading for (n=0; n<3; n++) // sum 3 accounts...
{ infile >> acntnum >> balance; sum += balance;
} cout << "The total of all accounts is: " << sum ;
12
Don’t forget to close the files when you are done with them infile.close( ); outfile.close( );
Handles any final writing and lets file be reopened later in program.
Put this after all reads/writes are finished
(usually right before program or function terminates)
13
Instead of Declaring then opening: ifstream infile; infile.open(“accts.dat”);
You can Declare and Open in one statement ifstream infile(“accts.dat”); ofstream outFile(“accts.dat”);
14
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
15
An object is a variable that has functions and data associated with it infile and outfile each have a function named open( ) associated with them infile and outfile use different versions of a function named open
• One version of open is for input files
• A different version of open is for output files
16
Calling a Member Function
Calling a member function requires first specifying the object containing the function
The calling object is separated from the member function by the dot operator
Example: inFile .
open(“accts.dat");
Calling object
Dot operator
Member function
17
A type whose variables are objects, is a class ifstream is the type of the infile variable
(object) ifstream is a class
The class of an object determines its member functions
Example: ifstream inputFile, inputData;
• inputFile.open
and inputData.open
are the same function but might be given different filenames to open
18
The member functions an object can use are defined in its class definition
The class determines the member functions of the object
The class ifstream has an open function
Every variable (object) declared of type ifstream has that open function available
19
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
20
A File stream object maintains a true/false value that can be tested to check an operation ifstream infile; infile.open(“accts.dat”);
If open was unsuccessful… if (!infile)
{ cout<<“file not found”; exit(1);
} This message is displayed
And program quits
21
Process indefinite list in a file: infile>>acntnum>>balance; while(infile) Check stream status
{ after each read
// process last data
}
// get next data infile>>acntnum>>balance;
22
Process indefinite list in a file: while(infile>>acntnum>>balance)
{
// process data
}
Read data and
Check status after each read
23
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
24
Running Lab 11 Prob 1, if we enter
111 123.45
222 444.777777777
33 12000000.22
We get an accnts.dat file that looks like this:
111 123.45
222 444.778
33 1.2e+07
25
Remember to #include <iomanip>
Use setprecision(2) -to force 2 digits of precision for all float data
Use fixed – to force fixed point formatting (no e-notation allowed) for all following data
Use left (-or right) to justify (line up) on left or right side of column strings look better with left, numbers with right
Use setw(10) to output data right justified in a field of 10 spaces
Only applies to next data
26
#include <iomanip>
while (done != 'n')
{ cout << "enter an account number and balance: "; cin >> acntnum >> balance; outfile<<setprecision(2)<<fixed<< setw(10)
<< acntnum <<setw(15) << balance << endl; cout << "another account? enter `y' or `n':"; cin >> done;
}
27
NOW running Listing 8.1 MODIFIED, if we enter
111 123.45
222 444.777777777
33 12000000.22
We get an accnts.dat file that looks like this:
111 123.45
222 444.78
33 12000000.00
28
The setw function specifies the number of spaces for the next item
Applies only to the next item of output
Example: To print the digit 7 in four spaces use outfile<<setw(4)<< 7 << endl;
Three of the spaces will be blank
7
(ios::left)
Slide 29
Can be used instead of if-else-if switch(expression)
{ case constant1: statementList1; case constant2: statementList2;
… case constantN: statementListN; default: statementList0;
}
30
char choice; cin>>”enter P for payroll, E for employee info, Q to quit”<<endl; cin>>choice; switch (choice)
{ case ‘P’: cout<<“processing payroll”; break; case ‘E’: case ‘e’: cout<<“processing employee”; break; default: cout << “Quitting program”; break;
}
31
do
{ menu(); // display menu cin>>choice; switch(choice)
Use break to avoid
{
“falling through” case 'B': balance(userID); break; case 'T‘: totalBalance(); break; default:cout<<"Command notvailable”;
}
} while(choice !='Q');
32
33