0

У меня есть программа, используемая для управления базой данных записей «client_DB». Массив «client_DB» состоит из записей звонков сотовых телефонов клиента. Каждая запись вызова клиента содержит восемь полей, которые следующие: 1) десятизначный номер сотового телефона (строка, тире), 2) количество ретрансляционных станций, используемых при совершении вызова (целое число), 3) длина (двойная), 5) ставка налога (двойная), 6) налог на вызов (двойной), 7) общая стоимость звонка (двойной) и 8) string field, называемое «discount_aval со значением« yes »или« no ». Массив client_DB имеет емкость (SIZE) из 20 записей.Нужна помощь в выяснении того, как спросить пользователя о том, что они хотят удалить и удалить в массиве

Он читается из входного файла, сначала называемого« client_data.txt », который состоящий из этих величин:

9546321555 0 0 yes 
5612971340 5 50 no 
3051234567 8 25 no 
7542346622 24 17 no 
3054432762 15 30 yes 
11 50 100 yes 
8776219988 87 82 yes 
9042224556 4 5 yes 
7877176590 11 1 no 
5617278899 20 45 no 
9546321555 4 3 yes 
5612971340 79 86 no 
3051234567 8 25 no 
7542346622 24 118 no 
3054432762 115 25 yes 
11 43 10 yes 
8776219988 265 22 yes 
9042224556 2 5 yes 
7877176590 89 67 no 
5617278899 40 56 no 

Я почти почти закончил с этим, но мне нужна помощь в том, как w обменивайте несколько строк кода и куда они идут. Мне нужно реализовать меню, в котором у меня есть, но мне нужна помощь в том, как спросить пользователя, для какого номера телефона они хотели бы удалить и удалить его для функции REMOVE, а также спросить, какой номер телефона искать и возвращать его положение в функции SEARCH. Я также нужна помощь по настройке точности на то, что печатается в выходной файл «weekly_client_call_info.txt» Я знаю, что нужно осуществить это:

cout.setf(ios::fixed); 
cout.setf(ios::showpoint); 
cout.precision(2); 

но где я разместить его? Также мне хотелось бы получить подсказки о том, как добавить заголовки столбцов в то, что печатается в выходном файле. Есть функция под названием «Процесс», которая производит вычисления, как установить точность этих вычислений? Все остальное я понимаю, спасибо! Вот мой код до сих пор: (! Извини, если я сделал какую-то ошибку, как правильно задать вопрос)

#include <iostream> 
    #include <string> 
    #include <fstream> 

    //************************************************************************ 
    //Name: Kevin Dunphy   Due Date: 022113 
    //Instructor: Dr. Bullard    Total Points: 100 pts 
    //Assignment2: client_call.cpp   UsIDFAU: kdunphy 
    //: 


    using namespace std; 

    const int CAPACITY = 20; 

    class client_db 
     { 
     public: 
     string cellnum; 
     int numofrelay; 
     int call_length; 
     double net_cost; 
     double tax_rate; 
     double call_tax; 
     double total_cost; 
     string discount_aval; 
     }; 

    bool IsFull(int); //returns true if the array is full; otherwise false. 
    bool IsEmpty(int count);// returns ture if the array is empty; otherwise false. 

    void Add(client_db A[], int & count, client_db & db); 
    void Remove(client_db A[], int *count, string name);// removes an item from the array if it is there 
    void Print_DB(client_db A[], int count);//prints to output file 
    void Call_stats(client_db A[], int count);// prints all the items in the array 
    int Search_DB(client_db A[], int count, string name); //if the name is in the array, its location is returned 
    //          //otherwise return -1; 
    // 
    bool IsFull(int count) 
    ////Description: Determines if the array is full 
    { 
    return (count == CAPACITY); 
     } 

    bool IsEmpty(int count) 
     ////Description: Determines if the array is empty 
     { 
return (count == 0); 
     } 

     void Process (client_db A[], int count) 
     { 

for(int i=0; i<count; i++) 
{ 
if (A[i].numofrelay >=1 && A[i].numofrelay<=5) 
{ 
    A[i].tax_rate=0.01; 
    A[i].net_cost = ((A[i].numofrelay/50.0)*0.40*A[i].call_length); 

} 
else if (A[i].numofrelay >=6 && A[i].numofrelay<=11) 
{ 
    A[i].tax_rate=0.03; 
    A[i].net_cost = ((A[i].numofrelay/50.0)*0.40*A[i].call_length); 


} 
else if (A[i].numofrelay>=12 && A[i].numofrelay<=20) 
{ 
    A[i].tax_rate=0.05; 
    A[i].net_cost = ((A[i].numofrelay/50.0)*0.40*A[i].numofrelay); 


} 
else if (A[i].numofrelay >=21 && A[i].numofrelay<=50) 
{ 
    A[i].tax_rate =0.08; 
    A[i].net_cost = ((A[i].numofrelay/50.0)*0.40*A[i].call_length); 


} 
else if (A[i].numofrelay >50) 
{ 
    A[i].tax_rate =0.12; 
    A[i].net_cost = ((A[i].numofrelay/50.0)*0.40*A[i].call_length); 


} 
A[i].call_tax = ((A[i].tax_rate)/(100))*(A[i].net_cost); 
A[i].total_cost = A[i].net_cost + A[i].call_tax; 
} 
    } 

    void Print_DB(client_db A[], int count) 

    //Description: Prints the items stored in A to the standard i/o device 
    { 

    string filename; 
    cout<<"Enter output filename: "; //geting filename 
    cin>>filename; 

    ofstream output; //declaring an output file stream 

    output.open(filename.c_str()); // c_str() converts a C++ string into a 
           // c-style string (char array) & 
           //open binds an ofstream to a file 
    for(int i=0; i<count; i++) 
    { 

    output<<A[i].cellnum<<"\t" 
      <<A[i].numofrelay<<"\t" 
      <<A[i].call_length<<"\t" 
      <<A[i].net_cost<<"\t" 
      <<A[i].tax_rate<<"\t" 
      <<A[i].call_tax<<"\t" 
      <<A[i].total_cost<<"\t" 
      <<A[i].discount_aval<<endl; 

} 

output.close(); 
    } 

    int Search(client_db A[], int count, string cellnum) 
    ////Description: Locates cellnumbers in A's fields 
    { 
for(int i=0; i<count; i++) 
{ 
    if (cellnum == A[i].cellnum) 
    { 
     return i; 
    } 
} 
return -1; 
    } 

     void Add(client_db A[], int &count) 
     ////Description: Adds key to the array 
    { 
if (!IsFull(count)) 
{ 
    cout<<"Enter a cellphone number, number of relay stations and the call   lenght and if a discount is available: "; 
    cin>>A[count].cellnum>>A[count].numofrelay>>A[count].call_length>>A[count].discount_aval; 
    count++; 

} 
else 
{ 
    cout<<"The list is full\n"; 
} 

    } 

    void Add(client_db A[], int &count, client_db &db) 
     ////Description: Adds key to the array 
    { 
if (!IsFull(count)) 
{ 
    A[count] = db; 
    count++; 

} 
else 
{ 
    cout<<"The list is FULL! \n"; 
} 

    } 
     void Remove(client_db A[], int *count, string cellnum) 

     ////Description: Removes the number from the array is it is there 
     { 
cout<<"Remove function is called and removed the cellphone number 9546321555 \t" <<endl; 

int loc = Search(A,*count,cellnum); 

if (IsEmpty(*count)) 
{ 
    cout<<"A is EMPTY!\n"; 
    return; 
} 
else if (loc == -1) 
{ 
    cout<<"key not in A\n"; 
} 
else 
{ 
    for(int j=loc; j<(*count)-1; j++) 
    { 
     A[j] = A[j+1]; 
    } 
    (*count)--; 

} 
     } 


     void Call_stats(client_db A[],int count) // prints to screen 
     { 
for(int i=0; i<count; i++) 
    { 
    cout<<A[i].cellnum<<"\t" 
     <<A[i].numofrelay<<"\t" 
     <<A[i].call_length<<"\t" 
     <<A[i].discount_aval<<endl; 

} 
      } 
      void Menu() 
     { 
cout<<"The values of the filename you entered have been recognized"<<endl; 
cout<<"Please enter the letter of your application of choice"<<endl; 
cout<<"  "<<endl; 
    cout<<"************ WELCOME TO THE MAIN MENU ************"<<endl; 
cout<<" Add an item...........................A"<<endl; 
    cout<<" Remove an item........................R"<<endl; 
cout<<" Search for an item....................S"<<endl; 
    cout<<" Print current data....................P"<<endl; 
cout<<" Print to output file..................O"<<endl; 
cout<<"****************************************************"<<endl; 
     } 



     int main() 
     { 

char answer; 
char answer2; 
client_db CLIENT[CAPACITY]; //declaring database 
int count = 0; //initializing count 

string filename; 
cout<<"Hello!, this program holds clients call data records."<<endl; 
cout<<"Enter input filename: "; //geting filename 
cin>>filename; 

ifstream input; //declaring an input file stream 

input.open(filename.c_str()); // c_str() converts a C++ string into 
    while(count<CAPACITY && !input.eof()) //reading until the end of the file (eof=end-of-file) 
{ 


    input>>CLIENT[count].cellnum 
    >>CLIENT[count].numofrelay 
    >>CLIENT[count].call_length 
    >>CLIENT[count].discount_aval; 

    count++; 

} 

do 
    { 

    Menu(); 
    cout<<"Please enter a command letter: "<<endl; 
cin>>answer; 
client_db db; 

switch (answer) 
    { 

    case 'A' : 
cout<<"Enter a cellphone number, number of relay stations and the call lenght and if a discount is available: "<<endl; 
cin>>db.cellnum>>db.numofrelay>>db.call_length>>db.discount_aval; 
Add(CLIENT, count, db); 
    break; 
    case 'R' : //Remove function goes here 
    break; 
    case 'S' : // SEARCH function goes here 

     break; 
    case 'P' : Call_stats(CLIENT,count); 
    break; 
     case 'O' : 
Process(CLIENT,count); //how do i set the precision for this? 
Print_DB(CLIENT,count); 
    break; 
} 
cout<<"Would you like to make another command?(y/n): "<<endl; 
    cin>>answer2; 
    } while (answer2 == 'Y' || answer2 == 'y'); 
    cout<<"Goodbye"<<endl; 
return 0; 






     } 

ответ

0

в своей выходной функции

void Call_stats(client_db A[],int count) // prints to screen 
    { 
     cout.setf(ios::fixed, ios::floatfield); 
     cout << setprecision(3); // precision of 3 
    } 

, как для поиска и удаления метод вам нужно чтобы получить номер от пользователя как int , например cin >> number , затем проведите цикл по списку чисел, если пользователь int == список int вызывает функцию удаления с соответствующими параметрами

+0

Мне нужно установить точность к функция, которая печатает в выходной файл, а не на экране. Кроме того, мне нужно использовать строку, а не int для всего номера мобильного телефона. Я сделал то, что вы сказали, но Search wont просто SEARCH! – Kevers

+0

использовать выход вместо cout (по выходу i означает, что объект, который вы указали для потока, в вашем случае t называется выходом) – Kayoti

Смежные вопросы