티스토리 뷰

LANGUAGE/C++

[C++] 성적처리 파일 입/출력

진심스테이크 2018. 4. 15. 15:44

 

☆ 도움을 주신 분 ☆

http://tang1993.tistory.com 임태영블로그 ★

 

#pragma warning(disable:4996)
#include "stdafx.h"
#include<fstream> 
#include<iostream>
#include<string>
using namespace std;

//이름 클래스 
class Name{
    string name;
public:
    void setName(string name) { this->name = name; }
    string getName() { return name; }
};

//과목 클래스
class Subject {
    int subject;
public:
    void setSub(int subject) { this->subject = subject; }
    int getSub() { return subject; }
};

//성적 관리 클래스
class ScoMag{
    Name nn;
    Subject kor;
    Subject eng;
    Subject math;
    ScoMag *next;
public:
    ScoMag(){
        next = NULL;
    }

    //이름 setter,getter 함수
    void setName(string name) { nn.setName(name); }
    string getName() { return nn.getName(); }

    //수학 setter,getter 함수
    void setMath(int score) { math.setSub(score); }
    int getMath() { return math.getSub(); }

    //영어 setter,getter 함수
    void setEng(int score) { eng.setSub(score); }
    int getEng() { return eng.getSub(); }

    //국어 setter,getter 함수
    void setKor(int score) { kor.setSub(score); }
    int getKor() { return kor.getSub(); }

    //총점,평균 getter함수 
    int getTotal() { return math.getSub() + kor.getSub() + eng.getSub(); }
    float getAvg() { return (math.getSub() + kor.getSub() + eng.getSub()) / 3.f; }

    //객체끼리 연결
    void setLink(ScoMag *p){
        next = p;
        p = NULL;
    }
    ScoMag* getLink(){
        return next;
    }
};

void input(ScoMag *h, ScoMag *c, ScoMag *n, ofstream& fout);
void output(ScoMag *h, ScoMag *c, ScoMag *n, ifstream& fin);

void main(){
    int num;
    ScoMag *h, *c, *n; //h=head c=cur n=next
    ifstream fin; //파일 읽기
    ofstream fout; //파일 쓰기

    h = NULL;
    c = NULL;
    n = NULL;

    //더미생성
    n = new ScoMag[1];
    h = n;
    c = n;

    while (true){
        cout << "1.입력  2.출력  3.종료" << endl;
        cin >> num;
        switch (num) {
        case 1: //입력
            input(h, c, n, fout);
            break;
        case 2: //출력
            output(h, c, n, fin);
            break;
        case 3: //종료
            exit(-1);
        default:
            cout << "잘못입력하셨습니다";
            break;
        }
    }
}

void input(ScoMag *h, ScoMag *c, ScoMag *n, ofstream& fout){
    string name;
    int score;
    n = new ScoMag[1];
    
    //이름 입력
    cout << "이름 : " << endl;
    cin >> name;
    n->setName(name);
    
    //국어 입력
    cout << "국어 : " << endl;
    cin >> score;
    n->setKor(score);

    //수학 입력
    cout << "수학 : " << endl;
    cin >> score;
    n->setMath(score);

    //영어 입력
    cout << "영어 : " << endl;
    cin >> score;
    n->setEng(score);

    //std::ios_base::out | std::ios_base::app -> 파일 이어쓰기
    //입력한 내용 파일에 입력
    fout.open("성적.txt", std::ios_base::out | std::ios_base::app);
    fout << "------------------" << endl;
    fout << "이름 : " << n->getName() << endl;
    fout << "국어 : " << n->getKor() << endl;
    fout << "수학 : " << n->getMath() << endl;
    fout << "영어 : " << n->getEng() << endl;
    fout << "총점 : " << n->getKor() + n->getMath() + n->getEng() << endl;
    fout << "평균 : " << (n->getKor() + n->getMath() + n->getEng()) / 3.f << endl;
    fout.close();

    while (c->getLink() != NULL){ //다음 객체로 커서 옮김
        c = c->getLink();
    }
    c->setLink(n);
}

void output(ScoMag *h, ScoMag *c, ScoMag *n, ifstream& fin){
    system("cls");
    fin.open("성적.txt");
    string s[100];
    for (int i = 0; i < 6; i++) {
        fin >> s[i];
        if (s[i] == "") { //공백을 만나면 탈출
            break;
        }
    }
    fin.close();

    for (int i = 0; i < 100; i++) {
        cout << s[i];
        if (s[i] == "") { //공백을 만나면 탈출
            break;
        }
    }
}

 

 

'LANGUAGE > C++' 카테고리의 다른 글

[C++] 오버로딩 불가능 연산자  (0) 2018.04.13
[C++] FILE INPUT/OUTPUT  (0) 2018.03.16
[C++] TEMPLATE - 템플릿  (0) 2018.03.16
[C++] STRING 직접 구현  (0) 2018.03.15
[C++] OPERATOR FUNCTION - 연산자 함수  (0) 2018.03.14
댓글