none
c언어 질문 RRS feed

  • 질문

  • #include <stdio.h>
    #include <memory.h>
    #include <stdlib.h>
    #include <string.h>

    #define MAX_AGE 100
    #define MAX_NLEN 20
    #define MAX_SUBJECT 4
    typedef struct {
     char name[MAX_NLEN + 1];
     int num;
     int age;
     int scores[MAX_SUBJECT];
    }Student;

    const char *stitles[MAX_SUBJECT] = { "국어","영어","수학","과학" };

    #define MAX_STUDENT 10

    Student stues[MAX_STUDENT];

    void Initialize();
    void Run();
    int main(void)
    {

     Initialize();

     Run();

     return 0;
    }

    void Initialize()
    {
     int i = 0;
     int s = 0;

     for (i = 0; i< MAX_STUDENT; i++)
     {
      for (s = 0; s < MAX_SUBJECT; s++)
      {
       stues[i].scores[s] = -1;
      }
     }
    }

    int SelectMenu();
    void AddStudent();
    void RemoveStudent();
    void FindStudent();
    void ListStudent();
    void Run()
    {
     int key = 0;
     while ((key = SelectMenu()) != 0)
     {
      switch (key)
      {
      case 1: AddStudent(); break;
      case 2: RemoveStudent(); break;
      case 3: FindStudent(); break;
      case 4: ListStudent(); break;
      default: printf("잘못 선택하였습니다.\n"); break;
      }
     }
     printf("프로그램 종료\n");
    }

    int SelectMenu()
    {
     int key = 0;
     printf("성정 관리 프로그램 0:종료\n");
     printf("1:학생 데이터 입력 2: 학생 데이터 삭제 3: 학생 검색 4: 목록보기\n");
     scanf_s("%d", &key);
     return key;
    }

    int IsAvailNum(int num);
    int IsAvailScore(int score);
    void AddStudent()
    {
     int num = 0, age = 0;
     Student *stu = 0;
     int s = 0;

     printf("추가할 학생 번호(1~%d): ", MAX_STUDENT);
     scanf_s("%d", &num);
     
     printf("추가할 학생나이(1~%d):", MAX_AGE);
     scanf_s("%d", &age);

     if (IsAvailNum(num) == 0)
     {
      printf("범위를 벗어난 학생 번호입니다.\n");
      return;
     }

     if (IsAvailAge(age) == 0)
     {
      printf("범위를 벗어난 학생의 나이입니다.\n");
      return;
     }

     if (stues[num - 1].num)
     {
      printf("이미 추가하였습니다\n");
      return;
     }

     stu = stues + (num - 1);
     stu->num = num;
     stu->age = age;
     printf("이름:");
     scanf_s("%s", stu->name, sizeof(stu->name));


     for (s = 0; s < MAX_SUBJECT; s++)
     {
      printf("%s 성적:", stitles[s]);
      scanf_s("%d", stu->scores + s);

      if (IsAvailScore(stu->scores[s]) == 0)
      {
       stu->scores[s] = -1;
       printf("입력한 성적이 유효하지 않아서 %s 성적은 입력 처리하지 않았습니다.\n", stitles[s]);
      }
     }
    }
    int IsAvailNum(int num)
    {
     return (num >= 1) && (num <= MAX_STUDENT);
    }
    int IsAvailAge(int age)
    {
     return (age >= 1) && (age <= 100);
    }
    int IsAvailScore(int score)
    {
     return (score >= 0) && (score <= 100);
    }
    void RemoveStudent()
    {
     int num = 0;
     Student *stu = 0;
     int s = 0;

     printf("삭제할 학생 번호(1~%d):", MAX_STUDENT);
     scanf_s("%d", &num);

     if (IsAvailNum(num) == 0)
     {
      printf("범위를 벗어난 학생 번호입니다.\n");
      return;
     }

     if (stues[num - 1].num == 0)
     {
      printf("데이터가 없습니다.\n");
      return;
     }

     stu = stues + (num - 1);
     strcpy_s(stu->name, sizeof(stu->name), "");
     stu->num = 0;
     for (s = 0; s < MAX_SUBJECT; s++)
     {
      stu->scores[s] = -1;
     }
     printf("삭제하였습니다.\n");
    }
    void ViewStuData(Student *stu);
    void FindStudent()
    {
     int num = 0;
     Student *stu = 0;
     int s = 0;
     printf("검색할 학생 번호(1~%d:", MAX_STUDENT);
     scanf_s("%d", &num);

     if (IsAvailNum(num) == 0)
     {
      printf("범위를 벗어난 학생 번호 입니다.\n");
      return;
     }
     if (IsAvailAge(num) == 0)
     {
      printf("범위를 벗어난 학생 나이입니다.\n");
      return;
     }

     if (stues[num - 1].num == 0)
     {
      printf("데이터가 없습니다.\n");
      return;
     }

     stu = stues + (num - 1);
     ViewStuData(stu);
    }


    void ViewStuData(Student *stu)
    {
     int i = 0;
     int s = 0;

     printf("%4d %4d %10s", stu->num, stu->age, stu->name);
     for (s = 0; s < MAX_SUBJECT; s++)
     {
      printf("%4d", stu->scores[s]);
     }
     printf("\n");
    }
    void ListStudent()
    {
     int i = 0;
     int s = 0;

     printf(" %4s  %4s %10s", "번호", "나이", "이름");
     for (s = 0; s < MAX_SUBJECT; s++)
     {
      printf("%4s", stitles[s]);
     }
     printf("    성적이 -1인 곳은 미입력\n");

     for (i = 0; i < MAX_STUDENT; i++)
     {
      if (stues[i].num)
      {
       ViewStuData(stues + i);
      }
     }

    이소스에서 총합과 평균값까지 내고싶으면 어떻게하죠

    2017년 11월 28일 화요일 오전 9:41

모든 응답

  • 모든 정보는 Student 구조체에 저장 하셨습니다. :)

    함수를 별도로 만드셔서 구조체에 저장된 값을 이용하여 총합(단순 덧셈), 평균(과목마다인 경우 과목마다 더한 후 입력된 학생수로 나눔)을 내시면 될 것 같습니다^^

    2017년 11월 29일 수요일 오후 12:31
  • 과목이 어떻게 지정 되어있는지를 모르겠어요 ㅠㅠ..
    2017년 11월 30일 목요일 오전 3:54