
Patrick B. answered 07/02/21
Math and computer tutor/teacher
//Book.h
#ifndef _BOOK
#define _BOOK
#define BOOK_TITLE_LENGTH (255)
#define BOOK_AUTHOR_LENGTH (255)
#define MAX_NUM_BOOKS (100)
typedef struct _TBook
{
char title[BOOK_TITLE_LENGTH];
char author[BOOK_AUTHOR_LENGTH];
int year;
float price;
} * TBook;
#define BOOK_SIZE (sizeof(struct _TBook))
typedef struct _TBookCollection
{
struct _TBook bookCollection[MAX_NUM_BOOKS];
int count;
} * TBookCollection;
#define BOOK_COLLECTION_SIZE (sizeof(struct _TBookCollection))
int Book_Create(TBook book, char * strBookTitle, char * strBookAuthor, int bookYear, float bookPrice);
int BookCollection_InsertAddNew(TBookCollection BookCollection, TBook newBook);
void BookCollection_Init(TBookCollection BookCollection);
int BookCollection_RemoveDelete(TBookCollection BookCollection, int iIndexPos);
int BookCollection_Output(TBookCollection);
void Book_Input(TBook book);
#endif
//Book.cpp
using namespace std;
#include <iostream>
#ifndef _BOOK
#include "book.h"
#endif
#include <string.h>
#include <stdio.h>
Book_Create(TBook book, char * strBookTitle, char * strBookAuthor, int bookYear, float bookPrice)
{
strncpy(book->title,strBookTitle,BOOK_TITLE_LENGTH);
strncpy(book->author,strBookAuthor,BOOK_AUTHOR_LENGTH);
book->year = bookYear;
book->price = bookPrice;
}
void BookCollection_Init(TBookCollection BookCollection)
{
BookCollection->count=0;
memset(BookCollection->bookCollection,0,MAX_NUM_BOOKS*BOOK_SIZE);
}
int BookCollection_InsertAddNew(TBookCollection BookCollection, TBook newBook)
{
int iReturn=0;
if (BookCollection->count<MAX_NUM_BOOKS)
{
memcpy(&BookCollection->bookCollection[BookCollection->count++],newBook,BOOK_SIZE);
}
else
{
iReturn=-1;
}
return(iReturn);
}
int BookCollection_RemoveDelete(TBookCollection BookCollection, int iIndexPos)
{
for (int iLoop=iIndexPos; iLoop<BookCollection->count-1; iLoop++)
{
memcpy(&BookCollection->bookCollection[iLoop],&BookCollection->bookCollection[iLoop+1],BOOK_SIZE);
}
memset(&BookCollection->bookCollection[BookCollection->count-1],0,BOOK_SIZE);
BookCollection->count--;
}
int BookCollection_Output(TBookCollection BookCollection)
{
for (int iLoop=0; iLoop<BookCollection->count; iLoop++)
{
cout << "------------- BOOK # " << (iLoop+1) << "---------------" << endl;
cout << "Title:" << BookCollection->bookCollection[iLoop].title << endl;
cout << "Author:" << BookCollection->bookCollection[iLoop].author << endl;
cout << "Year:" << BookCollection->bookCollection[iLoop].year << endl;
cout << "Price:" << BookCollection->bookCollection[iLoop].price << endl;
}
}
void Book_Input(TBook book)
{
cin.ignore();
cout << "Please input book title :>";
cin.getline(book->title,BOOK_TITLE_LENGTH);
cin.ignore();
cout << "Please input book author :>";
cin.getline(book->author,BOOK_AUTHOR_LENGTH);
book->year=-1;
while (book->year<=100)
{
cout << "Please input book year :>";
cin >> book->year;
}
book->price = 0;
while (book->price<=0)
{
cout << "Please input book price :>";
cin >> book->price;
}
}
using namespace std;
#include <iostream>
#ifndef _BOOK
#include "book.h"
#endif
int menu()
{
int x;
cout << " <1> New book " << endl;
cout << " <2> delete book " << endl;
cout << " <3> display books " << endl;
cout << " <0> exit quit " << endl;
cout << " ----:>";
cin >> x;
return x;
}
int main(int argc, char** argv)
{
struct _TBookCollection myBookCollection;
int menuResponse;
BookCollection_Init(&myBookCollection);
while ((menuResponse = menu())!=0)
{
switch (menuResponse)
{
case 1:
{
struct _TBook newBook;
Book_Input(&newBook);
BookCollection_InsertAddNew(&myBookCollection,&newBook);
break;
}
case 2:
{
int iIndexPos;
cout << "Book # :>";
cin >> iIndexPos;
cout << "book # = " << iIndexPos << endl;
if (iIndexPos>0 && iIndexPos<=myBookCollection.count)
{
BookCollection_RemoveDelete(&myBookCollection,iIndexPos-1);
}
break;
}
case 3:
{
BookCollection_Output(&myBookCollection);
break;
}
}
}
return 0;
}