Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

compiler required: visual studio 2019 and do not use #include Change the database.cpp program to throw exceptions when there is an unexpected problem ( wrong

compiler required: visual studio 2019 and do not use #include

Change the database.cpp program to throw exceptions when there is an unexpected problem (wrong database name, wrong and record size not in the range listed, puts in letter instead of number, more other possibilities) and when appropriate offer the user an option to fix the problem. In case there is a problem, you are supposed to throw an exception (and of course catch it) and then possibly allow the user to correct the error.

database.cpp------------------------------------------------------------------------------------------------------------

#include #include #include #include

using namespace std;

#include "ccc_empl.h"

const int NEWLINE_LENGTH = 2; const int RECORD_SIZE = 30 + 10 + NEWLINE_LENGTH;

/** Converts a string to a floating-point value, e.g. "3.14" -> 3.14. @param s a string representing a floating-point value @return the equivalent floating-point value */ double string_to_double(string s) { istringstream instr(s); double x; instr >> x; return x; }

/** Raises an employee salary. @param e employee receiving raise @param percent the percentage of the raise */ void raise_salary(Employee& e, double percent) { double new_salary = e.get_salary() * (1 + percent / 100); e.set_salary(new_salary); }

/** Reads an employee record from a file. @param e filled with the employee @param in the stream to read from */ void read_employee(Employee& e, istream& in) { string line; getline(in, line); if (in.fail()) return; string name = line.substr(0, 30); double salary = string_to_double(line.substr(30, 10)); e = Employee(name, salary); }

/** Writes an employee record to a stream. @param e the employee record to write @param out the stream to write to */ void write_employee(Employee e, ostream& out) { out << e.get_name() << setw(10 + (30 - e.get_name().length())) << fixed << setprecision(2) << e.get_salary(); }

int main() { cout << "Please enter the data file name: "; string filename; cin >> filename; fstream fs; fs.open(filename.c_str()); fs.seekg(0, ios::end); // Go to end of file int nrecord = fs.tellg() / RECORD_SIZE;

cout << "Please enter the record to update: (0 - " << nrecord - 1 << ") "; int pos; cin >> pos;

const double SALARY_CHANGE = 5.0;

Employee e; fs.seekg(pos * RECORD_SIZE, ios::beg); read_employee(e, fs); raise_salary(e, SALARY_CHANGE); cout << "New salary: " << e.get_salary(); fs.seekp(pos * RECORD_SIZE, ios::beg); write_employee(e, fs);

fs.close(); return 0; } ccc_empl.cpp---------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include "ccc_empl.h"

Employee::Employee() { salary = 0; }

Employee::Employee(string employee_name, double initial_salary) { name = employee_name; salary = initial_salary; }

void Employee::set_salary(double new_salary) { salary = new_salary; }

double Employee::get_salary() const { return salary; }

string Employee::get_name() const { return name; } ccc_empl.h------------------------------------------------------------------------------------------------------------------------------------------------------------

#ifndef CCC_EMPL_H #define CCC_EMPL_H

#include

using namespace std;

/** A basic employee class that is used in many examples in the book "Computing Concepts with C++ Essentials" */ class Employee { public: /** Constructs an employee with empty name and no salary. */ Employee(); /** Constructs an employee with a given name and salary. @param employee_name the employee name @param initial_salary the initial salary */ Employee(string employee_name, double initial_salary); /** Sets the salary of this employee. @param new_salary the new salary value */ void set_salary(double new_salary); /** Gets the salary of this employee. @return the current salary */ double get_salary() const; /** Gets the name of this employee. @return the employee name */ string get_name() const; private: string name; double salary; };

#endif employee.dat-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Johnson, Marianne 36118.95 Sanchez, Linda 31695.00 Lee, John 32798.90 Baldassarian, George S. 25895.00 Karamanlaki, Alexander 27508.95 Schmidt, Otto 29316.00 Stroustrup, Bjarne 124495.00 Keller, Chris 23318.04 Carter 3rd, Hodding 26632.00 Techasaratoole, Shirley 25795.00

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Essential SQLAlchemy Mapping Python To Databases

Authors: Myers, Jason Myers

2nd Edition

1491916567, 9781491916568

More Books

Students also viewed these Databases questions