Автор работы: Пользователь скрыл имя, 09 Января 2012 в 18:53, курсовая работа
В данной курсовой работе реализован класс «Домашняя библиотека». В качестве средства разработки выбрана платформа Borland C++ Builder 6. Используется объектно-ориентированный язык программирования – С++.
Введение 3
Постановка задачи 4
Описание класса 5
Описание полей класса 5
Описание методов класса 6
Работа со строками 12
Используемые компоненты 13
Форма 13
StringGrid 14
MainMenu 16
Выводы 17
Список литературы 18
Приложение А. Текст программы 19
}
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[
sg->Cells[1][i+1]=StrToAns(ob[
sg->Cells[2][i+1]=IntToStr(ob[
}
}
//********** Поиск книги *****************
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].
if (strcmp(this->name, "") != 0) {
if (strcmp(AnsiStrLower(ob[i].
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