Sei sulla pagina 1di 389

Bakre Idiazza

Portfolio

Table of Contents
Section I: Introduction......1
Cover Letter.......................................................................................................................................................................................................................................................................................2 Resume..3

Section II: Business and Systems Analysis..............................................................................................................................................................................................5


Team Charter...6 System Request...8 Elaboration Phase Specification...9 Vision Document.......12 Feasibility Analysis....16 Process Models....18 System Requirements...26 Trace Matrix...28 Use Case Descriptions...29 Use Case Diagram.37 Sequence Diagrams48 Class Diagram..51 Database Design Considerations...54 Windows Navigation Diagram...56 Deployment Diagram69 Grant Charts...72 Prototypes.74

Case Studies......80
Case Study 1- Burlington Northern; The Ares Decision.....81 Case Study 2- Symantec.....90 Case Study 3- Webvan.....97 Case Study 4- Waco Manufacturing..104 Case Study 5- Denver International Airport...109 Case Study 6- Connor Formed Metal Products....116 Case Study 7- Appex Corporation..124

Strategic Assessment.....131
1. Executive Summary..134 2. History and Purpose....135 2.1. The History of Jefferson County Master Gardener Association......135 2.2. The Purpose of Jefferson County Master Gardener Association/135 3. Management and Business Processes..137 3.1. Provide Conferences and events that return profit.137 3.2. Provide advanced training programs to members.137 3.3. Becoming a Jefferson County Master Gardener Association Member..138 3.4. Jefferson County Master Gardener Association fair.138 3.5. Jefferson County Master Gardener Association Website139 4. Current IT Environment.139 4.1. Hardware...140 4,2. Software......140

4.3. Website..141 4.4 Staff IT Skills/Training.142 4.5. IT Budgeting and Spending..142 5. Envisioned IT Capabilities..143 5.1. Leaderships Vision.143 5.2. Top 10 Technology Issues.144 1. The company is not spending enough on their IT.144 2. Keep track of volunteer and member hours...145 3. The companys web presence is insufficient for what they want to do..145 4. The staff is not trained enough on their systems...145 5. Have financial sections available for members only on the website....145 6. Donate and Volunteer Now buttons on Websites..146 7. There is no dedicated IT professional on staff..146 8. Blog or Social networking/.146 9. Backup the data/.147 10. Security issue and Hosting the site..147 6. Closing the Gap...147 6.1. Get an IT professional on staff...148 6.2. Get an Attendance Management System tool.148 6.3. Make the website more functional than informative.149 6.4. Donate Now! Volunteer Now! Button/key on the website..149 7. Conclusion....................................................................................................................................................................................................................................................................................150 Appendices..........................151 Basis of Analysis...152 Who they are? .....152 What they do? ....152 Who they do it for? ....152 1. The five Forces.....152 Suppliers.....152 Customers.....152 Inter-Industry Competition...152 Threat of Substitutes.....152 Threat of New Entrants..152 Problem...152 Stakeholders...153 2. Strategy ....153 Focus Strategy..143 3. Organizational Structure....153 Functional...143 4. Other Notes......154 Technology Inventory...154 Strategic Planning/Visioning Documents......154 IT Budget/Spending Documents......154 Reference List.....155 Development Project: Workforce Management System Louisville Urban League..156

Section III: Database Design and Application.....195


CIS 310 Assignment 2 ERD & business rules....196 CIS 310 Assignment 3 Database Creation..201

CIS 310 Assignment 4 Normalization...203 CIS 310 Assignment 5 - Create Queries....206 CIS 310 Assignment 6 - Stored Procedure & Trigger....215 CIS 310 Assignment 7 - Trigger/Cursors......220 CIS 310 Assignment 8 Star Schema DB...224 CIS 310 Assignment 9 Star Schema ERD..231

Section IV: Programming Skills.....233


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Program1- Simple console application....234 Program2- Simple console application using primitive variables...237 Program3- Console application using composite formatting..240 Program4- Project that involves two classes..244 Program5- Validation and use of conditional expressions...249 Program6- One-dimensional array of integers....254 Program7- An application calculates numbers entered by the user...257 Program8- Tracking library books application...260 Program10- Roll a die application...266 Program11- Querying an array of invoice objects.270 Program12- Simple class hierarchy including use of polymorphism...274 Program13- Create a simple GUI application...296 Program14- Simple Windows GUI application..299 Program15- File I/O and object serialization..302

Section V: Information Security Skills..324


Assignment 1- Wireshark Project......325 Assignment 2- Wireshark SSL/TLS handshaking.......332 Assignment 3- Crypto Lab Assignment.336 Assignment 4- Security Research Thesis: iPhone Vulnerabilities.361 Jailbreak and Unlock an iPhone 4.0.1........378 Summary of projects in my previous Interns....380

Section VI: Skill Set Sheet....385


Programming Languages....386 ApplicationSoftwar....386 Database Administration....387 Operating Systems...388 Technical Writing..............................................................................................................................................................................................................................................................388 Networking/Security.388

Section VII: Honors and Achievements......389 References...290

Section I: Introduction
This first section of my portfolio contains my current cover letter and resume. I created this entire portfolio to represent my collection of my school and work accomplishment and to explain what makes me different from other applicants in my field of study, Computer Information System. The resume summarizes the portfolio and focuses on the skills and experience I want to explain. For example, these are some of the most important skills I tried to emphasize throughout the resume:

Business Thinking Organizational skills, resource management, project


management, risk management, and change management.

Analytical Thinking Systems knowledge, problem identification and analysis,


decision support systems, and developing solutions

Technical Skills Programming, modeling, system development, and decision making


skills.

Communication Skills - Interviewing, listening, questionnaires, written and oral


presentations, working alone and with a team, facilitating groups, and managing expectations.

Note: Please be advised that these documents are a work in progress, and are frequently updated to reflect the new experiences I encounter.

Page | 1

XXXX XX. Human Resource Department Louisville, KY 40299 To whom it may concern: I am responding to your ad you recently posted on LinkedIn for the Technical Product Analyst position. Through my education and work experience, I have acquired skills and knowledge that make me an excellent candidate for this position. In my college coursework, I have taken several classes that directly deal with some of the fundamental qualities you are seeking in a candidate. CIS199/200 Software Development I & II (C# Programming) focused on learning how to write and debug extensive programming codes, understanding in depth the object-oriented software development, studying object model, and applying it to systems development problems. CIS300/310 Relational Database Design which consisted of 12 projects that taught us the core concepts of how to normalize and create data to fit BCNF format. The class also taught me how to programmatically import table data using SQL and in-depth knowledge/experience working with Microsoft Access. CIS 480/481 Information and Network Security focused on learning the practice of planning, implementing, and maintaining information security; and gained the knowledge and skills for network security within and across organizations. These classes also taught me methods associated with TCP/IP, cryptography, access control, web security, wireless security, firewalls, and intrusion detection systems.

In addition to my college coursework, I have completed two internships with the Miller IT- Center at the University of Louisville as IT Systems Analyst. Within this internship, I worked closely with the Secure Access Management Team where I assisted in operational support of the Computer Account Management System, managed accounts, identified account misuse, and gave users access, as well as retrieved and manipulated data from databases using MS SQL Server. My current Internship is with Yum! Brands as a Global Security Systems, where I work with BMU's to setup users through User Provisioning in IBM's Identity and Access Management System, complete automation tasks to create accounts and system access for users, and provide solid technical support for a variety of platforms and applications for all users. I also have worked full time as tax specialist at the Monger & Co. This job helped me to understand the business part of the work environment, its functions, and requirements that are crucial to running a productive business. I have enclosed my rsum for your review and can provide references and project example upon request. I welcome the opportunity to further discuss my experience and skills with you. Thank you for your time and consideration. Sincerely, Bakre Idiazza 2508 Cross Hill Court, Apt O-30 Louisville, KY 40206 Cell: (859) 221-0133 bakre@bakreidiazza.com

Page | 2

Bakre Idiazza 2508 Cross Hill Court Apt O-30, Louisville, KY 40206 - Cell: (859) 221-0133 bakre@bakreidiazza.com
OBJECTIVE
Multilingual experienced Information Systems Professional seeking a position as Security Analyst where I can utilize my knowledge and skills to improve systems performance, reliability and service continuity.

EDUCATION
University of Louisville, Louisville, KY B.S.B.A., Computer Information Systems GPA: 3.20 December 2011

TECHNICAL SKILLS
Operating Systems: Languages:

Apple Macintosh(8,9,X,Snow Leopard) Application Software:

Microsoft Windows(3.11,4.0,95,98,2000,XP,7) Windows Server 2003, 2005, 2008/R2 Linux, Unix, IBM Mainframe


Databases:

C#, VBScript, .NET, ASP SQL/T-SQL, UML 2.0 Windows PowerShell HTML, PHP, XML, CSS Microsoft SQL Server( 2005, 2008/R2)/Access AD, Softerra LDAP Administrator 2010.2 Star Schema Design, T-SQL Database Design, Cursors

Microsoft Office Suite/ SQL Server 2005/2008 R2 Novell , GroupWise, MS Outlook/Exchange Mailbox 2007, SMTP Remedy , HEAT Help Desk MS Visio, Visual Studio 2008/2010

MySQL, Apache, PHPMyAdmin Technical Writing/Diagramming: Diagrams: Sequence, Class, ERD Business Case Writing Uses Case Descriptions Data Dictionary Development, Matrix Vision Document Gantt Chart, Strategic Assessments Process and Activity Modeling

Stored Procedures, Triggers Networking/Security:

Basic QRadar Security Intelligence skills IBM Tivoli Directory Integrator (ITDI) 4.6 IBM Tivoli Identity Manager (ITIM)4.6/ 5.1 IBM Tivoli Access Manager (ITAM) 4.6 Anti-virus lifecycle, McAfee, Symantec GFI LANguard, CrypTool, Wireshark Ethernet, TCP/IP, VPN/ SSH-Putty Firewalls, Switches, Routers

RELEVENT EXPERIENCE

Yum! Brands, Louisville, KY

Jul. 2011 - Present

Global Security Systems Design, implementation, troubleshooting, and Providing advanced support for entire global security systems including, NetScreen/VPN, Entrust (Tow-Factor Authentication), Remedy, LDAP, AD, Mainframe (z/OS), Servers, Linux/Unix/DMZ boxes, PeopleSoft (HR, FN, CRM, Portal). Administer Tivoli Identity/Access Management/TDI products and services within DEV, TEST, QA, And PROD environments including user access and password troubleshooting as well. Responsible for ensuring users accounts are established/created including user access, user/vendor/store accounts, roles/groups, domains, and work with BMUs to setup users through User Provisioning, and set up accounts for Linux/Unix servers using SSH-Putty, as well as Administering Entrust Identity Guard application for authentication. Responsible for ensuring threats and vulnerabilities, operating system and Application level are identified, communicated and tracked per defined procedure, and prepare reports upon serious security incidents and refer them to the appropriate department for action and ensuring the enterprise is protected appropriately. Responsible for audit projects across multiple platforms involving LDAP, DB2, and SQL DB including quarterly audit reviews of all active users, inactive users, and users with advanced rights and roles. Creating complex SQL statements using joins, sub queries, correlated sub queries, and aggregations connecting multiple tables from different databases to generate high-performance reports for audit reviews. Apply rules and procedures to identify and resolve issues and create documentation of technical and process activities. Work to script tasks on servers and Active Directory using VBScript, Batch files, and Unix Shells to automate time consuming manual work and facilitate better record keeping. Add, close, and change ports and firewall rules and review and configure policies and access lists on the firewalls to permit the minimum access required for operations and remote access.

Page | 3

Miller IT Center, Louisville, KY Dec. 2010 Aug. 2011 Enterprise Security Analyst Intern Assisted in identifying security risk, copyright violations, and account misuse for over 10000 users and ensured safety of information and assets are maintained using software for vulnerability mitigation and remediation. Wrote effective SQL queries in MS SQL Server to retrieve external data and exported data to excel. Administered, and provided support for over 40,000 of data records in Active Directory and PeopleSoft. Processed over sponsor/service accounts requests from helpdesk team using Heat Help Desk database tool. Maintained security of data networks. Monitored and maintained physical and logical security and access to systems. Responsible for support of existing security policies and procedures, as well as creation and implementation of new security procedures and policies. Louisville Urban League - System Analysis and Design Course Jan. 2011 Aug. 2011 System Analyst Intern Wrote programs and used UML 2.0 tools to create network and database design with an integrated IT solution that effectively and efficiently enhanced the business to fit Louisville Urban Leagues needs. Developed 25 Use Case Descriptions, 25 Sequence Diagrams, 8 Process models, and Class Diagram. Designed Entity Relationship Diagram, and created a database to support their materials and customers. Monger & Co., Louisville, KY Nov. 2010 Feb. 2011 Computer Technician, Tax Specialist Prepared taxes for over 200 individuals, 70 businesses, and maintained over 300 records of clients and services Completed ongoing tax preparation education beyond basic requirements. Sat up and maintained Local Area Network (LAN) in the office. Updated operating systems, antivirus, service and packs, and installed and up-graded hardwares and softwares computers Configuration of Cisco Routers, Switches and firewalls, configuration of routing and routing protocols. Assif Cyber Caf, Tiznit, Morocco Dec 2002- Jul 2004 Computer Technician Installed software and hardware (motherboards, graphic cards, network cards, etc.), checked peripherals for normal operation, and provided basic training and advice on various software, Internet, and IT related matters. Responsible of operation of computer networks including hardware/software support, training, and special projects; plans, designs and implements data connectivity for local area network (LAN) Sat up IP addresses, switches, routers, and upgraded and troubleshoot networking hardware devices.
OTHER EXPERIENCE

BP Gas Station, Lexington, KY May 2006 Jun 2007 Assistant Manager Assisted customers with questions, concerns, and solved problems as they arose to ensure satisfaction Trained/scheduled employees and increased sales by 21% within 9 months due to created referral program Ordered new/replacement merchandise or equipment as needed, totaling $450,000 annually Reconciled cash drawer daily, generated financial reports, managed inventory/invoices totaling $900.000 Olive Garden, Lexington/Louisville, KY Sep. 2005 Aug. 2009 Server/Crew Leader Effectively and efficiently handled cash, debit, and credit card transactions, totaling $520,000 annually Assisted customers with menu selections and took their food and drink orders for 150 guests per a day Demonstrated understanding, prompt attention, and ensured highest level of satisfaction are met
LANGUAGES

Fluent in Berber, Arabic, and English Moderate in French Currently learning Spanish
HONORS

Wehby Colunga Scholarship Award, Fall 2011 Deans List Certificates, Fall 2009 Present International Baccalaureate Program
COMMUNITY INVOLVEMENT

Construct a concrete base and cinder block walls for waste area at a non-profit organization Treasurer Assistant - Finance Club, University of Louisville 2009-10

References Available Upon Request Page | 4

Section II: Business and Systems Analysis


This section contains models of my work in business and systems analysis. I believe the documents grouped here represent the systems analyst in me best. This is because my work demonstrates a strong ability to translate business requirements into real world solutions. A brief description of each piece in the section is detailed below:

Team Charter - This charter was produced by my CIS 320 project team for the Louisville
Urban League. I remained dedicated and followed the agreed upon procedures of the charter to help plan a client management solution for the client.

System Request - This was a document created by the project team to explain the system
requirements. The clients perceived value and imposed constraints are also detailed within.

Elaboration Phase Specification - This was the heart of our project development for the
CIS 320 class. In this document are the use cases, flow diagrams, prototypes, and analyses we developed for the client. This is a good example of my abilities as a systems analyst.

Case Analysis/Studies - These were papers I had written in my CIS 410: Management of
Information Systems class. We were tasked with reading cases about several books, identify the problem, and compare and contrast their options. We also had to use theories from the class discussions and textbooks to support our claims. These are good example of my analytical, communication, and business analysis skills.

Strategic Assessment - This was one of the most important assignments of my CIS 410:
Management of Information Systems class. For this assignment, each class member was paired with a nonprofit organization with the purpose of doing an assessment of their management, business Processes, and IT infrastructure. To produce this written analysis of the company I met with the executive director and the IT person, and discussed their issues and evaluate their business in order to produce the complete Strategic Assessment.

The Louisville Urban League Workforce Management system guide - My ability to


explain the technical features of a business system is proven in this document. By reading this document, the client was able to become knowledgeable with their new client management system.

Page | 5

Team Charter
CIS 320- Systems Analysis and Design
Think Tank Group
Think Tank Group Consists of Bakre Idiazza, Adam Bowman, Matthew Grassman, and Brandon Spears.

Team Goal
The objective of the Think Tank Group is to develop a database system solution for The Louisville Urban Leagues Youth Development and Education Department. This system will improve the departments efficiency by improving the current processes of the current system. The new system must also improve the tracking of students by providing more detailed information during and after a students time with the LUL. For funding sources, the system must be able to generate meaningful reports that reflect the activities of the students and organizations. Also, the system must have an automated backup system and be able to link information with other departments systems within the LUL. Our system must be flexible, scalable, secure, and worth the cost.

Team Meetings
The agreed time by all members of Think Tank Group for meetings is Tuesday and Wednesdays around 11:15-12:00 AM EST. The meetings will consist of discussion of the project and upcoming deliverables, and tasks will be distributed if necessary. Decisions made by the group will require group consensus and will be documented through email confirmation.

Team Communications
Outside of meetings, the group channels of communication include email and group pages set up on the school website, Blackboard. These group pages allow us to post threads for discussion, exchange files necessary for the project, and send emails to each other with ease. The group has designated group member Bakre Idiazza to be the sole email contact to the Louisville Urban Leagues project representative and will propagate results of said contact to the rest of the group.

Team Decisions
Group consensus will be obtained by complete agreement of the groups members, using any lines of communication listed above. Decisions will be primarily made at group meetings, with emergency decisions being made between the members using outside lines of communication. Any conflicts regarding the group members and project will be resolved as a team, and any Page | 6

problem that is deemed too difficult to be resolved will be brought to the professor at earliest convenience.

Project Repository
Project documentation will be maintained through email and the teams group page on the Blackboard website. Any information or documents that cannot be made available electronically will be kept by the group member owning the document and plans will be made to make it available to the rest of group members, if necessary. This team charter serves as a living document in which aspects of it may change during the projects lifespan according to group consensus. Evidence of agreement to this charter will be document by signatures of each group member.

Page | 7

System Request
Project Name
Louisville Urban League, Youth Development and Education Program Efficiency Project

Project Sponsor
Kevin Fields, Senior Director of Youth Development and Education for the Louisville Urban League

Business Need
This project has been initiated to improve upon the current IT strategies of the Louisville Urban Leagues Youth Development and Education Program.

Business Requirements
Louisville Urban League has multiple systems in place to track the enrollment and progress of each student enrolled in the Youth Development and Education Program. There should be some system in place that integrates all of these systems together so that there is one large database to track all of these statistics, instead of several smaller databases that work together to produce the same results. The functionality of this system should be as follows: Search through the database to find the number of students enrolled in each program. Search the database to produce the attendance rate of each youth program. Search the database to find the YTD percentage-to-goal of youth attending. Search the database to find the grades of each student enrolled in the Youth and Development Program.

Business Value
We expect that the new system will increase revenues from donations and grants by eliminating time spent inputting data from the different programs into one excel sheet. Less data entry time means more free time to seek additional donors. A new system would also decrease the chance of incorrect data being entered into the database. The fewer times that data is moved decreases the risk for entry error.

Special Issues or Constraints


Louisville Urban League only has a budget of $30,000-$40,000 dollars to spend on upgrades for the year Required information to track for each student is not clearly defined Additional information will need to be tracked in future Current data resides in multiple sources and needs to be consolidated Custom reports need to be easy to build and generate Page | 8

Think Tank Team


Elaboration Phase Specification

Baker Idiazza Brandon Spears Adam Bowman Matthew Grassma


Page | 9

Bakre Idiazza

Louisville Urban League Project Youth Development & Education


Vision Document

Version 2.5

Page | 10

Revision History
Date 01/Feb/11 09/Feb/11 17/Feb/11 23/Feb/11 29/Feb/11 12/Mar/11 Version 1.0 2.0 2.1 2.2 2.5 2.6 Description Initial version Additional Product Features Additional Product Features Appendix A Problem Statement: correction Final Draft Author Think Thank Team Think Thank Team Think Thank Team Think Thank Team Think Thank Team Think Thank Team

Page | 11

Vision Document
Introduction
The purpose of this document is to collect, analyze, and define high-level needs and features of the Louisville Urban Leagues system. It focuses on the capabilities needed by the stakeholders and the target users, and why these needs exist. The details of how the Louisville Urban Leagues new data system fulfills these needs will be detailed in the use-case and supplementary specifications.

References
Systems Request 01/29/2011 Think Thank Team - Bakre Idiazza Narrative 2/09/2011 Think Thank Team Adam Bowman Bakre Idiazza Process Models 2/11/2011 Think Thank Team Brandon Spears Bakre Idiazza Team Charter 2/19/2011 Think Thank Team Matthew Grassma Louisville Urban League Strategic Assessment, Chris Connor, University of Louisville, CIS 410

Positioning Problem Statement


The problem of Affects The impact of which is having a decentralized database with data in too many places LUL, its sponsors, and those who they serve Inability to produce timely reports, which could result in missing out on $60,000 per year on average in grants. a new reporting system

A successful solution would be

Product Position Statement


For Who The potential product That Unlike Our product The Louisville Urban Leagues Youth Development and Education department Needs to save time and money is a database management system Should help generate reports in a timely manner the current system Should integrate all databases Page | 12

Stakeholder and User Descriptions Stakeholder Summary


Name Youth Development and Education Description The youth Development & Education branch of the LUL Responsibilities monitors the projects progress approves funding

Donors

Program Participants

These are the companies that make donations to the LUL. These are the stakeholders that that the Youth Development and Education are focused on providing service to.

Make donations Request reports Enter information into sign-in sheets

User Summary
Name Kevin Fields Description Senior Director of Youth Development & Education/ Responsibilities Approves funding Combines all of the reports from the program directors into a single report, which is sent to the donors Contacts organizations Shares some of Kevins responsibilities Combines all of the reports from the program directors into a single report, which is sent to the donors Produce reports for their programs, which are sent to the Director of Youth Development & Education

Imani Muhammad

Administrative assistant of Kevin Fields

Program These are the Directors/Instruc individuals that tors lead the students enrolled in the programs.

Page | 13

User Environment
Data The system platforms in use today are PC-based, running the Windows 7 operating system. Data exists in Excel spreadsheets, which are is stored on a server, but are still accessed from workstationsPotential security risks. The task is to deliver reports to the donors who request them

Summary of Key Stakeholder or User Needs


Need Save time and money Priority 1 Concerns None known Current Solution None Proposed Solutions Replacing paper with Web forms would save $1,000 dollars a year on reams of paper and toner Centralized database

Product should be easy to pick up and learn

None known

Microsoft Excel and Microsoft Access

DBMS Software, such as SQL Server

Alternatives and Competition


Do nothing: The consequences of doing nothing are that funding will continue to be lower than its potential, meaning the LUL will miss out on at least $60,000 a year in donations. This assumes that each grant at a minimum is $5,000, and that LUL receives a minimum of one grant a month. Buy an existing product: This would involve having to search for an existing product which could minimize costs for LUL. Create a product: This alternative is highly risky in that it consumes a great deal of time and money. If the organization were to do this, they would have to commit to a new system using this product. The probability of failure is high when building a system from scratch, as very little is known Page | 14

Product Features
Potential features of the envisioned product are as follows: Less paper and ink usage: would be more environmentally friendly and save approximately $1,000 per year in paper and ink. ($7 per ream of paper) o Electronic student enrollment allows for tracking of students Automated communication between databases. Should be able to automatically update Generate reports to potential donors upon request

Page | 15

Feasibility Analysis
Appendix A
Economic Feasibility Technical Feasibility Organizational Feasibility Feasibility Considerations Medium risk, Feasible Low risk, Feasible Medium risk, Feasible

Economic Feasibility
If LUL were to adopt a new system, will they be able to afford it? There are many technology options out there that would be of little or no cost to LUL. LUL must stay within their $30,000 budget to continue to receive Federal Grants. This makes adopting a new system fairly risky. Adopting a new system could pay for itself through increased revenues from grants and donations. If faster reporting were to increase donations by one per month, then LUL could be looking at increasing yearly revenue by $60,000. Cost considerations for this project include additional hardware, software applications, and development costs. Kevin indicated that hardware such as new servers and computers may need to be purchased for this project, although it should utilize existing resources if possible. Software applications and possibly licenses will need to be purchased for the information system that is to be created. And finally, there will be costs associated with development, such as hiring developers to create the system. Development costs are estimated at $75 per hour, which is about average for above average American developers. The time to develop will vary greatly depending on the scope, but is estimated at 100 hours based on previous projects of similar size weve worked on. Yearly maintenance is estimated at the same developer cost per hour but for 30 hours per year by the same estimate. The system is relatively lightweight, and given the current equipment owned by LUL, only two new servers should be necessary for the SQL server and the backup server. These are estimated at $2000 each, based on the cost of most low-end Dell and HP servers. The SQL server license cost is based on a $25/month web host price, which could change depending on the hardware used as SQL licenses are based on the number of cores. The yearly upkeep for the two new servers will be around $720 each, based on a relatively low $60 per month collocation charge, which will be minimized as the client is hosting the hardware themselves.

Technical Feasibility
There is technology available that could help LUL improve on their current issues. LULs current IT system should be able to easily adopt a new system. The only problem they might come across with a new system is whether LUL can afford the new technology, and whether LUL employees can learn how to use the new software. The biggest technological hurdle to overcome will be the lack of experience implementing a system of this scale. The second hurdle will likely be migrating the data from the previous system to the new system. As mentioned previously, the main reason for the new system is because of the difficulty extracting useful Page | 16

data from the current system, which will also lead to problems migrating the previous data to the new system. However; there is an entire semester to implement the system as a team, so we believe that this outweighs the technological hurdles and recommend that the proposed system is technically feasible.

Organizational Feasibility
This is the most risky of the three feasibility considerations. Technically and economically a new system could be adopted without many problems. The main challenge for LUL when adopting the new system is the users. Will LULs employees be able to use the new system? We believe so. A new system should not be too difficult to use if designed properly. The staff is expected to accept the new system quickly as they are irritated by the tedium involved working with the current system. By all accounts the staff is as supportive of this project as the project sponsor, Kevin. They are technically capable with Microsoft products and the interface will likely be a standard web form that most computer users are familiar with. The reports generated will be compatible with old reports as they are tailored to the specific client needs. Since the management is the system sponsor inside of the organization, we believe that adoption is very likely. As such, we recommend that the proposed system is organizationally feasible as well.

Feasibility Analysis Summary Benefits Feasibility


Once the system is operational there will be much added value and benefits. It will be substantially easier to track students, create and modify reports, and the Louisville Urban League will be more efficient and organized. More detailed and reliable data will help with acquiring more funding from current and new sources. Also, it will take less employee time to work with the new information system which will enable the Louisville Urban League to direct those employees to other projects and work. Kevin estimates hundreds of man hours saved each year from the decreased time spent assembling reports and verifying reports, currently a tortuous task. The main benefit is expected to be the increased reliability of the reports. Currently the client has little faith in the accuracy of reporting and it is vetted multiple times. Kevin expects a 10-20% increase in funding, from better, more detailed and accurate reporting and more time for staff to lobby donors for funds. The total revenue for 2008 was $2,233,350, so a 10% increase in the first year is more than $200,000. We assume that this is stable at 10% of their 2008 revenue, not compounded every year. Kevin indicated that staff spend about 15 hours a month generating reports that he expects to be cut down to under one hour. Going by the Bureau of Labor Statistics information for social workers in Louisville, they make anywhere from $15-30 per hour, depending on the classification. Specialized workers such as vocational and social activist workers are at the higher end of the spectrum while all other social workers are at the lower end. Assuming generating reports costs LUL $20/hr, this is a savings of $3,360 per year. We believe that it is economically feasible, as the work is being performed for free and the current system is so poor that almost any improvement would result in greater productivity.

Page | 17

Process Models
Process Model: As-is Model
Procedures: Design: Currently the many processes They all work individually and being supported require many parallel with each other. systems to track System: Working parallel means that their paths do not cross, or that they do not communicate with each other.

Currently the sign-in sheets are processed by the program coordinator who the inputs all the data to get the initial spreadsheet. It is then emailed to the Program assistant who also processes enrollments from the incoming enrollment forms, then the data is merged and the composite final spreadsheet is emailed to the program coordinator for revisions, where it again is input into a spreadsheet, sent to the program assistant via email, and once the data is merged again, it continues to go through revisions until the final spreadsheet is emailed to the director who recompiles the data and generates a report.

Page | 18

Page | 19

Page | 20

Page | 21

Process Model: TO-Be Model


Procedures: There will be a system or program in place that allows these 3 systems to communicate with each other. Design: With this would come the ability to input information into one system, and it would communicate with all 3, rather than manually entering into each (this is one part where human error could cause major problems) System: The systems communicating with each other would allow for more efficient workflow and more accurate reports.

The signing forms are processed by the program coordinator who enters data into the database which will be administers by the administrative assistance who also reviews spreadsheets and update them then send them for revisions to program coordinators who updates database in which the director get the desired information. Therefore, the director generates reports for donors.

Page | 22

Page | 23

Page | 24

Page | 25

System Requirements
I. Functional Requirements 1. In-Take/Programs
1.1. 1.2. 1.3. 1.4. The Louisville Urban League (LUL) Database Management System shall assist users in the intake process of new students. The LUL system shall provide an online form for entering new student data. The LUL system shall provide a reliable identification system for students, such as an identification number for each student. The LUL system shall provide a skills assessment to assist students in identifying their strengths

2. Tracking
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. The LUL system shall track meaningful student and employer information.

The LUL system shall provide an online form for employers to post job opportunities. The LUL system shall provide a reliable identification system for employers, such as an identification number for each employer. The LUL system shall provide a reliable identification system for funders, such as an identification number for each funder. The LUL system shall collect more student data than provided in the intake process (such as workforce development activity.) The LUL system shall retain student data that may or may not be changed over time (such as previous employment, location, etc.). The LUL system shall retain student documents and link them with the students electronic file. The LUL system shall track employer data in relation to the LUL (ex. How many of the LULs students were admitted? Were the admitted students recommended by the LULs job match system?)

3. Reporting
3.1. 3.2. 3.3. 3.4. 3.5. The LUL system shall produce meaningful reports efficiently The LUL system shall print monthly reports. The LUL system shall print customizable reports. The LUL system shall generate ad-hoc reports easily. The LUL system shall provide access to student data without manual manipulation.

Page | 26

4. Other Requirements
4.1. 4.2. 4.3. The LUL system shall provide an online form for entering new events.

The LUL system shall provide a reliable identification system for events, such as an identification number for each event. The LUL system shall provide a reliable identification system for LUL staff, such as an identification number for each staff member.

II. Non-Functional Requirements 5. Operational Requirements


5.1. 5.2. 5.3. 5.4. 5.5. The LUL system shall be user-friendly The LUL system shall provide a means to add and edit student and employee data easily The LUL system shall require maintenance costing no more than $20,000 a year. The LUL system shall provide scalability, allowing changes to its structure and function to be easily made. The LUL system shall link student data that may reside in other LUL department systems (such as the Housing or Kids Trak systems).

6. Performance Requirements
6.1. 6.2. The LUL system shall provide an automated backup procedure for its data. The LUL system shall operate in Windows environments

7. Security Requirements
7.1. 7.2. 7.3. The LUL system shall provide a security system to protect its data and users. The LUL system shall provide different levels of access for different users (students versus staff versus employers) The LUL system shall request proper credentials for different users (A login and password for each user)

Page | 27

Trace Matrix
Brief Narrative for Trace Matrix
This trace matrix connects the use cases with the system requirements described in the previous section. Its purpose is to see if the requirements of the system are being met by the use cases. For instance, Use Case 2, Enroll Students, meets the requirements of System Requirement 10, which states that The new system shall help LUL save roughly $1000 dollars a year by using less paper and ink.

1 1 2 3 4 5 6 7 8 9 10 11

2.1

3.1 X

Use Case 4.1 5.1 X X

6.1 X

9 X X

10 X X

X X X X X X X X X X X X X X X X X X X X

Requirement

Page | 28

Use Case Descriptions


Use Case Description Narrative for Rising Fifth Graders - Summer
The use case diagram below for Rising Firth Graders-Summer explains who is involved in executing each of the use cases associated with the Louisville Urban Leagues Rising Fifth Graders: Summer program. Each ellipse inside the box represents a different use case, enroll students, track participant satisfaction, track benchmark achievements, and generate reports. A use case explains what must be done to meet the system requirements of the program. Each stick figure outside the box represents an actor, Parents/Student, Program Assistant, and Program Director. An actor is the person who interacts with the system. Each actor is connected to the use cases that he/she is responsible for interacting with. In this use case diagram, the Parent/Student enrolls in the program. The Program Assistant tracks participant satisfaction and benchmarks achieved. The Program Director then uses the participant satisfaction and benchmarks achieved to generate a report.

Page | 29

Use Case Specification: Rising Fifth Graders, summer Track Participant Satisfaction BRIEF DESCRIPTION
This use case is the means by which the Rising Fifth Graders (summer) program receives feedback from the participants in the program. Its purpose is to reveal the strong points of the program as well as areas which could use any improvement.

Flow of Events BASIC FLOW


First, the student types in a link provided by the program director on the Louisville Urban League Web site (using a normal Web browser). This causes the system to display an evaluation form in the current window. Next, the student responds to statements about numerous aspects of the program (as Likert items) by selecting a radio button underneath each item which best reflects his/her opinion. Each radio button corresponds to a number from 1 to 5 (with 1 being strongly disagree, 3 being neither agree nor disagree, and 5 being strongly agree). When all fields are entered, the system does a validation check on the data entered, making sure all of the required questions have been responded to. After passing all validation checks, the data is stored in a database. Program directors use this data to refine the program. The head of Youth & Education Development uses this information in report generation.

Special Requirements
The form should be secure to prevent identity theft or manipulation of data from outside sources

Pre-conditions
ALL ITEMS MUST BE COMPLETE, UNLESS OTHERWISE NOTED An example of optional data could be personal information such as age and race, which are used to determine participant demographics. Also, a narrative section if they wanted to include any specific comments, concerns, or suggestions.

Post-conditions
The Data is recorded and stored anonymously in database

Page | 30

Use Case Description Narrative for Rising Fifth Graders School Year
The use case diagram above explains who is involved in executing each of the use cases associated with the Louisville Urban Leagues Rising Fifth Graders: School Year program. Each ellipse inside the box represents a different use case, enroll students, track participant satisfaction, track benchmark achievements, and generate reports. A use case explains what must be done to meet the system requirements of the program. Each stick figure outside the box represents an actor, Parents/Student, Program Assistant, and Program Director. An actor is the person who interacts with the system. Each actor is connected to the use cases that he/she is responsible for interacting with. In this use case diagram, the Parent/Student enrolls in the program. The Program Assistant tracks participant satisfaction and benchmarks achieved. The Program Director then uses the participant satisfaction and benchmarks achieved to generate a report.

Page | 31

Use Case Specification: Rising Fifth Graders, School Year Track Participant Satisfaction BRIEF DESCRIPTION
This use case is the means by which the Rising Fifth Graders (School Year) program receives feedback from the participants in the program. Its purpose is to reveal the strong points of the program as well as any areas which could use improvement.

Flow of Events BASIC FLOW


First, the student types in a link provided by the program director on the Louisville Urban League Web site (using a normal Web browser). This causes the system to display an evaluation form in the current window. Next, the student responds to statements about numerous aspects of the program (as Likert items) by selecting a radio button underneath each item which best reflects his/her opinion. Each radio button corresponds to a number from 1 to 5 (with 1 being strongly disagree, 3 being neither agree nor disagree, and 5 being strongly agree). When all fields are entered, the system does a validation check on the data entered, making sure all of the required questions have been responded to. After passing all validation checks, the data is stored in a database. Program directors use this data to refine the program. The head of Youth & Education Development uses this information in report generation.

Special Requirements
The form should be secure to prevent identity theft/manipulation of data from outside sources

Pre-conditions
ALL ITEMS MUST BE COMPLETE, UNLESS OTHERWISE NOTED An example of optional data could be personal information such as age and race, which are used to determine participant demographics. Also, a narrative section if they wanted to include any specific comments, concerns, or suggestions.

Post-conditions
The data is recorded and stored anonymously in a database

Page | 32

Use Case Description Narrative for Street Academy


The use case diagram above explains who is involved in executing each of the use cases associated with the Louisville Urban Leagues Street Academy program. Each ellipse inside the box represents a different use case, enroll students, track participant satisfaction, track benchmark achievements, and generate reports. A use case explains what must be done to meet the system requirements of the program. Each stick figure outside the box represents an actor, Parents/Student, Program Assistant, and Program Director. An actor is the person who interacts with the system. Each actor is connected to the use cases that he/she is responsible for interacting with. In this use case diagram, the Parent/Student enrolls in the program. The Program Assistant tracks participant satisfaction and benchmarks achieved. The Program Director then uses the participant satisfaction and benchmarks achieved to generate a report.

Page | 33

Use Case Specification: Street Academy Track Participant Satisfaction BRIEF DESCRIPTION
This use case is the means by which the Street Academy program receives feedback from the participants in the program. Its purpose is to reveal the strong points of the program as well as any areas which could use improvement.

Flow of Events BASIC FLOW


First, the student types in a link provided by the program director on the Louisville Urban League Web site (using a normal Web browser). This causes the system to display an evaluation form in the current window. Next, the student responds to statements about numerous aspects of the program (as Likert items) by selecting a radio button underneath each item which best reflects his/her opinion. Each radio button corresponds to a number from 1 to 5 (with 1 being strongly disagree, 3 being neither agree nor disagree, and 5 being strongly agree). When all fields are entered, the system does a validation check on the data entered, making sure all of the required questions have been responded to. After passing all validation checks, the data is stored in a database. Program directors use this data to refine the program. The head of Youth & Education Development uses this information in report generation.

Special Requirements
The form should be secure to prevent identity theft/manipulation of data from outside sources

Pre-conditions
ALL ITEMS MUST BE COMPLETE, UNLESS OTHERWISE NOTED An example of optional data could be personal information such as age and race, which are used to determine participant demographics. Also, a narrative section if they wanted to include any specific comments, concerns, or suggestions.

Post-conditions
The data is recorded and stored anonymously in a database

Page | 34

Use Case Description Narrative for Supplemental Education Services


The use case diagram above explains who is involved in executing each of the use cases associated with the Louisville Urban Leagues Supplemental Education Services. Each ellipse inside the box represents a different use case, enroll students, track participant satisfaction, track benchmark achievements, and generate reports. A use case explains what must be done to meet the system requirements of the program. Each stick figure outside the box represents an actor, Parents/Student, Program Assistant, and Program Director. An actor is the person who interacts with the system. Each actor is connected to the use cases that he/she is responsible for interacting with. In this use case diagram, the Parent/Student enrolls in the program. The Program Assistant tracks participant satisfaction and benchmarks achieved. The Program Director then uses the information from participant satisfaction and benchmarks achieved to generate a report.

Page | 35

Use Case Specification: Supplemental Education Services Track Participant Satisfaction BRIEF DESCRIPTION
This use case is the means by which the Supplemental Education Program receives feedback from the participants in the program. Its purpose is to reveal the strong points of the program as well as areas which could use any improvement.

Flow of Events BASIC FLOW


First, the student types in a link provided by the program director on the Louisville Urban League Web site (using a normal Web browser). This causes the system to display an evaluation form in the current window. Next, the student responds to statements about numerous aspects of the program (as Likert items) by selecting a radio button underneath each item which best reflects his/her opinion. Each radio button corresponds to a number from 1 to 5 (with 1 being strongly disagree, 3 being neither agree nor disagree, and 5 being strongly agree). When all fields are entered, the system does a validation check on the data entered, making sure all of the required questions have been responded to. After passing all validation checks, the data is stored in a database. Program directors use this data to refine the program. The head of Youth & Education Development uses this information in report generation.

Special Requirements
The form should be secure to prevent identity theft/manipulation of data from outside sources

Pre-conditions
ALL ITEMS MUST BE COMPLETE, UNLESS OTHERWISE NOTED An example of optional data could be personal information such as age and race, which are used to determine participant demographics. Also, a narrative section if they wanted to include any specific comments, concerns, or suggestions.

Post-conditions
The data is recorded and stored anonymously in a database

Page | 36

Use Case Diagrams


Brief Narrative for Use Case Diagrams
These use case diagrams below display all of the use cases and actors for the system These use case diagrams explain who is involved in executing each of the use cases associated with the Louisville Urban Leagues Urban Youth Golf Program. Each ellipse inside the box represents a different use case. A use case explains what must be done to meet the system requirements of the program. Each stick figure outside the box represents an actor. An actor is the person who interacts with the system. Each actor is connected to the use cases that he/she is responsible for interacting with.

List of Use Case Diagrams provided


Rising Fifth Graders: Summer Rising Fifth Graders: School Year Street Academy Supplemental Education Services Digital Connectors Doing the Right Thing: Youth Expo Education Summit Golf Scramble Generate Reports Generate Grants

Page | 37

Use Case Diagram: Rising Fifth Graders: Summer

Rising Fifth Graders: Summer

Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 38

Use Case Diagram: Rising Fifth Graders: School Year

Rising Fifth Graders: School Year

Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 39

Use Case Diagram: Street Academy

Street Academy

Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 40

Use Case Diagram: Supplemental Education Services

Supplemental Education Services


Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 41

Use Case Diagram: Digital Connectors

Digital Connectors
Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 42

Use Case Diagram:Doing the Right Thing: Youth Expo

Doing the Right Thing Youth Expo


Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 43

Use Case Diagram: Education Summit

Education Summit
Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 44

Use Case Diagram: Golf Scramble

Golf Scramble
Enroll Students
*

Track Participant Satisfaction

* *

Parents * Program Director *

Track Benchmarks Achieved


*

Program Assistant

Generate Report

Page | 45

Use Case Diagram: Generate Reports

Generate Reports

Create Report
*

* *

Update Report
* *

* *

Program Director Program Assistant * *

Print Report

Approve Report

Page | 46

Use Case Diagram: Generate Grants

Generate Grants

Create Reports
* *

* *

Manage Finance Reports

* *

Program Assistant

Program Director *

Generate Grants
*

Finance Manager

Page | 47

Sequence Diagrams
Brief Narrative for Sequence Diagram: Enroll Digital Connectors
The sequence diagram for the Enroll Digital Connectors use case has a boundary class that is the system menu of the Louisville Urban League. The menu will communicate with the staff member completing this use case. The controller class is the Track Client Manager. The entities of this use case were found through textual analysis of the main flow. All of these entities were the main nouns of the main flow and the operations were the verbs. The use cash flow is presented on the left hand side to help with clarity.

Sequence Diagram: Enroll Digital Connectors

1.Parents or students fill out enrollment from through the Web Site or in the office 2.The enrollment application (system) asks for which program(s) the parents or students are interested in 3.Student pick the program(s) they are interested in 4.Students pick Digital Connectors 5. Students continue fill out the from 6.The system asks the student to complete a test based on the program they choose

: Enrollment Application
Parent
Enroll Digital Connectors
Return message Fills Information In Return message

<<create>>

: Enrollment Form

Exit the Form

Form disappeared

Student Enrolled

9.Parents or Students exit the Web Site

Page | 48

Brief Narrative for Sequence Diagram: Track Rising Fifth Graders; School Year
The sequence diagram for the Track students Information use case has a boundary class that is the system menu of the Louisville Urban League. The menu will communicate with the staff member completing this use case. The controller class is the Track Client Manager. The entities of this use case were found through textual analysis of the main flow. All of these entities were the main nouns of the main flow and the operations were the verbs. The use case flow is presented on the left hand side to help with clarity.

Sequence Diagram: Track Rising Fifth Graders: School Year

:Tracking Application
1.Parents or students fill out Tracking from through the Web Site or in the office 2.The Tracking application asks for which program(s) the parents or students are enrolled in 3.Student updates the program(s) they are enrolled in 4.Students add the grades and dates
Exit the Form

Parent
Open Tracking Application
Return message Update/Add Infromation Return message

<<create>>

: Tracking Form

5. Students continue fill out the from 6.The system asks the student to save and submit the tracking form 7.Parents or Students exit the Web Site

Form disappeared

Tracking Form has been Updated

Page | 49

Brief Narrative for Sequence Diagram: Generate Reports; Golf Scramble


The sequence diagram for the Generate Reports use case has the same boundary class, the system menu. The use case also a controller class, the Report Manager. This class coordinates the report functions of the system. I used textual analysis to find the entities and operations of the use case. The entities are report template, date range, and other criteria. The operations involve selecting the report manager from the system menu, and selecting the criteria entities, and generating the report. When the report is generating it creates a new boundary class, Report, which is displayed to the user.

Sequence Diagram: Generate Reports

:Report Application
Director: Kevin
1.Imani or Kevin open Report Application 2.Select the attributes that are needed 3.Run Queries to get the desired information 4.Reports are generated 5.Print the reports 6. Close the Report Form after the Reports are printed
Exit the Form

Open the Report Application


Return message Run Queries to get desired Information Return message

<<create>>

: Report Form

Form disappeared

Report has been Generated

Page | 50

Class Diagram
Brief Narrative for Class Diagram
The purpose of the class diagram is to explain the classes involved in the system that are realized through each use case. The diagram displays the data items of each entity as well as the functions each class can perform. For example, a staff creates and completes a funder form, which in turn supplies the required information for a new funder class in the system. Contact information is a common field required for multiple entities, such as clients and employers, so it is associated with all of these entities. To find these classes we read through the use cases, looking for the key nouns which become the classes and their attributes and the verbs which become the operations they perform. The client class contains all of the information necessary to represent a client in the system, such as their active status, their basic info such as birth date and name, marital status etc. It is related to survey forms as they are the ones who fill out the survey and the contact info class as the system must store their contact information. The reports are connected to virtually all classes although not directly as it is dynamically created. Because of the widespread use of reporting it is not shown on the diagram for ease of reading, but it will be all relevant classes, such as staff members, funders, jobs, employers, and clients. The classes necessary to implement reporting, such as criteria and date ranges, are shown.

Page | 51

The Louisville Urban League Database System Project Partial Class Diagram within the Team

Shareholders -Donator +Gives Grants() +Create Grants () 0..* 2 Program Director -Boss +Report Generates () +Creates and Find Grants()

Parent -Guardian +Enrolls Child() +Attends () 2 1..* -End5

Enroll -sign-up -register +Fill out() 1..*

1..* Program Assistant -Program Organizer +Set Benchmarks() +Takes Attendance () +Teach() 1

0..* Report -Program ID -Year +Creates Charts and Graphs () 1..* -End2 1..* 1..* 0..* Student

1..* Tracking -Program ID -Student ID -Date +Store Forms() +Retrieve ()

1..*

-End6 1..*

-ID number +Learns() +Attends to Program ()

Page | 52

The Louisville Urban League Database System Project Complete Class Diagram within the Group

2 frmReport +reportData +PageLoad() +btnNewReport() +GenerateReport() +btnLoadReport_Click() +PrintReport() Parent -Guardian +Enroll Child() +Attends () Enroll -enrollName -enrollData +CreateEnroll()
frmDigitalConnectorsTest 1 +PageLoad() +btnPrintTest()

1..*

2
*

Shareholders -donor -date -amount -program +CreateDonation() +CreateGrants () 0..*

Report -reportName -reportData -reportStudentID -reportAttendance -reportGrade -reportBenchmarks +CreateReport() +LoadReport() 0..*

New Programs -programName -programSubject -programAgeRange -programDate -programFunds -programLength -programCoordinators -prorgamSize +btnCreateProgram_Click() +btnLoadProgram_Click() +Page_Load() +btnDeleteProrgam_Click()

DigitalConnectorsTest -testName -testDate -testVersion -testMultipleChoice -testFillInTheBlank -testShortAnswers -testTrueFalse +CreateTest() +LoadTest()

Survey newGrants -grantName -grantCompany -grantAmount -grantPurpose -grantLength -grantRequirement -grantComments +btnCreateGrant() +btnLoadGrant() +btnDeleteGrant() *

2
0..*

Program Director -userName -password -permissionLv1 +Page_Load() +btnSubmitUser_Click() +btnDeleteUser_Click() +btnGenerateReport()


* *

2
*

Tracking -Program ID -Student ID -Date +Store Forms() +Retrieve ()

-surveyName -surveyDate -pre-survey -post-survey -surveyTrueFalse -surveyMultipleChoice +CreateSurvey() +LoadSurvey()

frmAttendanceForm +btnNewAttendanceForm() +btnLoadAttendanceForm() +btnPrintAttendanceForm() +btnDeleteForm()

frmLogin * * * Donation frmNewGrants +grantName +grantCompany +grantAmount +grantPurpose +grantLength +grantRequirement +grantComments +Page_Load() +btnCreateGrant() +btnLoadGrant() +btnDeleteGrant() +btnPrintGrant() +btnUpdateGrant() -DonorName -Date -Amount +CreateDonation() User -userName -password -permissionLv1 +Page_Load() +btnSubmitUser() +btnDeleteUser_Click() * frmNewPrograms +programName +programSubject +programAgeRange +programDate +programFunds +programLength +programCoordinators +prorgamSize +Page_Load() +btnSubmit_Click() -userName -Password +ValidateUser() +Page_Load() +Submit_Click() +Redirect()

* frmSurvey * * +PageLoad() +btnNewSurvey() +btnLoadSurvey() +btnPrintSurvey() +btnDeleteSurvey()

AttendanceForm -attendanceFormName -attendanceStudentNames +CreateAttendanceForm() +LoadAttendanceForm()

1..*
1

1..*
*

Program Coordinators -userName -password -permissionLv1 +btnSetBenchmark_Click() +btnUpdateAttdance_Click() +Page_Load() 1

frmAddDonation +donor +date +amount +Page_Load() +btnSubmit_Click()

1..*

Student +LastName +FirstName +Middlelnitial +Address +City +State +Zip +HomePhone +CellPhone +WorkPhone +Email +CreateIndividual() +Redirect() +GetIndividual() +UpdateIndividual() +DeleteIndividual() +InkUserDetails_Click()

frmEnroll +ID number +LastName +FirstName +Middlelnitial +Address +City +State +Zip +HomePhone +CellPhone +WorkPhone +Email +gender +race +idNumber +aptNumber +CreateIndividual() +Redirect() +GetIndividual() +UpdateIndividual() +DeleteIndividual()

Page | 53

Database Design Considerations


Brief Narrative for Database Design Considerations
The initial database design for the Louisville Urban League consists of 10 different tables as shown in the ERD below. These tables were formulated based on the classes that were determined and then normalized in 3NF to reduce data redundancy and to reduce the risk of data anomalies. Inside each table depicts the data that each table would store, as well as the type of variable that would be used to store the data. Each connecting line represents the relationship between each table. The multiplicity of each relationship is depicted by the pair of numbers on each end of the connecting line

Page | 54

Database Design Considerations

Student PK StudentID LastName FirstName School Grade PhoneNumber Email Street# StreetName City County ZipCode Race/National Origin Gender Email(youth) ECE_Acc ECE_Exp /GPA

Program Enroll PK PK,FK1 FK2 StudentID ProgID ProgName Date Time Location ProgID

Benchmarks/Outcomes PK B/OID Director B/ODescription Program B/O PK,FK1 PK,FK2 Report PK FK1 FK1 ReportID B/OID Description DirectorID ProgID B/OID PK DirectorID LastName FirstName

TrackBenchmarks/Outcomes PK,FK1 PK,FK2 B/OID DirectorID

Parent PK FK1 ParentID Granters StudentID FirstName LastName HomePhone CellPhone WorkPhone Street# StreetName ZipCode BestTimeToCall Email(Parent) PK GranterID GranterName ReportID GrantTotal

FK1

Page | 55

Windows Navigation Diagrams


Brief Narrative for Windows Navigation Diagram: Login Diagram
This navigation diagram here is for the Login process. Initially one would need to select the correct login type that they needed to perform, that is whether or not he or she was a student or staff member. They would then select the correct button by clicking on it. For both, it would then take them to their appropriate login page and they could either login, or select the forgot password button. For students, after selecting login they could then choose between enroll (to enroll for a program), survey (to complete a survey regarding a current or previous program), or logout. Enroll would take them to the enrollment application and survey would take them to the survey application. Logout option would then take them to a screen displaying the message logged out and this would be the same message displayed when the staff chooses logout from their screen. For either staff or student that clicks on forgot password, it will then take them to a screen to send an email. After completing that, the screen would then display the message email sent. When staff login, they can select from track, programs, grants, reports, or logout. By selecting any of these first four options it would then take them to the application screen for that process. By selecting logout it would then take them to the message screen as previously mentioned.

Page | 56

Windows Navigation Diagram: Login Diagram-Model 1

<<Window>> Login <<button>> Login Click Login Button

<<Window>> Program

<<Window>> Student

<<Window>> Enrollment

<<Window>> Attendance

<<Window>> Track

<<Window>> Report

<<Window>> Grant

Page | 57

Windows Navigation Diagram: Login Diagram-Model 2

<<Window>> Menu

<<Button>> Student

<<Button>> Staff

<<Window>> Login Student

<<Window>> Login Staff

<<Button>> Login

<<Button>> Forgot Password

<<Button>> Forgot Password

<<Button>> Login

<<Window>> Student <<Application>> Enroll <<Application>> Survey <<Button>> Enroll <<Button>> Survey <<Button>> Logout

<<Window>> Forgot Password

<<Window>> Staff <<Button>> Track

<<Application>> Track <<Application>> Programs <<Application>> Grants <<Application>> Reports

<<Button>> Send E-mail

<<Button>> Programs <<Button>> Grants

<<Message>> Email sent

<<Button>> Reports <<Button>> Logout

<<Message>> Logged out

Page | 58

Brief Narrative for Windows Navigation Diagram: Programs Diagram


From the programs window, you can select a program or simply view one. It then allows a choice for the user to choose between direct service programs or community engagement programs. It then will list the available ones based on the selection. Once choosing their specific program it will take them to a screen to update, track, or remove that program. Updating it will then allow them to save it and print it if desired. Removing will then take them to an additional screen requiring them to select delete program. This will help ensure that it is not accidentally selected from the previous screen and deleted, as this serves as a doublecheck. If they choose track program it will then take them to a screen to choose between what area they want to track, including students, programs, attendance, grants, or reports. They can then click on their option

Page | 59

Windows Navigation Diagram: Programs Diagram

<<form>> Add Program Form <<button>> Add Program

<<Window>> Program Click Add Program Button <<button>> Add Program <<button>> Delete Program <<button>> List Program Click List Program Button Click Delete Program Button <<form>> Delete Program Form <<button>> Delete Program

<<report>> Program List

<<report>> Urban Youth Golf Program

<<report>> Summer Youth Employment

<<report>> Project Ready Summer Reach

<<report>> Project Ready School Year

<<report>> Street Academy

<<report>> Digital Connectors

<<report>> Supplemtal Education Services

<<report>> Rising Fifth Graders School Year

<<report>> Rising Fifth Graders Summer

<<form>> Update Program Form <<button>> Update Program

Page | 60

Brief Narrative for Windows Navigation Diagram: Generate Grants Diagram


From the Grants Window you have two Buttons, the Apply for Grant Button or Select Grant Button, if you click on the Apply for Grant you will get to Apply for grant from where you can apply for the grant but if you click on the Select Grant Button you will be taken to Select Grant Form where choose from either view grant where you print it or to Update Grant Form where you can update it, save it and therefore print it.

Page | 61

Windows Navigation Diagram: Generate Grants Diagram

<<Window>> Grants <<Button>> Apply for Grant <<Button>> Select Grant

<<Form>> Apply for Grant <<Button Apply>>

<<Form>> Select Grant <<Form>> View Grant <<Button>> View Grant <<Button>> Update Grant <<Button>> Print

<<Form>> Update Grant <<Button>> Save <<Button>> Print

Page | 62

Brief Narrative for Windows Navigation Diagram: Enrollment Diagram


From the Enrollment Window you get to either click on Enroll Student Button or dis-enroll Student Button, if you click on the Enroll Student you get taken to Enroll Student Form where you can either click on Enroll to enroll the student or click on Select Program Button which will take you to the Select Program Window where you can select the program you want so you can view it. But if you click on the dissenroll student so you can disenroll him or her from the disenroll student from

Page | 63

Windows Navigation Diagram: Enrollment Diagram

<<Form>> Enroll Student <<Button>> Enroll <<Button>> Select Program

<<Window>> Enrollment <<Button>> Enroll Student <<Button>> Disenroll Student <<Button>> Disenroll <<Form>> Disenroll Student

<<Window>> Select Program

<<Button>> Select Program <<Button>> View Program

Page | 64

Brief Narrative of Windows Navigation Diagram: Track Diagram


From the Track Window you have many options to click on; Student Button, Programs Button, Attendance Button, Reports Button, and Grants Button. If you click on the Students Button it will take you to the Student from where you can choose; View Student Information Button, Update Student Information Button, or Remove Student. If you click on the programs Button you will be taken to Programs Window where you will choose to select the programs and view them. The attendance Button will get you to choose between Select Student, program, programs date or update record. If you click on Reports Button from the track Window you will be taken to Report Window where you get to choose between Select Report or Generate Report and the last window is Grant Window where you can either click on Select grant or apply for grant.

Page | 65

Windows Navigation Diagram: Track Diagram

<<Form>> Students <<Button>> View Student Information <<Button>> Update Student infromation <<Button>> Remove Student <<Button>> Students <<Button>> Programs <<Window>> Reports <<Button>> Select Report <<Button>> Generate Report <<Button>> Grants <<Button>> Attendance <<Button>> Reports <<Form>> Attendace <<Button>> Select Student <<Button>> Select Program <<Button>> Program's Date <<Button>> Update Record <<Window>> Track <<Window>> Programs <<Button>> Select Programs <<Button>> View Programs

<<Window>> Grants <<Button>> Select Grant <<Button>> Apply for Grant

Page | 66

Brief Narrative for Windows Navigation Diagram: Generate Report Diagram


From the Reports Window you can click on the Generate Report button or Select Report Button, if you click on Generate Report button that will take you to the Generate Report Form where you choose from either generate or view the report and if you choose view Report it will get you to view it, save it or print it. If you click on Select Report from the Reports Window it will take to the select report form where you can choose from the View, Update, or Delete Button, from the Update Report from you get to save it or form the Delete Report From where you get to delete the report.

Page | 67

Windows Navigation Diagram: Generate Report Diagram

<<Window>> Reports

<<Button>> Generate Report

<<Button>> Select Report

<<Form>> Generate Report <<Button>> Generate <<Button>> View

<<Form>> Select Report

<<Form>> View Report <<Button>> Save <<Button>> Print

<<Button>> View <<Button>> Update <<Button>> Delete

<<Form>> Update Report <<Button>> Save

<<Form>> Delete Report <<Button>> Delete

Page | 68

Physical Architecture Design Deployment Diagram


Brief Narrative for Physical Architecture Design: Deployment Diagram
The deployment diagram is used to show how the hardware and software requirements will align and how they will connect with each other. Since it is all local access the client indicated that if users need to use the application there is a remote access server they can log in to all of the connections are over the LAN at the Urban League office for the purposes of this product. The servers will have the various applications necessary, such as IIS or Apache on the web server, SQL server on the database server, and the backup software on the backup server as indicated in the system requirements. It also shows how the client will only need a web browser to access the system. The client also indicated that he would like cold spares in the event of a hardware failure. These are the duplicates of the three servers that could be spun up in the event that one failed or needed maintenance

Page | 69

Physical Architecture Design Deployment Diagram for Model 1

System
uses Enrollment

Parent or Student

uses Fill Out Form

This is the beginning of the system. Which will be accessed through a workstation that is inside of the Louisville Urban League
uses

uses

SQL Database * -End1

IT Support * -End2

Coordinators uses

Student Profiles

Attendance

Queries To Generate Grants

uses uses Kevin Imani

The SQL Database will be stored on a Windows Server 2003 or Newer. The information inside the form will be stored in different fields in the Database.

With the new system Kevin and Imani could create queries to help produce fast and up-to date information.

From the database digital Attendance sheets can be made for each program. The Attendance results will go back into the Database to Update individual student profiles.

Page | 70

Physical Architecture Design Deployment Diagram for Model 2

System

Enrollments

uses

Students

Parents

uses

Fill Out Forms

SQL Database

uses

uses IT Support

uses Queries uses

Kevin
uses Students Profils

uses

Imani
Track Attendance

Coordinators

Reports

Attendance
Generates

Page | 71

Gantt Charts
Brief Narrative for Gantt Charts
The Gantt chart below shows a list of project tasks for Iteration 2 and 3. To the left a task ID has been assigned for each Task Name. The chart also depicts the estimated duration of each task. The bar graph to the right visually states the start and finish dates from left. The bar graph also depicts the dependencies of each task. It shows when each task begins as well as which tasks must be completed before each task can be initiated.

Page | 72

Gantt Charts Diagram

ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Task Name Complete Vision Document Complete System Requirements identify the use cases Initial architecture considerations Determine the high risk items for the project Create Prototype Construct Case Descriptions Use Case Diagram Create High-Level Prototypes Sequence Diagrams Class Diagram Revise Class Diagram Database Design and Data Definitions User Interface Prototype User Interface Navigation Diagram Revise System Requirements Revise Use Case Diagram Revise Trace Matrix Revise Sequence Diagrams Create Physical Architecture Design Design Procedures for security concerns Create Elaboration Prototype

Start 2/11/2011 2/16/2011 2/21/2011 2/11/2011 2/22/2011 2/21/2011 2/22/2011 3/1/2011 3/11/2011 3/30/2011 4/6/2011 4/7/2011 4/12/2011 4/14/2011 4/20/2011 4/19/2011 4/19/2011 4/19/2011 4/20/2011 4/21/2011 4/25/2011 4/26/2011

Finish 2/15/2011 2/18/2011 2/21/2011 2/21/2011 2/23/2011 2/21/2011 2/25/2011 3/10/2011 3/14/2011 4/5/2011 4/11/2011 4/11/2011 4/14/2011 4/19/2011 4/20/2011 4/19/2011 4/19/2011 4/19/2011 4/21/2011 4/26/2011 4/27/2011 4/28/2011

Duration 3d 3d 1d 7d 2d 1d 4d 8d 2d 5d 4d 3d 3d 4d 1d 1d 1d 1d 2d 4d 3d 3d

Feb 2011

Mar 2011

Apr 2011

2/6 2/13 2/20 2/27 3/6 3/13 3/20 3/27 4/3 4/10 4/17 4/24

Bakre Brandon All Baker Baker Adam All All Matt All All Brandon Adam Baker Brandon Matt Brandon Adam Matt Baker Bakre

Page | 73

Prototypes
Brief Narrative for Enrollment Form Prototypes
These prototypes are screen mockup showing the general layout of the Enrollment Form on the Louisville Urban League Web site, used in the Enroll Students use case. The electronic form follows the same general format as the paper enrollment form currently in use, except the sections are split into several pages. Clicking the link at the bottom right corner of each page checks that all relevant fields on the page are filled out with information in the proper format. If not, an error message box will pop up on the screen, telling the user which fields are invalid. When all are validated, clicking the link will navigate on to the next page. After completing the Youth Information section of the form, the user will be sent to a page asking him/her to print out the Child Release Form attached to this document. Another link, labelled Finish Enrolling, will submit the student information to the database.

Page | 74

Prototypes display I. Enrollment Form

Page | 75

Page | 76

Brief Narrative for Program Evaluation Form Prototypes


These prototypes are screen mockup showing the general layout of a Program Evaluation Form on the Louisville Urban League Web site, used in the Track Participant Satisfaction use case. The electronic form follows the same general format as the paper evaluation forms currently in use, except for the following differences: The sections are split into several pages to prevent clutter. Name and Grade fields do not need to be entered, as this information is retrieved from the Student table when the user logs in. As with the enrollment form, clicking a link does not immediately take the user to the next step. The system must do a validation check to ensure that all data are in the correct format, and that nothing is left blank. The Submit link at the bottom of the second page retrieveswhat is in memory and stores it in the SurveyForm table.

Page | 77

Prototype display II. Program Evaluation Form

Page | 78

Page | 79

Case Studies/Analysis
Brief Narrative for Case Studies
This section will cover all the six case studies I had written in my CIS 410: Management of Information Systems class. We were tasked with reading cases about several books, identify the problem, and compare and contrast their options. We also had to use theories from the class discussions and textbooks to support our claims. These are good example of my analytical, communication, and business analysis skills.

Page | 80

Case Study
Case Study #1 Burlington Northern: The Ares Decision

By: Bakre Idiazza

Page | 81

Case Study 1- Burlington Northern: The Ares Decision Part 1: Business Analysis
The mission of Burlington Northern (BN) as a company is, to offer the market with products of consistently superior quality at price levels that are fair and competitive, living up to this mission is becoming more and more challenging with the decreased profits. Burlington Northern (BN) has many processes in place to manage the day-to-day functions of the company. These processes are not always the best. Not only that, but there still may be some processes lacking that can help improve the functionality of the daily operations for the company. The current existing operations that contribute to this problem includes Meet and Passes, scheduling, and maintenance-of-way (MOW). These processes need improvement for the business to be more profitable. Meets and Passes describes where one train is directed off to a siding when two trains meet on a single track. It appears that BN has a lack of control over this. With as many as 10,000 meets and passes occurring daily, BN can definitely benefit from improvement in this process. Improved scheduling can prevent the amount of time trains idle awaiting others to pass. Dispatchers ideally should have their focus on five to seven trains. However, they are responsible for 20 to 30 in a shift, which means that certain ones are getting less attention. The technology being utilized for scheduling was developed around the 1920s, giving intermodal and merchandise traffic priority. This is decreasing the attention given to that largest revenue generators, coal and grain.

Page | 82

The MOW crew is a weak system within BNs operation. The inability to predict exact train arrival times, clearing workers much sooner than expected train arrival, physically getting out to inspect fuel gauge, and many other aspects attribute to this weakness. This business is driven by the high demand need to transport large quantities of items over long distances. This includes coal, agricultural, commodities, industrial products, intermodal, forest products, and food and consumer products. Coal represents about one-third of BNs revenue, therefore making it the largest source of revenue for BN. (Cash) Improvements to existing Meets and Passes system, MOW vehicles, dispatching is very critical to the companys ability to improve asset utilization, provide better service, and reduces costs. However, BN is already facing a great deal of debt and to purchase such an expensive system would only worsen this situation up front. BN does have the strength of being a wellestablished company with experienced employees. However, its weaknesses are the lack of updated systems to handle certain processes, ultimately leading to lost profits. BN hired the Strategic Decisions Group (SDG) to help integrate the information obtained from individual studies into a single analysis. The SDG concluded: The potential benefits of ARES is large but highly uncertain. Using the best information available, we estimated the gross benefit in the range of $400 million to $900 million, with an expected present value of about $600 million. This benefit should be weighed against the cost of approximately $220 million (present value) . The benefits depend greatly on implementation success: The system design must be sound, a strong implementation plan must be developed, and functional groups across the BN system must be committed to using it to full advantage. (Cash)

Part 2: Business Issue/Problem


Page | 83

BN is losing money in many areas that could be prevented. Investing in Advanced Railroad Electronics System (ARES) could help these problems within BN. However, ARES is estimated to cost $350 million. ARES will allow better control over the companys assets according to Joe Galassi, executive vice president, Operations. Scheduling and efficiency will improve, allowing us to offer more reliable and predictable deliveries. This system would be great in helping to achieve what Goldblatt has taught us in The Goal, which is that we want to balance flow, not capacity. The company managers were still split over whether or not this would be a wise investment, as in whether the benefit would outweigh the cost. The companys goal as The Goal points out should be to make money; otherwise, it is not in business. Should Burlington Northern implement ARES?

Part3: Porters Five Forces Bargaining Power of Suppliers:


High barriers to entry into the production of locomotives, so the few current suppliers dominate the market place. Risk of loss of a supplier would significantly restrict the profitability of BN The supply of both Rail and locomotives are crucial to the BN

Bargaining Power of Buyers:


BNs competitors provide much the same services and routes, allowing shippers to negotiate between the competitors.

Page | 84

Transportation of goods using rail is not very considerable to shippers, they are more willing to use trucks as they provide a high level of customer service of being able to deliver door to door.

Threat of Substitute Products:


Using trucks instead of BN to transport goods is a realistic threat that must be overcome. BNs major competitor within the railroad business is Union Pacific (UP). There is also competition from trucks

Threat of New Entrants:


There is a high level of capital investment to start a railroad company The railway industry is dominated by a few main competitors

Rivalry among Competitors:


There is little differentiation between product and service offerings Competitors want to gain a competitive edge over their counterparts by providing the most reliable and predictable deliveries. Trucks provide a heightened level of customer service of being able to deliver door to door. Even though this service costs more, it is worth it to many

Part 4: Stakeholders

Page | 85

Burlington Northern: The Company could see an increased profit from increased efficiency and improved processes. Without implementation though, the company could see negative financial implications from less efficiency, wasted fuel, time, etc.

Employees: Their jobs could be made a lot easier for them to perform with the utilization of such a high tech system; however, their jobs could be jeopardized with the increased efficiency requiring less need for more employees.

Managers: They could see increased productivity and efficiency of their employees, but also still be at a risk of job loss when the new system implementation proved to be so efficient that the amount of staff currently employed was now unnecessary.

Customers: With implementation of the system, they could see improved reliability and predictability of deliveries because of the new efficient system.

Part 5: Alternative actions: Case 1: Implement ARES


This system obviously holds many benefits within it if it is implemented. ARES could improve service, potentially generate higher revenue, and result in cost reductions. There would be less staff required to run a scheduled railroad, therefore BN would see the benefit of the cost reduction. Employees and managers however could lose their jobs with the reduction of staff. The remaining managers would likely see an increase in their employee satisfaction with the more efficient system making their jobs easier. The remaining managers would also have fewer problems to deal with since scheduling would be better managed. The customers

Page | 86

of BN would receive improved service with the increased reliability and predictability of their deliveries.

Case 2: Merge with another company


BN could merge with another to share the costs and benefits. The partner choice would be complicated however as it would need to be from the same industry but not a direct competitor. The shared costs would be less money out of the pocket for BN, while still receiving the same benefits. This would still result in a reduction of staff, therefore jeopardizing some employees and managers jobs. The customers would receive the benefit of more reliable and predictable deliveries with the implementation of the system.

Case 3: Do nothing
This approach would maintain the companys status and operations. BN would not see any increase revenues with this decision to do nothing. The managers and employees would likely maintain at their current job and status. Customers would see no changes with the way operations ran.

Part 6: Recommendation
My normative recommendation would be to do nothing. The alternative course of action I chose focuses on BN making the most ethical decision that could be made out of the above options. With the other options, the benefits do not outweigh the costs, nor are the benefits even guaranteed. This system is not an affordable option for them at this time, not to mention that it would only add on to their debt. The perceived benefits from this system are based on the assumption that all aspects would be fully implemented and all employees would Page | 87

use the system to its fullest extent to reap the greatest benefit. To make such a drastic high tech change within a company that has been utilizing such old ways for so long would be difficult to get the desired compliance needed to gain the fullest benefit. Goldratt emphasizes in his book The Goal that focusing on one thing alone cannot create the optimum outcome the company desires. That means to implement this system with the hopes of the ultimate outcome would not work; the system alone cannot do it. Staff attitudes toward change and compliance are an issue also, amongst many other areas. In addition, the task of getting an appropriate partner to share the costs with that is not a direct competitor would prove greatly difficult. The do nothing approach would allow the company to continue to function on its current operations. This would also leave open the option of using another system in the future if one became available at a much cheaper cost and in a tested environment in which the benefits would be able to outweigh the costs. In addition, some of the lessons I learned from The Goal taught me that operating at full capacity can actual decrease throughput, whereas it can also decrease morale among employees and restrict internal information flow. A final consideration that The Goal has brought to my attention is that operational expenses is just part of the system, as the money put into the operational expenses turns into inventory and throughput.

Part 7: Conclusion
It is obvious that there is some room for improvement. Jumping on board to buy the newest and most expensive system on the market is not always the best solution. Five simple steps could be followed to possibly help solve this situation easily and with low cost. Shift all responsibility for the organization of work from the workers to the manager; use scientific Page | 88

methods; select best person to perform job; train the worker to do the work efficiently; and monitor worker performance are the five steps that Gareth Morgan helped outline to us in his book Images of Organization. These steps are based on Frederick Taylors scientific management. (Morgan) After all, if needing to dig a hole for a fence, we do not immediately go for the big guns and rent a backhoe do we? Instead, logically we attempt to use a shovel and the people on hand to do the job first. BN needs to utilize what they have on hand first, and then move on to other options when that does not work.

Page | 89

Case Study Case Study

Case Study #2 Symantec

By: Bakre Idiazza

Page | 90

Case Study 2- Symantec Part 1: Business Analysis Mission


Symantec designed, delivered, and supported a diversified line of software for the information management, productivity, and software development needs of business users. (Cash) This company, founded in 1982, achieved rapid growth and quickly grew from 30 to 316 employees. (Cash)

Problem
Symantec is a rapidly growing company and due to this rapid growth, they experienced some internal communication problems. One product manager mentioned that as a company of 30, communication is not a problem, as you can shout over the side of a cubicle, but as a company grows there is a need for a more formal form of communication. (Cash) An individuals interpretation as to why there were communication problems seemed to depend on their position within the company. (Cash) It needs to be considered that every action that does not bring the company closer to its goal is not productive. (Goldratt). Therefore, this lack of structured communication is counter-productive. A company that is not productive does not make money, and we all know that the companys number one goal, according to Goldratt, needs to be to make money. If only this company was like those organisms that adapt well to their environment, then it would have adapted well to the rapid growth. However, certain species of organizations are better adapted to specific environmental conditions and this species obviously wasnt ready to adapt. (Morgan)

Part 2: Organization Structure


Page | 91

This company lacked a decent structure to streamline its communication process. Teams had meetings. Managers had meetings. There were some random meetings with randomly picked employees. However, without a solid structure to communication then the flow of communication internally was all over the place and not uniform.

Five Forces
Customers Symantec has a large line of software available for the needs of its business users. Customers included businesses, schools, and even individuals. Suppliers In this case, the suppliers are unique. Whereas, there is no tangible supply item provided really, unless you consider the blank packaging and discs for the software they developed. In addition, the computers they utilize to create their software could be vaguely viewed as supplies from the supplier (or the computer manufacturer). New Entrants The threat of new entrants was high. The computer industry was rapidly growing and the demand this variety of services and products was high. Substitutes The only substitutes to their products would be similar products used out of a web-based company that provides all the information electronically (such as mint.com is a money management system online only as compared with buying software at a store for this). Page | 92

Industry Competition There were highly competitive substitutes. These included the well-established companies Lotus and Ashton-Tate. (Cash)

Part3: Stakeholders
Symantec Stockholders/Investors As with any company, the Symantec stockholders/investors are directly impacted by a companys success. Management Mergers or restructuring of communication needs could directly affect the job security of management staff. Employees Employees are directly affected by the effectiveness of communication within a company and their jobs are highly dependent on a successful company. Any successful company must have successful communication. Customers Customers want the best products and service they can get, and the newest developments they can get.

Part 4: Alternative Actions Alternative Action 1: Relocate the company to one central location
There are five main product groups. Two of the five are at the corporate headquarters. Of the other three, one was in Novato, CA; one was in Mountain View, CA; and the last one was Page | 93

in Bedford, MA. The lack of closeness makes it difficult for many of the groups to communicate amongst each other. Although, conference calls and video conferences are an option, these are never as effective as in person meetings. To centralize all of it out of corporate headquarters would lessen the distance gap, therefore easing communication. Initially however, the transition would have to be thoroughly planned in order to prevent and plan for any possible problems. Otherwise this transition (likely having a loss of some staff and gaining some new staff), could cause slowing of processes in the beginning while everyone was being accustomed to the situation. This could lead to decrease productivity, therefore decreased profit for stockholders/investors. Management and employees would be affected significantly, whereas some may lose their jobs out of unwillingness to relocate. Some may lose their jobs due to some positions not needed anymore once centralizing all of the company. The ones that did remain with the company would, in the long run, have a better work environment with better communication.

Alternative Action 2: Implement routine/structured meetings (starting from the bottom up)
Part of the implementation of this one would be to also include a companywide email of meeting minutes as the meetings went up the ladder (employees would need to meet to report to management, who would then report on up, so that the top executives would have all the information needed for their meetings). Stockholders/investors would see consistent profit and no change with this action. Managers would have better communication with the coworkers and employees. Employees would have more comfort knowing that their voices were being heard and likely have increased satisfaction with their job, leading to increased Page | 94

productivity. Customers would eventually see better products and customer service as a result of the improved communication technique.

Alternative Action 3: Do Nothing


Doing nothing is another alternative action. This would likely lead to continued lack of communication, eventually spiraling out of control likely. The stockholders/investors would see decrease in profits as communication worsened and productivity decreased because of this. The managers and employees would lack needed information and the feeling of being able to input information, leading to decreased satisfaction and productivity. Dependent on the amount of decreased productivity would depend on if their jobs could be in jeopardy. Customers would not receive the best products and services as the lack of communication between areas would prevent vital knowledge being shared.

Part 5: Recommendation
My recommendation would be to implement routine structured meetings from the bottom up. To have everyone all together to communicate at once is unrealistic. If all the teams have a meeting, then that information is brought by the team leaders to all the managers, then the managers take it on up higher, then everyone could be assured their voice was being heard. This would allow all people to be in the line of communication. Then at completion of the final step of the ladders meeting, there could be a companywide email of vital information, needed information, etc. To do nothing would ultimately lead this company to failure. To relocate everyone would shake up this already unstable situation. The best solution in this problem would be the easiest, least drastic, but would impact the most people, which is to implement the routine meetings. This would improve the internal communications Page | 95

and productivity. Therefore, increased productivity means increased money, and simply put, the goal is to make money. (Goldratt)

Part 6: Conclusion
The rapid growth and success of any company can be detrimental. Information technology will continue to affect businesses whether or not it is welcomed. (Fried) That is what influenced the rapid growth of this company. The rapid growth did not allow review and implementation of necessary procedures along the way to prevent failures, such as this communication failure. Before something reaches this extreme, if the company would have grown more slowly, the problem would have been identified sooner and resolved easier. Even though creating products is the foundation of Symantec, the greater challenge is to manage the company. (Cash) In order to gain control, of this issue, effective managers and professionals in all walks of life have to become skilled in the art of reading the situations they are attempting to manage or organize. (Morgan) However, if they get the situation under control and manage it well, then the company could see great increase in productivity (which equals increased money). After all, your companys goal is to make money or it is not in business. (Goldratt)

Page | 96

Case Study Case Study

Case Study #3 Webvan

By: Bakre Idiazza

Page | 97

Case Study 3- Webvan Part 1: Business Analysis Mission


"We are building the Last Mile to the consumer, was part of Louis Borders vision for Webvan. (Banks, Driessen, Oh, Scipioni, & Zimmenrman) Companies are seeking new ways to define and deliver integrated sales solutions. (Kalakota) The leaders of Webvan wanted to dominate the industry of online grocers and be the biggest and best. They planned to sell groceries to customers via the Internet and to deliver those groceries to the customers home within a specified period, specifically 30 minutes. They wanted to achieve this at a price comparable to traditional grocery store shopping for the consumer. Industry needs have spurred the adoption of new information technology. (Fried) This leads to such companies as Webvan.

Problem
Webvan had a great idea and enormous amount of capital to work with to attain their goals of becoming the powerhouse in this industry. In this world, rapid change and transformation are becoming the norm. (Morgan) How should they use their capital to ensure they obtain this goal while also making a profit? Afterall, the goal is to make money. (Goldratt)

Part 2: Organization Structure


Webvan was operating on a functional structure. In a functional structure, common activities are grouped together. (Cash) This is usually utilized when a company has exceeded its ability to be handled by a single group of people with one boss. Webvan never really gave it

Page | 98

a shot at the smaller type of functioning models, as their idea was growth, growth, growth, which is what caused them to lose sight of the goal.

Five Forces
Customers Customers have high power in this situation, as there is already a wellestablished offline or traditional grocery market. In addition, there is a wide variety of options, offline and online. Suppliers Suppliers power was high. Whether Webvan teamed up with a store or not, the prices would ultimately have a baseline determined by the supplier. New Entrants Threat of new entrants is high, as groceries is a high priority need. The online market had huge potential that had not yet been fully tapped. However, it is difficult to break into the grocery industry. There was also potential for already established traditional grocers to enter into the online aspect of this market. Substitutes Substitutes in this market are high. There are other web-based companies such as PeaPod and Streamline.com. There were some online companies offering weekly delivery for a monthly fee; some offered delivery of only non-perishable items, and some offered ordering online for pick up in store later. (Banks, Driessen, Oh, Scipioni, & Zimmenrman) Of course, there was always the option of the traditional grocery store also. Page | 99

Industry Competition Industry competition was high. There were already established online competitors. Traditional grocers also were competitors.

Part3: Stakeholders
Connor Stockholders/Investors As with any company, the Webvan stockholders/investors are directly impacted by a companys success. Employees Employees are directly affected by the success or failure of any company in which they work for. Customers Customers choices of grocery purchases are affected by any decision. Competitors Competitors are directly affected on a similar companys success or failure within a certain market.

Part 4: Alternative Actions Alternative Action 1: Get big fast (this is the alternative Webvan utilized)
The majority of capital was spent on distribution centers and technology needed to make their business processes efficient. By doing so, they hoped to achieve high customer satisfaction. Many companies have made massive investments in information technology. (Fried) They sunk a lot of money into expanding before success was guaranteed in one Page | 100

location. Adopting technology for the sake of technology can lead to major errors and losses. (Fried) Even with increasing customers, they still had increasing losses, which was attributed to infrastructure expenditures. They were too focused on becoming a powerhouse in the industry that they lost sight of the goal to make money. They also had too much focus on the technological aspect (as many of the leaders had technology or business background but no grocery background) and not enough focus on the grocery portion. Involving too much technology, including technical support staff, in the sales cycle drives up the cost of selling. (Kalakota) This unsuccessful approach led to losses for the shareholders and investors. Employees experienced layoffs, and then job loss. Customers benefited however, by receiving reasonably priced groceries. Not only did the customers receive reasonably priced groceries, but they also got them delivered, saving time and money. It was a win win situation for customers. The competitors in the traditional side of the market saw a small dent in business initially, and the competitors in the online side saw a large dent in business, as Webvan was offering groceries and delivery service at such a low cost that they could not match it and sustain business. In the end, both online and traditional grocers returned to their baseline status after the bankruptcy of Webvan.

Alternative Action2: Test business in one market


Before even testing business in one market, Webvan has contracted for distribution centers across America. (Banks, Driessen, Oh, Scipioni, & Zimmenrman) They had not yet sold their first product before signing many of these high dollar contracts. Building one center and seeing how successful it was and what needed to be tweaked to gain better success before expanding across several areas would be a better decision as the loss would not be as great if it Page | 101

is not a successful business venture. Shareholders and investors would not suffer such financial losses even in the event of failure since it would be on a much smaller scale, but hopefully on the brighter side they would be seeing a slow steady profit from this slower paced approach to the market. There would be fewer employees involved that would suffer. Customers would still reap the same benefits; it would just be a lower volume of customers initially. Competitors would not feel the entire impact up front.

Alternative Action 3: Team up with a traditional store


Teaming up with a traditional store would give the benefits of an already established name and customer base. There is a smaller potential profit margin, but anything is better than the greater than $1 billion loss. Shareholders and investors would see a slow and steady profit. Employees would have a better sense of job security. Customers would still have all the benefits. Competitors would still see some loss in their sales volume.

Alternative Action 4: Buy an already established chain


Buying an already established chain would have most of their needs already lined up and all that would need done would be the initiation of the technological aspect. Shareholders and investors would likely see slow steady profits from this wiser approach to the market. Employees would have a better sense of job security. Customers would still benefit from the services. Competitors would still see a dent in their sales, but not as much as rolling the company out nationwide.

Part 5: Recommendation
Groceries are a necessity. Alternatives 2, 3, or 4 would have all been viable solutions. My recommendation for the best course of action would be alternative 2, test business in one Page | 102

market. Starting on a smaller scale would allow for adjustments and changes made more readily and easily. Identifying a pattern by first finding disruptive or inefficiencies in existing models will help to drill deeper. (Kalakota) Identifying the pattern with the model helps determine how you achieve your end goal. (Kalakota) Had these last two sentences been followed after the initiation of the testing of the business in the smaller market, it would have helped lead to an overall success in the entire market. When re-engineering, marketers divide large markets into smaller segments. (Hammer) This is using the same concept, except we are not even to the re-engineering phase; this is still in the initiation phase. This is the way leading consumer product companies approach their market. (Hammer)

Part 6: Conclusion
The goal is to make money. (Goldratt) Any action that does not bring us closer to this goal is not productive. (Goldratt) The framework recognizes that E-commerce consists of three meta-levels, infrastructure, services, and products and structures. (Zwass, Vladimir) These three meta-levels had all aspects of them met within Webvan. There was no problem with their actual framework of the business. It was their overly eager ways of attempting to outgrow their britches that ultimately led to their failure. The failure of this company was simply because they lost sight of the goal; a companys goal should always be to make money, or it is not in business. (Goldratt) Unfortunately, Webvan spent too much focus on becoming the biggest and best the fastest they could, that they lost sight of this simple goal.

Page | 103

Case Study Case Study

Case Study #4 Waco Manufacturing

By: Bakre Idiazza

Page | 104

Case Study 4-Waco Manufacturing Part 1: Business Analysis Mission


Waco Manufacturing is a leading supplier of custom-machined parts to the automotive industry. (Cash)

Problem
The problem is simple and straight forward, in which the information is not flowing as well as it should within the company. They installed a new system that could track their employees (as they may have asked themselves the same question that Goldratt asks, Can we assume that people not working and making money are the same thing?) and re-route phone calls to the phone nearest the employee rather than them missing the call if they step away from their desk. (Cash)

Part 2: Organization Structure


The communication process was lacking within this organization. Even with the new transceivers that could track employees and route phone calls, there was still an apparent lack of communication amongst some.

Five Forces
Customers Automotive dealers/manufacturers are the customers as Waco provides them with custom-machined parts. (Cash) Suppliers Page | 105

Suppliers could vaguely be viewed as the companies that provide the materials to make the custom parts (such as metal companies). New Entrants The threat of new entrants exists, as the automotive industry at this time was a rapidly growing industry. Therefore, the need for custom parts was high. Substitutes The substitutes for Waco could be people utilizing other transportation methods (such as train or boat) therefore rendering their services as useless. In addition, original parts rather than custom made ones could be substituted. Industry Competition Industry competition would be any other company offering custom-machined parts for the automotive industry.

Part3: Stakeholders
Waco Stockholders/Investors As with any company, the Waco stockholders/investors are directly impacted by a companys success. Management Communication lapses could result in lack of necessary information. Employees Employees are directly affected by the effectiveness of communication within a company and their jobs are highly dependent on a successful company. Any successful company must have successful communication. Page | 106

Customers Customers want the best products and service they can get, and the newest developments they can get, including this new set of designs for composite based products.

Part 4: Alternative Actions Alternative Action 1: Removal/Deactivation of Transceivers Phone functionality


This would force them to go back to the old form of communication of face-to-face or direct phone calls at specific times. This would encourage communication that is more organized since one would know they could not just route a call to the nearest phone to that employee at his or her convenience. Management and employees would benefit from better communication. Stockholders and customers would benefit from the increased efficiency the company would have with the improved communication.

Alternative Action2: Eliminate the entire Transceiver System


This is an alternative; however, it seems rather too extreme of a measure to take. The stockholders and customers could possibly see a negative effect because of decreased productivity if no one feels like big brother is watching over them anymore. Being able to track employees can be a helpful tool, but that is not the issue. The issue is that their work follows them throughout the entire place with the phone call re-routing. This would also result in more forced faced to face communication. (Cash)

Alternative Action 3: Do Nothing

Page | 107

Doing nothing is the other alternative action in this case. With doing nothing, no direct negative impact would be seen for any party immediately. However, any potential positive impacts would be slower to come with this inadequate communication process. Over time a negative impact could be seen if they get burnt out by the constant bother of the phone. Humans are not immortal, and they can and will get burnt out. (Fried) They are no longer able to just step away from their office to escape the phone for once, as this system allows calls to be routed near wherever they are. This also reflects on some of the lessons Goldratt teaches us in The Goal and that is when operating at full capacity you actually decrease throughput. (Cash)

Part 5: Recommendation
My recommendation would be to deactivate the feature that re-routed the calls to the phone nearest the employee. This would encourage more direct and organized communication amongst co-workers/colleagues. The decrease stress of work following them everywhere would increase morale and throughput.

Part 6: Conclusion
Though the transceivers were installed with good intentions of increased productivity, the negative impacts were not fully thought through before installation. The tracking could help productivity, but the ability to have the employees work follow them all throughout the building would lead to decreased morale and burn out.

Page | 108

Case Study Case Study

Case Study #5 Denver International Airport

By: Bakre Idiazza

Page | 109

Case Study 5-Denver International Airport

Part 1: Business Analysis Mission


While constructing the Denver International Airport (DIA), they wanted to implement a baggage handling system that could dramatically improve the efficiency of luggage delivery. (Cash) They decided to utilize BAE Automated Systems, Inc. (BAE) as they had previous experience with a similar project. (Cash) There was a need to improve efficiency from the current time consuming process that included a significant amount of closeout time for hub operations and time consuming manual baggage sorting. (Cash) Industry needs have spurred the adoption of new information technology. (Fried)

Problem
Taking on such a large-scale project had many risks. This was an enormously complex system, the technology was still new, and there was a short time span for project completion. (Cash) Despite good intentions, the project plans rapidly dissolved as the problems with the project began to snowball. DIA was scheduled to open in the fall of 1993 with all three concourses fully running on the BAE automated systems baggage-handling technology. DIA opened over a year later than initially planned and millions of dollars over budget. (Cash)

Part 2: Organization Structure


DIAs structure at this point was the functional structure. In a functional structure, common activities are grouped together. (Cash) With the functional structure, planning and budgeting are done by function. (Cash) Page | 110

Five Forces
Customers At this point DIA did not have any customers such as individuals taking flights somewhere, as it had not reached the phase of fully functioning. The future/potential customers however had little control in this situation and are directly affected by the delays caused. Suppliers Suppliers power (BAE) was high initially as it was in charge of this important project, but as problems occurred and the project began falling further and further behind, there power diminished. They began being fined large amounts of money for further delays. New Entrants The threat of a new entrant was low as it would not be feasible for two airports such as this to survive in one area. Substitutes Substitutes are high for some travelers. They could choose to take train, car, bus, or even boat (such as cruise ship). However, there was little to no substitutes for the speed and ease of travel that an airline could offer for long distance travel. Industry Competition

Page | 111

Industry competition was low locally, as this was going to be the first international airport in the area. Nationwide however, there was a slightly higher amount of industry competition.

Part3: Stakeholders
DIA and BAE Stockholders/Investors With the delays and increased costs, investors are directly affected. For BAE, its value as a reputable and experienced company could diminish with a project failure, causing its stock to be less valuable. Employees Employees are directly affected by the success or failure of any company in which they work for or project that they are working on. The employees are affected by any unexpected problems that arise. Customers Customers are affected as to the availability of travel options to them. Competitors Competitors see little to no affect as the competition in the direct area is little to none.

Part 4: Alternative Actions Alternative Action 1: Stay with the old baggage handling ways
Currently the company wants to make this large investment into an electronic baggage handling system that would theoretically improve their efficiency. However, the large Page | 112

investment initially and all the over-budget money spent into this project may not have been the best choice. Many companies have made massive investments in information technology. (Fried) Adopting technology for the sake of technology can lead to major errors and losses. (Fried) They seemed to be wanting to just jump in with the latest technology because it was there, not because there was a lot of industry data to show the efficiency and benefits. They could have stuck with the old way and kept the manual baggage sorting. This is assembly line type work, and no one likes to do assembly line type work. (Morgan) This would not affect DIA stockholders/investors. BAE stockholders/investors would not see any negative impact; however, they would not have ever seen the benefit of BAE being awarded the contract either. The employees would be unaffected. The customers would have the airport opening closer to deadline, allowing them access to its services sooner. Competitors would see no change.

Alternative Action2: Use a different company


DIA could have chosen a different company. However, with this still being a new technology, there would not have been many choices out there. To find a company with the experience they needed would also prove to be a challenge. If they had chosen a different company, it would have likely been an even riskier endeavor. The DIA stockholders/investors would likely be unaffected. The BAE stockholders/investors would not see any negative impact; however, they would not have ever seen the benefit of BAE being awarded the contract either. Employees would likely experience the pressure of deadlines being missed or close to missing them. Customers would get the same experience as though they initiated BAE, but would likely still have a delay before they could utilize the facilities. Competitors would once again see little to no change. Page | 113

Alternative Action 3: Do nothing (and allow BAE to finish)


DIA could stay with their initial decision and allow BAE to finish the project. The DIA stockholders/investors would likely see no change. BAE stockholders/investors would benefit from this contract being awarded. However, if there were any negative implications on BAE due to the delays, they would likely be affected negatively also. Employees would continue to feel the pressure of the deadlines being missed and be urged to work more and harder. Customers would receive all the same benefits, but would have to wait for the opening. Competitors would likely be unaffected.

Part 5: Recommendation
DIA should analyze the system fully and far in advance of taking on such a task. My recommendation would be to stay with BAE for their baggage handling system. However, it would have been better if more time and research had been placed on all this far in advance to allow timely initiation of the project. This would have allowed a better chance of meeting all the deadlines, decreasing delays, and avoiding the hefty penalties they faced. First finding disruptive or inefficiencies in existing models will help to drill deeper. (Kalakota) With all the pressure faced within this project, I am sure that most of the actual delays were a direct result of the workers, as humans are not immortal. They can and will get burnt out. (Fried) Sticking with the idea of implementing the new system would still in the end be beneficial for DIA, even with the delays it initially suffered. Had they used scientific methods to determine the most efficient way of doing all the work, it may have went over more successfully. (Morgan)

Part 6: Conclusion

Page | 114

DIA was wanting to re-engineer the way the baggage handling process took place. You dont re-engineer unless you have to, and these days, almost everyone has to. (Hammer) The driving forces behind re-engineering are customers, competition, and change. (Hammer) They wanted to increase the efficiency, which in the end means an increase in their profits. A companys goal is to make money. (Goldratt) Any action that does not bring us closer to the goal is not productive. (Goldratt) Taking advantage of this emerging technology allowed the company to go towards its goal. Firms that do not take advantage of technological advances will eventually succumb to the competitive pressures of those who have. (Fried)

DIA needed to make this change. They needed the newer and more advanced way of handling the customers baggage. It would have just been best to get all their ducks in a row well in advance, before making the final decision.

Page | 115

Case Study Case Study

Case Study #6 Connor Formed Metal Products

By: Bakre Idiazza

Page | 116

Case Study 6- Connor Formed Metal Products Part 1: Business Analysis Mission
Connor Formed Metal Products manufactured metal springs and stampings for large U.S. original equipment manufacturers. (Cash)

Problem
The problem at hand was how to make their company the most desirable option amongst all available options. Of all the things they could do, including the divisional organization and the restructuring of the management style, they also decided to attempt to cut back on the amounts of paperwork by implementing IBM System 36. (Cash) This software was initially tested in the Los Angeles division, since this is the division that was utilized when designing it. They were driven by the need to reengineer. You dont reengineer unless you have to and these days, almost everyone has to. (Hammer) The driving forces behind reengineering are customers, competition, and change. (Hammer) Based on what Hammer has pointed out, then this is a logical idea to proceed with some reengineering, but appropriately.

Part 2: Organization Structure


The company as a whole was divided into two regions, north and south. In the south region, the Phoenix plant reported to Los Angeles. In the north region, the Portland plant reported to San Jose. They also had a very top-down management approach and did not actively involve employees. (Cash)

Page | 117

Bob Sloss, president, changed it to where each separate company became its own autonomous division, in which it was solely responsible for its own profits, expenses, etc. Sloss also encouraged weekly staff meetings amongst many team members from many different areas in each division in order to help promote the active involvement of all employees in the business process. (Cash) Sloss had an idea of creating a very high 100% quality product. If quality was your goal, then how come Rolls Royce nearly went bankrupt? (Goldratt) Since quality cannot be the only focus, then the software system could hopefully help out in other aspects.

Five Forces
Customers Honeywell, Motorola, and Hewlett Packard are a few customers that Connor had. The customers had somewhat of a power as they obviously have the right to choose which company they want to go with, and the cost for them to switch companies is very low. (Cash) Suppliers Suppliers would be those who provided the items in which Connor used to make their products, such as metal. The suppliers lacked any significant control over this situation, and it had no effect on the situation. New Entrants It was very easy for competitors to enter the market, since the barriers to entry were low. Substitutes Page | 118

The threat of substitutes was very high. There were actually many substitutes on the market already. Industry Competition There was a lot of industry competition; in particular, foreign competitors were the biggest threat. Foreign competitors could get higher quality products and lower cost labor. This gave them a huge advantage.

Part3: Stakeholders
Connor Stockholders/Investors As with any company, the Connor stockholders/investors are directly impacted by a companys success. Management Ultimately, with any success or failure of a company, the managers could be directly affected. Employees Employees are directly affected by the success or failure of any company in which they work for. Customers Customers want the highest quality products they can get and at the lowest cost. Along with this, they also want to receive good customer service.

Part 4: Alternative Actions Alternative Action 1: Implement the software in all the divisions
Page | 119

Stockholders would be affected as far as the division in which their greatest interest/investment lies. Either they would suffer due to the losses of the smaller divisions, or they would prosper with the success of the larger ones. Management and employees would also be affected dependent on which division they worked at. If they worked at a larger one that was implementing the software successfully, then they would be satisfied and comfortable within their jobs. If they worked for the smaller ones, that were not benefiting from the system and were losing money, then they could face job loss. The customers would generally see greater customer service due to the ease of accessing information with the software, and they would still be receiving the higher quality product regardless.

Alternative Action2: Do not use the system within any divisions, including Los Angeles
With this alternative, they would revert to the old pen and paper ways of doing things, since many employees found that the canned software was too generic for their needs anyway. (Cash) The stockholders would see no change likely as no changes would be occurring, unless the ones in the Los Angeles division got a decrease in profits if customer satisfaction dropped after taking away this software. Management and employees would likely be unaffected. Customers would still be receiving a high quality product, but would likely not be getting the best customer service that they could receive.

Alternative Action 3: Do Nothing


The alternative action that remains with any problem is, do nothing. In this case, the stockholders of the Los Angeles division would likely see an increase in their profits as customer satisfaction increased, because along with customer satisfaction comes loyalty and Page | 120

recommendations. Management and employees would likely see no differences and would remain unaffected. Customers out of the Los Angeles office would be receiving the best customer service amongst all the divisions, however all customers would continue to receive the same high quality products.

Part 5: Recommendation
Do nothing would be the optimal choice with the given situation. Los Angeles has seen some positive results from the implementation of this software; however, the software was implemented with the larger type division like Los Angeles in mind. Not all of Connors divisions are as large and structured the same as the Los Angeles plant. The needs of the other plants therefore are not a direct reflection of the Los Angeles one, they have unique needs that will not necessarily benefit or suffer the same as their larger counterpart based on a particular change. The Los Angeles division of Connor also has a different set of business processes and a unique management structure compared to the other Connor divisions. The Los Angeles division, based on the Los Angeles divisions needs, in order to benefit the Los Angeles division, developed the software that was implemented. It has been tailored to it, and just because it was successful, there does not mean that it will work well in divisions it was not designed for. As organizational environments have become more complex, differentiated, and turbulent, more and more species of organizations seem to have emerged. (Morgan) Each species has different needs in order to survive. Even though Fried states that firms that fail to take advantage of technology advances will frequently fail to the competitive pressures of those that have adopted new techniques and tools, I still stand behind my decision to not implement this in the smaller divisions. It is not Page | 121

necessarily that they would not be taking advantage of technology advances; it is just that they would not be inappropriately utilizing them. I can further justify my reasoning because Management must establish mechanisms to ensure that appropriate technology is introduced into the firm on a timely basis and in an effective manner. (Fried) The key term within this quote is appropriate. The software designed for the larger Los Angeles division is not appropriate for the smaller divisions to also utilize.

Part 6: Conclusion
The smaller divisions within Connor have processes that currently work for them. With this in mind, every action that does not bring us closer to the goal is not productive. (Goldratt) The goal is to make money. (Goldratt) If this implementation of the software in the smaller divisions is not going to make money, then it is not going to be productive based on those theories from Goldratt. The communication within the smaller divisions is not an issue, as they are smaller and communication is easier across the division. Many people are likely to reject the software as it would only complicate things for them, and many may even stick with the saying if it isnt broke, dont fix it. Sooner or later you have to stop designing the system if you want the project to be complete. (Fried) This needs to be looked at as a divisional project, and not a companywide one. In this case, then the project is complete, and the project for the Los Angeles division was a success. Focusing on one thing alone cannot create the optimum outcome for the company. (Goldratt) I am not saying that using technological advances is completely a bad idea for the other divisions; I am just saying that using the one designed for this larger division would not be a successful decision. There still exists the option in the future to maybe venture to other software ideas for the smaller divisions. Page | 122

One of the most common mistakes is trying to apply reengineering where it cannot fit. (Hammer) That is exactly what implementing the software in the smaller companies would be doing, applying it where it doesnt fit.

Page | 123

Case Study Case Study

Case Study #7 Appex Corporation

By: Bakre Idiazza

Page | 124

Case Study 7- Appex Corporation Part 1: Business Analysis Mission


Appex Corporation (AC) was founded in 1986 (as a result of a merger between Appex, Inc. and Lunayach Communications Consultants) and what started as a small company soon saw 1600% growth in its revenues. AC provided management information systems and intercarrier network services to cellular telephone companies. They had several product lines including CMIS, ABS, PRV, ISS, Roaming America, and more. (Cash)

Problem
AC lacked structure. Its loosely structured approach to its business processes left them with dissatisfied customers and sometimes they would not even get the chance to have an account with a company before the potential customer would realize the lack of structure AC had. They seemed to have an open system as though the organization was an organism and needing to satisfy the complex needs of the employees for them to be happy and fulfill their jobs to the best. (Morgan) This is when we need to consider that every action that does not bring the company closer to its goal is not productive. (Goldblatt). The companys number one goal according to Goldblatt needs to be to make money. The company was losing money rapidly. Investors were hoping Shikhar Ghosh, the companys new COO (chief operating officer) could turn things around. Ghosh stated, Appex needed control and structure. (Cash)

Part 2: Organization Structure Five Forces


Page | 125

Customers AC served over 250 markets in the United States. Along with the United States markets it served, it also had 34 in Canada. Their customers included BellSouth, Cellular Communications, Inc., Southwestern Bell, and many others. They had contracts with their customers, which were usually multimarket, multiproduct, and multiyear. The value of contract ranged anywhere from $100,000 to over $2 million. (Cash) Suppliers The mobile telephone switching office (MTSO) was responsible for providing the hand-off of the phone calls and making the connections for AC. New Entrants The threat of new entrants was high. This was still a young market and with its rapidly growing popularity and revenues, it made it a very attractive market. Substitutes Substitutes are minimal. The option of another company, but same service exists. However, a full substitute, such as the old-fashioned landline would not be very threatening to this new booming market. Industry Competition At the time, the competition was moderate. With such a new market, there were not many established companies that could compare and compete. However, there was enough to put AC at risk. Electronic Data Systems (EDS) was the major competitor, which eventually bought out AC. (Cash) Page | 126

Part3: Stakeholders
AC Stockholders/Investors Stockholders for AC have a direct impact related to the success of the company. Upper Management (COO, CEOs, etc.) Their positions/jobs could be jeopardized if the company is not structured and ran well. Employees They face job loss if the company continues to lose money; and vice versa, they could see positive outcomes for their jobs if the company flourishes. Customers Customers want reliable service and great customer service.

Part 4: Alternative Actions Alternative Action 1: Implement Matrix Organization


Matrix organization is a very structured type of organization. This provides a team based approach on top of a functional organization. You first have your functional organization, and then add in a project management function. Project managers report to senior management. Increased organization would mean increased productivity, leading to increased reliability, leading to increased satisfaction, which would lead to increased revenues ultimately. After all, this is the goal of a company. Your companys goal is to make money or it is not in business. (Goldblatt) This would increase profit for stakeholders/investors, increased job security for managers and employees, and increased satisfaction for customers. Page | 127

Alternative Action 2: Implement Spaghetti Organization


Spaghetti organization structure is named so because of its flexibility. It has somewhat of a lack of structure to it, therefore giving it the flexibility. The minimal structure basis behind this could possibly be enough to provide the needed stability for AC. As I mentioned above, the increased organization would lead to increased productivity, increased reliability, increased satisfaction, which would lead to increased revenues ultimately. This would also increase profit for stakeholders/investors, increased job security for managers and employees, and increased satisfaction for customers.

Alternative Action 3: Do Nothing


The option of doing nothing always exists with any problem evaluated. In this case, doing nothing would mean the company would continue with its daily functions that lacked control and structure. This would lead the company to doom. The stakeholders/investors would lose profit. Managers and employees would lose or be at risk for losing their jobs. Customer satisfaction would decrease, and they would not gain some new customers.

Part 5: Recommendation
My recommendation would be to utilize the matrix organization structure. This would provide the structure and control needed to get the company in line with where it needs to be. Specifying every detail can ensure that everyone is sure of the job they have to perform. (Morgan) The spaghetti organization structure still left too much flexibility for this company that was already struggling with some areas taking advantage of flexibility. The highly structured format of the matrix organization structure could be viewed negatively as a bureaucratic organization by some, which is as though it was designed and operated by Page | 128

machines. However, a mechanical mode of operation can provide the foundation for effective operation. (Morgan) Staff attitudes toward change may not be the best considering it would be taking them from one extreme to another, but the change would be something that everyone would get used to and realize was in all the stakeholders best interest. This action would provide the structure and stability needed to get AC headed in the right direction, therefore creating positive outcomes for all involved stakeholders, and achieving the goal. Simply put, the goal is to make money. (Goldblatt)

Part 6: Conclusion
AC was heading down the wrong path from the beginning when the laid-back attitudes of staff began becoming an accepted routine practice. The lack of rules, policies, and procedures inhibited the ability of management to manage well. The loosely formed foundation of this company was destined to crumble eventually, as it was not customer focused. The issues at hand were within the employees of the company. For the company to be successful, even after a merger, the people problems must first be managed effectively.

Page | 129

Works Cited
Cash, et. al. Building the Information-age Organization: Structure, Control, and Information Technologies. Course Pack, Print. Fried, L. Managing Information Technology in Turbuilent Times, New York, John Wiley & Sons, Inc., 1995. Print Goldratt, Eliyahu M., and Jeff Cox. The Goal: a Process of Ongoing Improvement. Great Barrington, MA: North River, 1992. Print. Hammer, M and Stanton, S. The Reengineering Revolution: A Handbook. New York, NY. Harper Collins, 1995, Print. Banks, Denise, Otto Driessen, Thomas Oh, German Scipioni, and Rachel Zimmerman. "WEBVAN: REINVENTING THE MILKMAN." WEBVAN: REINVENTING THE MILKMAN (2001): 1-13. Web. 8 Nov. 2011 <http://www.ateneonline.it/afuah/casiUS/webvan.pdf>. Zwass, Vladimir. "Electronic Commerce: Structures and Issues." Grand Valley State University. International Journal of Electronic Commerce, 1996. Web. 08 Nov. 2011. <http://www.gvsu.edu> Improvement. Great Barrington, MA: North River, 1992. Print. Morgan, Gareth. Images of Organization. Beverly Hills: Sage Publications, 1986. Print.

Page | 130

Strategic Assessment

Prepared by: Bakre Idiazza University of Louisville Business School CIS 410
Page | 131

IT Strategic Assessment Report Bakre Idiazza 12-13-2011

Page | 132

Revision History
Date
01/Dec/11 08/Dec/11 13/Dec/11 1 1.1 1.5

Version
Initial Draft

Description
Correct Spelling/Grammar Errors Final Draft

Author
Bakre Idiazza Bakre Idiazza Bakre Idiazza

Page | 133

1. Executive Summary
This strategic assessment performed for the Jefferson County Master Gardener Association, Inc. It will cover not only technological aspects but also the overall health of the organization from a business perspective. The document will first give a short history of the organization, in order to give readers of this document that are unfamiliar with the general understanding of the purpose of the organization and what it hopes to accomplish. Following that is a discussion of the important business processes that allow the organization to achieve its goals. Specifically, the services of providing the general public quality horticultural education and to provide assistance to the horticultural efforts of the Jefferson County Cooperative Extension Service, and how the organization utilizes current technology in order to provide those services. The current IT environment of the organization is inspected as well, with a brief detail regarding the IT staff and the budgeting for IT if they are available. The envisioned IT capabilities, including the vision of the organizations leadership as well as some key technology issues are also discussed, helping to underline where the organization is working towards in terms of technology. After that is a discussion of possible alternatives that the organization may want to consider for optimizing its operations. Finally, a conclusion with results, recommendations, and possible improvements for the Jefferson County Master Gardener Association. There are also attached appendices detailing the basis of analysis, as well as the technology inventory for the organization. Discussing the mentioned aspects, this strategic assessment is written in the hope that the Jefferson County Master Gardener Association, Inc may find some solution that allows them to improve their organization and services.

Page | 134

2. History and Purpose


How did Jefferson County Master Gardener Association reach their current business state and what does the organizations history indicate of Jefferson County Master Gardener Association future goals? This section provides a brief history and purpose of Jefferson County Master Gardener Association. The purpose of this section is to gain insight into the culture and value surrounding Jefferson County Master Gardener Association.

2.1.

The History of Jefferson County Master Gardener Association

In relationship with master gardeners program that was originally developed in 1973 on the national level the Jefferson County Master Gardener Association has been in existence since 1998. Jefferson County Master Gardener has grown smoothly in the field of gardening which lead the Association to be reorganized on January 2008 as a well-developed, nonprofit organization that partners and teams up with the Jefferson County Extension Service on several issues regarding its valuable services in particular and its goals in general. The increase of money raised from donors, the number of members, the volunteer hours, projects and programs have made the Association stronger every day demonstrating that there is no doubt about the valuable services the association provides to the public within the Louisville area.

2.2.

The Purpose of Jefferson County Master Gardener Association

Page | 135

The JCMGA is committed to providing the general public quality horticultural education and demonstration through volunteer leadership, continual learning, and service, and to provide assistance to the horticultural efforts of the Jefferson County Cooperative Extension Service. This mission statement from the Jefferson County Master Gardener Association perhaps best summarizes their purpose. The Jefferson County Master Gardener Association is an organization promoting change and equal opportunity within the Louisville community, and their purpose is to provide aid in whatever ways they can to ensure they provide an excellence horticultural education and demonstration within the community of Louisville. The Jefferson County Master Gardener Association is available to support the community of Louisville and has a number of programs and projects mainly designed to support and aid the Jefferson County Master Gardener Associations members to share their enthusiasm and enjoyment of gardening with each other and members of the other communities. Some of the most important programs and goals the Jefferson County Master Gardener supports and tries to accomplish in every calendar year are: Present two advanced training programs to members Host four social activities for members Plan two field trips for members Coordinate service projects to help needy members in their own gardens Staff priority volunteer projects Manage the banking of volunteer hours Develop recognition for leadership hours Plan one jointly-sponsored educational event with another MG association Develop relationships with other MG associations Develop and maintain online communications website & Facebook Publish a monthly newsletter Maintain accurate roster & meeting attendance for JCMGA members Develop Dig for Less membership discount program Page | 136

Plan & implement actions to recruit and retain association membership Host three lectures in the Winter Lecture Series Host three Homesteading on a Quarter Acre sustainability workshops Host Lessons Learned Garden Tour Series (5 gardens in 5 months) Increase gardening programs and activities targeting children

3. Management and Business Processes


In this section, the current state of Jefferson County Master Gardener Associations management and business processes is reviewed. This section explains the processes of how Jefferson County Master Gardener Association achieves their mission of services and education to support the public of Louisville area. This will help gain insight into how they serve the community and obtain funding for future projects through clarity of financial and strategic goals.

3.1.

Provide Conferences and events that return profit.

The Jefferson County Master Gardener Association hosts the annual garden event that provides very exciting two-day educational journey that offer a combination of lecture, workshop, and bus tour which revolve gardening activities. The association collects revenue from ticket sales. The public is invited to these events around the Louisville cities as well. These programs within the event offer a unique horticultural lesson and all are truly great examples of sound gardening principles and beauty.

3.2.

Provide advanced training programs to members


Page | 137

This program is available for Jefferson County Master Gardener Associations members and all the public which provides horticultural training. Training may be offered at the county, regional or state level and may include lectures, hands-on activities, or field trips. Presenters may be active or associate members that have successfully completed the Kentucky Master Gardener Classroom training. Programs are very effective and year-round.

3.3.

Becoming a Jefferson County Master Gardener Association Member

Currently the Jefferson county Master Gardener Association has nearly 120 members. The Association consists of active, associate, and Intern members that have successfully completed the Kentucky Master Gardener classroom training. In fact, active members give and offer volunteer services each year that satisfies continuing certification requirements. On the other hand, associate members contribute and play a big role on a volunteer basis to their best ability and knowledge even if they do not meet certification requirements from year to year. Active members may serve as officers of the association when associate members can serve as committee chairs and participate on committees as well. But Intern members can only participate on committees.

3.4.

Jefferson County Master Gardener Association fair

The Jefferson County Master Gardener Association provides an educational stand at the fair in the month of August each year. This is an excellent opportunity to meet and educate the public about Jefferson County Master Gardener Association and issues of importance to the Page | 138

organization, and to recruit applicants for our annual training classes. Several weeks before the fair, a committee plans a stand to coordinate with the fair theme and to highlight a horticultural practice.

3.5.

Jefferson County Master Gardener Association Website

The Jefferson County Master Gardener Association provides information about the association, programs, and events through their website. A committee of several members reviews the content that is placed on the website as well as annually review of the content for needed updates, modify and clarity. One person on the committee serves as the webmaster and works as a Jefferson County Master Gardener Association member to place the content on the website. This person with only basic information technology skills that are needed to handle this important task which is one of the very necessary jobs with a very informative role for the Jefferson County Master Gardener Association.

4. Current IT Environment
In this section, the current state of Jefferson County Master Gardener Associations IT is analyzed. This assessment is based both on the interviews with Ms. Sandercock who is the Vice President of the Jefferson County Master Gardener Association. This section contains an overview of Jefferson County Master Gardener Associations IT structure to help gain a

Page | 139

perspective view to make a recommendation for change or upgrade that may be needed to help the organization take the next step which is growing the business.

4.1.

Hardware

MacBook Pro laptop is the only laptop that has been used by the Jefferson County Master Gardener Association; this computer is an Apple product with the dual core processing (Intel) Core i5 with CPU speed 2.3 gigahertz (GHz) and average memory size of 3 gigabyte (GB). To put this into angle, the cheapest apple business computer models on sale today have a 2.30 GHz processor (but in dual-core or quad core forms) and 4 GB of memory. This machine is capable to take on difficult tasks and seems to be for both personal and business work. Although Ms. Sandercock uses her laptop for personal work as well she seems to not have any problem on its performances. This laptop running OS X Lion which is the world's most advanced desktop operating system and for their internet service provider, they use Insight service.

4.2.

Software

This laptop had either OpenOffice which is a free open-source office application suite or Microsoft Office for Mac 2011 Family Pack. The web browser of choice for the Jefferson County Master Gardener Association is Microsoft Internet Explorer and Firefox. This laptop had an upto-date version Antivirus Family edition installed, which protects the computers from viruses, malicious attacks, and threats. The Jefferson County Master Gardener Association use Microsoft Excel spreadsheets to manage various sets of data. The Association website is hosted

Page | 140

through M6.net and I think it was built using HTML, CSS, and .ASP for an open source web development platform.

4.3.

Website

The Jefferson County Master Gardener Associations website is www.jcmastergardeners.org. It is a menu driven website with information about the organization, staff, chairpersons, history and mission of the organization. The website is informative and has been designed to create a rich informative experience. Examples that support this are links to: About The JCMGA Master Gardening Our mission Our objectives Our goals Volunteer Projects Lessons Learned Garden Tours News Photos Upcoming Programs and Events

All of these examples support the informative designs the website has as it creates a rich informative experience. A Couple of areas not available on the website are the ability to submit for volunteering requests online and the ability to donate through the website. However, information is clear on how to contact Jefferson County Master Gardener Association. This area may be of strategic importance to draw more volunteers, get more donations or signup for help in the future.

Page | 141

4.4.

Staff IT Skills/Training

Although very little information was gathered regarding the IT skills and the training for The Jefferson County Master Gardener Association staff, it seems that Ms. Sandercock, Vice President of the association has a basic IT skills to manage donors, spreadsheet, and navigate through the website as an administrator. In fact, she tries to stay current with the necessary IT knowledge to accomplish the goals of the organization. Most of the other members have sufficient skills they need to perform their volunteer work. In fact, all of them seem to be fair in the Microsoft Office suite, including Microsoft excel and word. They are also capable of using Internet Explorer or Firefox to browse the internet. The organization has one person on their staff who is a volunteer helping to ensure that the website is running properly. The organizations strong willingness to pay attention to technology it is expected that the skills and training required by the IT department are not at an acceptable level. The amount of training performed by the Jefferson County Master Gardener Association to refine these desirable skills is unknown. It would be safe to assume that the skills were either acquired along the way. With further training the members could become more efficient with the skills needed especially running their own website.

4.5.

IT Budgeting and Spending

IT budgeting and spending was kept at very minimum required to operate at the Jefferson County Master Gardener Association. The only major IT expenditure is the website. Like many nonprofits, the comfort of investing a portion into IT is not there. Money for the Jefferson County Master Gardener Association is tight, and the IT area doesnt seem to be an immediate

Page | 142

concern for them for now. This could be why the IT infrastructure is not available for the association.

5. Envisioned IT Capabilities Jefferson County Master Gardener Association should take a huge step in the IT investment. Organizations of its similar size, non-profit and for-profit, would be considered in good shape strategically, infrastructure and budgetary. However, any organization can benefit from selfevaluation to best determine if improvement is needed. The best times, those of stability and prosperity, allows for reflection and evaluation to see if any processes can be re-defined, streamlined or completely re-engineered. (Michael Hammer, The Reengineering Revolution, James I. Cash, page 401 Building the Information Age Organization)

5.1 . Leaderships Vision


Through the interview it was learned from Ms. Sandercock that Jefferson County Master Gardener Association wanted to discover and review their IT and technologies plans and possibilities. A strategic goal could be derived as to the direction Jefferson County Master Gardener Association might want to take over the next few years. Ms. Sandercock illustrated that currently the website is only for information and there are no functional services. It might be helpful to build them to it to give the website more services than just providing information. Currently, the organizations website existence is insufficient for what they want to do. Jefferson County Master Gardener Associations current website provides a history and recent news of the company. Visitors to the site cannot purchase tickets for upcoming event and contact the organization. While the members are unsatisfied with their current website, they Page | 143

feel they could offer a lot more given todays technology advances. The technology goals that interest them the most are: Make Volunteer hours record accessible online for members to input the volunteer service hours Make certain sections of the website accessible to members only (for example roster, financial information) Design and install a bar or tagline under main heading that describes the organizations relationship with Jefferson County Extension Services Make changes to main heading to reflect organizations new logo Make blog operational Possibility of hosting the site

5.2.

Top 10 Technology Issues

Following is a list of the technology issues as interpreted through interviews conducted and data gathered over the last five weeks. These are suggestions that were either discovered during interviewing Ms. Sandercock or through evaluation of Jefferson County Master Gardener Association as experienced from the interviewer. There order of the list somewhat indicates the weight of importance of the issue.

1. The company is not spending enough on their IT


While there isnt any current IT budget that supports the organization, it is very necessary that they have one and it is not entirely necessary to spend such a large sum of money on new equipment. Instead of doing that, the organization could set up larger yearly budgets that would allow them to support and maintain their website, provide basic IT training to the members, have backups for their data and keep up with new technology and why not thinking about upgrading their website over time. Page | 144

2. Keep track of volunteer and member hours


Right now the Jefferson County Master Gardener Association uses Excel spreadsheet that they pass around to other members so they can update the hours they worked and so on. But with having application or program within the website where all the employees can enter their working hours will be very helpful and the staff can always print report of every member and keep track of their hours.

3. The companys web presence is insufficient for what they want to do


The Jefferson County Master Gardener Associations current website provides a history and recent news of the company. Visitors to the site can also purchase tickets for upcoming events and contact the organization. While the company is satisfied with their current website, they feel they could offer a lot more given todays technology advances. The two technologies that interest them the most are social networking and having a donation function built to the website.

4. The staff is not trained enough on their systems


The staff and members dont seem to know enough about their systems to do their job in an efficient and effective way. This is not a direct concern for the company as the staff and members are well aware of this issue

5. Have financial sections available for members only on the Website


Having financial information available to view, read, and maybe modify to certain members Page | 145

than others will be very important for the members and staff where they can keep track of their accounts, status, payroll and other useful roles within the organization.

6. Donate and Volunteer Now buttons on Websites


One of the most important functions on the website for any non-profit organization is Donate Now! and Volunteer Now! buttons, which the Jefferson County master gardener association doesnt have available in their Website.

7. There is no dedicated IT professional on staff


There is no information technology specialist on staff at the Jefferson County Master Gardener Association at this time. There are staff members that know about the IT infrastructure, but not well enough to know how to maximize its productivity. A system administrator or analyst would suffice for this type of organization, but they come at high cost. Capital expenditures on IT are not substantial, so a lack of an IT person seems to not be a concern at the moment.

8. Blog or Social networking


Having a blog or social networking section built on to the website of Jefferson County Master Gardener Association will be very beneficial and helpful for the members to discuss issues, learn, and keep updated with new events and information. It will also allow more members to join and get involved in several subjects and news

Page | 146

9. Backup the data


Jefferson County Master Gardener Association does not utilize online backups or any type of backup. For a small amount of money per month, the Jefferson County Master Gardener Association could backup all of their new data daily. Prepared for any loss of data, it will be important to remain committed to preventing such from occurring. However, the organization needs to look for more efficient ways to create and handle backups even by using USB hard drives.

10.Security issue and Hosting the site


The organization doesnt seem to have a well-prepared plan for any security issues, but technology is constantly evolving and the organization will need to continue to stay up-to-date with potential security concerns. Failure to do so could result in a huge compromise of data in the website that could be disastrous for the organization. As the organization continues to grow and prosper, it will likely become an even bigger target, and so as the organization grows, it may be wise to pay particular attention to this area as well. It is always in the organizations best interest to host their own website, in which it will allow them to control the website and keep track of it, but this will bring us back to the issue of lack IT experience in the staff and members so they can maintain it and keep it running in a very working functional process.

6. Closing the Gap


The following section provides recommendations as to how Jefferson County Master Gardener Association might accomplish the leaderships vision. This section concentrates on targeting Page | 147

the most outstanding Information Systems issues mentioned in the previous sections of this report.

6.1

Get an IT professional on staff

There is no information technology specialist on staff at this time. There are staff members that know about the basic IT, but not well enough to know how to maximize its productivity. The company should divert some of their personnel expenses towards an IT professional. This person would serve as the bridge between what the company wants out of IT and what is at their disposal, and would evaluate their infrastructure based on the companys unique situation. For example, an IT Specialist would be responsible for creating and testing the company backup and support and maintain the organization website. This option is also dependent on the associations financial situation. Or maybe the IT in staff should come next and should be considered in the future as the organization growing along.

6.2

Get an Attendance Management System tool

Instead of using excel spreadsheet to keep track of volunteer and members hours there are many different types of software out there that can become very useful in the case of The Jefferson County Master Gardener Association where they are struggling to keep track of members hours. One of the easiest ways to keep track of attendance for members is using the Attendance Management System software which is the easiest way to keep track of attendance and volunteer groups for community organizations like Jefferson County Master Gardener Association. It also works well as a member database. You can create customized Page | 148

attendance reports, event schedules, membership rosters, and attendance forms. The program is easy to use, and it's well suited for any organization that needs to keep track of attendance.

6.3

Make the website more functional than informative

currently the website for the Jefferson County Master Gardener Associations is only used for providing a tremendous amount of information about the history, mission, goals, projects, and recent news involving the organization. Visitors to the site should also be able to purchase tickets for upcoming events, make donations, and contact the organization with questions if they need to. With todays technology the website should offer a lot more than just information. Having a social network built onto the website is just another important tool to have available on the website for the members.

6.4

DONATE NOW! VOLUNTEER NOW! BUTTON/KEY ON THE WEBSITE

Going online to volunteer or donate is becoming more and more common in nonprofit organization. It makes more benefits for everybody who is interacting with the organization and some of the benefits are:

Online contact with donors/members can be very efficient and well organized Money being donated online will be increasing Donate and Volunteer Now buttons on websites offer prospects another channel to give to your organization

Page | 149

Having donate and volunteer now buttons installed on the Jefferson County Master Gardener Associations websites does not solve all the problems and does not create success in raising funds or increasing number of volunteers without having a strategy behind it to support these buttons. Having a professional member of the Association to keep track of these members and contact donors if they have any questions and send a thank you notes to donors and welcome notes to volunteers is very important for the strategy. Without this strategy, your efforts may actually cost you more than you bring in.

7. Conclusion
After examining the Jefferson County Master Gardener Association and in particular its IT department and business processes, the overall conclusion is that the organization is not actually quite well-off in terms of technology, and it is facing many of the same IT problems that other non-profit organizations face. On the contrary, the Jefferson County Master Gardener Association has up-to-date computer which is MacBook Pro, There appear to be no huge holes within the organization, rather the issues that may require improvement are very connected to the website. The main issues discovered seem to be about making the website more functional rather than just being informative, as well as getting an Attendance Management System tool Instead of using excel spreadsheet to keep track of volunteer and members hours. While these are not huge problems for the organization, they are issues that could potentially be a huge gain for the organization in saving some money and time in the long-run. The recommendations provided in this strategic assessment are by no means urgent concerns for the organization, but rather things that the organization may want to consider in seeing if

Page | 150

other options may better support their organization. Regardless of whether or not the recommendations are followed, the Jefferson County Master Gardener Association seems to have a clear idea of where it wants to go, and how it wants to get there. Technology should be no problem for the organization as it attempts to move forward with its operations. Finally, it has been a pleasure and an honor for me to work with the Jefferson County Master Gardener Association, and to learn about the great things that the organization is doing for the community of Louisville. It has been a great opportunity to perform a strategic assessment on the organization and its business process, and to examine the potential strengths and weaknesses that are involved. The organization has been very helpful in providing the information used to create this strategic assessment, and it is clear that the organization understands the importance of examining itself and looking for improvements when possible, especially in the area of information technology. If the organization continues to stay critical of its self and strive for improvement, and if the organization continues to embrace technology as well as it has, it should have no problem accomplishing the goals that it has set for itself and continuing to serve the Louisville community and those in need of its services.

Appendices
Basis of Analysis
Who they are? The Jefferson County Master Gardener Association What they do? Provide quality horticultural education for the community Who they do it for? General public Organizational Structure? Functional

Page | 151

1. The Five Forces


Suppliers: Being a non-profit organization, they have relatively little bargaining power over their suppliers and the funds that they receive. Customers: The organization has some degree of bargaining power over their customers, as they do provide a needed service to the community, but there is little room to actually bargain with the customers beyond providing or denying services. Inter-Industry Competition: Low, there are currently not enough organizations attempting to do what the Jefferson County Master Gardener Association is trying to do, which is part of the reason why their organization is needed to begin with. Threat of Substitutes: Similar to above, there may be some threat of substitutes, but there currently arent enough organizations out there doing what Jefferson County Master Gardener Association is doing. Threat of New Entrants: Low, since there are not many people willing to rush into the creation of a non-profit organization dedicated towards helping those in need. While there may be some new entrants, it is not profitable enough to attract a large amount of new entrants. Problem: The Jefferson County Master Gardener Associations main issues discovered to be about making the website more functional than informative, as well as getting an Attendance Management System tool, Instead of using excel spreadsheet to keep track of volunteer and members hours. Page | 152

Stakeholders: Employees, Investors, Businesses that collaborate with the Jefferson County Master Gardener Association, the general public, local and state-wide public communities

2. Strategy
a. Focus Strategy: The Jefferson County Master Gardener Association incorporates
a focus strategy, as they are focusing their efforts on a particular target market

3. Organizational Structure
a. Functional
The Jefferson County Master Gardener Association demonstrates a classic example of a functional structure, with one main hierarchy and no completely separate divisions within the organization. However, the Jefferson County Master Gardener Association is a part of a bigger national project, which could make Jefferson County Master Gardener Association considered part of a divisional structure, but the way the Jefferson County Master Gardener Association itself is structured is functional. This is not surprising however, as Cash says that the functional form tends to work well when the organizations issues involve expertise, efficiency, quality, and when it is relatively stable, which are all things that the Jefferson County Master Gardener Association possesses and must have in order to provide the services that it does.

4. Other Notes
In addition to what has already been discussed, the organization seems to be well aware of Goldratts idea that the goal of an organization should be to make money now and in the Page | 153

future. They have taken the appropriate steps in order to ensure that they can continue to survive and perform their services.

Technology Inventory
They did not provide us any inventory besides the Macbook Pro laptop that Ms. Sandercock uses for her activities within the association.

Strategic Planning/Visioning Documents


None Available.

IT Budget/Spending Documents
None Available

Page | 154

Reference List
Eric. www.jcmastergardeners.org. Jefferson County Master Gardener Association, Inc.Web.11Dec.011.http://www.jcmastergardeners.org/Content/Public/Default.aspx?cp id=1 Cash, et. al. Building the Information-age Organization: Structure, Control, and Information Technologies. Course Pack, Print. Fried, L. Managing Information Technology in Turbuilent Times, New York, John Wiley & Sons, Inc., 1995. Print Goldratt, Eliyahu M., and Jeff Cox. The Goal: a Process of Ongoing Improvement. Great Barrington, MA: North River, 1992. Print

Page | 155

Development Project
Workforce Management System
LUL Workforce Management System
Version 8.0

Project Participants

Mr. Bakre Idiazza Mr. Michael Hilliard Mr. Adam Dessify Miss Armina Krgo Mr. Amer Asmar Mr. Eric Olliges

Page | 156

Revision History
Report #
1

Date
10/04/2011

Version
1.0

Description

Author
Bakre, Michael, Eric, Amer, Armina, Adam

10/07/2011

2.0

Create and updated use cases, added screen shots, Create, added, and updated use cases

Bakre, Michael, Eric, Amer, Armina, Adam Bakre, Michael, Eric, Amer, Armina, Adam Bakre, Michael, Eric, Amer, Armina, Adam Bakre, Michael, Eric, Amer, Armina, Adam Bakre, Michael, Eric, Amer, Armina, Adam Bakre, Michael, Eric, Amer, Armina, Adam Michael, Bakre

10/18/2011

3.0

10/26/2011

4.0

Create, added, and updated use cases, create class diagram Create, added, and updated use cases, updated class diagram, create sequence diagram Create, added, and updated use cases, updated class diagram, create sequence diagram and tested website Updated use cases, updated class diagram, sequence diagram and tested website. XHTML validation of website

11/02/2011

5.0

11/9/2011

6.0

11/16/2011

7.0

11/28/2011

8.0

Page | 157

Table of Contents
1. Requirements Specification Error! Bookmark not defined. 1.1 1.2 1.3 1.4 Requirements Summary Error! Bookmark not defined. Use Case Summary 159 User Requirements Trace Matrix 161 Use-Case Reports 162

2. Database 171 3. User Interface 172 4. UML Diagrams 177 4.1 4.2 Class Diagram 177 Sequence Diagram 178

5. Coding 179 6. Refactoring and Integration 179 7. Testing 180 7.1 7.2 Web Testing Functionality 180 Unit Testing 183 Test Results 183 Screen Shots Error! Bookmark not defined.

7.2.1 7.2.2 7.3 7.4

Integration Testing 191 User Acceptance Testing 194

8. Issues and Risks 194 9. Others Error! Bookmark not defined. 10. Submission Requirements Error! Bookmark not defined.

Page | 158

Weekly Progress Report


Requirements Specification REQUIREMENTS SUMMARY Requirements for Administrator BP5: Management of Job Providers and Applicants Sub-teams 2 requirements
ITP1: Provider Management Process A1: Provider Profile Management Activities F1: Approve provider F2: Update provider F3: Delete provider F4: Display a list of providers F5: Display track record of providers A2: Posted Job Status Management Activities F1: Generate summary report F2: Track open job posting

Sub-teams 1 requirements
ITP2: Seeker Management Process A1: Seeker Profile Management Activities F1: Approve seeker F2: Update seeker F3: Delete seeker F4: Display a list of seekers F5: Display track record of seeker A2: Application Status Management F1: Display status of applications F2: Track open job posting

Page | 159

USE CASE SUMMARY JOB PROVIDER


ID 1 2 3 4 5 6 7 8 9 10 Description Use case 1 Log-in system Use case 2 Create/Approve provider Use case 3 Update provider Use case 4 Delete provider Use case 5 Display a list of providers Use case 6 Display track record of providers Use case 7 Generate summary report Use case 8 Track open job posting Use case 9 etc Target Delivery Date 10/18/11 10/07/11 10/26/11 10/07/11 09/23/11 10/18/11 10/18/11 11/02/11 N/A N/A

JOB SEEKER
ID 1 2 3 4 5 6 7 8 9 10 Description Target Delivery Date 10/01/11 10/01/11

Use case 1 Create Profile Job Seekers Use case 2 Log In Job Seekers
Use case 3 Approve Job Seeker Use case 4 Update Job Seeker Use case 5 Archive/Delete Job Seeker Use case 6 Display List Job Seeker Use case 7 Track Record Job Seeker Use case 8 Generate Report Job Seeker Use case 9 Display Status Job Seeker Use case 10 Track Open Jobs Job Seeker

10/01/11 10/03/11 10/12/11 10/05/11 10/05/11 10/18/11 10/01/11 10/01/11

Page | 160

USER REQUIREMENTS TRACE MATRIX Requirements Traceability Matrix


System Requirement (SR) / Use Case Name (UC) SR 1 Approve Provider SR 2 Update Provider SR 3 Delete Provider SR 4 Display a list of providers SR 5 Display track record of providers SR 6 Generate summary reports SR 7 Track open job posting UC 1 Log-in System UC 2 Create/ Approve Provider UC 3 Update Provider UC 4 Delete Provider UC 5 Display list of providers UC 6 Display track record of providers UC 7 Generate summary report UC 8 Track open job postings

X X X X X X X

X X X X X X X X X

Note: The Traceability Matrix associates the Use Cases on the top row with the System requirements along the left most column

Page | 161

Use-Case Reports JOB PROVIDERS


Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 1: Login-in System Rev. 10/17/2011 This use case describes how an Administrator logs in to the system.
Administrator A need to gain access to the system.

The system has not been logged in or employee wishes to change users. The system is available for processing employee tasks. 1. The use case starts with an administrator visiting the admin webpage 2. The system provides the employee with a log-in screen with text boxes for username and password. 3. The employee enters his or her username and password. 4. The system verifies the credentials. 5. If incorrect 5.1. The system displays incorrect credentials warning. 5.2. The system redisplays the credentials page. 5.3. If credentials verified, go to step 7. 6. If correct 6.1. Go to step 7. 7. The system loads the employee's profile desktop. 8. The use case ends. The system will have verified the employees credentials None

Assumptions
Issues

Page | 162

Use Case Description

User Case 2: Create/Approve provider Rev. 10/07/11 This is where Louisville Urban League can make the decision to approve the provider based on details that Louisville Urban League has available to review regarding the provider.
Administrator Provider submits request to be on the list

Actors Trigger Preconditions Postconditions Normal Flow

Provider(s) waiting for approval The system has returned the corresponding results from the query and provider has been approved 1. The use case starts with the user logging in to the system. 2. The information from database is called, pulled and displayed for the user 3. The user confirms the provider that is needed to be approved 4. The user can either manually change/approve the information in the database with the right permission 5. System approves, update the system 6. Exits the system Provider must submit the requested information in order to be able to approve the providers listing Criteria for inclusion/exclusion for list and how to reply to provider to revise listing.

Assumptions
Issues

Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 3: Update provider Rev. 10/26/11 Update Job Provider Information
Administrator The Administrator visits the webpage to update a Job Provider

Job provider information/data must be available Job provider information/data is updated 1. The use case starts with the Administrator visiting the page to update Job Providers information/data 2. The webpage runs a program to retrieve a list of Job Providers 3. The program queries the database for the list of Job Providers 4. The database returns the list of Job Providers 5. The program sends the list of Job Providers to the webpage 6. The webpage displays the list of Job Providers 7. The Administrator selects the Job Provider to be updated 8. The program queries the database for the Job Providers information 9. The database returns the information specified by the query 10. The program retrieves the information sent from the database 11. The program sends this information to the webpage 12. The webpage displays the information to the Job Provider in the respective fields 13. The Database Administrator edits the information

Page | 163

Assumptions
Issues

14. The Database Administrator submits the updated information 15. The program queries the database to update the Job Provider 16. The database updates the specified Job Provider 17. The program sends a message to the webpage after the verification is successful 18. The webpage displays a message that the Job Provider was updated There must be a provider that is needed to be deleted The Database Administrator may not confirm the employer to update the provider

Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 4: Delete provider Rev. 10/26/11 This use case describes the process to delete a Job Provider
Administrator Job Provider is no longer needed within the system.

Job provider must exist. Job Provider has been deleted 1. The use case starts with the Administrator visiting a page to delete a Job Provider 2. The webpage runs a program to retrieve a list of Job Providers 3. The program queries the database for the list of Job Providers 4. The database returns the list of Job Providers 5. The program retrieves the list of Job Providers sent from the database 6. The program sends the list of Job Providers to the webpage 7. The webpage displays the list of Job Providers 8. The Database Administrator selects the Job Provider to delete 9. The webpage runs a program to delete the Job Provider 10. The program queries the database to delete the Job Provider 11. The database deletes the specified Job Provider 12. The program verifies the successful execution of the query 13. The program sends a message to the webpage after the verification is successful 14. The webpage displays a message that the Job Provider was deleted There must be a provider that is needed to be deleted The user may not confirm the employer to delete provider

Assumptions
Issues

Use Case Description Actors Trigger

User Case 5: Display a List of Providers Rev. 10/26/11 This use case covers the selection and displaying a list of providers
Administrator A need to obtain a list of Job Providers

Page | 164

Preconditions Postconditions Normal Flow

There is a need for a list of providers The system has returned the corresponding results from the query and list of providers has been created 1. The use case starts when a list of providers is needed. 2. The administrator opens up a query page. 3. The administrator selects the criteria for the list. 4. The system returns the results based off of the query selection. There must be a list of providers available for the individual desiring to view it Who all can have access to the list and what information needs to be included in the listing.

Assumptions
Issues

Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 6: Display track record of providers Rev. 10/26/11 This use case covers displaying a track record of job providers
An Administrator A need to display a list of job providers track record

There is a need for a list of providers The system has returned the corresponding results from the query and list of job providers has been created and the system has been tracked and updates
1. The administrator logs in to the system. 2.If information from database is called, the information is pulled from database and displayed to the user 3. The administrator confirms the information is entered into Database 4. The system provides a list of existing job providers 5. The user can either manually change the information in the database with the right permission. 6. System tracks, updates the information 7. Exits the system

Assumptions
Issues

There must be a list of providers available to view The user may not confirm the employer to display and track the records

Page | 165

Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 7: Generate summary report Rev. 10/26/11 This use case covers how to generate a summary report
Administrator There is a need to generate a report

An Administrator must login into the system


One or more reports are created in the specified Format (PDF, Excel, extract) that are ready to be downloaded and printed. 1. The use case starts with the administrator logging into the system 2. User chooses the Generate report option from Database 3. User chooses which Queries to pick from to generate their report. 4. A report is generated from the queries to what has been specified. 5. The report is then printed and shared 6. Exits the system

Assumptions
Issues

There must be a data of activities available for the employers The user may not confirm the employer to generate report

Use Case Description Actors Trigger Preconditions Postconditions Normal Flow

Use Case 8: Track open job posting Rev. 11/02/11 This use case covers tracking open job posting of job providers
Administrator There is a need to track open job posting of job providers

There is a need for tracking open job posting The system has returned the corresponding results from the query and list of open job posting by providers has been tracked by the system
1. The administrator logs in to the system. 2.If open job posting list from database is called, the open job posting list is pulled from database and displayed to the user 3. The administrator confirms the open job posting is entered into Database 4. The system provides a list of open job posting by providers 5. The user can either manually track the list in the database with the right permission. 6. System tracks, updates the list if needed 7. Exits the system

Assumptions
Issues

There must be a list of open job posting by providers available to keep track it The user may not confirm the employer to track open job posting

Page | 166

JOB SEEKERS
Use Case 1: Create Profile Actors Job Seekers Trigger Preconditions Post conditions Normal Flow The user wants to be able to apply to the job posting on our website

The user must provide valid personal information New profile is created The jobs seeker will fill out a form, and then the system will ensure that the requirements are met, If so the system will approve the account and new profile will be created so the user can access the system. The user does not already have an account Issues could arise if duplicate personal data is used such as email that is already on file

Assumptions
Issues

Use Case 2: Log In Actors Job Seekers and Admin Trigger Preconditions Post conditions Normal Flow User wants to access the website

User must provider valid user name and password User accessed the system The user enters his/her information, and then the system verifies this information. If the information is correct then user will be able to access his/her account. On the other hand if the information is wrong then the system will deny the request and go back to the log in screen. The user has existing account. The issues while on log in screen can be if the legit account cant be accessed, this could be due to user forgets their information or due to an error

Assumptions
Issues

Use Case 3: Approve Account Actors Jobs seekers and Admin Trigger Preconditions Post conditions Normal Flow The job seeker creates account and is waiting for admin approval

Admin verifies if personal data is not duplicated and looks legit The request is approved. The user will submit a request, and then the system will wait for admin to review the request to see if the requirements are met. If the requirement are met then the admin will approve it, if not the user must revise it and then submit the request again. The user has created a new account If data already exist in system or it looks untrustworthy account will be denied

Assumptions
Issues

Page | 167

Use Case 4: Update Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow The user wants to update some data or documents

The user can provided valid credentials and is successfully logged in Document is updated The user should update some documents, and then the system will review this process. If the process does not violate the instructions then the system will approve it. The user wants to make some changes. If the user is unable to successfully log in to their account

Assumptions
Issues

Use Case 5: Archive/Delete Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow Job seekers account is inactive for certain period of time

The account has no activities Account is archived The job seekers account is not being used and there has not been any activity for certain period of time. The account user doesnt need to be considered for any of available job postings therefore they need to be removed from available job seekers The user has not signed on to their account for certain amount of time Issues are the users could have forgotten their information and created another account with different email address.

Assumptions
Issues

Use Case 6: Display List Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow The job seeker or admin wants to see a list of what jobs are available

Anyone can see the list of jobs if they enter the job portal The list is displayed. In order to view list of available jobs, individual will have to go to Louisville Urban League job portal where a list is displayed. If they are interested in submitting a job application they will have to successfully sign in job portal as either job seeker or admin The user wants to see what jobs are available on the job portal If an individual want to see who is the employer for that certain job that information will not be available for anyone to see but the admin.

Assumptions
Issues

Page | 168

Use Case 7: Track Record Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow The admin wants to track a record for a job seeker

Job seeker has submitted documentation and job applications The record is tracked. The job seeker is an active user and has submitted documentation such as resume etc. Their record will contain their personal data and documentation as well as their activity on Louisville Urban League job portal All users have entered valid data. Issues could be if someone has made a falsified account and is submitting job applications

Assumptions
Issues

Use Case 8: Generate Report Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow The admin wants to generate a report for active users or current job postings

The admin requests to see a report. Report is generated. The admin will request a report and the system will provide a list of reports. After that the user will choose a report and the system will collect the requirements and generate a report. The user does not have a certain report or the report needs to be updated If inactive users are not archived or if the jobs that are no longer available are still open to job seekers

Assumptions
Issues

Use Case 9: Display Status Actors Jobs seeker and admin Trigger Preconditions Post conditions Normal Flow The admin must keep accurate status of jobs available

The job is displayed or it needs to be removed from the list Status is displayed. The job seekers should only see the jobs that are available and are in hiring status. If Louisville Urban League has provided that employer with a worker then other job seekers should no longer be able to submit themselves for that job. The employer is Louisville Urban Leagues client If the job status is not constantly updated then there can be a lot of confusions and data will not be up to date. If this happens then Louisville Urban League will not be able to provide quality service

Assumptions
Issues

Page | 169

Use Case 10: Track Open Jobs Actors Jobs seeker and Admin Trigger Preconditions Post conditions Normal Flow The job seekers want to track open job listings

There are jobs available Open jobs are tracked If the job seeker is interested in applying for a job they should be able to see which jobs are open and how long they have been posted. They should also be able to see which zip code is the job located in and how many job positions are available The user is interested in finding work There could be issues if employers name is accidently displayed and the job seekers go directly to the employer to apply for a job instead of Louisville Urban League job portal

Assumptions
Issues

Page | 170

Database
wms_employer PK employer_id company_name industryid address city state zip second_address second_city second_state second_zip phone_number fax_number website email_address date_register is_active admin_comments PK wms_job job_id job_title job_st_address job_city job_state job_zip busline opening_date closing_date starting_wage num_of_opening full_part perm_temp shift Transportation exp_required exp_level job_description requirements how_to_apply other_notes views_count apply_count modified is_active admin_comments employer_id PK wms_resume resume_id cv_title cv_description cv_file_name cv_file_type cv_file_exe cv_file_size cv_file_path education_level certificate college_degree majors prmry_occup_exp prmry_yrs_of_exp secndry_occup_exp secndry_yrs_of_exp other_occup_exp other_yrs_of_exp shift_avail shift_preferred additional_notes date_created date_modified seeker_id PK I1 wms_seeker seeker_id fk_resume_id username passwd email_address prefix fname lname suffix address_num address_st_direction address_st_name st_address city state zip county gender phone_home phone_cell phone_other employee_status curr_employer referredby legalbarriers date_of_placement date_register last_login is_active admin_comments

FK1

wms_industry PK industryid name FK1

FK1

wms_application PK,FK2 PK,FK1 job_id resume_id date_app

wms_empcontact PK empcontact_id fname lname phone_number fax_number email_address employer_id

wms_jobexperience PK FK1 FK2 jobExperienceID job_id experienceid

wms_admin PK admin_id username passwd fname lname lastvisit

FK1

wms_experience PK experienceid name

Page | 171

User Interface
Screen name Screen1 Screen2 Screen3 Screen4 Screen5 Screen6 Screen7 Screen8 Description This screen is the one user will go to create an account. Since employers will no longer need to create an account this screen will be changed for Job Seekers only This is our log in screen that we created. For now it is pretty basic, it contains LUL logo and fields for user to enter their user name and password This is our administrative page that only the admin can access. This is the screen for administrators to add a new job. This is the screen for administrators to add a new company. This is the screen for administrators to add personal contact information for a company. This is the screen for administrators to select and update a company. This is the screen for administrators to delete a company.

Screen 1

Page | 172

Screen 2

Screen 3

Page | 173

Screen 4

Screen 5

Page | 174

Screen 6

Screen 7

Page | 175

Screen 8

Page | 176

UML Diagrams
CLASS DIAGRAM
Login -username -password +LoginAdmin() +LoginJobSeeker() +LoginJobProvider() JobSeeker -seekerID -username -password -firstName -lastName +CreateJobSeeker() +UpdateJobSeeker() +DeleteJobSeeker() +GetSeekerData()

JobProvider -employerID -companyName -industry -address -city -state -zipCode -address2 -city2 -state2 -zipCode2 -phone -fax -email +CreateJobProvider() +UpdateJobProvider() +DeleteJobProvider() +GetCompanyData() +GetCompanies()

Admin -adminID -username -password -firstName -lastName +CreateAdmin() +UpdateAdmin() +DeleteAdmin() +UpdateLastVisit() State -stateID -state +GetState() Experience -experienceID -experience +GetExperience()

Resume +UploadResume() +UpdateResume() +DeleteResume()

Job -company -industry -experience -city -state -zip -dateOpen -dateClose -wage -time -duration -shift -barriers -transportation -jobDescription -qualifications -application -notes +CreateJob() +UpdateJob() +DeleteJob() +GetJobData() +GetJobs() +IsOpen() +UpdateLastVisit()

Sql -DB_HOSTNAME -DB_USERNAME -DB_PASSWORD -DB_NAME -conn -table -sql -result -row +Connect() +Query() +Fetch() +Close()

Industry -industryID -industry +GetIndustry()

Page | 177

SEQUENCE DIAGRAM

WMS Sequence Diagram


Seeker portion begins with the Registration or Login. struct Seeker Top Package::Seeker metaclass Database struct Employer Admin Console Eligible Admin is assumed with the sequence starting at the loading of employer profiles. Top Package::Admin Once Employer profiles are loaded, jobs may be entered for the Employer. With these entries the Admin can now query for Employer to Jobs matches and reports. Any changes that the Seeker makes to profile information or addition/deletion of docs provides updates to the Admin information. With the input of changes in Seeker profiles, the Admin may query for trends in Seeker behavior. Applications made by the Seeker make calls to the Admin for notifications and to allow scheduling of the Seeker to interview. Admin then provides disposition on interview process. This action provides updates to the Seeker profile indicating assignment. The Registration and/or Login applies information to the Seeker object and follows with call to insert into the database. Valid Seeker Login allows Profile information update to the Seeker object with calls to append, insert or deletes. Valid Seeker may upload/download documents pertaining to resumes, cover letters, etc. Job Search accesses all available jobs with the Seeker able to refine the search based on personal preferences and abilities. Application proceeds with click of button to send message to Admin and provide method of scheduling appts. With appt. scheduled notification is made and interview process begins. Results notifications follow both successful and nonsuccessful hire.

Register Register Confirm Login Login Confirm Profile Update/Change Change Confirm Upload/Download Docs Other Docs Docs Confirm Job Search/List Job List Search Criteria New Criteria Refined List Apply for Job App Confirm App Notification Profile Update

Register Confirmation

Profile Maintenance Profile Notifications Jobs/Employer Populate Jobs/Employer Job/Employer Confirm Employer Reports

Profiles Profile Confirm Jobs/Employer Employer Confirm Employer Reports Seeker Changes Employer Report Seeker Docs Seeker Report Seeker Report

Login Confirm Change Profile Change Confirm Upload/Download Docs Docs Confirm Get Jobs Jobs

Job/Employer Confirm Employer Query

Seeker Changes Employer Report Seeker Docs Seeker Query Seeker Report Employer Report

Criteria Application Application Confirm App Notificaiton New Hire New Hire Application Disposition Seeker No Hire Assigned Employer/Seeker Query Employer/Seeker Results Seeker Assigned Employer to Seeker Employer/Seeker Updates Seeker Application Notification Query Seeker Appl Report Seek App Notification Application Disposition

New Hires provide notification to Admin for assignment to the successful employer interview. This provides profile updates for the Seeker that sets them as a hired employee for the corresponding emp.

Seeker Assigned Reports can be queried Employer to Seeker Report for any of the available profiles or statuses of Report employers to seekers.

Page | 178

Coding
Program name Templates Description Creating all of the HTML/CSS templates for the website. We have a total of three one for the admin side, one for the main side, and one for the admin-login page. We created these pages to model the look and feel of LULs existing website, as they will be used as a module within its structure. Were using Smarty for this web application in order to properly segment the raw PHP code from the templates. This will make the code far easier to manage, and it will reduce the size of the PHP pages considerably. The core files are located in the lib folder. This will include the entire core files needed to run the application. Within this file, I will define the database connection strings, and all of the website constants. This is located in the includes folder this holds all of the functions that the program will use that must communicate with the database. In order to call these functions, you must pass in the needed parameters, and it will use these values to connect to the database. These functions can be called from any page in the application. This will be used later in the application in order to properly display the search results of the users in the website. The core files are located in the lib directory.

Smarty

Config.php SQL.php

Grid

- The link for our system is as follows: http://lulcis.netai.net/

Refactoring and Integration


Code refactoring is "disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior", undertaken in order to improve some of the nonfunctional attributes of the software. Wikipedia, 2011. We were able to integrate code from the job seekers to work within the administrative side of the web. We are in the process of converting the rest of our code to classes, and majority of the code is standardized and streamlined. Before we could standardize the code we had to convert the code into classes as we were instructed to do so. 11/21/2011 We integrated a job seeker initial page with dummy job postings.

Page | 179

Testing
WEB TESTING FUNCTIONALITY1

The following elements should be tested in your web testing. Links - Internal Links - External Links - Mail Links - Broken Links Forms - Field validation - Error message for wrong input - Optional and Mandatory fields Database - Testing will be done on the database integrity Cookies - Testing will be done on the client system side, on the temporary Internet files. Usability Usability testing is the process by which the human-computer interaction characteristics of a system are measured, and weaknesses are identified for correction. - Ease of learning - Navigation - Subjective user satisfaction - General appearance Security The primary reason for testing the security of a web is to identify potential vulnerabilities and subsequently repair them. - Network Scanning - Vulnerability Scanning - Password Cracking - Log Review - Integrity Checkers - Virus Detection

http://www.softwaretestinghelp.com/web-testing-example-test-cases/

Page | 180

W3C Validation LUL initial page XHTML validation

Page | 181

LUL admin XHTML validation

Website is using XHTML 5. We get errors because of it.

Page | 182

UNIT TESTING
Unit testing is conducted to verify the implementation of the design for one software element (e.g., unit, module) or a collection of software elements. The purpose of unit testing is to ensure that the program logic is complete and correct and ensuring that the component works as designed.

Test Results
ID # 1 Test Condition A job seeker applies to a job. Expected Result Generate the confirmation id of the job application. Procedure 1. A job seeker logs in. 2. 3. 4. 5. Creating a New Company Creating Job Post for Comp. 1. A job seeker creates an account 2. Seeker enters invalid email address 3. Seeker submits invalid request 4. System accepts invalid account 1. Hover cursor over Job Seeker button 2.Hover box should fully display 1. Admin inputs data for new job 2. Admin submits filled in form Pass/ Fail

2 3 4

UA I A job seeker creates an account with invalid email UA Posting a new job UA (browser incapability) Delete a Company

New Company Add Company to Job Post No acceptance of new account, error warning of invalid email Full hover box Confirmation page displayed Text boxes in Chrome and IE 9 line up on the left

Pass Pass Fail

5 6 7 8

Fail Fail Fail

Page | 183

Test Case #4 invalid email (missing domain) test

Page | 184

Test Case #5 IE 9 incompatibility issue with hover box

Incompatibility issue with IE9

Page | 185

Test Case #6 test of new job post

Page | 186

Submission error of new job posting

Page | 187

Again Post a Job with invalid Zip plus error warning message on confirmation page. FAIL!!!!!

Page | 188

Test Case #7 test case of Company contact information

Extra digit in Zip Code

Page | 189

Test Case #8 Falsely accepts data with invalid zip code

Page | 190

INTEGRATION TESTING
- Integration Testing is to ensure that design objectives are met and ensures that the software, as a complete entity, complies with operational requirements. Testing is conducted in which software elements, hardware elements, or both are combined and tested until the entire system has been integrated.

Page | 191

Page | 192

Page | 193

USER ACCEPTANCE TESTING


- User acceptance testing is conducted to determine whether or not a system satisfies the acceptance criteria and to enable the customer to determine whether or not to accept the system. This ensures that customer requirements' objectives are met and that all components are correctly included in a customer package. - This testing will be conducted by the instructor team and the clients.

Issues and Risks


No 1 2 3 Description Resolution Strategy Target Resolution Date MM/DD/YYYY 10/06/2011 10/10/2011

Getting familiar with the programs and code


Trying to get the website to connect to the database. Some fields in the database are not of the required data type. Resolve all conflicts with other teams code. Internet Explorer 9 version 9.0.8112.16421 Add a new co and contact table Google Chrome version 15.0.874.106 Add a new co and contact table Creation of Seeker account with invalid email format Hosted code to 000Webhost.com Dropping and re-adding the tables in question with the appropriate data type. Segment the code into modules. Modify code to work with different versions of IE. Modify code to work with different versions of Google Chrome Modify validation code

4 5 6

10/22/2011/ 11/10/2011 11/10/2011

11/15/2011

Page | 194

Section III: Database Design and Applications


This next section provides examples of my experience in database design class which consisted of 12 projects that taught me the core concepts of how to normalize and create data to fit BCNF format. The class also taught me how to programmatically import table data using SQL. My ability to turn a real-world problem into a working database solution is proven in the documents below:

CIS 310 Assignment 2 ERD & business rules:


For this assignment, I created an ERD in Visio Crow's Foot, resolved any multi-valued attribute, represented all four scenarios, and wrote their business rules.

CIS 310 Assignment 3 Database Creation:


For this assignment I designed a database in Visio and created the database in SQL Server account and populate tables as needed.

CIS 310 Assignment 4 Normalization:


This assignment is to draw diagram with normalization of the process which must show all intermediate steps (1NF, 2NF, and 3NF) & an ERD in Crow's Foot format

CIS 310 Assignment 5 - Create Queries:


This is the SQL script I made for the creation of the database and wrote Queries to list specific data, inserted, crated tables, and using views. CIS 310 Assignment 6 - Stored Procedure & Trigger: Wrote a stored procedure that updates all customer balances in database and wrote a trigger to update the balance to reflect any changed to the database ( Balance = the sum of (charter distance * charge per mile)

CIS 310 Assignment 7 - Trigger/Cursors:


Wrote a stored procedure to set the value of CUS_TOTAL_DISTANCE according to the distances in the CHARTER table and Wrote a trigger named A8B to update CUS_TOTAL_DISTANCE to reflect any change to charter distance, including delete, insert, and/or update.

CIS 310 Assignment 8 Star Schema DB:


Created star schema database in my SQL Server database using CREATE TABLE and ALTER TABLE statements and wrote a stored procedure to populate the star schema database

CIS 310 Assignment 9 Star Schema ERD:


Designed a star schema to support the analysis of charter flights

Page | 195

Assignment 2An ERD and business rules


Create an ERD in Visio for the final scenario in exercise 15.f at the end of chapter 2 on page 105. You must use the Crow's Foot format. You will create an ERD for each of the four scenarios. You must also resolve any multi-valued attribute as discussed in class. Name the file A2.vsd. Create a Word file where you list all the business rules for the ERD. You must number the rules clearly. Name the file A2.docx. You must submit the files to Blackboard 5 minutes before the start of class on the due date and submit a printed copy at the start of the class on the due date.

Page | 196

Assignment 2Solutions
Partial Solution (1) Scenario & ERD SCENARIO 1:
Consultant-company: Each company must have one or more consultant(s), and each consultant must work for one and only one company. Consultant-specialty: Each consultant may have many specialties, and each specialty may be possessed by many consultants

ERD1:
Company PK CompanyID Company Name Industry Type PK PK,FK1 Consultant ConsultantID CompanyID Consultant Name Speciality Inventory PK SpecialityID Speciality Name

Specialty Consultant PK,FK2 PK,FK1 PK,FK1 SpecialityID CompanyID ConsultantID

Page | 197

Partial Solution (2) Scenario & ERD SCENARIO 2:


Company-Consultant: Each company must have one or more consultant(s), and each consultant (who charges an hourly rate) must work for one and only one company. Consultant-Specialty: Each consultant may have zero to many specialties, and each specialty may be possessed by many consultants

ERD2:
Company PK CompanyID Company Name Industry Type PK PK,FK1 Consultant ConsultantID CompanyID Consultant Name Hourly Rate Speciality Inventory PK SpecialityID Speciality Name

Specialty Consultant PK,FK2 PK,FK1 PK,FK1 SpecialityID ConsultantID CompanyID

Page | 198

Partial Solution (3) Scenario & ERD SCENARIO 3:


Company-Contract:
Each company must have one or more contract(s). And each contract must have one and only one company

Consultant-Contract:
Each consultant must have one and only one contract with a company and each contract must have one and only one consultant

Consultant-Specialty:
Each consultant may have zero to many specialty(s), and each specialty may be possessed by many consultants

ERD2:
Contract PK PK PK,FK1 Contract Date CompanyID ConsultantID Hourly Rate

Company Consultant PK Company Name Industry Type ConsultantID Consultant Name Specialty Consultant PK,FK2 PK,FK1 SpecialityID ConsultantID

Speciality Inventory PK SpecialityID Speciality Name

Page | 199

Final Partial Solution (4) Scenario & ERD SCENARIO 4:


Company-Contract: Each company must have one or more contracts. And each contract must have one and only one company Consultant-Contract: Each consultant must have one to many contracts (as a consultant can work for many companies over the years) with a company and each contract must have one and only one consultants. Consultant-Specialty: Each consultant may have zero to many specialties, and each specialty may be possessed by many consultants

ERD2:

Contract PK PK PK,FK1 Contract Date CompnayID ConsultantID Hourly Rate

Company PK CompanyID Company Name Industry Type PK

Consultant ConsultantID Consultant Name Specialty Consultant PK,FK2 PK,FK1 SpecialityID ConsultantID

Speciality Inventory PK SpecialityID Speciality Name

Page | 200

Assignment 3Create an ERD


Create an ERD in Visio Crow's Foot for exercise 16 on page 145. Your assignment is to create a database that will fulfill the operations described in this problem. Create a design of the database in Visio and save the file as A2.vsd. Create the database in your SQL Server account. To avoid any name conflict, you may name the tables in this assignment with an A5 suffix. Make sure all the constraints are properly defined. No need to turn in the data definition statements. Populate the tables as needed (as indicated in the sample data, i.e., the Access database and forms). Any changes to the database after the due date will automatically make the assignment late.

Page | 201

Assignment 3Solutions
MEDIA PK MTypeID MediaType MediaTypeDesc ROOMEQUIPMENT PK,FK1 PK,FK1 PK,FK2 BuildingID RoomNo MTypeID Quantity PK PK ROOM BuildingID RoomNo RmCapacity RmType

TRAINING PK,FK1 PK,FK2 MTypeID EmpID DateCompleted

PREFERENCE PK,FK1 PK,FK2 EmpID TSID HowBad PK,FK1 PK,FK1 LAB BuildingID RoomNo CLASSROOM PK,FK1 PK,FK1 BuildingID RoomNo BoardType

INSTRUCTOR PK EmpID EmpName EmpRank EmpOfficePhone PK LABEQUIPMENT PK,FK1 PK,FK1 PK,FK2 BuildingID RoomNo CTypeID Quantity SECTION PK SectionID EnrLimit Semester Year EmpID CourseID PK SCHEDULE PK FK1 FK2 FK3 FK3 ScheduleID SectionID TSID BuildingID RoomNo Year Semester ComputerType TypeDesc ProfessorSpd DiskCapacity DayOfWeek StartTime EndTime COMPUTER CTypeID

TIMESLOT TSID

FK1 FK2

COURSE PK CourseID CourseDesc CourseCredits

PREREQUISITE PK,FK1 PK,FK2 CourseID PrerequisiteID EffectiveDate

Page | 202

Assignment 4Normalization, Business rules, and ERD


Exercise 14 on page 198 (Relational Database Textbook). Please note the following: 1. Your dependency diagram must be drawn as shown in class. 2. Your normalization process must show all intermediate steps. In other words you must show the database in 1NF, 2NF, and 3NF. Save the results in A5.docx. If you decide to draw the diagrams by hand, please draw carefully so that I can read them. 3. Create an ERD in Crow's Foot format

Page | 203

Assignment 4Solutions
Part1:
Normalization Of Pine Valley Furniture Company Purchasing Data

1NF
Material ID Materia l Name Unit of Measure Standard Cost Vendor ID Vendor Name Unit Price Terms Code Terms

2NF
Material ID Vendor ID Terms Code Terms

Vendor ID

Vendor Name

Unit price

Material ID

Material Name

Unit of Measure

Standard Cost

3NF
Terms Code Terms Material ID Vendor ID Terms Code

Vendor ID

Vendor Name

Unit Price

Material ID

Material Name

Unit of Measure

Standard Cost

Page | 204

Part2: Business Rules:


1. Each sale must have one and only one terms, but the term may apply to as many sales. 2. Each vendor may be involved in many sales, but each sale engages one and only one vendor. 3. Each material may be sold in many sales. Each sale engages only one material. 4. Each material item must have at least one supplier. Each supplier may supply one or more items

Part3: ERD in Crow's Foot format

Sale PK,FK2 FK3 FK1 Vendor ID Material ID Terms Code PK

Vendor Vendor ID Vendor Name Unit Price

Terms PK Terms Code Terms PK Material Material ID Material Name Unit of Measure Standard Cost Vendor Has Item PK,FK1 PK,FK2 Vendor ID Material ID

Page | 205

Assignment 5Create Queries


Finish the following exercises using the database CIS310A4. Please note you only have SELECT permission in that database. As a result for some queries you have to execute them from within your database. You may use CIS310A7 to quality the tables as in: SELECT * FROM CIS310A7..ANIMAL. Please note I am not giving you the results of queries as determining if your results are correct is part of the assignment. For some questions it may be much easier to use views to create intermediate results. In that case you will see a note at the end of the question to that effect. All other questions must be completed with one statement. A nested query does not count as an additional statement. 1. List the products with a list price greater than the average list price of all products. 2. On average, which sold in less time: male cats or female cats? The difference in days between order date and sale date determines what gender sold in less time. List the average time it takes to sell each gender. 3. List the cats that took longer than average cats to sell. 4. Which merchandise items have an average sale price more than 50 percent higher than their average purchase cost? 5. List the employees and their total merchandise sales expressed as a percentage of total merchandise sales for all employees. 6. On average, which supplier charges the highest shipping cost as a percent of the merchandise order total? 7. Which customer has given us the most total money for animals and merchandise? 8. Which customers who bought more than $100 in merchandise in May also spent more than $50 on merchandise in October? 9. List the customers who bought dogs in the first quarter and also bought dog food in the fourth quarter. 10. What was the net change in quantity on hand for premium canned dog food between January 1 and July 1? 11. Which merchandise items with a list price of more than $50 hand no sales July? 12. Which merchandise items with more than 100 units on hand have not been ordered in 2004? Use an outer join to answer the question. 13. Which merchandise items with more than 100 units on hand have not been ordered in 2004? Use a subquery to answer the question. 14. Which cat products with a quantity on hand greater than 500 have not been sold in the month of July? 15. Which dog breeds have never been sold at the pet store? Use an outer join to answer the question. Page | 206

16. Which dog breeds have never been sold at the pet store? Use a subquery to answer the question. 17. List the employees who report to Gibson. 18. Save a query to answer Exercise 7: total amount of money spent by each customer. Create the table shown to categorize customers based on sales. Write a query that lists each customer from the first query and displays the proper label. You must turn in ALL the code needed to finish this exercise. You may not use any GUI tool. Code only. May use views. Category Low High Weak 0 200 Good 200 800 Best 800 10000 19. List all suppliers (animals and merchandise) who sold us items in June. Identify whether they sold use animals or merchandise. 20. List the states for which our customers have spent more than seven times as much money on animals than on merchandise (in total). 21. Write a query to create the table shown in Exercise 18. 22. Write a query to insert the first row of data for the table in Exercise 18. 23. Write a query to change the High value to 400 in the first row of the table in Exercise 18. 24. Create a query to delete the first row of the table in Exercise 18. 25. Create a copy of the Employee table structure. Use a delete query to remove all data from the copy. Write a query to copy from the original employee table into the new one

Page | 207

Assignment 5Solutions
/* Bakre Idiazza */

use cis310a4 --1 SELECT itemid, description, listprice from merchandise where listprice > (select avg(listprice) from merchandise) --2 Select a.gender, avg(DATEDIFF(day, ao.orderdate, s.saledate)) as [delay in days] from sale s inner join saleanimal sa on s.saleid = sa.saleid inner join animal a on sa.animalid = a.animalid inner join animalorderitem aoi on aoi.animalid = a.animalid inner join animalorder ao on aoi.orderid = ao.orderid where a.category = 'cat' group by a.gender --3 select a.animalid, a.name, (cast(s.saledate - ao.orderdate as int)) as [Delay] from animal a, saleanimal sa, animalorder ao, sale s, animalorderitem aoi where ao.orderid = aoi.orderid and sa.saleid = s.saleid and a.animalid = aoi.animalid and a.animalid = sa.animalid and a.category = 'CAT' and (cast(s.saledate - ao.orderdate as int)) > ( Select avg(cast(s.saledate - ao.orderdate as int)) from animal a, saleanimal sa, animalorder ao, sale s, animalorderitem aoi where a.animalid = sa.animalid and sa.saleid = s.saleid and a.animalid = aoi.animalid and ao.orderid = aoi.orderid and a.category = 'cat' ) order by [Delay] desc --4 Select m.itemid, m.description, avg(oi.cost) as [AvgOfCost], avg(si.saleprice) as [AvgOfSalePrice] from saleitem si inner join merchandise m on si.itemid = m.itemid inner join orderitem oi on m.itemid = oi.itemid group by m.itemid, m.description having avg(si.saleprice) > (1.5 * avg(oi.cost))

Page | 208

--5 Select e.employeeid, e.lastname, sum(si.saleprice) as [TotalSales], round(sum(si.saleprice) * 100 / (select sum(saleprice)from saleitem),1) as [PctSales] from saleitem si inner join sale s on si.saleid = s.saleid inner join employee e on e.employeeid = s.employeeid group by e.employeeid, e.lastname --6 Select su.supplierid, su.name, (select avg(mo.shippingcost/oi.quantity * oi.cost + mo.shippingcost) from merchandiseorder mo inner join orderitem oi on oi.ponumber = mo.ponumber) as [pctshipcost] From supplier su inner join merchandiseorder mo on su.supplierid = mo.supplierid where mo.shippingcost = (select max(mo.shippingcost) from merchandiseorder mo) --7 use cis31015 create view CustAnimalSalePriceSum as select cu.CustomerID, cu.LastName, cu.FirstName, sum(sa.SalePrice) as SumOfAnimalSalePrice from cis310A7..Customer cu inner join cis310A7..Sale s on cu.CustomerID = s.CustomerID inner join cis310A7..SaleAnimal sa on s.SaleID = sa.SaleID group by cu.CustomerID, cu.LastName, cu.FirstName create view CustMerchSalePriceSum as select cu.CustomerID, cu.LastName, cu.FirstName, sum(si.Quantity) as MerchTotal, sum(si.Quantity * si.SalePrice) as SumOfItemSalePrice from cis310A7..Customer cu inner join cis310A7..Sale s on cu.CustomerID = s.CustomerID inner join cis310A7..SaleItem si on s.SaleID = si.SaleID group by cu.CustomerID, cu.LastName, cu.FirstName select ms.CustomerID, ms.LastName, ms.FirstName, ms.MerchTotal, ms.SumOfItemSalePrice, ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice as GrandTotal from CustAnimalSalePriceSum ns inner join CustMerchSalePriceSum ms on ns.CustomerID = ms.CustomerID group by ms.CustomerID, ms.LastName, ms.FirstName, ms.MerchTotal, ms.SumOfItemSalePrice, ns.SumOfAnimalSalePrice having ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice in (select max(ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice) from CustAnimalSalePriceSum ns inner join CustMerchSalePriceSum ms on ns.CustomerID = ms.CustomerID) use cis310a4 --8 select cu.customerid, cu.lastname, cu.firstname, sum(si.Quantity * si.SalePrice) as [TotalMerchBought], s.saledate from saleitem si inner join sale s on si.saleid = s.saleid inner join customer cu

Page | 209

on cu.customerid = s.customerid where s.saledate >= '2004-05-01' and s.saledate <= '2004-05-31' or s.saledate >= '2004-10-01' and s.saledate <= '2004-10-31' group by cu.customerid, cu.lastname, cu.firstname, s.saledate having sum(si.Quantity * si.SalePrice)> = 50 --9 Select cu.CustomerID, cu.LastName, cu.FirstName, s.SaleDate, b.Category From Customer cu inner join Sale s on cu.customerid = s.customerid inner join saleanimal sa on sa.saleid = s.saleid inner join animal a on a.animalid = sa.animalid inner join breed b on b.category = a.category where b.category = 'dog' and month(s.saledate) between 1 and 4 and cu.customerid IN (select cu.customerid from category ca inner join animal a on ca.category = a.category inner join saleanimal sa on sa.saleid = s.saleid inner join customer cu on s.customerid = cu.customerid where ca.category = 'dog' or month(s.saledate) between 9 and 12) group by cu.CustomerID, cu.LastName, cu.FirstName, s.SaleDate, b.Category --10 use cis31015 create view PremDogFoodSold as select m.description, s.saledate, sum(si.quantity * si.saleprice) as [TotalPremDogFoodSold] from cis310A7..merchandise m inner join cis310A7..saleitem si on m.itemid = si.itemid inner join cis310A7..sale s on s.saleid = si.saleid Where s.SaleDate between 'July 01, 2004' and 'January 01, 2004' and m.description = 'Dog Food-Can-Premium' group by m.description, s.saledate create view PremDogFoodPurchased as select m.description, s.saledate, sum(oi.quantity * cost) as [TotalPremDogFoodPurchased] from cis310A7..merchandise m inner join cis310A7..orderitem oi on m.itemid = oi.itemid inner join cis310A7..saleitem si on m.itemid = si.itemid inner join cis310A7..sale s on s.saleid = si.saleid where s.saledate between 'july 01, 2004' and 'january 01, 2004' and m.description = 'Dog Food-Can-Premium' group by m.description, s.saledate Select m.description, ps.description, pp.description, m.itemid, pp.totalpremdogfoodpurchased - ps.totalpremdogfoodsold as [net change] from merchandise m inner join totalpremdogfoodpurchased pp on m.description = pp.description inner join totalprmdogfoodsold ps on pp.description = ps.description group by m.description, m.item, pp.totallpremdogfoodpurchased, ps.totalpremdogfoodsold

Page | 210

--11 Select itemid, description, listprice from merchandise where (listprice > = 70) and itemid not in (select m.itemid from merchandise m inner join saleitem si on m.itemid = si.itemid inner join sale s on si.saleid = s.saleid where month(s.saledate) = 7) --12 Select m.itemid as [Merchandise.ItemID], m.Description, m.QuantityOnHand, oi.itemid as [OrderItem.ItemID] from merchandise m left outer join orderitem oi on m.itemid = oi.itemid right outer join merchandiseorder mo on oi.ponumber = mo.ponumber where m.QuantityOnHand > 100 and year(mo.OrderDate) != 2004 --13 select m.itemid, m.description, m.quantityonhand from merchandise m inner join orderitem oi on m.itemid = oi.itemid inner join merchandiseorder mo on oi.ponumber = mo.ponumber where (year(mo.orderdate) != 2004) and m.quantityonhand not in (select m.quantityonhand from merchandise where m.quantityonhand > 100) --14 select m.itemid, m.description, m.quantityonhand, s.saledate from merchandise m inner join saleitem si on m.itemid = si.itemid inner join sale s on si.saleid = s.saleid where m.description like '%cat%' and quantityonhand > 500 and s.saledate not in (select s.saledate from sale s where month(s.saledate) = 4) --15 create view soldanimals as select distinct a.breed from cis310a7..animal a right outer join cis310a7..saleanimal sa on a.animalid = sa.animalid use cis31015 select from where a.breed cis310a7..animal a a.breed not in (select * from soldanimals)

--16 select a.breed from cis310a7..animal a where a.breed not in (select a.breed from cis310a7..animal a inner join cis310a7..saleanimal sa on sa.animalid = a.animalid)

Page | 211

--17 use cis310a4 select e1.lastname as [ManagerLastName], e1.EmployeeID, e1.lastname as [Employee.LastName], e1.firstName, e2.Title from employee e1 inner join employee e2 on e1.employeeid = e2.employeeid where e1.lastname = 'gibson' --18 use cis31015 create view TotalAmountOfMoneySpent as taoms select ms.CustomerID, ms.LastName, ms.FirstName, ms.MerchTotal, ms.SumOfItemSalePrice, ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice as GrandTotal from CustAnimalSalePriceSum ns inner join CustMerchSalePriceSum ms on ns.CustomerID = ms.CustomerID group by ms.CustomerID, ms.LastName, ms.FirstName, ms.MerchTotal, ms.SumOfItemSalePrice, ns.SumOfAnimalSalePrice having ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice in (select (ms.SumOfItemSalePrice + ns.SumOfAnimalSalePrice) from CustAnimalSalePriceSum ns inner join CustMerchSalePriceSum ms on ns.CustomerID = ms.CustomerID) CREATE TABLE CategorizeCustomerSales ( Category char(5) Low int not null, High int not null, ) alter table CategorizeCustomerSales add constraint PK_CategorizeCustomerSales PRIMARY KEY (CustomerID) REFERENCES Customer insert values insert values insert values into CategorizeCustomerSales(Category, Low, High) ('weak', 0, 200) into CategorizeCustomerSales(Category, Low, High) ('good', 200, 800) into CategorizeCustomerSales(Category, Low, High) ('best', 800, 10000)

select taoms.customerid, taoms.lastname, taoms.fistname, taoms.grandtotal, ccs.category from TotalAmountOfMoneySpent taoms inner join CategorizeCustomerSales ccs on ccs.customerid = taoms.customerid

--19 select m.itemid, a.category from animal a inner join merchandise m on a.category = m.category union all select itemid, s.saledate from merchandise m inner join saleitem si on m.itemid = si.itemid inner join sale s

Page | 212

on s.saleid = si.saleitem where month(s.saledate) = '6' --19 select b.category, ca.category from breed b inner join category ca on b.category = ca.category union all select s.saledate, ca.category from category ca inner join merchandise m on ca.category = m.category inner join saleitem si on m.itemid = si.itemid inner join sale s on s.saleid = si.saleid where s.saledate in (select s.saledate from sale s where month(s.saledate) = '6') --20 select ci.state, sa.saleprice as [animlasales], (sum(si.quantity * si.saleprice)) as [merchsales] from city ci inner join customer cu on cu.cityid = ci.cityid inner join sale s on cu.customerid = s.customerid inner join saleitem si on s.saleid = si.saleid inner join saleanimal sa on sa.saleid = si.saleid group by ci.state, sa.saleprice having (sum(si.quantity * si.saleprice) + sa.saleprice) > 7 * (sum(si.quantity * si.saleprice))
/****************************** CREATE TABLES *******************************************/

--21 use cis31015 create table CategorizeCustomerSales ( CustomerID int, LastName varchar(30), FirstName varchar(30), GrandTotal int, Category Varchar(30), ) --22 insert into CategorizeCustomerSales(CustomerID, LastName, FirstName, SumOfItemSalePrice, Category) values ( 1,'Walkin','Walkin',2071.35, 'best') --23 select * from CategorizeCustomerSales order by category, high insert into CategorizeCustomerSales values ('weak', 0, 200) delete from CategorizeCustomerSales where High = 200 update CategorizeCustomerSales set High = 400

Page | 213

where Category = 'weak' --24 Delet from CategorizeCustmerSales where (Category, Low, High)=('weak', 0, 400) --25 use cis310a4 use cis31015 select * into employee1 from employee delete from employee1 use cis31015 insert into employee1(EMP_NUM, EMP_TITLE, EMP_LNAME, EMP_FNAME, EMP_INITIAL, EMP_DOB, EMP_HIRE_DATE) values (100, 'Mr.', 'Kolmycz','George','D', 1942-06-15, 1987-03-15) insert into employee1(EMP_NUM, EMP_TITLE, EMP_LNAME, EMP_FNAME, EMP_INITIAL, EMP_DOB, EMP_HIRE_DATE) values (101, 'Ms.', 'Lewis','Rhonda','G', 1965-03-19, 1988-04-25) insert into employee1(EMP_NUM, EMP_TITLE, EMP_LNAME, EMP_FNAME, EMP_INITIAL, EMP_DOB, EMP_HIRE_DATE) values (102, 'Mr.', 'VanDam','Rhett',' ', 1958-11-14, 1992-12-20) select * from employee1

Page | 214

Assignment 6Stored Procedure & Trigger

Part 1. Write a stored procedure that updates all customer balances in the Charter database (see assignment 6). Balance = the sum of (charter distance * charge per mile). Part 2. Write a trigger named A8 to update the balance to reflect any change to charter distance, including delete, insert, and/or update. You must consider all possible cases.

Page | 215

Assignment 6Solutions
Solution Part1/Trigger:
USE [cis31015] GO /****** Object: Trigger [dbo].[update_customer_balances] Script Date: 03/30/2011 05:55:21 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Baker Idiazza -- Create date: 3/30/11 -- Description: Assignment 8 -- ============================================= ALTER TRIGGER [dbo].[UPDATE_ALL_BALANCES] ON [dbo].[CHARTER] AFTER INSERT,DELETE,UPDATE AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; SELECT 'INSERTED TABLE CONTENT' SELECT * FROM INSERTED SELECT 'DELETED TABLE CONTENT' SELECT * FROM DELETED -- Insert statements for trigger here DECLARE @CUS_CODE INT DECLARE @NEW_BALANCE REAL --UPDATE CASE: IF(EXISTS (SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED)) BEGIN DECLARE UPDATE_CURSOR CURSOR FOR SELECT I.CUS_CODE, SUM(CH.CHAR_DISTANCE * M.MOD_CHG_MILE) AS NEW_BALANCE FROM CHARTER CH INNER JOIN AIRCRAFT AC ON CH.AC_NUMBER = AC.AC_NUMBER INNER JOIN MODEL M ON AC.MOD_CODE = M.MOD_CODE INNER JOIN INSERTED I ON CH.CUS_CODE = I.CUS_CODE INNER JOIN DELETED D ON I.CUS_CODE = D.CUS_CODE AND I.CHAR_TRIP = D.CHAR_TRIP GROUP BY I.CUS_CODE

Page | 216

BEGIN OPEN UPDATE_CURSOR FETCH NEXT FROM UPDATE_CURSOR INTO @CUS_CODE, @NEW_BALANCE WHILE(@@FETCH_STATUS = 0) BEGIN UPDATE C SET C.CUS_BALANCE = CH.CHAR_DISTANCE * M.MOD_CHG_MILE FROM CHARTER CH INNER JOIN AIRCRAFT AC ON CH.AC_NUMBER = AC.AC_NUMBER INNER JOIN MODEL M ON AC.MOD_CODE = M.MOD_CODE INNER JOIN CUSTOMER C ON CH.CUS_CODE = C.CUS_CODE WHERE C.CUS_CODE = @CUS_CODE FETCH NEXT FROM UPDATE_CURSOR INTO @CUS_CODE, @NEW_BALANCE END CLOSE UPDATE_CURSOR DEALLOCATE UPDATE_CURSOR END --INSERT CASE: IF(NOT Exists (SELECT * FROM DELETED) AND EXISTS(SELECT * FROM INSERTED)) BEGIN DECLARE INSERT_CURSOR CURSOR FOR SELECT CUS_CODE, SUM(CHAR_DISTANCE * MOD_CHG_MILE) FROM INSERTED GROUP BY CUS_CODE OPEN INSERT_CURSOR FETCH NEXT FROM TEST INTO @CUS_CODE, @NEW_BALANCE WHILE(@@FETCH_STATUS = 0) BEGIN UPDATE CHARTER SET CUS_BALANCE = CUS_BALANCE - @NEW_BALANCE WHERE CUS_CODE = @CUS_CODE FETCH NEXT FROM INSERT_CURSOR INTO @CUS_CODE, @NEW_BALANCE END CLOSE INSERT_CURSOR DEALLOCATE INSERT_CURSOR END --DELETE CASE: IF(EXISTS (SELECT * FROM DELETED) AND (NOT EXISTS (SELECT * FROM INSERTED))) BEGIN DECLARE DELETE_CURSOR CURSOR FOR SELECT CUS_CODE, SUM(CHAR_DISTANCE * MOD_CHG_MILE) FROM DELETED GROUP BY CUS_CODE

Page | 217

OPEN DELETE_CURSOR FETCH NEXT FROM TEST INTO @CUS_CODE, @CUS_CODE WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE CHARTER SET CUS_BALANCE = CUS_BALANCE + @CUS_CODE WHERE CUS_CODE = @CUS_CODE FETCH NEXT FROM DELETE_CURSOR INTO @CUS_CODE, @CUS_CODE END CLOSE DELETE_CURSOR DEALLOCATE DELETE_CURSOR END BEGIN EXEC UPDATE_ALL_BALANCES END END GO

Page | 218

Solution Part2/Stored Procedure:


-- ================================================ -- Template generated from Template Explorer using: -- Create Procedure (New Menu).SQL --- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. --- This block of comments will not be included in -- the definition of the procedure. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Bakre Idiazza -- Description: Assignment #8 -- ============================================= CREATE PROCEDURE [dbo].[UPDATE_ALL_BALANCES] -- Add the parameters for the stored procedure here AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here BEGIN SELECT CU.CUS_CODE, SUM(M.MOD_CHG_MILE * CH.CHAR_DISTANCE) AS BALANCE INTO #NEW_CUS_BALANCE FROM CHARTER CH INNER JOIN AIRCRAFT AC ON CH.AC_NUMBER = AC.AC_NUMBER INNER JOIN MODEL M ON AC.MOD_CODE = M.MOD_CODE INNER JOIN CUSTOMER CU ON CH.CUS_CODE = CU.CUS_CODE GROUP BY CU.CUS_CODE UPDATE SET FROM WHERE END END GO C C.CUS_BALANCE = NCB.BALANCE CUSTOMER C INNER JOIN #NEW_CUS_BALANCE NCB ON C.CUS_CODE = NCB.CUS_CODE C.CUS_CODE = NCB.CUS_CODE

Page | 219

Assignment 7Stored Procedure & Trigger/Cursors

Part 1. Add a column called CUS_TOTAL_DISTANCE to the CUSTOMER table to represent the total number of miles flown. Write a stored procedure to set the value of CUS_TOTAL_DISTANCE according to the distances in the CHARTER table. Part 2. Write a trigger named A8B to update CUS_TOTAL_DISTANCE to reflect any change to charter distance, including delete, insert, and/or update. You must consider all possible cases. This assignment is designed to help us better understand triggers and the use of cursors.

Page | 220

Assignment 7Solutions
Solution Part1/Stored Procedure:
USE [cis31015] GO /****** Object: StoredProcedure [dbo].[UPDATE_DISTANCE] Script Date: 04/18/2011 11:58:16 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Baker Idiazza> -- ============================================= ALTER PROCEDURE [dbo].[UPDATE_DISTANCE] AS BEGIN DECLARE TOTAL_DISTANCE CURSOR FOR SELECT CUS_CODE, SUM(CHAR_DISTANCE) AS CUS_TOTAL_DISTANCE FROM CHARTER GROUP BY CUS_CODE DECLARE @CUS_CODE INT DECLARE @CUS_TOTAL_DISTANCE REAL OPEN TOTAL_DISTANCE FETCH NEXT FROM TOTAL_DISTANCE INTO @CUS_CODE, @CUS_TOTAL_DISTANCE WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE CUSTOMER SET CUS_TOTAL_DISTANCE = @CUS_TOTAL_DISTANCE WHERE CUS_CODE = @CUS_CODE FETCH NEXT FROM TOTAL_DISTANCE INTO @CUS_CODE, @CUS_TOTAL_DISTANCE END CLOSE TOTAL_DISTANCE DEALLOCATE TOTAL_DISTANCE END

Page | 221

Solution- Part2/Trigger:
USE [cis31015] GO /****** Object: Trigger [dbo].[TRG_UPDATE_DISTANCE] 04/18/2011 11:55:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Baker Idiazza> -- ============================================= ALTER TRIGGER [dbo].[TRG_UPDATE_DISTANCE] ON [dbo].[CHARTER] AFTER INSERT,DELETE,UPDATE AS BEGIN DECLARE @CUS_CODE INT DECLARE @CUS_TOTAL_DISTANCE REAL

Script Date:

--INSERTED TABLE IS NOT EMPTY IF(EXISTS (SELECT * FROM INSERTED)) BEGIN DECLARE INSERT_CURSOR CURSOR FOR SELECT I.CUS_CODE, SUM(I.CHAR_DISTANCE) AS CUS_TOTAL_DISTANCE FROM INSERTED I GROUP BY I.CUS_CODE OPEN INSERT_CURSOR FETCH NEXT FROM INSERT_CURSOR INTO @CUS_CODE, @CUS_TOTAL_DISTANCE WHILE(@@FETCH_STATUS = 0) BEGIN UPDATE CUSTOMER SET CUS_TOTAL_DISTANCE = CUS_TOTAL_DISTANCE + @CUS_TOTAL_DISTANCE where CUS_CODE = @CUS_CODE FETCH NEXT FROM INSERT_CURSOR INTO @CUS_CODE, @CUS_TOTAL_DISTANCE END CLOSE INSERT_CURSOR DEALLOCATE INSERT_CURSOR END --DELETED TABLE IS NOT EMPTY IF(EXISTS (SELECT * FROM DELETED)) BEGIN DECLARE DELETE_CURSOR CURSOR FOR SELECT D.CUS_CODE, SUM(D.CHAR_DISTANCE) AS CUS_TOTAL_DISTANCE FROM DELETED D GROUP BY D.CUS_CODE OPEN DELETE_CURSOR FETCH NEXT FROM DELETE_CURSOR INTO @CUS_CODE, @CUS_TOTAL_DISTANCE WHILE(@@FETCH_STATUS = 0) BEGIN UPDATE CUSTOMER SET CUS_TOTAL_DISTANCE = CUS_TOTAL_DISTANCE @CUS_TOTAL_DISTANCE WHERE CUS_CODE = @CUS_CODE

Page | 222

FETCH NEXT FROM DELETE_CURSOR INTO @CUS_CODE, @CUS_TOTAL_DISTANCE END CLOSE DELETE_CURSOR DEALLOCATE DELETE_CURSOR END END

Page | 223

Assignment 8Star Schema DB


Part 1. Create the star schema database in your SQL Server database using CREATE TABLE and ALTER TABLE statements. You must use ALTER TABLE statements to add all key constraints. Save the sql statements in A11A.sql. Part 2. Write a stored procedure called A11 to populate the star schema database. The procedure should be written so that it can be used to populate the star schema database whether or not the database has already been populated. If the database has been populated, the existing data will be written over. Turn in a copy of the stored procedure.

Page | 224

Assignment 8Solutions
Solution Part1/Create star schema:
/* Bakre Idiazza */ /****************************** CREATE TABLES *******************************************/

--CUSTOMERDIM CREATE TABLE CUSTOMERDIM ( CUSTOMERID INT identity (1,1), CUS_CODE INT NOT NULL, CUS_LNAME NVARCHAR(15) NULL, CUS_FNAME NVARCHAR(15) NULL, ) ALTER TABLE CUSTOMERDIM ADD CONSTRAINT PK_CUSTOMERDIM PRIMARY KEY (CUSTOMERID) --PILOTDIM CREATE TABLE PILOTDIM ( PILOTID INT identity (1,1), EMP_NUM INT NOT NULL, EMP_TITLE NVARCHAR(15) NULL, EMP_LNAME NVARCHAR (15) NULL, PIL_LICENSE NVARCHAR (25) NULL, PIL_RATINGS NVARCHAR (25) NULL ) ALTER TABLE PILOTDIM ADD CONSTRAINT PK_PILOTDIM PRIMARY KEY (PILOTID) --TIMEDIM CREATE TABLE TIMEDIM ( TIMEID INT identity (1,1), CHARTER_DATE DATETIME NOT NULL, DAY INT NULL, WEEK INT NULL, MONTH INT NULL, QUARTER INT NULL, YEAR INT NULL ) ALTER TABLE TIMEDIM ADD CONSTRAINT PK_TIMEDIM PRIMARY KEY (TIMEID) --MODELDIM CREATE TABLE MODELDIM ( MODELID INT identity (1,1), MOD_CODE NVARCHAR(10) NOT NULL, MOD_MANUFACTURER NVARCHAR(15) NULL, MOD_NAME NVARCHAR(20) NULL, MOD_SEATS FLOAT NULL,

Page | 225

MOD_CHG_MILE REAL NULL ) ALTER TABLE MODELDIM ADD CONSTRAINT PK_MODELDIM PRIMARY KEY (MODELID) --FACT CREATE TABLE FACT ( MODELID INT NOT NULL, TIMEID INT NOT NULL, CUSTOMERID INT NOT NULL, PILOTID INT NOT NULL, DISTANCE REAL NULL, HOURS_FLOWN FLOAT NULL, FUEL_GALLONS FLOAT NULL, OIL_QTS INT NULL, COST REAL NULL ) ALTER TABLE FACT ADD CONSTRAINT PK_FACT PRIMARY KEY (MODELID, TIMEID, CUSTOMERID, PILOTID) ALTER TABLE FACT ADD CONSTRAINT CONSTRAINT CONSTRAINT CUSTOMERDIM, CONSTRAINT FK_FACT_MODELDIM FOREIGN KEY (MODELID) REFERENCES MODELDIM, FK_FACT_TIMEDIM FOREIGN KEY (TIMEID) REFERENCES TIMEDIM, FK_FACT_CUSTOMERDIM FOREIGN KEY (CUSTOMERID) REFERENCES FK_FACT_PILOTDIM FOREIGN KEY (PILOTID) REFERENCES PILOTDIM

Page | 226

Solution Part2/Store Procedure:


-- ================================================ -- Template generated from Template Explorer using: -- Create Procedure (New Menu).SQL --- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. --- This block of comments will not be included in -- the definition of the procedure. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: Baker Idiazza -- ============================================= -- A11 SOTRE PROCDURE ALTER PROCEDURE A11 AS BEGIN --SET NOCOUNT ON ADDED TO PREVENT EXTRA RESULT SETS FROM --INTERFERING WITH SELECT STATMENTS. SET NOCOUNT ON; --STEP 1 --DIMENSIONS CONSTRAINTS OFF ALTER TABLE CUSTOMERDIM NOCHECK CONSTRAINT ALTER TABLE PILOTDIM NOCHECK CONSTRAINT ALTER TABLE TIMEDIM NOCHECK CONSTRAINT ALTER TABLE MODELDIM NOCHECK CONSTRAINT --STEP 2 --FACTS CONSTRAINT OFF ALTER TABLE FACT DROP CONSTRAINT ALTER TABLE FACT DROP CONSTRAINT ALTER TABLE FACT DROP CONSTRAINT ALTER TABLE FACT DROP CONSTRAINT ALTER TABLE FACT PK_FACT FK_FACT_MODELDIM FK_FACT_TIMEDIM FK_FACT_CUSTOMERDIM ALL ALL ALL ALL

Page | 227

DROP CONSTRAINT FK_FACT_PILOTDIM --STEP 3 --TRUNCATE STAR SCHEMA TRUNCATE TRUNCATE TRUNCATE TRUNCATE TRUNCATE TABLE TABLE TABLE TABLE TABLE MODELDIM CUSTOMERDIM TIMEDIM PILOTDIM FACT TO FACT TABLE

--ADD CONSTRAINTS

ALTER TABLE FACT ADD CONSTRAINT PK_FACT PRIMARY KEY (MODELID, TIMEID, CUSTOMERID, PILOTID) ALTER TABLE FACT ADD CONSTRAINT CONSTRAINT CONSTRAINT CUSTOMERDIM, CONSTRAINT FK_FACT_MODELDIM FOREIGN KEY (MODELID) REFERENCES MODELDIM, FK_FACT_TIMEDIM FOREIGN KEY (TIMEID) REFERENCES TIMEDIM, FK_FACT_CUSTOMERDIM FOREIGN KEY (CUSTOMERID) REFERENCES FK_FACT_PILOTDIM FOREIGN KEY (PILOTID) REFERENCES PILOTDIM

--ENABLE CONSTRAINTS ON DIMENSION TABLES AGAIN ALTER TABLE CHECK ALTER TABLE CHECK ALTER TABLE CHECK ALTER TABLE CHECK CUSTOMERDIM CONSTRAINT ALL PILOTDIM CONSTRAINT ALL TIMEDIM CONSTRAINT ALL MODELDIM CONSTRAINT ALL

INSERT INTO MODELDIM (MOD_CODE, MOD_MANUFACTURER, MOD_NAME, MOD_SEATS, MOD_CHG_MILE) SELECT MOD_CODE, MOD_MANUFACTURER, MOD_NAME, MOD_SEATS, MOD_CHG_MILE FROM MODEL INSERT INTO CUSTOMERDIM (CUS_CODE, CUS_LNAME, CUS_FNAME) SELECT CUS_CODE, CUS_LNAME, CUS_FNAME FROM CUSTOMER INSERT Into PILOTDIM ( EMP_NUM, EMP_TITLE, EMP_LNAME, PIL_LICENSE, PIL_RATINGS) SELECT DISTINCT P.EMP_NUM, E.EMP_TITLE, E.EMP_LNAME, P.PIL_LICENSE, P.PIL_RATINGS FROM PILOT P INNER JOIN EMPLOYEE E ON E.EMP_NUM = P.EMP_NUM INNER JOIN CREW C ON C.EMP_NUM = P.EMP_NUM WHERE C.CREW_JOB = 'PILOT'

Page | 228

INSERT INTO TIMEDIM (CHARTER_DATE, DAY, WEEK, MONTH, QUARTER, YEAR) SELECT DISTINCT CHAR_DATE, DATEPART(dd, char_date) as day, DATEPART(wk, char_date) as week, datepart(mm, char_date) as month, datepart(qq, char_date) as quarter, datepart (yy, char_date) as year From charter where datepart (yyyy, char_date) = 2006 /*Creat Staging Table*/ Create table #Staging ( Cus_Code int, Emp_Num int, Mod_Code varchar(10), Charter_Date datetime, CustomerId int, PilotId int, TimeId int, ModelId int, Distance int, Hours_Flown int, Fuel_Gallons int, Oil_Qts int, Cost money, ) /*Populate Part of Staging Table With Transaction Key*/ Insert into #Staging (Cus_Code, Emp_Num, Charter_Date, Mod_Code, Distance, Hours_Flown, Fuel_Gallons, Oil_Qts, Cost) Select Distinct Ch.Cus_Code, E.Emp_Num, Ch.Char_Date, M.Mod_code, Ch.Char_Distance [Distance], Ch.Char_Hours_Flown [Hours_Flown], Ch.Char_Fuel_Gallons [Fuel_Gallons], Ch.Char_Oil_Qts [Oil_Qts], M.Mod_Chg_Mile [Cost] From Model M inner join Aircraft A on M.Mod_Code = A.Mod_Code inner join Charter Ch on A.Ac_Number = Ch.Ac_Number inner join Crew C on Ch.Char_Trip = C.Char_Trip inner join Employee E on C.Emp_Num = E.Emp_Num inner join Pilot p on e.emp_num = p.emp_num where c.crew_job = 'Pilot' /*Populate Staging Table with Datawarehouse Key */ Update #Staging Set CustomerId = C.CustomerId From #Staging S inner join CustomerDim C on C.Cus_code = S.Cus_code Update #Staging Set PilotId = P.PilotId From #Staging S inner join PilotDim P on P.Emp_Num = S.Emp_Num

Page | 229

Update #Staging Set TimeId = T.TimeId From #Staging S inner join TimeDim T on T.charter_date = S.charter_date Update #Staging Set ModelId = M.ModelId From #Staging S inner join ModelDim M on m.Mod_code = S.Mod_code /*Populate the Fact Table form the Staging Table*/ Insert into Fact (ModelId, TimeId, CustomerId, PilotId, Distance, Hours_Flown, Fuel_Gallons, Oil_Qts, Cost) Select distinct ModelId, TimeId, CustomerId, PilotId, Distance, Hours_Flown, Fuel_Gallons, Oil_Qts, Cost From #Staging END GO

Page | 230

Assignment 9Star Schema ERD for Assignment 8


Design a star schema to support the analysis of charter flights. The chartered flight company would like to better understand charter data such as cost, hours flown, and fuel used by customer, pilot, type of aircraft (model), and time periods. Your star schema (in Vision Crow's Foot format) must reflect the above requirements. This is to be followed by the second part Assignment 7.

Page | 231

Assignment 9Solution

Time_Dim PK TIME_KEY TIME_ID YEAR QUARTER MONTH DAY

Pilot_Dim PK PILOT_KEY EMP_NUM PIL_LICENSE PIL_RATINGS PIL_MED_TYPE PIL_MED_DATE PIL_PT135_DATE PK,FK1 PK,FK2 PK,FK3 PK,FK4

Fact MODEL_KEY PILOT_KEY TIME_KEY CUSTOMER_KEY COST CHAR_HOURS_FLOWN CHAR_FULE_GALLONS Model_Dim PK MODEL_KEY MOD_CODE MOD_MANUFACTURER MOD_NAME MOD_SEATS MOD_CHG_MILE

Customer_Dim PK CUSTOMER_KEY CUS_CODE CUS_LNAME CUS_FNAME CUS_INITIAL CUS_PHONE CUS_BALANCE CUS_AREACODE

Page | 232

Section IV: C# Programming Skills


In this section you will find examples of my experience in various programming skills. I enjoy the problem solving and logic required to program. Brief descriptions of the documents in this section are below and they are from my programs I had created in CIS 199 /CIS 200, Software Development I & II(C# Programming) - focused on learning how to write and debug extensive programming codes, understanding in depth the object-oriented software development, studying object model, and applying it to systems development problems.

Page | 233

C# Programming Skills
Program 1.C#
This program explores the use of Visual Studio to create a simple console application. "Write an application that prints, on separate lines, your name, your birthday, your hobbies, your favorite book, and your favorite movie. Label each piece of information in the output."

Page | 234

Program 1Solution

// // // // // //

CIS 199-01 By: Bakre Idiazza This program prints information about the author to the screen on separate lines. Includes name, birthday, hobbies, favorite book and movie. Titles appear in quotation marks, though this was not required. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

namespace Program1 { class Program { static void Main(string[] args) { Console.Out.WriteLine("Name: Bakre Idiazza"); Console.Out.WriteLine("Birthday: 1/1/1981"); Console.Out.WriteLine("Hobbies: Tennis and reading"); Console.Out.WriteLine("Favorite Book:\"The Hobbit\"");//Used escape char to produce quote Console.Out.WriteLine("Favorite Movie: \"The Matrix\""); } }

Page | 235

Program 1 Output Solution

Page | 236

Program2.C#
This lab explores the use of Visual Studio to create a simple interactive console application that uses primitive variables. Write an application that reads two floating point numbers from the user and prints the results of the following calculations Sum Difference (first number minus second number) Product Quotient (firstNumber divided by second number) Mean (sum of the numbers divided by 2) Be sure to provide clear prompts to the user for their input and label all output

Page | 237

Program 2 Solution
// // // // // // // CIS 199-01 By: Bakre Idiazza This program reads two floating point numbers and prints the sum, difference, product, quotient, and mean of the values. For the difference, the first number minus the second number is calculated. For the quotient, the first number is divided by the second number. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

namespace Program2 { class Program { static void Main(string[] args) { double num1; // User's first number double num2; // User's second number double double double double double sum; difference; product; quotient; mean; // // // // // Holds sum of numbers Holds num1 - num2 Holds product of numbers Hold num1 divided by num2 Holds mean of numbers

//Gather input from user Console.Out.Write("Enter 1st floating point number: "); num1 = double.Parse(Console.In.ReadLine()); Console.Out.Write("Enter 2nd floating point number: "); num2 = double.Parse(Console.In.ReadLine()); // Perform calculations sum = num1 + num2; difference = num1 - num2; product = num1 * num2; quotient = num1 / num2; mean = (num1 + num2) / 2.0; // Or sum/2 // Output results Console.WriteLine(); // For spacing Console.WriteLine(num1 + " + " + num2 Console.WriteLine(num1 + " - " + num2 Console.WriteLine(num1 + " * " + num2 Console.WriteLine(num1 + " / " + num2 Console.WriteLine("mean of " + num1 + } } }

+ + + + "

" = " = " = " = and

" " " " "

+ + + + +

sum); difference); product); quotient); num2 + " = " + mean);

Page | 238

Program 2 Output Solution

Page | 239

Program3.C#
This lab explores the use of Visual Studio to create a simple interactive console application that uses composite formatting to produce output. Write a program that computes the average (mean) of five exam scores. Use a named constant to define the number of scores and use this constant in the calculation of the mean. Scores should be entered by the user and should be represented using double values. After the scores are entered, print all scorers with one digit to the right of the decimal point and the average (mean) value formatted with two digits to the right of the decimal point.

Page | 240

Program 3 Solution
// // // // // // // // // // CIS 199-01 By: Bakre Idiazza This program computes the average (mean) of five exam scores. It uses a named constant to define the number of scores and uses this constant in the calculation of the mean. Scores are entered by the user and are represented using double values. After the scores are entered, all scores are printed formatted with one digit to the right of the decimal and the average value is printed formatted with two digits to the right of the decimal. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

namespace Program3 { class Program { static void Main(string[] args) { const int NUM_SCORES = 5; // double score1; // double score2; // double score3; // double score4; // double score5; // double sum; // double mean; //

Number of scores entered First score entered Second score entered Third score entered Fourth score entered Fifth score entered Sum of the entered scores Mean of the entered scores

Console.Out.WriteLine("Welcome to the Mini-Gradebook Application\n"); // Enter exam scores Console.Out.Write("Enter exam score 1: "); score1 = double.Parse(Console.In.ReadLine()); Console.Out.Write("Enter exam score 2: "); score2 = double.Parse(Console.In.ReadLine()); Console.Out.Write("Enter exam score 3: "); score3 = double.Parse(Console.In.ReadLine()); Console.Out.Write("Enter exam score 4: "); score4 = double.Parse(Console.In.ReadLine()); Console.Out.Write("Enter exam score 5: "); score5 = double.Parse(Console.In.ReadLine()); // Calculate average score sum = score1 + score2 + score3 + score4 + score5;

Page | 241

mean = sum / NUM_SCORES; // Use composite formatting to output results Console.Out.WriteLine("\nResults\n"); // SOLUTION 1 - Simple solution Console.Out.WriteLine(" Exam Score 1: Console.Out.WriteLine(" Exam Score 2: Console.Out.WriteLine(" Exam Score 3: Console.Out.WriteLine(" Exam Score 4: Console.Out.WriteLine(" Exam Score 5: Console.Out.WriteLine("Average Score: // SOLUTION 2 - Compex Solution Console.Out.WriteLine("{0,13}: {1,6:F1}\n" + "{2,13}: {3,6:F1}\n" + "{4,13}: {5,6:F1}\n" + "{6,13}: {7,6:F1}\n" + "{8,13}: {9,6:F1}\n" + "{10,13}: {11,6:F2}", "Exam Score 1", score1, "Exam Score 2", score2, "Exam Score 3", score3, "Exam Score 4", score4, "Exam Score 5", score5, "Average Score", mean); } } }

{0:F1}", {0:F1}", {0:F1}", {0:F1}", {0:F1}", {0:F2}",

score1); score2); score3); score4); score5); mean);

Page | 242

Program 3 Output Solution

Page | 243

Program4.C#
This Program explores how to create and use a project that involves two classes. 1. Create a class file, as well, that will be used to represent a date. Add a second class file to your project. In Visual Studio, select the Project menu and then select Add Class. The Add New Item dialog box will be displayed. There are many templates we can use to build a new class from but we'll keep it simple for the moment. We just want to add an empty class file. On the left of the dialog box, choose Code as type of item. On the right of the dialog box, choose Class as the template. At the bottom of the dialog box, name the class file Date.cs and click the Add button. Visual Studio will create an empty class named Date for you work with. 2. The class Date will include three pieces of information: a month (type int), a day (type int) and a year (type int). Create these as private instance variables. If you wish to avoid confusion with the properties being defined later, choose distinct names for these instance variables, such as monthValue or theDay. 3. The Date class should have a constructor that accepts values for the month, day, and year (using parameters, much like the text did with the Account class on p. 176). Use these values to initialize the associated instance variables. You may assume that the values provided in the parameters are correct. Be careful to name your parameters so that you don't confuse them with either the instance variables or similar properties. 4. Provide properties in the Date class that may be used to get and set the values of the instance variables. Name the properties Month, Day, and Year. Again, you may assume that the values provided to each set are correct. 5. Write a ToString() method for the Date class that returns a simple string in the form of MM/DD/YYYY . Format the month and day fields in the output to produce two digits. For example, January 1, 2001 would appear as: "01/01/2001" . Remember, you must also use keyword override when defining a ToString method. 6. Next, we'll write a simple test program in the other class file that demonstrates that the Date class works. From the Main method, create two Date object variables, construct two Date objects using any dates that you like, and display their information to the console. You may hard code your test data using magic numbers. 7. Next, use the Date properties to change the month, day, and year of one of the Date objects and display its changed information to the console. Again, you may hard code your test data using magic numbers.

Page | 244

Program 4 Solution 1st Partial


// // // // // CIS 199-01 By: Bakre Idiazza File: Date.cs This file creates a simple Date class capable of tracking the month, day, and year of a date. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Date { private int month; // Month # in date private int day; // Day # in date private int year; // Year # in date // Precondition: 1 <= m <= 12, 1 <= d <= 31 // Postcondition: The date has been initialized with the specified // values for month, day, and year public Date(int m, int d, int y) { Month = m; // Use properties to set in case it does validation Day = d; Year = y; } public int Month { // Precondition: None // Postcondition: The month has been returned get { return month; } // Precondition: 1 <= value <= 12 // Postcondition: The month has been set to the specified value set { month = value; } } public int Day { // Precondition: None // Postcondition: The day has been returned get

Page | 245

{ return day; } // Precondition: 1 <= value <= 31 // Postcondition: The day has been set to the specified value set { day = value; } } public int Year { // Precondition: None // Postcondition: The year has been returned get { return year; } // Precondition: None // Postcondition: The year has been set to the specified value set { year = value; } } // Precondition: None // Postcondition: A string is returned representing the date in form // MM/DD/YYYY public override string ToString() { return String.Format("{0:D2}/{1:D2}/{2:D4}", Month, Day, Year); // Use properties to get in case it does transformation } }

Page | 246

Program 4 Solution 2nd Partial


// // // // // // CIS 199-01 By: Bakre Idiazza File: Program.cs This file serves as simple test program for the Date class. It creates two objects, displays their values to the console, and then modifies one of them through set properties. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Program 4 { // Precondition: None // Postcondition: The Date class has been tested. static void Main(string[] args) { Date testDate1 = new Date(10, 20, 2010); // 1st test date Date testDate2 = new Date(12, 31, 1999); // 2nd test date Console.Out.WriteLine("Test Date 1: {0}", testDate1); Console.Out.WriteLine("Test Date 2: {0}", testDate2); // Make sure the set properties work testDate2.Month = 1; testDate2.Day = 1; testDate2.Year = 2000; Console.Out.WriteLine("\nAfter using set properties to change Date 2"); Console.Out.WriteLine("Test Date 2: {0}", testDate2); } }

Page | 247

Program 4 Output Solution

Page | 248

Program5.C#
This lab builds on the Date class from Lab 4, adding validation and use of conditional expressions. 1. Review the preconditions in the set properties for Month and Day. Add validation to these methods such that if the value the user sends is invalid, the month or day will be set to the value 1 instead. If the value sent by the user is valid, of course, it should be used to set the month or day. You may use an if-else statement or the conditional operator to accomplish this. 2. Review the precondition for the set property for Year. You will note that negative years are allowed. A negative year represents a date from the distant past in the time before the common era (BCE or BC). 3. Change the ToString() method such that any negative year will be treated as a BCE date. Instead of formatting a string with a negative number shown for the year, display the year as a positive integer and append "BCE" after it. For example, instead of returning "12/31/-5000", now the method would return "12/31/5000 BCE". 4. Modify the test program to attempt to construct dates with invalid month and day values. Because my solution's constructor used the properties instead of the instance variables directly to set the month and day, you should observe that illegal values are rejected and replaced with 1s. Use the properties to change the date of one of the objects to a BCE date (negative year) and display the results.

Page | 249

Program 5 Solution 1st Partial


// // // // // // CIS 199-01 By: Bakre Idiazza File: Date.cs This file creates a simple Date class capable of tracking the month, day, and year of a date. Validation has been added, as well as support for BCE dates. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Date { private int month; // Month # in date private int day; // Day # in date private int year; // Year # in date public const int DEFAULT = 1; // Value used for invalid month/day // Precondition: 1 <= m <= 12, 1 <= d <= 31 // Postcondition: The date has been initialized with the specified // values for month, day, and year public Date(int m, int d, int y) { Month = m; // Use properties to set in case it does validation Day = d; Year = y; } public int Month { // Precondition: None // Postcondition: The month has been returned get { return month; } // Precondition: 1 <= value <= 12 // Postcondition: The month has been set to the specified value set { // Use if-else structure if ((value >= 1) && (value <= 12)) month = value; else month = DEFAULT;

Page | 250

} } public int Day { // Precondition: None // Postcondition: The day has been returned get { return day; } // Precondition: 1 <= value <= 31 // Postcondition: The day has been set to the specified value set { // Use conditional operator instead of if-else day = ((value >= 1) && (value <= 31)) ? value : DEFAULT; } } public int Year { // Precondition: None // Postcondition: The year has been returned get { return year; } // Precondition: None // Postcondition: The year has been set to the specified value set { year = value; } } // Precondition: None // Postcondition: A string is returned representing the date in form // MM/DD/YYYY. If the year is negative, it will be // formatted as a BCE date. public override string ToString() { String dateStr; // Will hold formatted result if (Year >= 0) dateStr = String.Format("{0:D2}/{1:D2}/{2:D4}", Month, Day, Year); else dateStr = String.Format("{0:D2}/{1:D2}/{2:D4} BCE", Month, Day, -1 * Year); // Turn year non-negative return dateStr; } }

Page | 251

Program 5 Solution 2nd Partial


// // // // // // // CIS 199-01 By: Bakre Idiazza File: Program.cs This file serves as simple test program for the Date class. It creates two objects, displays their values to the console, and then modifies one of them through set properties. Invalid dates are included in the test objects. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Program 5 { // Precondition: None // Postcondition: The Date class has been tested. static void Main(string[] args) { Date testDate1 = new Date(13, 10, 2010); // 1st test date Date testDate2 = new Date(12, -31, 1999); // 2nd test date Console.Out.WriteLine("Test Date 1: {0}", testDate1); Console.Out.WriteLine("Test Date 2: {0}", testDate2); // Make sure the set properties work testDate2.Month = -1; testDate2.Day = 41; testDate2.Year = -2000; Console.Out.WriteLine("\nAfter using set properties to change Date 2 to a BCE date"); Console.Out.WriteLine("Test Date 2: {0}", testDate2); } }

Page | 252

Program 5 Output Solution

Page | 253

Program6.C#
This lab explores the use of a one-dimensional array of integers. Write an application that keeps track of unique entries from the user by using a onedimensional array of integers. Using an appropriate loop, prompt the user to enter five integers. If the value entered is unique (not previously entered), keep it. Otherwise, discard it. After the user enters all the numbers, display the list of unique values. Use a partially-filled array of integers to keep track of the unique numbers. Use the smallest array necessary (worst case, all five numbers entered are unique). Hint: each time the user enters another number, step through the filled portion of array from the beginning looking for a match. If you come to the end of the filled portion of the array without finding a match, add the number in the next spot of the array. If you find a match, however, stop your search and move on to prompt the user for the next number (assuming there are still numbers to be entered). Do not use any methods of the Array class. Sketch out your design using pseudocode before you start writing code. Think carefully about which type of loop to use for the outer loop (repeat 5 times) and the inner loop (the search).

Page | 254

Program 6 Solution
// // // // // // CIS 199-01 By: Bakre Idiazza File: Program.cs This file demonstrates the use of a partially-filled array used to store the unique numbers from the ones input by user. This program uses a // break statement to end the search when a match to the input number is found. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Program 6 { // Precondition: None // Postcondition: The unique numbers entered by the user are displayed public static void Main(string[] args) { const int SIZE = 5; // How many numbers to enter int[] uniqueNums; // Partially-filled array of unique numbers int count = 0; // How many unique numbers in array int inputNum; // Number entered by user int index; // Search index uniqueNums = new int[SIZE]; for (int i = 1; i <= SIZE; ++i) { Console.Write("Enter an integer: "); inputNum = int.Parse(Console.ReadLine()); // Search array for (index = 0; index < count; ++index) { if (uniqueNums[index] == inputNum) break; } if (index == count) // Input was unique { uniqueNums[count] = inputNum; ++count; } } Console.WriteLine("\nThe unique numbers you entered are:"); for (int i = 0; i < count; ++i) { Console.WriteLine(uniqueNums[i]); } }

Page | 255

Program 6 Output Solution

Page | 256

Program7.C#
Create an application that calculates the number of gallons of paint needed to buy based on information entered by the user.

Page | 257

Program 7 Solution
// // // // CIS 199-01 By: Bakre Idiazza This application calculates the number of gallons of paint to buy based on information entered by the user. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

namespace Program1 { class Program 7 { static void Main(string[] args) { const double SQ_FT_PER_GAL = 350.0; // Area covered per gallon of paint const double SQ_FT_PER_DOOR = 20.0; // Area to remove per door const double SQ_FT_PER_WINDOW = 15.0; // Area to remove per window double totalLength; // Length of all walls (in total) double height; // Height of all walls uint numDoors; // Number of doors to exclude from paint uint numWindows; // Number of windows to exclude from paint uint numCoats; // Number of coats of paint desired double sqFt; // Area to be painted double gallons; // Estimate of gallons of paint needed Console.Out.WriteLine("Welcome to the Handy-Dandy Paint Estimator\n"); // Prompt user and gather input Console.Write("Enter the total length all walls (in feet): "); totalLength = double.Parse(Console.ReadLine()); Console.Write("Enter the height of the walls (in feet): "); height = double.Parse(Console.ReadLine()); Console.Write("Enter the number of doors (non-neg int): "); numDoors = uint.Parse(Console.ReadLine()); Console.Write("Enter the number of windows (non-neg int): "); numWindows = uint.Parse(Console.ReadLine()); Console.Write("Enter the number of coats of paint (non-neg int): "); numCoats = uint.Parse(Console.ReadLine()); // Perform Calculations sqFt = totalLength * height; // Raw square feet sqFt -= numDoors * SQ_FT_PER_DOOR; // Remove space for doors sqFt -= numWindows * SQ_FT_PER_WINDOW; // Remove space for windows gallons = sqFt / SQ_FT_PER_GAL; // Gallons per coat gallons *= numCoats; // Total number of gallons

Page | 258

// Output results Console.WriteLine("\nYou need {0:F1} gallons of paint", gallons); }

Program 7 Output Solution

Page | 259

Program8.C#
This file creates a simple LibraryBook class which capable of tracking the book's title, author, publisher, copyright year, call number, and checked out status.

Page | 260

Program 8 Solution 1st Partial


// // // // // CIS 199-01 By: Bakre Idiazza File: LibraryBook.cs This file creates a simple LibraryBook class capable of tracking the book's title, author, publisher, copyright year, call number, and checked out status. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class LibraryBook { private String bookTitle; private String bookAuthor; private String bookPublisher; private int bookCopyrightYear; private String bookCallNumber; private bool bookCheckedOut;

// // // // // //

The The The The The The

book's book's book's book's book's book's

title author publisher year of copyright call number in the library checked out status

// Precondition: None // Postcondition: The library book has been initialized with the specified // values for title, author, publisher, copyright year, and // call number. The book is not checked out. public LibraryBook(String theTitle, String theAuthor, String thePublisher, int theCopyrightYear, String theCallNumber) { Title = theTitle; Author = theAuthor; Publisher = thePublisher; CopyrightYear = theCopyrightYear; CallNumber = theCallNumber; ReturnToShelf(); // Make sure book is not checked out } public String Title { // Precondition: None // Postcondition: The title has been returned get { return bookTitle; } // HELPER - not public // Precondition: None // Postcondition: The title has been set to the specified value private set

Page | 261

{ bookTitle = value; } } public String Author { // Precondition: None // Postcondition: The author has been returned get { return bookAuthor; } // HELPER - not public // Precondition: None // Postcondition: The author has been set to the specified value private set { bookAuthor = value; } } public String Publisher { // Precondition: None // Postcondition: The publisher has been returned get { return bookPublisher; } // Precondition: None // Postcondition: The publisher has been set to the specified value set { bookPublisher = value; } } public int CopyrightYear { // Precondition: None // Postcondition: The copyright year has been returned get { return bookCopyrightYear; } // HELPER - not public // Precondition: None // Postcondition: The copyright year has been set to the specified value private set { bookCopyrightYear = value; } }

Page | 262

public String CallNumber { // Precondition: None // Postcondition: The call number has been returned get { return bookCallNumber; } // Precondition: None // Postcondition: The call number has been set to the specified value set { bookCallNumber = value; } } // Precondition: None // Postcondition: The book is checked out public void CheckOut() { bookCheckedOut = true; } // Precondition: None // Postcondition: The book is not checked out public void ReturnToShelf() { bookCheckedOut = false; } // Precondition: None // Postcondition: true is returned if the book is checked out, // otherwise false is returned public bool IsCheckedOut() { return bookCheckedOut; } // Precondition: None // Postcondition: A string is returned presenting the libary book's data on // separate lines public override string ToString() { return String.Format("Title:\t\t{0}\nAuthor:\t\t{1}\nPublisher:\t{2}\n" + "Copyright:\t{3}\nCall Number:\t{4}\nChecked Out:\t{5}", Title, Author, Publisher, CopyrightYear, CallNumber, IsCheckedOut()); } }

Page | 263

Program 8 Solution 2nd Partial


// // // // // // // CIS 199-01 By: Bakre Idiazza File: Program.cs This file serves as a simple test program for the LibraryBook class. It creates three objects, displays their values to the console, and then modifies them through set properties, checking out them out and then returning them to the library. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Program 8 { // Precondition: None // Postcondition: The LibraryBook class has been tested public static void Main(string[] args) { LibraryBook book1 = new LibraryBook("The C# Guide","Andrew Wright","UofL Press", 2010, "ZZ25 3G"); // 1st test book LibraryBook book2 = new LibraryBook("Harriet Pooter", "IP Thief", "Stealer Books", 2000, "AG773 ZF"); // 2nd test book LibraryBook book3 = new LibraryBook("The Color Mauve","Mary Smith","Beautiful Books Ltd.", 1985, "JJ438 4T"); // 3rd test book Console.WriteLine("Original Books:\n"); Console.WriteLine("Book 1:\n{0}\n", book1); Console.WriteLine("Book 2:\n{0}\n", book2); Console.WriteLine("Book 3:\n{0}\n", book3); // Make some changes book1.Publisher = "Better Offer Books"; book3.CallNumber = "AA123 45"; // Check out the books book1.CheckOut(); book2.CheckOut(); book3.CheckOut(); Console.WriteLine("After Changes and Checking Out:\n"); Console.WriteLine("Book 1:\n{0}\n", book1); Console.WriteLine("Book 2:\n{0}\n", book2); Console.WriteLine("Book 3:\n{0}\n", book3); // Return all the books book1.ReturnToShelf(); book2.ReturnToShelf(); book3.ReturnToShelf(); Console.WriteLine("After Returning Books:\n"); Console.WriteLine("Book 1:\n{0}\n", book1); Console.WriteLine("Book 2:\n{0}\n", book2); Console.WriteLine("Book 3:\n{0}\n", book3);

Page | 264

Program 8 Output Solution

Page | 265

Program 9.C#
Create an application that will roll a die a number of times and display the frequency distribution for each number that is rolled. Then the user may repeat the process as many times as they like. Demonstrate the use of a do-While loop to control the inner loop. Also chose to demonstrate the use of switch statement for the counting logic, and demonstrate the use of a running total across each repetition.

Page | 266

Program 9 Solution
// // // // // // // CIS 199-01 By: Bakre Idiazza File: RollingDice.cs This application will roll a die a number of times and display the frequency distribution for each number that is rolled. The user may repeat the process as many times as they like.

using System; namespace RollingDice { public class RollingDice { // Precondition: None // Postcondition: This application will roll a die a number of times and // display the frequency distribution for each number that // is rolled. The user may repeat the process as many times // as they like. public static void Main(string[] args) { const int NO_OF_ROLLS = 1000; // How many rolls per attempt Die die1 = new Die(); // The die to be rolled int rolls = 0; // Total number of rolls int count1 = 0; // How many times 1 comes up int count2 = 0; // How many times 2 comes up int count3 = 0; // How many times 3 comes up int count4 = 0; // How many times 4 comes up int count5 = 0; // How many times 5 comes up int count6 = 0; // How many times 6 comes up string again; // Roll them again? Console.WriteLine("Welcome to the Dice Rolling Application"); do { for (int r = 1; r <= NO_OF_ROLLS; ++r) { die1.Roll(); // Roll it! rolls++; // Count which number came up switch (die1.FaceValue) { case 1: count1++; break; case 2: count2++; break; case 3: count3++; break; case 4: count4++; break; case 5: count5++;

Page | 267

break; case 6: count6++; break; default: Console.WriteLine("Unexpected number rolled!"); break; } } // Output current results Console.WriteLine("\nAfter {0} rolls:", rolls); Console.WriteLine("Number of 1s: {0}", count1); Console.WriteLine("Number of 2s: {0}", count2); Console.WriteLine("Number of 3s: {0}", count3); Console.WriteLine("Number of 4s: {0}", count4); Console.WriteLine("Number of 5s: {0}", count5); Console.WriteLine("Number of 6s: {0}", count6); // Ask if want to go again Console.WriteLine("\nWould you like to roll another {0} times? Y/N", NO_OF_ROLLS); again = Console.ReadLine(); } while (again.ToUpper() == "Y"); } } }

Page | 268

Program 9 Output Solution

Page | 269

Program 10.C#
Use the Class Invoice to create an array of invoice objects, and perform the queries on the array of invoice objects and display the results.

Page | 270

Program 10 Solution
// CIS 200-01 // By: Bakre Idiazza // This program solves Exercise 9.3 from p. 363 performing an array f invoice objects using using using using System; System.Collections.Generic; System.Linq; System.Text;

namespace Program 10 { public class LinqTest { // Precondition: None // Postcondition: Selected query results are displayed public static void Main(string[] args) { // initialize array of invoices Invoice[] invoices = { new Invoice( 83, "Electric sander", 7, 57.98M ), new Invoice( 24, "Power saw", 18, 99.99M ), new Invoice( 7, "Sledge hammer", 11, 21.5M ), new Invoice( 77, "Hammer", 76, 11.99M ), new Invoice( 39, "Lawn mower", 3, 79.5M ), new Invoice( 68, "Screwdriver", 106, 6.99M ), new Invoice( 56, "Jig saw", 21, 11M ), new Invoice( 3, "Wrench", 34, 7.5M ) }; const int FILTER_MIN = 200; // Min value in filter range for e) const int FILTER_MAX = 500; // Max value in filter range for e) Console.WriteLine("Original Invoice Data\n"); Console.WriteLine("P.Num Part Description Quant Price"); // Column Headers Console.WriteLine("----- -------------------- ----- ------"); foreach (Invoice i in invoices) Console.WriteLine(i); Console.WriteLine(); // Holds results of LINQ to sort invoices by description var invoicesByPartDesc = from inv in invoices orderby inv.PartDescription select inv; Console.WriteLine("A) Invoices by PartDescription\n"); Console.WriteLine("P.Num Part Description Quant Price"); // Column Headers Console.WriteLine("----- -------------------- ----- ------"); foreach (var i in invoicesByPartDesc) Console.WriteLine(i); Console.WriteLine();

Page | 271

// Holds results of LINQ to sort invoices by price var invoicesByPrice = from inv in invoices orderby inv.Price select inv; Console.WriteLine("B) Invoices by Price\n"); Console.WriteLine("P.Num Part Description Quant Price"); // Column Headers Console.WriteLine("----- -------------------- ----- ------"); foreach (var i in invoicesByPrice) Console.WriteLine(i); Console.WriteLine(); // Holds results of LINQ to select description and quantity and sort by quantity var descQuanByQuantity = from inv in invoices orderby inv.Quantity select new { inv.PartDescription, inv.Quantity }; Console.WriteLine("C) PartDescription and Quantity by Quantity\n"); Console.WriteLine("Part Description Quant"); // Column Headers Console.WriteLine("-------------------- -----"); // Control formatting this time using composite formatting foreach (var i in descQuanByQuantity) Console.WriteLine("{0,-20} {1,-5}", i.PartDescription, i.Quantity); Console.WriteLine(); // Holds results of LINQ to select description and calculated invoice total // and sort by invoice total var descTotalByTotal = from inv in invoices let total = inv.Quantity * inv.Price orderby total select new { inv.PartDescription, InvoiceTotal = total }; Console.WriteLine("D) PartDescription and total by total\n"); Console.WriteLine("Part Description Total"); // Column Headers Console.WriteLine("-------------------- ---------"); // Control formatting this time using composite formatting foreach (var i in descTotalByTotal) Console.WriteLine("{0,-20} {1,9:C}", i.PartDescription, i.InvoiceTotal); Console.WriteLine(); // Holds results of LINQ to filter previous query results on range of totals var filteredDescTotalByTotal = from item in descTotalByTotal where item.InvoiceTotal >= FILTER_MIN && item.InvoiceTotal <= FILTER_MAX select item; Console.WriteLine("E) Filtered PartDescription and total by total\n"); Console.WriteLine("Part Description Total"); // Column Headers Console.WriteLine("-------------------- ---------"); // Control formatting this time using composite formatting foreach (var i in filteredDescTotalByTotal) Console.WriteLine("{0,-20} {1,9:C}", i.PartDescription, i.InvoiceTotal); Console.WriteLine();

Page | 272

Program 10 Output Solution

Page | 273

Program 11.C#
This program explores the creation of a simple class hierarchy including (limited) use of polymorphism. Ill design and implement a simple class hierarchy for package-delivery services, such as UPS or FedEx. As we discussed in class on 1/27 (review Tegrity session from that day if absent), the hierarchy will consist of several abstract and concrete classes. At the top of the hierarchy is the abstract base class Parcel. It will contain the To and From addresses for the parcel. This will be done via composition with the Address class. Each address consists of a name, two address lines, city, state, and zip code. Each parcel will also support a Cost method that will return the cost of shipping the item. Derived from Parcel are two classes, Letter and Package. Letters will be delivered for a fixed price. The Package class will remain abstract but will track the dimensions (length, width, and height) in inches and weight in pounds of each package. Derived from Package are two classes, GroundPackage and AirPackage. Ground packages will calculate cost based on the package dimensions and weight and the distance between the origin and destination addresses (the Zone Distance), as described below. The AirPackage class will remain abstract but will add methods to determine if the package is large or heavy. Finally, derived from AirPackage are two classes, NextDayAirPackage and TwoDayAirPackage, both of which are concrete. Next-day air packages are charged an extra Express Fee. Two-day air packages may be delivered in the morning or the afternoon. If morning delivery is requested the package is an Early. If afternoon delivery is requested, the package is a Saver and a discount will apply. The detailed specifications for the classes in this assignment appear below.

Page | 274

Program 11 Solution 1st Partial


// // // // // // // Program 1 CIS 200-01 Fall 2011 By: Bakre Idiazza File: Address.cs This classes stores a typical US address consisting of name, two address lines, city, state, and 5 digit zip code. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Address { public const int MAX_ZIP = 99999; // Maximum ZipCode value private int zip; // Address' zip code

// Precondition: 0 <= zipcode <= MAX_ZIP // Postcondition: The address is created with the specified values for // name, address1, address2, city, state, and zipcode public Address(String name, String address1, String address2, String city, String state, int zipcode) { Name = name; Address1 = address1; Address2 = address2; City = city; State = state; Zip = zipcode; } public String Name { // Precondition: None // Postcondition: The address' name has been returned get; // Precondition: None // Postcondition: The address' name has been set to the // specified value set; } public String Address1 { // Precondition: None // Postcondition: The address' first address line has been returned get;

Page | 275

// Precondition: None // Postcondition: The address' first address line has been set to // the specified value set; } public String Address2 { // Precondition: None // Postcondition: The address' second address line has been returned get; // Precondition: None // Postcondition: The address' second address line has been set to // the specified value set; } public String City { // Precondition: None // Postcondition: The address' city has been returned get; // Precondition: None // Postcondition: The address' city has been set to the // specified value set; } public String State { // Precondition: None // Postcondition: The address' state has been returned get; // Precondition: None // Postcondition: The address' state has been set to the // specified value set; } public int Zip { // Precondition: None // Postcondition: The address' zip code has been returned get { return zip; } // Precondition: // Postcondition: // set { if ((value >= 0 <= value <= MAX_ZIP The address' zip code has been set to the specified value

0) && (value <= MAX_ZIP))

Page | 276

zip = value; else throw new ArgumentOutOfRangeException("ZIP", value, "ZIP must be U.S. 5 digit zip code"); } } // Precondition: None // Postcondition: A String with the address' data has been returned public override String ToString() { return String.Format("{0}{6}{1}{6}{2}{6}{3}, {4} {5:D5}", Name, Address1, Address2, City, State, Zip, System.Environment.NewLine); } }

Page | 277

Program 11 Solution 2nd Partial


// // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: AirPackage.cs The AirPackage class is an abstract derived class from Package. It is able to determine if the package is heavy or large. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public abstract class AirPackage : Package { public const double HEAVY_THRESHOLD = 75; // Min weight of heavy package public const double LARGE_THRESHOLD = 100; // Min dimensions of large package // Precondition: pLength >= 0, pWidth >= 0, pHeight >=0, // pWeight >= 0 // Postcondition: The air package is created with the specified values for // origin address, destination address, length, width, // height, and weight public AirPackage(Address originAddress, Address destAddress, double pLength, double pWidth, double pHeight, double pWeight) : base(originAddress, destAddress, pLength, pWidth, pHeight, pWeight) { // All work done in base class constructor } // Precondition: None // Postcondition: Returns true if air package is considered heavy // else returns false public bool IsHeavy() { return (Weight >= HEAVY_THRESHOLD); } // Precondition: None // Postcondition: Returns true if air package is considered large // else returns false public bool IsLarge() { return (TotalDimension >= LARGE_THRESHOLD); } // Precondition: None // Postcondition: A String with the air package's data has been returned public override string ToString() { return String.Format("Air{0}{3}IsHeavy: {1}{3}IsLarge: {2}", base.ToString(), IsHeavy(), IsLarge(), System.Environment.NewLine); } }

Page | 278

Program 11 Solution 3rd Partial


// // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: GroundPackage.cs The Package class is a concrete derived class from Package. It adds a Zone Distance. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class GroundPackage : Package { // Precondition: pLength >= 0, pWidth >= 0, pHeight >=0, // pWeight >= 0 // Postcondition: The ground package is created with the specified values for // origin address, destination address, length, width, // height, and weight public GroundPackage(Address originAddress, Address destAddress, double pLength, double pWidth, double pHeight, double pWeight) : base(originAddress, destAddress, pLength, pWidth, pHeight, pWeight) { // All work done in base class constructor } // Precondition: None // Postcondition: The ground package's zone distance is returned. // The zone distance is the positive difference between the // first digit of the origin address' zip code and the first // digit of the destination address' zip code. public int ZoneDistance() { const int FIRST_DIGIT_FACTOR = 10000; // Denominator to extract 1st digit int dist; // Calculated zone distance dist = (OriginAddress.Zip / FIRST_DIGIT_FACTOR) - (DestinationAddress.Zip / FIRST_DIGIT_FACTOR); return Math.Abs(dist); } // Precondition: None // Postcondition: The ground package's cost has been returned public override decimal CalcCost() { const decimal DIM_FACTOR = .20M; // Dimension coefficient in cost equation const decimal WEIGHT_FACTOR = .05M; // Weight coefficient in cost equation

Page | 279

return (DIM_FACTOR * (decimal)TotalDimension + WEIGHT_FACTOR * (ZoneDistance() + 1) * (decimal)Weight); } // Precondition: None // Postcondition: A String with the ground package's data has been returned public override string ToString() { return String.Format("Ground{0}{3}Zone Distance: {1:D}{3}Cost: {2:C}", base.ToString(), ZoneDistance(), CalcCost(), System.Environment.NewLine); } }

Page | 280

Program 11 Solution 4th Partial


// // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: Letter.cs The Letter class is a concrete derived class of Parcel. Letters have a fixed cost. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class Letter : Parcel { private decimal fixedCost; // Cost to send letter // Precondition: cost >= 0 // Postcondition: The letter is created with the specified values for // origin address, destination address, and cost public Letter(Address originAddress, Address destAddress, decimal cost) : base(originAddress, destAddress) { FixedCost = cost; } private decimal FixedCost // Helper property { // Precondition: None // Postcondition: The letter's fixed cost has been returned get { return fixedCost; } // Precondition: value >= 0 // Postcondition: The letter's fixed cost has been set to the // specified value set { if (value >= 0) fixedCost = value; else throw new ArgumentOutOfRangeException("FixedCost", value, "FixedCost must be >= 0"); } } // Precondition: None

Page | 281

// Postcondition: The letter's cost has been returned public override decimal CalcCost() { return FixedCost; } // Precondition: None // Postcondition: A String with the letter's data has been returned public override string ToString() { return String.Format("Letter{2}{0}{2}Cost: {1:C}", base.ToString(), CalcCost(), System.Environment.NewLine); } }

Page | 282

Program 11 Solution 5th Partial


// // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: NextDayAirPackage.cs The NextDayAirPackage class is a concrete derived class from AirPackage. It adds an express fee. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class NextDayAirPackage : AirPackage { private decimal expressFee; // Next day air package's express fee // Precondition: pLength >= 0, pWidth >= 0, pHeight >=0, // pWeight >= 0, expFee >=0 // Postcondition: The next day air package is created with the specified values for // origin address, destination address, length, width, // height, weight, and express fee public NextDayAirPackage(Address originAddress, Address destAddress, double pLength, double pWidth, double pHeight, double pWeight, decimal expFee) : base(originAddress, destAddress, pLength, pWidth, pHeight, pWeight) { ExpressFee = expFee; } public decimal ExpressFee { // Precondition: None // Postcondition: The next day air package's express fee has been returned get { return expressFee; } // Precondition: value >= 0 // Postcondition: The next day air package's express fee has been set to the // specified value private set // Helper property { if (value >= 0) expressFee = value; else throw new ArgumentOutOfRangeException("ExpressFee", value, "ExpressFee must be >= 0"); } }

Page | 283

// Precondition: None // Postcondition: The next day air package's cost has been returned public override decimal CalcCost() { const decimal DIM_FACTOR = .40M; // Dimension coefficient in cost equation const decimal WEIGHT_FACTOR = .30M; // Weight coefficient in cost equation const decimal HEAVY_FACTOR = .25M; // Heavy coefficient in cost equation const decimal LARGE_FACTOR = .25M; // Large coefficient in cost equation decimal cost; // Running total of cost of package cost = (DIM_FACTOR * (decimal)TotalDimension + WEIGHT_FACTOR * (decimal)Weight) + ExpressFee; if (IsHeavy()) cost += HEAVY_FACTOR * (decimal)Weight; if (IsLarge()) cost += LARGE_FACTOR * (decimal)TotalDimension; return cost; } // Precondition: None // Postcondition: A String with the next day air package's data has been returned public override string ToString() { return String.Format("NextDay{0}{3}Express Fee: {1:C}{3}Cost: {2:C}", base.ToString(), ExpressFee, CalcCost(), System.Environment.NewLine); } }

Page | 284

Program 11 Solution 6th Partial


// // // // // // CIS 200-01 Fall 201 By: Bakre Idiazza File: Package.cs The Package class is an abstract derived class from Parcel. It adds dimensions and weight. System; System.Collections.Generic; System.Linq; System.Text; : Parcel Length of package in inches Width of package in inches Height of package in inches Weight of package in pounds

using using using using

public abstract class Package { private double length; // private double width; // private double height; // private double weight; //

// Precondition: pLength >= 0, pWidth >= 0, pHeight >=0, // pWeight >= 0 // Postcondition: The package is created with the specified values for // origin address, destination address, length, width, // height, and weight public Package(Address originAddress, Address destAddress, double pLength, double pWidth, double pHeight, double pWeight) : base(originAddress, destAddress) { Length = pLength; Width = pWidth; Height = pHeight; Weight = pWeight; } public double Length { // Precondition: None // Postcondition: The package's length has been returned get { return length; } // Precondition: value >= 0 // Postcondition: The package's length has been set to the // specified value set { if (value >= 0)

Page | 285

length = value; else throw new ArgumentOutOfRangeException("Length", value, "Length must be >= 0"); } } public double Width { // Precondition: None // Postcondition: The package's width has been returned get { return width; } // Precondition: value >= 0 // Postcondition: The package's width has been set to the // specified value set { if (value >= 0) width = value; else throw new ArgumentOutOfRangeException("Width", value, "Width must be >= 0"); } } public double Height { // Precondition: None // Postcondition: The package's height has been returned get { return height; } // Precondition: value >= 0 // Postcondition: The package's height has been set to the // specified value set { if (value >= 0) height = value; else throw new ArgumentOutOfRangeException("Height", value, "Height must be >= 0"); } } public double Weight { // Precondition: None // Postcondition: The package's weight has been returned get { return weight;

Page | 286

} // Precondition: value >= 0 // Postcondition: The package's weight has been set to the // specified value set { if (value >= 0) weight = value; else throw new ArgumentOutOfRangeException("Weight", value, "Weight must be >= 0"); } } protected double TotalDimension { // Precondition: None // Postcondition: The package's (Length + Width + Height) is returned get { return (Length + Width + Height); } } // Precondition: None // Postcondition: A String with the package's data has been returned public override string ToString() { return String.Format("Package{5}{0}{5}Length: {1:F2}{5}Width: {2:F2}{5}" + "Height: {3:F2}{5}Weight: {4:F2}", base.ToString(), Length, Width, Height, Weight, System.Environment.NewLine); } }

Page | 287

Program 11 Solution 7th Partial


// // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: Parcel.cs Parcel serves as the abstract base class of the Parcel hierachy. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public abstract class Parcel { // Precondition: None // Postcondition: The parcel is created with the specified values for // origin address and destination address public Parcel(Address originAddress, Address destAddress) { OriginAddress = originAddress; DestinationAddress = destAddress; } public Address OriginAddress { // Precondition: None // Postcondition: The parcel's origin address has been returned get; // Precondition: None // Postcondition: The parcel's origin address has been set to the // specified value set; } public Address DestinationAddress { // Precondition: None // Postcondition: The parcel's destination address has been returned get; // Precondition: None // Postcondition: The parcel's destination address has been set to the // specified value set; } // Precondition: None // Postcondition: The parcel's cost has been returned public abstract decimal CalcCost();

Page | 288

// Precondition: None // Postcondition: A String with the parcel's data has been returned public override String ToString() { return String.Format("Origin Address:{2}{0}{2}Destination Address:{2}{1}", OriginAddress, DestinationAddress, System.Environment.NewLine); } }

Page | 289

Program 11 Solution 8th Partial


// // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: TwoDayAirPackage.cs The TwoDayAirPackage class is a concrete derived class from AirPackage. It adds a delivery type. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

public class TwoDayAirPackage : AirPackage { public readonly char[] VALID_TYPES // Set of valid values for package's delivery type = { 'E', 'S' }; public readonly String[] TYPE_NAMES // Names associated with each delivery type = { "Early", "Saver" }; private char deliveryType; delivery type // Code representing two day air package's

// Precondition: pLength >= 0, pWidth >= 0, pHeight >=0, // pWeight >= 0, delType in VALID_TYPES // Postcondition: The two day air package is created with the specified values for // origin address, destination address, length, width, // height, weight, and delivery type public TwoDayAirPackage(Address originAddress, Address destAddress, double pLength, double pWidth, double pHeight, double pWeight, char delType) : base(originAddress, destAddress, pLength, pWidth, pHeight, pWeight) { DeliveryType = delType; } public char DeliveryType { // Precondition: None // Postcondition: The two day air package's delivery type has been returned get { return deliveryType; } // Precondition: None // Postcondition: The two day air package's delivery type has been set to the // specified value set {

Page | 290

bool valid = false; // Is value among valid types? for (int i = 0; !valid && i < VALID_TYPES.Length; ++i) // Loop through to check if (value == VALID_TYPES[i]) { valid = true; deliveryType = value; } if (!valid) throw new ArgumentOutOfRangeException("DeliveryType", value, "DeliveryType must be 'E' or 'S'"); } } // Precondition: None // Postcondition: The two day air package's cost has been returned public override decimal CalcCost() { const decimal DIM_FACTOR = .25M; // Dimension coefficient in cost equation const decimal WEIGHT_FACTOR = .25M; // Weight coefficient in cost equation const decimal DISCOUNT_FACTOR = 0.90M; // Discount factor in cost equation const char DISCOUNT_TYPE = 'S'; // Delivery type earning discount decimal cost; // Running total of cost of package cost = (DIM_FACTOR * (decimal)TotalDimension + WEIGHT_FACTOR * (decimal)Weight); if (DeliveryType == DISCOUNT_TYPE) cost *= DISCOUNT_FACTOR; return cost; } // Precondition: None // Postcondition: A String with the two day air package's data has been returned public override string ToString() { bool found = false; // Found type yet? int index = 0; // Index of type while ((!found) && (index < VALID_TYPES.Length)) // Search for delivery type { if (DeliveryType == VALID_TYPES[index]) found = true; else ++index; } if (!found) // This should not be possible! throw new ArgumentOutOfRangeException("DeliveryType", DeliveryType, "DeliveryType must be 'E' or 'S'"); return String.Format("TwoDay{0}{3}Delivery Type: {1}{3}Cost: {2:C}", base.ToString(), TYPE_NAMES[index], CalcCost(), System.Environment.NewLine);

Page | 291

Program 11 Solution 9th Partial


// // // // // // // // CIS 200-01 Fall 2011 By: Bakre Idiazza File: TestParcels.cs This is a simple, console application designed to exercise the Parcel hierarchy. It creates two of each type of parcel and then processes them using polymorphism. For TwoDayAirPackages, the delivery type is changed to Saver, demonstrating the use of downcasting. System; System.Collections.Generic; System.Linq; System.Text;

using using using using

namespace Prog1 { class TestParcels { // Precondition: None // Postcondition: Parcels have been created and tested using polymorphism static void Main(string[] args) { // Test Data - Magic Numbers OK Address a1 =new Address("John Smith","123 Any St.","Apt. #321","Louisville","KY", 40202); Address a2 =new Address("Jane Doe", "456 Main St.", "Ste. #10","San Diego", "CA", 98765); Address a3 = new Address("John Doe", "111 Market St.", "","Jeffersonville", "IN", 47130); Address a4 = new Address("Jane Smith","55 HollyBlvd.","Apt.9","BeverlyHills","CA",90210); Letter letter1 = new Letter(a1, a2, 3.95M); Letter letter2 = new Letter(a3, a4, 4.25M); GroundPackage gp1 = new GroundPackage(a4, a1, 14, 10, 5, 12.5); GroundPackage gp2 =new GroundPackage(a1, a3, 8.5, 9.5, 6.5, 2.5); NextDayAirPackage ndap1=new NextDayAirPackage(a1, a4, 25,15,15, 85, 7.50M); NextDayAirPackage ndap2 = new NextDayAirPackage(a3, a2, 9.5, 6.0, 5.5,5.25, 5.25M); TwoDayAirPackage tdap1 = new TwoDayAirPackage(a2, a4, 46.5, 39.5, 28.0, 19.5, 'S'); TwoDayAirPackage tdap2 = new TwoDayAirPackage(a3, a1, 15.0, 9.5, 6.5,12.5, 'E'); List<Parcel> parcels; // List of test parcels decimal totalCost = 0.00M; // Running total of parcel costs parcels = new List<Parcel>(); parcels.Add(letter1); // Populate list parcels.Add(letter2); parcels.Add(gp1); parcels.Add(gp2); parcels.Add(ndap1); parcels.Add(ndap2); parcels.Add(tdap1); parcels.Add(tdap2); foreach (Parcel p in parcels)

Page | 292

{ Console.WriteLine(p); if (p is TwoDayAirPackage) { TwoDayAirPackage tdap = (TwoDayAirPackage)p; // Downcast as TwoDayAirPackage to access DeliveryType tdap.DeliveryType = 'S'; // Reset delivery type Console.WriteLine("After resetting delivery type"); Console.WriteLine(p); // Can output through either reference } Console.WriteLine("===================="); totalCost += p.CalcCost(); // Calculate running total } Console.WriteLine("Total cost: {0:C}", totalCost); } } }

Page | 293

Program 11 Output Solution

Page | 294

Program 11 Output Solution. (Continue)

Page | 295

Program 12.C#
This lab explores the use of Visual Studio to create a simple GUI application. 1. Visual Studio creates several files for you, including a Form named Form1 which is displayed in Design view. Let's start by renaming the form. From the Solution Explorer (top-right window), click on the filename Form1.cs and rename as MilesToKM.cs . 2. Click on the form itself in Design view. Find the Text property in the Properties window (bottom-right window). It currently has the value "Form1" and this defines the text that appears in the form's title bar. Change the value to "Miles to KM" and see how the form's title bar changes in response. 3. Next, let's add some GUI controls to the form from the Toolbox. First, click on the Toolbox and find the Label control. Drag a label onto the form. By default, Visual Studio will name this control label1and make this its text. Change the name of the label by clicking it on the form and then scrolling to the top of the Properties window. Look for the (Name) property. Change this value to promptLbl instead. Next, change its Text property to read "Enter number of miles:". 4. Next, go to the Toolbox and drag a TextBox to the form to the right of the label. Change its name from textBox1 to milesTxt using the (Name) property again. This text box will be used by the user to enter a value for the number of miles to be converted to kilometers. 5. Next, return to the Toolbox and drag another label to the form beneath the existing label. Change its name to outputLbl. Change its text to "Converted to KM:". 6. Now add another TextBox to the form to the right of the new label and under the existing text box. Change its name to kmTxt. Because this text box will be used only for output we don't want the user to be able to type in it. Find the property named ReadOnly and change its value to True for the text box. 7. Next, we need a button that the user can click to convert their miles entered to kilometers. From the Toolbox, drag a Button to the form and place it under the labels. Change the button's name to convertBtn and its text to "Convert". 8. We'd like this button to react when the user hits enter after typing their number of miles. Click somewhere in a blank part of the form to select the form. Find the AcceptButton property. Change its value from (none) to convertBtn . 9. The final task is to make the application actually respond to the button being clicked and perform the conversion. The easiest way to create an event handler for a button's click event is to simply double-click on it in Design view. Double-click on the convert button on the form. Visual Studio creates an event handling method named convertBtn_Click and switches you to Code view. 10. Write code for this event handler that will parse the text in the text box named milesTxt into a double value. Multiply this amount by 1.60935 (hint: create a named constant for the number of kilometers per mile) to come up with the number of kilometers. Use this value to set the Text property of the kmTxt text box. Format the output to two decimal places of precision. Page | 296

Program 12 Solution
// // // // // // CIS 199-01 By: Bakre Idiazza File: MilesToKM.cs This file serves as the form's event handling code. It has the event handler for the form's button that converts the entered miles into kilometers and displays on the form. System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

using using using using using using using using

namespace Lab5 { public partial class MilesToKM : Form { // Precondition: None // Postcondition: The form's GUI is prepared for display public MilesToKM() { InitializeComponent(); } // Precondition: The milesTxt text box has a number entered in it // Postcondition: The miles entered in the milesTxt text box is // coverted to kilometers and displayed in the kmTxt // text box on the form private void convertBtn_Click(object sender, EventArgs e) { const double KM_PER_MI = 1.60935; // Kilometers per mile double miles = double.Parse(milesTxt.Text); // Number of miles double km = miles * KM_PER_MI; // Converted number of KM kmTxt.Text = km.ToString("F2"); } } }

Page | 297

Program 12 Output Solution

Page | 298

Program 13.C#
This lab explores the use of Visual Studio to create a simple GUI application. 1. Create a simple Windows Forms GUI application. The GUI will contain two labels, one textbox, and a button. One label will appear to the left of the textbox and should prompt the user to "Enter temp of water (in F):" . The button should have "Submit" as its text. The other label will display a message about the state of the water based on its temperature after the user clicks the submit button. 2. When the user submits the temperature, parse the text in the textbox as a double so that you have the temperature as a number. If the temperature is greater than or equal to 212, change the text of the message label to "Boiling". If the temperature is less than or equal to 32, change the text of the message label to "Freezing". Otherwise, set the text of the message label to "OK"

Page | 299

Program 13 Solution
// // // // CIS 199-01 By: Bakre Idiazza File: This file serves as the form's event handling code. It has the event handler for the form's button that converts number into message System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

using using using using using using using using

namespace Exam2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // Precondition: User has entered numeric text in tempTxt and click submitBtn // Postcondition: A message about the state the water is in based on the entered // temperature is displayed: Freezing, OK, or Boiling private void submitBtn_Click(object sender, EventArgs e) { double temp = double.Parse(tempTxt.Text); // Temp of water in Fahrenheit if (temp >= 212) outputLbl.Text = "Boiling"; else if (temp <= 32) outputLbl.Text = "Freezing"; else outputLbl.Text = "OK"; } } }

Page | 300

Program 13 Output Solution

Page | 301

Program14.C#
This program explores file I/O and object serialization and expands the GUI application developed in Program 2. In this assignment you will add additional functionality to the application created in Program 2. Everyone will begin from the same code by using your instructor's solution as a starting point for the hierarchy (found in Blackboard under Course Documents, Program Solutions, Programs). There are two primary additions to the functionality provided in Program 2. First, the addresses that are entered need to be able to be saved to a file and loaded back in to the application. Second, in addition to inserting new addresses, users should be able to edit existing addresses to update the fields with new information. The application must add two menu items, Open Addresses and Save Addresses, to the File menu. The Open menu item allows the user to choose a file that contains the list of Address objects. When opened, the list will replace the addresses currently in the application. The Save menu item allows the user to save the current list of Address objects to a file. You are required to use object serialization with binary formatting for this. This will require minor modifications to the existing Address class in the solution. The application must include appropriate exception handling, so that file-related errors do not crash the program. Since the user will now be able to load their own list of addresses, there is no longer a need to pre-populate the list of addresses with test data. In addition, the application must add a new menu, Edit with a single menu item, Address. When selected, present the user with the list of addresses and allow the user to choose which one they'd like to edit. You might do this in several different ways, possibly using a combo box (as in the Letter form), through a ListBox or some other mechanism. The GUI design for this is up to you but it needs to be functional and attractive. Once an address from the list is selected, use the existing Address form dialog box to allow the user to edit the fields in the address. Remember, when editing, the existing data should be loaded into the form fields and when submitted, the existing Address object should have it's fields updated to match. It should not be necessary to modify the Address form code, so don't make any changes to this file without getting approval first.

Page | 302

Program 14 Output Solution 1st Partial

// // // // // // // //

CIS 200-01 Fall 2011 By: Bakre Idiazza File: AddressForm.cs This class creates the Address dialog box form GUI. It performs validation and provides String properties for each field. Changed for Program 3 so that default state only appears when no state already selected. System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

using using using using using using using using

namespace Prog3 { public partial class AddressForm : Form { public const String DEFAULT_STATE = "KY"; // Default state for addresses // Precondition: None // Postcondition: The form's GUI is prepared for display. public AddressForm() {

Page | 303

InitializeComponent(); } public string AddressName { // Precondition: None // Postcondition: The text of form's name field is returned get { return nameTxt.Text; } // Precondition: None // Postcondition: The text of form's name field is set to specified value set { nameTxt.Text = value; } } public string Address1 { // Precondition: None // Postcondition: The text of form's Address1 field is returned get { return address1Txt.Text; } // Precondition: None // Postcondition: The text of form's Address1 field is set to specified value set { address1Txt.Text = value; } } public string Address2 { // Precondition: None // Postcondition: The text of form's Address2 field is returned get { return address2Txt.Text; } // Precondition: None // Postcondition: The text of form's Address2 field is set to specified value set { address2Txt.Text = value; } } public string City { // Precondition: None // Postcondition: The text of form's City field is returned get { return cityTxt.Text;

Page | 304

} // Precondition: None // Postcondition: The text of form's City field is set to specified value set { cityTxt.Text = value; } } public string ZipText { // Precondition: None // Postcondition: The text of form's Zip field is returned get { return zipTxt.Text; } // Precondition: None // Postcondition: The text of form's Zip field is set to specified value set { zipTxt.Text = value; } } public string State { // Precondition: None // Postcondition: The text of form's State field is returned get { if (stateCbo.SelectedIndex != -1) // -1 means no item selected return stateCbo.SelectedItem.ToString(); else return ""; } // Precondition: value must be in stateCbo Items // Postcondition: The text of form's State field is set to specified value set { stateCbo.SelectedItem = value; } } // Precondition: Focus is shifting from zipTxt // Postcondition: If text is invalid, focus remains and error provider // highlights the field private void zipTxt_Validating(object sender, CancelEventArgs e) { int zip; // Zip code of address bool valid = true; // Is text valid? if (!int.TryParse(zipTxt.Text, out zip)) // Parse failed? valid = false; else if ((zip < 0) || (zip > Address.MAX_ZIP)) valid = false;

Page | 305

if (!valid) // Invalid, so cancel and highlight field { e.Cancel = true; zipTxt.SelectAll(); errorProvider.SetError(zipTxt, "Invalid zip code! Enter 5 digit zip code."); } } // Precondition: Validating of zipTxt not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void zipTxt_Validated(object sender, EventArgs e) { errorProvider.SetError(zipTxt, ""); } // Precondition: Focus is shifting from nameTxt // Postcondition: If text is invalid, focus remains and error provider // highlights the field private void nameTxt_Validating(object sender, CancelEventArgs e) { if (nameTxt.TextLength == 0) // Empty field { e.Cancel = true; errorProvider.SetError(nameTxt, "Must provide Name"); } } // Precondition: Validating of nameTxt not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void nameTxt_Validated(object sender, EventArgs e) { errorProvider.SetError(nameTxt, ""); } // Precondition: Focus is shifting from address1Txt // Postcondition: If text is invalid, focus remains and error provider // highlights the field private void address1Txt_Validating(object sender, CancelEventArgs e) { if ( address1Txt.TextLength == 0) // Empty field { e.Cancel = true; errorProvider.SetError(address1Txt, "Must provide Address"); } } // Precondition: Validating of address1Txt not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void address1Txt_Validated(object sender, EventArgs e) { errorProvider.SetError(address1Txt, ""); } // Precondition: Focus is shifting from cityTxt // Postcondition: If text is invalid, focus remains and error provider // highlights the field private void cityTxt_Validating(object sender, CancelEventArgs e)

Page | 306

{ if (cityTxt.TextLength == 0) // Empty field { e.Cancel = true; errorProvider.SetError(cityTxt, "Must provide City"); } } // Precondition: Validating of cityTxt not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void cityTxt_Validated(object sender, EventArgs e) { errorProvider.SetError(cityTxt, ""); } // Precondition: User pressed on cancelBtn // Postcondition: Form closes and sends Cancel result private void cancelBtn_MouseDown(object sender, MouseEventArgs e) { // This handler uses MouseDown instead of Click event because // Click won't be allowed if other field's validation fails this.DialogResult = DialogResult.Cancel; //Causes form to close and return Cancel result } // Precondition: User clicked on okBtn // Postcondition: If invalid field on dialog, keep form open and give first invalid // field the focus. Else return OK and close form. private void okBtn_Click(object sender, EventArgs e) { // The easy way // Raise validating event for all enabled controls on form // If all pass, ValidateChildren() will be true if (ValidateChildren()) this.DialogResult = DialogResult.OK; else // The hard way // Check each control and if empty, give focus to first one encountered if (nameTxt.TextLength == 0) // Should not be possible but just to be safe nameTxt.Focus(); else if (address1Txt.TextLength == 0) address1Txt.Focus(); else if (cityTxt.TextLength == 0) cityTxt.Focus(); else if (stateCbo.SelectedIndex == -1) // Should not be possible but just to be safe cityTxt.Focus(); else if (zipTxt.TextLength == 0) // Zip box never entered, so no validation zipTxt.Focus(); } // Precondition: None // Postcondition: The State is set to the default choice private void AddressForm_Load(object sender, EventArgs e) { if (State == "") State = AddressForm.DEFAULT_STATE; } } }

Page | 307

Program 14 Output Solution 2nd Partial

// // // // // // //

CIS 200-01 Fall 2011 By: Bakre Idiazza File: ChooseAddressForm.cs This class creates the Choose Address to Edit dialog box form GUI. It provides a get property to retrieve the index of the selected Letter from a list of addresses. System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

using using using using using using using using

namespace Prog3 { public partial class ChooseAddressForm : Form { private List<Address> addressList; // List of addresses used to fill combo boxes // Precondition: None // Postcondition: The form's GUI is prepared for display. public ChooseAddressForm(List<Address> addresses) { InitializeComponent(); addressList = addresses; } public int AddressIndex { // Precondition: User has selected from originAddCbo // Postcondition: The index of the selected origin address returned

Page | 308

get { return addListCbo.SelectedIndex; } // Precondition: -1 <= value < addressList.Count // Postcondition: The specified index is selected in originAddCbo set { if ((value >= -1) && (value < addressList.Count)) addListCbo.SelectedIndex = value; else throw new ArgumentOutOfRangeException("AddressIndex", value, "Index must be valid"); } }

// Precondition: None // Postcondition: The list of addresses is used to populate the // list of addresses combo boxes private void ChooseAddressForm_Load(object sender, EventArgs e) { foreach (Address a in addressList) { addListCbo.Items.Add(a.Name); } addListCbo.SelectedIndex = 0; // Select first name in list } // Precondition: User pressed on cancelBtn // Postcondition: Form closes private void cancelBtn_MouseDown(object sender, MouseEventArgs e) { // This handler uses MouseDown instead of Click event because // Click won't be allowed if other field's validation fails this.DialogResult = DialogResult.Cancel; } // Precondition: Focus shifting from addListCbo // Postcondition: If no address selected, focus remains and error provider // highlights the field private void addListCbo_Validating(object sender, CancelEventArgs e) { if (addListCbo.SelectedIndex == -1) // -1 means no item selected { e.Cancel = true; errorProvider.SetError(addListCbo, "Must select an address"); } } // Precondition: Validating of addListCbo not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void addListCbo_Validated(object sender, EventArgs e) { errorProvider.SetError(addListCbo, "");

Page | 309

} // Precondition: User clicked on okBtn // Postcondition: If invalid field on dialog, keep form open and give first invalid //field the focus. Else return OK and close form. private void okBtn_Click(object sender, EventArgs e) { // The easy way // Raise validating event for all enabled controls on form // If all pass, ValidateChildren() will be true if (ValidateChildren()) this.DialogResult = DialogResult.OK; else // The hard way // Check each control and if empty, give focus to first one encountered if (addListCbo.SelectedIndex == -1) // Should not be possible but just to be safe addListCbo.Focus(); } } }

Page | 310

Program 14 Output Solution 3rd Partial

// // // // // //

CIS 200-01 Fall 2011 By: Bakre Idiazza File: LetterForm.cs This class creates the Letter dialog box form GUI. It performs validation and provides properties properties for each field. System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

using using using using using using using using

namespace Prog3 { public partial class LetterForm : Form { public const int MIN_ADDRESSES = 2; // Minimum number of addresses needed private List<Address> addressList; // List of addresses used to fill combo boxes

// Precondition: List addresses is populated with the available // addresses (at least 2) to choose from // Postcondition: The form's GUI is prepared for display. public LetterForm(List<Address> addresses) { InitializeComponent(); addressList = addresses;

Page | 311

} // Precondition: addressList.Count >= MIN_ADDRESSES // Postcondition: The list of addresses is used to populate the // origin and destination address combo boxes private void LetterForm_Load(object sender, EventArgs e) { if (addressList.Count < MIN_ADDRESSES) // Violated precondition! { MessageBox.Show("Need " + MIN_ADDRESSES + " addresses to create letter!", "Addresses Error"); this.DialogResult = DialogResult.Abort; // Dismiss immediately } else { foreach (Address a in addressList) { originAddCbo.Items.Add(a.Name); destAddCbo.Items.Add(a.Name); } } } // Precondition: Focus is shifting from fixedCostTxt // Postcondition: If text is invalid, focus remains and error provider // highlights the field private void fixedCostTxt_Validating(object sender, CancelEventArgs e) { decimal fixedCost; // Cost of letter bool valid = true; // Is text valid? if (!decimal.TryParse(fixedCostTxt.Text, out fixedCost)) // Parse failed? valid = false; else if (fixedCost < 0) valid = false; if (!valid) // Invalid, so cancel and highlight field { e.Cancel = true; fixedCostTxt.SelectAll(); errorProvider.SetError(fixedCostTxt, "Invalid cost! Enter an amount."); } } // Precondition: Validating of fixedCostTxt not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void fixedCostTxt_Validated(object sender, EventArgs e) { errorProvider.SetError(fixedCostTxt, ""); } // Precondition: Focus shifting from originAddCbo // Postcondition: If no address selected, focus remains and error provider // highlights the field private void originAddCbo_Validating(object sender, CancelEventArgs e) { if (originAddCbo.SelectedIndex == -1) // -1 means no item selected {

Page | 312

e.Cancel = true; errorProvider.SetError(originAddCbo, "Must select an address"); } else if (destAddCbo.SelectedIndex != -1 && destAddCbo.SelectedIndex == originAddCbo.SelectedIndex) { e.Cancel = true; errorProvider.SetError(originAddCbo, "Must select different addresses"); } } // Precondition: Focus shifting from destAddCbo // Postcondition: If no address selected, focus remains and error provider // highlights the field private void destAddCbo_Validating(object sender, CancelEventArgs e) { if (destAddCbo.SelectedIndex == -1) // -1 means no item selected { e.Cancel = true; errorProvider.SetError(destAddCbo, "Must select an address"); } else if (originAddCbo.SelectedIndex != -1 && destAddCbo.SelectedIndex == originAddCbo.SelectedIndex) { e.Cancel = true; errorProvider.SetError(destAddCbo, "Must select different addresses"); } } // Precondition: Validating of originAddCbo not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void originAddCbo_Validated(object sender, EventArgs e) { errorProvider.SetError(originAddCbo, ""); } // Precondition: Validating of destAddCbo not cancelled, so data OK // Postcondition: Error provider cleared and focus allowed to change private void destAddCbo_Validated(object sender, EventArgs e) { errorProvider.SetError(destAddCbo, ""); } public int OriginAddressIndex { // Precondition: User has selected from originAddCbo // Postcondition: The index of the selected origin address returned get { return originAddCbo.SelectedIndex; } // Precondition: -1 <= value < addressList.Count // Postcondition: The specified index is selected in originAddCbo set { if ((value >= -1) && (value < addressList.Count)) originAddCbo.SelectedIndex = value; else throw new ArgumentOutOfRangeException("OriginAddressIndex", value,

Page | 313

"Index must be valid"); } } public int DestinationAddressIndex { // Precondition: User has selected from destAddCbo // Postcondition: The index of the selected origin address returned get { return destAddCbo.SelectedIndex; } // Precondition: -1 <= value < addressList.Count // Postcondition: The specified index is selected in destAddCbo set { if ((value >= -1) && (value < addressList.Count)) destAddCbo.SelectedIndex = value; else throw new ArgumentOutOfRangeException("DestinationAddressIndex", value, "Index must be valid"); } } public string FixedCostText { // Precondition: None // Postcondition: The text of form's fixed cost field is returned get { return fixedCostTxt.Text; } // Precondition: None // Postcondition: The text of form's fixed cost field is set to specified value set { fixedCostTxt.Text = value; } } // Precondition: User pressed on cancelBtn // Postcondition: Form closes private void cancelBtn_MouseDown(object sender, MouseEventArgs e) { // This handler uses MouseDown instead of Click event because // Click won't be allowed if other field's validation fails this.DialogResult = DialogResult.Cancel; } // Precondition: User clicked on okBtn // Postcondition: If invalid field on dialog, keep form open and give first invalid // field the focus. Else return OK and close form. private void okBtn_Click(object sender, EventArgs e) { // The easy way // Raise validating event for all enabled controls on form // If all pass, ValidateChildren() will be true

Page | 314

if (ValidateChildren()) this.DialogResult = DialogResult.OK; else // Check each control and if empty, give focus to first one encountered if (originAddCbo.SelectedIndex == -1) // Should not be possible but just to be safe originAddCbo.Focus(); else if (destAddCbo.SelectedIndex == -1) destAddCbo.Focus(); else if (fixedCostTxt.TextLength == 0) // Cost box never entered, so no validation fixedCostTxt.Focus(); } } }

Page | 315

Program 14 Output Solution 4th Partial

Page | 316

// // // // // // // // // // //

CIS 200-01 Fall 2011 By: Bakre Idiazza File: Prog3Form.cs This class creates the main GUI for Program 3. It provides a File menu with About and Exit items, an Insert menu with Address and Letter items, and a Report menu with List Addresses and List Parcels items. It adds two menu items, Open Addresses and Save Addresses, to the File menu. In addition, the application must add a new menu, Edit with a single menu item, Address. When selected, present the user with the list of addresses and allow the user to choose which one they'd like to edit. System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms; System.IO; System.Runtime.Serialization.Formatters.Binary; System.Runtime.Serialization;

using using using using using using using using using using using

namespace Prog3 { public partial class Prog3Form : Form { private List<Address> addressList; // The list of addresses private List<Parcel> parcelList; // The list of parcels, though only Letters now // Precondition: None // Postcondition: The form's GUI is prepared for display. A few test addresses are // added to the list of addresses public Prog3Form() { InitializeComponent(); addressList = new List<Address>(); parcelList = new List<Parcel>(); } // Precondition: File, Exit menu item activated // Postcondition: The application is exited private void exitToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } // Precondition: Insert, Address menu item activated // Postcondition: The Address dialog box is displayed. If data entered // are OK, an Address is created and added to the list // of addresses private void addressToolStripMenuItem_Click(object sender, EventArgs e) { AddressForm addressForm = new AddressForm(); // The address dialog box form DialogResult result = addressForm.ShowDialog(); // Show form as dialog and store result if (result == DialogResult.OK) // Only add if OK

Page | 317

{ try { Address newAddress = new Address(addressForm.AddressName, addressForm.Address1, addressForm.Address2, addressForm.City, addressForm.State, int.Parse(addressForm.ZipText)); // Use form's properties to create address addressList.Add(newAddress); } catch (FormatException) // This should never happen if form validation works! { MessageBox.Show("Problem with Address Validation!", "Validation Error"); } } } // Precondition: Report, List Addresses menu item activated // Postcondition: The list of addresses is displayed in the addressResultsTxt // text box private void listAddressesToolStripMenuItem_Click(object sender, EventArgs e) StringBuilder result = new StringBuilder(); // Holds text as report being built // StringBuilder more efficient than String result.Append("Addresses:"); result.Append(System.Environment.NewLine); // Remember, \n doesn't always work in GUIs result.Append(System.Environment.NewLine); foreach (Address a in addressList) { result.Append(a.ToString()); result.Append(System.Environment.NewLine); result.Append(System.Environment.NewLine); } reportTxt.Text = result.ToString(); // Put cursor at start of report reportTxt.Focus(); reportTxt.SelectionStart = 0; reportTxt.SelectionLength = 0; } // Precondition: Insert, Letter menu item activated // Postcondition: The Letter dialog box is displayed. If data entered // are OK, a Letter is created and added to the list // of parcels private void letterToolStripMenuItem_Click(object sender, EventArgs e) { LetterForm letterForm; // The letter dialog box form DialogResult result; // The result of showing form as dialog if (addressList.Count < LetterForm.MIN_ADDRESSES) // Make sure we have enough addresses { MessageBox.Show("Need " + LetterForm.MIN_ADDRESSES + " addresses to create letter!", "Addresses Error"); return; } letterForm = new LetterForm(addressList); result = letterForm.ShowDialog();

Page | 318

if (result == DialogResult.OK) // Only add if OK { try { // For this to work, LetterForm's combo boxes need to be in same // order as addressList Letter newLetter = new Letter(addressList[letterForm.OriginAddressIndex], addressList[letterForm.DestinationAddressIndex], decimal.Parse(letterForm.FixedCostText)); // Letter to be inserted parcelList.Add(newLetter); } catch (FormatException) // This should never happen if form validation works! { MessageBox.Show("Problem with Letter Validation!", "Validation Error"); } } } // Precondition: Report, List Parcels menu item activated // Postcondition: The list of parcels is displayed in the parcelResultsTxt // text box private void listParcelsToolStripMenuItem_Click(object sender, EventArgs e) { StringBuilder result = new StringBuilder(); // Holds text as report being built // StringBuilder more efficient than String decimal totalCost = 0; // Running total of parcel shipping costs result.Append("Parcels:"); result.Append(Environment.NewLine); // Remember, \n doesn't always work in GUIs result.Append(Environment.NewLine); foreach (Parcel p in parcelList) { result.Append(p.ToString()); result.Append(Environment.NewLine); result.Append(Environment.NewLine); totalCost += p.CalcCost(); } result.Append("------------------------------"); result.Append(Environment.NewLine); result.Append(String.Format("Total Cost: {0:C}", totalCost)); reportTxt.Text = result.ToString(); // Put cursor at start of report reportTxt.Focus(); reportTxt.SelectionStart = 0; reportTxt.SelectionLength = 0; } // Precondition: File, About menu item activated // Postcondition: Information about author displayed in dialog box private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show(String.Format("Program 3{0}By: Andrew L. Wright{0}" + "CIS 200{0}Fall 2011", System.Environment.NewLine), "About Program 3"); } // Precondition: File, Save Addresses menu item activated // Postcondition: The list of addresses is saved to a file using

Page | 319

// object serialization private void saveAddressesToolStripMenuItem_Click(object sender, EventArgs e) { BinaryFormatter formatter = new BinaryFormatter(); // Object for serializing list of addresses in binary format FileStream output = null; // Stream for writing to a file DialogResult result; // Result of file dialog box string fileName; // Name of file to save data using (SaveFileDialog fileChooser = new SaveFileDialog()) // Create Save File Dialog { fileChooser.CheckFileExists = false; // let user create file // retrieve the result of the dialog box result = fileChooser.ShowDialog(); fileName = fileChooser.FileName; // get specified file name } // end using // ensure that user clicked "OK" if (result == DialogResult.OK) { // show error if user specified invalid file if (fileName == string.Empty) MessageBox.Show("Invalid File Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); else { // save file via FileStream if user specified valid file try { // open file with write access, Create will overwrite existing file output = new FileStream(fileName, FileMode.Create, FileAccess.Write); formatter.Serialize(output, addressList); // Serialize entire list! } // end try // handle exception if there is a problem opening the file catch (IOException) { // notify user if file could not be opened MessageBox.Show("Error Writing to File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // end catch // notify user if error occurs in serialization catch (SerializationException) { MessageBox.Show("Error Writing to File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // end catch finally { if (output != null) output.Close(); // close FileStream } } // end else } // end if } // Precondition: File, Open Addresses menu item activated // Postcondition: The list of addresses is read in from a file using

Page | 320

// object deserialization, replacing the existing list private void openAddressesToolStripMenuItem_Click(object sender, EventArgs e) { BinaryFormatter reader = new BinaryFormatter(); // Object for deserializing list of addresses in binary format FileStream input = null; // Stream for reading from a file DialogResult result; // Result of file dialog box string fileName; // Name of file to save data List<Address> temp; // Temporary holder for list of addresses using (OpenFileDialog fileChooser = new OpenFileDialog()) // Create Open Dialog box { result = fileChooser.ShowDialog(); fileName = fileChooser.FileName; // get specified name } // end using // ensure that user clicked "OK" if (result == DialogResult.OK) { // show error if user specified invalid file if (fileName == string.Empty) MessageBox.Show("Invalid File Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); else { // create FileStream to obtain read access to file try { input = new FileStream(fileName, FileMode.Open, FileAccess.Read); // get list of addresses from file temp = (List<Address>)reader.Deserialize(input); addressList = temp; // Separated in case deserialization failed } // end try // handle exception if there is a problem opening the file catch (IOException) { // notify user if file could not be opened MessageBox.Show("Error Reading From File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // end catch catch (SerializationException) { MessageBox.Show("Error Reading From File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } // end catch finally { if (input != null) input.Close(); // close FileStream } } // end else } // end if } // Precondition: Edit, Address menu item activated

Page | 321

// Postcondition: The address selected from the list has been edited // with the new information replacing the existing object's // properties private void addressToolStripMenuItem1_Click(object sender, EventArgs e) { if (addressList.Count > 0) // Only edit if there are addresses! { ChooseAddressForm chooseAddForm = new ChooseAddressForm(addressList); // The choose address dialog box form DialogResult result = chooseAddForm.ShowDialog(); // Show form as dialog and store result if (result == DialogResult.OK) // Only edit if OK { int editIndex; // Index of address to edit editIndex = chooseAddForm.AddressIndex; if (editIndex >= 0) // -1 if didn't select item from combo box { Address editAddress = addressList[editIndex]; // The address being edited AddressForm addressForm = new AddressForm(); // The address dialog box form // Populate form fields from selected address addressForm.AddressName = editAddress.Name; addressForm.Address1 = editAddress.Address1; addressForm.Address2 = editAddress.Address2; addressForm.City = editAddress.City; addressForm.State = editAddress.State; addressForm.ZipText = String.Format("{0:D5}", editAddress.Zip); result = addressForm.ShowDialog(); // Show form as dialog and store result if (result == DialogResult.OK) // Only edit if OK { // Edit address properties using form fields editAddress.Name = addressForm.AddressName; editAddress.Address1 = addressForm.Address1; editAddress.Address2 = addressForm.Address2; editAddress.City = addressForm.City; editAddress.State = addressForm.State; try { editAddress.Zip = int.Parse(addressForm.ZipText); } catch (FormatException) // This should never happen if form validation works! { MessageBox.Show("Problem with Zip Validation!", "Validation Error"); } } } } } else MessageBox.Show("No addresses to edit!", "No Addresses"); } } }

Page | 322

Program 14 Output Solution

Page | 323

Section V: Information Security Skills


This section provides examples of my experience in Information Security classes as well as my internships from Miller IT Center as IT Systems Analyst Intern which consisted of many projects that taught me the core concepts of identification of security risks, copyright violations, and account misuse, as well as managed accounts and gave users access. My current position as Global Security Systems at Yum! Brands Im responsible for monitoring and troubleshooting various system platforms including access requests, create accounts, and Multi-Level Tier 1/2/3 support where I also work with BMU's to setup users through User provisioning in IBM's Identity and Access Management. My ability to turn a real-world IT enterprise into a secure working solution is proven in the documents below:

Assignment 1- Wireshark Project


This assignment we had to use our computer, connected to the Internet using a LAN cable, and captured live wireless traffic and analysis using Wireshark tool

Assignment 2- Wireshark SSL/TLS handshaking


This assignment is to get familiar and to analysis SSL/TLS handshaking traffic using Wireshark tool

Assignment 3- Crypto Lab Assignment


I used CrypTool which enabled me to apply and analyze cryptographic mechanisms

Assignment 4- Security Research Thesis: iPhone Vulnerabilities


In this assignment I chose an area of information security management that interests me which iPhone vulnerabilities and discuss the topic addressing a managerially significant issue and proposed an action plan to address it

Summary of projects in my previous Interns


In this section I summariesd few of tasks and duties I was doing on my previous positons

Page | 324

Assignment 1 Wireshark Project


a) Use a computer in your home. Your computer must be connected to the Internet using a LAN cable. To capture live wireless traffic, you need to install airpcap driver with cost. If you use a computer in the Davidson 304, you will get traffic that contains lots of noise and have a hard time in filtering out the background traffic. b) Use the attached file (LittlePrince.txt) to upload. Change the file name to LittlePrince_###.txt, where ### is your first initial and last name. If you should upload multiple times, change the file name by adding a number (e.g., LittlePrince_gim_1.txt, LittlePrince_gim_2.txt). The website does not accept the same file name. c) When you capture the traffic, capture all traffic and do not use Capture Filters. d) Submit the original pcap file that contains the whole traffic. Follow the naming convention (wireshark_###.pcap, where ### is your first initial and last name; e.g., wireshark_gim.pcap) e) Answer the questions below and submit your answers in a word file. Follow the naming convention (wireshark_###.docx, where ### is your first initial and last name; e.g., wireshark_gim.docx) f) This is an individual assignment and collaboration is not allowed. g) In the lab session, we havent covered all the necessary features in Wireshark that are necessary to answer some of the questions below. You are asked to navigate the menus and figure out the solutions by yourself. h) FYI, I attached DisplayFilter.pdf on the project section. Review it quickly to understand how you can use filters to isolate the unnecessary traffic. You can use Capture Filter at the time of capturing the live traffic. However, in general, capture all and analyze later using Display Filters. Capture and Display Filters work similarly. i) Refer to WireShark_Lab.docx posted on the Wireshark Lab section as necessary. j) Contact me if you need clarification. Do the following: a) Retrieve the LittlePrince.txt file from the Blackboard and change the file name to yours. b) Start your Wireshark. Go to Capture / Interface / Select your LAN and Start. Start your browser and go to http://ghi.site90.com/wireshark_project.php. Do not go to this site in advance. If you do, you will not capture the DNS traffic.

Page | 325

Questions for the Wireshark Project


1. What is the IP address and TCP port number used by your computer (client)? What is the IP address and TCP port number used by the server? (6 points) 2. Can you read the content of the file LittlePrince.txt through the packet(s) that you captured? (6 points) 3. Take from the initial three TCP packets (SYN, SYN/ACK, ACK) to the second HTTP packet (i.e., HTTP/1.1 200 OK). Explain how the sequence and acknowledgement numbers for these packets are arranged? Explain them using absolute sequence numbers. (10 points)
Packet no Protocol SYN no ACK no Description

4. We see a lot of the TCP segments of a reassembled PDU. Examine only the TCP segments related to the file uploading. Are these reassembled eventually? (6 points) 5. Can you isolate the TCP stream that is related to the uploading of the text file? What filter do you use to achieve this? (6 points) 6. In your TCP packets, how many errors and warnings did you receive? (6 points) 7. How do you know round trip time (RTT) of the TCP stream? RTT is the time between the data packet to the corresponding ACK packet. Can you display it? You dont need to calculate the exact RTT.

Page | 326

Answers for the Wireshark Project


1. What is the IP address and TCP port number used by your computer (client)? What is the IP address and TCP port number used by the server? My PC was using 10.10.10.108 using port 80 and my server was 31.170.162.223 using port 53654

Page | 327

2. Can you read the content of the file LittlePrince.txt through the packet(s) that you captured? Yes, I can read the content of the file LittlePrince.txt through the packet that I captured (please see below)

Page | 328

3. Take from the initial three TCP packets (SYN, SYN/ACK, ACK) to the second HTTP packet (i.e., HTTP/1.1 200 OK). Explain how the sequence and acknowledgement numbers for these packets are arranged? Explain them using absolute sequence numbers. Please see table below Packet no
130 132 133 134

Protocol SYN no
TCP TCP TCP HTTP 2916136227 217099777 2916136228 2916136228

ACK no
N/A 2916136228 217099778 217099778

Description
Initial start up of conversation 31.170.162.223 teacher server ack connect request Start up conversation was established This is the first step after three way handshake. My ipaddess receives a Webpage Website information is being sent to my ipaddress Website information is being reassembled together The test/html code is done being reassembled and is complete. This can be seen within the packet the code of the site.

135 136 137

TCP TCP HTTP

217099778 217099778 217101038

2916136623 2916136623 2916136623

4. We see a lot of the TCP segments of a reassembled PDU. Examine only the TCP segments related to the file uploading. Are these reassembled eventually? Yes , they are reassembled eventually. 5. Can you isolate the TCP stream that is related to the uploading of the text file? What filter do you use to achieve this? Yes, I can isolate the TCP stream that related to the uploading of the text file and I used the TCP.Stream Filter to achieve this. (Please see below)

Page | 329

6. In your TCP packets, how many errors and warnings did you receive? I did not get any errors 7. How do you know round trip time (RTT) of the TCP stream? RTT is the time between the data packet to the corresponding ACK packet. Can you display it? You dont need to calculate the exact RTT Yes, I can display it. (Please see below)

Page | 330

Page | 331

Assignment 2 Wireshark SSL/TLS handshaking


Instructions:
- This is an optional assignment and you dont have to do it. - Select your primary bank and log in. 1. Start the Wireshark Analyzer. 2. Long in to your bank. 3. Stop the analyzer. You will find many SSL/TLS handshaking traffic. Pick the one that you think contains your banks info. Dont ask me which one to pick. Use the display filter (ssl.handshake) to obtain only SSL/TLS handshaking traffic. For each question, describe where you found the info? Add the screen shots to support your answers.

Page | 332

Answers for Assignment 2Wireshark SSL/TLS handshaking

Q1. What is the session ID of the SSL/TLS handshaking? The session ID is: 65r88d9070d1859dr02789745f8vyy7dt53d1875g6785883.. Q2. What is the server's public key?

Q3A. What are the cipher suites that your browser supports? There are 36 different cipher suites that my browser supports

Page | 333

Q3B. What is the cipher suite that the server selected? Explain what the selected cipher suite means (symmetric, asymic, and hashing)? Metr

Q4. How do you know that your browser is talking with the company (your bank)? I know my browser is talking with the company (my bank) because there packets that demonstrate the handshaking from the client and another one from the server and they have encryption on them. Page | 334

Q5. What is the symmetric session key that the client generated? How was it generated (the used algorithm, how encrypted)? I know where to find it but it is not there and in the screenshot below it shows that how it is generated using algorithm type: algorithmIdentifier (shawithRSEcryption)

algorithmIdentifier (shawithRSEcryption)

Page | 335

Assignment 3Crypto project

TASK 1
Prepare the two English texts. One is prepared by the instructor (War&Peace_Tolstoy.txt). For the other, go to www.nytimes.com and pick any article of your interest. Create a text file of the New York Times article by copy-paste?

Page | 336

- Provide a histogram showing in the graphical form the relative frequency of letters in two

prepared texts?

Page | 337

- Provide a digram and a trigram of the textual listings in two prepared texts. For a digram and

a trigram, go to Analysis \ Tools for Analysis \ N-gram? For Digram (War&Peace):

For Trigram (War&Peace):

Page | 338

For Digram (NYT):

For Trigram (NYT):

Page | 339

- Provide the link of the New York Times article. http://www.nytimes.com/2011/10/29/us/politics/most-presidential-candidates-arenot-the-99-percent.html?ref=us

Task 2
Take a small subset of the two texts (e.g., their first 200 letters) prepared in Task 1 and recompute the frequency distribution of single letters, digrams, and trigrams. Determine how good is the match between frequency distributions for short texts and long texts of the same type. Summarize your observations. For Text1:

Page | 340

Page | 341

For Text2:

Page | 342

Conclusion
The different between the two are the characters which are different, the frequency in % is decreasing little by little from large texts to the small texts and as far as the frequency it decreases significantly and extensivel

Page | 343

TASK 3
Encrypt the War&Peace_Tolstoy.txt file using the following four classical ciphers available in CrypTool: Caesar, Vigenere, and Hill, and Substitution. Compute the frequency distribution of single letters, digrams, and trigrams for the four obtained ciphertexts. What are the characteristic features of the obtained distributions? For Ceaser:

Page | 344

Page | 345

For Vigenere:

Page | 346

Page | 347

For Hill:

Page | 348

Page | 349

For Substitution:

Page | 350

Page | 351

Conclusion:
The characteristic features of the obtained distributions are, Between Ceaser, Vigenere, Substitution, and Hill all the histograms, diagrams, and trigrams they all have different frequencies in %, different frequencies and different characteristics. They are different type of encryption method and that why they are all different.

TASK 4
- Sign the War&Peace_Tolstoy.txt file using MD5 and RSA. - Verify the signature. - Attach the screen shots.

Page | 352

Page | 353

TASK 5
Find three ciphertexts of the same message encrypted using one of the following four classical ciphers available in CrypTool: Caesar, Vigenere, Hill, and Substitution. Do your best to match each ciphertext with a cipher that could have been used to obtain the given ciphertext. For Vigenere, you need to try different key sizes for cracking. If Vigenere is used, list the ley. For Hill, you need to conduct known-plaintext attack. If Hill is used, obtain the key by setting the value of the first alphabet character equal to 1, and list the key. For Substitution, you have to figure out whether the alphabet has one-to-one mapping. All attacks must be documented. Provide the necessary screen shots. Brute-force attacks do not count.

Page | 354

Ciphertext 1 Naan Cniybian'f qenjvat ebbz jnf tenqhnyyl svyyvat. Gur uvturfg Crgrefohet fbpvrgl jnf nffrzoyrq gurer: crbcyr qvssrevat jvqryl va ntr naq punenpgre ohg nyvxr va gur fbpvny pvepyr gb juvpu gurl orybatrq. Cevapr Infvyv'f qnhtugre, gur ornhgvshy Uryrar, pnzr gb gnxr ure sngure gb gur nzonffnqbe'f ragregnvazrag; fur jber n onyy qerff naq ure onqtr nf znvq bs ubabe. Gur lbhgushy yvggyr Cevaprff Obyxbafxnln, xabja nf yn srzzr yn cyhf frqhvfnagr qr Crgrefobhet, jnf nyfb gurer. Fur unq orra zneevrq qhevat gur cerivbhf jvagre, naq orvat certanag qvq abg tb gb nal ynetr tngurevatf, ohg bayl gb fznyy erprcgvbaf. Cevapr Infvyv'f fba, Uvccbylgr, unq pbzr jvgu Zbegrzneg, jubz ur vagebqhprq. Gur Noor Zbevb naq znal bguref unq nyfb pbz Using Vigenere for Ciphertext 1:

Page | 355

Page | 356

Text Ciphertext 2 Prnc Tpzlqzce's fvpaipk gsoo apw gtesyanpn jinpxrg. Vlt liiltwt Riiirufjvg usrmevc les cwhimdpth tjigi: pgsepe fmujetmck wkhtpy kr pke crs ghcvpgtgv qyt cpxoe kr ile usrman gxvcni is wjmrl tjin fensckef. Tgmnei Keskpx'w dcyvltgv, ile dipytkjjp Hgptre, eebi tq xpoe jig javltv tq xwi aofpwschdv's griirvexrmgri; whg adve c fppl fvtws crs let fphgg eh qakh dj hqrdv. Tji nsuvluyl nmixlg Tgmneihw Bqpzsnuopca, mrdan cw ae fgqbi lc tays uisyiuecxe fi Eitgvhfowvv, aau eawo vltve. Ult laf ftin oegvigh syrkrv xhg tgivksjw wkriir, crs fekrv trgkcenv hxh nqx vs tq ecc lcvvi gcxwirkrvw, bwx drla xd wmcpa veeiexiqrh. Trkrri Vcwxpi'u wdr, Hkteslaxt, laf gdqe ymil Mqviimcvi, ahqq wi ipxgsdwgth. Tji Pfbg Qdviq ech mcrn stjigw hch ppsq gdqe. Using Vigenere for Text Ciphertext 2:

Page | 357

Page | 358

Ciphertext 3 Arae Cmvvodae's beujwak eibu jof eeuqkapyu sglhixg. Vuk uogjrmt Renelszuxt ubkvoga jof yfqrgbtex tjele: jripxe xipscecak jwquyu ix nkr unh ctavngggr vuz apvur cn xuk fmpuap puewya gq wvvmh zuky xefovtgd. Fecage Pnwivv'c qqhmhzel, tje vruuzipur Ukyaai, pmze gq gcxw ukr zaxukr no buk nqoifqahoz'f cnxelgcixzenx; sfr qozr u oilh dhrmf ynh ukr vahtg nw zain on uuasr. Nuk lkuzhlur yetvya Pdixpqfq Owygovfincn, oaswb nw yw sczme fa tyqf qexhofynxe xe Jenelszbcea, jof yyoo bukey. Sfe bah omeh zarlvod tuxixg vuk pdepvyhy jwnxel, ard rrcak pdraaenx qyd dob tq gq ary havtg tctjelixtu, ocg qnpy pb azalh eypqpfvyaw. Pdixpq Ikfgye'f qov, Uopbotype, bah paze jwtj Zornrgavg, yuum hr cnxeiqkpqd. Juk Afom Zoecb inh zaac obukem ugq qyob kbue. T Using Hill for Ciphertext 3:

Page | 359

Page | 360

Security Research Paper iPhone Vulnerabilities


Instructions:
Choose an area of information security management, ethics, or privacy that interests you and research it through the electronic media and the library. Discuss the topic with your instructor as soon as possible in the term for counsel and approval. Write about a ten page (or more), 1.5spaced paper on the subject. A bibliography of references must be included. Your goal should be to address a managerially significant issue and to propose an action plan to address it. Examples of interesting topics might be: Security Aspects of Peer-to-Peer Computing (or IM or Cloud Computing), The Impact of Wireless on Corporate (or Home) Networks. Note: The two-third paper should be devoted to the issue, and the rest should be dedicated to an action plan.

Page | 361

Security Research Paper iPhone Vulnerabilities

Prepared by: Bakre Idiazza Michael Hilliard

Page | 362

iPhone Vulnerabilities

The iPhone is an integrated Smartphone and media player as well designed and sold by Apple Inc, and first one was introduced in 2007. iPhone is one of the most powerful Smartphone in the earth due to its capabilities and features that you cannot find in any other Smartphone nowadays. The iPhones primary function is a cellular telephone, but it also includes a music and video player, digital camera, PDA, an Internet communications tools, GPS, Alarm, Games, Video Camera, and just about anything you can think of. To most of the users, the iPhone is much more than just a cellular phone. We can even say it has become a very important piece of technology that every human has to have in their pocket. In fact, according to Apple Inc, the number of phones that have been sold in 2007 was 1,389,000 and this number goes up significantly to 20,034,000 in 2011. But just like any other technologies, security has always been a huge issue. The development of jailbreaking began with the initial iPhone launch when consumers felt the necessity to implement other packages. But they were incapable of it because of the restrictions and locking product Apple implanted in it.

Would you like to use your iPhone with any network service you want and get access to a large amount of applications from third parties? Your iPhone is not supposed to support these third party applications and other network services unless they are from the App Store or an official provider. What we are talking about is the growing problem, jailbreaking. This is the process that allows iPhones to access and unlock all the manufacturers features and removes all the strict limitations set by Apple. According to techsavvydiary.com, Jailbreaking is the process of removing the limitations imposed by Apple on devices running the iOS operating system through use of custom kernels. Such devices include the iPhone, iPod Touch, iPad, and 2nd Gen Apple TV. Jailbreaking allows users to gain root access to the operating system, allowing iOS users to download additional applications, extensions, and themes that are unavailable through the official Apple App Store7.

Page | 363

Before we get into more details about the advantages and disadvantages of jailbreaking an iPhone we come up with list of questions and decide to go to Apple Store website and reach one of the Apples Customer Specialist Geniuses through the live chat in which basically we are going to interview an Apple Expert and try to get as much information as we can about an iPhone, its current security vulnerabilities, and the jailbreaking method. Below is the complete interview we had with an Apple Expert, Nicole S.:

Nicole: Hi, my name is Nicole S. Welcome to Apple! US: Hello. Nicole: How may I help you? US: I'm interested in buying an iPhone 4 , would you tell me about it what i may not know please Nicole: Sure! The iPhone 4 or the iPhone 4S? US: just the iPhone 4 please Nicole: Ok! Nicole: Have you ever had an iPhone before? US: no, i haven't Nicole: Ok, well the iPhone are great I currently have the iPhone 4.You can make short videos, take great pictures. It has the iPod built in so you can have all your music with you all the time. Nicole: What would you be using your iPhone for? Page | 364

US: Im more interested in using it with web searching, look up emails, watching videos, and games Nicole: Ok, it is great for that. It constantly updates your email so you get your messages right away. US: can I use it with other network services like T-Mobile? Nicole: Only it you purchased the unlocked iPhone 4 and we currently dont have those. US: Where can I find them? Nicole: You could call around to local electronics stores. US: How much is the iPhone 4? Nicole: They are on sale right now for only $299 with two years contract US: Now, how about if I buy it from you and jailbreak it? Is it illegal? Nicole: It would void the warranty. Thats all US: Ok and Ill not get in trouble with Apple, Inc or something like that? Nicole: Correct. US: How about as far as the iPhone itself once I jailbreak it what do I should worry about besides the warranty? Nicole: It may make the phone not run properly. US: Really? How Nicole: Because its messing with the settings. UA: How about those free applications are they illegal? Because I heard I can get them for free instead of buying them from App Store? Nicole: Some apps are free in the app store. US: Right but the ones that are not free with apps store Nicole: I'm not sure about those ones. US: May I ask you why jailbreaking is not illegal? Nicole: Jailbreaking no longer legal in order to allow iPhone owners to use their phones with applications that are not available from Apple's store, and to unlock their iPhones for use with unapproved carriers Nicole: If your phone is unlocked it shouldn't affect your iPhone. US: That's all what I want to know thank you so much for your help Nicole!

From the interview we had with Apple Expert, Nicole it seems that we all agree that jailbreaking an iPhone is the only process available to allow owners of used iPhones to break access controls on their phones in order to switch wireless carriers. We also learned from Nicole that jailbreaking is not illegal at all but according to Nicole, jailbreaking voids your warranty. Yes, it may void your warranty with Apple. If you need to take your iPhone in for service and you have a jailbroken device, the only way to get around it is to restore the iPhone. Once you restore it by updating through iTunes, it will go back to the default settings like it had never been jailbroken. As our conclusions from Nicole the jailbreaking the iPhone will not land you in jail, but we still need to be aware that it will void our warranty with the Apple Inc. Page | 365

Jailbreaking an iPhone is done for many reasons. The main reason is the high level of customization. When a phone is jailbroken, you can customize anything from the sliders, to the backgrounds, and the actual icons. Basically anything you could want or imagine could be done to customize the iPhone once it is jailbroken. What makes this even more desirable is the fact that it is 100% free. That is why people are increasingly doing this; it is also free to not be stuck with default features.

Another top reason that people choose to jailbreak their iPhone is to be able to use it with other providers. If its jailbroken, it can be used with any other wireless provider that uses SIM cards. Currently the only available options are Verizon and AT&T. Many customers are not satisfied with their service or the plans they offer and opt to jailbreak it to go with other companies.

Along with jailbreaking your iPhone, it needs to be unlocked for all these previously mentioned reasons to be able to occur. You cannot however just unlock it without jailbreaking it first. It doesnt take a genius to do all this either. You can use Google to find countless instructions and videos on how to do this, however the accuracy and safety of these is not guaranteed. For those not willing to risk it on their own, they can take it to a professional. Just like Nicole advised us, there are professional iPhone repair stores that will jailbreak your iPhone for a minimal fee. We choose to use the resources we have such as cydiahelp.com and Google for our experiment for this assignment and jailbreak it on our own. Attached is the complete document (Page 7 - 16) with all the steps we followed to accomplish our successful experiment of jailbreaking an iPhone. We even created another document (Page19) with slightly different steps for anyone who wants to jailbreak and unlock the iPhone with all the steps needed.

Although there are almost unlimited advantages of jailbreaking an iPhone, for some people its just not worth the trouble because of the disadvantages. A big reason people would not jailbreak their iPhone is it would void the warranty with Apple Inc. If you experience a problem with your iPhone, Apple would deny any technical support for the jailbroke phone. Another reason is that you might end up bricking (rendering your phone unusable and requires Page | 366

a complete wipe and restore to be able to use it again) the phone. It does have that fix for it but would more than be a deterrent to jailbreaking it. Also extended use of data hogging applications (like Facetime over 3G) would slow performance and chew up data plans if you dont have an unlimited data package. By jailbreaking your phone, you are susceptible to bug issues. Then you have to research further for fixes and patches for those bugs. Another big reason is the security concern that comes from using a product not authorized by the manufacturer. Hackers can find flaws with jailbreaking methods and create viruses, Trojans and malware to exploit the flaws. One such issue with a jailbroke iPhone is the iOS PDF viewer. An embedded font within a PDF document can allow the hacker access to your phone. These are just some of the disadvantages to jailbreaking your phone.

Page | 367

Our Goal Remember, our goal here is to jailbreak this iPhone which means we need to install Cydia application on the iPhone and once we have it there that means the iPhone is jailbroken. Step1 This is the screenshot for the page where I downloaded the software (Redsn0w) to jailbreak my iPhone The link is and the screenshot are below: http://osxdaily.com/2010/11/28/jailbreak-and-unlock-ios-4-2-1-with-redsn0w-0-9-6b5/

Now it is installed

Page | 368

Step2 I Download the IPSW File for the version of my iPhone (A file IPSW is nothing more than one file firmware (microsoftware) for the iPhone that I will need to complete the jailbreak process) in my case I have 4.0.1 version. Below are the screenshot and the link for the website: http://osxdaily.com/2010/10/25/download-iphone-firmware-ipsw/

Now it is installed

Page | 369

Step3 After I have downloaded redsn0w and the IPSW file, I launched the redsn0w 0.9.6b5 (As a Windows users I must run redsn0w as Administrator) Click on Browse Select the IPSW file I downloaded that corresponds to my iOS device Then I got this window below:

Step 4 I clicked next and then I see the picture below:

Page | 370

Step5 For Jailbreak: I selected that I want to install Cydia (this works with iPhone 3G and iPhone 3GS as well)

Step6 Once I clicked next from step 4 it takes me to this window below where it tells me to make sure my iPhone is turned off and it is plugged in to my computer

Page | 371

Step 7 I followed the instructions below in which we Held down the Power (corner) button for few seconds Then Without releasing the Power button, also held down the Home (bottom center) button for 10 seconds. Then without releasing the Home button, we released the Power button but kept holding the Home button for 15 seconds. Then it took us to the next picture - step 8

Step 8 In this step as we can see it tells me that the process takes place on my iPhone

Page | 372

Step 9 From now on, everything else we do will be directly from my iPhone. Below are the pictures we took of all the processing of the iPhone that performs before it is completely jailbreaking

Next

Page | 373

Next

Next

Page | 374

Next

Next

Page | 375

Next

Result As result in the next 3 pictures below show that the iPhone is now officially jailbroken, the iPhone as you can see has now the Cydia application.

Page | 376

Conclusion
We have looked at how some of the reasons an iPhone owner would and would not want to jailbreak their iPhone. Increased capabilities that are not allowed with a standard phone are the main reasons a person will voluntarily jailbreak his phone. Biggest drawback or a hindrance a person comes up with is that it will void the warranty that comes with your iPhone. That is too big a trade off for some individuals to take. We also talked to an Apple employee about jailbreaking the iPhone from Apples point of view. Lastly, we went through the steps to jailbreak and iPhone and created a set of instructions for an individual on how to jailbreak his/her iPhone.

Page | 377

Jailbreak and Unlock an iPhone 4.0.1


Jailbreak iPhone 3GS iOS 4.0, 4.0.1 With Jailbreakme.com : Finally wait is over and jailbreak for iPhone 3GS and iPhone 3G iOS 4.0 and 4.0.1 is available in the wild and needless to mention this is the easiest procedure to jailbreak. All you need to go to jailbreakme.com on your iPhone and slide to jailbreak. Needless to say that jailbreakme uses an exploit easily solved by Apple with a firmware release very soon, so its better to save your SHSH so you can stay on OS 4.0.1 as long as you want. Following are instructions on how to jailbreak your iPhone using the Jailbreakme right on your iPhone:
Browse to www.jailbreakme.com through our device and wait for the complete page load. Once your page loads swipe your finger across "Slide to jailbreak", very similar to "Slide to unlock" what we perform daily by LockScreen to access the springboard of our device. Now wait and watch while your device will begin to download the data necessary to execute the jailbreak procedure. Once the download is complete, the words come out "Jailbreaking Sit Tight. Wait a few seconds while installation finishes and a new popup will warn that cydia icon is added on the springboard.

Thats it now enjoy your jailbroken iPhone! Now your iPhone is jailbroken and here is what to do to unlock it: Please remember that your iPhone needs to be jailbroken so you can be able to unlock it. Open cydia on your iPhone. Than manage. Than sources. Go to edit. Tab on add Then type in: http://repo666.ultrasn0w.com Add Source (wait to verifying URL, Wait to updating Sources) When its complete tab on return to cydia then tab on done Tab on repo666.ultrasn0w.com Tab on ultrasn0w Tab on install then tab on confirm Wait until it downloads the stuff and install it Then reboot device. Wait until your phone finally reboot Now your iPhone should work for any Sim cards If you have any trouble following my instructions please open this link and follow this video as it will guide you through all the steps of how to unlock it. http://www.youtube.com/watch?v=4HQBFewl7O8

Thank you and Good luck!

Page | 378

Work cited
1. "Jailbreak IOS 5 IPhone 4, 3GS, IPad, IPod Touch (HOW TO)." Weblog post. Http://cydiahelp.com. Ahmed Omar, 12 Oct. 2011. Web. 2 Dec. 2011. <http://cydiahelp.com/jailbreak-ios-5-iphone-4-3gs-ipad-2-1-ipod-touch-how-to/>. 2. "Re: Techsavvydiary." Weblog comment. Techsavvydiary.com. Zahid Nawaz, 11 Nov. 2011. Web. 1 Dec. 2011. <http://www.techsavvydiary.com/>. 3. " Jailbreak and unlock iOS 4.2.1 with redsn0w 0.9.6b5." Weblog post. Http://osxdaily.com. OS X Daily, 28 Nov. 2010. Web. 1 Dec. 2011. <http://osxdaily.com/2010/11/28/jailbreak-and-unlock-ios-4-2-1-with-redsn0w-0-96b5/>.

4. " Jailbreak and unlock iOS 4.2.1 with redsn0w 0.9.6b5." Weblog post. Http://osxdaily.com. OS X Daily, 28 Nov. 2010. Web. 1 Dec. 2011. <http://osxdaily.com/2010/11/28/jailbreak-and-unlock-ios-4-2-1-with-redsn0w-0-96b5/>. 5. "Download IPhone Firmware / IPSW Files." Weblog post. Http://osxdaily.com. OS X Daily, 25 Oct. 2010. Web. 1 Dec. 2011. <http://osxdaily.com/2010/10/25/downloadiphone-firmware-ipsw/>. 6. S, Nicole. Interview. Apple Chat Live. Apple.com. Apple. Web. 1 Dec. 2011. <http://store.apple.com/us/browse/home/shop_iphone/family/iphone> 7. "What is JailBreking." TechSavvy Diary. N.p., Oct 26,2011. Web. 1 Dec 2011. <http://www.techsavvydiary.com/what-is-jailbreking/>. 8. "The Best Jailbreak & Unlock iPhone Software." How To Jailbreak An iPhone.net. N.p., 23 Jul, 2011. Web. 1 Dec 2011. <http://www.howtojailbreakaniphone.net/>.

Page | 379

Summary of work projects as Security/IT Systems in my current Intern

Im willing to discuss this! But per security porpuses I can not post my former/current employers information in here..

Page | 380

Section VI: Skill Set Sheet


In this section you will see an expanded list of technical skills identified from my Rsum. I have assessed my proficiency in each skill and identified the times when the skill was used. Descriptions of each section of the skill sheet are below. Programming Languages Various logic-based programming languages I have been exposed to. Application Software Various computer applications I have experience in. Database Administration Database applications I have used, and concepts I have learned. Operating Systems Various computer interfaces I have experience in. Technical Writing A list of skills in critical thinking and professional in business writing Networking/Security Networking Information Security I have experience in.

Page | 381

Bakre Idiazza
2508 Cross Hill Court Apt O-30, Louisville, KY 40206 - Cell: (859) 221-0133 bakre@bakreidiazza.com Technical Skill Sheet

Databases
Skill
Microsoft SQL Server (2005, 2008 R2) Microsoft Access Star Schema Design Database Design Cursors Stored Procedures Triggers T-SQL

Self Assessment
Intermediate Advanced Novice Intermediate Novice Novice Novice Intermediate

Timeframe/Project
2009-Present, Personal Projects, School Projects, Work Projects 2009-Present, School Projects, Work Projects 2011-Present, School Projects 2011-Present, Personal Projects, School Projects 2010-Present, Personal Projects, School Projects 2010-Present, Personal Projects, School Projects, Work Projects 2010-Present, Personal Projects, School Projects, Work Projects 2009-Present, Personal Projects, School Projects, Work Projects

Programming Languages
Skill
C#.Net VB.Net SQL Windows PowerShell PHP, XML, CSS, HTML

Self Assessment
Novice Novice Intermediate Novice Novice

Timeframe/Project
2010-Present, Personal Projects, School Projects 2011-Present, School Projects, Work Projects 2009-Present, Personal Projects, School Projects, Work Projects 2011-Present, Personal Projects, School Projects, Work Projects 2011-Present, Personal Projects, School Projects

Page | 382

Technical Writing
Skill
Sequence, Class, Entity Relationship Diagrams Uses Case Descriptions Data Dictionary Development Feasibility Analysis Vision Document Gantt Chart, Matrix Process and Activity Modeling Strategic Assessments Business Case Writing

Self Assessment
Intermediate Intermediate Intermediate Intermediate Intermediate Intermediate Intermediate Intermediate Intermediate

Timeframe/Project
2010-Present, Personal Projects, School Projects, Work Projects 2010-Present, School Projects, Work Projects 2010-Present, School Projects, Work Projects 2010-Present, School Projects, Work Projects 2010-Present, Personal Projects, School Projects, Work Projects 2010-Present, Personal Projects, School Projects, Work Projects 2010-Present, School Projects, Work Projects 2011-Present, Personal Projects, School Projects, Work Projects 2010-Present, Personal Projects, School Projects, Work Projects

Networking/Security
Skill
Qradar Security Intelligence IBM Tivoli Directory Integrator (ITDI) IBM Tivoli Identity Manager (ITIM) IBM Tivoli Access Manager (ITAM) McAfee, Symantec ProDiscover Forensics GFI LANguard CrypTool Wireshark SSH-Putty Ethernet, TCP/IP, VPN

Self Assessment
Novice Intermediate Intermediate Intermediate Intermediate Novice Novice Novice Novice Intermediate Novice

Timeframe/Project
2011-Present, Work projects 2011-Present, Work Projects 2011-Present, Work projects 2010-Present, Work Projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, School projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2010-Present, School Projects 2011-Present, School Projects & Work 2011-Present, Persoanl Projects, School Projects, Work Projects

Page | 383

Operating Systems
Skill
Microsoft Windows(3.11,4.0,95,98,2000,X P,7) Windows Server 2003, 2005, 2008 R2 Linux Unix Apple Macintosh(8,9,X,Snow Leopard) IBM Mainframe

Self Assessment
Intermediate

Timeframe/Project
2006-Present, Persoanl Projects, School Projects, Work Projects 2009-Present, Persoanl Projects, School Projects, Work Projects 2010-Present, Persoanl Projects, School Projects, Work Projects 2009-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, School Projects, Work Projects

Intermediate Novice Intermediate Intermediate Novice

Application Software
Skill
Microsoft Office Suite MS Visio MS Visual Studio Microsoft SQL Server MySQL, Apache, PHPMyAdmin Adobe Photoshop/Dreamweaver

Self Assessment
Advanced Advanced Intermediate Intermediate Novice Novice

Timeframe/Project
2004-Present, Persoanl Projects, School Projects, Work Projects 2010-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, Persoanl Projects, School Projects, Work Projects 2011-Present, Persoanl Projects, School Projects 2010-Present, School Projects, Personal Projects

Page | 384

Section VII: Honors and Achievements


Throughout my years earning my Bachelor's Degree in Computer Information Systems, I have achieved many awards and honors. I have been named to the Dean's list for maintaining a GPA over 3.25. Many teachers have given me letters of recommendation. With my achievements, I have been able to also be the proud recipient of a scholarship. In addition to these achievements directly related to school, I have many accomplishments outside of school. As a server I have received many compliments in my time at Olive Garden. My great customer service skills are obvious through numerous online, handwritten, and verbal compliments I received. I have also achieved Top Seller and Power Seller awards through eBay. In order to achieve (and keep) these honors on eBay, one must maintain a very high level of customer satisfaction with all of the transactions.

Page | 385

Potrebbero piacerti anche