아직 완성도 안되고 하루종일 파일 입출력 관련만 주물럭 주물럭...
우선 파일 입출력이 가능하여 추후에 관리를 편하게 해줍니다.
짜다 말아서 이상하게 엉켜있는 부분이 있습니다.
파일이 없다면 새로 생성 합니다.
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닫기