아직 완성도 안되고 하루종일 파일 입출력 관련만 주물럭 주물럭...
우선 파일 입출력이 가능하여 추후에 관리를 편하게 해줍니다.
짜다 말아서 이상하게 엉켜있는 부분이 있습니다.
파일이 없다면 새로 생성 합니다.
 l닫기  
Code Type : C
 l닫기  
Code Type : C
#include< stdio.h>
#include< stdlib.h>
#include< string.h>
#include< ctype.h>
typedef struct USERSTR
{
    char name[30];
    double score;
    int year;
    int term;
}USER;
typedef struct LISTSTR
{
    char name[30];
    int year;
    int term;
    int inpil;
    int major;
    int sisoo;
}LIST;
typedef struct TOEICSTR
{
    int score;
}TOEIC;
#define MAX 100
int list_limit=0;
int user_limit=0;
int toeic_limit=0;
void save(USER *user, LIST *list, TOEIC *toeic);
void load(USER *user, LIST *list, TOEIC *toeic);
void clrview();
void help_menu();
void about_menu();
void main_menu();
void user_manager_quick (USER *user, LIST *list, TOEIC *toeic);
void grade_menu(USER *user, LIST *list, TOEIC *toeic);
void list_menu(USER *user, LIST *list, TOEIC *toeic);
void mystats();
void load_list(USER *user, LIST *list, TOEIC *toeic);
void list_view(LIST *list);
void list_manager (USER *user, LIST *list, TOEIC *toeic);
void revision(USER *user);
void DELETE(USER *user);
void grade_cal(); // 간이 평점 계산기
char *grade(double score);
char *pil(int no);
void main()
{
    char temp[10]={0};
    char *sel;
    USER *user={0};
    LIST *list={0};
    TOEIC *toeic={0};
    user = (USER*)malloc(sizeof(USER) * MAX);
    list = (LIST*)malloc(sizeof(LIST) * MAX);
    toeic = (TOEIC*)malloc(sizeof(TOEIC) * MAX);
    load(user, list, toeic); // 데이터 읽어오기, 없을경우 만들어짐 ㅋㅋㅋ
    sel=temp;
    while(1)
    {
        main_menu();
        gets_s(sel,5);
        sel=strupr(sel);
        if (*sel=='1') // 성적 관리
            grade_menu(user,list, toeic);
        if (*sel=='2') // 수강 과목 관리
            list_menu(user,list, toeic);
        if (*sel=='3') // 토익 과목 관리
            list_manager(user,list, toeic);
        if (*sel=='4') // 현재 상황
            mystats();
        if (*sel=='5') // 간이 평점 계산기
            grade_cal();
        if (!strcmp(sel,"H")) // 도움말
            help_menu();
        if (!strcmp(sel,"A")) // 본 프로그램에 대해서
            about_menu();
        if (!strcmp(sel,"X")) // 끝내기
            break;
    }
}
void save(USER *user, LIST *list, TOEIC *toeic)
{
    FILE *user_man, *list_man, *toeic_man;
    user_man = fopen("user.txt", "w");
    fwrite(&user_limit, sizeof(user_limit),1,user_man);
    fwrite(user, sizeof(USER)*MAX,1,user_man);
    fclose(user_man);
    list_man = fopen("list.txt", "w");
    fwrite(&list_limit, sizeof(list_limit),1,list_man);
    fwrite(list, sizeof(USER)*MAX,1,list_man);
    fclose(list_man);
    
    toeic_man = fopen("toeic.txt", "w");
    fwrite(&toeic_limit, sizeof(toeic_limit),1,toeic_man);
    fwrite(toeic, sizeof(USER)*MAX,1,toeic_man);
    fclose(toeic_man);
}
void load(USER *user, LIST *list, TOEIC *toeic)
{
    FILE *user_man, *list_man, *toeic_man;
    // 성적 입력부분과 과목 입력 부분이 없다면 새로 만든다.
    user_man = fopen("user.txt", "r");
    if(!user_man)
    {
        user_man = fopen("user.txt", "w+");
        fclose(user_man);
    }
    else
    {
        fread(&user_limit, sizeof(user_limit),1,user_man);
        fread(user, sizeof(USER)*MAX,1,user_man);
        fclose(user_man);
    }
    list_man = fopen("list.txt", "r");
    if(!list_man)
    {
        list_man = fopen("list.txt", "w+");
        fclose(list_man);
    }
    else
    {
        fread(&list_limit, sizeof(list_limit),1,list_man);
        fread(list, sizeof(LIST)*MAX,1,list_man);
        fclose(list_man);
    }
    
    toeic_man = fopen("toeic.txt", "r");
    if(!toeic_man)
    {
        toeic_man = fopen("toeic.txt", "w+");
        fclose(toeic_man);
    }
    else
    {
        fread(&toeic_limit, sizeof(toeic_limit),1,toeic_man);
        fread(toeic, sizeof(TOEIC)*MAX,1,toeic_man);
        fclose(toeic_man);
    }
}
void clrview()
{    
    system("cls");
}
void help_menu()
{
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##                 For My Future - Help                 ##");
    puts("##----------------------------------------------------------------------##");
    puts("##  공학인증에 특화된 미래를 위한 성적 관리 프로그램 ( 광운대학교 용 )  ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");
    puts("##  주의 - 자세한 사항은 ReadMe.txt를 읽어보세요.                ##");
    puts("##                                               ##");
    puts("##  1. 성적 관리 - 수강 과목 중에서 자신이 수강한 과목의 성적을 입력,  ##");
    puts("##            관리하며, 평점등의 상황을 볼 수 있습니다.        ##");  
    puts("##                                               ##");
    puts("##  2. 수강 과목 관리 - 학기별 자신이 수강해야할 과목이나,          ##");
    puts("##               공학인증 과목을 설정 하고 관리 해줍니다.      ##");
    puts("##                                               ##");
    puts("##  3. 토익 점수 관리 - 자신의 토익 점수를 관리 합니다.            ##");
    puts("##                                               ##");
    puts("##  4. 현재 상황 보기 - 파일, 화면으로 전체 상황을 확인합니다.       ##");
    puts("##                                               ##");
    puts("##  5. 간이 평점 계산기 - 성적과 학점만을 입력하여 빠르게 평점을 확인  ##");
    puts("##                ( 이경우 파일에 저장되지 않습니다. )       ##");    
    puts("##                                               ##");
    puts("##----------------------------------------------------------------------##");
    system("pause");
}
void about_menu()
{
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##                For My Future - About                 ##");
    puts("##----------------------------------------------------------------------##");
    puts("##  공학인증에 특화된 미래를 위한 성적 관리 프로그램 ( 광운대학교 용 )  ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");
    puts("##  성공적인 취업을 위한 학점 관리 프로그램입니다.               ##");
    puts("##  기본적으로 자신의 학점과 토익 성적등 졸업에 필요한 자료들을      ##");
    puts("##  입력한뒤 추후 관리를 할 수 있도록 만들어 주는 프로그램입니다.     ##");
    puts("##  공학인증제를 하는 학생들을 위해 자신이 이수해야할 과목등을       ##");
    puts("##  알려주며 자신이 이수한 과목등에 대해 철저하게 관리를 해줍니다.    ##");
    puts("##                                               ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");
    puts("##  본 프로그램은 2007년 고급 프로그래밍 및 실습의 프로젝트를 위해    ##");
    puts("##  작성되고, 제출되는 프로그램입니다.                       ##");
    puts("##                                               ##");
    puts("##  소스코드는 광운대학교 전자통신공학과 3학년                  ##");
    puts("##  오형탁 ( 2002711158 ) , 김철기 ( 2005709043 ) 가 작성하였습니다.   ##");
    puts("##                                               ##");
    puts("##----------------------------------------------------------------------##");
    system("pause");
}
void main_menu()
{
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##                    For My Future                   ##");
    puts("##----------------------------------------------------------------------##");
    puts("##  공학인증에 특화된 미래를 위한 성적 관리 프로그램 ( 광운대학교 용 )  ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");
    puts("##  1. 성적 관리    ##  2. 수강 과목 관리   ##  3. 토익 점수 관리    ##");
    puts("##                                               ##");
    puts("##  4. 파일 또는 화면으로 현재 상황 보기    ##  5. 간이 평점 계산기  ##");
    puts("##                                               ##");
    puts("##  a. 본 프로그램에 대해서...           ##  h. 도움말 보기      ##");
    puts("##                                               ##");
    puts("##----------------------------------------------------------------------##");
    printf(">> 원하시는 메뉴를 고르세요 ( Quit : X ) --> ");
}
void user_manager_quick (USER *user, LIST *list, TOEIC *toeic)
{
    printf("\n빠른 입력 모드입니다. ( Quit : 과목 이름에서 엔터 )\n");
    while(user_limit < MAX)
    {
        printf("\n수강한 과목 이름 : ");
        gets(user[user_limit].name);
        if(*user[user_limit].name == '\0')
            break;
        strcpy(list[list_limit].name,user[user_limit].name);
        printf("받은점수 : ");
        scanf("%f", &(user+user_limit)->score);
        fflush(stdin);
        printf("수강연도 : ");
        scanf("%d", &(user+user_limit)->year);
        fflush(stdin);
        (list+list_limit)->year=(user+user_limit)->year;
        printf("수강 학기 : ");
        scanf("%d", &(user+user_limit)->term);
        fflush(stdin);
        (list+list_limit)->term=(user+user_limit)->term;
        printf("인필 (1:인필 0:아님): ");
        scanf("%d", &(list+list_limit)->inpil);
        fflush(stdin);
        printf("전공 (1:전공 0:아님) : ");
        scanf("%d", &(list+list_limit)->major);
        fflush(stdin);
        printf("학점 (시수) : ");
        scanf("%d", &(list+list_limit)->sisoo);
        fflush(stdin);
        user_limit++;
        list_limit++;
    }
    save(user,list,toeic);
    return;
}
void grade_menu(USER *user, LIST *list, TOEIC *toeic)
{
    char temp[10];
    char *sel;
    sel=temp;
    
    while(1)
    {
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##              For My Future - 성적 관리기                ##");
    puts("##----------------------------------------------------------------------##");
    puts("##      성적 관리 메뉴 입니다.  원하는 메뉴를 선택하세요.        ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");
    puts("## 1. 빠른 입력  -  수강 과목 관리를 거치지 않고 빠르게 입력합니다.    ##");
    puts("##                                               ##");
    puts("## 2. 일반 입력  -  수강 과목 관리에 입력된 데이터를 토대로 자신의    ##");
    puts("##            학점을 입력 받습니다.                     ##");
    puts("##                                               ##");
    puts("## 3. 평점 보기  -  전체적인 학점을 봅니다.                    ##");
    puts("##                                               ##");
    puts("##----------------------------------------------------------------------##");
    printf(">> 현재 %03d 건의 성적이 입력되어 있습니다.\n>> 메뉴를 선택하세요 ( Quit : X )  -->",user_limit);
        gets_s(sel,5);
        sel=strupr(sel);
        if (*sel=='1') // 빠른 입력
            user_manager_quick(user,list, toeic);
        if (*sel=='2') // 일반입력
            list_manager(user,list, toeic);
        if (*sel=='3') // 평점보기
            list_manager(user,list, toeic);
        if (!strcmp(sel,"X")) // 끝내기
            break;
    }
}
void list_menu(USER *user, LIST *list, TOEIC *toeic)
{
    char temp[10];
    char *sel;
    sel=temp;
    
    while(1)
    {
        clrview();
        puts("##----------------------------------------------------------------------##");
        puts("##            For My Future - 수강 과목 관리기              ##");
        puts("##----------------------------------------------------------------------##");
        puts("##     수강 과목  관리 메뉴 입니다.  원하는 메뉴를 선택하세요.     ##");
        puts("##----------------------------------------------------------------------##");
        puts("##                                               ##");
        puts("## 1. 과목 입력  -  자신이 수강할 과목이나 수강한 과목의 기본 정보를   ##");
        puts("##            입력하여 관리합니다..                     ##");
        puts("##                                               ##");
        puts("## 2. 과목 보기  -  특정한 학기나, 전체적인 과목을 봅니다.          ##");
        puts("##                                               ##");
        puts("##----------------------------------------------------------------------##");
        printf(">> 현재 %03d 건의 과목이 입력되어 있습니다.\n>> 메뉴를 선택하세요 ( Quit : X )  -->",list_limit);
                
        gets_s(sel,5);
        sel=strupr(sel);
        if (*sel=='1') // 과목 입력
            list_manager(user,list, toeic);
        if (*sel=='2') // 일반입력
            list_view(list);
        if (!strcmp(sel,"X")) // 끝내기
            break;
    }
}
void mystats()
{
    int list;
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##               For My Future - 현재 상황                ##");
    puts("##----------------------------------------------------------------------##");
    puts("##                                               ##");    
    for(list=0;list < user_limit;list++)
        printf("##  0000년 00학기 -  00개의 과목 , 평점 : 0.000                 ##\n");
    puts("##                                               ##");
    printf("##  전체 평점 - 과목 : 00개의 과목 ,  평점 : 0.000               ##\n");
    puts("##                                               ##");
    printf("##  토익 점수 - 총 00 개의 입력중 최고점은 000 입니다. 졸업 XX가      ##\n");
    puts("##                                               ##");
    puts("## 상세 정보는 Report.txt 를 확인하세요.                      ##");
    puts("##----------------------------------------------------------------------##");
    printf(">> Report.txt파일로 저장하시겠습니까? ( Quit : X )  -->\n");
    system("pause");
}
void load_list(USER *user, LIST *list, TOEIC *toeic)
{
    int i=0;
    clrview();
    for(i=0;i <= user_limit;i++)
        printf("%s %d %d %d %d %d %d ");
    system("pause");
}
void list_view(LIST *list)
{
    int i=0;
    clrview();
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##  과목명                  | 연도 | 학기 | 인필 | 전공 | 시수 ##");
    puts("##----------------------------------------------------------------------##");
    for(i=0;i < list_limit;i++)
    {
        printf("##  %-30s  | %04d | %04d | %04s | %04s | %04d ##\n",
        (list+i)->name,(list+i)->year,(list+i)->term,pil((list+i)->inpil),pil((list+i)->major),(list+i)->sisoo);
        if(i%16==15) system("pause");
    }
    puts("##----------------------------------------------------------------------##");
    system("pause");
}
char *grade(double score)
{
    char *grade;
    grade = (char *)calloc(2, sizeof(char));
    if(score >= 4.5) strcpy(grade, "A+");
    else if(score >= 4.0) strcpy(grade, "A");
    else if(score >= 3.5) strcpy(grade, "B+");
    else if(score >= 3.0) strcpy(grade, "B");
    else if(score >= 2.5) strcpy(grade, "C+");
    else if(score >= 2.0) strcpy(grade, "C");
    else if(score >= 1.5) strcpy(grade, "D+");
    else if(score >= 1.0) strcpy(grade, "D");
    else strcpy(grade, "F");
    return grade;
}
char *pil(int no)
{
    char *grade;
    grade = (char *)calloc(2, sizeof(char));
    return (no) ? strcpy(grade, "필수"):strcpy(grade, "아님");
}
void list_manager (USER *user, LIST *list, TOEIC *toeic)
{
    printf("\n리스트입력모드입니다. ( Quit : 과목 이름에서 엔터 )");
    while(list_limit < MAX)
    {
        printf("\n수강 과목 이름 : ");
        gets((list+list_limit)->name);
        if(*(list+list_limit)->name == '\0')
            break;
        printf("수강연도 : ");
        scanf("%d", &(list+list_limit)->year);
        fflush(stdin);
        while(1)
        {
            printf("수강 학기 ( 1: 봄학기 2: 가을학기 3:여름계절 4: 겨울계절 ) : ");
            scanf("%d", &(list+list_limit)->term);
            fflush(stdin);
            if((list+list_limit)->term>0 && (list+list_limit)->term < 5) break;
        }
        while(1)
        {
            printf("인필 (1:인필 0:아님): ");
            scanf("%d", &(list+list_limit)->inpil);
            fflush(stdin);
            if(((list+list_limit)->inpil)>=0 && ((list+list_limit)->inpil) < 2) break;
        }
        while(1)
        {
            printf("전공 (1:전공 0:아님) : ");
            scanf("%d", &(list+list_limit)->major);
            fflush(stdin);
            if(((list+list_limit)->major)>=0 && ((list+list_limit)->major) < 2) break;
        }
        while(1)
        {
            printf("학점 (시수) ( 1,2,3 ) : ");
            scanf("%d", &(list+list_limit)->sisoo);
            fflush(stdin);
            if(((list+list_limit)->sisoo)>0 && ((list+list_limit)->sisoo) < 4) break;
        }
        list_limit++;
    }
    save(user, list, toeic);
}
void revision(USER *user){
    int i=0,sel,choice;
    char *target;
    target = (char*)malloc(30*sizeof(char));
    printf("\n이름을 입력하세요: ");
    gets(target);
    while(i < user_limit)
    {
        if(!strcmp(target, (user+i++)->name))
        break;
    }
    if(i==user_limit)
        printf("\n입력하신 이름 또는 학번이 없습니다.\n");
    
    else
    {
        do
        {
            printf("\n수정할 것을 선택하세요!!");
            printf("\n1.이름");
            printf("\n2.학번");
            printf("\n3.C언어성적");
            printf("\n4.통계학성적");
            printf("\n5.UNIX성적");
            printf("\n6.영어성적");
            printf("\n선택: ");
            scanf("%d", &choice);
            fflush(stdin);
        }while(choice < 1 || choice > 6);
    
        switch(choice)
        {
            case 1:
                printf("\n수정할 이름을 입력: ");
                gets((user+i)->name);
                break;
            case 2:
                printf("\n수정할 학번을 입력: ");
                gets((user+i)->name);
                break;
        }
    }
}
void DELETE(USER *user){
    int sel,i=0;
    char *target;
    target = (char*)malloc(30*sizeof(char));
        printf("\n이름을 입력하세요: ");
        gets(target);
        while(i < user_limit){
            if(!strcmp(target, (user+i++)->name))
                break;
        }
    if(i==user_limit)
        printf("\n입력하신 이름 또는 학번이 없습니다.\n");
    else{
        for(i;i==user_limit;i++);
            *(user+i) = *(user+i+1);
            user_limit = user_limit - 1;
        printf("\n삭제되었습니다. \n");
    }
}
void grade_cal() // 간이 평점 계산기
{
    int calnum=1,total_sisoo=0,sisoo=0;
    double score=0;
    char temp[10],*grade;
    grade=temp;
    while(1)
    {
    clrview();
    puts("##----------------------------------------------------------------------##");
    puts("##            For My Future - 간이 평점 계산기              ##");
    puts("##----------------------------------------------------------------------##");
    puts("##    간이 성적 계산기 입니다. 평점과 과목당 학점을 입력해 주세요.    ##");
    puts("##----------------------------------------------------------------------##");
    if(calnum==1)
    printf(">> 현재 입력된 데이터가 없습니다.\n");
    else
    printf(">> 현재 전체 평점 %1.3f 에 총 %2d 학점이 입력되어 있습니다.\n",score/total_sisoo,total_sisoo);
    printf("\n>> %2d 번째 과목의 평점(점수)은?  ( Quit : 엔터 ) --> ",calnum);
    gets(grade);
    if(!*grade) break;
    grade=strupr(grade);
    printf(">> %2d 번째 과목의 학점(시수)는?  --> ",calnum);
    scanf("%d",&sisoo);
    fflush(stdin);
    
    if(!strcmp(grade,"A+")) score+=4.5*sisoo;
    else if(!strcmp(grade,"A")) score+=4.0*sisoo;
    else if(!strcmp(grade,"B+")) score+=3.5*sisoo;
    else if(!strcmp(grade,"B")) score+=3.0*sisoo;
    else if(!strcmp(grade,"C+")) score+=2.5*sisoo;
    else if(!strcmp(grade,"C")) score+=2*sisoo;
    else if(!strcmp(grade,"D+")) score+=1.5*sisoo;
    else if(!strcmp(grade,"D")) score+=1*sisoo;
    else if(!strcmp(grade,"F")) score+=0*sisoo;
    else score+=atof(grade)*sisoo;
    total_sisoo+=sisoo;
    calnum++;
    }
    if(calnum>1)
    {
    puts("\n\n##----------------------------------------------------------------------##");
    printf("##        전체 평점 %1.3f 에 총 %02d 학점을 이수하였습니다.        ##\n",score/total_sisoo,total_sisoo);
    puts("##----------------------------------------------------------------------##");
    }
    system("pause");
}
 l닫기
 l닫기