#include<stdio.h>
#include<windows.h>
#include<conio.h>
#define DataFile "c:\\data.txt"
void menu();
void input_sub();
void append_sub();
void search_sub();
void view_sub();
struct AA{
char name[20]; // 이름 저장할 배열
int kor, eng, tot; // 국어, 영어, 총점
double avg; // 평균
};
void main()
{
char ch;
while(1){
menu();
ch = getche(); // 문자하나를 받아 ch에 저장
switch(ch){
case '1' : input_sub(); break;
case '2' : append_sub(); break;
case '3' : search_sub(); break;
case '4' : view_sub(); break;
case '5' : exit(0);
}
}
}
void menu()
{
system("cls"); // 화면 클리어
printf("1.InputData\n");
printf("2.AppendData\n");
printf("3.SearchData\n");
printf("4.ViewData\n");
printf("5.Exit\n");
printf("Select ? ");
}
void search_sub()
{
struct AA saram;
int sw;
char temp[20], imsi[20];
FILE *fp;
fp=fopen(DataFile, "r");
system("cls");
printf("Serach Name ? ");
scanf("%s", temp);
while(1){
fgets(saram.name, 20, fp);
if(feof(fp))
break;
fscanf(fp, "%d %d", &saram.kor, &saram.eng);
fscanf(fp,"%*c"); // enter clear
saram.name[strlen(saram.name)-1] = '\0'; //마지막 문자열에 저장된 '\n'를 '\0'로 바꿔저는 함수
strcpy(imsi,saram.name); // saram.name에 저장된 내용을 imsi에 복사
strupr(temp); // strupr함수는 소문자를 대문자로 바꿔주는 함수이다
strupr(imsi); // strlwr함수는 대문자를 소문자로 바꿔주는 함수이다
if(strncmp(temp,imsi,strlen(temp))==0){
saram.tot = saram.kor+saram.eng;
saram.avg = (double)saram.tot/2;
printf("%-20s%-5d%-5d%-5d%-8.2lf\n", saram.name, saram.kor, saram.eng, saram.tot, saram.avg);
}
sw=1;
}
if(sw==0)printf("Nor found.....\n");
getch(); // 하나의 문자를 입력 받을때까지 기다림
}
void input_sub()
{
struct AA saram;
FILE *fp;
fp=fopen(DataFile, "w");
system("cls");
printf("==== Input Data ====\n");
while(1){
printf("Name ? "); gets(saram.name); fflush(stdin);
if(stricmp(saram.name, "end")==0)
break;
printf("Kor ? "); scanf("%d", &saram.kor); fflush(stdin);
printf("Eng ? "); scanf("%d", &saram.eng); fflush(stdin);
fprintf(fp, "%s\n", saram.name);
fprintf(fp, "%5d%5d\n", saram.kor, saram.eng);
}
fclose(fp);
}
void append_sub()
{
struct AA saram;
FILE *fp;
fp=fopen(DataFile, "a");
getch();
system("cls");
printf("==== Append Data ====\n");
while(1){
printf("Name ? "); gets(saram.name); fflush(stdin);
if(stricmp(saram.name,"end")==0)
break;
printf("Kor ? "); scanf("%d", &saram.kor); fflush(stdin);
printf("Eng ? "); scanf("%d", &saram.eng); fflush(stdin);
fprintf(fp, "%s\n", saram.name);
fprintf(fp, "%5d%5d\n", saram.kor, saram.eng);
}
fclose(fp);
}
void view_sub()
{
FILE *fp;
struct AA saram;
int cnt = 0;
fp = fopen(DataFile, "r");
system("cls"); // 화면 클리어
printf("==== Data View ====\n");
printf("%-20s%-5s%-5s%-5s%-8s\n", "Name", "Kor", "Eng", "Tot", "Avg");
while(1){
fgets(saram.name, 20, fp);
fscanf(fp, "%*c"); // 버퍼에 있는 데이터를 저장하지 않고 꺼내기만 함.
if(feof(fp))
break;
fscanf(fp, " %d %d", &saram.kor, &saram.eng);
fscanf(fp, "%*c"); // enter clear
saram.tot = saram.kor+saram.eng;
saram.avg = (double)saram.tot/2;
saram.name[strlen(saram.name)-1] = '\0';
if(cnt==0){
system("cls");
printf("%-20s%-5s%-5s%-5s%-8s\n", "Name", "Kor", "Eng", "Tot", "Avg");
}
printf("%-20s%-5d%-5d%-5d%-8.2lf\n", saram.name, saram.kor, saram.eng, saram.tot, saram.avg);
cnt++;
if(cnt==3){
printf(".................more\n");
getch();
cnt=0;
}
}
printf(".................data end\n");
getch(); // 문자하나 입력 받을때까지 잠깐 멈춰 주세요
fclose(fp);
}
'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글
이름과 숫자 1~4까지의 답 10개를 입력 받아 O,X 표시 및 평균 및 최고득점자와 최소 득점자 출력하는 로직 (0) | 2009.03.04 |
---|---|
포인터 (0) | 2009.03.04 |
KMP 알고리즘... (0) | 2009.03.04 |
마방진~ Magic square (0) | 2009.03.04 |
Distinct Binary Tree(상이한 이진 트리) (3) | 2009.03.04 |
댓글