Project 1 – System Scan Report

Hide Assignment InformationTurnitin®Turnitin® enabledThis assignment will be submitted to Turnitin®.Instructions

This week, you will submit your first project, the System Scan Report. Your report should include the following:

  • Introduction
  • Target System
  • Zenmap Scan
  • OpenVAS Scan
  • Open Socket Connection
  • Recommendations
  • References

If you haven’t already done so last week:

How Will My Work Be Evaluated?

1.2.1: Identify the target audience, the context, and the goal of the communication.

  • Provide a brief introduction explaining the services performed and a summary at the end with the important findings of the scan. Validate your recommendations using industry standard techniques. Include at least two to three references in IEEE format.

1.4.2: Use vocabulary appropriate for the discipline, genre, and intended audience.

  • Make sure the report to the client contains grammatically correct language without any spelling or typographical errors. Explain industry acronyms when they are introduced since they may be unfamiliar to the client.

10.1.2: Gather project requirements to meet stakeholder needs.

  • The client has asked for a Zenmap scan, an OpenVAS vulnerability scan, and to use other accepted industry practices for the systems scan. You will need to include screenshots and note the application versions that are listed and displayed in the scan results.

12.2.1: Identify systems for the risk assessment.

  • During any scan report, it is critical that you list the IP address of the system you are using to connect to the client’s corporate network (for auditing purposes) as well as the IP address of the system(s) that you are scanning. Discuss the scope of engagement and the limitations of your actions to stay within the parameters of the test.

12.2.2: Perform a risk analysis.

  • Explain to the client the security issues that are present on the Linux system. Discuss critical vulnerabilities that need to be addressed and the measures that may need to be taken to deal with the underlying security issues (additional staff, equipment, billable hours, etc.).

13.1.1: Create documentation appropriate to the stakeholder.

  • In this section, recommend that you and your contractors perform a full penetration test on the target system. Mention the implications (ransomware, exfiltration, credential harvesting, etc.) that might occur if the security issues are not addressed.

When you are finished, click “add a file” to upload your work, and then click the Submit button.

Hide Rubrics

Rubric Name: Project 1 – System Scan Report

This table lists criteria and criteria group name in the first column. The first row lists level names and includes scores if the rubric uses a numeric scoring method.CriteriaExceeds Performance RequirementsMeets Performance RequirementsApproaches Performance RequirementsDoes Not Meet Performance RequirementsCriterion Score1.2.1: Identify the target audience, the context, and the goal of the communication.10 points

Identifies the target audience, context, and goal of the communication in a clear and appropriate manner.

8.5 points

Identifies the target audience, the context, and the goal of the communication.

7.5 points

Attempts to Identify the target audience, the context, and the goal of the communication, but there are issues with accuracy or appropriateness.

0 points

Does not identify the target audience, the context, and the goal of the communication.

/ 101.4.2: Use vocabulary appropriate for the discipline, genre, and intended audience.10 points

Uses enhanced vocabulary highly appropriate for the discipline, genre, and intended audience.

8.5 points

Uses vocabulary appropriate for the discipline, genre, and intended audience.

7.5 points

Attempts to use vocabulary for the discipline, genre, and intended audience, but there are lapses and gaps.

0 points

Uses inappropriate vocabulary for the discipline, genre, and intended audience.

/ 1010.1.2: Gather project requirements to meet stakeholder needs.20 points

Identifies IT project requirements in a thorough and clear manner to meet all stated stakeholder needs.

17 points

Identifies IT project requirements to meet stated stakeholder needs.

15 points

Attempts to identify project requirements to meet stakeholder needs, but there are gaps and/or lack of clarity.

0 points

Does not identify IT project requirements to meet stated stakeholder needs.

/ 2012.2.1: Identify systems for the risk assessment20 points

Clearly identifies the most critical vulnerabilities with the system and accurately describes the security issues that need to be addressed.

17 points

Identifies most of the vulnerabilities with the system and describes most of the security issues that need to be addressed.

15 points

Identifies some of the vulnerabilities with the system and describes some of the security issues that need to be addressed.

0 points

Does not address the vulnerabilities with the system and does not describe the security issues that need to be addressed.

/ 2012.2.2: Perform a risk analysis.20 points

Performs a thorough risk analysis and clearly identifies the impact and threat of the vulnerability.

17 points

Performs a risk analysis anidentifies the impact and threat of the vulnerability.

15 points

Performs a risk analysis but does not discuss the impact and / or threat.

0 points

Does not perform a risk analysis.

/ 2013.1.1: Create documentation appropriate to the stakeholder.20 points

Creates thorough and accurate IT documentation that exceeds requirements.

17 points

Creates IT documentation that meets requirements.

15 points

Creates IT documentation that lacks detail and/or does not fully meet requirements.

0 points

Does not create appropriate IT documentation.

/ 20Rubric Total ScoreTotal/ 100

Overall Score

Overall Score

Exceeds Performance Requirements90 points minimum

Meets Performance Requirements80 points minimum

Approaches Performance Requirements70 points minimum

Does Not Meet Performance Requirements0 points minimum

Associated Learning ObjectivesLearning Objective1.2.1: Identify the target audience, the context, and the goal of the communication.Assessment Method:  Score on Criteria – 1.2.1: Identify the target audience, the context, and the goal of the communication.Required Performance:  Meets Performance RequirementsLearning Objective1.4.2: Use vocabulary appropriate for the discipline, genre, and intended audience.Assessment Method:  Score on Criteria – 1.4.2: Use vocabulary appropriate for the discipline, genre, and intended audience.Required Performance:  Meets Performance RequirementsLearning Objective10.1.2: Gather project requirements to meet stakeholder needs.Assessment Method:  Score on Criteria – 10.1.2: Gather project requirements to meet stakeholder needs.Required Performance:  Meets Performance RequirementsLearning Objective12.2.1: Identify systems for the risk assessment.Assessment Method:  Score on Criteria – 12.2.1: Identify systems for the risk assessmentRequired Performance:  Meets Performance RequirementsLearning Objective12.2.2: Perform a risk analysis.Assessment Method:  Score on Criteria – 12.2.2: Perform a risk analysis.Required Performance:  Meets Performance RequirementsLearning Objective13.1.1: Create documentation appropriate to the stakeholder.Assessment Method:  Score on Criteria – 13.1.1: Create documentation appropriate to the stakeholder.Required Performance:  Meets Performance Requiremen

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

CIS242 Homework

  • Write the code for each lab assignment.
  • Submit the lab in a single zip file in the online course shell. The lab must contain all .cpp files, along with any additional files that may be necessary for your project to run (ex: text files).
  • Enter any and all written answers into the online course shell along with the submission of the attached lab assignment.

Please submit each lab assignment with only two files for grading.

.cpp file of your C++ program design (source code)

.docx file of its program’s successful execution output in Word format.

 

Each lab assignment will be graded based on the following:

1. The program must compile, execute, produce correct results, and meet all of the specifications in the weekly lab.

Additionally you must:

2. Organize the code for user readability.

3. Organize the code for reusability.

4. Provide documentation with embedded comments for reader understanding.

5. Organize the code for efficiency.

 

Homework 1: 

 

During each summer, John and Jessica grow vegetables in their backyard and buy seeds and fertilizer from a local nursery. The nursery carries different types of vegetable fertilizers in various bag sizes. When buying a particular fertilizer, they want to know the price of the fertilizer per pound and the cost of fertilizing per square foot. The following program prompts the user to enter the size of the fertilizer bag, in pounds, the cost of the bag, and the area, in square feet, that can be covered by the bag. The program should output the desired result. However, the program contains logic errors.

 

Find and correct the logic errors so that the program works properly.

 

//Logic errors.

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double cost;

double area;

 

double bagSize;

cout << fixed << showpoint << setprecision(2);

cout << “Enter the amount of fertilizer, in pounds, ”

<< “in one bag: “;

cin >> bagSize;

cout << endl;

 

cout << “Enter the cost of the ” << bagSize

<< ” pound fertilizer bag: “;

cin >> cost;

cout << endl;

 

cout << “Enter the area, in square feet, that can be “

<< “fertilized by ne bag: “;

cin >> area;

cout << endl;

 

cout << “The cost of the fertilizer per pound is: $”

<< bagSize / cost << endl;

cout << “The cost of fertilizing per square foot is: $”

<< area / cost << endl;

 

Return 0;

 

}

 

Homework 2:

 

Linda is starting a new cosmetic and clothing business and would like to make a net profit of approximately 10% after paying all the expenses, which include merchandise cost, store rent, employees’ salary, and electricity cost for the store. She would like to know how much the merchandise should be marked up so that after paying all the expenses at the end of the year she gets approximately 10% net profit on the merchandise cost. Note that after marking up the price of an item she would like to put the item on 15% sale. Write a program that prompts Linda to enter the total cost of the merchandise, the salary of the employees (including her own salary), the yearly rent, and the estimated electricity cost. The program then outputs how much the merchandise should be marked up so that Linda gets the desired profit.

 

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

WEB-BASED CASE STUDY, BBC DIGITAL MEDIA INITIATIVE REVISITED.

WEB-BASED CASE

BBC Digital Media Initiative Revisited 

The National Audit Office (NAO) scrutinizes public spending in the United Kingdom. Its memorandum on the BBC’s DMI project reported on several key findings. First, the in-house team was severely challenged by the fact that the project was already 18 months behind schedule when they began work on the project. Second, the technology team issued releases throughout the project that did not meet end-user expectations and eroded confidence in the project. Third, the BBC focused more on the technological development rather than on encouraging organization-wide changes in workflow that would encourage adoption. Finally, the NAO concluded, the DMI lacked governance arrangements for the scale, risk, and complexity of the project.

Do research online to identify the capabilities of digital asset management software. What are the top rated digital asset management software products? Who uses this software?

Given the NAO’s findings and what you discover about available off-the-shelf products, would it have been wiser for the BBC to adopt a collection of these existing products?

 What actions would be necessary to gain the cooperation of the business units to incorporate this collection of products into their work processes? 

Answer all the questions 1000 words.NO PLAYGIRIZUM. PLAGIARISM REPORT NEEDED.SUBMIT IN TIME.

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

Windows ProDiscover Forensics Lab

Advanced Computer Forensics

Windows ProDiscover Forensics Lab

This lab is a replacement for the EnCase lab (122) for students who have been unable to access EnCase through RLES. In order to do this lab, you will need to download and install ProDiscover Basic (make sure to pick 32-bit or 64-bit depending on your version of Windows) from this URL: http://www.techpathways.com/desktopdefault.aspx?tabindex=8&tabid=14 (scroll down until you see the download links at the bottom of the page). You will also need to download a copy of the image files for this lab, 123img.zip. These image files are distributed under the GPL and were originally created by Brian Carrier.

Instructions appear as bullet points, questions are numbered and bolded.

Instructions & Questions

  • Start ProDiscover Basic.
  • Create a new project for this laboratory. Give it a unique number and name.
  • Click “Add” then “Image File” and add “123img1.dd”.
  • Click the “Action” menu then generate “OS Info”. This adds some information about the image to the report, which you can view at any time during your examination by clicking on “View” then “Report”.
  1. What is the file system of this image file?
  2. What is the volume name?
  • Go to “Cluster View” and click on the image.
  1. How many clusters are used on this image file?
  • Go to “Content View” and click on the image.
  1. List all the Deleted files recovered by ProDiscover in a table – and calculate the MD5 hash value for each deleted file.
  2. Is there anything special about any of the files?
  • ProDiscover will use the time zone setting of your examiner workstation if no time zone is set for the evidence. When you acquire a computer as evidence it is important to make note of the computer’s time and time zone, especially if you need to correlate evidence from different time zones (never assume the time or time zone on a computer is correct.)
  1. Where does the Time Zone information reside in a Windows system?
  • Set the timezone by clicking on File, then Preferences. The timezone should be US Central Time in this particular case (the image file has been extracted from a computer in that timezone although it is not an image of the system partition so there is no way to find the computer’s actual timezone from the image itself).
  1. What is the latest file creation time on the image?
  2. Which files are resident files? Hint: you can right-click on a file and say “Show Cluster Numbers” to see the cluster/s in which the file is stored – you can do this for the $MFT of the disk image to see which clusters are allocated to the $MFT.
  • Add the second image to the case – “123img2.dd”
  • Go to the “Content View” and click “All Files”.
  • Go to the “View” menu and select “Gallery View”.
  1. Which files display a thumbnail in Gallery View?
  2. Are there any files with mismatching file extensions? If so, which ones? Identify their types according to their extension versus their actual type and explain how you have identified the actual type.
  • Disable Gallery View.
  • Extract all JPEG files from the image by selecting each of them. You will be prompted to add a comment about the file for the report. Record “JPEG file” and whether the file has been hidden, deleted, mislabelled or is in any other way special.
  • Right-click on a file and click “Copy All Selected Files”. Save them in a temporary directory on your computer.
  1. Paste each JPEG file from your temporary directory into your submission document as an embedded image.
  2. Do you think you have identified every JPEG file in the image? Hint: You can search for the JPEG file header by clicking on “Search”, selecting “Hex” and searching for the pattern FFD8. Do any files contain the pattern which do not appear in your temporary directory? If so, which ones?
  3. Create a table for all files on the second image, listing each file’s name and MD5 hash value.

 

Your answers to all questions should be stored in a LibreOffice document, Word document or PDF, and uploaded to Dropbox in the “EnCase Lab” folder as this exercise replaces the EnCase lab.

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

Ch7 Mini-Case III: EUREKA Discussion (7.2; 7.3, 7.4) 200 Words And 100 Words Respond

please i need this in 6 hours

Chapter 7 Wired and Wireless LAN

Purpose

To provide you the opportunity to research and illustrate the best practice recommendations for LAN design.

Directions

  1. Read the following scenario and answer the questions that follow in the discussion board area of class. Provide a thoughtful and informative response to the questions; you should be able to support your recommendations. Be sure to support your ideas with evidence gathered from reading the text or other outside sources. Be sure to give credit to the sources where you find evidence. Use an attribution like “According to the text,” or “According to Computer Weekly website” in your response. Your response should be a minimum of 200 words.
  2. Respond to at least one of your classmates’ posting. Your response should at a minimum of 100 words. A response like “I agree” or “Yes, you are correct” does not contribute to a robust discussion. Explain why you agree or disagree; share our own personal experience or knowledge gained from your readings.
  3. Submit this assignment in the Discussion Board. 

Scenario
Eureka is a telephone and Internet-based concierge services that specializes in obtaining things that are hard to find (e.g. Super Bowl tickets, first  edition books from the 1500s, Faberge eggs). It currently employs 60 staff members who collectively provide 24-hour coverage (over three shifts). They answer the phones and respond to requests entered on the Eureka! Web site. Much of their work is spent on the phone and on computers searching on the Internet. The company has just leased a new office building and is about to wire it. They have bids from different companies to install

(1) 100-Base T network

(2) Wi-Fi network What would you recommend? Why? In your proposal, include a diagram of our wired or wireless network.

Grading

This assignment is worth 50 points. I will grade your responses based on accuracy and completeness. Your initial posting should be at least 200 words and your response to at least one classmate should be at least 100 words.

i have attached a picture and its the post you will be responding too with 100 words or you can see below to respond.

In the situation of the Mini-case III, the telephone and Internet-based concierge services named Eureka, needs to wire a new office. The company has the choice between a 100Base-T network and a Wi-Fi network. According to me, I would recommend the company to install a 100Base-T network. During this study, I will explain my choice.

First of all, my choice of this type of network is related to two main reasons. The first reason is the connection speed. According to the book in Chapter 7 p.188, the 100Base-T network supports data transfer rates up to 100 Mbps. According to Webopedia website, the 100Base-T network is 10 times faster than Ethernet and often referred to as “Fast Ethernet”. It’s important to mention that because Eureka is an internet-based company which employs 60 staff members who work a lot. The employees will need a fast connection to perform their work. However, it could be challenging to use a Wi-Fi network. Even though the wireless network is faster than the wired network, the 100Base-T network will be a better choice in this case because the Wi-Fi network would be overloaded due to the amount of work in the company.

Secondly, apart from the connection speed, I chose the 100Base-T network instead of the Wi-Fi network, because of security. We all know that security is very important for telephone and internet-based companies since they have customers’ personal information on file. If Eureka installs a wired network, all personal data will be stored and only the workers will have access to that. However, the Wi-Fi network is less secured. According to Lifewire website, signals from most wireless local area networks pass through exterior walls and into nearby streets or parking lots. In the Eureka situation, insecurity of the connection will be a constraint for the company.

Definitely, installing a 100Base-T network instead of a Wi-Fi network will be advantageous for Eureka. Every employee will be reassured to do his job safely and efficiently. The company will not receive complaints from customers because workers will do their work on time.

 

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

CSIS 330 Quiz 7 Liberty University

IMPORTANT: AFTER PURCHASE, LOG IN TO YOUR ACCOUNT AND SCROLL DOWN BELOW THIS PAGE TO DOWNLOAD FILES WITH ANSWERS.

  1. Traffic cannot be forwarded between subnets without the use of a router.
  2. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network.  You know that the subnet mask will be 255.255.255.252. Therefore, what is the new slash prefix of the network address?
  3. You need to subnet a network that has 5 subnets, each with at least 16 hosts.  Which subnet mask would you use?
  4. The IP address 198.10.132.67 /26 is a network address.
  5. A new department has been established with 511 hosts that require addresses.  Currently, the company uses the 10.20.0.0/16 address space.  How many bits must the network administrator borrow to provide addresses for this subnet without wasting addresses?
  6. In subnetting, borrowing bits from the host portion of the address results in more host addresses that can be assigned but fewer subnets that can be defined.
  7. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network. You know that you need at least 6 subnets.   How many hosts per subnet will be possible in the new design?
  8. To determine whether traffic on a network is local or remote, a router uses a ______________________.
  9. Within a network, there are two addresses that cannot be assigned to devices.  These addresses are  the __________________.
  10. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network. You know that you need at least 6 subnets.  What will be the address of your first usable host in your first subnet (i.e. subnet[0])?
  11. Which of the following subnet masks is used to represent a prefix mask of / 26
  12. Using an IPv4 network address of 192.168.2.0/26, what is the last usable host address in the second subnet (i.e. subnet[1])?
  13. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network.  You know that the subnet mask will be 255.255.255.252. What is the last usable host address of the first subnet (i.e. subnet[0])?
  14. What is the first step in planning network subnets?
  15. In creating subnets for IPv6, conversion to binary is not required.
  16. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network. You know that you need at least 6 subnets.  How many bits will you need to borrow to achieve this?
  17. How many hosts per network can you have with a subnet mask of 255.255.192.0?
  18. You have an interface on a router with the IP address of 192.168.192.10 /29.  What is the broadcast address the hosts will use on this LAN?
  19. How many valid host addresses are created when 4 host bits are borrowed from the 10.20.20.0/24 network?
  20. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network.  You know that the subnet mask will be 255.255.255.252. What is the broadcast address of the first subnet (i.e. subnet[0])?
  21. What is the maximum number of IP addresses that can be assigned to hosts on a local subnet that uses the 255.255.255.224 subnet mask?
  22. How many usable hosts per sub-network will you have using a /17 address?
  23. Which one of the following is a private IP address?
  24. You are given an IPv4 network address of 192.168.10.0/24 by your ISP.  You need to subnet this network. You know that you need at least 6 subnets.  What will be the subnet mask in the new design?
  25. A ____________________ is necessary for devices on different networks to communicate.

BUY MORE MATERIALS FOR THIS COURSE:

CSIS 330 Quiz 1 Liberty University

CSIS 330 Quiz 2 Liberty University

CSIS 330 Quiz 3 Liberty University

CSIS 330 Quiz 4 Liberty University

CSIS 330 Quiz 5 Liberty University

CSIS 330 Quiz 6 Liberty University

CSIS 330 Quiz 7 Liberty University

CSIS 330 Final Exam

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

C++ Dictionaries And Hashing

Source/Assg13/assg-13.cpp

Source/Assg13/assg-13.cpp

/**
*
*
*  @description  Assignment 13 Dictionaries and Hash table
*   implementations.
*/
#include   < cassert >
#include   < iostream >
#include   "KeyValuePair.hpp"
#include   "Employee.hpp"
#include   "HashDictionary.hpp"

using   namespace  std ;

/** main
* The main entry point for this program.  Execution of this program
* will begin with this main function.
*
*  @param  argc The command line argument count which is the number of
*     command line arguments provided by user when they started
*     the program.
*  @param  argv The command line arguments, an array of character
*     arrays.
*
*  @returns  An int value indicating program exit status.  Usually 0
*     is returned to indicate normal exit and a non-zero value
*     is returned to indicate an error condition.
*/
int  main ( int  argc ,   char **  argv )
{
// -----------------------------------------------------------------------
cout  <<   "----- testing Employee record and KeyValuePair class  -----------"   <<  endl ;
KeyValuePair < int ,  string >  pair ( 42 ,   "blue" );
cout  <<   "test key: "   <<  pair . key ()   <<  endl ;
assert ( pair . key ()   ==   42 );
cout  <<   "test value: "   <<  pair . value ()   <<  endl ;
assert ( pair . value ()   ==   "blue" );

int  id  =   3 ;
Employee  e ( id ,   "Derek Harter" ,   "1234 Main Street, Commerce TX" ,   12345.67 );
cout  <<  e  <<  endl ;
assert ( e . getId ()   ==   3 );
assert ( e . getName ()   ==   "Derek Harter" );
cout  <<  endl ;

// -----------------------------------------------------------------------
cout  <<   "-------------- testing quadratic probing  -----------------------"   <<  endl ;
const   int  TABLE_SIZE  =   7 ;
HashDictionary < int ,   Employee >  dict ( TABLE_SIZE ,  EMPTY_EMPLOYEE_ID );

cout  <<   "Newly created hash dictionary should be empty, size: "   <<  dict . size ()   <<  endl ;
assert ( dict . size ()   ==   0 );

int  probeIndex  =   0 ;
//cout << "probe index: " << probeIndex
//     << " returned probe value: " << dict.probe(id, probeIndex)
//     << endl;
//assert(dict.probe(id, probeIndex) == 2);

probeIndex  =   1 ;
//cout << "probe index: " << probeIndex
//     << " returned probe value: " << dict.probe(id, probeIndex)
//     << endl;
//assert(dict.probe(id, probeIndex) == 5);

probeIndex  =   5 ;
//cout << "probe index: " << probeIndex
//     << " returned probe value: " << dict.probe(id, probeIndex)
//     << endl;
//assert(dict.probe(id, probeIndex) == 37);
cout  <<  endl ;

// -----------------------------------------------------------------------
cout  <<   "-------------- testing mid-square hashing  ----------------------"   <<  endl ;
// the following asserts will only work for 32 bit ints, leave asserts
// commented out if you have 64 bit asserts
cout  <<   "Assuming 32 bit (4 byte) ints for these tests: "   <<   sizeof ( int )   <<  endl ;
assert ( sizeof ( int )   ==   4 );

//id = 3918;
//cout << "hash key: " << id
//     << " returned hash value: " << dict.hash(id)
//     << endl;
//assert(dict.hash(id) == 1);

//id = 48517;
//cout << "hash key: " << id
//     << " returned hash value: " << dict.hash(id)
//     << endl;
//assert(dict.hash(id) == 6);

//id = 913478;
//cout << "hash key: " << id
//     << " returned hash value: " << dict.hash(id)
//     << endl;
//assert(dict.hash(id) == 5);

//id = 8372915;
//cout << "hash key: " << id
//     << " returned hash value: " << dict.hash(id)
//     << endl;
//assert(dict.hash(id) == 4);

// test that the distribution of the hash values
// over the possible slots/buckets looks relatively
// evenly distributed
int  counts [ TABLE_SIZE ]   =   { 0 };
//for (id = 0; id < 1000000; id++)
//{
//  int hash = dict.hash(id);
//  counts[hash]++;
//}

// display results
int  sum  =   0 ;
for   ( int  slot  =   0 ;  slot  <  TABLE_SIZE ;  slot ++ )
{
cout  <<   "counts for slot["   <<  slot  <<   "] = "
<<  counts [ slot ]   <<  endl ;
sum  =  sum  +  counts [ slot ];
}
// spot check results
//assert(sum == 1000000);
//assert(counts[0] == 143055);
//assert(counts[6] == 142520);
cout  <<  endl ;

// -----------------------------------------------------------------------
cout  <<   "-------------- testing dictionary insertion  --------------------"   <<  endl ;
id  =   438901234 ;
//dict.insert(id, Employee(id, "Derek Harter", "123 Main St. Commerce TX", 58.23));
id  =   192834192 ;
//dict.insert(id, Employee(id, "Alice White", "384 Bois'darc. Campbell TX", 45.45));
id  =   998439281 ;
//dict.insert(id, Employee(id, "Bob Green", "92 Washington Apt. 5 Greenville TX", 16.00));
id  =   362817371 ;
//dict.insert(id, Employee(id, "Carol Black", "8913 FM 24 Cooper TX", 28.50));
cout  <<   "After inserting "   <<  dict . size ()   <<   " employees:"   <<  endl ;
cout  <<  dict  <<  endl ;

// spot check that hash table entries were correctly performed
//assert(dict.size() == 4);
//assert(dict[3].key() == 192834192);
//assert(dict[3].value().getName() == "Alice White");
//assert(dict[1].key() == 438901234);
//assert(dict[1].value().getName() == "Derek Harter");
cout  <<  endl ;

// -----------------------------------------------------------------------
cout  <<   "-------------- testing dictionary search  -----------------------"   <<  endl ;
id  =   438901234 ;
//e = dict.find(id);
//cout << "Search for id: " << id << endl;
//cout << "   Found employee: " << e << endl;
//assert(e.getId() == id);
//assert(e.getName() == "Derek Harter");

id  =   362817371 ;
//e = dict.find(id);
//cout << "Search for id: " << id << endl;
//cout << "   Found employee: " << e << endl;
//assert(e.getId() == id);
//assert(e.getName() == "Carol Black");

id  =   239481432 ;
//e = dict.find(id);
//cout << "Unsuccessful Search for id: " << id << endl;
//cout << "   Found employee: " << e << endl;
//assert(e.getId() == EMPTY_EMPLOYEE_ID);
//assert(e.getName() == "");
cout  <<  endl ;

// return 0 to indicate successful completion
return   0 ;
}

Source/Assg13/assg13.pdf

 

Assg 13: Dictionaries and Hashing

COSC 2336 Spring 2019

April 18, 2019

Dates:

Due: Sunday May 05, by Midnight

Objectives

• More practice with using class templates

• Learn about implementing and using key/value pair Dictionary ab- straction

• Implement and learn about some basic hashing techniques, like mid- square hasing and quadratic probing for closed hashing schemes.

Description

In this assignment you will be implementing some basic mechanisms of a hash table to implement a Dictionary that uses hashing to store and search for items in its collection. You have been given many files for this assign- ment. I have provided an Employee class in “Employee.[hpp|cpp]” and a KeyValuePair class in “KeyValuePair.[hpp|cpp]”. You will not need to make any changes to these files or classes, they should work as given for this as- signment.

You will be adding and implementing some member functions to the HashDictionary class. The initial “HashDictionary.[hpp|cpp]” file contains a constructor and destructor for a HashDictionary as well as some other accessors and operators already implemented that are used for testing.

You will be implementing a closed hash table mechanism using quadratic probing of the slots. You will also implement a version of the mid-square

1

 

 

hashing function described in our textbook (Shaffer section 9.4.3 on closed hashing mechinsms).

For this assignment you need to perform the following tasks.

1. Your first task is to implement methods to define the probe sequence for closed hasing. Add a member function named probe() to the HashDictionary class. Be aware that the HashDictionary class is a templatized on <Key, Value> templates, thus when you implement the class methods you need to templatize the class methods correctly. You can look at the example implementations of size() and the con- structors to remind yourself how to do this correctly.

In any case, probe() is a member function that takes two parameters, a Key and an integer index value. We are not using secondary hashing (as described in our textbook) so the Key value will actually not be used in your function. However, keep it as a parameter as the gen- eral abstraction/API for the probe function should include it for cases where secondary hashing is used. probe() should be a const class member function, as calling it does not change the dictionary. Finally probe() will return an ineger as its result.

Your probe() funciton should implement a quadratic probing scheme as described in our Shaffer textbook section 9.4.3 on pg. 338. Use c1 = 1, c2 =2, c3 = 2 as the parameters for your quadratic probe (the tests of probe() assume your probe sequence is using these pa- rameter values for the quadratic function).

2. You second tasks is to implement a hash function for integer like keys using the described mid-square hasing function (Shaffer 9.4.1 Example 9.6 pg. 327). We will create a slight variation of this algorithm for our hashing dictionary. First of all the hash() member functions should take a Key as its only input parameter, and it will then return a regular int as its result. Since this is a hash function, the integer value should be in the range 0 – tableSize-1, so don’t forget to mod by the tableSize before returning your hash result.

hash() should work like this. First of all, you should square the key value that is passed in. Then, assuming we are working with a 32 bit int, we want to only keep the middle 16 bits of the square of the key to use for our hash. There are many ways to work with and get the bits you need, but most likely you will want to use C bitwise operators to do this. For example, a simple method to get the middle 16 bits is

2

 

 

to first mask out the upper 8 bits using the bitwise & operator (e.g. key & 0x00FFFFFF) will mask out the high order 8 bits to 0). Then once you have removed the upper most significant 8 bits, you can left shift the key by 8 bits, thus dropping out the lower least significant 8 bits (e.g. key >> 8). Performing a mask of the upper 8 bits and shifting out the lower 8 bits will result in you only retaining the middle 16 bits.

If your system is using 64 bit integers rather than 32 bit integers, perform the mid-square method but retain the middle 32 bits of the result. You can use the sizeof(int) method to determine how many bytes are in an int on your system. I will give a bonus point if you write your hash() function to correctly work for both 32 and 64 bit values by testing sizeof(int) and doing the appopriate work to get the middle bits. Again after you square the key and get the middle bits, make sure you modulo the result to get an actual has index in the correct range.

3. The third task is to add the insert()method to your HashDictionary so that you can insert new key/value pairs into the dictionary. insert() should take a constant Key reference and a constant Value reference as its input parameters (note that both of these parameters should be declared as const, and they should both be reference pa- rameters, so use the & to indicate they are passed by reference). Your insert() function does not return a result, so it will be a void func- tion.

The algorithm for insert is described in Shaffer 9.4.3 on pg. 334. You need to call and use the probe() and hash() funciton you created in the first 2 steps to correctly define/implement your closed hashing probe sequence. The basica algorithm is that you use hash() to de- termine the initial home slot, and probe() gives an offset you should add. Basically you have to search the hashTable using the probe se- quence until you find an empty slot. Once you find an empty slot, you should create a new instance of a KeyValuePair<Key, Value> object, that contains the key and value that were provided as input param- eters to your insert() function. This KeyValuePair instance should then be inserted into the table at the location where you find the first empty slot on the probe sequence. Also don’t forget to update the valueCount paramemter of the HashDictionary class that keeps track of the number of items currently in the dictionary.

3

 

 

4. Finally you will also implement the find() method to search for a particular key in your dictionary. The find() member function taks a single Key parameter as input (it should be a const Key& reference parameter). The find() functin will return a Value as a result, which will be the Value of the record associated with the given Key if it was found in the dictionary, or an empty Value() object if it was not found.

The find() method uses the same probe sequence as insert() imple- mented by your probe() and hash() methods. So you should again search along the probe sequence, until you either find the key you were given to search for, or else find an empty slot. Then at the end, if you found the key in the hashTable you should return the value that corresponds to the key that was searched for. If the search failed and you found an empty slot on your probe sequence, you should instead return an empty Value() object, which is used as an indicator for a failed search.

In this assignment you will be given a lot of starting code. As usual, there is an “assg-13.cpp” file which contains commented out tests of the code/functions you are to write. You have been given and “Em- ployee.[hpp|cpp]” file containing a simple definition of a (non-templated) class/record that holds a few pieces of information about a theoretical Employee. We use this class to create a hash dictionary for testing with the employee id as the key, and the Employee record as the associated value in our Dictionary. You have also been given a template class in the file “KeyValuePair.[hpp|cpp]”. This contains a templatized container to holding a key/value pair of items. You will not need to add any code or make any changes in the Employee or KeyValuePair class files.

You have also been given a “HashDictionary.[hpp|cpp]” file containing beginning defintions of a HashDictionary class. The member functions you need to add for this assignment should be added to these files.

Here is an example of the output you should get if your code is passing all of the tests and is able to run the simulation. You may not get the exact same statistics for the runSimulation() output, as the simulation is generating random numbers, but you should see similar values.

—– testing Employee record and KeyValuePair class ———– test key: 42 test value: blue ( id: 3, Derek Harter, 1234 Main Street, Commerce TX, 12345.67 )

4

 

 

————– testing quadratic probing ———————– Newly created hash dictionary should be empty, size: 0 probe index: 0 returned probe value: 2 probe index: 1 returned probe value: 5 probe index: 5 returned probe value: 37

————– testing mid-square hashing ———————- Assuming 32 bit (4 byte) ints for these tests: 4 hash key: 3918 returned hash value: 1 hash key: 48517 returned hash value: 6 hash key: 913478 returned hash value: 5 hash key: 8372915 returned hash value: 4 counts for slot[0] = 143055 counts for slot[1] = 143040 counts for slot[2] = 143362 counts for slot[3] = 142399 counts for slot[4] = 142966 counts for slot[5] = 142658 counts for slot[6] = 142520

————– testing dictionary insertion ——————– After inserting 4 employees: Slot: 0

Key : 362817371 Value: ( id: 362817371, Carol Black, 8913 FM 24 Cooper TX, 28.50 )

Slot: 1 Key : 438901234 Value: ( id: 438901234, Derek Harter, 123 Main St. Commerce TX, 58.23 )

Slot: 2 Key : 0 Value: ( id: 0, , , 0.00 )

Slot: 3 Key : 192834192 Value: ( id: 192834192, Alice White, 384 Bois’darc. Campbell TX, 45.45 )

Slot: 4

5

 

 

Key : 998439281 Value: ( id: 998439281, Bob Green, 92 Washington Apt. 5 Greenville TX, 16.00 )

Slot: 5 Key : 0 Value: ( id: 0, , , 0.00 )

Slot: 6 Key : 0 Value: ( id: 0, , , 0.00 )

————– testing dictionary search ———————– Search for id: 438901234

Found employee: ( id: 438901234, Derek Harter, 123 Main St. Commerce TX, 58.23 )

Search for id: 362817371 Found employee: ( id: 362817371, Carol Black, 8913 FM 24 Cooper TX, 28.50 )

Unsuccessful Search for id: 239481432 Found employee: ( id: 0, , , 0.00 )

Assignment Submission

A MyLeoOnline submission folder has been created for this assignment. You should attach and upload your completed “HashDictionary.[hpp|cpp]” source files to the submission folder to complete this assignment. You do not need to submit your “assg-13.cpp” file with the tests, nor the Employee or KeyVal- uePair files, since you should not have made changes to any of these (except to uncomment out the tests in assg-13.cpp). Please only submit the asked for source code files, I do not need your build projects, executables, project files, etc.

6

 

 

Requirements and Grading Rubrics

Program Execution, Output and Functional Requirements

1. Your program must compile, run and produce some sort of output to be graded. 0 if not satisfied.

2. (20 pts.) probe() member function implemented. Function is using quadratic probing as asked for, with correct values for c1, c2 and c3 parameters. Probe sequence appears correct and passes tests.

3. (20 pts.) hash() member function implemented correctly. Function implements the mid-square method as described. Function correctly uses only the 16 middle bits if system uses 32 bit integers.

4. (30 pts.) insert() member function implemented and working. Func- tion appears to be correctly generating probe sequence using the probe() and hash() functions. Items are correctly inserted into ex- pected location in the hash table.

5. (30 pts.) find()member function implemented and working. Function appears to be also correctly using the probe sequence in the same was as insert(). Function passes the expected tests.

Program Style

Your programs must conform to the style and formatting guidelines given for this class. The following is a list of the guidelines that are required for the assignment to be submitted this week.

1. Most importantly, make sure you figure out how to set your indentation settings correctly. All programs must use 2 spaces for all indentation levels, and all indentation levels must be correctly indented. Also all tabs must be removed from files, and only 2 spaces used for indentation.

2. A function header must be present for member functions you define. You must give a short description of the function, and document all of the input parameters to the function, as well as the return value and data type of the function if it returns a value for the member functions, just like for regular functions. However, setter and getter methods do not require function headers.

7

 

 

3. You should have a document header for your class. The class header document should give a description of the class. Also you should doc- ument all private member variables that the class manages in the class document header.

4. Do not include any statements (such as system(“pause”) or inputting a key from the user to continue) that are meant to keep the terminal from going away. Do not include any code that is specific to a single operating system, such as the system(“pause”) which is Microsoft Windows specific.

8

 

Source/Assg13/Employee.cpp

Source/Assg13/Employee.cpp

/**

*  @description  Simple example of an Employee record/class
*   we can use to demonstrate HashDictionary key/value pair
*   management.
*/
#include   < string >
#include   < iostream >
#include   < iomanip >
#include   < sstream >
#include   "Employee.hpp"
using   namespace  std ;

/** constructor
* Default constructor for our Employee record/class.  Construct an
* empty employee record
*/
Employee :: Employee ()
{
this -> id  =  EMPTY_EMPLOYEE_ID ;
this -> name  =   "" ;
this -> address  =   "" ;
this -> salary  =   0.0 ;
}

/** constructor
* Basic constructor for our Employee record/class.
*/
Employee :: Employee ( int  id ,  string name ,  string address ,   float  salary )
{
this -> id  =  id ;
this -> name  =  name ;
this -> address  =  address ;
this -> salary  =  salary ;
}

/** id accessor
* Accessor method to get the employee id.
*
*  @returns  int Returns the integer employee id value.
*/
int   Employee :: getId ()   const
{
return  id ;
}

/** name accessor
* Accessor method to get the employee name.
*
*  @returns  string Returns the string containing the full
*   employee name for this record.
*/
string  Employee :: getName ()   const
{
return  name ;
}

/** overload operator<<
* Friend function to ouput representation of Employee to an
* output stream.
*
*  @param  out A reference to an output stream to which we should
*   send the representation of an employee record for display.
*  @param  employee The reference to the employee record to be displayed.
*
*  @returns  ostream& Returns a reference to the original output
*   stream, but now the employee information should have been
*   inserted into the stream for display.
*/
ostream &   operator << ( ostream &  out ,   Employee &  employee )
{
//out << "Employee id: " << employee.id << endl
//    << "    name   : " << employee.name << endl
//    << "    address: " << employee.address << endl
//    << "    salary : " << fixed << setprecision(2) << employee.salary << endl;
out  <<   "( id: "   <<  employee . id  <<   ", "
<<  employee . name  <<   ", "
<<  employee . address  <<   ", "
<<  fixed  <<  setprecision ( 2 )   <<  employee . salary  <<   " )"   <<  endl ;

return  out ;
}

Source/Assg13/Employee.hpp

/** * @description Simple example of an Employee record/class * we can use to demonstrate HashDictionary key/value pair * management. */ #include <string> #include <iostream> using namespace std; #ifndef EMPLOYEE_HPP #define EMPLOYEE_HPP // This should really be a class constant, however this // global constant represents a flag that is used to // indicate empty slots and/or failed search. const int EMPTY_EMPLOYEE_ID = 0; /** Employee * A simple Employee class/record to demonstrate/test * our hashing dictionary assignment. * NOTE: we are using 0 as a flag to represent an unused * slot or an invalid/empty employee. This is used/assumed * by our dictionary class to determine if a slot is empty * and/or to give a failure result for a failed search. */ class Employee { private: int id; string name; string address; float salary; public: Employee(); Employee(int id, string name, string address, float salary); int getId() const; string getName() const; friend ostream& operator<<(ostream& out, Employee& employee); }; #endif // EMPLOYEE_HPP

Source/Assg13/HashDictionary.cpp

Source/Assg13/HashDictionary.cpp

/**

*  @description  Template class for definining a dictionary
*   that uses a hash table of KeyValuePair items.
*   Based on Shaffer hashdict implementation pg. 340
*/

/** constructor
* Standard constructor for the HashDictionary
*
*  @param  tableSize The size of the hash table that should be
*   generated for internal use by this dictionary for hasing.
*  @param  emptyKey A special flag/value that can be used to detect
*   invalid/unused keys.  We need this so we can indicate which
*   slots/buckets in our hash table are currently empty, and also
*   this value is used as a return result when an unsuccessful
*   search is performed on the dictionary.
*/
template   < class   Key ,   class   Value >
HashDictionary < Key ,   Value >:: HashDictionary ( int  tableSize ,   Key  emptyKey )
{
this -> tableSize  =  tableSize ;
this -> EMPTYKEY  =  emptyKey ;
valueCount  =   0 ;

// allocate an array/table of the indicated initial size
hashTable  =   new   KeyValuePair < Key ,   Value > [ tableSize ];

// initialize the hash table so all slots are initially empty
for   ( int  index  =   0 ;  index  <  tableSize ;  index ++ )
{
hashTable [ index ]. setKey ( EMPTYKEY );
}
}

/** destructor
* Standard destructor for the HashDictionary.  Be good memory managers and
* free up the dynamically allocated array of memory pointed to by hashTable.
*/
template   < class   Key ,   class   Value >
HashDictionary < Key ,   Value >::~ HashDictionary ()
{
delete []  hashTable ;
}

/** size
* Accessor method to get the current size of this dictionary,
* e.g. the count of the number of key/value pairs currently being
* managed in our hash table.
*
*  @returns  in Returns the current number of items being managed by
*   this dictionary and currently in our hashTable.
*/
template   < class   Key ,   class   Value >
int   HashDictionary < Key ,   Value >:: size ()   const
{
return  valueCount ;
}

// Place your implementations of the class methods probe(), hash(),
// insert() and find() here

/** overload indexing operator[]
* Overload indexing operator[] to provide direct access
* to hash table.  This is not normally part of the Dictionary
* API/abstraction, but included here for testing.
*
*  @param  index An integer index.  The index should be in the range 0 - tablesize-1.
*
*  @returns  KeyValuePair<> Returns a KeyValuePair object if the index into the
*   internal hash table is a valid index.  This method throws an exception if
*   the index is not a valid slot of the hash table.
*/
template   < class   Key ,   class   Value >
KeyValuePair < Key ,   Value >&   HashDictionary < Key ,   Value >:: operator []( int  index )
{
if   ( index  <   0   ||  index  >=  tableSize )
{
cout  <<   "Error: <HashDictionary::operator[] invalid index: "
<<  index  <<   " table size is currently: "
<<  tableSize  <<  endl ;
assert ( false );
}

return  hashTable [ index ];
}

/** HashDictionary output stream operator
* Friend function for HashDictionary.  We normally wouldn't have
* something like this for a Dictionary or HashTable, but for testing
* and learning purposes, we want to be able to display the contents of
* each slot in the hash table of a HashDictionary container.
*
*  @param  out An output stream reference into which we should insert
*   a representation of the given HashDictionary.
*  @param  aDict A HashDictionary object that we want to display/represent
*   on an output stream.
*
*  @returns  ostream& Returns a reference to the original given output stream,
*   but now the values representing the dictionary we were given should
*   have been sent into the output stream.
*/
template   < typename  K ,   typename  V >
ostream &   operator << ( ostream &  out ,   const   HashDictionary < K ,  V >&  aDict )
{
for   ( int  slot  =   0 ;  slot  <  aDict . tableSize ;  slot ++ )
{
out  <<   "Slot: "   <<  slot  <<  endl ;
out  <<   "     Key  : "   <<  aDict . hashTable [ slot ]. key ()   <<  endl ;
out  <<   "     Value: "   <<  aDict . hashTable [ slot ]. value ()   <<  endl ;
}
out  <<  endl ;
return  out ;
}

Source/Assg13/HashDictionary.hpp

/** * @description Template class for definining a dictionary * that uses a hash table of KeyValuePair items. * Based on Shaffer hashdict implementation pg. 340 */ #include <cassert> #include <iostream> #include “KeyValuePair.hpp” using namespace std; #ifndef HASHDICTIONARY_HPP #define HASHDICTIONARY_HPP /** HashDictionary * An implementation of a dictionary that uses a hash table to insert, search * and delete a set of KeyValuePair items. In the assignment, we will be * implementing a closed hashing table with quadratic probing. The hash function * will implement a version of the mid-square hasing function described in * our Shaffer textbook. * * @value hashTable An array of KeyValuePair items, the hash table this class/container * is managing. * @value tableSize The actual size of the hashTable array * @value valueCount The number of KeyValuePair items that are currently being * managed and are contained in the hashTable * @value EMPTYKEY A special user-supplied key that can be used to indicate empty * slots. Since how we determine what is a valid/invalid key will depend on the * key type, the user must supply this special flag/value when setting up the * hash dictionary. */ template <class Key, class Value> class HashDictionary { protected: KeyValuePair<Key, Value>* hashTable; // the hash table int tableSize; // the size of the hash table, e.g. symbol M from textbook int valueCount; // the count of the number of value items currently in table Key EMPTYKEY; // a special user-supplied key that can be used to indicate empty slots public: // constructors and destructors HashDictionary(int tableSize, Key emptyKey); ~HashDictionary(); // accessor methods int size() const; // searching and insertion // all 4 of the methods you were required to create for this // assignment should have appropriate class method signatures // defined here. // overload operators (mostly for testing) KeyValuePair<Key, Value>& operator[](int index); template <typename K, typename V> friend ostream& operator<<(ostream& out, const HashDictionary<K, V>& aDict); }; #include “HashDictionary.cpp” #endif // HASHDICTIONARY_HPP

Source/Assg13/KeyValuePair.cpp

Source/Assg13/KeyValuePair.cpp

/**

*  @description  Template class for definining Key/Value pairs,
*   suitable for dictionary and hash table implementations.
*   Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31.
*/

/** constructor
* Default constructor for a KeyValuePair.
*/
template   < class   Key ,   class   Value >
KeyValuePair < Key ,   Value >:: KeyValuePair ()
{

}

/** constructor
* Standard constructor for a KeyValuePair.
*
*  @param  key The key portion that is to be stored in this pair.
*  @param  value The value portion that is to be stored in this pair.
*/
template   < class   Key ,   class   Value >
KeyValuePair < Key ,   Value >:: KeyValuePair ( Key  key ,   Value   value )
{
this -> myKey  =  key ;
this -> myValue  =   value ;
}

/** key accessor
* Accessor method to get and return the key for this key/value pair
*
*  @returns  Key Returns an object of template type Key, which is the
*   key portion of the pair in this container.
*/
template   < class   Key ,   class   Value >
Key   KeyValuePair < Key ,   Value >:: key ()
{
return  myKey ;
}

/** key setter
* Accessor method to set the key for this key/value pair
*
*  @param  key The new value to update the key to for this pair.
*/
template   < class   Key ,   class   Value >
void   KeyValuePair < Key ,   Value >:: setKey ( Key  key )
{
this -> myKey  =  key ;
}

/** value accessor
* Accessor method to get and return the value for this key/value pair.
*
*  @returns  Value& Returns a reference to the value object in this
*   key value pair container.
*/
template   < class   Key ,   class   Value >
Value &   KeyValuePair < Key ,   Value >:: value ()
{
return  myValue ;
}

Source/Assg13/KeyValuePair.hpp

/** * @description Template class for definining Key/Value pairs, * suitable for dictionary and hash table implementations. * Based on Shaffer KVPair ADT definition, pg. 139 Fig 4.31. */ #ifndef KEYVALUEPAIR_HPP #define KEYVALUEPAIR_HPP /** KeyValue Pair * Definition of basic key/value pair container. This container of course * associates a value (usually a record like a class or struct), with * a key (can be anything). * * We do not use the comparator Strategy pattern as discussed in * Shaffer pg. 144 here. We assume that the Key type has suitably * overloaded operators for <, >, ==, <=, >= operations as needed * in order to compare and order keys if needed by dictionaries and * hash tables using a KeyValuePair. * * @value key The key for a key/value pair item/association. * @value value The value for a key/value pair, usually something like * a record (a class or struct of data we are hashing or keeping in * a dictionary). */ template <class Key, class Value> class KeyValuePair { private: Key myKey; Value myValue; public: // constructors KeyValuePair(); KeyValuePair(Key key, Value value); // accessors, getters and setters Key key(); void setKey(Key key); Value& value(); }; #include “KeyValuePair.cpp” #endif // KEYVALUEPAIR_HPP

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

Concepts Of Programming Language: Building A Scanner

Example Pseudocode

Problem: Given a sorted array a with n elements (i.e., a[0] <= a[1] <= … a[n-1]) and a number m, find if m is in the array.

 

1. Main pseudo code

 

data

given data

n: the number of integers given

a[0], …, a[n-1]: the given integers

m: given integer (to check if it is in a)

unknown data: N.A.

intermediate data:

found: indicating if is found from a

plan

// get array an from user input (numbers in a must be ordered).

n = getseries(a)

// find if is in array from index 0 to n-1

found = search(a, 0 , n-1, m)

if found print is found in a.

Otherwise print is not found in a.

 

(Pseudo code for all functions used in the main pseudocode)

 

2. Pseudo code for search function

 

Function name: search

input:

a: an array of numbers

bottom, top: bottom and top index

m: the number to search from a[bottom] to a[top]

output:

b: 1 if is in a a[bottom] to a[top]0 otherwise

Data

mid: middle index of the array

plan:

if (bottom > top) b = 0 and stop.

find the mid point mid of the array between bottom and top

if (a[mid] == mb = 1

else if (m > a[mid])

P2.1 // find if m is in a from mid+1 to top:

b = search(a, mid+1, top, m)

else P2.2 // find if m is in from bottom to mid-1

b = search(a, bottom, mid-1,m)

 

3. Pseudo code for getSeries function

 

omitted here

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

Concepts Of Programming Language: Building A Scanner

Example Pseudocode

Problem: Given a sorted array a with n elements (i.e., a[0] <= a[1] <= … a[n-1]) and a number m, find if m is in the array.

 

1. Main pseudo code

 

data

given data

n: the number of integers given

a[0], …, a[n-1]: the given integers

m: given integer (to check if it is in a)

unknown data: N.A.

intermediate data:

found: indicating if is found from a

plan

// get array an from user input (numbers in a must be ordered).

n = getseries(a)

// find if is in array from index 0 to n-1

found = search(a, 0 , n-1, m)

if found print is found in a.

Otherwise print is not found in a.

 

(Pseudo code for all functions used in the main pseudocode)

 

2. Pseudo code for search function

 

Function name: search

input:

a: an array of numbers

bottom, top: bottom and top index

m: the number to search from a[bottom] to a[top]

output:

b: 1 if is in a a[bottom] to a[top]0 otherwise

Data

mid: middle index of the array

plan:

if (bottom > top) b = 0 and stop.

find the mid point mid of the array between bottom and top

if (a[mid] == mb = 1

else if (m > a[mid])

P2.1 // find if m is in a from mid+1 to top:

b = search(a, mid+1, top, m)

else P2.2 // find if m is in from bottom to mid-1

b = search(a, bottom, mid-1,m)

 

3. Pseudo code for getSeries function

 

omitted here

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!

CMIS PROJECT

1

Project 3

In this assignment you will be performing some additional queries against your Online Vehicle Sales (OVS), Inc. online transaction processing (OLTP) database and also creating some simple anonymous PL/SQL blocks.

You will also begin the creation of a data warehouse database for Online Vehicle Sales (OVS), Inc. The full data warehouse is comprised of 4 dimension tables and a fact table based on the Star Schema diagram posted in LEO’s Week #6 area. Your OLTP database tables and star schema tables will reside in the same Oracle schema.

This assignment is based on the fully populated tables from Homework #2 so it assumes you’ve completed all work for that assignment.

You can perform this assignment based on a database on Nova or any other Oracle system you wish, but you must use the Oracle RDBMS.

You should use one or more SQL script files to complete this assignment. Your script files should contain all your SQL and PL/SQL code. Do NOT submit your SQL script files. Doing so may result in confusion and will result in lost points.

Everything for this assignment must be in a single file. If you are using SQL*Plus you must put all your SQL, PL/SQL, and results together in a single SPOOL file. If you are using SQL Developer or other GUI, put all your screen snapshots in a single file for both your SQL statements and PL/SQL as they executed and the results. Failure to include all your SQL, PL/SQL, and all your results along with them will result in lost points.

Do NOT submit additional files as this only complicates the grading, and will result in lost points.

Here are the specific assignment steps. In order to earn full credit you must keep your steps in order, number your steps, and put everything in a single file.

1) Execute SELECT COUNT(*) FROM <table_name>; statements for all 6 of your OVS, Inc. OLTP tables. You should have at least the following counts: CUSTOMERS table – 100 rows, VEHICLES table – 50 rows, SALESPERSONS table – 10 rows, FINANCING_PLANS – 5 rows, SALES table – 200 rows, and SALES_FINANCINGS table – 200 rows.

2) Via a single SELECT query display the zip code, make, and count with the largest total car purchases for a zip code and make combination (there may be a tie with two or more). Show the SQL statement you used and the results returned by Oracle from executing your SQL statement right after the statement.

3) Develop a PL/SQL anonymous block that displays the total sales for a zip code for a specific zip code. You may use any of your zip codes you wish. Show the PL/SQL statements in your block, the actual execution of your block, and the results returned.

2

4) Develop a PL/SQL anonymous block that displays the zip code with the largest total car purchases. Since there can be a tie with two or more zip codes, ensure that the lowest numeric zip code is displayed. The zip code displayed should correlate to the results of Step #2. Show the PL/SQL statements in your block, the actual execution of your block, and the results returned.

5) This step begins the creation of your data warehouse. Ensure that your FINANCING_PLANS table has already been created and populated via a “SELECT * FROM financing_plans;” SQL query. This table is used by both your OLTP database and serves as a dimension table in the star schema of your data warehouse database. Your Plan_ID primary key is the Plan_Code column. Don’t worry about changing this to Plan_Code or changing any other column names you already have. Show the SQL you used and executed and the results.

6) Create the DEALERSHIPS star schema dimension table via SQL. Add at least 2 rows of data via INSERT statement(s). After populating your DEALERSHIPS table execute a “SELECT * FROM dealerships;” SQL statement to display the entire contents. Show all your SQL code for this step and the Oracle results from executing it.

7) Create the VEHICLES star schema dimension table via SQL. Change your existing OLTP VEHICLES table to OLTP_VEHICLES via the SQL RENAME command and change your SALES table’s foreign key to reference this new table name. For the Vehicle_Code primary key column use an Oracle sequence to populate the values. For the Description column use all concatenated combinations of Make and Model of vehicles you have. Use a PL/SQL block to populate the Description column by SELECTing the combinations from your OLTP_VEHICLES table and then INSERTing the combinations into your new VEHICLES table, which would best be performed via a cursor in a loop. After populating your VEHICLES table execute a “SELECT * FROM vehicles ORDER BY vehicle_code” SQL statement to display the entire contents. Show all your SQL and PL/SQL code for this step and the Oracle results from executing it.

Your submission MUST be in a single text, Word, or PDF file with all steps numbered and in order.

Project 3 grading rubric

Attribute

Meets

Does Not Meet

CREATE TABLE SQL statements

20 points

Uses an SQL script file.

Creates the DEALERSHIPS star schema dimension table.

Creates the VEHICLES star schema dimension table.

Changes your existing OLTP VEHICLES table to OLTP_VEHICLES via the SQL RENAME command and change your SALES table’s foreign key to reference this new table name.

0 points

Does not use an SQL script file.

Does not create the DEALERSHIPS star schema dimension table.

Does not create the VEHICLES star schema dimension table.

Does not change your existing OLTP VEHICLES table to OLTP_VEHICLES via the SQL RENAME command or change your SALES table’s foreign key

3

Uses an Oracle sequence to populate the Vehicle_Code values.

Uses all concatenated combinations of Make and Model of vehicles for the Description column.

Uses an Oracle RDBMS.

All SQL statements are syntactically correct and execute without error.

to reference this new table name.

Does not use an Oracle sequence to populate the Vehicle_Code values.

Does not use all concatenated combinations of Make and Model of vehicles for the Description column.

Does not use an Oracle RDBMS.

All SQL statements are not syntactically correct or execute without error.

INSERT SQL statements

25 points

Adds at least 2 rows of data via INSERT statement(s) to the DEALERSHIPS Star schema table.

All SQL statements are syntactically correct and execute without error.

0 points

Does not add at least 2 rows of data via INSERT statement(s) to the DEALERSHIPS Star schema table.

All SQL statements are not syntactically correct or execute without error.

SELECT SQL statements

5 points

Executes SELECT COUNT(*) FROM <table_name>; for all OLT tables resulting in expected counts.

Via a single SELECT query display the zip code, make, and count with the largest total car purchases for a zip code and make combination.

Ensures that your FINANCING_PLANS table has already been created and populated via a “SELECT * FROM

0 points

Does not execute SELECT COUNT(*) FROM <table_name>; for all OLT tables resulting in expected counts.

Does not, via a single SELECT query, display the zip code, make, and count with the largest total car purchases for a zip code and make combination.

Does not ensure that your FINANCING_PLANS table has already been created and

4

financing_plans.

After populating your DEALERSHIPS table execute a “SELECT * FROM dealerships;”

After populating your VEHICLES table execute a “SELECT * FROM vehicles ORDER BY vehicle_code”.

All SQL statements are syntactically correct and execute without error.

populated via a “SELECT * FROM financing_plans.

Does not, After populating your DEALERSHIPS table execute a “SELECT * FROM dealerships;”

Does not, after populating your VEHICLES table execute a “SELECT * FROM vehicles ORDER BY vehicle_code”.

All SQL statements are syntactically correct and execute without error.

All SQL statements are not syntactically correct or execute without error.

PL/SQL anonymous blocks

40 points

Develops a PL/SQL anonymous block that displays the total sales for a zip code for a specific zip code.

Develops a PL/SQL anonymous block that displays the zip code with the largest total car purchases.

Ensures that the lowest numeric zip code is displayed.

The zip code displayed should correlate to the results of Step #2 above.

Uses a PL/SQL block to populate the Description column by SELECTing the combinations from your OLTP_VEHICLES table and then INSERTing the combinations into your new VEHICLES table, which would best be performed via a cursor in a loop.

0 points

Does not develop a PL/SQL anonymous block that displays the total sales for a zip code for a specific zip code.

Does not develop a PL/SQL anonymous block that displays the zip code with the largest total car purchases.

Does not ensure that the lowest numeric zip code is displayed.

The zip code displayed does not correlate to the results of Step #2 above.

Does not use a PL/SQL block to populate the Description column by SELECTing the combinations from your OLTP_VEHICLES table and then INSERTing the combinations into your new VEHICLES table, which would

5

best be performed via a cursor in a loop.

SQL script file and SPOOL file

10 points

Submits either an SQL*Plus SPOOL file or screen snapshots of the output if using SQL Developer or another GUI.

Demonstrates DROP TABLE, CREATE TABLE, and ALTER TABLE SQL statements as they executed and the Oracle responses.

Demonstrates INSERT SQL statements as they executed and the Oracle responses.

Displays the contents of all tables from SELECT * FROM tablename; statements.

Displays all single SELECT statements queries.

Displays all PL/SQL code and execution.

Does NOT submit a SQL script file.

Includes a SET ECHO ON SQL*Plus statement in your SQL script file to ensure that all the SQL that is executed is displayed in your SPOOL file.

0 points

Does not submit either an SQL*Plus SPOOL file or screen snapshots of the output if using SQL Developer or another GUI.

Does not demonstrate DROP TABLE, CREATE TABLE, and ALTER TABLE SQL statements as they executed and the Oracle responses.

Does not demonstrate INSERT SQL statements as they executed and the Oracle responses.

Does not display the contents of all tables from SELECT * FROM tablename; statements.

Does not display all single SELECT statements queries.

Does not display all PL/SQL code and execution.

Submits a SQL script file.

Does not Include a SET ECHO ON SQL*Plus statement in your SQL script file to ensure that all the SQL that is executed is displayed in your SPOOL file.

 
Do you need a similar assignment done for you from scratch? Order now!
Use Discount Code "Newclient" for a 15% Discount!