Fixed Assets Management System
Abstract
The present project report paper introduces java Desktop Application called Fixed Assets Manager that I have developed for Accounting Department of an organization. This work represents a design and development process of the system using Java Programming Language with NetBeans Platform. The main objective is to design a computerized system for the Accounting Department with the purpose of speeding up the process which might be very slow in paper based system. The system provides general functions that are performed during Accounting activities, such as storing and retrieving information about fixed assets along with updating editing and other activities related to managing assets in an organization.
TABLE OF CONTENTS
1.0 Statement of work ..5 1.1 Proposed System 5 1.2 Scope of the System ... 5 2.0 Components Table.6 3.0 System Analysis......7 3.1 Task Analysis...7 3.2 System Description .....8 4.0 Design Rationale.8 5.0 Usability Evaluation ...10
6.0 Appendix...11 6.1 Screenshots....11 6.2 Setup Guide.......14 6.3 Annotated Source..15
7.0 References.28
Page 2
1.0 Statement of Work
1.1 Proposed System In today`s business world, almost all kinds of business organizations rely on computerized systems to perform their operational, decision-making, and other management related activities. This paper introduces Java Desktop Application called Fixed Assets Manager(FAM) that can be one possible solution to business organization`s accounting department, in terms of making fixed assets management process quick, easy and reliable. This paper consists of demonstration of all the phases of the development lifecycle of my project, in particular, System investigation section focuses on discussion on possible problems of the paper-based system along with opportunities of the organization with consideration of business objectives and I will talk about the benefits that can be achieved by computerizing accounting process. The next section which comes with name System Analysis includes studies of paperbased system and its work process as well as strengths and opportunities for the intended system. In System Design section I will be discussing how I designed the application including design specifications and procedures that are performed while using the program. Next sections point up operational instructions and assistance for users, and boundaries along with foremost code listing. My report will end with the final phase where I will sum up and give some recommendations for further development of the system. 1.2 Scope of the System The scope of the proposed application is stated below: Supporting fixed assets management process Maintenance of fixed assets information Adding, editing, removing assets categories Creating, removing and updating fixed assets Storing, processing and retrieving information about fixed assets of an organization
Page 3
Displaying assets by different methods, such as by category, condition, useful lifetime and its current usage.
The application software will work for the organization`s accounting department and all the activities such as editing, updating, storing, deleting data will be done by users, who are mostly accountants and managers and other users can use the system to obtain information, which means the program can generate reports for managers about fixed assets of their organization.
2.0 Components Table
Data Item Data Type Category Id character Entry Method textfield Format/L ength 15 Generated id Category Name Category description Category Name Search Asset Name Date acquired character character textfield date 25 Character textfield 100 Enter category name to search Enter asset Name Choose date from calendar Category description Useful Lifetime Cost Category character character textfield Combo box 25 Select Category Employee character textfield 25 Employee records it integer spinner * 5 Enter Useful lifetime of asset Cost of asset character textarea 300 Give asset description character textfield 200 Give Description character textfield 25 Enter category Name Default Tool Tip Short cut -
Page 4
Condition
character
Combo box
Select Condition
Location Currently used
character character
textfield Radio button
25 -
Location of asset -
3.0 System Analysis
System analysis problem analyzing process which also requirements capturing for substituting system. In this section I introduced overall system description and following that, I analyzed user and task analysis which play very important role in software development. 3.1 Task Analysis Task Analysis demonstrates tasks that are performed by the users. The following diagram illustrates tasks that are performed while using FAM in Hierarchical Task Analysis approach which is one of the most important methods of task analysis:
Run application
Open Category Management
Open Assets Managemen t Edit categories Clear Form Delete category
Add new category
Search a category
Display all categories
Enter category name
Search category
Enter new information
Apply sorting
Enter category name
Enter category descript.
Save category
Delete fixed assets
Edit fixed assets
Add new asset
Select approach to display
Save category
Fill Form
Save Asset
Page 5
3.2 System Description The main goal of FAM is to speed up fixed assets management process and help accounting managers to do their daily activities efficiently and easily and benefit the organization by reducing costs. These objectives are achieved by developing a desktop application with Graphical User Interface which visualizes objects in graphically meaningful representation which makes it easy to remember and learn. More essentially, it provides functions that are required by the accounting department. Particularly using FAM users can easily record fixed asset information and display assets and categories with different conditions and edit information or delete.
4.0 Design Rationale
The diagram above which shows Task Analysis can be used as paper prototype to show users at the initial stage of the system design with the purpose of making it clear for them how it works and what can be done with it. This process is quite essential, because user participation in software development life cycle is one of the most important aspects of user centered design. It enables early usability analysis and user feedback might lead to some changes from beginning phases of the development process. Overall, the initial blueprint is designed and given to the user for evaluation and this is mainly for user to know what the system will do. When we run the application, the home page will appear containing three buttons at the bottom of the window:
Page 6
Every button directs to the related page when clicked, except Exit button. When user clicks Exit button program stops and window closes. I used standard buttons with standard colors and text. Because it is intended to be used by accounting managers, it is not needed to make it colorful with pictures and so on.
Assets category management page contains components as can be seen from snapshot below: Here I used picture which represents folder or specifically category as is related to content of the page and title of the page is blue which suits to the picture. Other components have standard colors and sizes, namely white background for fields where users enter records and gray for overall background which is generally used for different forms. As for layout, I split it into two, one is for searching and another is for displaying assets and updating its information. This layout is clear for users to see what part is used for specific purpose.
Page 7
In addition, I used message windows in case user makes some mistake while entering data, or performing all other components. For example, the picture below shows one of such message window which will appear when user attempts to delete record from database:
5.0 Usability Evaluation
Evaluation is one of the most important stages of software development life cycle, because it allows designer to find out weaknesses and errors of the system before actually releasing it. I chose observation method for evaluation, because it shows actual activities of user while
Page 8
performing program tasks. This means I can observe user and get note of how he\she using application efficiently and how easy the application to learn for him\her. While evaluating the program I gave my project to a accounting department manager of one business company called Akfa Lighting, and observed how the user is performing tasks, what parts may be difficult to learn, and so on. After this evaluation I got initial feedback and applied it to my project. In testing I mainly focused on efficiency, effectiveness, learnability of the system as well as user satisfaction. These aspects are evaluated in terms of speed, errors made, user performance and satisfaction as illustrated in table below:
1st time Expected Speed Errors Performance User satisfaction Slow Many Good 70% Given Quick enough Less Good 85%
2nd time Expected Fast Very few Very good 80% Given Faster Almost no Very good 90%
3rd time Expected Fast None Very good 90% Given Very fast None Excellent 95%
As is clear from the evaluation statistics, user performance and usability of the system are improved each time after modifications are implemented. And the user performed tasks better than expected which means the application does not require much training and can be easily learned and used.
6.0 Appendix
6.1 Screenshots
Page 9
Page 10
Page 11
Page 12
6.2 Setup Guide The application is located in folder called MyProject. As mentioned above it requires java runtime environment to be executed and Netbeans Platform to start database server. The user must follow these guidelines to execute application: 1. Open [Link] program from Program files 2. Go to Services section at top-left corner 3. Select Java DB properties by right-click 4. Show path to database location. It is JavaDB folder from main folder of the project 5. Right-click Java DB and start server 6. Right click assets_db and connect 7. Run [Link] by going to dist folder of the project.
Page 13
6.3 Annotated source code private void exitMenuItemActionPerformed([Link] evt) { [Link](0); } private void btn_catActionPerformed([Link] evt) { [Link](true); txtf_search_cat.setText(""); } private void clear_category(){ txtf_catID.setText(""); txtf_catName.setText(""); txtf_catDesc.setText(""); txtf_catID.setEnabled(false); txtf_catName.setEnabled(false); txtf_catDesc.setEnabled(false); [Link](); } private void btn_clearActionPerformed([Link] evt) { clear_category(); } private int getLargestId(String query) throws SQLException { int result=0;
Page 14
Connection con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement st = null; try { st = [Link](); ResultSet rsmax = [Link](query); while ([Link]()){ if([Link](1)==0){ result = 100; } else{ result = [Link](1); } }
} catch (SQLException e ) { [Link](null, "SQL Syntax Error"); } finally { if (st != null) { [Link](); } } return result; } private void btn_newActionPerformed([Link] evt) { int newId;
Page 15
txtf_catID.setEnabled(true); txtf_catName.setEnabled(true); txtf_catDesc.setEnabled(true); txtf_catName.requestFocusInWindow(); try{ newId = getLargestId("SELECT MAX(CATID) FROM [Link]")+1; txtf_catID.setText(""+newId);
} catch (SQLException e ) { [Link](null, "SQL Syntax Error"); } } private void getCatToCbox() throws SQLException { cbox_cat.removeAllItems(); Connection con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement st = null; st = [Link](); String query = "select * from [Link]"; ResultSet rs = [Link](query); cbox_cat.addItem("Select Category"); while ([Link]()){
Page 16
String catName = [Link]("CATNAME"); cbox_cat.addItem(catName); } cbox_cat.addItem("New Category"); if (st != null) { [Link](); } } private void getCatsToCbox() throws SQLException { cbox_cats.removeAllItems(); Connection con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement st = null; st = [Link](); String query = "select * from [Link]"; ResultSet rs = [Link](query); cbox_cats.addItem("All Categories"); while ([Link]()){ String catName = [Link]("CATNAME"); cbox_cats.addItem(catName); } if (st != null) { [Link](); } } private void getLifetimesToCbox() throws SQLException { cbox_lifetimes.removeAllItems();
Page 17
Connection con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement st = null; st = [Link](); String query = "select * from [Link]"; ResultSet rs = [Link](query); String lifecheck = "All"; cbox_lifetimes.addItem(lifecheck); while ([Link]()){ String lifetime = [Link]("LIFETIME"); if([Link](lifecheck)){ }else { cbox_lifetimes.addItem(lifetime); lifecheck=lifetime; } } if (st != null) { [Link](); } } private void ViewTable(String catname) throws SQLException { String query, querycount; if([Link]()) { query = "select * from [Link]"; querycount = "select count(*) FROM [Link]";
Page 18
} else { query = "select * from [Link] where CATNAME='"+catname+"'"; querycount = "select count(*) FROM [Link] where
CATNAME='"+catname+"'"; } Connection con =
[Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement st = null; try { st = [Link](); int count=0; ResultSet rscount = [Link](querycount); while ([Link]()){ count = [Link](1); } DefaultTableModel tableModel = (DefaultTableModel) [Link](); [Link](count); [Link](tableModel); ResultSet rs = [Link](query); int i = 0; while ([Link]()){ String catID = [Link]("CATID"); String catName = [Link]("CATNAME"); String catDesc = [Link]("CATDESCRIPTION");
Page 19
//calling data into jtable for display [Link](i+1, i, 0); [Link](catID, i, 1); [Link](catName, i, 2); [Link](catDesc, i, 3); i++; } } catch (SQLException e ) { [Link](null, "SQL Syntax Error"); } finally { if (st != null) { [Link](); } } } private void btn_saveActionPerformed([Link] evt) { if ((txtf_catID.getText().equals("")) || (txtf_catName.getText().equals("")) || (txtf_catDesc.getText().equals(""))) { [Link](this, "Please Fill in All Fields", "Information Message", WIDTH); } else{ try { [Link]("[Link]"); } catch (ClassNotFoundException e){
Page 20
[Link](this, "There is a problem in JavaDB embedded driver", "Warning", WIDTH); } try{ Connection con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", "jamol"); Statement stmt = [Link](); String sqlquery = "select * from [Link] where
CATNAME='"+txtf_catName.getText()+"'"; String sqlcheckid = "select * from [Link] where
CATID="+txtf_catID.getText(); ResultSet rsid = [Link](sqlcheckid); int intid=0; while ([Link]()){ intid = [Link]("CATID"); } ResultSet rs = [Link](sqlquery); String cName=""; int cId=0; while ([Link]()){ cName = [Link]("CATNAME"); cId = [Link]("CATID"); } if([Link]()&& intid==0){
Page 21
[Link]("INSERT CATDESCRIPTION) VALUES
INTO ("
[Link] +
(CATID, +
CATNAME, ", '" +
txtf_catID.getText().toString()
txtf_catName.getText() + "', " + "'" + txtf_catDesc.getText() + "')"); getCatToCbox(); getCatsToCbox(); clear_category(); ViewTable(""); [Link](this, "Information Message", WIDTH); if (stmt != null) { [Link](); } }else { int opt = [Link](null, "Category Already Exists. Do You Want to "New Category is Saved Successfully",
Overwrite?"); if(opt==JOptionPane.YES_OPTION) { if(cId!=0){ txtf_catID.setText(""+cId);} [Link]("UPDATE CATNAME='"+txtf_catName.getText()+"', WHERE CATID="+txtf_catID.getText()); } clear_category(); ViewTable(""); if (stmt != null) { [Link](); } } } catch(SQLException e){ [Link] SET
CATDESCRIPTION='"+txtf_catDesc.getText()+"'
Page 22
[Link](this, "There is a problem in JavaDB statement:" + e, "Warning", WIDTH); } } private void deleteById(String id) { Connection con = null; try{ [Link]("[Link]"); con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol", }
"jamol"); try{ Statement st = [Link](); String sql = "DELETE FROM [Link] WHERE CATID="+id; int delete = [Link](sql); } catch (SQLException s){ [Link]("SQL statement is not executed!"); } } catch (Exception e){ } } private void deleteAssetById(String assetId){ Connection con = null;
Page 23
try{ [Link]("[Link]"); con = [Link]("jdbc:derby://localhost:1527/assets_db", "jamol",
"jamol"); try{ Statement st = [Link](); String sql = "DELETE FROM [Link] WHERE ID="+assetId; int delete = [Link](sql); } catch (SQLException s){ [Link](this, "There is a problem in JavaDB statement:" + s, "Warning", WIDTH); } } catch (Exception e){ } } private void btn_deleteActionPerformed([Link] evt) { int[] col, row; [Link](1, 2); col = [Link](); row = [Link](); if([Link] < 1){ [Link](this, WIDTH); "No Row Selected", "Information Message",
Page 24
} else { int option = [Link](null, "Do You Really Want to Delete?"); if(option==JOptionPane.YES_OPTION) {
for(int i=0; i<[Link]; i++){ //[Link](row[i]); String str = ""+[Link](row[i], col[0]); String strcat = ""+[Link](row[i], col[1]); deleteById(str); cbox_cats.removeItem(strcat); cbox_cat.removeItem(strcat); } try{ ViewTable(""); clear_category(); if([Link] == 1){ [Link](this, "Selected Row is Deleted", "Information Message", WIDTH); } else if([Link] > 1){ [Link](this, "Selected Rows are Deleted", "Information Message", WIDTH);
Page 25
} else{ [Link](this, "No Rows Selected", "Information Message", WIDTH); } } catch (SQLException s){ [Link]("Statement is not executed!"); } } } } private void btn_assetsActionPerformed([Link] evt) { try{ getCatToCbox(); getCatsToCbox(); getLifetimesToCbox(); refreshListContent(); } catch (SQLException e ) { [Link](null, "SQL Syntax Error"); } [Link](true); [Link](false); //[Link](cbox_cats.getSelectedIndex());}
Page 26
7.0 References
Au, E. &Makower, D. (1996) Java Programming Basics. MIS:Press Ben Shneiderman (1998) Designing the User Interface, Addison-Wesley, 3rd Ed, Bentley, L & Whitten, J (2007).System Analysis & Design for the Global Enterprise. 7th ed Bloch, J. (2008) Addison-Wesley Java seriesThe Java series.2nd ed. Addison-Wesley Campione, M., Walrath, K. &Huml, A. (2001) The JavaTM Tutorial, Third Edition. Pearson Education Inc. Addison Wesley Eckel, B. (2009) Thinking in Java. 3rd ed. Prentice Hall PTR Jenny Preece (1994), Human-Computer Interaction, Addison-Wesley, 1st Edition Lewis, J. & Loftus, W. (2009) Java Software Solutions. 6thed. Pearson Education Inc. Addison Wesley O'Neil, J.(1998) Teach yourself Java. McGraw-Hill Professional
Page 27