Extra Credit: Tech Support Ticket Tracker


This project is specifically designed to give you practice with linked lists, dynamic memory allocation, and structs.

Problem Description

You've been asked to develop an issue tracking program for a small, start-up tech support company.

Ignore, for this assignment, that you would want to a way to save the information for later retrieval, action, and editing. For now, just create the interface and a way to interact with the information while the program is running.

Input & Output Format

Your program needs to allow the user to choose from a list of possible tasks on a menu:

  1. Create a new tracking ticket
  2. Assign a new ticket to a technician for handling
  3. Mark a ticket complete
  4. Print a list of new tickets
  5. Print a list of assigned tickets
  6. Print a list of completed tickets
  7. Exit the program

You will need to prompt the user for the information required to create a new ticket and to locate existing tickets.

The output will vary depending upon the user's choices, but you should print appropriate confirmations when a ticket is created, assigned, and completed.

If a printout of tickets is requested, format the results so that the user can identify the information that is contained in each tech support ticket (see below for the information required for a support ticket) for EACH ticket in the appropriate list.

Additional Requirements

You should create three lists of structs: one for new tickets, one for assigned tickets, and one for completed tickets.

Each ticket is a struct that contains:

Generally, when you have a list of customer service needs, you want to handle them by completing the first one that was entered. This means that a queue ("first in, first out") is probably the most efficient strategy for managing the list.

Your program should loop until the user enters a "7" to exit the program.

Prompt the user for their choice (1 - 6) and take the appropriate action:

1) To create a new ticket, the program should prompt for all the information required for a ticket, except use "unassigned" for the technician's name. Create a new ticket node and add it to the back of the new tickets queue.

2) To assign a ticket, ask for the technician's name. Your program will need to examine the new ticket queue to see if there are any new tickets. If there are no new tickets to be assigned (the new tickets queue is empty), then report that message back to the user. Otherwise, your program will need to find a ticket to assign. If there are any urgent tickets with urgency level "1", assign the first urgent ticket to the technician by removing the ticket from the new tickets queue and adding it to the assigned tickets queue and changing the technician's name from "unassigned" to the name that was entered. If there are no urgent tickets in the queue, then take the first ticket in the new tickets queue andassign that one. You will also need to change the status of the ticket.

3) To complete a ticket, the program should ask the user which ticket number is complete. It then should examine the tickets in the assigned tickets queue to find the one with the matching number. If it does not find a match, give the user an error message. When it finds a match, change the status and remove it from the assigned tickets queue and add it to the completed tickets queue.

4) through 6) should just print the appropriate queue in order, giving all of the information associated with a ticket in an easy to read form.

7) should exit with a friendly message.


This project is specifically designed to give you practice with linked lists, dynamic memory allocation, and structs. Any program that does not incorporate these components will receive minimal points (see specific grading criteria for details).

This assignment will be worth up to 15 points.