fork download
  1. //Study10.c
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. typedef struct TestResultStruct* TestResult;
  7.  
  8. typedef enum {
  9. TEST_TYPE_NATIONAL_LANG = 0,
  10. TEST_TYPE_MATH,
  11. TEST_TYPE_SCIENCE,
  12. TEST_TYPE_SOCIAL,
  13. TEST_TYPE_ENGLISH,
  14. TEST_TYPES_NUM
  15. } TestTypes;
  16.  
  17. TestResult TestResult_Create(char ClassName, int StudentNo, const char* StudentName);
  18. void TestResult_Delete(TestResult Result);
  19.  
  20. int TestResult_SetScore(TestResult Result, TestTypes TestType, int Score);
  21. int TestResult_SetTotalScoreRank(TestResult Result);
  22.  
  23. char TestResult_GetClassName(TestResult Result);
  24. int TestResult_GetStudentNo(TestResult Result);
  25. const char* TestResult_GetStudentName(TestResult Result);
  26. int TestResult_GetScore(TestResult Result, TestTypes TestType);
  27. int TestResult_GetTotalScore(TestResult Result);
  28. char TestResult_GetRank(TestResult Result);
  29.  
  30. const char* GetTestTypeName(TestTypes TestType);
  31.  
  32. int main (int argc, const char * argv[])
  33. {
  34. char ClassName, *StudentName;
  35. int StudentNo, Score, i, j;
  36. TestResult Result;
  37.  
  38. printf("クラスを入力して下さい\t");
  39. fflush(stdout);
  40. scanf("%c", &ClassName);
  41.  
  42. printf("出席番号を入力して下さい\t");
  43. fflush(stdout);
  44. scanf("%d", &StudentNo);
  45.  
  46. printf("名前を入力して下さい\t");
  47. fflush(stdout);
  48. StudentName = (char*)malloc(128);
  49. scanf("%s", StudentName);
  50.  
  51. Result = TestResult_Create(ClassName, StudentNo, StudentName);
  52.  
  53. for (i=0; i<TEST_TYPES_NUM; i++) {
  54. printf("%sを入力して下さい\t", GetTestTypeName(i));
  55. fflush(stdout);
  56. scanf("%d", &Score);
  57. TestResult_SetScore(Result, i, Score);
  58. }
  59. TestResult_SetTotalScoreRank(Result);
  60.  
  61. printf("クラス:%c\t出席番号:%d\t名前:%s\n", TestResult_GetClassName(Result),
  62. TestResult_GetStudentNo(Result),
  63. TestResult_GetStudentName(Result));
  64. for (j=0; j<TEST_TYPES_NUM; j++)
  65. printf("%s:%d\t", GetTestTypeName(j), TestResult_GetScore(Result, j));
  66. printf("合計:%d\t", TestResult_GetTotalScore(Result));
  67. printf("評価:%c\n", TestResult_GetRank(Result));
  68.  
  69. TestResult_Delete(Result);
  70. free(StudentName);
  71. return 0;
  72. }
  73.  
  74. typedef struct TestResultStruct {
  75. char ClassName;
  76. int StudentNo;
  77. const char* StudentName;
  78. int Score[TEST_TYPES_NUM];
  79. int TotalScore;
  80. char Rank;
  81. } TestResultStruct;
  82.  
  83. TestResult TestResult_Create(char ClassName, int StudentNo, const char* StudentName)
  84. {
  85. int i;
  86. TestResult Result = (TestResult)malloc(sizeof(TestResultStruct));
  87. Result->ClassName = ClassName;
  88. Result->StudentNo = StudentNo;
  89. Result->StudentName = StudentName;
  90. for (i=0; i<TEST_TYPES_NUM; i++)
  91. Result->Score[i] = 0;
  92. Result->TotalScore = 0;
  93. Result->Rank = 'E';
  94. return Result;
  95. }
  96.  
  97. void TestResult_Delete(TestResult Result)
  98. {
  99. free(Result);
  100. }
  101.  
  102. int TestResult_SetScore(TestResult Result, TestTypes TestType, int Score)
  103. {
  104. if (!Result ||
  105. TestType < 0 || TestType >= TEST_TYPES_NUM ||
  106. Score < 0 || Score > 100)
  107. return -1;
  108.  
  109. Result->Score[TestType] = Score;
  110. return 0;
  111. }
  112.  
  113. void SetTotalScore(TestResult Result)
  114. {
  115. int i, sum = 0;
  116. for (i=0; i<TEST_TYPES_NUM; i++)
  117. sum += Result->Score[i];
  118. Result->TotalScore = sum;
  119. }
  120.  
  121. void SetRank(TestResult Result)
  122. {
  123. const char RankChar[] = "EDCBA";
  124. int Rank = Result->TotalScore / 100;
  125. if (Rank >= strlen(RankChar))
  126. Rank = strlen(RankChar) - 1;
  127. Result->Rank = RankChar[Rank];
  128. }
  129.  
  130. int TestResult_SetTotalScoreRank(TestResult Result)
  131. {
  132. if (!Result)
  133. return -1;
  134.  
  135. SetTotalScore(Result);
  136. SetRank(Result);
  137. return 0;
  138. }
  139.  
  140. char TestResult_GetClassName(TestResult Result)
  141. {
  142. if (!Result)
  143. return '-';
  144. return Result->ClassName;
  145. }
  146.  
  147. int TestResult_GetStudentNo(TestResult Result)
  148. {
  149. if (!Result)
  150. return -1;
  151. return Result->StudentNo;
  152. }
  153.  
  154. const char* TestResult_GetStudentName(TestResult Result)
  155. {
  156. if (!Result)
  157. return NULL;
  158. return Result->StudentName;
  159. }
  160.  
  161. int TestResult_GetScore(TestResult Result, TestTypes TestType)
  162. {
  163. if (!Result || TestType < 0 || TestType >= TEST_TYPES_NUM)
  164. return -1;
  165. return Result->Score[TestType];
  166. }
  167.  
  168. int TestResult_GetTotalScore(TestResult Result)
  169. {
  170. if (!Result)
  171. return -1;
  172. return Result->TotalScore;
  173. }
  174.  
  175. char TestResult_GetRank(TestResult Result)
  176. {
  177. if (!Result)
  178. return '-';
  179. return Result->Rank;
  180. }
  181.  
  182. const char* GetTestTypeName(TestTypes TestType)
  183. {
  184. const char* TestTypeNames[] = { "国語", "数学", "理科", "社会", "英語" };
  185.  
  186. if (TestType < 0 || TestType >= TEST_TYPES_NUM)
  187. return NULL;
  188.  
  189. return TestTypeNames[TestType];
  190. }
  191.  
Success #stdin #stdout 0s 2428KB
stdin
Z
1
Test
80
81
82
83
84
stdout
クラスを入力して下さい	出席番号を入力して下さい	名前を入力して下さい	国語を入力して下さい	数学を入力して下さい	理科を入力して下さい	社会を入力して下さい	英語を入力して下さい	クラス:Z	出席番号:1	名前:Test
国語:80	数学:81	理科:82	社会:83	英語:84	合計:410	評価:A