Question: Write a makefile to build the part 1 program (Down). The makefile should contain the following rules: 1) Build r ea dline .o by compiling

Write a makefile to build the part 1 program (Down). The makefile should contain the following rules:

1) Build readline.o by compiling readline.c

2) Build dogs.o by compiling dogs.c

3) Build records.o by compiling records.c

4) Build records by linking readline.o, dogs.o, and records.o

Each rule should include the name of the target file, dependencies among files, and the command to be executed. The makefile should name the executable file for the program records.

Part(1) Already answered; incase you want to know the question asked :

Modify Project 10 dogs.c (Already given )program so that the program is split into three source files and two header files.

1) Put all functions related to operations on the list of dogs into dogs.c

2) Create a header file named dogs.h that contains struct dog declaration and prototypes for the functions in dogs.c. The header file should enclose the contents of the header file in an #ifndef-#endif pair to protect the file.

3) Put the read_line function is in a separate file named readline.c.

4) Create a header file named readline.h that contains a prototype for the read_line function. The header file should enclose the contents of the header file in an #ifndef-#endif pair to protect the file.

5) records.c contains the main function.

6) Include appropriate header files in the source files.

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

*Answer to part 1 *

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

Dogs.h

#ifndef dog_h

#define dog_h

#define NAME_LEN 30

struct dog{

int number;

char dog_name[NAME_LEN+1];

char owner_last_name[NAME_LEN+1];

char breed[NAME_LEN+1];

struct dog *next;

};

/*function prototypes*/

struct dog *append(struct dog *list);

void search(struct dog *list);

void print(struct dog *list);

void clear(struct dog *list);

int read_line(char str[], int n);

#endif

Dogs.c:

#include

#include

#include

#include

#include"dogs.h"

struct dog *append(struct dog *list){

struct dog *cur, *new_node;

new_node = malloc(sizeof(struct dog));

if (new_node == NULL) {

printf("Database is full; can't add more dogs. ");

return list;

}

printf("Enter dog's patient number: ");

scanf("%d", &new_node->number);

for (cur = list;cur != NULL;cur = cur->next)

if (cur != NULL && new_node->number == cur->number) {

printf("Patient already exists. ");

free(new_node);

return list;

}

printf("Enter dog's name: ");

read_line(new_node->dog_name, NAME_LEN);

printf("Enter dog's breed: ");

read_line(new_node->breed, NAME_LEN);

printf("Enter owner's last name: ");

read_line(new_node->owner_last_name, NAME_LEN);

new_node->next = NULL;

if(list == NULL)

{

list = new_node;

return list;

}

else{

for(cur = list; cur->next!= NULL; cur = cur->next);

cur->next = new_node;

return list;

}

}

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

* search: Prompts the user to enter a dog's name, then *

* looks up dog(s) by name in the list. Prints the all the *

* informaiton of the dogs with the name if found. *

* Otherwise, prints a message. *

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

void search (struct dog *list)

{

char search_name[NAME_LEN+1];

struct dog *p;

int found =0;

printf("Enter dog's name: ");

read_line(search_name, NAME_LEN);

for(p=list;

p != NULL;

p = p->next)

{

if(strcmp(search_name, p->dog_name)==0){

found = 1;

printf("%d\t", p->number);

printf("%s\t", p->dog_name);

printf("%s\t", p->breed);

printf("%s ", p->owner_last_name);

}

}

if(!found)

printf("dog not found. ");

}

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

* print: Prints a listing of all dogs in the list, showing *

* the dog's patient number, name, breed, and owner's last *

* name. *

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

void print(struct dog *list){

struct dog *p;

printf("Dog Number\tDog Name\t"

"Dog Breed\tOwner Last Name ");

for (p = list; p != NULL; p = p->next)

printf("%d\t\t%s\t\t%s\t\t%s ", p->number, p->dog_name,p->breed,

p->owner_last_name);

}

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

* clear: Clears the entire linked list. It begins at the head *

* of the list and frees memory allocated for each node of the *

* linked list. *

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

void clear(struct dog *list)

{

struct dog *p;

while(list!=NULL)

{

p = list;

list = list->next;

if(p!=NULL)

free(p);

}

}

Readline.h

#ifndef read_lineh

#define read_lineh

#define NAME_LEN 30

int read_line(char str[], int n);

#endif

Readline.c:

#include

#include

#include

#include

#include"readline.h"

int read_line(char str[], int n)

{

int ch, i = 0;

while (isspace(ch = getchar()))

;

str[i++] = ch;

while ((ch = getchar()) != ' ') {

if (i < n)

str[i++] = ch;

}

str[i] = '\0';

return i;

}

Records.c

#include

#include

#include

#include

#include"readline.h"

#include"dogs.h"

int main(void)

{

char code;

struct dog *dog_list = NULL;

printf("Operation Code: a for appending to the list, s for finding a dog"

", p for printing the list; q for quit. ");

for (;;) {

printf("Enter operation code: ");

scanf(" %c", &code);

while (getchar() != ' ') /* skips to end of line */

;

switch (code) {

case 'a': dog_list = append(dog_list);

break;

case 's': search(dog_list);

break;

case 'p': print(dog_list);

break;

case 'q': clear(dog_list);

return 0;

default: printf("Illegal code ");

}

printf(" ");

}

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!