Skip to content

Instantly share code, notes, and snippets.

@AdamSheaffer
Last active February 21, 2020 18:51
Show Gist options
  • Save AdamSheaffer/da672ed49abde9c52652497d7e636e81 to your computer and use it in GitHub Desktop.
Save AdamSheaffer/da672ed49abde9c52652497d7e636e81 to your computer and use it in GitHub Desktop.

You've written a script and are producing an independant film about software engineers. It's going to quickly become an expensive venture so it'd be good idea to start managing your budget now. And since the movie is about hackers, it's probably best that your budgeting tool be run from the terminal.

Most of the little things in the budget have already been handled. The only things that'll you'll have to manage are the cast, crew, and locations. You'll start with an existing codebase, and some of the cast and crew that have already signed on have already come preloaded into the program. Any additional ones will have to be entered by the users of the budgeting tool. The inital budget stands at $1M, but if you're running low on funding, you can bring on additional executive producers who are willing to financially contribute to the project.

Tickets

  • When app starts, the following information should be displayed:

    • [Name of the movie]
    • Starring: [top 2 paid cast members]
    • Produced by: [List of producers]
  • When the app starts the user should see a list of numbered items in a main menu with the following options:

    1. Manage Cast
    2. Manage Crew
    3. Manage Locations
    4. Schedule
    5. Add Producer
    6. Expense Report
  • When the user selects Add Producer, they should be prompted to add the producer's name along with their financial contribution to the film. Their contribution should be added to the total budget and they should then be added to the movie's list of producers. The user should then return to the main menu

  • When the user selects the Manage Cast option, they should be presented with another menu with the following options:

    1. Show Cast
    2. Hire an Actor/Actress
    3. Fire an Actor/Actress
    4. Search by Name
    5. Go Back

    When the user selets Go Back, they should be taken back to the main menu.

  • When the user selects Manage Cast from the main menu and then selects Show Cast, the user should see a list of all cast members in the movie, ordered descending by their pay. The user should then be prompted to hit Enter to return back to the main menu

  • When the user selects Manage Cast from the main menu and then selects Hire an Actor/Actress, the user should be prompted to enter in their name followed by their pay. The actor/actress should then be added to the list of all cast members, the user should be taken back to the main menu and shown a success message.

  • When added an actor/actress to the cast and the budget cannot accomodate their pay, the cast member should not get added to the cast list and the user should be taken back to the main menu with an error message explaining that the project does not have enough funds.

  • When the user selects Manage Cast from the main menu and then selects Fire an Actor/Actress, they should be shown a numbered list of all cast members, along with an option to Go Back which takes them back to the main menu. If the user chooses the number of an actor or actress, they should be removed from the cast list and the user should be taken back to the main menu.

  • When the user selects Manage Cast from the main menu and then selects Search by Name, they should be prompted to type in the name of a cast member. They should then be shown a list of cast members with names and pay whose name matches the user's search. The search should not be case sensitive. The user should then be prompted to hit any key to be taken back to the main menu.

  • When the user selects Manage Cast from the main menu and then selects Show Cast, the resulting list should be paginated with 5 records per page. The user should be able to hit the up and down arrow keys to page through the results. Hitting Enter should return to the main menu.

  • When the user selects Expense Report, the following information should be displayed:

    1. Total budget
    2. Total cost of cast
    3. Total cost of crew
    4. Amount remaining

    The user should then be prompted to hit any key to return to the main menu.

  • When the user selects Manage Crew from the main menu, they should be presented with another menu with the following items:

    1. Show Crew
    2. Hire Crew Member
    3. Fire Crew Member
    4. Go Back

    When the user selects the Go Back option, they should be taken back to the main menu.

  • When the user selects the Manage Crew option from the main menu and then selects Show Crew, they should be shown a list of all crew members, ordered descending by pay, and includes their name, job title, and pay. The user should then be prompted to hit Enter to return to the main menu.

  • When the user selects the Manage Crew option from the main menu and then selects Hire a Crew Member, the user should be prompted to enter the crew member's name, title, and pay. The crew member should then be added to the movie's crew list.

  • When the user attempts to add a crew member whose pay cannot be accomodated by the budget, they should not be added to the list of crew members. Instead the user should be returned to the main menu and be shown an error message

  • When the user selects the Manage Crew option from the main menu and then selects Fire a Crew Member, they should be shown a numbered list of all crew members, along with an option to Go Back which takes them back to the main menu. If the user chooses the number of a crew member, they should be removed from the crew and the user should be taken back to the main menu.

  • When the user selects Manage Crew from the main menu and then selects Show Crew, the resulting list should be paginated with 5 records per page. The user should be able to hit the up and down arrow keys to page through the results. Hitting Enter should return to the main menu.

  • When the user selects Manage Locations from the main menu, they should be shown another menu with the following options:

    1. Show Locations
    2. Add a Location
    3. Go Back

    When the user selects the Go Back option, they should be taken back to the main menu.

  • When the user selects Manage Locations from the main menu and then selects Show Locations, they should be shown a list of all filming locations. The user should then be prompted to hit Enter to return to the main menu.

  • When the user selects Manage Locations from the main menu and then selects Add a Location, they should be prompted to enter the name of the location along with the cost of shooting there for one day. The location should then be added to the movie's list of shooting locations. NOTE: The cost of locations does not get added to budget until it gets added to a schedule (later story)

  • When the user selects Schedule from the main menu, they should be shown another menu with the following options:

    1. Show Schedule
    2. Add Shoot
    3. Go Back

    When the user selects the Go Back option, they should be taken back to the main menu.

  • When the user selects Schedule from the main menu and then Add Shoot, they should be presented with a numbered list of all shooting locations. The user can then select a location for the shoot. They should then be prompted to enter a start date and end date for shooting in that location.

  • When the user adds a scheduling item and the resulting cost of that location (daily cost * number of days) is more than the budget can accomodate, the user should be shown an error message and be taken back to the main menu.

  • When the user selects Expense Report from the main menu, the report should also include the total cost of shooting locations

  • When the user is adding a schedule item, after entering the start and end dates, they should be prompted to add cast members to the shoot and presented with a numbered list of all actors/actresses. The user should be able to add multiple cast members. Once the user hits Enter without choosing a menu item, the shoot should be added to the schedule and the user should be taken back to the main menu.

  • When the user selects Manage Cast from the main menu and then Search by Name, the results from their search should also include the cast members' schedule.

@AdamSheaffer
Copy link
Author

Should firing some affect the bedget?

Yes I assumed that to be implied but we can make it explicit.

I think the last bullet point in the doc (about searching for cast member) is already covered in a previous bullet point.

This ticket would be for the addition of schedules in the result set

Did you intend to skip delete for locations and shoots?

Yes and no. There are a lot of tickets already and I thought I was already on the verge of too many. "Delete" seemed to be covered and it didn't seem worth adding another ticket for a concept that's already been done. I don't feel strongly about this though and am up for adding it in.

The only edit operation seems to be for the budget. Is that correct?

Correct, although I'm up for suggestions

What are the specific topics you want this exercise to cover?

Same as Trestlebridge--Classes, lists, linq, interfaces, (possibly inheritance), and generics. Although if we were to entertain the restructuring I pitched you the other day, the first project might only have classes, lists, linq, and inheritance. I don't know if that's worth a consideration for this though

How do you see generics being used in this app?

I'm up for suggestions, but the pagination tickets were put in with that in mind. I was thinking about a paging class going in the boilerplate.

How would you expect a 4-5 person team to divide up the work?

I would expect by the main menu items--cast, crew, locations, schedule, producer/budget. Some of those might be more challenging than others, so at a certain point they might want to pair up.

Do you anticipate any data persistence?

Do you have any suggestions? I would love that, but I can't think to anything to add that we can "black box" from students that would also continue to work throughout changes to their models (I'm only assuming they'll make changes to the model).

Have you built this app yet?

Working on that today

Have you build the initial boilerplate code yet?

No. I'm hoping to have a better idea of what should go in it after I start working on it myself. As it stands, I have no idea.

@askingalot
Copy link

I think we should stick with generics in this project for 37 because I don't think we can change the curriculum in time.

I'm not sure I can imagine how the pagination/generics will work. I'd like to see it.

What are the specific topics you want this exercise to cover?

Same as Trestlebridge--Classes, lists, linq, interfaces, (possibly inheritance), and generics. Although if we were to entertain the restructuring I pitched you the other day, the first project might only have classes, lists, linq, and inheritance. I don't know if that's worth a consideration for this though

How would you expect a 4-5 person team to divide up the work?

I would expect by the main menu items--cast, crew, locations, schedule, producer/budget. Some of those might be more challenging than others, so at a certain point they might want to pair up.

I'm also having a hard time imagining how each portion of the project will cover each learning objective. Particularly generics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment