ANOTHER SAMPLE ASSIGNMENT PART-I: Point of Sale Terminal (12 marks)
Transcription
ANOTHER SAMPLE ASSIGNMENT PART-I: Point of Sale Terminal (12 marks)
300580 – Programming Fundamentals ANOTHER SAMPLE ASSIGNMENT Post of Sale Terminal PART-I: Point of Sale Terminal (12 marks) You are required to design a program post.cpp (point of sale terminal) that will be used to calculate the total cost for a list of purchased items against a list of product prices. Each purchased item will be presented by its productId, the price per item, and the corresponding quantity. The program is expected to be interactive and the user can enter everything line by line and generate such as an invoice at the end. We note that such an application usage can be alternatively illustrated by piping all the data to the program. Suppose all the program control commands and the data for the products and purchased items are stored in a plain text file datafile.txt in the form similar to the following sample /rawprices P010001 QX-35 DVD-player5 P010002 P010003 24.99 19.99 58.95 8.85 35.00 /items P010001 DVD-player5 P010002 2 1 20 /invoice /quit where in a typical data line (blank lines are ignored), the first column represents the product ID which will be alphanumeric without white spaces, the second column represents the product price in Australian dollars when inputing product prices, and will represent the quantity of the corresponding purchased item when inputing purchased items. Your program post.exe compiled from post.cpp will then be able to generate an invoice via post.exe < datafile.txt > invoice.txt whose output invoice.txt could look like PHANTOM COMPANY INVOICE PRODUCT ID P010001 DVD-player5 QUANTITY 2 1 PRICE ($) 24.99 58.95 COST ($) 49.98 58.95 P010002 ... 20 8.85 177.00 TOTAL COST = $xxxxx.xx When the post program is executed, it will process commands and data records entered by the user. If a word read into the program starts with the character "/", possibly when the programming is attempting to read in a product ID, then the word is deemed a program command. This program should support at least the following commands o o o o o o o o /rawprices: this indicates that the data records to follow, if any, will be for the product pricing in the form of productId price /items: this indicates that the data records to follow, if any, will be for the purchased items in the form of productId quantity /invoice: this generates the invoice on the purchased items already read into the program /quit: this terminates the program and any other words that start with the character '/' will be considered an invalid command. For the convenience and uniformity of the program design, we assume that the total number of different products will not exceed 2000, and the total number of purchased items for each invoice will not exceed 1000. The program should be designed in such a way that piping can also be used to properly generate an invoice output as in the example at the beginning of this document. Any explicit use of file inside the C++ program for this part will not be considered a proper or complete solution in this particular assessment. We note that if you are using prompts for interactive data input, you need to make sure that the prompts are sent to standard error device using cerr (instead of cout), i.e. using cerr in place of cout. This way, the prompts will not be piped into the output file, say, statement.txt. For the solution of this part, the students are required to provide o o o o o o o the defining diagram (IPO chart) - 2 marks the structure chart (hierarchy chart) - 2 marks solution algorithm in pseudocode (don't use the C++ constructs: no break, no return statements for instance) - 2 marks complete program in C++ (including naming, style etc) - 3 marks proposed testing cases with expected results for checking - 1 mark desk checking a typical case - 1 mark general design quality, error reporting, feel and robustness - 1 mark NOTE: For this part, students may assume that the data records are line based, as described in Part-II below, if they so wish. For the pseudocode part, students may assume that all data that are fed to the program will be in correct format. For the C++ program, however, some kind of additional error reporting is required. PART-II: Extended Post of Sale Terminal (3 marks) This part is merely an extension of the program described in Part I. The functionality of this extended C++ program, xPost.cpp, should support the following additional commands o o o o o Data records and commands to the program are always line based. More precisely, each command and every record will be in the form of exactly 1 textual line, in that any extra bits outside the data fields will be ignored. For instance, if the user enters the following 3 lines when reading purchased items P010001 P010002 1 2 whatever the "whatever" bits there will be ignored because a purchased item record just needs the first 2 fields, the productId P010001 and the quantity 2, so the rest of the same line is ignored. The next 2 lines actually contain 2 bad item records because each single line contains an incomplete record and is thus considered an invalid record. The xPost program should skip such bad records with a warning message. o o /newprices: this does the same as /rawprices but is smarter in that after obtaining a product pricing record from the user it first check if a pricing record for the product ID already exists or not. If it already exists, the new pricing record replaces the existing one; otherwise it simply gets stored. /read inputfile: this reads into the program all the lines from the file named inputfile (the inputfile can be any file name in the form of a single word, i.e. no white spaces are allowed in the file name) as if they were directly entered by the user. For this part, only the complete C++ program needs to be submitted by the students. The program will be assessed not only for the correct functionality, but also for the good design and proper module decomposition. It also takes into consideration of the program robustness at handling unexpected situations. If this part is only partially completed for certain relevant individual modules (functions), then the driver program (the main( ) function) should be designed to illustrate these modules properly. Note on Submission o o o o o o o o All C++ programs must be compilable under Dev-C++ ver 4.9.9.2, or more precisely, under g++ 3.4.2 (mingw-special). For top marks, good programming style and program design will also be considered. This assignment must be submitted electronically via WebCT before the due date. No email submissions will be accepted. Submitted files may be zipped together as a single zip file, if a student wishes to do so. However, no other file compression or file archiving formats will be accepted for the submission. The electronic submission should contain the paper work in plain text or in Microsoft Word format, and the C++ source code (the .cpp file(s)) as well as other relevant files if any. Please do not include the compiled executables as the markers will generate them for you independently anyway. Each submission must be accompanied by a declaration of the ownership of the submitted work as described in the unit outline. Please note that an examiner or lecturer/tutor has the right not to mark this assignment if a pertinent declaration is not present in your submission. Late submissions will attract a daily incremented late penalty of 20% per day. Please note that if your C++ program does not compile, you automatically lose 50% of the marks in the C++ coding part. Electronic submission on the due date after 5pm before 12 midnight will still be accepted without penalty. However, any submission failure in that period due to either the student faults or the fault or malfunction of the School's or UWS' servers will not be accepted as the legitimate reasons for a late submission. Beware that School's servers often need to be shut down for maintenance from late Fridays.