350 likes | 369 Views
Simple File I/O Chapter 11 Switch Statement Chapter 12. Agenda . File names and file streams Intro to Classes and Objects End-of-file Loops Formatting Output Switch statement. The need for files in programming.
E N D
Simple File I/O Chapter 11 Switch Statement Chapter 12
Agenda • File names and file streams • Intro to Classes and Objects • End-of-file Loops • Formatting Output • Switch statement
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
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 general program input or output • .cpp C++ source file • .doc Microsoft word document
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)
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’
Input and Output File Streams • Input from a file is managed by an ifstreamobject in the same way that the input from the keyboard is managed by theistream object cin • Similarly, output to a file is managed by an ofstreamobject in the same way that the output to the monitor is managed by theostream object cout • The difference is that ifstream and ofstreamobjects have to be declared explicitly and initialized with the external name of the file which they manage • #include the <fstream.h> header file
Files: Let’s Use Them • #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”);
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”; }
Write a database file, Lab 9 prob 1) 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 a) Setting up Output File
Lab 9 prob 1) continued // 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; } } b) Using output file Download Lab9 & Try 1) Now!
Lab 9 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: " << sum ;
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 re-opened later in program. • Put this after all reads/writes are finished (usually right before program or function terminates)
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”);
Agenda • File names and file streams • Intro to Classes and Objects • End-of-file Loops • Formatting Output
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 differentversions of a function named open • One version of open is for input files • A different version of open is for output files
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"); Member function Calling object Dot operator
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:ifstreaminputFile, inputData; • inputFile.open and inputData.open are the same function but might be given different filenames to open
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
Agenda • File names and file streams • Intro to Classes and Objects • End-of-file Loops • Formatting Output
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 (!infile) { cout<<“file not found”; exit(1); } If open was unsuccessful… This message is displayed And program quits
Loop until end-of-file • Process indefinite list in a file: infile>>acntnum>>balance; while(infile) { // process last data // get next data infile>>acntnum>>balance; } Check stream status after each read
A more compact version • Process indefinite list in a file: while(infile>>acntnum>>balance) { // process data } Read data and Check status after each read
Agenda • File names and file streams • Intro to Classes and Objects • End-of-file Loops • Formatting Output
Tools for Stream Formatting • Running Lab 9 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
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
#include <iomanip> Lab 9 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; }
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
7 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 useoutfile<<setw(4)<< 7 << endl; • Three of the spaces will be blank (ios::left)
switch Statement • Can be used instead of if-else-if switch(expression) { case constant1: statementList1; case constant2: statementList2; … case constantN: statementListN; default: statementList0; }
switch in Practice…a menu char choice; cout<<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; }
switch in Practice…ATM menu loop do { menu(); // display menu cin>>choice; switch(choice) { case 'B': balance(userID); break; case 'T‘: totalBalance(); break; default:cout<<"Command notvailable”; } } while(choice !='Q'); Use break to avoid “falling through”
Sample Final Exam Problem… 12. what is the exact output of the following program segment? for (int k=0; k<8; k++) switch(k) { case 0: case 7: cout<<"R"; break; case 2: cout<<"I"; break; case 3: cout<<"N"; break; case 4: cout<<"D"; break; default: cout<<"E"; break; }
Sample Final Exam Problem…with twist 12. what is the exact output of the following program segment? for (int k=0; k<8; k++) switch(k) { case 0: case 7: cout<<"R"; forgot break case 2: cout<<"I"; break; case 3: cout<<"N"; forgot break case 4: cout<<"D"; break; default: cout<<"E"; break; }