This document describes the programming assignment for Programming for Engineers.
The assignment is intended to provide you with the opportunity to put into practice what you have learnt in the course
by applying your knowledge and skills to implement a program that will allow players to play Blackjack against the
computer and will maintain information on players (using an array of structures). You are to write a program (using
multiple C source files) that will keep a record of the players who play Blackjack. Player information will be stored in a
text file that will be read in when the program commences. Once the application has read the initial player data, it should
allow the user to interactively query and manipulate the player information as well as play Blackjack against the
computer. Blackjack game play and rules are provided at the end of the document (for your information only).
This assignment is an individual task that will require an individual submission. If you are an internal student, you
will be required to submit your work via learnonline before Tuesday 12 June (swot-vac week), 10am (internal
students). You will also be required to present your work to your supervisor during your allocated session held
in the swot-vac week of the study period. Important: You must attend your allocated session in order to have your
assignment marked. If you are an external student, you are only required to submit an electronic copy of your program
via learnonline before Tuesday 12 June (swot-vac week), 10am (external students). External students are not
required to demonstrate in person.
This document is a kind of specification of the required end product that will be generated by implementing the
assignment. Like many specifications, it is written in English and hence will contain some imperfectly specified parts.
Please make sure you seek clarification if you are not clear on any aspect of this assignment.
GRADUATE QUALITIES
By undertaking this assessment, you will progress in developing the qualities of a University of South Australia graduate.
The Graduate qualities being assessed by this assignment are:
The ability to demonstrate and apply a body of knowledge (GQ1) gained from the lectures and text book
readings. This is demonstrated in your ability to apply programming theory to a practical situation.
The development of skills required for lifelong learning (GQ2), by searching for information and learning to use
and understand the resources provided (supplied assignment files, C standard library, lecture notes, text book,
practical exercises, etc), in order to complete a programming exercise.
The ability to effectively problem solve (GQ3) using the C programming language to complete the programming
problem. Effective problem solving is demonstrated by the ability to understand what is required, utilise the
relevant information from lectures, the text book and practical work, write C code, and evaluate the effectiveness
of the code by testing it.
The ability to work autonomously (GQ4) in order to complete the task.
The ability to behave ethically (GQ5) by ensuring that you abide by the University’s policies and procedures
relating to academic integrity as they apply to assessment. Your solutions must be your own work.
The use of communication skills (GQ6) by producing source code that has been properly formatted; and by
writing adequate, concise and clear comments.
The application of international standards (GQ7) by making sure your solution conforms to the standards
presented in the programming practices lecture slides (available on the course website).
PRACTICAL REQUIREMENTS
It is recommended that you develop this assignment in the suggested stages.
It is expected that your solution WILL include the use of the following:
Your program must be developed using multiple C source files, with the number and names of all the files strictly
adhering to the specifications below.
Your program must be developed with three C source files and two header files. These files must be:
assign.c - This file contains the main() function and contains code to implement the interactive
mode, which uses the functions contained in playerRecord.h. It allows the user to
interactively query and manipulate the player information and play Blackjack. The array
of structures for the player information and the array of structures for the deck of cards
must be defined within the main() function in file assign.c.
playerRecord.h - Provided for you on the web. This file contains the function prototypes for functions to
load, query, and manipulate the player information (stored in the array of structures). It
also allows the player to play Blackjack against the computer (using the functions in
blackJack.h). This file must not be altered with the exception of completing the data
structure declaration.
playerRecord.c - This file contains the implementations of the function prototypes listed in
playerRecord.h. It may also contain additional functions (to assist in your
implementation of the functions listed in playerRecord.h). It will also call functions
provided for you in blackJack.h which will allow the player to play Blackjack against
the computer.
blackJack.h - Provided for you on the web. This file contains function prototypes for functions which
shuffle, deal, and play one game of Blackjack against the computer. This file must not
be altered.
blackJack.c - Provided for you on the web. This file contains the implementations of the function
prototypes listed in blackJack.h. This file must not be altered.
Please note: You do not have to write the code that plays one game of Blackjack against the computer, this
has been provided for you. The blackJack.h and blackJack.c files contain a function called play_one_game()
that plays one game of Blackjack adhering to the rules provided in the assignment handout. The function takes the
deck of cards, chip balance and bet amount as parameters and returns the result of the player’s game against the dealer
(computer), and the bet amount as a call-by-reference parameter. The function returns 3 if the player wins, 1 if the
player draws with the dealer and 0 if the player loses. You are required to use this (i.e. call the function) as part of this
assignment, however, please do not modify the blackjack.h or blackjack.c files. There are other functions
within the blackjack library that create the playing deck, and shuffle it, but you do not have to worry about those functions,
you only have to make use of the play_one_game() function in your solution, the other functions will take care of the
rest for you!
It is expected that your solution WILL also include the use of the following:
An array of structs which will store player information (defined in the main() function).
An array of structs which will store a deck of cards (defined in the main() function).
A variable which records the number of player records stored in the array (defined in the main() function).
No global variables.
The supplied playerRecord.h file which must not be altered with the exception of completing the data
structure declaration.
The supplied blackJack.h file which must not be altered.
The supplied blackJack.c file which must not be altered.
Appropriate functions – 1 idea per function.
Pass-by-reference parameters.
Use of #define for symbolic constants (i.e. #define MAX_PLAYERS 5). No magic numbers.
Well constructed loops. Marks will be lost if you use break, quit(), exit() or return statements or
the like in order to exit from loops.
Output that strictly adheres to the assignment specifications. If you are not sure about these details, you should
check with the ‘Sample Output’ provided at the end of this document.
Good programming practice:
o Consistent commenting, layout and indentation. You are to provide comments to describe: your details,
program description, ALL variable definitions, all function prototypes and all function definitions, and
every significant section of code.
o Meaningful variable names. No single letter variable names.
Your solutions MUST NOT use:
break, or continue statements in your solution. Do not use the quit() or exit() functions or the break
or return statements (or any other techniques) as a way to break out of loops. Doing so will result in a
significant mark deduction.
The sort function(s) that are a part of the C Standard Library.
A portion of the marks will be allocated according to your use of the above. Refer to the C programming practice
slides (available on the course website) and ensure your code adheres to the standards/conventions described
in these slides.
PLEASE NOTE: You are reminded that you should ensure that all input and output conform. to the specifications
listed here; if you are not sure about these details you should check with the sample output provided at the end
of this document or post a message to the discussion forum.
Please ensure that you use Microsoft Visual Studio in order to complete your assignments. Your programs MUST run
on the version of Microsoft Visual Studio on your personal device and/or on the campus computer pools.
INPUT
When your program begins, it will read in player information from a file called players.txt. This is a text file that
stores information relating to players. The table below details the information provided for each player.
Field No. Field Name Description
1 Name up to 25 characters
2 Games played an integer
3 Number won an integer
4 Number lost an integer
5 Number drawn an integer
6 Chip balance an integer
7 Total score an integer
Figure 1: PlayerRecord Structure.
The name of the player is stored on a separate line. The very next line contains the number of games played, games
won, games lost, games drawn, chip balance and the total score, are stored on one line and are separated by the space
character as seen below:
Jake Peralta
5 5 0 0 100 15
Johnny Rose
6 2 0 4 20 10
Amy Santiago
7 4 0 3 300 15
Jessica Jones
12 0 6 6 50 6
Figure 2: Player information file format (players.txt).
An example input file called players.txt can be found on the course website (you are not required to create it
yourself).
You may assume that all data is in the correct format. When storing the player's name, you should use only the minimum
amount of space required. Hint: use malloc() for this.
After the program has stored the data (using an array of structs), it will enter interactive mode as described in the
following section.
INTERACTIVE MODE
Your program should enter an interactive mode after the player information has been read in from the file. The program
will allow the user to enter commands and process these commands until the quit command is entered. The following
commands must be allowed:
Command Description
players
Displays for all players, the player’s name, games played, won, lost,
drawn, number of chips and their total score. Outputs the contents of
the array of players as described in the section ‘Screen Format’ below.
buy
Prompts for and reads the player’s name and searches for the player
in the array of players. If the player is found in the array of players, the
number of chips the player would like to buy is prompted for and read.
The player’s chip balance is updated accordingly and a message
indicating that this has been done is displayed to the screen.
If the player is not found in the player array, an error message is
displayed.
chips
Displays the player with the highest chip balance in the player array.
Where two players have the same chip balance, the player with the
lower games played value should be displayed. If no players are stored
in the array or a player with a highest chip balance cannot be found
(i.e. players have a chip balance of zero), display an error message
accordingly. See section ‘Screen Format’ below.
clear
Prompts for and reads the player’s name and searches for the player
in the array of players. If the player is found, the player’s game
statistics (games played, number won, number lost, number drawn and
player’s total score) and chip balance are set to zero and a message is
displayed to the screen indicating that this has been done.
If the player is not found in the player array, an error message is
displayed.