4483 Software Technology 1 and 8995 Software Technology 1 G
{` University of Canberra Faculty of Science and Technology 4483 Software Technology 1 and 8995 Software Technology 1 G Semester 1, 2020 `}
The SpaceW Cubesat planner
Assignment Briefing:
The wonderful company, SpaceW, is a fictional company that makes its money by providing orbital services (aka, blasting rockets into space). They are ramping up spaceflights; to help them they need a planning and costing program that can produce a report on the profitability of CubeSat launches.
For the curious, CubeSats are generally launched as a secondary payload, on launches of larger satellites.
The output of the system is a one online query and two reports. The online query advises how profitable a single CubeSat launch is likely to be and provides a ‘guideline’ price to the customer. The input for this option is to come from the keyboard and the program must not crash, no matter what rubbish is typed in. Obviously incorrect inputs should generate sensible error messages.
The reports are summaries of all the CubeSat launches for a given month or launch. The input for this option is to come from an input file (comma separated) with one line per CubeSat. For the loading report, the file may contain more than one launch. This file may have trailing blank lines.
The reports are:
- Profit report – effectively the same information as the online query summed up for a month;
- Loading report for a given launch to help engineers position the CubeSats for launch. (For a bonus point or two you can enhance this option). ?????????????? (The HD level option worth only 4 marks and very optional)
Space vehicles can be launched into many standard orbits, but SpaceW limits CubeSats to: LEO (low earth orbit equatorial) and LEOP (low earth orbit polar).
You program needs to do the following (also see marking rubric below):
- Show a small menu with 5 options (console input)
- Online pricing Query;
- Profit report;
- Loading report; and
- Exit
- The loading report is focused on producing a loading guide and determining spare capacity (which can still be sold) or detecting overselling for a given launch. It’s optional and worth only a few marks – see marking guide.
- The two report options process a file. The file is the monthly orders file for a given company. Several of these input files will be provided for testing and mandatory testing. (See format below.)
Monthly-Orders format (input file) comma separated
Field Number |
Name |
Contents |
1 |
Date |
The date of the order in format dd/mm/yy |
2 |
Launch ID |
The launch ID; a 10-character code unique to each launch |
3 |
Client |
The client Id (a string of up to 10 characters) |
4 |
Orbit |
LEO or LEOP |
5 |
Service |
ORBC1U, ORBC2U, ORBC3U, ORBC6U |
6 |
Customer Discount |
As a percentage (i.e. 1.3 is 1.3%) (This is negotiated by the salesperson and can be any value within the range 0 to 25, but the sales manager can discount up to 30% for ‘community’, and loyalty reasons) |
7 |
Satellite ID |
A string of up to 20 characters |
To keep it simple no launches are ever done on leap days (29 Feb) and it is not necessary to check that it’s a valid date To make your life a bit easier you can assume the date format in the file to be dd/mm/yy so you may get 01/07/19 but you won’t get 1/7/19. Which makes sorting and editing a bit easier.
Below is the test file Oct2021.txt (which I supply for your testing)
19/10/21,HAWK21018,ESAA,LEO,ORBC2U,20,WEATHER014
19/10/21,HAWK21018, NASHA,LEO,ORBC1U,21.5,TESTGRAV
Below is the test file Nov2023.txt (which I supply for your testing)
03/11/23,HAWK23028,ESAA,LEO,ORBC2U,22.1,MOONZERO2
03/11/23,HAWK23028,NASHA,LEO,ORBC6U,21.5,MINITELESCOPE
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC3U,30,PrimaryCharity
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES01
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES02
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES03
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES04
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES05
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES06
03/11/23,HAWK23028,BINCPRIVAT,LEO,ORBC1U,6.12,ASHES07
03/11/23,HAWK23028,TICK,LEO,ORBC2U,7,TICK2UA321D
03/11/23,HAWK23028,TICK,LEO,ORBC6U,7,TICK27
19/11/23,HAWK23029,ESAA,LEOP,ORBC2U,20,WEATHER019A
19/11/23,HAWK23029,NASHA,LEOP,ORBC1U,21.5,TICKLLE
19/11/23,HAWK23029,MARZ,LEOP,ORBC6U,26.0,MARSEXP1
19/11/23,HAWK23029,MARZ,LEOP,ORBC6U,26.0,MARSEXP2
NOTE: for simplicity’s sake there will never be more than 99 lines in the file.
I also provide an error file example Oct2021err.txt
SpaceW Launch services
Service Code |
Description |
Cost$ US LEO |
Cost$ US LEOP |
Price US LEO |
Price US LEOP |
ORBC1U |
One micro satellite 10x10x10cm (size 1) |
365,000 |
379,000 |
500,000 |
600,000 |
ORBC2U |
One micro satellite 10x10x20cm (size 2) |
693,000 |
758,000 |
950,000 |
1,100,000 |
ORBC3U |
One micro satellite 10x10x30cm (size 3) |
1,015,000 |
1,097,000 |
1,400,000 |
1,550,000 |
ORBC6U |
One micro satellite 10x20x30cm (size 6) |
1,403,000 |
1,653,000 |
2,300,000 |
2,400,000 |
All Cubesats ride share with another payload in a similar orbit.
They are launched by the CS-dispenser (see below) which presents the interesting HD level challenge for this assignment.
Customers table (you only need the code)
Code |
Name |
Contact name |
Address |
ESAA |
Europe Systems Alternative Agency |
Jean-Claude Junxer |
23 Razor Road Belconnen ACT 2617 |
NASHA |
National Air Space Hash Agency |
Jimmy Briden |
2 Mashup Drive Bruce ACT 2617 |
ASA |
Aussie Space Agency |
Megan Clock |
Flat 31/a, Bax Units Stix St, Marble Bar, WA 6760 |
TICK |
Tick Incorporated |
Mark Watson |
87 Race Drive Bathurst, NSW 2795 |
BINCPRIVAT |
Byer Private Space Incorporated |
Marilyn Hewson |
212 Webly Drive, Canowindra, NSW 2804 |
CODC |
Corporate Space Trust |
Zhang Chen |
212 Scorch Drive, Beltana, SA 5730 |
MARZ |
The Mars Gen Inc |
Cool Dude |
26 O’Conner’s Road, Werribee South, VIC 3030 |
MANDATORY TESTING:
Most importantly your program must work and be tested, you need to provide a test plan and show how you tested the program including evidence of testing.
You may want to create additional test files; if so let us know (by providing evidence in your submission) so we can give you marks for them (providing they are sane, ie relevant and reasonable).
Some tests test error handling.
YOU MUST Run (providing evidence that you have executed the run) the following mandatory tests:
Test Id |
File |
Menu Option |
Notes |
MAND TEST1 |
NONE |
online query |
CODC, LEOP launch of CubeSat ORBC3U, with an 11% discount |
MAND TEST2 |
NONE |
online query |
Error handling (see note below) |
MAND TEST3 |
MAND1.txt |
Profit Report | |
MAND TEST4 |
MAND4.txt |
Profit Report |
Error handling |
MAND TEST5 |
MAND2.txt |
Profit Report | |
MAND TEST6a |
MAND3.txt |
Loading Report |
For launch HAWK2025X |
MAND TEST6b |
MAND1.txt |
Loading Report |
For launch HAWK23029 |
You must write, run & provide evidence you have run, MAND TEST2; its purpose is to test the online query, specifically that it can detect bad input without crashing. (Worth 2 marks).
Calculations:
I kept these deliberately simple, most of the assignment is editing and checking input and only the loading report has significant data processing (not calculations, but allocations – still data processing).
Example Calculation 1:
ORBC1U to LEO with 5% discount for Esaa
Cost 365,000
Price 500,000
500,000 * 5% = 25,000
So quote is 500,000 – 25,000 = 475,000
Profit is 475,000-365,000 = 110,000
Example Calculation 2:
The file
19/10/21, HAWK21018, ESAA, ORBC2U, 20, WEATHER014
19/10/21, HAWK21018, NASHA, ORBC1U, 21.5, TESTGRAV
Cost Satellite WEATHER014 is 693,000
Cost Satellite TESTGRAV 365,000
Price Satellite WEATHER014 950,000
Price Satellite TESTGRAV 500,000
Discount Satellite WEATHER014 20%
Discount Satellite TESTGRAV 21.5%
WEATHER014
950,000*.20 = 190,000
Quote= 950,000 – 190,000 = 760,000
Profit = 67,000 (760,000-693,000)
TESTGRAV
500,000 * 21.5% = 107,500
So quote is 500,000 – 107,500 = 392,500
Profit is 475,000-365,000 = 27,500
Total profit for file is: 94,500
Total Revenue for file is: 1,152,500
Example Calculation 3
Example Calculation 3 (for one launch code):
Allocate satellites c1a, c1b, c1c (all size 1 CubeSats)
Allocate satellites c2a, c2b (all size 2 CubeSats)
Allocate satellites c3b, c3c, (all size 3 CubeSats)
Allocate satellites c6b, c6c, (all size 6 CubeSats)
First allocate the size 6 sats to tube 2
Tube1 | |
Tube2 |
c6b, c6c |
Tube3 |
Then allocate the size 3 sats to tubes 1,3
Tube1 |
c3b, c3c |
Tube2 |
c6b, c6c |
Tube3 |
Then allocate the size 2 sats to tubes 1,3
Tube1 |
c3b, c3c, c2a |
Tube2 |
c6b, c6c |
Tube3 |
c2b |
Finally allocate the size 1 sats to tube 1,3
Tube |
Satelites |
Total |
Tube1 |
c3b, c3c, c2a, c1a |
3+3+2+1 = 9 |
Tube2 |
c6b, c6c |
6+6=12 |
Tube3 |
c2b, c1a, c1b, c1c |
2+1+1+1 = 5 Tube can hold 6 so spare space is 6-5 = 1 |
Spare space (1/2/3) = 1U
Spare space must be represented as two numbers; one is the spare 6U number and the other the spare 1/2/3U number.
ADDITIONAL INFORMATION:
The system works in dollars and cents; values should be rounded to the nearest cent.
All non-numeric values must be input edited so incorrect codes cannot be entered.
All input numeric fields must be range edited, and errors handled. For this assignment the input of non-numeric data into numeric fields will be tested. This also includes data read from the input files
The system must also loop – to do more than one menu option in a single run, you don’t need an exit option on every input – but you must have a way to cleanly leave the system, with a message “** Program ending **” or something similar.
Where required, your program should ask for the name of the input file (e.g. “Oct2021.txt”), be able to locate it and read it into your program.
THE CS-DISPENSER DETAILS
The CS-dispenser Comprises 3 tubes to load with satellites and push them out. Tube capacity is summarised in the following table.
Tube Number |
Kind of satellites |
Maximum loading size |
1 |
ORBC1U, ORBC2U, ORBC3U |
9 |
2 |
ORBC6U |
12 |
3 |
ORBC1U, ORBC2U, ORBC3U |
6 |
This means that tube 2 can take 1 or 2 size 6 CubeSats
Tube 1 can take any combination of CubeSats of the types shown where size totals less than or equal to 9
Tube 3 can take any combination of CubeSats of the types shown where size totals less than or equal to 6
For example: tube 1 could take 2xORBC3U plus 1x ORBC2U plus 1x ORBC1U; or
tube 1 could take 1xORBC3U plus 2x ORBC2U plus 2x ORBC1U
Obviously, you need to load the smallest payloads last while you can do it without using arrays; arrays clearly help. To not use arrays, you need to process the file more than once.
Getting started:
- Read the assignment several times over to get a feel for the assignment, it’s mainly string and error handling with relatively little math.
- Start with the menu program. Create the basic four option menu where each option just prints a line that says – option … selected. When I did this, I wrote a separate method for each option which helps keep code manageable (it’s not necessary to do this).
- Check that Exit works and that the menu loops. If you can’t get this far talk to your tutor or go to PALS to get help.
- Now create a good test plan (this is worth up to 7 marks – easy marks in my opinion), you should create some new test case files, ensure you create and document MAND TEST 2.
- Because you did Assignmnet1, you will note that the option “on line query” is very close to Assignment1 in its general nature – so do it first, test and document the first Mandatory test.
- Next do the Profit Report. This not much more that a read and print file loop with the calculations from the previous step, so it should pose little problem to code. Do related mandatory tests and document them.
- If you are really “%&$#?@!” for time then do a reflection report, make sure you have a good test plan (with extra documented test cases), zip up and send it in and pray that it all works cause you have no spare marks, but you could pass the assignment. (I don’t recommend this but stuff happens).
- Ok so you want a better chance of a pass, then do the Loading Report (it is really optional) but gets you the last few marks.
- The assignment is done, don’t screw it up now! Write a reflection report making sure you have a good, well documented test plan (with extra documented test cases), zip up and send it in. If you did it well, you should get 25 out of 25.
HINTS: and help
HINT1: To document a test case: take a screen shot (I use alt print screen, then paste in windows).
HINT2: If you don’t want to use arrays, the sorted Loading Report is going to be challenging. You will need to code multiple file passes.
HINT5: here are three code fragments to help with date editing. The odds and ends slides and lecture will help here as well.
{`SimpleDateFormat df;
…………………..
Date ddd=new Date();
boolean ok=true;
try
{
ddd = df.parse(ss[0]); // date
}
catch (ParseException e)
{
System.out.println("File input error>> Date Parse Failed");
ok=false;
}
……………………………..
if (ok)
{
launchDate=ss[0];
lDate=ddd;
}
else
{
launchDate="";
lDate=new Date(0);
return;
}
`}
Marking Guideline – this is slightly different from the rubric - markers will use it, it’s a guideline only
(Marked out of 27, but marks above 25 are truncated to 25 marks)
Marks |
Feature |
5 |
Good test plan and evidence of testing Test plan should include: · tests from the assignment · mandatory tests · additional tests created by the student · the results of running the tests A program must be supplied but it does not have to work particularly well to get these marks. |
2 |
Good Mand 2 test. A program must be supplied but it does not have to work particularly well to get these marks. |
3 to 4 |
Your program code, accuracy, functionality and formatting If the program wont compile or run you get 0 here |
1 |
You used arrays – more than in string split |
4 plus 2 Possible safety net points |
A menu option to do the loading Report |
3 |
Reflection Report - (half a page to one page in length, an honest appraisal of how you did the assignment, what you learned and what you would do different if you had to do it again) |
6 |
Results of 6 mandatory tests 1 for each correct and documented test |
-1 to -25 |
Fails additional tests not provided to students but run by marker. This is mainly to catch cases where the students submitted testing evidence which is not produced by the program submitted; or there is reason to believe the program is significantly faulty in some way not found by student testing. |
-1 to -25 |
The program is not supplied as a .zip file. This penalty is applied if the submission is a .tar .gz .7z .rar .arc … or other non-zip format. (-30 is assuming we can’t un-archive it) |
-1 to -3 |
Program has non-fatal significant bug |
Maximum of 12marks for assignment |
Program fatally crashes or won’t compile or is basically not working |
Minimum of 13 marks for assignment |
Program basically works and is acceptably documented with an ok test plan. |
-1 to -25 |
Program is not a BlueJ project. My tutors are not responsible for converting your project from (insert your IDE here) to BlueJ. |
Late submission |
5% per day up to 1 week late then a mark of 0 Watch the Canvas site for late class wide extensions that may be given NOTE: The Canvas site will be open for about an extra 2 week to catch very late submissions for students on a RAP or who have medical certificates |