Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hi I need help with my C program to print a Library reciept using Linux with a d

ID: 3686607 • Letter: H

Question

Hi I need help with my C program to print a Library reciept using Linux with a driver program that can't be changed and h file.

Change processTransaction:

o Receives Node **ppHead instead of the bookM array and count

o Uses searchLL to find a book in the ordered linked list.

p = searchLL(*ppHead, book.szBookId, &pPrecedes);

o Uses pointer notation to update the contents of a node instead of the contents of an array element

(e.g., p0>book.szCustomerId instead of bookM[i].szCustomerId)

• Change processCustomerCommand:

o Receives Node **ppHead instead of the bookM array and count

o Invokes processTransaction passing ppHead instead of the bookM array and count

• Change processBookCommand:

o Receives Node **ppHead instead of the bookM array and count

o Uses searchLL to find a book in the ordered linked list:

p = searchBooks(*ppHead, book.szBookId, &pPrecedes);

o Uses pointer notation to reference a book instead of referencing an element of the bookM array.

o Add code for the new BOOK NEW subcommand. This should sscanf the data into elements of a Book

structure (declared using Book book). It should then pass that book to insertLL.

Here is what I have so far.

// If compiling using visual studio, tell the compiler not to give its warnings

// about the safety of scanf and printf

#define _CRT_SECURE_NO_WARNINGS 1

#include

#include

#include

#include "cs1713p4.h"

void printBook(Book * book) {

printf(" %-9s %-6s %-10s %lf %lf %40s "

   , book->szBookId

   , book->szCustomerId

   , book->szCheckedOutDt

   , book->dLateFeePerDay

   , book->dMaxLateFee

   , book->szTitle);

  

}

void printBookHeading() {

printf(" %-9s %-6s %-10s %-6s %-6s %-40s "

   , "Book Id", "Customer Id", "Checked Out Date", "Late Fee Per Day", "Max Late Fee", "Title");

}

/******************** printBooks **************************************

void printBooks(char *pszHeading, Book bookM[], int iBookCnt)

Purpose:

Prints each book in a table format

Parameters:

I char *pszHeading Heading to print before printing the table of books

I Book bookM[] Array of books

I int iBookCnt Number of elements in the bookM array.

Returns:

n/a

Notes:

**************************************************************************/

void printBooks(char *pszHeading, Node *pHead) {

printf("%s ", pszHeading);

  

printBookHeading();

  

while(pHead != NULL) {

printBook(&(pHead->book));

pHead = pHead->pNext;

}

}

/********************processCustomerCommand *****************************

void processCustomerCommand(Book bookM[], int iBookCnt

, char *pszSubCommand, char *pszRemainingInput

, Customer *pCustomer)

Purpose:

Processes the subcommands associated with the CUSTOMER command:

CUSTOMER BEGIN szBookId szCustomerId szCheckedOutDt dLateFeePerDay dMaxLateFee szTitle

specifies the beginning of customer request and includes all the identification information from program 2.

CUSTOMER ADDRESS szStreetAddress,szCity,szStateCd,szZipCd

specifies the address for a customer (separated by commas)

CUSTOMER TRANS cTransType szBookId szTransDt

specifies a single book transaction. Steps:

-   Print the Transaction Type, Book Id, and Transaction Date

-   Lookup the book ID using a binary search. If not found, print a warning (but do not terminate your program) and return.

-   If the transaction date is invalid, show a message stating "invalid date", but do not terminate. Use the validateDate function.

-   If the transaction type is C (meaning checkout):

o   If the book is already checked out, show a message stating "already checked out", but do not terminate.

o   Otherwise, check out the book to this customer, setting the book's customer ID. The book's checked out date needs to be set to the transaction's date.

-   If the transaction type is R (meaning return):

o   Use dateDiff to subtract the book's szCheckOutDt from the transaction's szTransDt

o   If the difference is more than 14:

--   Determine the number of days late by subtracting 14 from that difference.

--   Compute the late fee by multiplying the number of days late by the book's dLateFeePerDay.

--   If that late fee is greater than the book's dMaxLateFee, change it to dMaxLateFee.

-- Print the late fee.

--   Add the computed late fee to the customer's dFeeBalance

o   Set the book's customer ID to "NONE".

o   Set the book's check out date to "0000-00-00".

CUSTOMER COMPLETE

specifies the completion of a customer. Print the total fees for this customer.

Parameters:

I/O Book bookM[] Array of books

I int iBookCnt Number of elements in bookM[]

I char *pszSubCommand Should be BEGIN, ADDRESS, REQUEST or COMPLETE

I char *pzRemainingInput Points to the remaining characters in the input

line (i.e., the characters that following the

subcommand).

I/O Customer *pCustomer The BEGIN subcommand begins a new customer.

Notes:

**************************************************************************/

void processCustomerCommand(Node **ppHead

, char *pszSubCommand, char *pszRemainingInput

, Customer *pCustomer) {

int iScanfCnt;

Transaction transaction;

double *pdCustomerTotalFees;

  

// Determine what to do based on the subCommand

if (strcmp(pszSubCommand, "BEGIN") == 0)

{

// get the Customer Identification Information

// your code

  

iScanfCnt = sscanf(pszRemainingInput, "%s %d %s %s ", pCustomer->szCustomerId, pCustomer->dFeeBalance, pCustomer->szEmailAddr, pCustomer->szFullName);

  

// Check for bad customer identification data

if (iScanfCnt < 4)

exitError(ERR_CUSTOMER_ID_DATA, pszRemainingInput);

   }

else if (strcmp(pszSubCommand, "COMPLETE") == 0)

{

// print the customer's total fees

// your code

printf(" %-10s %8s %10s %8.2f ", "", "", "Total Fees", *pdCustomerTotalFees);

printf("*********************************************************************** ");

*pdCustomerTotalFees = 0;

}

else if (strcmp(pszSubCommand, "ADDRESS") == 0)

{

// get the postal address and print it

// your code

iScanfCnt = sscanf(pszRemainingInput, "%30[^,],%20[^,],%2[^,],%[0-9]", &pCustomer->szStreetAddress

   , &pCustomer->szCity, &pCustomer->szStateCd, &pCustomer->szZipCd);

if (iScanfCnt < 4)

exitError(ERR_CUSTOMER_ADDRESS_DATA, pszRemainingInput);

  

//print the customer

printCustomer(pCustomer);

  

// print the column heading for the transactions

printf(" %-5s %-9s %-10s ", "Trans", "Book", "Date");

  

}

else if (strcmp(pszSubCommand, "TRANS") == 0)

{

  

printf(" ");

  

}

else printf(" *** %s %s ", ERR_CUSTOMER_SUB_COMMAND, pszSubCommand);

}

/********************processBookCommand *****************************

void processBookCommand(Book bookM[], int iBookCnt

, char *pszSubCommand, char *pszRemainingInput)

Purpose:

Processes the subcommands associated with the BOOK command:

BOOK CHANGE szBookId dLateFeePerDay dMaxLateFee

change the Late Fee Per Day and Max Late Fee to the specified values

BOOK SHOW szBookId

requests a display of a particular book. Show all of its information.

Parameters:

I/O Book bookM[] Array of books

I int iBookCnt Number of elements in bookM[]

I char *pszSubCommand Should be CHANGE or SHOW

I char *pzRemainingInput Points to the remaining characters in the input

line (i.e., the characters that following the

subcommand).

Notes:

**************************************************************************/

void processBookCommand(Node **ppHead

, char *pszSubCommand, char *pszRemainingInput) {

  

Book book;

  

int iQuantity; // quantity of Books

int iScanfCnt;

// Determine what to do based on the subCommand

// your code

}

double processTransaction(Node **ppHead, Customer customer, Transaction transation);

And here is the Driver program provided.

And here is the h file provided.

Here us the p4Command.txt

And here is the p4Book.txt

Explanation / Answer

compile the code using a make file

the same file tested with the driver program works ok in the compiler

both the file p4book.txt and

p4command.txt files were read ok

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote