Проблемы развития проекта при процедурном подходе

Страницы работы

Содержание работы

Проблемы развития проекта при процедурном подходе

Кандидаты проходят испытание, включающее в себя два теста, которые оцениваются целым числом в диапазоне от 0 до 100 включительно. Считается, что испытание пройдено, если суммарный результат не менее заранее заданного числа.

//basic trials only

typedef struct TrialStruct {

      char name[80];

      int mark1;

      int mark2;

} Trial;

#define PASS_MARK 120

Trial *addTrial(char *name, int mark1, int mark2) {

      Trial *trial;

      if((trial = (Trial*)malloc(sizeof(Trial))) == NULL) {

            return NULL;

      }

      strcpy(trial->name, name);

      trial->mark1 = mark1;

      trial->mark2 = mark2;

      return trial;

}

int result(Trial *trial) {

      return trial->mark1 + trial->mark2;

}

int isPassed(Trial *trial) {

      return result(trial) >= PASS_MARK;

}

char *toString(Trial *trial, char *str) {

      if(trial == NULL) {

            strcpy(str, "null");

      } else {

            sprintf(str, "%s;%d;%d;%d;",

                  trial->name, trial->mark1, trial->mark2);

            strcat(str, isPassed(trial)? "true": "false");

      }

      return str;

}

//Runner0

void main(void) {

      Trial *trial = addTrial("Sakovich", 45, 93);

      char str[256];

      if(trial != NULL) {

            printf("Name:\t\t%s\n", trial->name);

            printf("Mark 1:\t\t%d\n", trial->mark1);

            printf("Mark 2:\t\t%d\n", trial->mark2);

            printf("Result:\t\t%d\n", result(trial)); //no error! to regret...

            printf("Is passed:\t%s\n", isPassed(trial)? "true": "false");

            printf("To string:\t%s\n", toString(trial, str));

      }

}

//Runner1

void main(void) {

      Trial *trials[] = {

            addTrial("Sakovich", 45, 93),

            addTrial("Zhylinsky", 51, 35),

            addTrial("", 0, 0)

      };

      char str[256];

      for (int i=0; i < sizeof(trials)/sizeof(Trial*); i++) {

            printf("%s\n", toString(trials[i], str));

      }

}

//project evolution

//добавляется новый вид испытания – упрощенное

//необходимо найти такое решение, при котором Runner1 останется рабочим

//with lite trial 1 (new struct)

typedef enum {

      BASIC, LITE

} TrialKind;

typedef struct TrialStruct {

      char name[80];

      int mark1;

      int mark2;

      TrialKind kind;

} Trial;

#define PASS_MARK 120

#define PASS_MARK1 35

#define PASS_MARK2 60

Trial *addTrial(char *name, int mark1, int mark2) {

      Trial *trial;

      if((trial = (Trial*)malloc(sizeof(Trial))) == NULL) {

            return NULL;

      }

      strcpy(trial->name, name);

      trial->mark1 = mark1;

      trial->mark2 = mark2;

      trial->kind = BASIC;

      return trial;

}

Trial *addLiteTrial(char *name, int mark1, int mark2) {

      Trial *trial;

      if((trial = addTrial(name, mark1, mark2)) == NULL) {

            return NULL;

      }

      trial->kind = LITE;

      return trial;

}

int result(Trial *trial) {

      return trial->mark1 + trial->mark2;

}

int isPassed(Trial *trial) {

      int res;

      switch(trial->kind) {

            case BASIC: res = result(trial) >= PASS_MARK;

                        break;

            case LITE:  res = trial->mark1 >= PASS_MARK1 &&

                               trial->mark2 >= PASS_MARK2;

                        break;

      }

      return res;

}

char *toString(Trial *trial, char *str) {

      if(trial == NULL) {

            strcpy(str, "null");

      } else {

            sprintf(str, "%s;%d;%d;%d;",

                  trial->name, trial->mark1, trial->mark2);

            strcat(str, isPassed(trial)? "true": "false");

      }

      return str;

}

//Runner2

void main(void) {

      Trial *trials[] = {

            addTrial("Sakovich", 45, 93),

            addTrial("Zhylinsky", 51, 35),

            addLiteTrial("Barkou", 29, 95),

            addLiteTrial("Lis", 35, 68),

            addTrial("Astapenka", 90, 57)

      };

      char str[256];

      for (int i=0; i < sizeof(trials)/sizeof(Trial*); i++) {

            printf("%s\n", toString(trials[i], str));

      }

}

//Runner1 работает!

//недостаток – код существенно переписывается

//следствие - требует повторного тестирования

//with lite trial 2 (the same struct)

typedef struct {

      char name[80];

      int mark1;

      int mark2;

} Trial;

#define PASS_MARK 120

Похожие материалы

Информация о работе