C언어/디딤돌 C언어 예제

[C언어 소스] 사용자 정의 형식 실습 - 학생

언제나휴일 2016. 12. 1. 15:25
반응형

[C언어 소스] 사용자 정의 형식 실습 - 학생


사용자 정의 형식 실습.zip


실습 시나리오
 
학생은 학번, 이름, 체력, 지력, 스트레스, 연속으로 공부한 횟수를 멤버로 갖는다.  
학번은 순차적으로 부여하며 이름은 생성할 입력인자로 전달받는다.
체력은 초기값이 100이며 0에서 100 사이의 값을 유지한다.
지력은 초기값이 100이며 0에서 200 사이의 값을 유지한다.
스트레스는 초기값이 0이며 0에서 100 사이의 값을 유지한다.
연속으로 공부한 횟수는 초기값이 0이며 0에서 5 사이의 값을 유지한다.
학생이 공부하면 연속으로 공부한 횟수는 1 증가하며 외의 행동을 하면 0으로 리셋한다.
 
학생이 공부하면 체력이 5 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 감소한다.
학생이 강의를 받으면 체력은 3 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 증가한다.
 
학생이 잠을 자면 체력은 10 회복하고 스트레스는 5 감소한다.
학생이 휴식하면 체력은 3회복하고 스트레스는 10 감소한다.
 
학생이 음료를 마시면 체력이 10 소모하며 지력은 5 감소하고 스트레스는 2 감소한다.
학생이 노래하면 체력이 10 소모하며 지력은 1 증가하고 스트레스는 5 감소한다.
 
추가로 학생 정보를 출력하는 기능을 제공한다.



//Student.h

#pragma once

 

#define MAX_NAME_LEN    20

typedef struct _Student Student;

struct _Student

{

    char name[MAX_NAME_LEN + 1];//이름

    int num; //번호

    int hp; //체력

    int iq; //지력

    int stress; //스트레스

    int scnt; //연속으로 공부한 횟수

};

enum _StuConst

{

    MIN_HP = 0, MAX_HP = 100, DEF_HP = 100,

    MIN_IQ = 0, MAX_IQ = 200, DEF_IQ = 100,

    MIN_STRESS = 0, MAX_STRESS = 100, DEF_STRESS = 0,

    MIN_SCNT = 0, MAX_SCNT = 5, DEF_SCNT = 0

};

 

void Student_Student(Student *stu, const char *name); //생성자

void Student_Study(Student *stu);//공부하다.

void Student_ListenLecture(Student *stu);//강의받다.

void Student_Relax(Student *stu);//휴식하다.

void Student_Sleep(Student *stu);//잠자다.

void Student_Drink(Student *stu);//음료를 마시다.

void Student_Sing(Student *stu);//노래하다.

void Student_View(Student *stu);//자신의 정보를 출력하다.


//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 *stuconst char *name)

{

    static int last_num;

 

    memset(stu, 0, sizeof(Student));

    strcpy_s(stu->name,MAX_NAME_LENname);

    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(stustu->hp - 5);

    Student_SetIQ(stustu->iq + stu->scnt);

    Student_SetStress(stustu->stress - 2);

    Student_IncreSCnt(stu);

}

 

void Student_ListenLecture(Student *stu)

{

    printf("<%d>:%s 강의받다. \n"stu->num, stu->name);

    //학생이 강의를 받으면 체력은 3 소모하며 지력은 연속으로 공부한 횟수만큼 증가하고 스트레스는 2 증가한다.

    Student_SetHP(stustu->hp - 3);

    Student_SetIQ(stustu->iq + stu->scnt);

    Student_SetStress(stustu->stress + 2);

    stu->scnt = 0;

}

 

void Student_Relax(Student *stu)

{

    printf("<%d>:%s 류식하다. \n"stu->num, stu->name);

    //학생이 휴식하면 체력은 3회복하고 스트레스는 10 감소한다.

    Student_SetHP(stustu->hp + 3);

    Student_SetStress(stustu->stress - 10);

    stu->scnt = 0;

}

 

void Student_Sleep(Student *stu)

{

    printf("<%d>:%s 잠을자다. \n"stu->num, stu->name);

    //학생이 잠을 자면 체력은 10 회복하고 스트레스는 5 감소한다.

    Student_SetHP(stustu->hp + 10);

    Student_SetStress(stustu->stress - 5);

    stu->scnt = 0;

}

 

 

void Student_Drink(Student *stu)

{

    printf("<%d>:%s 음료를 마시다. \n"stu->num, stu->name);

    //학생이 음료를 마시면 체력이 10 소모하며 지력은 5 감소하고 스트레스는 2 감소한다.

    Student_SetHP(stustu->hp - 10);

    Student_SetIQ(stustu->iq - 5);

    Student_SetStress(stustu->stress - 2);

    stu->scnt = 0;

}

 

void Student_Sing(Student *stu)

{

    printf("<%d>:%s 노래하다. \n"stu->num, stu->name);

    // 학생이 노래하면 체력이 10 소모하며 지력은 1 증가하고 스트레스는 5 감소한다.

    Student_SetHP(stustu->hp - 10);

    Student_SetIQ(stustu->iq + 1);

    Student_SetStress(stustu->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 *stuint hp)

{

    if (hp > MAX_HP) 

    {

        hp = MAX_HP; 

    }

    if (hp < MIN_HP) 

    {

        hp = MIN_HP; 

    }

    stu->hp = hp;

}

void Student_SetIQ(Student *stuint iq)

{

    if (iq > MAX_IQ) 

    {

        iq = MAX_IQ; 

    }

    if (iq < MIN_IQ) 

    {

        iq = MIN_IQ; 

    }

    stu->iq = iq;

}

void Student_SetStress(Student *stuint 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언어 http://ehpub.co.kr

//사용자 정의 형식 실습

#include "Student.h"

#include <stdio.h>

void TestStudent(Student *stu, const char *name);

int main()

{

    Student stu1;

    Student stu2;

    TestStudent(&stu1, "홍길동");

    TestStudent(&stu2, "강감찬");

    return 0;

}

void TestStudent(Student *stuconst char *name)

{

    printf("--------------%s 학생 테스트 시작--------------\n"name);

    Student_Student(stuname);

    Student_View(stu);

    Student_Study(stu);

    Student_View(stu);

    Student_Study(stu);

    Student_View(stu);

    Student_ListenLecture(stu);

    Student_View(stu);

    Student_Study(stu);

    Student_View(stu);

    Student_Relax(stu);

    Student_View(stu);

    Student_Sleep(stu);

    Student_View(stu);

    Student_Drink(stu);

    Student_View(stu);

    Student_Sing(stu);

    Student_View(stu);

    printf("--------------%s 학생 테스트 종료--------------\n"name);

}


실행 결과

--------------홍길동 학생 테스트 시작--------------
<1>:홍길동
              체력:100 아이큐:100 스트레스:0
<1>:홍길동 공부하다.
<1>:홍길동
              체력:95 아이큐:100 스트레스:0
<1>:홍길동 공부하다.
<1>:홍길동
              체력:90 아이큐:101 스트레스:0
<1>:홍길동 강의받다.
<1>:홍길동
              체력:87 아이큐:103 스트레스:2
<1>:홍길동 공부하다.
<1>:홍길동
              체력:82 아이큐:103 스트레스:0
<1>:홍길동 류식하다.
<1>:홍길동
              체력:85 아이큐:103 스트레스:0
<1>:홍길동 잠을자다.
<1>:홍길동
              체력:95 아이큐:103 스트레스:0
<1>:홍길동 음료를 마시다.
<1>:홍길동
              체력:85 아이큐:98 스트레스:0
<1>:홍길동 노래하다.
<1>:홍길동
              체력:75 아이큐:99 스트레스:0
--------------홍길동 학생 테스트 종료--------------
--------------강감찬 학생 테스트 시작--------------
<2>:강감찬
              체력:100 아이큐:100 스트레스:0
<2>:강감찬 공부하다.
<2>:강감찬
              체력:95 아이큐:100 스트레스:0
<2>:강감찬 공부하다.
<2>:강감찬
              체력:90 아이큐:101 스트레스:0
<2>:강감찬 강의받다.
<2>:강감찬
              체력:87 아이큐:103 스트레스:2
<2>:강감찬 공부하다.
<2>:강감찬
              체력:82 아이큐:103 스트레스:0
<2>:강감찬 류식하다.
<2>:강감찬
              체력:85 아이큐:103 스트레스:0
<2>:강감찬 잠을자다.
<2>:강감찬
              체력:95 아이큐:103 스트레스:0
<2>:강감찬 음료를 마시다.
<2>:강감찬
              체력:85 아이큐:98 스트레스:0
<2>:강감찬 노래하다.
<2>:강감찬
              체력:75 아이큐:99 스트레스:0
--------------강감찬 학생 테스트 종료--------------



본문

[디딤돌 C언어] 77. 사용자 정의 형식 - 시나리오

[디딤돌 C언어] 78. 사용자 정의 형식형식 정의

[디딤돌 C언어] 79. 사용자 정의 형식기능 구현

[디딤돌 C언어] 80. 사용자 정의 형식 – 테스트




반응형