2013-02-19 18 views
0

我有一個程序用於管理名爲「client_DB」的記錄數據庫。數組「client_DB」由客戶手機通話記錄組成。每個客戶呼叫記錄包含八個字段,如下所示:1)十位手機號碼(字符串,不帶破折號),2)用於撥打電話的中繼站數量(整數),3)長度(4)呼叫的淨費用(雙倍),5)稅率(雙倍),6)通話稅(雙倍),7)通話的總費用(雙倍)和8 )字符串字段名爲「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); 

,但我在哪裏可以把它? 此外,我很想知道如何添加列標題到輸出文件上打印的內容。有一個稱爲Process的函數進行計算,我如何爲這些計算設置精度?我瞭解的一切,謝謝! 這裏我到目前爲止的代碼:(!很抱歉,如果我對如何正確地提出問題的任何錯誤)

#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用相應參數調用remove函數

+0

我需要設置精度到了功能打印到輸出文件而不是屏幕。此外,我需要使用一個字符串,而不是整個手機號碼的整數。我做了你所說的,但搜索不會簡單地搜索! – Kevers 2013-02-20 04:33:06

+0

使用輸出,而不是cout(通過輸出我的意思是你聲明forstream的對象在你的情況t稱爲輸出) – Kayoti 2013-02-20 17:54:35

相關問題