상세 컨텐츠

본문 제목

파일학생성적관리프로그램[동적할당]-C언어

C 언어

by ChrisMare 2018. 1. 24. 01:45

본문

/*

실행하면 (파일 읽기)


메뉴

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));

}

}


// 나중에 주석이나 설명 달아놓을께영 ㅈㅅ

관련글 더보기

댓글 영역