//============================================================================
//  제출일 : 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

Posted by 지그프리드 지그프리드

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

◀ PREV : [1] : [2] : [3] : [4] : [5] : [6] : [7] : [8] : [9] : NEXT ▶

BLOG main image
일상, 프로그래밍, IT 그리고 직장생활, Dive, 여행 by 지그프리드

카테고리

Class List (402)
Studies (30)
Exercise & Quizz (10)
Term Project (0)
ECIM list (Help!) (10)
Issues & News (0)
Gossip about IT & Job (22)
Tools (2)
Think about the Justice (23)
Book Review (170)
조엘 온 소프트웨어(번역) (28)
Diary (87)
Vacations (9)
Clash of clans 클래시 오브.. (11)

글 보관함

달력

«   2019/11   »
          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
Total : 315,137
Today : 26 Yesterday : 27