//============================================================================
// 제출일 : 2005. 3. 12
// 작업환경 : Windows XP SP1, VC++ 6.0, Pentium4
// 연습문제 4-37
// data.txt로 부터 세일즈맨의 정보를 읽어와 처리함
//============================================================================
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
class Salesperson
{
public:
Salesperson(); //Default 생성자
~Salesperson(); //소멸자
void init(char *data_string); //한 줄을 입력 받아 Data를 변수에 저장
void calc(); //계산을 수행하는 메쏘드
void print(); //계산 내용을 출력하는 메쏘드
private:
char name[80];
int sales;
int bonus;
float federal;
float state;
float retirement;
};
Salesperson::Salesperson()
{} //Do nothing
Salesperson::~Salesperson()
{} //Do nothing
void Salesperson::init(char *data_string) //파일로부터 Data를 읽어오는 생성자
{
strcpy(name, strtok(data_string," \t"));
sales = atoi(strtok(NULL," \t"));
bonus = atoi(strtok(NULL," \t"));
}
void Salesperson::calc() //계산 함수
{
float total_income = (float)(sales*0.125 + bonus);
federal = (float)(total_income * 0.25);
state = (float)(total_income * 0.10);
retirement = (float)(total_income * 0.08);
}
void Salesperson::print() //화면 출력을 담당하는 함수
{
cout.setf( ios::right, ios::adjustfield ); //오른쪽 정렬
cout <<"| "<<setw(9)<<setfill(' ')<<name<<' '; //9칸의 공간을 할당, 여백을 ' '으로 채움
cout <<"| "<<setw(7)<<setfill(' ')<<sales<<' ';
cout <<"| "<<setw(7)<<setfill(' ')<<bonus<<' ';
cout <<"| "<<setw(7)<<setfill(' ')<<federal<<' ';
cout <<"| "<<setw(7)<<setfill(' ')<<state<<' ';
cout <<"| "<<setw(8)<<setfill(' ')<<retirement <<" |\n";
}
int main()
{
char buf[80]; //파일에서 한줄씩 읽기 위한 버퍼
ifstream file; //file stream
Salesperson salesperson; //세일즈맨들의 정보를 저장, 계산하기위한 클래스
file.open("data.txt", ifstream::in); //Data.txt File Open
file.getline(buf, 80); //첫번째 줄 무시
file.getline(buf, 80);
cout << "================================================================\n";
cout << "|SALESPERSON| SLAES | BONUS | FEDERAL | STATE |RETIREMENT|\n";
cout << "================================================================\n";
do
{
salesperson.init(buf);
salesperson.calc();
salesperson.print();
} while (file.getline(buf, 80)); //마지막 줄까지 읽으면서 새로운 데이터를 생성하고 출력함
cout << "================================================================\n";
return 0;
}
--------------------------------------------------------------------------------------
data.txt
salesperson sales bonus
1 53500 425
2 41300 300
3 56800 350
4 36200 175
'Studies > A Structured Approach Using C++' 카테고리의 다른 글
Project 4-39 Temperature convertor : Fathrenheit VS Centigrade 온도변환기 : 화씨 섭씨 (0) | 2008.08.23 |
---|---|
Project 4-38 Compute the interest and print the balance (0) | 2008.08.23 |
Problem 4-35 print the ceiling, floor, and rounded value of a floating-point number (0) | 2008.08.23 |
Problem 4-33 Modify the "Add two digit" grogram (0) | 2008.08.23 |
Computer Science: A structured approach using C++ (0) | 2008.08.21 |