Домашняя библиотека

Автор работы: Пользователь скрыл имя, 09 Января 2012 в 18:53, курсовая работа

Краткое описание

В данной курсовой работе реализован класс «Домашняя библиотека». В качестве средства разработки выбрана платформа Borland C++ Builder 6. Используется объектно-ориентированный язык программирования – С++.

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

Введение 3
Постановка задачи 4
Описание класса 5
Описание полей класса 5
Описание методов класса 6
Работа со строками 12
Используемые компоненты 13
Форма 13
StringGrid 14
MainMenu 16
Выводы 17
Список литературы 18
Приложение А. Текст программы 19

Содержимое работы - 1 файл

Курсовая работа.docx

— 407.61 Кб (Скачать файл)

            }

            if (fgets(line, 256, f) != 0) {

                len = strlen(line);

             if (len > 0 && line[len - 1] == '\n') {

                line[len - 1] = 0; --len;

             }

                //year = (int *) malloc((len) + 1);

                t = (char *) malloc((len)+1);

                strcpy(t,line);

                year = atoi(t);

            }

            // Заполним новую запись

            ob[numRecords].avtor = avtor;

            ob[numRecords].name = name;

            ob[numRecords].year = year;

            ++numRecords;   // Увеличим число записей

        }

      fclose(f);

      return numRecords;

    };

    //********** Сортировка книг *****************

    void HomeBibl::SortBooks (int mode, bool HighLow){

            char *s1, *s2, *t1, *t2;

            int l1,l2;

            int y1,y2, y=0;

            // флаг - менять/не менять местами

            bool change = false;

            int i,j,k=0;

               //цикл по всем книжкам

               for (i = 0; i<numRecords; i++) {

                  switch (mode) {

                    case 1: {s1 = ob[i].avtor; l1 = strlen(s1); break;}

                    case 2: {s1 = ob[i].name; l1 = strlen(s1); break;}

                    case 3: {y1 = ob[i].year; break;}

                  }

                  //цикл по всем книжкам

                  for (j = i+1; j<numRecords; j++) {

                      switch (mode) {

                        case 1: {s2 = ob[j].avtor; break;}

                        case 2: {s2 = ob[j].name; break;}

                        case 3: {y2 = ob[j].year; break;}

                      }

                      if (mode == 3) {

                         if (HighLow)

                            //если в первой строке символ  больше чем во второй то  меняем местами имена

                            if (y1 > y2) change = true; else change = false;

                          else

                            //если в первой строке символ  больше чем во второй то  меняем местами имена

                            if (y1 < y2) change = true; else change = false;

                      }

                      else {

                      l2 = strlen(s2);

                      k = 0;

                      //пока символы одинаковые и не конец строки

                      while ((s1[k] == s2[k]) && ((k!=l2) || (k!= l1))) {

                         //пропускаем все

                         k++;

                      }

                       //сравниваем символы

                       if (s1[k] != s2[k]) {

                          if (HighLow)

                            //если в первой строке символ  больше чем во второй то  меняем местами имена

                            if (s1[k] > s2[k]) change = true; else change = false;

                          else

                            //если в первой строке символ  больше чем во второй то  меняем местами имена

                            if (s1[k] < s2[k]) change = true; else change = false;

                       }

                      //если конец первой строки  а второй нет то если длина  первой меньше второй то не  меняем иначе меняем

                      if ((k == l2) || (k == l1)) {

                          if (HighLow)

                            if (l1 < l2) change = false; else change = true;

                          else

                            if (l1 > l2) change = false; else change = true;

                      }

                      }

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

                      if (change) {

                          switch (mode) {

                            case 1: {

                               t1 = s1; s1 = s2; s2 = t1;

                               t2 = ob[i].name; ob[i].name = ob[j].name; ob[j].name = t2;

                               y = ob[i].year; ob[i].year = ob[j].year; ob[j].year =y;

                               ob[i].avtor = s1;

                               ob[j].avtor = s2; break;}

                            case 2:  {

                               t1 = s1; s1 = s2; s2 = t1;

                               t2 = ob[i].avtor; ob[i].avtor = ob[j].avtor; ob[j].avtor = t2;

                               y = ob[i].year; ob[i].year = ob[j].year; ob[j].year =y;

                               ob[i].name = s1;

                               ob[j].name = s2; break;}

                            case 3: {

                               y = ob[i].year;

                               ob[i].year = ob[j].year;

                               ob[j].year = y;

                               t1 = ob[i].avtor;

                               ob[i].avtor = ob[j].avtor;

                               ob[j].avtor = t1;

                               t2 = ob[i].name; ob[i].name = ob[j].name; ob[j].name =t2;

                               y1 = ob[i].year;

                               break;}

                          }

                      }

                      change = false;

                  }

               }

              if (mode != 3) {

              for (i = 0; i<numRecords; i++) {

                  switch (mode) {

                    case 1: {s1 = ob[i].avtor; break;}

                    case 2: {s1 = ob[i].name; break;}

                    case 3: {y1 = ob[i].year; break;}

                  }

                  l1 = strlen(s1);

                  //цикл по всем книжкам

                  for (j = i+1; j<numRecords; j++) {

                      switch (mode) {

                        case 1: {s2 = ob[j].avtor; break;}

                        case 2: {s2 = ob[j].name; break;}

                        case 3: {y2 = ob[j].year; break;}

                      }

                      k=0;

                      l2 = strlen(s2);

                     //пока символы одинаковые и  не конец строки

                     while ((s1[k] == s2[k])) {

                         //пропускаем все

                         k++;

                      }

                    if (((k-1)==l2) && ((k-1)== l1))

                    switch (mode) {

                            case 1: {

                               t1 = ob[i+1].avtor; ob[i+1].avtor = ob[j].avtor; ob[j].avtor = t1;

                               t2 = ob[i+1].name; ob[i+1].name = ob[j].name; ob[j].name = t2;

                               y = ob[i].year; ob[i].year = ob[j].year; ob[j].year = y;

                               break;}

                  }//switch

                 }

             }

         }   

    }; 

    //********** Долбавление книги *****************

    void HomeBibl::AddBook (){

            FILE *f = fopen("bibl.txt", "a");

            numRecords++;

            char *t;

            ob[numRecords].avtor = this->avtor;

            ob[numRecords].name = this->name;

            ob[numRecords].year = this->year;

            fputs(b.avtor, f);

            fputs("\n", f);

            fputs(b.name, f);

            fputs("\n", f);

            AnsiString as;

            as = IntToStr(b.year);

            t = as.c_str();

            fputs(t, f);

            fputs("\n", f);

            fclose(f);

    }

    //********** Удаление всех книг *****************

    void HomeBibl::DelAllBooks(){

            // Открыть файл на запись. Старое содержимое файла теряется

            for(int i = 0; i<numRecords; i++){

              ob[i].avtor = "";

              ob[i].name = "";

              ob[i].year = 0;

            };

            ShowMessage("Все книги удалены!");

            FILE *f = fopen("bibl.txt", "w");

            fclose(f);

    }

    //********** Перевод строки в AnsiString *****************

    AnsiString StrToAns(char *str)

    {

          AnsiString as;

            int i,len=0;

          char * s = (char *) malloc((strlen(str)) +1);

            len = strlen(str);

          for(i=0;i<len;i++)

                s[i]=str[i];

          s[i]='\0';

          as=s;

          return as;

    }

    //*** Заполнение StringGrid'a который передается в качестве  параметра ***

    void fillGrid(TStringGrid *sg)

    {

            int i,j;

            sg->RowCount=numFindRecords+1;

            for(i=0;i<numFindRecords;i++)

            {

                    sg->Cells[0][i+1]=StrToAns(ob[arr[i].idx].avtor);

                    sg->Cells[1][i+1]=StrToAns(ob[arr[i].idx].name);

                    sg->Cells[2][i+1]=IntToStr(ob[arr[i].idx].year);

            }

    }

    //********** Поиск книги *****************

    void HomeBibl::SearchBook (){

            bool f=false;

            int k = 0;

            for (int i=0; i< Max_Num_EqBooks; i++) arr[i].idx = 0;

            if (strcmp(this->avtor, "")!=0 ) {

               for(int i = 0; i<numRecords; i++){

                 if (strcmp(AnsiStrLower(ob[i].avtor), this->avtor)==0) {

                    if (strcmp(this->name, "") != 0) {

                      if (strcmp(AnsiStrLower(ob[i].name), this->name)==0) {

                          if (this->year != 0) {

                            if (ob[i].year == this->year)

                                f = true;

                            else f=false;

                          }

                          else f=true;

                      }

                      else f = false;

                    }

                    else {

                         if (this->year != 0) {

                            if (ob[i].year == this->year)

                                f = true;

                            else f=false;

                          }

                         else f=true;

                    }

                 } //ob[i].avtor

                 if (f) {arr[k].idx=i; k++;}

                 f = false;

               }

            } //b.avtor

Информация о работе Домашняя библиотека