이제 Student.c 소스 파일을 프로젝트에 추가하여 구체적으로 기능을 정의하세요.
먼저 필요한 헤더 파일을 포함하는 구문이 필요하겠죠.
#include "Student.h"
#include <memory.h>
#include <string.h>
#include <stdio.h>
먼저 학생 생성자를 작성하세요.
생성자는 학생 데이터를 초기 설정하는 함수예요.
void Student_Student(Student *stu,const char *name)
{
학생은 생성할 때 순차적으로 번호를 부여하세요.
이를 위해 정적 변수로 가장 최근에 부여한 학생 번호를 기억하는 변수를 선언하세요.
static int last_num;
입력 인자로 전달받은 학생의 메모리를 초기화가 필요하죠.
memset(stu,0,sizeof(Student));
그리고 입력 인자로 전달받은 이름을 설정하세요.
strncpy_s(stu->name,sizeof(stu->name),name,MAX_NAME_LEN);
나머지 멤버들도 초기값으로 설정하세요.
stu->hp = DEF_HP;
stu->iq = DEF_IQ;
stu->stress = DEF_STRESS;
stu->scnt = DEF_SCNT;
가장 최근에 부여한 학생 번호를 1 증가한 후에 학생 번호를 설정하세요.
last_num++;
stu->num = last_num;
}
이번에는 “공부하다.” 기능을 구현합시다.
void Student_Study(Student *stu)
{
먼저 누가 공부하는지 콘솔 화면에 출력하세요.
printf("<%d>:%s 공부하다.",stu->num, stu->name);
그리고 시나리오에 나온 것처럼 학생의 능력치를 변경하세요.
//학생이 공부하면 체력이 5 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 감소한다.
주의할 점은 능력치가 최대값과 최소값의 범위를 벗어나지 않게 제어하세요.
이러한 부분은 다른 기능에서도 공통적으로 수행해야 하므로 각 능력치를 설정하는 함수를 별도로 제공하여 구현하면 좋아요.
Student_SetHP(stu, stu->hp -5);
Student_SetIQ(stu, stu->iq + stu->scnt);
Student_SetStress(stu, stu->stress - 2);
Student_IncreSCnt(stu);
}
학생의 능력치를 설정하는 함수는 Student.c 소스 파일에서만 접근할 함수들이죠.
이들 함수의 선언문은 헤더 파일이 아닌 Student.c 소스의 #include 구문 아래에 작성하세요.
void Student_SetHP(Student *stu, int hp);
void Student_SetIQ(Student *stu, int iq);
void Student_SetStress(Student *stu, int stress);
void Student_IncreSCnt(Student *stu);
같은 방법으로 “강의받다.” 기능을 구현하세요.
void Student_ListenLecture(Student
*stu)
{
printf("<%d>:%s 강의받다. \n",stu->num, stu->name);
//학생이 강의를 받으면 체력은 3 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 증가한다.
Student_SetHP(stu, stu->hp -3);
Student_SetIQ(stu, stu->iq + stu->scnt);
Student_SetStress(stu, stu->stress + 2);
stu->scnt = 0;
}
나머지 기능도 같은 방법으로 구현하세요.
void Student_Relax(Student *stu)
{
printf("<%d>:%s 류식하다. \n",stu->num, stu->name);
//학생이 휴식하면 체력은 3회복하고 스트레스는 10 감소한다.
Student_SetHP(stu, stu->hp +3);
Student_SetStress(stu, stu->stress -10);
stu->scnt = 0;
}
void Student_Sleep(Student *stu)
{
printf("<%d>:%s 잠을자다. \n",stu->num, stu->name);
//학생이 잠을 자면 체력은 10 회복하고 스트레스는 5 감소한다.
Student_SetHP(stu, stu->hp + 10);
Student_SetStress(stu, stu->stress - 5);
stu->scnt = 0;
}
void Student_Drink(Student *stu)
{
printf("<%d>:%s 음료를 마시다. \n",stu->num, stu->name);
//학생이 음료를 마시면 체력이 10 소모하며 지력은 5 감소하고 스트레스는 2 감소한다.
Student_SetHP(stu, stu->hp -10);
Student_SetIQ(stu, stu->iq - 5);
Student_SetStress(stu, stu->stress - 2);
stu->scnt = 0;
}
void Student_Sing(Student *stu)
{
printf("<%d>:%s 노래하다. \n",stu->num, stu->name);
// 학생이 노래하면 체력이 10 소모하며 지력은 1 증가하고 스트레스는 5 감소한다.
Student_SetHP(stu, stu->hp -10);
Student_SetIQ(stu, stu->iq + 1);
Student_SetStress(stu, stu->stress - 5);
stu->scnt = 0;
}
학생 정보를 출력하는 함수를 작성하세요.
void Student_View(Student *stu)
{
학생 번호와 이름은 중요한 데이터이므로 먼저 출력하는 것이 좋겠죠.
printf("<%d>:%s\n",stu->num, stu->name);
그리고 나머지 능력치를 출력하세요.
굳이 연속으로 공부한 횟수는 출력할 필요가 없겠죠.
모든 데이터를 최종 사용자에게 알려줄 필요는 없어요.
printf("\t 체력:%d 아이큐:%d 스트레스:%d\n",stu->hp, stu->iq,stu->stress);
}
이제 각 능력치를 변경하는 함수를 작성하세요.
void Student_SetHP(Student *stu, int hp)
{
입력 인자로 전달받은 값이 최대값을 벗어나면 최대값으로 수정하세요.
if(hp >
MAX_HP){ hp = MAX_HP; }
마찬가지로 최소값을 벗어나면 최소값으로 수정해야겠죠.
if(hp <
MIN_HP){ hp = MIN_HP; }
이제 수정한 값으로 학생의 hp를 설정하세요.
stu->hp = hp;
}
아이큐와 스트레스를 설정하는 함수도 같은 방법으로 구현하세요.
void Student_SetIQ(Student *stu, int iq)
{
if(iq >
MAX_IQ){ iq = MAX_IQ; }
if(iq <
MIN_IQ){ iq = MIN_IQ; }
stu->iq = iq;
}
void Student_SetStress(Student *stu, int stress)
{
if(stress
> MAX_STRESS){ stress = MAX_STRESS; }
if(stress
< MIN_STRESS){ stress = MIN_STRESS; }
stu->stress = stress;
}
연속으로 공부한 회수를 증가하는 함수를 작성하세요.
void Student_IncreSCnt(Student *stu)
{
학생의 scnt 값이 최대값보다 작을 때만 1 증가하게 하세요.
if(stu->scnt
< MAX_SCNT)
{
stu->scnt++;
}
}
◈ Student.c
#include "Student.h"
#include <memory.h>
#include <string.h>
#include <stdio.h>
void Student_SetHP(Student *stu, int hp);
void Student_SetIQ(Student *stu, int iq);
void Student_SetStress(Student *stu, int stress);
void Student_IncreSCnt(Student *stu);
void Student_Student(Student *stu,const char *name)
{
static int
last_num;
memset(stu,0,sizeof(Student));
strncpy(stu->name,name,MAX_NAME_LEN);
stu->hp = DEF_HP;
stu->iq = DEF_IQ;
stu->stress = DEF_STRESS;
stu->scnt = DEF_SCNT;
last_num++;
stu->num = last_num;
}
void Student_Study(Student *stu)
{
printf("<%d>:%s 공부하다. \n",stu->num, stu->name);
//학생이 공부하면 체력이 5 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 감소한다.
Student_SetHP(stu, stu->hp -5);
Student_SetIQ(stu, stu->iq + stu->scnt);
Student_SetStress(stu, stu->stress - 2);
Student_IncreSCnt(stu);
}
void Student_ListenLecture(Student
*stu)
{
printf("<%d>:%s 강의받다. \n",stu->num, stu->name);
//학생이 강의를 받으면 체력은 3 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 증가한다.
Student_SetHP(stu, stu->hp -3);
Student_SetIQ(stu, stu->iq + stu->scnt);
Student_SetStress(stu, stu->stress + 2);
stu->scnt = 0;
}
void Student_Relax(Student *stu)
{
printf("<%d>:%s 류식하다. \n",stu->num, stu->name);
//학생이 휴식하면 체력은 3회복하고 스트레스는 10 감소한다.
Student_SetHP(stu, stu->hp +3);
Student_SetStress(stu, stu->stress -10);
stu->scnt = 0;
}
void Student_Sleep(Student *stu)
{
printf("<%d>:%s 잠을자다. \n",stu->num, stu->name);
//학생이 잠을 자면 체력은 10 회복하고 스트레스는 5 감소한다.
Student_SetHP(stu, stu->hp + 10);
Student_SetStress(stu, stu->stress - 5);
stu->scnt = 0;
}
void Student_Drink(Student *stu)
{
printf("<%d>:%s 음료를 마시다. \n",stu->num, stu->name);
//학생이 음료를 마시면 체력이 10 소모하며 지력은 5 감소하고 스트레스는 2 감소한다.
Student_SetHP(stu, stu->hp -10);
Student_SetIQ(stu, stu->iq - 5);
Student_SetStress(stu, stu->stress - 2);
stu->scnt = 0;
}
void Student_Sing(Student *stu)
{
printf("<%d>:%s 노래하다. \n",stu->num, stu->name);
// 학생이 노래하면 체력이 10 소모하며 지력은 1 증가하고 스트레스는 5 감소한다.
Student_SetHP(stu, stu->hp -10);
Student_SetIQ(stu, stu->iq + 1);
Student_SetStress(stu, stu->stress - 5);
stu->scnt = 0;
}
void Student_View(Student *stu)
{
printf("<%d>:%s\n",stu->num, stu->name);
printf("\t 체력:%d 아이큐:%d 스트레스:%d\n",stu->hp, stu->iq,stu->stress);
}
void Student_SetHP(Student *stu, int hp)
{
if(hp >
MAX_HP){ hp = MAX_HP; }
if(hp <
MIN_HP){ hp = MIN_HP; }
stu->hp = hp;
}
void Student_SetIQ(Student *stu, int iq)
{
if(iq >
MAX_IQ){ iq = MAX_IQ; }
if(iq <
MIN_IQ){ iq = MIN_IQ; }
stu->iq = iq;
}
void Student_SetStress(Student *stu, int stress)
{
if(stress
> MAX_STRESS){ stress = MAX_STRESS; }
if(stress
< MIN_STRESS){ stress = MIN_STRESS; }
stu->stress = stress;
}
void Student_IncreSCnt(Student *stu)
{
if(stu->scnt
< MAX_SCNT)
{
stu->scnt++;
}
}
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 84. calloc 함수 (0) | 2016.04.18 |
---|---|
[C언어] 83. malloc 함수 (0) | 2016.04.18 |
[C언어] 82. 동적 메모리 할당 함수 (0) | 2016.04.18 |
[C언어] 81. 사용자 정의 형식 정리하기 (0) | 2016.04.17 |
[C언어] 80. 사용자 정의 형식 실습 - 테스트 (0) | 2016.04.17 |
[C언어] 78. 사용자 정의 형식 실습 - 형식 정의 (0) | 2016.04.17 |
[C언어] 77. 사용자 정의 형식 실습 - 시나리오 (0) | 2016.04.17 |
[C언어] 76. 열거형 (0) | 2016.04.17 |
[C언어] 75. 공용체 (0) | 2016.04.17 |
[C언어] 74. 구조체 (0) | 2016.04.17 |