PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2006/06/18 18:45:53
Name 낭띠
Subject C언어 고수분들 질문좀~ ㅜㅜ

아래는 학생의 학번, 이름, 전화번호, 주소를 입력하고 데이터를 입,출력,수정,삭제 하는 프로그램인데요.

이건 프로그램이 종료되면 데이터가 사라져버리거든요.

파일 입,출력을 이용해서 변경하고 싶은데 도저히 모르겠네요.

아, 오늘까지 제출해야 되는 과제인데 좀 도와주세요~ ㅜㅜ


- - - - - -


#include <stdio.h>
#include <string.h>

enum { INPUT = 1, OUTPUT = 2, UPDATE = 3, DELETE = 4, QUIT = 5 };

struct STUDENT
{
        int pSerial;
        char pNumber[10];
        char pName[10];
        char pPhoneNumber[15];
        char pAdress[100];
};

void InitArray(struct STUDENT* pStudent, int nSize);
int Select(void);
void Input(struct STUDENT* pStudent, int nSize);
void Output(struct STUDENT* pStudent, int nSize);
void Update(struct STUDENT* pStudent, int nSize);
void Delete(struct STUDENT* pStudent, int nSize);
int Search(struct STUDENT* pStudent, int nSize);

int main(void)
{
        
        int i, nMenu=INPUT;
        struct STUDENT pStudent[30];

        InitArray(pStudent, 30);

        while(nMenu != QUIT)
        {
                nMenu=Select();

                switch(nMenu)
                {
                case INPUT  : Input(pStudent, 30);
                                  break;
        case OUTPUT : Output(pStudent, 30);
                                  break;
        case UPDATE : Update(pStudent, 30);
                                  break;
                case DELETE : Delete(pStudent, 30);
                              break;
                }
        }return 0;
}

/* 구조체 배열 초기화 */
void InitArray(struct STUDENT* pStudent, int nSize)
{
        int i;

        for(i=0; i<nSize; i++)
                pStudent[i].pSerial=0;
}

/* 메뉴 선택. 사용자로부터 메뉴를 입력받아서 반환합니다. */
int Select(void)
{
        int nMenu;

        printf("\n-------------------MENU--------------------\n");
        printf("1. 등록\t 2.출력\t 3.수정\t 4.삭제\t 5.종료\n");
        printf("-------------------------------------------\n");
        
        printf("번호선택 : ");
        scanf("%d", &nMenu);
        getchar();

        return nMenu;
}

/* 자료 입력. 새로운 학생을 배열에 추가합니다. */
void Input(struct STUDENT* pStudent, int nSize)
{
        int i;

        for(i=0; i<nSize; i++)
                if(pStudent[i].pSerial == 0)
                        break;

        printf("\n");
        printf("학번     : "); gets(pStudent[i].pNumber);
        printf("이름     : "); gets(pStudent[i].pName);
        printf("전화번호 : "); gets(pStudent[i].pPhoneNumber);
        printf("주소     : "); gets(pStudent[i].pAdress);
        
        pStudent[i].pSerial=i+1;
}

/* 학생 자료 출력. 배열 크기에 상관없이 모든 자료를 출력합니다.*/
void Output(struct STUDENT* pStudent, int nSize)
{
        int i;

        for(i=0; i<nSize; i++)
        {
                if(pStudent[i].pSerial != 0)
                {
                        printf("\n");
                        printf("번호     : %d\n", pStudent[i].pSerial);
                        printf("학번     : %s\n", pStudent[i].pNumber);
                        printf("이름     : %s\n", pStudent[i].pName);
                        printf("전화번호 : %s\n", pStudent[i].pPhoneNumber);
                        printf("주소     : %s\n", pStudent[i].pAdress);
                }
        }
}


/* 자료 수정. 기존의 학생 자료를 수정합니다. 번호는 바뀌지 않습니다.*/
void Update(struct STUDENT* pStudent, int nSize)
{
        int i=Search(pStudent, nSize);

        if( i != nSize)
        {
                printf("\n");
                printf("학번     : "); gets(pStudent[i].pNumber);
            printf("이름     : "); gets(pStudent[i].pName);
            printf("전화번호 : "); gets(pStudent[i].pPhoneNumber);
            printf("주소     : "); gets(pStudent[i].pAdress);
        }
}

/* 자료 삭제. 학생 자료를 배열에서 삭제합니다. */
void Delete(struct STUDENT* pStudent, int nSize)
{
        int i=Search(pStudent, nSize);

        if(i != nSize)
                pStudent[i].pSerial=0;
}

/* 자료 검색. 번호와 같은 학생을 검색합니다.
   찾으면 배열에서의 인덱스, 못 찾으면 배열 크기를 반환합니다. */
int Search(struct STUDENT* pStudent, int nSize)
{
        int i, nSerial;

        printf("\n번호 : ");
        scanf("%d", &nSerial);
    getchar();

        if(nSerial == 0)
                return nSize;

        for(i=0; i<nSize; i++)
                if(pStudent[i].pSerial == nSerial)
                        break;

    return i;
}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
김연우
06/06/18 19:21
수정 아이콘
저장하기

FILE *fp;

fp=fopen("파일이름","w");
fprintf(fp,"%s",pName); //fp만 붙을뿐 printf와 사용법 동일
fprintf(fp,"%s",pPhoneName); //fp만 붙을뿐 printf와 사용법 동일
fclose(fp);

불러오기

FILE *fp;

fp=fopen("파일이름","r"); //w가 (write가) r로(read)로 바뀜
fscanf(fp,"%s",pName); //fp만 붙을뿐 scanf와 사용법 동일
fscanf(fp,"%d",&pSerial); //인티저일때 &붙여야 하는것도 같음
fclose(fp);


아주 간단한 파일 입출력 예입니다.


좀더 설명이 필요하시다면
http://winapi.co.kr/의
C/C++강좌(2부 C.고급에 파일 입출력 있습니다.)
C/C++레퍼런스(함수에 대한 설명)
이 있습니다.
06/06/18 19:32
수정 아이콘
진짜 죄송한데, 저거 전체적으로 좀 손봐주시면 안될까요? ㅜㅜ
Return Of The Panic
06/06/18 21:33
수정 아이콘
FILE 로 포인터 잡는 것보다 fstream 이 더 편한데, C++ 이 아니라 그냥 C 인가 보내요...
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
18077 싸게 나온 컴터를 사려는데..(좀 봐주세요) [4] willbefine..1552 06/06/18 1552
18076 파이터포럼 DailyMVP에 관해서 질문이요. [1] Andante1990 06/06/18 1990
18075 SK전국고교생 대입학력경시대회 말인데요// [3] 운혁2366 06/06/18 2366
18074 C언어 고수분들 질문좀~ ㅜㅜ [3] 낭띠2945 06/06/18 2945
18073 피파 온라인을 하려는데.. 타마마임팩트1560 06/06/18 1560
18072 한국 프로야구 질문 [3] 슈로대 짱1581 06/06/18 1581
18070 스타크래프트 채널 추천해주세요..그리고 [1] 아레스1972 06/06/18 1972
18069 이번스타리그 결승전 vip 티켓에 대해 문의.. NoWayOut1580 06/06/18 1580
18067 자책골 [8] gkrk1898 06/06/18 1898
18066 북한 상황이 왜이런가요? [2] BluSkai2134 06/06/18 2134
18065 오늘 축구해설이요 [1] 호나우담요1638 06/06/18 1638
18064 엑스맨에 관한 질문입니다. [1] .JunE.2156 06/06/18 2156
18063 야수영화보신분...........그리고........ [1] 한빛스타즈!!1773 06/06/18 1773
18061 폴라로이드 카메라 질문입니다.. trmey1969 06/06/18 1969
18059 베넷이 아닌 IPX 가 됩니다.. 라구요1629 06/06/18 1629
18058 SATA 2 HDD를 기존 PC에 한대 더 물리려는데 가능한가요? 소나기아다리1664 06/06/18 1664
18055 프저전공1업빌드 더 강력하게 만들순 없나 [5] 마루2151 06/06/18 2151
18053 사이트에 대한 질문입니다. 진리탐구자1711 06/06/18 1711
18052 테란 상대로 질문입니다. [5] ViperJin1551 06/06/18 1551
18051 갑자기 스타가 안되네요 ㅠ [1] 느낌토스2067 06/06/17 2067
18050 RAW나 스맥다운에서요. [8] 바카스1585 06/06/17 1585
18049 츄리닝 작가 바꼈나요? 탄야2285 06/06/17 2285
18048 한/영 전환이 됫다가 안됫다가 하네요 [1] Daylight1812 06/06/17 1812
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로