Chapter 9: Programming Projects

 1. The information kept about a part includes part number,
    part description, unit of measure( pounds, ounces, 
    liters, gallons, etc), unit cost, quantity on hand (in 
    the inventory), reorder point (value for quantity on 
    hand at which point an order for additional parts 
    should be made), stock room ( four character 
    identifier) and bin number ( four digits). 

    Write a program that allows a user to enter part 
    information for up to a maximum of 30 parts from the 
    keyboard.  When the user is done, the program outputs a 
    report about the parts.   The program must ask the user 
    to select which report is to be produced.  A list of 
    parts in ascending order by part number or a list in 
    ascending order by stock room.  All output must be 
    nicely formatted into columns with column headings.  
    In addition, the program must pause when a screen is 
    full and ask if the next page is to be seen or the 
    program is to terminate. In addition, parts that have 
    quantity on hand values that are equal to or below the  
    reorder point should be flagged with an asterisk. 

    Write a C++ type declaration for a data structure that 
    will hold the information about a part as well as the 
    bound methods for the part.

 2. Write this program as a C++ program using structures 
    that have bound methods, functions.  Write a structure, 
    struct card, that will represent a card in a 
    standard deck of playing cards.  You will need to 
    represent both the suit (clubs, diamonds, hearts, or 
    spades) as well as the rank (A, K, Q, J, 10, 9, 8, 7, 
    6, 5, 4, 3, 2) of each card.  Note that a deck of 
    playing cards can be represented as an array declared 
    as 

    struct card deck[52];

    Also, the suit and the rank can both be expressed as 
    enumerated data types:

    enum rank {     TWO=2,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,
              KING=10,QUEEN=10,JACK=10,ACE=11};
   
    enum suit { CLUBS,DIAMONDS,HEARTS,SPADES };

    as a result of the enumerated types the card deck could 
    be as follows:

    struct card
    {
         enum rank rval;
         enum suit sval;
    };

    Using the above structure write a program that will 
    present a menu with the following options:

    1.   Deal Five Cards
    2.   Deal Seven Cards
    3.   Quit the Game

    Enter Selection:

    For either of the deal options, the program will call a 
    function that performs a shuffle of the deck.  In a 
    perfect shuffle, the deck is broken exactly in half and 
    rearranged so that the first card is followed by the 
    27th card, followed by the second card, followed by the 
    28th card, and so on.  You may use a random number 
    generator to shuffle the deck of cards and not worry 
    about a perfect shuffle.  The program then asks for how 
    many players are at the table. There can be no more 
    than seven players at the table and no less than three 
    players.  The program will then deal cards, either five 
    cards per player or seven cards per player depending 
    upon the menu selection, to the players at the table.  
    The dealer, the program, always is dealt to last.  
    Using a simple scoring method of where A=11, K=Q=J=10, 
    and all other cards are of face value, compute and 
    display which hand holds the most points.  For a seven 
    card game, the highest five cards a player holds 
    composes the players hand. 

 3. Write this program as a C++ program using structures 
    that have bound methods, functions.  You are to write a 
    program that will read from stdin a C program.  
    The program you write will process the input program 
    and break the program into keywords, identifiers, 
    constants, and function calls.  Your program will 
    build an array of structures that will represent a 
    symbol table for the processed program.  For this 
    assignment the program you  write will only look 
    for C keywords. The structure will look as follows: 

    struct symtbl
    {
         /*
         *    type of symbol: K=keyword, I=identifier, 
         *    C=constant, F=function
         */
         char symtype;
         /*
         *    the symbol itself: the keyword, identifier, 
         *    constant or function name
         /*
         char *symbol;
         /*
         *    the location of the symbol within the
         *    program, 
         *    in our case we will use the line number with 
         *    the first line being 1; multiple occurrences of 
         *    the same symbol simply require another line number
         *    entry
         */
         int *symloc;
         /*
         *    the symbol data type: this applies only to 
         *    identifiers, variables, that the programmer 
         *    declared; C=char, I=integer, S=short, L=long
         *    F=float, D=double, X=structure,
         *    U=union, E=enumerated
         */
         char datatype;
         /*
         *    the size, in bytes of memory, that each of the 
         *    above data types occupies
         */
         int datasize;
    };

The keywords for ANSI C are:

    auto      break     case      char      const     continue
    default   do        double    else      enum      extern
    float     for       goto      if        int       long
    register  return    short     signed    sizeof    static
    struct    switch    typedef   union     unsigned  void
    volatile  while

    When done processing the program, print the array out 
    in sorted order by symbol type.  

HINT: To read from stdin, simply use gets() to read from the keyboard.  When the program 
is run, then redirect the input to come from a file, the 
source file holding the program to be processed.  Remember, that C supports 256 byte lines for source programs.  When printing the final report, use printf() or 
cout and redirect the stdout to a file, then 
send that file to the printer.