먼저 리스트를 작성하고 그 리스트에 맞게 성적들을 입력하면됩니다..
공학인증이 아니더라도... 수강해야할 과목등을 입력해두고
닫기
Code Type : C
#include< stdio.h>
#include< stdlib.h>
#include< string.h>
#include
// todo : 토익 수정 , 전체평점 토익입력, 유져 노말 입력
// readme.txt 와 result.txt를 만들까 말까;;;
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 clrscr();
void main_menu();
void help_menu();
void about_menu();
void grade_menu(USER *user, LIST *list, TOEIC *toeic);
void list_menu(USER *user, LIST *list, TOEIC *toeic);
void toeic_menu(USER *user, LIST *list, TOEIC *toeic);
// 나의 상태 보기
void mystats(USER *user, LIST *list, TOEIC *toeic);
// 목록 보기 부분
void list_view(LIST *list);
void user_view(USER *user);
void toeic_view(TOEIC *toeic);
// 입력 메니져들
void user_manager_quick (USER *user, LIST *list, TOEIC *toeic);
void user_manager (USER *user, LIST *list, TOEIC *toeic);
void list_manager (USER *user, LIST *list, TOEIC *toeic);
void toeic_manager (USER *user, LIST *list, TOEIC *toeic);
// 수정 삭제 정렬 메니져들
void change_manager(USER *user, LIST *list, TOEIC *toeic, char *name, int i, int mode);
void delete_manager(USER *user,LIST *list, TOEIC *toeic,int mode);
void sort_manager (USER *user, LIST *list, TOEIC *toeic);
// 간이 평점 계산기
void grade_cal();
// 필수 등급등 한글리턴용
char *grade(double score);
char *ispil(int no);
char *part(int no);
void main()
{
char temp[10]={0};
char *sel;
sel=temp;
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); // 데이터 읽어오기, 없을경우 만들어짐 ㅋㅋㅋ
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') // 토익 과목 관리
toeic_menu(user, list, toeic);
if (*sel=='4') // 현재 상황
mystats(user, list, toeic);
if (*sel=='5') // 간이 평점 계산기
grade_cal();
if (!strcmp(sel,"H")) // 도움말
help_menu();
if (!strcmp(sel,"A")) // 본 프로그램에 대해서
about_menu();
if (!strcmp(sel,"X")) // 끝내기
{
save(user, list, toeic);
break;
}
}
}
void save(USER *user, LIST *list, TOEIC *toeic)
{
FILE *user_man, *list_man, *toeic_man;
user_man = fopen("user.dat", "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.dat", "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.dat", "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.dat", "r");
if(!user_man)
{
user_man = fopen("user.dat", "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.dat", "r");
if(!list_man)
{
list_man = fopen("list.dat", "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.dat", "r");
if(!toeic_man)
{
toeic_man = fopen("toeic.dat", "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 clrscr()
{
system("cls");
}
void help_menu()
{
clrscr();
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()
{
clrscr();
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()
{
clrscr();
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)
{
int i=0,same=0;
char name[30],*temp;
temp=name;
printf("\n빠른 입력 모드입니다. ( Quit : 엔터 )\n");
while(list_limit < MAX)
{
same=0;
printf("\n수강 과목 이름 ( Quit : 엔터 ) : ");
gets(temp);
if(*temp == '\0')
break;
// 중복 확인부분
for(i=0;iname)==0)
{
same=1;
printf("기존에 있던 리스트 과목명과 동일합니다. ");
break;
}
for(i=0;iname)==0)
{
same=1;
printf("기존에 있던 과목명과 동일합니다. 수정하시겠습니까? ( Y or N ) : ");
gets(temp);
if(*temp == 'y'||*temp == 'Y')
change_manager(user, list, toeic, (user+i)->name, i, 1 );
break;
}
if(!same)
{
strcpy(user[user_limit].name,temp);
strcpy(list[list_limit].name,temp);
printf("받은 등급(점수) : ");
gets(temp);
if(!*temp) break;
temp=strupr(temp);
if(!strcmp(temp,"A+")) (user+user_limit)->score=4.5;
else if(!strcmp(temp,"A")||!strcmp(temp,"A0")) (user+user_limit)->score=4.0;
else if(!strcmp(temp,"B+")) (user+user_limit)->score=3.5;
else if(!strcmp(temp,"B")||!strcmp(temp,"B0")) (user+user_limit)->score=3.0;
else if(!strcmp(temp,"C+")) (user+user_limit)->score=2.5;
else if(!strcmp(temp,"C")||!strcmp(temp,"C0")) (user+user_limit)->score=2.0;
else if(!strcmp(temp,"D+")) (user+user_limit)->score=1.5;
else if(!strcmp(temp,"D")||!strcmp(temp,"D0")) (user+user_limit)->score=1.0;
else if(!strcmp(temp,"F")) (user+user_limit)->score=0;
else (user+user_limit)->score=atof(temp);
while(1)
{
printf("수강 연도 : ");
scanf("%d", &(user+user_limit)->year);
fflush(stdin);
if ((user+user_limit)->year<100)(user+user_limit)->year+=2000;
(list+list_limit)->year=(user+user_limit)->year;
if((user+user_limit)->term>0 && (user+user_limit)->term<10000) break;
}
while(1)
{
printf("수강 학기 ( 1: 봄학기 2: 가을학기 3:여름계절 4: 겨울계절 ) : ");
scanf("%d", &(user+user_limit)->term);
fflush(stdin);
(list+list_limit)->term=(user+user_limit)->term;
if((list+list_limit)->term>0 && (list+list_limit)->term<5) break;
}
while(1)
{
printf("인증 (0:아님, 1:인필, 2:인선) : : ");
scanf("%d", &(list+list_limit)->inpil);
fflush(stdin);
if(((list+list_limit)->inpil)>=0 && ((list+list_limit)->inpil)<3) break;
}
while(1)
{
printf("이수 구분 (0:교선, 1: 교필,2: 전선 3: 전필) : ");
scanf("%d", &(list+list_limit)->major);
fflush(stdin);
if(((list+list_limit)->major)>=0 && ((list+list_limit)->major)<4) 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;
}
user_limit++;
list_limit++;
}
sort_manager(user,list,toeic);
}
}
void user_manager (USER *user, LIST *list, TOEIC *toeic)
{
int i=0,same=0;
char name[30],*temp;
temp=name;
while(user_limit < MAX)
{
//clrscr();
//list_view(list);
printf("\n일반 입력 모드입니다. ( Quit : 엔터 , 수강한 과목 : 'p' , 기존 리스트 : 'l')\n");
same=0;
printf("\n수강 과목 이름 ( Quit : 엔터 ) :");
gets(temp);
if(*temp == '\0')
break;
if(*temp == 'l'||*temp == 'L')
{
list_view(list);
same=1;
}
if(*temp == 'p'||*temp == 'P')
{
user_view(user);
same=1;
}
for(i=0;iname)==0)
{
same=0;
break;
}
for(i=0;iname)==0)
{
same=1;
printf("기존에 있던 과목명과 동일합니다. 수정하시겠습니까? ( Y or N ) : ");
gets(temp);
if(*temp == 'y'||*temp == 'Y')
change_manager(user, list, toeic,(list+i)->name, i, 1 );
break;
}
if(!same)
{
strcpy(user[user_limit].name,temp);
printf("받은점수 : ");
gets(temp);
if(!*temp) break;
temp=strupr(temp);
if(!strcmp(temp,"A+")) (user+user_limit)->score=4.5;
else if(!strcmp(temp,"A")) (user+user_limit)->score=4.0;
else if(!strcmp(temp,"B+")) (user+user_limit)->score=3.5;
else if(!strcmp(temp,"B")) (user+user_limit)->score=3.0;
else if(!strcmp(temp,"C+")) (user+user_limit)->score=2.5;
else if(!strcmp(temp,"C")) (user+user_limit)->score=2.0;
else if(!strcmp(temp,"D+")) (user+user_limit)->score=1.5;
else if(!strcmp(temp,"D")) (user+user_limit)->score=1.0;
else if(!strcmp(temp,"F")) (user+user_limit)->score=0;
else (user+user_limit)->score=atof(temp);
printf("수강연도 : ");
scanf("%d", &(user+user_limit)->year);
fflush(stdin);
if ((user+user_limit)->year<100)(user+user_limit)->year+=2000;
(list+list_limit)->year=(user+user_limit)->year;
while(1)
{
printf("수강 학기 ( 1: 봄학기 2: 가을학기 3:여름계절 4: 겨울계절 ) : ");
scanf("%d", &(user+user_limit)->term);
fflush(stdin);
(list+list_limit)->term=(user+user_limit)->term;
if((list+list_limit)->term>0 && (list+list_limit)->term<5) break;
}
user_limit++;
}
sort_manager(user,list,toeic);
}
}
void sort_manager (USER *user, LIST *list, TOEIC *toeic)
{
int i=0,j=0;
USER user_temp;
LIST list_temp;
TOEIC toeic_temp;
for(i=0;iyear*10+(user+i)->term) < ((user+j)->year*10+(user+j)->term) )
{
user_temp = *(user+i);
*(user+i) = *(user+j);
*(user+j) = user_temp;
}
for(i=0;iyear*10+(list+i)->term) < ((list+j)->year*10+(list+j)->term) )
{
list_temp = *(list+i);
*(list+i) = *(list+j);
*(list+j) = list_temp;
}
for(i=0;iscore < (toeic+j)->score )
{
toeic_temp = *(toeic+i);
*(toeic+i) = *(toeic+j);
*(toeic+j) = toeic_temp;
}
}
void grade_menu(USER *user, LIST *list, TOEIC *toeic)
{
char temp[10],temp2[30];
char *sel, *chan;
int i=0,same=0;
sel=temp;
chan=temp2;
while(1)
{
clrscr();
puts(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts(" ┃ For My Future - 성적 관리기 ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ 성적 관리 메뉴 입니다. 원하는 메뉴를 선택하세요. ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ ┃");
puts(" ┃ 1. 빠른 입력 - 수강 과목 관리를 거치지 않고 빠르게 입력합니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 2. 일반 입력 - 수강 과목 관리에 입력된 데이터를 토대로 자신의 ┃");
puts(" ┃ 학점을 입력 받습니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 3. 성적 수정 - 수강 과목 관리에 입력된 데이터를 수정합니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 4. 목록 보기 - 자신이 입력한 데이터를 살펴 봅니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 5. 평점 보기 - 전체적인 학점을 봅니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 6. 과목 삭제 - 리스트내의 과목중 원하는 과목을 삭제 합니다. ┃");
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') // 일반입력
user_manager(user, list,toeic);
if (*sel=='3') // 수강과목 보기
{
while(1)
{
same=0;
printf("\n수정할 과목 이름 ( Quit : 엔터 , 수강목록 : 'l' ): ");
gets(chan);
if(*chan == '\0')
break;
if(*chan == 'l'||*chan == 'L')
{
user_view(user);
same=1;
}
if(!same)
{
// 중복 확인부분
for(i=0;iname)==0)
{
printf("과목명을 찾았습니다. 수정하시겠습니까? ( Y or N ) : ");
gets(chan);
if(*chan == 'y'||*chan == 'Y')
change_manager(user, list, toeic,(user+i)->name, i, 1 );
break;
}
}
if(same==user_limit)
puts("그런 과목명은 없습니다.");
}
}
}
if (*sel=='4') // 수강과목 보기
user_view(user);
if (*sel=='5') // 평점보기
mystats(user,list, toeic);
if (*sel=='6') // 과목 삭제
delete_manager(user,list,toeic,1);
if (!strcmp(sel,"X")) // 끝내기
break;
}
}
void list_menu(USER *user, LIST *list, TOEIC *toeic)
{
char temp[10];
char *sel;
sel=temp;
while(1)
{
clrscr();
puts(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts(" ┃ For My Future - 수강 과목 관리기 ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ 수강 과목 관리 메뉴 입니다. 원하는 메뉴를 선택하세요. ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ ┃");
puts(" ┃ 1. 과목 입력 - 자신이 수강할 과목이나 수강한 과목의 기본 정보를 ┃");
puts(" ┃ 입력하거나 수정 관리 합니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 2. 과목 보기 - 특정한 학기나, 전체적인 과목을 봅니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 3. 과목 삭제 - 리스트내의 과목중 원하는 과목을 삭제 합니다. ┃");
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 (*sel=='3') // 과목 삭제
delete_manager(user,list,toeic,2);
if (!strcmp(sel,"X")) // 끝내기
break;
}
}
void toeic_menu(USER *user, LIST *list, TOEIC *toeic)
{
char temp[10];
char *sel;
sel=temp;
while(1)
{
clrscr();
puts(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts(" ┃ For My Future - 토익 점수 관리 ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ 토익 점수 관리 메뉴 입니다. 원하는 메뉴를 선택하세요. ┃");
puts(" ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts(" ┃ ┃");
puts(" ┃ 1. 점수 입력 - 자신이 받은 토익점수를 입력합니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 2. 점수 보기 - 전체적인 토익점수를 봅니다. ┃");
puts(" ┃ ┃");
puts(" ┃ 3. 점수 삭제 - 특정 점수를 삭제 합니다. ┃");
puts(" ┃ ┃");
puts(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
printf(">> 현재 %03d 건의 토익점수가 입력되어 있습니다.\n>> 메뉴를 선택하세요 ( Quit : X ) --> ",toeic_limit);
gets_s(sel,5);
sel=strupr(sel);
if (*sel=='1') // 과목 입력
toeic_manager(user, list, toeic);
if (*sel=='2') // 점수 보기
toeic_view(toeic);
if (*sel=='3') // 과목 삭제
delete_manager(user,list,toeic,3);
if (!strcmp(sel,"X")) // 끝내기
break;
}
}
void mystats(USER *user, LIST *list, TOEIC *toeic)
{
int i,j,k=0,l=0,m=0,n=0,limit=0,sisoo=0,nodf=0;
int toeic_top_score=0,total_sisoo=0;
int total_sisoo_count=0,total_sisoo_count_nodf=0;
double total_term=0,total_score=0,total_score_nodf=0;;
char pass[5]="불가";
FILE *report_man;
report_man = fopen("report.txt", "w+");
for(i=0;iscore)
toeic_top_score=(toeic+i)->score;
if(toeic_top_score>=600)
strcpy(pass,"가능");
clrscr();
puts("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts("┃ For My Future - 현재 상황 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts("┃ ┃");
fprintf(report_man,"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
fprintf(report_man,"┃ For My Future - 현재 상황 ┃\n");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ ┃\n");
fprintf(report_man,"┃ 이 Report.txt 문서는 For My Future 에서 작성된 파일입니다. ┃\n");
fprintf(report_man,"┃ 이 정보는 자신의 학점과 미수강과목, 그리고 재수강 해야하는 과목을 ┃\n");
fprintf(report_man,"┃ 상세하게 알려 줍니다. ┃\n");
fprintf(report_man,"┃ ┃\n");
limit=user_limit;
n=0;
nodf=0;
for(i=0;iyear*10+(user+i)->term==(user+j)->year*10+(user+j)->term )
{
k++;
for(l=0;lname,(list+l)->name ) )
sisoo=(list+l)->sisoo;
}
total_term+=((user+j)->score*sisoo);
total_sisoo+=sisoo;
if(!((user+j)->term==4||(user+j)->term==3))
{
n++;
total_score+=((user+j)->score*sisoo);
total_sisoo_count+=sisoo;
}
if(!((user+j)->term==4||(user+j)->term==3||(user+j)->score<2))
{
nodf++;
total_score_nodf+=((user+j)->score*sisoo);
total_sisoo_count_nodf+=sisoo;
}
}
}
i=k-1;
printf("┃ %4d년 %d학기 - %2d개의 과목 , 평점 : %1.3f ┃\n"
,(user+i)->year,(user+i)->term,k-m,total_term/total_sisoo);
fprintf(report_man,"┃ %4d년 %d학기 - %2d개의 과목 , 평점 : %1.3f ┃\n"
,(user+i)->year,(user+i)->term,k-m,total_term/total_sisoo);
total_term=0;
total_sisoo=0;
m=k;
}
puts("┃ ┃");
printf("┃ 전체 평점 - 과목 : %2d개의 과목 , 평점 : %1.3f ┃\n"
,n,total_score/total_sisoo_count);
printf("┃ 전체 평점 - 과목 : %2d개의 과목 , 평점 : %1.3f ( D+이하 삭제시 ) ┃\n"
,nodf,total_score_nodf/total_sisoo_count_nodf);
puts("┃ ( 계절학기는 전체 평점에 포함 되지 않습니다. ) ┃");
puts("┃ ┃");
fprintf(report_man,"┃ ┃\n");
fprintf(report_man,"┃ 전체 평점 - 과목 : %2d개의 과목 , 평점 : %1.3f ┃\n"
,n,total_score/total_sisoo_count);
fprintf(report_man,"┃ 전체 평점 - 과목 : %2d개의 과목 , 평점 : %1.3f ( D+이하 삭제시 ) ┃\n"
,nodf,total_score_nodf/total_sisoo_count_nodf);
fprintf(report_man,"┃ ( 계절학기는 전체 평점에 포함 되지 않습니다. ) ┃\n");
fprintf(report_man,"┃ ┃\n");
// 미수강 과목
limit=list_limit,k=0,m=0;
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
printf("┃ 미수강 과목명 |연도|학기|인증|구분|시수 ┃\n");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ 미수강 과목명 |연도|학기|인증|구분|시수 ┃\n");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
for(i=0;iname,(user+j)->name ) )
l++;
if(!l)
{
fprintf(report_man,"┃ %-30s |%4d|%4d|%04s|%04s|%4d ┃\n",
(list+i)->name,(list+i)->year,(list+i)->term,ispil((list+i)->inpil),part((list+i)->major),(list+i)->sisoo);
printf("┃ %-30s |%4d|%4d|%04s|%04s|%4d ┃\n",
(list+i)->name,(list+i)->year,(list+i)->term,ispil((list+i)->inpil),part((list+i)->major),(list+i)->sisoo);
k++;
}
}
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
printf("┃ 현재 총 %2d개 과목이 미수강 중입니다. 확인 바랍니다. ┃\n",k);
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ 현재 총 %2d개 과목이 미수강 중입니다. 확인 바랍니다. ┃\n",k);
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
// 재수강 과목
limit=user_limit,k=0,m=0;
puts("┃ ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts("┃ 재수강 과목명 |등급|연도|학기|인증|구분|시수 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
fprintf(report_man,"┃ ┃\n");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ 재수강 과목명 |등급|연도|학기|인증|구분|시수 ┃\n");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
for(i=0;iscore<2.0)
{
l=0;
for(j=0;jname,(list+j)->name ) && ((list+j)->inpil==1 ||(list+j)->major==1||(list+j)->major==3))
n=j,l++;
if(!l){
printf("┃ %-30s |%4s|%4d|%4d|%04s|%04s|%4d ┃\n",
(user+i)->name,grade((user+i)->score),(user+i)->year,(user+i)->term,ispil((list+n)->inpil),part((list+n)->major),(list+n)->sisoo);
fprintf(report_man,"┃ %-30s |%4s|%4d|%4d|%04s|%04s|%4d ┃\n",
(user+i)->name,grade((user+i)->score),(user+i)->year,(user+i)->term,ispil((list+n)->inpil),part((list+n)->major),(list+n)->sisoo);
k++;
}
}
}
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
printf("┃ 현재 총 %2d개 과목을 재수강 하셔야 합니다. 확인 바랍니다. ┃\n",k);
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts("┃ ┃");
printf("┃ 토익 점수 - 총 %02d 개의 입력중 최고점은 %3d 입니다. 졸업 %4s ┃\n",toeic_limit,toeic_top_score,pass);
puts("┃ ┃");
puts("┃ 자세한 내용은 Readme.txt 파일을 참고 하세요 ^^; ┃");
puts("┃ ┃");
puts("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ 현재 총 %2d개 과목을 재수강 하셔야 합니다. 확인 바랍니다. ┃\n",k);
fprintf(report_man,"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
fprintf(report_man,"┃ ┃\n");
fprintf(report_man,"┃ 토익 점수 - 총 %02d 개의 입력중 최고점은 %3d 입니다. 졸업 %4s ┃\n",toeic_limit,toeic_top_score,pass);
fprintf(report_man,"┃ ┃\n");
fprintf(report_man,"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
system("pause");
fclose(report_man);
}
void list_view(LIST *list)
{
int i=0;
clrscr();
puts("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts("┃ No. | 과목명 |연도|학기|인증|구분|시수 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
for(i=0;iname,(list+i)->year,(list+i)->term,ispil((list+i)->inpil),part((list+i)->major),(list+i)->sisoo);
if( (list+i)->term!=(list+i+1)->term )
puts("┃ ┃");
if(i%15==14)
{
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
system("pause");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts("┃ No. | 과목명 |연도|학기|인증|구분|시수 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
}
}
puts("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
system("pause");
}
void user_view(USER *user)
{
int i=0;
clrscr();
puts("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓");
puts("┃ No. | 과목명 | 연도 | 학기 | 점수 | 등급 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
for(i=0;iname,(user+i)->year,(user+i)->term,(user+i)->score,grade((user+i)->score));
if( (user+i)->term!=(user+i+1)->term )
puts("┃ ┃");
if(i%15==14)
{
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
system("pause");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
puts("┃ No. | 과목명 | 연도 | 학기 | 점수 | 등급 ┃");
puts("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫");
}
}
puts("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛");
system("pause");
}
void toeic_view(TOEIC *toeic)
{
int i=0;
clrscr();
puts("┏━━━┳━━━━━━━┓");
puts("┃ No. ┃ 받은 점수 ┃");
puts("┣━━━╋━━━━━━━┫");
for(i=0;iscore);
if(i%15==14)
{
puts("┗━━━┻━━━━━━━┛");
system("pause");
puts("┏━━━┳━━━━━━━┓");
puts("┃ No. ┃ 받은 점수 ┃");
puts("┣━━━╋━━━━━━━┫");
}
}
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 *ispil(int no)
{
char *grade;
grade = (char *)calloc(2, sizeof(char));
if(!no) strcpy(grade, "없음");
else if(no==1) strcpy(grade, "인필");
else if(no==2) strcpy(grade, "인선");
return grade;
//return (no)? strcpy(grade, "인필"):strcpy(grade, "아님");
}
char *part(int no)
{
char *grade;
grade = (char *)calloc(2, sizeof(char));
if(!no) strcpy(grade, "교선");
else if(no==1) strcpy(grade, "교필");
else if(no==2) strcpy(grade, "전선");
else if(no==3) strcpy(grade, "전필");
return grade;
}
void list_manager (USER *user, LIST *list, TOEIC *toeic)
{
int i=0,same=0;
char name[30],*temp;
temp=name;
while(list_limit < MAX)
{
printf("\n리스트입력모드입니다. ( Quit : 엔터 , 기존 리스트 : 'l' )");
same=0;
printf("\n수강 과목 이름 : ");
gets(temp);
if(*temp == '\0')
break;
if(*temp == 'l'||*temp == 'L')
{
list_view(list);
same=2;
}
// 중복 확인부분
for(i=0;iname)==0)
{
same=1;
printf("기존에 있던 과목명과 동일합니다. 수정하시겠습니까? ( Y or N ) : ");
gets(temp);
if(*temp == 'y'||*temp == 'Y')
change_manager(user, list, toeic,(list+i)->name, i, 2 );
break;
}
if(!same)
{
strcpy((list+list_limit)->name,temp);
printf("수강연도 : ");
scanf("%d", &(list+list_limit)->year);
fflush(stdin);
if ((list+list_limit)->year<100)(list+list_limit)->year+=2000;
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("인증 (0:아님, 1:인필, 2:인선) : ");
scanf("%d", &(list+list_limit)->inpil);
fflush(stdin);
if(((list+list_limit)->inpil)>=0 && ((list+list_limit)->inpil)<3) break;
}
while(1)
{
printf("이수 구분 (0:교선, 1: 교필,2: 전선 3: 전필) : ");
scanf("%d", &(list+list_limit)->major);
fflush(stdin);
if(((list+list_limit)->major)>=0 && ((list+list_limit)->major)<4) 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++;
}
sort_manager(user,list,toeic);
}
}
void toeic_manager (USER *user, LIST *list, TOEIC *toeic)
{
int i=0,same=0;
char name[30],*temp;
temp=name;
while(toeic_limit < MAX)
{
same=0;
printf("\n%d번째 토익 성적을 입력해 주시기 바랍니다. ( Quit : 엔터 , 기존 리스트 : 'l' )",toeic_limit+1);
printf("\n받은 점수 : ");
gets(temp);
if(*temp == '\0')
break;
if(*temp == 'l'||*temp == 'L')
{
toeic_view(toeic);
same=1;
}
if(!same)
{
(toeic+toeic_limit)->score=atoi(temp);
toeic_limit++;
}
sort_manager(user,list,toeic);
}
}
void change_manager(USER *user, LIST *list, TOEIC *toeic,char *name, int i, int mode)
{
int choice=0,j=0;
char *temp;
temp = (char*)malloc(30*sizeof(char));
if(mode==1) // 유져모드
{
while(choice < 1 || choice > 4)
{
printf("\n# ------ 수정하고자 하는 항목을 선택해 주세요 ------ #");
printf("\n1.수강 과목 이름");
printf("\n2.수강 연도");
printf("\n3.수강 학기");
printf("\n4.등급 (받은점수)");
printf("\n선택: ");
scanf("%d", &choice);
fflush(stdin);
}
switch(choice)
{
case 1:
printf("\n기존 수강 과목 이름 : %s \n수정할 이름을 입력: ",name);
gets(temp);
if(*temp == '\0')
break;
for(j=0;jname)==0)
{
puts("기존에 있던 과목명과 동일합니다.");
break;
}
strcpy((user+i)->name,temp);
break;
case 2:
printf("\n기존 수강 연도 : %d \n 수정할 수강 연도 : ",(user+i)->year);
scanf("%d", &(user+i)->year);
fflush(stdin);
break;
case 3:
while(1)
{
printf("\n기존 수강 학기 : %d \n수강 학기 ( 1: 봄학기 2: 가을학기 3:여름계절 4: 겨울계절 ) : ",(user+i)->term);
scanf("%d", &(user+i)->term);
fflush(stdin);
if((user+i)->term>0 && (user+i)->term<5) break;
}
break;
case 4:
while(1)
{
printf("\n기존 받은 등급 : %f\n수정할 등급 입력 : ",(user+i)->score);
gets(temp);
if(!*temp) break;
temp=strupr(temp);
if(!strcmp(temp,"A+")) (user+i)->score=4.5;
else if(!strcmp(temp,"A")||!strcmp(temp,"A0")) (user+i)->score=4.0;
else if(!strcmp(temp,"B+")) (user+i)->score=3.5;
else if(!strcmp(temp,"B")||!strcmp(temp,"B0")) (user+i)->score=3.0;
else if(!strcmp(temp,"C+")) (user+i)->score=2.5;
else if(!strcmp(temp,"C")||!strcmp(temp,"C0")) (user+i)->score=2.0;
else if(!strcmp(temp,"D+")) (user+i)->score=1.5;
else if(!strcmp(temp,"D")||!strcmp(temp,"D0")) (user+i)->score=1.0;
else if(!strcmp(temp,"F")) (user+i)->score=0;
else (user+i)->score=atof(temp);
break;
}
break;
}
}
if(mode==2)
{
while(choice < 1 || choice > 7)
{
printf("\n# ------ 수정하고자 하는 항목을 선택해 주세요 ------ #");
printf("\n1.수강 과목 이름");
printf("\n2.수강 연도");
printf("\n3.수강 학기");
printf("\n4.인증 필수 유무");
printf("\n5.전공&교양 필수 유무");
printf("\n6.학점 (시수)");
printf("\n선택: ");
scanf("%d", &choice);
fflush(stdin);
}
switch(choice)
{
case 1:
printf("\n기존 수강 과목 이름 : %s \n수정할 이름을 입력: ",name);
gets(temp);
if(*temp == '\0')
break;
for(j=0;jname)==0)
{
puts("기존에 있던 과목명과 동일합니다.");
break;
}
strcpy((list+i)->name,temp);
break;
case 2:
printf("\n기존 수강 연도 : %d \n 수정할 수강 연도 : ",(list+i)->year);
scanf("%d", &(list+i)->year);
fflush(stdin);
break;
case 3:
while(1)
{
printf("\n기존 수강 학기 : %d \n수강 학기 ( 1: 봄학기 2: 가을학기 3:여름계절 4: 겨울계절 ) : ",(list+i)->term);
scanf("%d", &(list+i)->term);
fflush(stdin);
if((list+i)->term>0 && (list+i)->term<5) break;
}
break;
case 4:
while(1)
{
printf("\n기존 인증 필수 유무 : %s\n인증 (0:아님, 1:인필, 2:인선) : : ",ispil((list+i)->inpil));
scanf("%d", &(list+i)->inpil);
fflush(stdin);
if(((list+i)->inpil)>=0 && ((list+i)->inpil)<3) break;
}
break;
case 5:
while(1)
{
printf("\n기존 이수 구분 : %s\n이수구분 (0:교선, 1: 교필,2: 전선 3: 전필) : ",part((list+i)->major));
scanf("%d", &(list+i)->major);
fflush(stdin);
if(((list+i)->major)>=0 && ((list+i)->major)<4) break;
}
break;
case 6:
while(1)
{
printf("\n기존 학점 ( 시수 ) : %d 학점\n학점 (시수) ( 1,2,3 ) : ",(list+i)->sisoo);
scanf("%d", &(list+i)->sisoo);
fflush(stdin);
if(((list+i)->sisoo)>0 && ((list+i)->sisoo)<4) break;
}
break;
}
}
sort_manager(user,list,toeic);
}
void delete_manager(USER *user, LIST *list, TOEIC *toeic, int mode)
{
int i=0,num=0,same=0;
char *temp;
temp = (char*)malloc(30*sizeof(char));
if(mode==1)
{
while(1)
{
printf("\n삭제할 과목의 이름을 입력하세요 ( Quit : 엔터 , 기존 리스트 : 'l' ) :");
gets(temp);
same=0;
if(*temp == '\0')
break;
if(*temp == 'l'||*temp == 'L')
{
list_view(list);
same=1;
}
if(!same)
{
for(i=0;iname)==0)
break;
if(i==list_limit)
puts("입력하신 이름의 과목이 없습니다.\n");
else
{
for(i;iname)==0)
break;
if(i==list_limit)
puts("입력하신 이름의 과목이 없습니다.\n");
else
{
for(i;itoeic_limit)
{
puts("입력하신 토익점수의 리스트 번호가 없습니다.\n");
same=1;
break;
}
if(!same)
{
for(num;num> 현재 입력된 데이터가 없습니다.\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")||!strcmp(temp,"A0")) score+=4.0*sisoo;
else if(!strcmp(grade,"B+")) score+=3.5*sisoo;
else if(!strcmp(grade,"B")||!strcmp(temp,"B0")) score+=3.0*sisoo;
else if(!strcmp(grade,"C+")) score+=2.5*sisoo;
else if(!strcmp(grade,"C")||!strcmp(temp,"C0")) score+=2*sisoo;
else if(!strcmp(grade,"D+")) score+=1.5*sisoo;
else if(!strcmp(grade,"D")||!strcmp(temp,"D0")) 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");
}
닫기