본문 바로가기
C++

[c++]파일 로딩 프로그램

by 코모's 2020. 4. 2.
반응형

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#pragma warning (disable : 4996)
 
using namespace std;
 
class ItemInfo
{
public :
    char m_Name[128];
    int m_Level;
    int m_Cost;
    float m_AttRate; //공격력 상승률 0.0f~ 1.0f
 
public:
    void PrintInfo()
    {
        printf("아이템이름(%s) 레벨(%d) 가격(%d) 공격상승률(%.2f)\n",m_Name, m_Level, m_Cost, m_AttRate);
    }
};
 
void LoadItemList(vector<ItemInfo>* a_ItemList)
{
    //파일로딩
 
    FILE* a_rFP = fopen("MySaveItem.txt", "rt");
 
    if (a_rFP != NULL)
    {
        int num =0;
        fscanf(a_rFP, "%d", &num);
 
        for (int i = 0; i < num; i++)
        {
            ItemInfo TempList;
 
            fscanf(a_rFP, "%s %d %d %f", TempList.m_Name, &TempList.m_Level, &TempList.m_Cost, &TempList.m_AttRate);
 
            a_ItemList->push_back(TempList);
        }
        fclose(a_rFP);
        printf("파일을 정상적으로 로딩했습니다.\n");
    }
    else
        printf("파일이 존재하지 않거나 파일 읽기를 실패했습니다.\n");
}
 
void SaveItemList(vector<ItemInfo>* a_ItemList)
{
    //파일저장
 
    FILE* a_wFP = fopen("MySaveItem.txt", "wt");
    if (a_wFP != NULL)
    {
        fprintf(a_wFP, "%d", a_ItemList->size());
 
        for (int i = 0; i < a_ItemList->size(); i++)
        {
            fprintf(a_wFP, "%s %d %d %f\n", (*a_ItemList)[i].m_Name, (*a_ItemList)[i].m_Level, (*a_ItemList)[i].m_Cost, (*a_ItemList)[i].m_AttRate);
        }        
               
        fclose(a_wFP);
        printf("파일이 정상적으로 저장 되었습니다.\n");
    }
    else
        printf("파일 저장이 실패 하였습니다.\n");
 
}
 
void PrintList(vector<ItemInfo>* a_ItemList)
{
    printf("<아이템 리스트>\n");
    for (int i = 0; i < a_ItemList->size(); i++)
    {
        printf("%d번",i+1);
        (*a_ItemList)[i].PrintInfo();
    }
}
 
void NewItemAdd(vector<ItemInfo>* a_ItemList)
{
    ItemInfo TempList;
 
    printf("%d번 아이템의 이름을 입력하세요 : ", a_ItemList->size() + 1);
    scanf("%s", TempList.m_Name);
    getchar();
 
    printf("레벨을 입력하세요 : ");
    scanf("%d", &TempList.m_Level);
    getchar();
 
    printf("가격을 입력하세요 : ");
    scanf("%d", &TempList.m_Cost);
    getchar();
 
    printf("공격 상승률을 입력하세요 : ");
    scanf("%f", &TempList.m_AttRate);
    getchar();
 
    a_ItemList->push_back(TempList);
 
    SaveItemList(a_ItemList);
    PrintList(a_ItemList);
 
}
 
bool MySort(const ItemInfo& a, const ItemInfo& b)
{
    return a.m_Level > b.m_Level;
}
 
void SortList(vector<ItemInfo>* a_ItemList)
{
    sort(a_ItemList->begin(), a_ItemList->end(), MySort);
    PrintList(a_ItemList);
}
 
void DeleteItem(vector<ItemInfo>* a_ItemList)
{
    PrintList(a_ItemList);
 
    printf("삭제할 아이템 번호를 선택해 주세요 :");
    int a_Sel = 0;
    scanf_s("%d", &a_Sel);
    getchar();
 
    a_Sel--;
 
    (*a_ItemList).erase((*a_ItemList).begin() + a_Sel);
 
    SaveItemList(a_ItemList);
 
    PrintList(a_ItemList);
 
}
 
void main()
{
    vector<ItemInfo> m_ItemList;
 
    LoadItemList(&m_ItemList);
 
    while (true)
    {
        system("cls");
 
        printf("1.아이템 추가 2.아이템 리스트 보기(레벨순) 3.아이템 삭제 99.프로그램 종료 :");
        int a_Sel = 0;
        scanf("%d", &a_Sel);
        getchar();
 
        if (a_Sel < 1 || a_Sel >3)
        {
            if (a_Sel == 99)
                break;
            continue;
            system("cls");
        }
 
        if (a_Sel == 1)//추가
        {
            NewItemAdd(&m_ItemList);
        }//추가
        else if (a_Sel == 2)//리스트
        {
            SortList(&m_ItemList);
        }//리스트
        else if (a_Sel == 3)//삭제
        {
            DeleteItem(&m_ItemList);
        }//삭제
 
        getchar();
        system("cls");
 
    }//while (true)
}
반응형

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

[c++] STL Container의 종류  (0) 2021.08.18
[c++] STL 이란?  (0) 2021.08.18
[c++] 스택(Stack)과 힙(Heap)  (0) 2021.08.16
[c++] 포인터와 레퍼런스  (0) 2021.08.09
[c++]게임 인벤토리  (0) 2020.04.02