首页
编程语言
数据库
网络开发
Algorithm算法
移动开发
系统相关
金融统计
人工智能
其他
首页
>
> 详细
解析ITECH1400、Python语言讲解、Python设计辅导、Python语言程序辅导留学生 解析Java程序|讲解留学生Prolog
ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 1 of 10
ITECH1400 - Assignment 2 – FedUni Banking
Due Date: 5pm, Friday of Week 11
This assignment will test your skills in designing and programming applications to specification and is worth
20% of your non-invigilated (type A) marks for this course. This is an INDIVIDUAL ASSIGNMENT – and while
you may discuss it with your fellow students, you must not share designs or code or you will be in breach of
the university plagiarism rules. This assignment should take you approximately 20 hours to complete.
Assignment Overview
You are tasked with creating an application that uses a GUI that simulates a simple banking interface similar to
an ATM / online banking using the Python 3 programming language.
The assignment is broken up into five main components:
1.) The ability to provide an account id and a PIN (Personal
Identification Number) to sign into a bank account,
2.) The ability to view the balance of the bank account and
to deposit and withdraw virtual money into and out
from the account,
3.) The ability to save transactions via file storage so that
you can log in, deposit some money and then log out –
and when you log back in that money is still there, and
finally
4.) The ability to display a graph of projected earnings on
the bank account via the compound interest accrued
over a variable amount of time.
5.) A Test Case that ensures your BankAccount's deposit
and withdraw functionality operates correctly.
Your submission should consist of three Python scripts that implement this application as described in the
following pages: bankaccount.py, main.py along with a testbankaccount.py which contains a small test case
with a few simple unit tests than ensure that your bank accounts deposit and withdraw methods operate
correctly.
You are provided with a 'stub' of each of these files which contain all the function declarations and comments
which describe the role of the function and how it can be put together, but you will have to write the code for
vast majority of the functions yourself. You are also provided with a stub of the bankaccounttestcase.py file.
Your final submission should be a zipped archive (i.e. ‘zip file’) containing your completed Python scripts.
There is no word processed component to this second assignment.ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 2 of 10
Bank Account Class Design
The design for a BankAccount object is laid out in the following class diagram:
As you might imagine, the deposit(amount) function adds that money to the current balance of the account,
and the withdraw(amount) function removes (i.e. subtracts) money from the current balance of the account.
Each transaction in the transaction_list is a tuple containing either the word Deposit or the word Withdrawal
followed by an amount, for example: ("Deposit", 300.0) or ("Withdrawal", 100.0).
The bank accounts in our program do not have an overdraft facility so the user cannot withdraw money they
do not have – that is, if they had $200 in their account and they tried to withdraw more than $200 then the
operation should fail and the withdraw function should raise an Exception with a suitable error message which
is caught and displayed in the main.py file where the operation was attempted.
All error messages such as those from exceptions should be displayed in a pop-up messagebox.
The get_transaction_string method should loop over all the transactions in the transaction_list creating a string
version (with newline characters) of all the transactions associated with the account.
The export_to_file function should save the account_id, pin_number, balance, and interest_rate in that order
to a file called
.txt followed by the transaction list string generated from the
get_transaction_string() method. The name of the account file is NOT '
.txt' - the name of the file
is the ACTUAL ACCOUNT ID followed by ".txt", so for an account with account_id 123456 the name of the
account file would be 123456.txt.
A full ‘walk-through’ video demonstrating the completed application and how it operates will be provided along
with this assignment document.
BankAccount
account_id: int
pin_number: string
balance: float
interest_rate: float
transaction_list: list of two-tuples
deposit(amount)
withdraw(amount)
get_transaction_string()
export_to_file()ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 3 of 10
Calculating Interest
To make it worthwhile for you to keep your money with a bank, the bank offers you an interest rate on your
savings. Interest will be applied to the balance of an account once per month.
Let’s do an example – suppose you had $10,000 in a bank account and the bank paid you monthly interest at a
rate of 3% per year. That would mean the bank pays you 3% of your balance divided by 12 (because there are
12 months in a year) per month. If we start our example on January and run it for a few months (and we don’t
deposit or withdraw any money throughout the year) then we end up with our bank balance changing like this:
Note: 3% divided by 12 is 0.25% per month – so we’ll multiply our balance by 1.0025 to get the new balance.
Jan Feb Mar Apr May Jun Jul Aug Etc.
10,000.00 10,025.00 10,050.06 10,075.19 10,100.38 10,125.63 10,150.94 10,176.32 …
What’s happening here is that the interest is compounding – which just means that we get that 0.25% applied
not only to our principle balance (i.e. the $10,000 we started with), but it also gets applied to the interest we
earnt. Although 3% interest is very low (but in line with the best rates you’d get in Australia at the moment
because interest rates are very low), over time this compounding makes a serious difference!
Because FedUni Bank is the greatest bank of all time, it offers all accounts an interest rate of 33%.
The Main Python Script
Our main.py script will contain all the main logic for our program. It will allow us to:
- Enter an account id via an Entry field by using the keyboard,
- Enter a PIN number via an Entry widget (we can use the keyboard OR a series of buttons to enter the
PIN),
- Once we are logged in we must be able to:
o See the balance of our account,
o Deposit funds into our account,
o Withdraw funds from our account (only up to the amount we have available),
o Display a plot of our projected interest over the next 12 months as outlined above, and finally
o Log out of our account.
Every time a successful deposit or withdrawal is made then a new transaction should be added to the account's
transaction list. When we log out then the account file is overwritten with the new account details including
our new balance and any transactions if any have been made.
The format of the account text file is as follows (each value on separate lines):
account_id
account_pin
balance
interest_rateITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 4 of 10
For example, account id 123456 with PIN 7890 and a balance of $800 with an interest rate of 33% would look
like this:
123456
7890
800.00
0.33
After these first four lines we may have a number of transactions, each of which is specified as two lines. A
deposit is indicated by the word Deposit on one line and then the amount on the next like. For example a
deposit of $500 would look like this:
Deposit
500.00
Similarly, a withdrawal is also specified as two lines – first the word Withdrawal and then on the next line the
amount, for example a withdrawal of $200 would look like this:
Withdrawal
200.00
You are provided with an example bank account file called 12345678.txt – this file along with others will be
used to mark your assessment, so you should make sure that your final submission can use bank accounts in
this format successfully.
You are also provided with a video demonstration of the completed assignment along with this document. Your
application should match this user interface and function in the same way.
Login Screen
When the application is first launched, it should open a window that is "440x640" pixels in size (use the window
object’s geometry function to set this). Set the title of the window to "FedUni Banking" using the top-level
window object's winfo_toplevel().title() function.
The window uses the GridManager layout manager for placing GUI elements (e.g. 'widgets'), it contains a Label
that spans the top of the window saying "FedUni Banking" (font size is 32). On the next line is a label saying
"Account id" and then an Entry widget for the user to type in their account id and an Entry for the PIN number.
It then has a series of buttons from 0 through 9, along with a Log In button and a Clear/Cancel button.
Each time a number is pressed it is added to a string - for example, if the user pushed the 4 button then the 3
button then the 2 button and then the 1 button then the string should contain the text "4321". By using the
show="*" attribute you can 'mask' the input so that anyone looking over your shoulder cannot see the exact
pin number, they'll just see "****" instead. When the Clear/Cancel button is pressed, or when a user "logs out"
then this PIN string should be reset to an empty string.
When the Log In button is pressed then the program should attempt to open the file with the account id
followed by ".txt" - so in the example below, because the account id entered was "123456", the program will
attempt to open the file "123456.txt".ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 5 of 10
If that file could not be opened then a messagebox should display a suitable error message such as "Invalid
account id - please try again!". You will have to "try/catch" this risky functionality to avoid the program crashing
- see the week 7 lecture materials if you need a recap.
If the account exists, then a BankAccount object should be created and the fields of the BankAccount object
should be set (e.g. account_id, pin_number, balance, interest_rate, and the transaction_list).
Because you don't know how many transactions are stored for this bank account, after reading the first four
lines you will need to attempt to read two lines and if they exist create a tuple of the transaction (i.e. it's type
and amount) and then add it to the BankAccount object's transaction_list - for example you may do the
following in a loop:
# Try to read a line, break if we've hit the end of the file
line = read_line_from_account_file()
if not line:
break
else:
# read another line, create a tuple from both lines and append the
# tuple to the the BankAccount object's transaction_listITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 6 of 10
Account Screen
The account screen has:
- A large "FedUni Banking" label at the top that spans 5 columns (font size is 24),
- A label with the account id followed by the actual account id displayed,
- A label with the current balance followed by the actual balance,
- A log out button which saves the bank account file (overwriting it) and causes all widgets to be
removed from the screen and the log in screen displayed again,
- An "Amount" label followed by an amount Entry widget where you can type in how much to deposit or
withdraw,
- Deposit and Withdraw buttons that deposit or withdraw funds using the BankAccount classes methods
to do so,
- A Text widget (i.e. multi-line text) that shows all the transactions associated with the account. The
height of this widget is 10 lines and the width of the widget is 48 characters.
- To the right of the Text widget this is a scrollbar which can be used to scroll the Text widget (it is not
really showing in the above screenshot because the Text widget does not have more than 10 lines
worth of content), and finally
- A small graph of the projected cumulative interest over the next 12 months.ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 7 of 10
Bank Account Test Case
The final thing to do is to add a small test case consisting of five unit tests that ensure that the BankAccount
class' deposit and withdraw methods operate correctly.
You are provided with a stub of a testbankaccount.py test case that already has the definitions of the five unit
tests that you will write and a description of what they are testing. Your job is to write suitable assert statements
into each of these unit tests so that they ensure the BankAccount classs' deposit and withdraw functions do
operate as they should. You should be able to accomplish each unit test in a maximum of two lines of code per
unit test.
Two things to remember:
1.) The setUp method is automatically executed before each unit test, so the balance gets reset to 1000.0
before each test, and
2.) If your unit test fails (and the test is correct) then you should modify your code so that it passes the
test, not the test so that it matches up with what your code is doing!
Development and Marking Tips
You will need to bind all the numerical log in buttons to the
event and the same function, and
then extract which button was pressed to help 'build up' the PIN number text. To extract which widget
triggered the function use event.widget["text"].
You are provided with the complete function to remove all widgets from the top level window, the function to
read a line from the account file which does NOT include the final "\n" newline character and most of the
code to generate a graph and place it in your window - so you do not have to write these yourself.
The grid for the login screen has 3 columns and 6 rows, while the grid for the account screen has 5 columns
and 5 rows. The fifth column on the account screen is the one holding the scrollbar.
Once you have your login screen working, it makes sense to set the account id variable and PIN number
variables to '123456' and '7890' respectively so that they are already filled in when you launch the app and
you can immediately click the "Log In" button to move to the account screen. Without this you will have to
enter these values each time you run the program, which will be a nuisance.
When you are writing your code to save the bank account object to file be aware that if the function fails
before closing the file then the file will now be blank (i.e. it will not contain any bank account details). As such,
it's probably best to keep a copy of the file close by so you can replace it if necessary.
The way this assignment is marked is a little different from assignment 1 where you could get marks for effort
- that is, if something didn't quite work as it should you would still get marks. This was because you were
designing the code and its logical flow. In this assignment you are given a precise specification of how the
application should work, and the marking guide is more along the lines of "did you implement this feature as
specified?, did you implement that feature as specified?".ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 8 of 10
The answer to these questions is largely a simple yes or no - if you did, you get the mark - and if you didn't
then you don't get the mark. If your code doesn't run at all (i.e. it produces an error on startup) then it means
your code cannot possibly implement the functionality, and your marks will be severely affected. Nobody
wants this - so even if you do not implement the entire suite of functionality, please make sure that your code
at least runs!
As a final reminder, please do not add functionality that is not described in this document. Rather than
being rewarded with extra marks you will be penalised for not matching the project specification - so please
stay on spec!
Submission and Marking Process
You must supply your program source code files as a single compressed archive called:
ITECH1400_Assignment_2_
_
.zip
Obviously replace
and
Assignments will be marked on the basis of fulfilment of the requirements and the quality of the work. In
addition to the marking criteria, marks may be deducted for failure to comply with the assignment
requirements, including (but not limited to):
? Incomplete implementation,
? Incomplete submissions (e.g. missing files), and
? Poor spelling and grammar.
Submit your assignment to the Assignment 2 Upload location on Moodle before the deadline of Friday of week
11 at 5pm.
The mark distribution for this assignment is explained on the next page – please look at it carefully and compare
your submission to the marking guide.ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 9 of 10
Assignment 2 – FedUni Banking
Student name: Student ID:
Item Assessment Criteria Weight Mark
1 Window is correct size of 440x640 with title of "FedUni Banking" 1
2 "FedUni Banking" label is displayed in large font across top of login screen 1
3 Account id / PIN label exists near top left of login screen 1
4 Clicking PIN entry buttons result in adding that number to pin entry 1
5 All PIN number input is masked to be asterisks (i.e. **** not 7890) 1
6 Incorrect account id results in suitable error message box 1
7 Incorrect pin results in suitable error message box 1
8 Cancel / Clear button clears PIN entry only 1
9 Login button with valid account id and PIN logs in to account screen 1
10 "FedUni Banking" label is displayed across top of account screen 1
11 Account id is displayed on account number label 1
12 Account balance is displayed on account balance label 1
13 Log out button exists and returns user to login screen 1
14 Log out button saves account details to account file with any changes made 1
15 Amount label exists 1
16 Amount entry exists 1
17 Deposit button exists 1
18 Withdraw button exists 1
19 Clicking Deposit with legal value in amount entry adds to balance and add a
suitable account transaction
2
20 Clicking Deposit with illegal value results in suitable error message box 1
21 Clicking Withdraw with legal value in amount entry subtracts from balance
and adds a suitable account transaction
2
22 Clicking Withdraw with illegal value results in suitable error message box 1
23 Clicking Withdraw with insufficient funds results in suitable error message box 1ITECH1400 – Foundations of Programming
School of Science, Engineering and Information Technology
CRICOS Provider No. 00103D Page 10 of 10
24 Multiline Text widget showing account transactions exists 1
25 Any new valid transaction made is displayed in the multiline Text widget 1
26 Multiline Text widget has a scrollbar which can scroll the text 1
27 Graph of interest exists and is correct for current balance showing next 12
months cumulative interest at bank account rate of 33% per annum
2
28 Graph of interest is updated when balance changes 1
29 BankAccount unit tests correctly test deposit / withdraw functionality 5
Assignment total (out of 36 marks)
Contribution to grade (out of 20 marks)
Comments:
联系我们
QQ:99515681
邮箱:99515681@qq.com
工作时间:8:00-21:00
微信:codinghelp
热点文章
更多
辅导 comm2000 creating socia...
2026-01-08
讲解 isen1000 – introductio...
2026-01-08
讲解 cme213 radix sort讲解 c...
2026-01-08
辅导 csc370 database讲解 迭代
2026-01-08
讲解 ca2401 a list of colleg...
2026-01-08
讲解 nfe2140 midi scale play...
2026-01-08
讲解 ca2401 the universal li...
2026-01-08
辅导 engg7302 advanced compu...
2026-01-08
辅导 comp331/557 – class te...
2026-01-08
讲解 soft2412 comp9412 exam辅...
2026-01-08
讲解 scenario # 1 honesty讲解...
2026-01-08
讲解 002499 accounting infor...
2026-01-08
讲解 comp9313 2021t3 project...
2026-01-08
讲解 stat1201 analysis of sc...
2026-01-08
辅导 stat5611: statistical m...
2026-01-08
辅导 mth2010-mth2015 - multi...
2026-01-08
辅导 eeet2387 switched mode ...
2026-01-08
讲解 an online payment servi...
2026-01-08
讲解 textfilter辅导 r语言
2026-01-08
讲解 rutgers ece 434 linux o...
2026-01-08
热点标签
mktg2509
csci 2600
38170
lng302
csse3010
phas3226
77938
arch1162
engn4536/engn6536
acx5903
comp151101
phl245
cse12
comp9312
stat3016/6016
phas0038
comp2140
6qqmb312
xjco3011
rest0005
ematm0051
5qqmn219
lubs5062m
eee8155
cege0100
eap033
artd1109
mat246
etc3430
ecmm462
mis102
inft6800
ddes9903
comp6521
comp9517
comp3331/9331
comp4337
comp6008
comp9414
bu.231.790.81
man00150m
csb352h
math1041
eengm4100
isys1002
08
6057cem
mktg3504
mthm036
mtrx1701
mth3241
eeee3086
cmp-7038b
cmp-7000a
ints4010
econ2151
infs5710
fins5516
fin3309
fins5510
gsoe9340
math2007
math2036
soee5010
mark3088
infs3605
elec9714
comp2271
ma214
comp2211
infs3604
600426
sit254
acct3091
bbt405
msin0116
com107/com113
mark5826
sit120
comp9021
eco2101
eeen40700
cs253
ece3114
ecmm447
chns3000
math377
itd102
comp9444
comp(2041|9044)
econ0060
econ7230
mgt001371
ecs-323
cs6250
mgdi60012
mdia2012
comm221001
comm5000
ma1008
engl642
econ241
com333
math367
mis201
nbs-7041x
meek16104
econ2003
comm1190
mbas902
comp-1027
dpst1091
comp7315
eppd1033
m06
ee3025
msci231
bb113/bbs1063
fc709
comp3425
comp9417
econ42915
cb9101
math1102e
chme0017
fc307
mkt60104
5522usst
litr1-uc6201.200
ee1102
cosc2803
math39512
omp9727
int2067/int5051
bsb151
mgt253
fc021
babs2202
mis2002s
phya21
18-213
cege0012
mdia1002
math38032
mech5125
07
cisc102
mgx3110
cs240
11175
fin3020s
eco3420
ictten622
comp9727
cpt111
de114102d
mgm320h5s
bafi1019
math21112
efim20036
mn-3503
fins5568
110.807
bcpm000028
info6030
bma0092
bcpm0054
math20212
ce335
cs365
cenv6141
ftec5580
math2010
ec3450
comm1170
ecmt1010
csci-ua.0480-003
econ12-200
ib3960
ectb60h3f
cs247—assignment
tk3163
ics3u
ib3j80
comp20008
comp9334
eppd1063
acct2343
cct109
isys1055/3412
math350-real
math2014
eec180
stat141b
econ2101
msinm014/msing014/msing014b
fit2004
comp643
bu1002
cm2030
联系我们
- QQ: 99515681 微信:codinghelp
© 2024
www.7daixie.com
站长地图
程序辅导网!