| CMSC 201Programming Project Three
 
The CSEE Book Store
 Out: Thursday 10/25/07Due: Before Midnight, Sunday 11/11/07
 
The design document for this project, design3.txt
is due: Before Midnight, Sunday 11/4/07
 | 
The Objective 
The objective of this assignment is to give you experience working with
pointers and arrays of structures.  You'll be doing file handling, 
dynamically allocating an array of structures, and using passing by 
reference.  Good program design and implementation techniques are 
expected, as well as separate compilation.
The Background 
The CSEE Book Store offers students a selection of Computer Science textbooks
that are required or recommended for many of the CMSC courses.  The 
store keeps track of the books in inventory with an inventory file.  A 
student can use the order system to purchase single or multiple copies of
the books available.  The system creates an invoice for the student and also
removes the books ordered from the inventory.
The Task 
Design and code a project that after printing a greeting and getting the name 
of the inventory file from the user, presents the user with a list of the book 
titles found in that file and the specific CMSC courses they are required or 
recommended for. The books are listed in order of their inventory numbers.  
The user can then choose to see more information about one of the books by 
entering its inventory number or may choose to quit.  If the user chooses to 
see more information about a book, in addition to the title, s/he is shown 
the isbn number, author, publisher, the price per copy and the number of copies 
in stock.  The user will then enter the number of copies s/he wants to order 
(0 is a possibility).
Once the user has entered the number of copies to order, which is not 0, a 
line item is generated and written on the invoice and the inventory is 
decreased by that number of copies.  The user is then presented with the list 
of titles again, so that further selections can be ordered.
When the user has finished ordering books, the invoice is completed by showing
the subtotal, adding the sales tax (5% of the subtotal) and writing the tax 
and total.  A new inventory file is then produced which is to be formatted
exactly like the original inventory file, but with the number of copies 
adjusted to reflect the books bought on the order.  
Sample Run 
linux2[102]% ls
a.out          bookstore.h       inventory.dat        proj3.o
bookstore.c    bookstore.o       proj3.c
linux2[103]% a.out
Your greeting and instructions go here
Enter the name of the inventory file : inventory.dat
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 0
To view a book's information enter its number or -1 to quit : -5
To view a book's information enter its number or -1 to quit : 20
To view a book's information enter its number or -1 to quit : 5
Inventory #: 5
ISBN:        978-0073312712
Title:       Discrete_Mathematics_and_Its_Applications
Author:      Kenneth_Rosen
Publisher:   McGraw_Hill
Price:       $ 117.58
Number of copies available:   40
How many would you like to order ?
Please enter an integer between 0 and 40 : 0
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : -1
To view the invoice type    more invoice.txt    at the Linux prompt
linux2[104]% more invoice.txt
invoice.txt: No such file or directory
linux2[105]% ls
a.out          bookstore.h       inventory.dat           proj3.c
bookstore.c    bookstore.o       newInventory.dat        proj3.o
linux2[106]% a.out
Your greeting and instructions go here
Enter the name of the inventory file : inventory.dat
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 8
Inventory #: 8
ISBN:        978-0-12-370606-5
Title:       Computer_Organization_and_Design
Author:      Patterson_&_Hennessy
Publisher:   Morgan_Kaufmann
Price:       $  64.95
Number of copies available:  120
How many would you like to order ?
Please enter an integer between 0 and 120 : 5
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 10
Inventory #: 10
ISBN:        978-1-56881-269-4
Title:       Fundamentals_of_Computer_Graphics
Author:      Peter_Shirley
Publisher:   A_K_Peters
Price:       $  70.30
Number of copies available:   40
How many would you like to order ?
Please enter an integer between 0 and 40 : 1
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 5
Inventory #: 5
ISBN:        978-0073312712
Title:       Discrete_Mathematics_and_Its_Applications
Author:      Kenneth_Rosen
Publisher:   McGraw_Hill
Price:       $ 117.58
Number of copies available:   40
How many would you like to order ?
Please enter an integer between 0 and 40 : 0
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 11
Inventory #: 11
ISBN:        978-0321481009
Title:       Open_GL_Programming_Guide
Author:      Shreiner,_Woo,_Neider,_Davis
Publisher:   Addison_Wesley
Price:       $  59.99
Number of copies available:   35
How many would you like to order ?
Please enter an integer between 0 and 35 : 1
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 12
Inventory #: 12
ISBN:        978-0072958867
Title:       Database_System_Concepts
Author:      Siberschatz,_Korth,_Sudershan
Publisher:   McGraw_Hill
Price:       $ 122.02
Number of copies available:   50
How many would you like to order ?
Please enter an integer between 0 and 50 : 2
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : 14
Inventory #: 14
ISBN:        978-0130676144
Title:       More_Servlets_&_Java_Server_Pages
Author:      Marty_Hall
Publisher:   Prentice_Hall
Price:       $  37.79
Number of copies available:   40
How many would you like to order ?
Please enter an integer between 0 and 40 : 3
 1 - The_C_Programming_Language                    CMSC 201 - Recommended
 2 - Learning_the_UNIX_Operating_System            CMSC 201 - Recommended
 3 - Absolute_Java                                 CMSC 202 - Required
 4 - Head_First_Java                               CMSC 202 - Recommended
 5 - Discrete_Mathematics_and_Its_Applications     CMSC 203 - Required
 6 - Concepts_of_Programming_Languages             CMSC 331 - Required
 7 - Data_Structures_&_Algorithm_Analysis_in_Java  CMSC 341 - Required
 8 - Computer_Organization_and_Design              CMSC 411 - Required
 9 - Operating_System_Concepts                     CMSC 421 - Required
10 - Fundamentals_of_Computer_Graphics             CMSC 435 - Required
11 - Open_GL_Programming_Guide                     CMSC 435 - Recommended
12 - Database_System_Concepts                      CMSC 461 - Required
13 - Computer_Networks                             CMSC 481 - Required
14 - More_Servlets_&_Java_Server_Pages             CMSC 484 - Required
15 - Getting_What-You_Came_For                     CMSC 601 - Required
16 - Writing_for_Computer_Science                  CMSC 601 - Required
17 - Real-Time_Rendering                           CMSC 635 - Required
18 - Introduction_to_Algorithms                    CMSC 641 - Required
19 - Database_Systems:_The_Complete_Book           CMSC 661 - Required
To view a book's information enter its number or -1 to quit : -1
To view the invoice type    more invoice.txt    at the Linux prompt
linux2[107]% more invoice.txt
Title                                           Qty   Unit Price
Computer_Organization_and_Design                 5  @    64.95        324.75
Fundamentals_of_Computer_Graphics                1  @    70.30         70.30
Open_GL_Programming_Guide                        1  @    59.99         59.99
Database_System_Concepts                         2  @   122.02        244.04
More_Servlets_&_Java_Server_Pages                3  @    37.79        113.37
----------------------------------------------------------------------------
                                                      Subtotal        812.45
                                                     Sales Tax         40.62
                                                     -----------------------
                                                       Total $        853.07
linux2[108]% cat inventory.dat
19
1 201 0 0-13-110362-8 The_C_Programming_Language Kernighan_&_Ritchie Prentice_Hall 37.48 150
2 201 0 0-59-600261-0 Learning_the_UNIX_Operating_System Peak,_Todino-Gonquet_&_Strang O'Reilly 13.57 150
3 202 1 978-0321487926 Absolute_Java Savitch Addison_Wesley 107.40 200
4 202 0 978-0596009205 Head_First_Java Sierra_&_Bates O'Reilly 29.67 100
5 203 1 978-0073312712 Discrete_Mathematics_and_Its_Applications Kenneth_Rosen McGraw_Hill 117.58 40
6 331 1 978-0321493620 Concepts_of_Programming_Languages Robert_Sebesta Addison_Wesley 109.40 50
7 341 1 978-0321370136 Data_Structures_&_Algorithm_Analysis_in_Java Mark_Weiss Addison_Wesley 100.60 120
8 411 1 978-0-12-370606-5 Computer_Organization_and_Design Patterson_&_Hennessy Morgan_Kaufmann 64.95 120
9 421 1 978-0471694663 Operating_System_Concepts Silberschatz,_Galvin,_Gagne Wiley 85.83 120
10 435 1 978-1-56881-269-4 Fundamentals_of_Computer_Graphics Peter_Shirley A_K_Peters 70.30 40
11 435 0 978-0321481009 Open_GL_Programming_Guide Shreiner,_Woo,_Neider,_Davis Addison_Wesley 59.99 35
12 461 1 978-0072958867 Database_System_Concepts Siberschatz,_Korth,_Sudershan McGraw_Hill 122.02 50
13 481 1 978-0130661029 Computer_Networks Tanenbaum Prentice_Hall 73.44 40
14 484 1 978-0130676144 More_Servlets_&_Java_Server_Pages Marty_Hall Prentice_Hall 37.79 40
15 601 1 0-374-52477-7 Getting_What-You_Came_For Robert_Peters Farrer_&_Straus 10.88 20
16 601 1 978-1852338022 Writing_for_Computer_Science Justin_Zobel Springer 29.95 20
17 635 1 978-1-56881-182-6 Real-Time_Rendering Akenine-Moller_&_Haines A_K_Peters 53.76 40
18 641 1 978-0072970548 Introduction_to_Algorithms Cormen,_Leiserson,_Rivest_&_Stein McGraw_Hill 107.27 40
19 661 1 978-0130319951 Database_Systems:_The_Complete_Book Molina,_Ullman,_Widom Prentice_Hall 94.02 40
linux2[109]% cat newInventory.dat
19
1 201 0 0-13-110362-8 The_C_Programming_Language Kernighan_&_Ritchie Prentice_Hall 37.48 150
2 201 0 0-59-600261-0 Learning_the_UNIX_Operating_System Peak,_Todino-Gonquet_&_Strang O'Reilly 13.57 150
3 202 1 978-0321487926 Absolute_Java Savitch Addison_Wesley 107.40 200
4 202 0 978-0596009205 Head_First_Java Sierra_&_Bates O'Reilly 29.67 100
5 203 1 978-0073312712 Discrete_Mathematics_and_Its_Applications Kenneth_Rosen McGraw_Hill 117.58 40
6 331 1 978-0321493620 Concepts_of_Programming_Languages Robert_Sebesta Addison_Wesley 109.40 50
7 341 1 978-0321370136 Data_Structures_&_Algorithm_Analysis_in_Java Mark_Weiss Addison_Wesley 100.60 120
8 411 1 978-0-12-370606-5 Computer_Organization_and_Design Patterson_&_Hennessy Morgan_Kaufmann 64.95 115
9 421 1 978-0471694663 Operating_System_Concepts Silberschatz,_Galvin,_Gagne Wiley 85.83 120
10 435 1 978-1-56881-269-4 Fundamentals_of_Computer_Graphics Peter_Shirley A_K_Peters 70.30 39
11 435 0 978-0321481009 Open_GL_Programming_Guide Shreiner,_Woo,_Neider,_Davis Addison_Wesley 59.99 34
12 461 1 978-0072958867 Database_System_Concepts Siberschatz,_Korth,_Sudershan McGraw_Hill 122.02 48
13 481 1 978-0130661029 Computer_Networks Tanenbaum Prentice_Hall 73.44 40
14 484 1 978-0130676144 More_Servlets_&_Java_Server_Pages Marty_Hall Prentice_Hall 37.79 37
15 601 1 0-374-52477-7 Getting_What-You_Came_For Robert_Peters Farrer_&_Straus 10.88 20
16 601 1 978-1852338022 Writing_for_Computer_Science Justin_Zobel Springer 29.95 20
17 635 1 978-1-56881-182-6 Real-Time_Rendering Akenine-Moller_&_Haines A_K_Peters 53.76 40
18 641 1 978-0072970548 Introduction_to_Algorithms Cormen,_Leiserson,_Rivest_&_Stein McGraw_Hill 107.27 40
19 661 1 978-0130319951 Database_Systems:_The_Complete_Book Molina,_Ullman,_Widom Prentice_Hall 94.02 40
linux2[110]% 
Although your output need not be identical to the above,
all information (including the greeting) must be present.
Please be aware that this is definitely NOT a complete
test of the program.  Your testing should be much more extensive.
Input Guarantees
   - The first item in the inventory file is the number of records in the 
       file.  It is a positive integer.
   
- Any inventory file we use will have the same format as the one provided,
       inventory.dat
   
- The filename of the inventory file will not exceed 49 characters.
   
- Graders will enter only integers as book choices
Further Specifications
   - You must use separate compilation for this project.  You may have as
       many .c and .h files as you want to fit your project design.  Your file
       that contains main() should be called proj3.c  You must have at least 3
       files.
   
- You MUST have a function called OpenInventoryFile which has the
       following function prototype:
 FILE* OpenInventoryFile (int *numBooksPtr);
 where numBooks is an integer declared in main() and whose address is 
       passed to this function so that this function can modify it to hold the 
       number of records in the file.  You should prompt the user for the name 
       of the inventory file and open it within this function, handling any
       errors encountered when attempting to open the file.  You should read 
       the first item from the file, the number of records, and modify 
       numBooks.  You must return the pointer to the file you opened so that 
       the rest of of the file's contents can be read later in the program.  
       You may not change this prototype in any way.
- The inventory.dat file has the following information:
 - The first item in the file is the integer number of records in the
           file.
       
- After that, each record is on one line.
 In this case we want all of the data to be on one line even if 
           that makes the line exceed 80 characters.  Data files are meant 
           for computer use, not for user viewing.
 Each record is made up of the following data in this order:- inventory number (positive integer)
           
- class number (positive integer)
           
- whether required or recommended (an integer used as a boolean,
           
 where 1 is for required and 0 is for recommended)
- isbn number (a string of not more than 17 characters)
           
- title (a string of not more than 44 characters)
           
- author (a string of not more than 33 characters)
           
- publisher (a string of not more than 15 characters)
           
- the unit price of the book (a float expressed to 2 decimal 
               places)
           
- the number of copies in stock (a non-negative integer)
       
 
- You may get a copy of the inventory.dat file from my account.  The 
           file is in the /afs/umbc.edu/users/b/o/bogar/pub  directory.
       
- REQUIRED and RECOMMENDED should be #define d to be 1 and
           0, respectively.
   
 
- You MUST use dynamic memory allocation (malloc or calloc) to 
       allocate the memory to hold the array of structures after you have read 
       the number of records, numBooks, from the file. 
   
- If ANY file fails to open, you should print an appropriate message to
       the screen and exit the program.
   
- The invoice is to be written to a file called invoice.txt 
       (not to the screen).  The invoice should not exceed a width of 80
       characters.  If the user doesn't purchase any books, you shouldn't 
       create an invoice, and so there would be no file called invoice.txt 
       in your directory. (See sample run)
   
- If a user decides to buy all of the remaining copies of a book, do not 
       remove the book from the inventory list, just show 0 copies in the new 
       inventory file.
   
- After the user has completed ordering and the invoice.txt file has 
       possibly been produced, you must generate a new inventory file called 
       newInventory.dat  This file must be generated, even if no books 
       were ordered, and it should be formatted exactly like the original
       inventory.dat file.  
   
- You must wait to open a file until you need to read from or write to it
       and you must close a file as soon as you are finished reading from it
       or writing to it.
   
- On normal (non-error) execution of the program, you must free()
       all memory that you allocated dynamically when you are finished using 
       it.
Submitting the Program 
Here is a sample submission command.  Since you may have different file names
you'll have to adjust it to fit your needs.  As always, be sure to submit all
of the files necessary for your project to compile.
Note that the project name starts with uppercase 'P'.
submit cs201 Proj3 proj3.c bookstore.c bookstore.h 
To verify that your project was submitted, you can execute the
following command at the Unix prompt.  It will show the file that
you submitted in a format similar to the Unix 'ls' command.
submitls cs201 Proj3