This assignment is similar to #3 except

  • The Team information should be represented as a ordered singly linked list using pointers. (Keep the nodes in order by szTeamId as they are inserted.)
  • Your search for a Team Id is linear (following pointers) since linked lists don't support binary search.
  • The command file will have two new subcommands for TEAM. We will be able to insert NEW teams. Also, we can change the team's contact information.
  • You will be provided with a driver program (cs1713p4Driver.c) (see below)
  • Your code must be created in a separate C file (p4abc123.c). (see below)
  • There is a new include file, cs1713p4.h

Input:

Team same as Programming Assignment #2 although there may be different data.

Command Same as assignment 3 plus this new subcommand for TEAM:

TEAM NEW szTeamId iWins iLosses dFeeAmount dPaidAmount
6s d d lf lf
Add this new team to the linked list. Note that you should check whether it already exists and print a
warning message if it does, but do not exit.
TEAM CONTACT szTeamId zTeamNm szEmail szPhone szContactName
6s 12s 30s 13s 20s
The values are separated by commas.
This command should change the contact information for a team to the specified values.
If the team doesn't exist, it should show a warning message, but not exit.

Driver program:

You will be provided with a driver program, cs1713p4Driver.c which

1. invokes the driver's processCommandSwitches

. invokes the driver's getTeams to read the original team information into an ordered linked list. You must keep the list in order (by szTeamId) for each insertion. getTeams calls your insertLL to insert it into the ordered linked list.

3. invokes your printTeams to print the original team information.

4. invokes a driver-provided processCommands which

o reads input lines from the command file until eof:

  • prints the input line
  • determines command and subcommand
  • invokes either
    • your processTeamCommand to process a TEAM subcommand
    • your processGameCommand to process a GAME subcommand

5. invokes your printTeams to print the resulting team information

6. Provided functions:

  • allocateNode
  • getTeams

Note: do not change the cs1713p4Driver.c

Your p4abc123.c code:

  • You should probably copy your p3abc123.c into a file named p4abc123.c.
  • It does the following includes:
#include < stdio.h>
#include < string.h>
#include "cs1713p4.h"
  • It must not include cs1713p4Driver.c within your p4abc123.c file. Look at the notes below on compiling. The "link" step is where the functions you call in the driver and the functions the driver calls in your code get resolved.
  • Remove the code for getTeams from your p4abc123.c file since it is in the driver.
  • Remove the code for sortTeams from your p4abc123.c file.
  • Remove the code for searchTeams from your p4abc123.c file.
  • Change printTeams:
    • Receives Node *pHead instead of the teamM array and count
    • The for loop varies a pointer instead of a subscript
    • References pointers to nodes instead of using teamM array subscript references (e.g., p->team.szTeamId instead of teamM[i].szTeamId)
  • Change processTeamCommand:
    • Receives Node **ppHead instead of the teamM array and count
    • Declares local Node * pointers for the result of searchLL and pPrecedes: Node *p; Node *pPrecedes;
    • Uses searchLL to find a Team in the ordered linked list: p = searchLL(*ppHead, team.szTeamId, &pPrecedes);
    • Uses pointer notation to reference a team instead of referencing an element of the teamM array.
    • Add code for the new TEAM NEW subcommand. This should sscanf the data into elements of a Team structure (declared using Team Team). Show a warning if the team already exists. If it doesn't already exist, your code should then pass that team to insertLL.
    • Add code for the new TEAM CONTACT subcommand. This should sscanf the data into elements of a Team structure (declared using Team Team). Show a warning if the team doesn't already exist. Copy individual attributes from the Team structure to the appropriate node's team attributes.
  • Change processGameCommand:
    • Receives Node **ppHead instead of the teamM array and count
    • Invokes processGame passing ppHead instead of the teamM array and count (check the parameter order)
    • Invokes processGameFix passing ppHead instead of the teamM array and count (check the parameter order)
  • Change processGame:
    • Receives Node **ppHead instead of the teamM array and count
    • Declares local variables for pPrecedes, p1, and p2.
    • Uses searchLL to find a Team in the ordered linked list. p1 = searchLL(*ppHead, game.szTeamId1, &pPrecedes); p2 = searchLL(*ppHead, game.szTeamId2, &pPrecedes);
    • Uses pointer notation to update the contents of a node instead of the contents of an array element (e.g., p->team.szTeamId instead of teamM[i]. szTeamId)
  • Change processGameFix:
    • Receives Node **ppHead instead of the teamM array and count
    • Declares local variables for pPrecedes, p1, and p2.
    • Uses searchLL to find a Team in the ordered linked list. p1 = searchLL(*ppHead, game.szTeamId1, &pPrecedes); p2 = searchLL(*ppHead, game.szTeamId2, &pPrecedes);
    • Uses pointer notation to update the contents of a node instead of the contents of an array element (e.g., p->team.iWins instead of teamM[i]. iWins)
  • You must create the following routines (see the include file):
    • insertLL - uses searchLL to search for a Team in the ordered linked list and then inserts it if it wasn't found. Most of this code is in the course notes, but it is passed Team information.
    • searchLL - searches for a Team Id in the ordered linked list. If found, it returns a pointer to the node that contains it. If not found, it returns NULL. It also returns a pointer to the node that precedes it. Most of this code is in the course notes except it is passed a Team Id as its match value and it references p->Team.szTeamId instead of teamM[i].iInfo.

Please review the cs1713p4.h include file.

Sample Output (partial):

Initial Teams
Id Team Name Wins Loss Fee Amt Paid Amt
Contact Name Phone Email
ALHGHT Cake Eaters 4 4 175.00 100.00
E Z Street (210)555-6666 sliverspoon@xyz.com
COM001 Comm Eagles 7 1 150.00 75.00
Mae King (210)555-2222 maeking@xyz.com
NEWB01 River Rats 0 8 120.00 75.00
Rock D Boat (210)555-4444 riverrat@xyz.com
SOUTH1 Slam Dunk 5 3 120.00 75.00
Jerry Tall (210)555-3333 slamdunk@gmail.com
UNKN01 Org New Blk 1 7 150.00 50.00
Bob Wire (210)555-1234 bobwire@xyz.com
UNKN02 Hackers 3 5 150.00 75.00
Tom E Gunn (210)555-5555 cyber@gmail.com
UTSA01 Armadillos 8 0 150.00 80.00
Jean E Us (210)555-1111 utsa@xyz.com
GAME RESULT UTSA01 NEWB01 55 12
GAME RESULT COMM01 SOUTH1 17 15
*** team (COMM01) not found
GAME RESULT SOUTH1 ALHGHT 66 3
GAME RESULT UTSA01 SOUTH1 44 45
GAME RESULT UNKN01 UNKN02 33 39
GAME RESULT COM001 UNKN02 43 37
GAME RESULT ALHGHT UNKN02 20 20
*** game was a tie
GAME RESULT NEWB01 NEWB01 30 20
*** same team
TEAM SHOW UTSA01
UTSA01 Armadillos 9 1 150.00 80.00
Jean E Us (210)555-1111 utsa@xyz.com
TEAM PAID UTSA01 50.00
TEAM SHOW UTSA01
UTSA01 Armadillos 9 1 150.00 130.00
Jean E Us (210)555-1111 utsa@xyz.com
TEAM SHOW UNKN01
UNKN01 Org New Blk 1 8 150.00 50.00
Bob Wire (210)555-1234 bobwire@xyz.com
TEAM PAID UNKN01 30.00
TEAM PAID UNKN01 30.00
TEAM SHOW UNKN01
UNKN01 Org New Blk 1 8 150.00 110.00
Bob Wire (210)555-1234 bobwire@xyz.com
TEAM PAID YYYY01 50.00
*** team (YYYY01) not found
TEAM SHOW YYYY01
*** team (YYYY01) not found
TEAM SHOW NEWB01
NEWB01 River Rats 0 9 120.00 75.00
Rock D Boat (210)555-4444 riverrat@xyz.com
GAME FIX UTSA01 NEWB01 55 12 55 2
TEAM SHOW UTSA01
UTSA01 Armadillos 9 1 150.00 130.00
Jean E Us (210)555-1111 utsa@xyz.com
TEAM SHOW NEWB01
NEWB01 River Rats 0 9 120.00 75.00
Rock D Boat (210)555-4444 riverrat@xyz.com
TEAM SHOW SOUTH1
SOUTH1 Slam Dunk 7 3 120.00 75.00
Jerry Tall (210)555-3333 slamdunk@gmail.com
GAME FIX UTSA01 SOUTH1 44 45 45 44
TEAM SHOW UTSA01
UTSA01 Armadillos 10 0 150.00 130.00
Jean E Us (210)555-1111 utsa@xyz.com
TEAM SHOW SOUTH1
SOUTH1 Slam Dunk 6 4 120.00 75.00
Jerry Tall (210)555-3333 slamdunk@gmail.com
TEAM NEW SSIDE1 1 0 120.00 70.00
TEAM CONTACT SSIDE1,SS 4 Ever,MannyFest@gmail.com,(210)555-8888,Manny Fest
TEAM SHOW SSIDE1
SSIDE1 SS 4 Ever 1 0 120.00 70.00
Manny Fest (210)555-8888 MannyFest@gmail.com
TEAM NEW SOUTH1 0 0 130.00 75.00
*** team (SOUTH1) already exists
Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.