123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- /* petclub.c -- use a binary search tree */
- #include <stdio.h>
- #include <string.h>
- #include <ctype.h>
- #include "tree.h"
- char menu(void);
- void addpet(Tree * pt);
- void droppet(Tree * pt);
- void showpets(const Tree * pt);
- void findpet(const Tree * pt);
- void printitem(Item item);
- void uppercase(char * str);
- char * s_gets(char * st, int n);
- int main(void)
- {
- Tree pets;
- char choice;
-
- InitializeTree(&pets);
- while ((choice = menu()) != 'q')
- {
- switch (choice)
- {
- case 'a' : addpet(&pets);
- break;
- case 'l' : showpets(&pets);
- break;
- case 'f' : findpet(&pets);
- break;
- case 'n' : printf("%d pets in club\n",
- TreeItemCount(&pets));
- break;
- case 'd' : droppet(&pets);
- break;
- default : puts("Switching error");
- }
- }
- DeleteAll(&pets);
- puts("Bye.");
-
- return 0;
- }
- char menu(void)
- {
- int ch;
-
- puts("Nerfville Pet Club Membership Program");
- puts("Enter the letter corresponding to your choice:");
- puts("a) add a pet l) show list of pets");
- puts("n) number of pets f) find pets");
- puts("d) delete a pet q) quit");
- while ((ch = getchar()) != EOF)
- {
- while (getchar() != '\n') /* discard rest of line */
- continue;
- ch = tolower(ch);
- if (strchr("alrfndq",ch) == NULL)
- puts("Please enter an a, l, f, n, d, or q:");
- else
- break;
- }
- if (ch == EOF) /* make EOF cause program to quit */
- ch = 'q';
-
- return ch;
- }
- void addpet(Tree * pt)
- {
- Item temp;
-
- if (TreeIsFull(pt))
- puts("No room in the club!");
- else
- {
- puts("Please enter name of pet:");
- s_gets(temp.petname,SLEN);
- puts("Please enter pet kind:");
- s_gets(temp.petkind,SLEN);
- uppercase(temp.petname);
- uppercase(temp.petkind);
- AddItem(&temp, pt);
- }
- }
- void showpets(const Tree * pt)
- {
- if (TreeIsEmpty(pt))
- puts("No entries!");
- else
- Traverse(pt, printitem);
- }
- void printitem(Item item)
- {
- printf("Pet: %-19s Kind: %-19s\n", item.petname,
- item.petkind);
- }
- void findpet(const Tree * pt)
- {
- Item temp;
-
- if (TreeIsEmpty(pt))
- {
- puts("No entries!");
- return; /* quit function if tree is empty */
- }
-
- puts("Please enter name of pet you wish to find:");
- s_gets(temp.petname, SLEN);
- puts("Please enter pet kind:");
- s_gets(temp.petkind, SLEN);
- uppercase(temp.petname);
- uppercase(temp.petkind);
- printf("%s the %s ", temp.petname, temp.petkind);
- if (InTree(&temp, pt))
- printf("is a member.\n");
- else
- printf("is not a member.\n");
- }
- void droppet(Tree * pt)
- {
- Item temp;
-
- if (TreeIsEmpty(pt))
- {
- puts("No entries!");
- return; /* quit function if tree is empty */
- }
-
- puts("Please enter name of pet you wish to delete:");
- s_gets(temp.petname, SLEN);
- puts("Please enter pet kind:");
- s_gets(temp.petkind, SLEN);
- uppercase(temp.petname);
- uppercase(temp.petkind);
- printf("%s the %s ", temp.petname, temp.petkind);
- if (DeleteItem(&temp, pt))
- printf("is dropped from the club.\n");
- else
- printf("is not a member.\n");
- }
- void uppercase(char * str)
- {
- while (*str)
- {
- *str = toupper(*str);
- str++;
- }
- }
- char * s_gets(char * st, int n)
- {
- char * ret_val;
- char * find;
-
- ret_val = fgets(st, n, stdin);
- if (ret_val)
- {
- find = strchr(st, '\n'); // look for newline
- if (find) // if the address is not NULL,
- *find = '\0'; // place a null character there
- else
- while (getchar() != '\n')
- continue; // dispose of rest of line
- }
- return ret_val;
- }
|