반응형
studentMgr.h
#pragma once #includemain.cpp#include #include #include #include #define MAX_SIZE 10 int End_array = 0; int iCnt = 0; enum menu_number { 추가 = 1, 출력 = 2, 검색 = 3, 랜덤초기화 = 4, ID로 = 1, 이름으로 = 2, 되돌아가기 = 3, 수정 = 1, 삭제 = 2, 종료 = 9 }; struct Data { int iID; char cpName[10]; int iKor; int iEng; int iMath; int iSum_score; double dAvr; }; //데이터 입력받기 void InputData(Data* student, int iIndex) { printf("학생의 이름을 입력하세요 : "); scanf_s("%s", student[iIndex].cpName, 10); printf("국어 성적을 입력하세요 : "); scanf_s("%d", &student[iIndex].iKor); while (getchar() != '\n'); printf("영어 성적을 입력하세요 : "); scanf_s("%d", &student[iIndex].iEng); while (getchar() != '\n'); printf("수학 성적을 입력하세요 : "); scanf_s("%d", &student[iIndex].iMath); while (getchar() != '\n'); student[iIndex].iSum_score = student[iIndex].iKor + student[iIndex].iEng + student[iIndex].iMath; //총점 student[iIndex].dAvr = student[iIndex].iSum_score / 3.0; //평균 } //목록을 만듬 void CreateArray(Data* student) { bool bOnoff = true; if (iCnt >= MAX_SIZE) { printf("더 만들 수 없습니다.\n"); } while (bOnoff && iCnt < MAX_SIZE) { student[iCnt].iID = iCnt; InputData(student,iCnt); End_array++; iCnt++; while (bOnoff) { printf("계속 입력하시겠습니까? (y,n)\n"); char buff = _getch(); _getch(); //그냥 버퍼를 비우기 위한 용도 if (buff == 'y' || buff == 'Y') { break; } else if (buff == 'n' || buff == 'N') { bOnoff = false; } } } } //데이터 출력하기 void PrintData(Data* student, int id) { printf("%d\t%s\t%3d\t%3d\t%3d\t%3d\t%5.2lf\n", student[id].iID, student[id].cpName, student[id].iKor, student[id].iEng, student[id].iMath, student[id].iSum_score, student[id].dAvr); } //목록을 출력하기 void PrintArray(Data* student) { if (End_array == 0) { printf("입력된 데이터가 없습니다.\n"); return; } printf("ID\t이름\t국어\t영어\t수학\t총점\t평균\n"); for (int iCnt = 0; iCnt < End_array; iCnt++) { PrintData(student, iCnt); } } //id로 검색 int IdSearch(Data* student, int iSearchingValue) { for (int i = 0; i < End_array; i++) { if (iSearchingValue == student[i].iID) { printf("ID\t이름\t국어\t영어\t수학\t총점\t평균\n"); PrintData(student, i); return i; } } printf("찾으시는 데이터가 없습니다. \n"); return -1; } //이름으로 검색 int NameSearch(Data* student, char* sSearchingName) { for (int i = 0; i < End_array; i++) { if (!strcmp(sSearchingName, student[i].cpName)) { printf("ID\t이름\t국어\t영어\t수학\t총점\t평균\n"); PrintData(student, i); return i; } } printf("찾으시는 데이터가 없습니다. \n"); return -1; } //데이터 삭제하기. 배열의 인덱스 값으로 삭제한다. void DeleteData(Data* student,int iIndex) { for (int i = iIndex; i < End_array-1; i++) { student[i] = student[i + 1]; } End_array--; } //데이터 수정하기. void ChangeData(Data* student, int iIndex) { InputData(student, iIndex); } void AfterSearching(Data* student, int SearchingIndex) { if (SearchingIndex == -1) { return; } while (1) { int iSelectSearchingB = 0; printf("검색 후 원하는 작업을 선택하세요. \n"); printf("1. 값 수정 \n"); printf("2. 값 삭제 \n"); printf("3. 뒤로가기 \n"); scanf_s("%d", &iSelectSearchingB); switch (iSelectSearchingB) { case 수정: ChangeData(student, SearchingIndex); return; case 삭제: DeleteData(student, SearchingIndex); return; case 되돌아가기: return; default: printf("잘못입력하셨습니다 \n"); continue; } } } void RandomInitialization(Data* student) { char RandomName[4]; srand((unsigned)time(NULL)); for (int i = End_array; i < MAX_SIZE; i++) { student[i].iID = iCnt; RandomName[0] = 'A' + (rand() % 26); RandomName[1] = 'A' + (rand() % 26); RandomName[2] = 'A' + (rand() % 26); RandomName[3] = '\0'; strcpy_s(student[i].cpName, sizeof(char)*(strlen(RandomName) + 1), RandomName); student[i].iKor = rand() % 101; student[i].iEng = rand() % 101; student[i].iMath = rand() % 101; student[i].iSum_score = student[i].iKor + student[i].iEng + student[i].iMath; //총점 student[i].dAvr = student[i].iSum_score / 3.0; //평균 End_array++; iCnt++; } } void SaveData(Data* student) { FILE* Datafp; fopen_s(&Datafp, "save.txt", "wt"); fprintf(Datafp, "%2d\n", End_array); for (int i = 0; i < End_array; i++) { fprintf(Datafp, "%3d ", student[i].iID); fprintf(Datafp, "%10s ", student[i].cpName); fprintf(Datafp, "%3d ", student[i].iKor); fprintf(Datafp, "%3d ", student[i].iEng); fprintf(Datafp, "%3d ", student[i].iMath); fprintf(Datafp, "%3d ", student[i].iSum_score); fprintf(Datafp, "%lf\n", student[i].dAvr); } fclose(Datafp); } void LoadData(Data* student) { FILE* Datafp; fopen_s(&Datafp, "save.txt", "r"); fscanf_s(Datafp, "%2d", &End_array); for (int i = 0; i < End_array; i++) { fscanf_s(Datafp, "%3d", &student[i].iID); fscanf_s(Datafp, "%10s", student[i].cpName,10); fscanf_s(Datafp, "%3d", &student[i].iKor); fscanf_s(Datafp, "%3d", &student[i].iEng); fscanf_s(Datafp, "%3d", &student[i].iMath); fscanf_s(Datafp, "%3d", &student[i].iSum_score); fscanf_s(Datafp, "%lf\n", &student[i].dAvr); } fclose(Datafp); }
#include "studentMgr.h" void CreateArray(Data* student); //목록을 만듬 void PrintData(Data* student, int id); //데이터 출력하기 void PrintArray(Data* student); //목록을 출력하기 int IdSearch(Data* student, int iSearchingValue); //id로 검색 int NameSearch(Data* student, char* sSearchingName); //이름으로 검색 void DeleteData(Data* student, int iIndex); //데이터 삭제하기. 배열의 인덱스 값으로 삭제한다. void ChangeData(Data* student, int iIndex); //데이터 수정하기. void AfterSearching(Data* student, int SearchingIndex); //검색후 작업 void RandomInitialization(Data* student); //무작위 초기화 int main() { Data student[MAX_SIZE] = { 0, }; while (1) { int iSelect = 0; system("cls"); printf("메뉴\n"); printf("1. 데이터 추가 \n"); printf("2. 목록 출력\n"); printf("3. 목록에서 검색\n"); printf("4. 무작위 초기화 \n"); printf("5. 저장 \n"); printf("6. 불러오기 \n"); printf("9. 프로그램 종료\n"); scanf_s("%d", &iSelect); switch (iSelect) { case 5: SaveData(student); printf("데이터를 저장했습니다. \n"); _getch(); break; case 6: LoadData(student); printf("데이터를 불러왔습니다. \n"); _getch(); break; case 랜덤초기화: RandomInitialization(student); printf("임의로 데이터를 모두 초기화했습니다. \n"); _getch(); break; case 추가: { CreateArray(student); break; } case 출력: { PrintArray(student); _getch(); break; } case 검색: { if (iCnt == 0) { printf("입력된 데이터가 없습니다. \n"); continue; } int iSelectSearchingA = 0; printf("검색 방법을 선택하세요 \n"); printf("1. ID로 검색 \n"); printf("2. 이름으로 검색 \n"); printf("3. 뒤로가기 \n"); scanf_s("%d", &iSelectSearchingA); int SearchingIndex = 0; switch (iSelectSearchingA) { case ID로: { int iSearchingValue; printf("검색할 ID를 입력하세요 : "); scanf_s("%d", &iSearchingValue); SearchingIndex = IdSearch(student, iSearchingValue); AfterSearching(student, SearchingIndex); break; } case 이름으로: { char NameBuff[10]; printf("검색할 이름을 입력하세요 : "); scanf_s("%s", NameBuff, 10); SearchingIndex = NameSearch(student, NameBuff); AfterSearching(student, SearchingIndex); break; } case 되돌아가기: break; default: printf("잘못 입력하셨습니다 \n"); continue; } } continue; case 종료: printf("프로그램을 종료합니다. \n"); return 0; default: printf("잘못입력하셨습니다 \n"); continue; } } }
반응형