//Study10.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TestResultStruct* TestResult;
typedef enum {
TEST_TYPE_NATIONAL_LANG = 0,
TEST_TYPE_MATH,
TEST_TYPE_SCIENCE,
TEST_TYPE_SOCIAL,
TEST_TYPE_ENGLISH,
TEST_TYPES_NUM
} TestTypes;
TestResult TestResult_Create(char ClassName, int StudentNo, const char* StudentName);
void TestResult_Delete(TestResult Result);
int TestResult_SetScore(TestResult Result, TestTypes TestType, int Score);
int TestResult_SetTotalScoreRank(TestResult Result);
char TestResult_GetClassName(TestResult Result);
int TestResult_GetStudentNo(TestResult Result);
const char* TestResult_GetStudentName(TestResult Result);
int TestResult_GetScore(TestResult Result, TestTypes TestType);
int TestResult_GetTotalScore(TestResult Result);
char TestResult_GetRank(TestResult Result);
const char* GetTestTypeName(TestTypes TestType);
int main (int argc, const char * argv[])
{
char ClassName, *StudentName;
int StudentNo, Score, i, j;
TestResult Result;
StudentName
= (char*)malloc(128); scanf("%s", StudentName
);
Result = TestResult_Create(ClassName, StudentNo, StudentName);
for (i=0; i<TEST_TYPES_NUM; i++) {
printf("%sを入力して下さい\t", GetTestTypeName
(i
)); TestResult_SetScore(Result, i, Score);
}
TestResult_SetTotalScoreRank(Result);
printf("クラス:%c\t出席番号:%d\t名前:%s\n", TestResult_GetClassName
(Result
), TestResult_GetStudentNo(Result),
TestResult_GetStudentName(Result));
for (j=0; j<TEST_TYPES_NUM; j++)
printf("%s:%d\t", GetTestTypeName
(j
), TestResult_GetScore
(Result
, j
)); printf("合計:%d\t", TestResult_GetTotalScore
(Result
)); printf("評価:%c\n", TestResult_GetRank
(Result
));
TestResult_Delete(Result);
return 0;
}
typedef struct TestResultStruct {
char ClassName;
int StudentNo;
const char* StudentName;
int Score[TEST_TYPES_NUM];
int TotalScore;
char Rank;
} TestResultStruct;
TestResult TestResult_Create(char ClassName, int StudentNo, const char* StudentName)
{
int i;
TestResult Result
= (TestResult
)malloc(sizeof(TestResultStruct
)); Result->ClassName = ClassName;
Result->StudentNo = StudentNo;
Result->StudentName = StudentName;
for (i=0; i<TEST_TYPES_NUM; i++)
Result->Score[i] = 0;
Result->TotalScore = 0;
Result->Rank = 'E';
return Result;
}
void TestResult_Delete(TestResult Result)
{
}
int TestResult_SetScore(TestResult Result, TestTypes TestType, int Score)
{
if (!Result ||
TestType < 0 || TestType >= TEST_TYPES_NUM ||
Score < 0 || Score > 100)
return -1;
Result->Score[TestType] = Score;
return 0;
}
void SetTotalScore(TestResult Result)
{
int i, sum = 0;
for (i=0; i<TEST_TYPES_NUM; i++)
sum += Result->Score[i];
Result->TotalScore = sum;
}
void SetRank(TestResult Result)
{
const char RankChar[] = "EDCBA";
int Rank = Result->TotalScore / 100;
Result->Rank = RankChar[Rank];
}
int TestResult_SetTotalScoreRank(TestResult Result)
{
if (!Result)
return -1;
SetTotalScore(Result);
SetRank(Result);
return 0;
}
char TestResult_GetClassName(TestResult Result)
{
if (!Result)
return '-';
return Result->ClassName;
}
int TestResult_GetStudentNo(TestResult Result)
{
if (!Result)
return -1;
return Result->StudentNo;
}
const char* TestResult_GetStudentName(TestResult Result)
{
if (!Result)
return NULL;
return Result->StudentName;
}
int TestResult_GetScore(TestResult Result, TestTypes TestType)
{
if (!Result || TestType < 0 || TestType >= TEST_TYPES_NUM)
return -1;
return Result->Score[TestType];
}
int TestResult_GetTotalScore(TestResult Result)
{
if (!Result)
return -1;
return Result->TotalScore;
}
char TestResult_GetRank(TestResult Result)
{
if (!Result)
return '-';
return Result->Rank;
}
const char* GetTestTypeName(TestTypes TestType)
{
const char* TestTypeNames[] = { "国語", "数学", "理科", "社会", "英語" };
if (TestType < 0 || TestType >= TEST_TYPES_NUM)
return NULL;
return TestTypeNames[TestType];
}
Ly9TdHVkeTEwLmMKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKdHlwZWRlZiBzdHJ1Y3QgVGVzdFJlc3VsdFN0cnVjdCogVGVzdFJlc3VsdDsKCnR5cGVkZWYgZW51bSB7CiAgICBURVNUX1RZUEVfTkFUSU9OQUxfTEFORyA9IDAsCiAgICBURVNUX1RZUEVfTUFUSCwKICAgIFRFU1RfVFlQRV9TQ0lFTkNFLAogICAgVEVTVF9UWVBFX1NPQ0lBTCwKICAgIFRFU1RfVFlQRV9FTkdMSVNILAogICAgVEVTVF9UWVBFU19OVU0KfSBUZXN0VHlwZXM7CgpUZXN0UmVzdWx0IFRlc3RSZXN1bHRfQ3JlYXRlKGNoYXIgQ2xhc3NOYW1lLCBpbnQgU3R1ZGVudE5vLCBjb25zdCBjaGFyKiBTdHVkZW50TmFtZSk7CnZvaWQgVGVzdFJlc3VsdF9EZWxldGUoVGVzdFJlc3VsdCBSZXN1bHQpOwoKaW50IFRlc3RSZXN1bHRfU2V0U2NvcmUoVGVzdFJlc3VsdCBSZXN1bHQsIFRlc3RUeXBlcyBUZXN0VHlwZSwgaW50IFNjb3JlKTsKaW50IFRlc3RSZXN1bHRfU2V0VG90YWxTY29yZVJhbmsoVGVzdFJlc3VsdCBSZXN1bHQpOwoKY2hhciBUZXN0UmVzdWx0X0dldENsYXNzTmFtZShUZXN0UmVzdWx0IFJlc3VsdCk7CmludCBUZXN0UmVzdWx0X0dldFN0dWRlbnRObyhUZXN0UmVzdWx0IFJlc3VsdCk7CmNvbnN0IGNoYXIqIFRlc3RSZXN1bHRfR2V0U3R1ZGVudE5hbWUoVGVzdFJlc3VsdCBSZXN1bHQpOwppbnQgVGVzdFJlc3VsdF9HZXRTY29yZShUZXN0UmVzdWx0IFJlc3VsdCwgVGVzdFR5cGVzIFRlc3RUeXBlKTsKaW50IFRlc3RSZXN1bHRfR2V0VG90YWxTY29yZShUZXN0UmVzdWx0IFJlc3VsdCk7CmNoYXIgVGVzdFJlc3VsdF9HZXRSYW5rKFRlc3RSZXN1bHQgUmVzdWx0KTsKCmNvbnN0IGNoYXIqIEdldFRlc3RUeXBlTmFtZShUZXN0VHlwZXMgVGVzdFR5cGUpOwoKaW50IG1haW4gKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBjaGFyIENsYXNzTmFtZSwgKlN0dWRlbnROYW1lOwogICAgaW50IFN0dWRlbnRObywgU2NvcmUsIGksIGo7CiAgICBUZXN0UmVzdWx0IFJlc3VsdDsKCiAgICBwcmludGYoIuOCr+ODqeOCueOCkuWFpeWKm+OBl+OBpuS4i+OBleOBhFx0Iik7CiAgICBmZmx1c2goc3Rkb3V0KTsKICAgIHNjYW5mKCIlYyIsICZDbGFzc05hbWUpOwoKICAgIHByaW50Zigi5Ye65bit55Wq5Y+344KS5YWl5Yqb44GX44Gm5LiL44GV44GEXHQiKTsKICAgIGZmbHVzaChzdGRvdXQpOwogICAgc2NhbmYoIiVkIiwgJlN0dWRlbnRObyk7CgogICAgcHJpbnRmKCLlkI3liY3jgpLlhaXlipvjgZfjgabkuIvjgZXjgYRcdCIpOwogICAgZmZsdXNoKHN0ZG91dCk7CiAgICBTdHVkZW50TmFtZSA9IChjaGFyKiltYWxsb2MoMTI4KTsKICAgIHNjYW5mKCIlcyIsIFN0dWRlbnROYW1lKTsKCiAgICBSZXN1bHQgPSBUZXN0UmVzdWx0X0NyZWF0ZShDbGFzc05hbWUsIFN0dWRlbnRObywgU3R1ZGVudE5hbWUpOwoKICAgIGZvciAoaT0wOyBpPFRFU1RfVFlQRVNfTlVNOyBpKyspIHsKICAgICAgICBwcmludGYoIiVz44KS5YWl5Yqb44GX44Gm5LiL44GV44GEXHQiLCBHZXRUZXN0VHlwZU5hbWUoaSkpOwogICAgICAgIGZmbHVzaChzdGRvdXQpOwogICAgICAgIHNjYW5mKCIlZCIsICZTY29yZSk7CiAgICAgICAgVGVzdFJlc3VsdF9TZXRTY29yZShSZXN1bHQsIGksIFNjb3JlKTsKICAgIH0KICAgIFRlc3RSZXN1bHRfU2V0VG90YWxTY29yZVJhbmsoUmVzdWx0KTsKCiAgICBwcmludGYoIuOCr+ODqeOCuTolY1x05Ye65bit55Wq5Y+3OiVkXHTlkI3liY06JXNcbiIsIFRlc3RSZXN1bHRfR2V0Q2xhc3NOYW1lKFJlc3VsdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdFJlc3VsdF9HZXRTdHVkZW50Tm8oUmVzdWx0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0UmVzdWx0X0dldFN0dWRlbnROYW1lKFJlc3VsdCkpOwogICAgZm9yIChqPTA7IGo8VEVTVF9UWVBFU19OVU07IGorKykKICAgICAgICBwcmludGYoIiVzOiVkXHQiLCBHZXRUZXN0VHlwZU5hbWUoaiksIFRlc3RSZXN1bHRfR2V0U2NvcmUoUmVzdWx0LCBqKSk7CiAgICBwcmludGYoIuWQiOioiDolZFx0IiwgVGVzdFJlc3VsdF9HZXRUb3RhbFNjb3JlKFJlc3VsdCkpOwogICAgcHJpbnRmKCLoqZXkvqE6JWNcbiIsIFRlc3RSZXN1bHRfR2V0UmFuayhSZXN1bHQpKTsKCiAgICBUZXN0UmVzdWx0X0RlbGV0ZShSZXN1bHQpOwogICAgZnJlZShTdHVkZW50TmFtZSk7CiAgICByZXR1cm4gMDsKfQoKdHlwZWRlZiBzdHJ1Y3QgVGVzdFJlc3VsdFN0cnVjdCB7CiAgICBjaGFyIENsYXNzTmFtZTsKICAgIGludCBTdHVkZW50Tm87CiAgICBjb25zdCBjaGFyKiBTdHVkZW50TmFtZTsKICAgIGludCBTY29yZVtURVNUX1RZUEVTX05VTV07CiAgICBpbnQgVG90YWxTY29yZTsKICAgIGNoYXIgUmFuazsKfSBUZXN0UmVzdWx0U3RydWN0OwoKVGVzdFJlc3VsdCBUZXN0UmVzdWx0X0NyZWF0ZShjaGFyIENsYXNzTmFtZSwgaW50IFN0dWRlbnRObywgY29uc3QgY2hhciogU3R1ZGVudE5hbWUpCnsKICAgIGludCBpOwogICAgVGVzdFJlc3VsdCBSZXN1bHQgPSAoVGVzdFJlc3VsdCltYWxsb2Moc2l6ZW9mKFRlc3RSZXN1bHRTdHJ1Y3QpKTsKICAgIFJlc3VsdC0+Q2xhc3NOYW1lID0gQ2xhc3NOYW1lOwogICAgUmVzdWx0LT5TdHVkZW50Tm8gPSBTdHVkZW50Tm87CiAgICBSZXN1bHQtPlN0dWRlbnROYW1lID0gU3R1ZGVudE5hbWU7CiAgICBmb3IgKGk9MDsgaTxURVNUX1RZUEVTX05VTTsgaSsrKQogICAgICAgIFJlc3VsdC0+U2NvcmVbaV0gPSAwOwogICAgUmVzdWx0LT5Ub3RhbFNjb3JlID0gMDsKICAgIFJlc3VsdC0+UmFuayA9ICdFJzsKICAgIHJldHVybiBSZXN1bHQ7Cn0KCnZvaWQgVGVzdFJlc3VsdF9EZWxldGUoVGVzdFJlc3VsdCBSZXN1bHQpCnsKICAgIGZyZWUoUmVzdWx0KTsKfQoKaW50IFRlc3RSZXN1bHRfU2V0U2NvcmUoVGVzdFJlc3VsdCBSZXN1bHQsIFRlc3RUeXBlcyBUZXN0VHlwZSwgaW50IFNjb3JlKQp7CiAgICBpZiAoIVJlc3VsdCB8fAogICAgICAgIFRlc3RUeXBlIDwgMCB8fCBUZXN0VHlwZSA+PSBURVNUX1RZUEVTX05VTSB8fAogICAgICAgIFNjb3JlIDwgMCB8fCBTY29yZSA+IDEwMCkKICAgICAgICByZXR1cm4gLTE7CgogICAgUmVzdWx0LT5TY29yZVtUZXN0VHlwZV0gPSBTY29yZTsKICAgIHJldHVybiAwOwp9Cgp2b2lkIFNldFRvdGFsU2NvcmUoVGVzdFJlc3VsdCBSZXN1bHQpCnsKICAgIGludCBpLCBzdW0gPSAwOwogICAgZm9yIChpPTA7IGk8VEVTVF9UWVBFU19OVU07IGkrKykKICAgICAgICBzdW0gKz0gUmVzdWx0LT5TY29yZVtpXTsKICAgIFJlc3VsdC0+VG90YWxTY29yZSA9IHN1bTsKfQoKdm9pZCBTZXRSYW5rKFRlc3RSZXN1bHQgUmVzdWx0KQp7CiAgICBjb25zdCBjaGFyIFJhbmtDaGFyW10gPSAiRURDQkEiOwogICAgaW50IFJhbmsgPSBSZXN1bHQtPlRvdGFsU2NvcmUgLyAxMDA7CiAgICBpZiAoUmFuayA+PSBzdHJsZW4oUmFua0NoYXIpKQogICAgICAgIFJhbmsgPSBzdHJsZW4oUmFua0NoYXIpIC0gMTsKICAgIFJlc3VsdC0+UmFuayA9IFJhbmtDaGFyW1JhbmtdOwp9CgppbnQgVGVzdFJlc3VsdF9TZXRUb3RhbFNjb3JlUmFuayhUZXN0UmVzdWx0IFJlc3VsdCkKewogICAgaWYgKCFSZXN1bHQpCiAgICAgICAgcmV0dXJuIC0xOwoKICAgIFNldFRvdGFsU2NvcmUoUmVzdWx0KTsKICAgIFNldFJhbmsoUmVzdWx0KTsKICAgIHJldHVybiAwOwp9CgpjaGFyIFRlc3RSZXN1bHRfR2V0Q2xhc3NOYW1lKFRlc3RSZXN1bHQgUmVzdWx0KQp7CiAgICBpZiAoIVJlc3VsdCkKICAgICAgICByZXR1cm4gJy0nOwogICAgcmV0dXJuIFJlc3VsdC0+Q2xhc3NOYW1lOwp9CgppbnQgVGVzdFJlc3VsdF9HZXRTdHVkZW50Tm8oVGVzdFJlc3VsdCBSZXN1bHQpCnsKICAgIGlmICghUmVzdWx0KQogICAgICAgIHJldHVybiAtMTsKICAgIHJldHVybiBSZXN1bHQtPlN0dWRlbnRObzsKfQoKY29uc3QgY2hhciogVGVzdFJlc3VsdF9HZXRTdHVkZW50TmFtZShUZXN0UmVzdWx0IFJlc3VsdCkKewogICAgaWYgKCFSZXN1bHQpCiAgICAgICAgcmV0dXJuIE5VTEw7CiAgICByZXR1cm4gUmVzdWx0LT5TdHVkZW50TmFtZTsKfQoKaW50IFRlc3RSZXN1bHRfR2V0U2NvcmUoVGVzdFJlc3VsdCBSZXN1bHQsIFRlc3RUeXBlcyBUZXN0VHlwZSkKewogICAgaWYgKCFSZXN1bHQgfHwgVGVzdFR5cGUgPCAwIHx8IFRlc3RUeXBlID49IFRFU1RfVFlQRVNfTlVNKQogICAgICAgIHJldHVybiAtMTsKICAgIHJldHVybiBSZXN1bHQtPlNjb3JlW1Rlc3RUeXBlXTsKfQoKaW50IFRlc3RSZXN1bHRfR2V0VG90YWxTY29yZShUZXN0UmVzdWx0IFJlc3VsdCkKewogICAgaWYgKCFSZXN1bHQpCiAgICAgICAgcmV0dXJuIC0xOwogICAgcmV0dXJuIFJlc3VsdC0+VG90YWxTY29yZTsKfQoKY2hhciBUZXN0UmVzdWx0X0dldFJhbmsoVGVzdFJlc3VsdCBSZXN1bHQpCnsKICAgIGlmICghUmVzdWx0KQogICAgICAgIHJldHVybiAnLSc7CiAgICByZXR1cm4gUmVzdWx0LT5SYW5rOwp9Cgpjb25zdCBjaGFyKiBHZXRUZXN0VHlwZU5hbWUoVGVzdFR5cGVzIFRlc3RUeXBlKQp7CiAgICBjb25zdCBjaGFyKiBUZXN0VHlwZU5hbWVzW10gPSB7ICLlm73oqp4iLCAi5pWw5a2mIiwgIueQhuenkSIsICLnpL7kvJoiLCAi6Iux6KqeIiB9OwoKICAgIGlmIChUZXN0VHlwZSA8IDAgfHwgVGVzdFR5cGUgPj0gVEVTVF9UWVBFU19OVU0pCiAgICAgICAgcmV0dXJuIE5VTEw7CgogICAgcmV0dXJuIFRlc3RUeXBlTmFtZXNbVGVzdFR5cGVdOwp9Cg==