BBCash design

Smithcourt Drive,

Little Stoke,

BS34 8NA.

andy@arcsoft.org.uk

http://www.arcsoft.org.uk/



ArcSoft



BBCash Design





An open source personal finance manager.






This page unintentionally blank



Table of Contents

1 Introduction 3

2 Design 5

2.1 Actors: 5

2.2 Use Cases: 5

2.2.i Use cases for A Person: 5

2.2.ii Formal Use Case Descriptions: 5

3 The Domain Model 7

3.1 Systems Analysis 7

3.2 Application Analysis 7

3.3 Domain Analysis 7

4 Class Design 8

4.1 Classes in this system are listed below in alphabetical order: 8

4.1.i AccountInfo 8

4.1.ii AcctCategoryInfo 9

4.1.iii Address 10

4.1.iv CurrencyConvRate 11

4.1.v CurrencyInfo 12

4.1.vi DataEngine 13

4.1.vii EMailAddr 14

4.1.viii FinancialInstitution 15

4.1.ix PhoneNum 16

4.1.x RecurringTransactionInfo 17

4.1.xi Report 18

4.1.xii TransactionInfo 19

4.1.xiii TransCategoryInfo 20

4.1.xiv WebSiteAddr 21

5 UML Class Diagram 22

6 User interface Design 23

6.1 List of screens in the system: 23

6.2 Screenshots: 23

6.2.i Main Account List: 23

6.2.ii Account transaction list: 24

6.2.iii Acctount Category list: 24

6.2.iv Add/Edit Account: 25

6.2.v Add/Edit Transaction: 25

6.2.vi Add/Edit Account Category: 25

7 Steps the program will go through 26

8 Testing the system 27

9 References 28

10 Miscellaneous info 29

11 Thanks 30

12 ToDo List 31

13 Wish List 32




This page unintentionally blank


1 - Introduction

This document describes the design of the JMoney personal finance system.





This page unintentionally blank


2 - Design

2.1 Actors:

First of all we need to identify who will use the system (we call these objects Actors). The two actors that I have identified so far are:

A Person.


2.2 - Use Cases:

Next, we need to specify how these actors will use the system. To do this we make a list of 'use cases'.


2.2.i - Use cases for A Person:

Open an account

Close an account

Make a transaction

Reconcile statement

Display reports

Download transactions from online bank



Now that we have a list of use cases, we should formalise what happens when each one is executed.


2.2.ii - Formal Use Case Descriptions:

Name:

open an account

Description:

Allows a person to open a new account and set up it inital balance and a credit limit.

Preconditions:

None

Postconditions:

The account will exist in the system

Scenario1:

The person opens a new account and adds it to the system.


Name:

close an account

Description:

Allows a person to close an account that is no longer used.

Preconditions:

The account must exist in the system.

Postconditions:

The account is deleted along with all transactions from that account.

Scenario1:

The person moves bank and needs to close an account.


Name:

make a transaction

Description:

records a transaction made by the person..

Preconditions:

The account that the transaction is performed against must exist in the system.

Postconditions:

The account has the new transaction in it's list of transactions.

Scenario1:

The person goes to an automated teller machine and draws out some money.

Scenario2:

The person transfers some money to from one account to another (e.g. checking to savings).


Name:

reconcile statement

Description:

Allows a person to check that they have entered all of the transactions into the system that the bank has a record of. It also allows a person to check that no erronous transactions have appeared on their statement.

Preconditions:

the account to be reconciled must exist in the system.

Postconditions:


Scenario1:

A statement arrives for the account.


Name:

report on financial status

Description:

Allows a person to review their past/current and/or future financial status.

Preconditions:

None.

Postconditions:


Scenario1:

The coach accepts a new athlete to train. He need to enter their details into the system so that the athlete can record their workouts.


Name:

download transactions from online bank

Description:

Allows a person to use an online bank to download a list of transactions and read them into the system.

Preconditions:

None.

Postconditions:


Scenario1:

The person downloads a list of transactions from thier bank and imports them into the system. During the import process the system will check for duplicate transactions.



3 - The Domain Model

3.1 - Systems Analysis

(page 62)

This stage of the analysis is used to define any hardware that might be required, and the environment that the system will be used in.



3.2 - Application Analysis

(page 64)

This is where the end user sets down any specific needs about the system.



Milestones in the project lifetime:

1. This document

2. Design Use cases

3. Design UI look and feel

4. Design Plugin architecture

5. Design Engine classes

6. Design UI classes

7. Design Filesystem classes


3.3 - Domain Analysis

(page 69)


Here we should make a list of all the 'objects' in the domain that the system will be used in. We would describe their attributes and capabilities.


Some objects in the domain are:

Online Bank – download statements




This page unintentionally blank


4 - Class Design

4.1 - Classes in this system are listed below in alphabetical order:

4.1.i - AccountInfo

Basic account information

Private Data Members:

int m_id

String m_accountNumber

long m_balance

int m_categoryId

long m_creditLimit

Date m_date

String m_description

FinancialInstitution m_institueDetails

String m_name

int m_parentId – used for account hierachies

List m_transactions


Public Data Members:


Private Member Functions:


Public Member Functions:

int getId() -


void setAccountNum(String)

String getAccountNum()


void setBalance(long)

long getBalance()


void setCategoryId(int)

int getCategoryId()


void setCreditLimit(long)

long getCreditLimit()


void setDate(Date)

Date getDate()


void setDescription(String)

String getDescription()


void setInstitute(FinancialInstitution)

FinancialInstitution getInstitute()


void setName(String)

String getName()


void setParentId(int)

int getParentId()


TransactionInfo createTransaction()

TransactionInfo getTransactionAt(int)

TransactionInfo getTransactionWithId(long)

int getNumTransactions()



4.1.ii - AcctCategoryInfo

This object stores information for categorising financial accounts.

Private Data Members:

int m_id

String m_name

String m_note

int m_parentId

String m_type


Public Data Members:


Private Member Functions:


Public Member Functions:

int getId()


void setName(String)

String getName()


void setNote(String)

String getNote()


void setParentId(int)

int getParentId()


void setType(String)

String getType()



4.1.iii - Address

This object stores an address

Private Data Members:

Vector m_addressLines


Public Data Members:


Private Member Functions:


Public Member Functions:

String createAddressLine()

String getAddressLineAt(int)

int getNumAddressLines()



4.1.iv - CurrencyConvRate

This object stores an address

Private Data Members:

int m_fromCurrencyId

int m_toCurrencyId

long m_convRate

Date m_dateCreated


Public Data Members:


Private Member Functions:


Public Member Functions:

void setFromId(int)

int getFromId()


void setToId(int)

int getToId()


void setConvRate(long)

long getConvRate()


void setDate(Date)

Date getName()



4.1.v - CurrencyInfo

This object stores an address

Private Data Members:

int m_id

String m_name

String m_symbol


Public Data Members:


Private Member Functions:


Public Member Functions:

int getId()


void setName(String)

String getName()


void setSymbol(String)

String getSymbol()


4.1.vi - DataEngine

Stores all of the information in the system.

This class is responsible for making sure that all data is written out to storage before the system shuts down.

We also want to maintain data integrity.

Uses the following classes.

AccountInfo

CategoryInfo

RecurringTransactionInfo

CurrencyInfo


Private Data Members:

List of Accounts

List of AcctCategories

List of TransCategories

List of Recurring transactions


Public Data Members:


Private Member Functions:


Public Member Functions:

createAccount() – create a new account.


AccountInfo createAccount()

AccountInfo getAccountAt(int)

AccountInfo getAccountWithId(long)

int getNumAccounts()

void deleteAccount(int) – delete an account from the system. All of the account's transactions will be deleted as well.


AcctCategoryInfo createAcctCategory()

AcctCategoryInfo getAcctCategoryAt(int)

AcctCategoryInfo getAcctCategoryWithId(long)

int getNumAcctCategories()

void deleteAcctCategory(int)


TransCategoryInfo createTransCategory()

TransCategoryInfo getTransCategoryAt(int)

TransCategoryInfo getTransCategoryWithId(long)

int getNumTransCategories()

void deleteTransCategory(int)


RecurringTransactionInfo createTransaction()

RecurringTransactionInfo getTransactionAt(int)

RecurringTransactionInfo getTransactionWithId(long)

int getNumTransactions()

void deleteRecurringTransaction(int)


void saveFile()

void readFile()


void saveFileText()

void readFileText()


void saveFileQIF()

void readFileQIF()


void saveFileCSV()

void readFileCSV()


void saveFilePdb()

void readFilePdb()


void saveFileGnuCash()

void readFileGnuCash()



4.1.vii - EMailAddr

Stores an email address.

Used by class:

FinancialInstitution

Private Data Members:

String m_userName

String m_hostName

String m_domainName


Public Data Members:


Private Member Functions:


Public Member Functions:

void setUserName(String aUserName)

String getUserName()


void setHostName(String aHostName)

String getHostName()


void setDomainName(String aDomainName)

String getDomainName()



4.1.viii - FileCSV

This object facilitates the loading and saving of data into a "Comma Separated Value" format file

Private Data Members:

String m_filename

boolean m_moreData

String m_fieldSeperator

int m_currColNum

int m_currLineNum


Public Data Members:


Private Member Functions:


Public Member Functions:

FileCSV(filename, seperator)

boolean initialise()


String readCol()

String readLine()






4.1.ix - FinancialInstitution

Info about a bank, building society etc....

Private Data Members:

String m_sortCode – this is unique for each institution

String m_name

Address m_address

WebSiteAddr m_website

EMailAddr m_emailContact

PhoneNum m_phoneNumber


Public Data Members:


Private Member Functions:


Public Member Functions:

String getSortCode()


void setName(String)

String getName()


void setAddress(Address)

Address getAddress()


void setWebSiteAddr(WebSiteAddr)

WebSiteAddr getWebSiteAddr()


void setEMailAddr(EMailAddr)

EMailAddr getEMailAddr()


void setPhoneNum(PhoneNum)

PhoneNum getPhoneNum()



4.1.x - PhoneNum

Stores a phone number.

Used by class:

FinancialInstitution

Private Data Members:

int countryCode

int areaCode

int phoneNumber


Public Data Members:


Private Member Functions:


Public Member Functions:

void setCountryCode(int aCountryCode)

int getCountryCode()


void setAreaCode(int anAreaCode)

int getAreaCode()


void setPhoneNumber(int aPhoneNumber)

int getPhoneNumber()



4.1.xi - RecurringTransactionInfo

The extra information about each recurring transaction.

Private Data Members:

Date m_startDate

Date m_stopDate

Date m_nextDate

int m_period - This is the period between payments (1=daily, 2=weekly, 3=monthly, 4=annually)

int m_dayOfWeek

int m_dayOfMonth

Date m_dayOfYear


Public Data Members:


Private Member Functions:


Public Member Functions:

void setStartDate(Date)

Date getStartDate()


void setStopDate(Date)

Date getStopDate()


void setNextDate(Date)

Date getNextDate()


void setPeriod(int)

int getPeriod()


void setDayOfWeek(int)

int getDayOfWeek()


void setDayOfMonth(int)

int getDayOfMonth()


void setDayOfYear(Date)

Date getDayOfYear()



4.1.xii - Report

Formats information from the DataEngine for reporting. May output HTML/XML for viewing/printing in a browser window.

Private Data Members:

Date dateReportGenerated


Public Data Members:


Private Member Functions:


Public Member Functions:

Date getDateGenerated()




4.1.xiii - TransactionInfo

The basic information about each transaction.

Private Data Members:

int m_id

int m_parentId

Date m_date

String m_payee

long m_amount

int m_categoryId

int m_sourceAccountId

int m_destAccountId

String m_note

String m_chequeNum

int m_currencyId

long m_currencyAmount


Public Data Members:


Private Member Functions:


Public Member Functions:

int getId() -


void setParentId(int)

int getParentId()


void setDate(Date)

Date getDate()


void setPayee(String)

String getPayee()


void setAmount(long)

long getAmount()


void setCategoryId(int)

int getCategoryId()


void setSourceAccountId(int)

int getSourceAccountId()


void setDestAccountId(int)

int getDestAccountId()


void setNote(String)

String getNote()


void setChequeNum(String)

String getChequeNum()


void setCurrencyId(int)

int getCurrencyId()


void setCurrencyAmount(long)

long getCurrencyAmount()


4.1.xiv - TransCategoryInfo

The extra information about transaction categories.

Private Data Members:

int m_id

String m_name

String m_note

int m_parentId

String m_type


Public Data Members:


Private Member Functions:


Public Member Functions:

int getId()

void setName(String)

String getName()


void setNote(String)

String getNote()


void setParentId(int)

int getParentId()


void setType(String)

String getType()



4.1.xv - WebSiteAddr

Stores a web site address.

Used by class:

Address

Private Data Members:

String m_topLevelDomain - The .uk, .com, .org etc.. part of the address

String m_secondLevelDomain - The .co in .co.uk

String m_hostName - the www.arcsoft from www.arcsoft.org.uk


Public Data Members:


Private Member Functions:


Public Member Functions:

void setHostName(String aString)

String getHostName()


void setTLDomainName(String aString)

String getTLDomainName()


void setSLDomainName(String aString)

String getSLDomainName()





This page unintentionally blank


5 - UML Class Diagram

This will be drawn in dia or thorn or argouml.






This page unintentionally blank


6 - User interface Design

The UI will be an "MDI" type which means that there will be a main window inside of which will appear other windows.




I will create a flow diagram of the screen order in dia.


6.1 - List of screens in the system:


Main account list - main screen displayed at startup; lists the accounts in the system

Account transaction list - from Main account list

AcctCategory list - from Main account list

TransCategory list - from Main account list

Add/Edit Account - from Main account list

Add/Edit Transaction - from Account transaction list

Add/Edit category - from Main account list and Category list



6.2 - Screenshots:

6.2.i - Main Account List:



6.2.ii - Account transaction list:



6.2.iii - Account Category list:




6.2.iv - Add/Edit Account:



6.2.v - Add/Edit Transaction:



6.2.vi Add/Edit Account Category:








7 - Steps the program will go through


1) User start system up (double clicks on icon etc…)

2) System display's an introduction message while it initialises itself in the background

3) The system will check wether it has been executed before.
If this is the first execution then the system will create empty databases.
If the system has been run before then it will read in any data from the current database.

6) The main screen will be displayed, this shows a list of accounts.



8 - Testing the system




9 - References




10 - Miscellaneous info



11 - Thanks



12 - ToDo List


  1. Design Add/Edit transaction dialog

  2. Design Add/Edit account category dialog

  3. Design Add/Edit transaction category dialog

  4. Add in “in cell” editing into tables

13 - Wish List



Page - 2 of 36 printed on 08/03/01 at 12:15:12