Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

ARCS

Какво прави следната програма

Препоръчан отговор


Някой може ли да напише с коментари какво прави следната програма?

 

Пример 10. Програма за записване на данни за клиенти във файл с произволен достъп. Използват се функциите seekp() и write() за съхраняване (записване) на данни на точно определено място (позиция) във файла. Програмата се състои от: хедърен файл: clientData.h, файл ClientData.cpp и файл T8_Primer10.cpp (с функцията main() – за записване на определено количество данни за клиенти във файл “credit.dat”).

Оригиналният стил и коментарите в програмата са запазени без промени. [2]

// Хедърен файл: clientData.h

// Class ClientData definition used in other .cpp files.

 

#ifndef CLIENTDATA_H

#define CLIENTDATA_H

 

#include <iostream>

 

using std::string;

 

class ClientData {

 

public:

 

ClientData( int = 0, string = "", string = "", double = 0.0 );

 

void setAccountNumber( int );

int getAccountNumber() const;

 

void setLastName( string );

string getLastName() const;

 

void setFirstName( string );

string getFirstName() const;

 

void setBalance( double );

double getBalance() const;

 

private:

int accountNumber;

char lastName[ 15 ];

char firstName[ 10 ];

double balance;

 

}; 

 

#endif

 

 

#include <iostream>

 

using std::string;

 

#include <cstring>

#include "clientData.h"

 

ClientData::ClientData( int accountNumberValue,

string lastNameValue, string firstNameValue,

double balanceValue )

{

setAccountNumber( accountNumberValue );

setLastName( lastNameValue );

setFirstName( firstNameValue );

setBalance( balanceValue );

 

int ClientData::getAccountNumber() const

{

return accountNumber;

 

 

void ClientData::setAccountNumber( int accountNumberValue )

{

accountNumber = accountNumberValue;

 

string ClientData::getLastName() const

{

return lastName;

 

}

void ClientData::setLastName( string lastNameString )

{

 

const char *lastNameValue = lastNameString.data();

int length = strlen( lastNameValue );

length = ( length < 15 ? length : 14 );

strncpy( lastName, lastNameValue, length );

 

lastName[ length ] = '0';

 

string ClientData::getFirstName() const

{

return firstName;

 

void ClientData::setFirstName( string firstNameString )

{

 

const char *firstNameValue = firstNameString.data();

int length = strlen( firstNameValue );

length = ( length < 10 ? length : 9 );

strncpy( firstName, firstNameValue, length );

 

firstName[ length ] = '0';

 

 

double ClientData::getBalance() const

{

return balance;

 

void ClientData::setBalance( double balanceValue )

{

balance = balanceValue;

 

 

 

Втора задача

 

Пример 12. Програма за моделиране и поддържане на операции (чрез избор от меню) в банкова система за кредити на клиенти (съхранявани в двоичен файл с произволен достъп).

Програмата осигурява актуализация на сметка, добавяне на нова сметка, изтриване на сметка, както и последователно четене на данните за клиенти от файла credit.dat и съхраняване в текстов файл print_credit.txt (за отпечатване).

За избор на опциите от менюто се дефинира и използва тип enum променлива с име Choices.

Оригиналният стил и коментарите в програмата са запазени без промени. [2]

 

#include <iostream>

#include <iomanip>

#include <fstream>

#include <cstdlib>

 

using std::ofstream;

using std::ostream;

using std::fstream;

 

using namespace std;

 

#include "clientData.h" 

 

int enterChoice();    

void printRecord( fstream& );

void updateRecord( fstream& );

void newRecord( fstream& );

void deleteRecord( fstream& );

void outputLine( ostream&, const ClientData & );

int getAccount( const char * const );

 

enum Choices { PRINT = 1, UPDATE, NEW, DELETE, END };

 

int main()

{

   fstream inOutCredit( "credit.dat", ios::in | ios::out );

 

   if ( !inOutCredit ) {

  cerr << "File could not be opened." << endl;

  exit ( 1 );

 

}

int choice;

 

   while ( ( choice = enterChoice() ) != END ) {

 

  switch ( choice ) {

 

         case PRINT:

  printRecord( inOutCredit );

  break;

 

         case UPDATE:

  updateRecord( inOutCredit );

  break;

 

         case NEW:

  newRecord( inOutCredit );

  break;

 

         case DELETE:

  deleteRecord( inOutCredit );

 break;

 

default:

  cerr << "Incorrect choice" << endl;

  break;

 

  } 

 

  inOutCredit.clear(); 

 

 

cout << endl;

 

return 0;

 

 

int enterChoice()

{

   cout << "nEnter your choice" << endl

  << "1 - Store a formatted text file of accounts" << endl

  << "   called "print.txt" for printing" << endl

  << "2 - Update an account" << endl

  << "3 - Add a new account" << endl

  << "4 - Delete an account" << endl

  << "5 - End programnn? ";

 

int menuChoice;

cin >> menuChoice; 

 

return menuChoice;

 

}

void printRecord( fstream &readFromFile )

{

   ofstream outPrintFile( "print_credit.txt", ios::out );

 

   if ( !outPrintFile ) {

  cerr << "File could not be created." << endl;

  exit( 1 );

 

 

outPrintFile << left << setw( 10 ) << "Account" << setw( 16 )

<< "Last Name" << setw( 11 ) << "First Name" << right

<< setw( 10 ) << "Balance" << endl;

 

   readFromFile.seekg( 0 );

 

   ClientData client;

readFromFile.read( reinterpret_cast< char * >( &client ),

  sizeof( ClientData ) );

 

   while ( !readFromFile.eof() ) {

 

      if ( client.getAccountNumber() != 0 )

outputLine( outPrintFile, client );

 

      readFromFile.read( reinterpret_cast< char * >( &client ),

sizeof( ClientData ) );

 

 

}

void updateRecord( fstream &updateFile )

{

   int accountNumber = getAccount( "Enter account to update" );

 

   updateFile.seekg(

  ( accountNumber - 1 ) * sizeof( ClientData ) );

 

   ClientData client;

updateFile.read( reinterpret_cast< char * >( &client ),

  sizeof( ClientData ) );

 

   if ( client.getAccountNumber() != 0 ) {

  outputLine( cout, client );

 

      cout << "nEnter charge (+) or payment (-): ";

  double transaction;

  cin >> transaction;

 

      double oldBalance = client.getBalance();

  client.setBalance( oldBalance + transaction );

  outputLine( cout, client );

 

      updateFile.seekp(

( accountNumber - 1 ) * sizeof( ClientData ) );

 

      updateFile.write(

reinterpret_cast< const char * >( &client ),

sizeof( ClientData ) );

 

}

   else

  cerr << "Account #" << accountNumber

<< " has no information." << endl;

 

}

void newRecord( fstream &insertInFile )

{

   int accountNumber = getAccount( "Enter new account number" );

 

   insertInFile.seekg(

  ( accountNumber - 1 ) * sizeof( ClientData ) );

 

   ClientData client;

insertInFile.read( reinterpret_cast< char * >( &client ),

 sizeof( ClientData ) );

 

   if ( client.getAccountNumber() == 0 ) {

 

  char lastName[ 15 ];

  char firstName[ 10 ];

  double balance;

 

      cout << "Enter lastname, firstname, balancen? ";

  cin >> setw( 15 ) >> lastName;

  cin >> setw( 10 ) >> firstName;

  cin >> balance;

 

 

  client.setLastName( lastName );

  client.setFirstName( firstName );

  client.setBalance( balance );

  client.setAccountNumber( accountNumber );

 

  insertInFile.seekp( ( accountNumber - 1 ) *

sizeof( ClientData ) );

 

  insertInFile.write(

reinterpret_cast< const char * >( &client ),

sizeof( ClientData ) );

 

}

else

  cerr << "Account #" << accountNumber

<< " already contains information." << endl;

 

void deleteRecord( fstream &deleteFromFile )

{

 

int accountNumber = getAccount( "Enter account to delete" );

 

deleteFromFile.seekg(

  ( accountNumber - 1 ) * sizeof( ClientData ) );

 

ClientData client;

deleteFromFile.read( reinterpret_cast< char * >( &client ),

  sizeof( ClientData ) );

 

if ( client.getAccountNumber() != 0 ) {

  ClientData blankClient;

 

  deleteFromFile.seekp( ( accountNumber - 1 ) *

sizeof( ClientData ) );

 

  deleteFromFile.write(

reinterpret_cast< const char * >( &blankClient ),

sizeof( ClientData ) );

 

  cout << "Account #" << accountNumber << " deleted.n";

 

else

  cerr << "Account #" << accountNumber << " is empty.n";

 

void outputLine( ostream &output, const ClientData &record )

{

output << left << setw( 10 ) << record.getAccountNumber()

  << setw( 16 ) << record.getLastName().data()

  << setw( 11 ) << record.getFirstName().data()

  << setw( 10 ) << setprecision( 2 ) << right << fixed

  << showpoint << record.getBalance() << endl;

 

int getAccount( const char * const prompt )

{

int accountNumber;

 

do {

 cout << prompt << " (1 - 100): ";

  cin >> accountNumber;

 

} while ( accountNumber < 1 || accountNumber > 100 );

 

return accountNumber;

 

}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Някой може ли да напише с коментари какво прави следната програма?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Извежда опции за добавяне, редактиране или изтриване на записи (банков акаунт на клиент) в външен текстов файл, която тя използва. Използвайки други малки скриптове за масиви.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×
×
  • Добави ново...