/*
실행하면 (파일 읽기)
메뉴
1번 입력 .. . .. . . .. . 이름,~~~
2번 출력
3번 검색 """"" 이름검색시 이름관련성적만
Maximum 100 -> 100명
4. 종료==>>(파일저장)
*/
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAXIMUM 100
typedef struct student {
char *name;
int *sco;
float *avg;
}Student;
void myalloc(Student **stu);
void newStudent(Student *p_stu) {
FILE * fp = fopen("sco.txt", "ab");
if (fp == NULL) {
puts("파일오픈 실패!");
return -1;
}
printf("Name Input : ");
char name[10] = "";
scanf("%s", name);
*(p_stu->sco + 3) = 0;
for (int j = 0; j < 3; j++) {
printf("Score Input : ");
scanf("%d", (p_stu->sco + j));
*(p_stu->sco + 3) += *(p_stu->sco + j);
}
*(p_stu)->avg = *((p_stu)->sco + 3) / 3.f;
getchar();
fprintf(fp, "%s %d %d %d %d %f\n", name, *((p_stu)->sco + 0), *((p_stu)->sco + 1), *((p_stu)->sco + 2), *((p_stu)->sco + 3), *(p_stu)->avg);
fclose(fp);
}
void searchStudent(Student *tmp_stu) {
FILE *fp;
int i = 0;
int confirm_flag = 0;
char searchName[10] = "";
printf("Search Name Input : ");
scanf("%s", searchName);
printf("::::::::::::::::::::::::::::::::::::::::::::::::\n");
if (fp = fopen("sco.txt", "rt")) {
while (0 < fscanf(fp, "%s %d %d %d %d %f", (tmp_stu + i)->name, ((tmp_stu + i)->sco + 0), ((tmp_stu + i)->sco + 1), ((tmp_stu + i)->sco + 2), ((tmp_stu + i)->sco + 3), (tmp_stu + i)->avg)) {
if (strcmp(((tmp_stu + i)->name),searchName)==0) {
printf("Name\tKor\tEng\tMath\tTotal\tAvg\n");
printf("%s\t%d\t%d\t%d\t%d\t%f\n", ((tmp_stu + i)->name), *((tmp_stu + i)->sco + 0), *((tmp_stu + i)->sco + 1), *((tmp_stu + i)->sco + 2), *((tmp_stu + i)->sco + 3), *(tmp_stu + i)->avg);
confirm_flag = 1;
break;
}
i++;
}
if (confirm_flag != 1) {
printf("그런사람없습니다.\n");
}
printf("::::::::::::::::::::::::::::::::::::::::::::::::\n");
}
fclose(fp);
}
void output(Student *tmp_stu) {
FILE *fp;
int i = 0;
printf("::::::::::::::::::::::::::::::::::::::::::::::::\n");
printf("Name\tKor\tEng\tMath\tTotal\tAvg\n");
if (fp = fopen("sco.txt", "rt")) {
while (0 < fscanf(fp, "%s %d %d %d %d %f", (tmp_stu+i)->name, ((tmp_stu + i)->sco + 0), ((tmp_stu + i)->sco + 1), ((tmp_stu + i)->sco + 2), ((tmp_stu + i)->sco + 3), (tmp_stu + i)->avg)) {
printf("%s\t%d\t%d\t%d\t%d\t%f\n", ((tmp_stu + i)->name), *((tmp_stu + i)->sco + 0), *((tmp_stu + i)->sco + 1), *((tmp_stu + i)->sco + 2), *((tmp_stu + i)->sco + 3), *(tmp_stu + i)->avg);
i++;
}
printf("::::::::::::::::::::::::::::::::::::::::::::::::\n");
}
fclose(fp);
}
void main() {
// 1. 동적메모리할당
Student *stu = NULL;
myalloc(&stu);
int bn;
while (1) {
printf("1. 입력 2.출력 3.검색 4.종료\n");
printf("input Button : ");
scanf("%d", &bn);
switch (bn)
{
case 1:
// 1. 입력
newStudent(stu);
break;
case 2:
// 2. 출력
output(stu);
break;
case 3:
// 4. 삭제 함수
//deleteStudent(stu, num);
// 3. 검색 함수
searchStudent(stu);
break;
case 4:
printf("4.프로그램 종료\n");
exit(-1);
break;
default:
printf("잘못입력하셨습니다.\n");
break;
}
}
free(stu);
}
void myalloc(Student **p_stu) {
*p_stu = (Student*)malloc(sizeof(Student)*MAXIMUM);
for (int i = 0; i < MAXIMUM; i++) {
(*p_stu + i)->name = (char*)malloc(sizeof(char) * 10);
(*p_stu + i)->sco = (int*)malloc(sizeof(int) * 4);
(*p_stu + i)->avg = (float*)malloc(sizeof(float));
}
}
// 나중에 주석이나 설명 달아놓을께영 ㅈㅅ
변수의 정체와 역할 파악 (0) | 2018.01.10 |
---|---|
Pointer 분석 (1) - 값과 주소의 이동파악 (0) | 2018.01.05 |
BabyGin - Count Sort (0) | 2018.01.04 |
C언어 #include 지시어의 <> 와 ""의 차이점 (1) | 2017.12.27 |
포인터주소이동 개념 손코딩으로 출력값 알아보기 (0) | 2017.10.02 |
댓글 영역