Lect11.ppt

Simple File I/O
Chapter 11
Switch Statement
Chapter 12
1
Agenda
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
Switch statement
2
The need for files in programming
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
File Names and Types
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
.cpp
.doc
general program input or output
C++ source file
Microsoft word document
4
I/O Streams
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
Stream Extraction and Insertion
#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 and Output File Streams
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
ofstream objects have to be declared
explicitly and initialized with the external
name of the file which they manage
#include the <fstream> header file
7
Files: Let’s Use Them
#include <fstream>
Declare a file stream variable
ifstream inFile;
ofstream outFile;
//input file stream
//output file stream
Open the files
inFile.open(“MyInput.dat”);
outFile.open(“MyOutput.dat”);
8
Output File Stream Example
#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
Write a database file, Lab 11 prob 1)
char done = 'y';
int acntnum; //an account number
float balance; // an account balance
ofstream outfile;
// a file variable.
a) Setting up
Output File
outfile.open ("accnts.dat");
// prepare database file for writing
10
Lab 11 prob 1) continued
// Now input values from keyboard
and write to
the disk.
b) Using output file
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
Lab 11 Prob 2) Now Read database file
Same file we wrote to
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: " << sum12 ;
Always Close your Files
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
Alternative Opening Syntax
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
Agenda
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
15
Intro to Objects and Classes
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
Member function
Dot operator
17
Classes
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
Class Member Functions
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
Agenda
File names and file streams
Intro to Classes and Objects
End-of-file Loops 
Formatting Output
20
Other Capabilities of File Streams
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
Loop until end-of-file
Process indefinite list in a file:
infile>>acntnum>>balance;
Check stream status
while(infile)
after each read
{
// process last data
// get next data
infile>>acntnum>>balance;
}
22
A more compact version
Process indefinite list in a file:
while(infile>>acntnum>>balance)
{
// process data
}
Read data and
Check status
after each read
23
Agenda
File names and file streams
Intro to Classes and Objects
End-of-file Loops
Formatting Output
24
Tools for Stream Formatting
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
Formatting Output to Files
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>
Lab 11 Prob1) With Formatting
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
The Result!
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
Creating Space in Output

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
switch Statement
Can be used instead of if-else-if
switch(expression)
{
case constant1: statementList1;
case constant2: statementList2;
…
case constantN: statementListN;
default: statementList0;
}
30
switch in Practice…a menu
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
switch in Practice…ATM menu loop
do
{
menu(); // display menu
cin>>choice;
Use
break
to
avoid
switch(choice)
“falling through”
{
case 'B':
balance(userID);
break;
case 'T‘: totalBalance(); break;
default:cout<<"Command notvailable”;
}
} while(choice !='Q');
32
Finally !!! … THE END 
33