2017-06-28 3 views
2
#include <iostream> 
#include <string> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

void getInformationKeyBoard(int, string[], int[]); 
bool openFile(ifstream &infile, string fileName); 
void display(int size, string array[]); 
void read2Array(ifstream &infile, int size, string array[]); 
void printReport(string name[], int score[], int NumberOfStudent); 
int main() 
{ 
    const int size = 1024; 
    string Name[size], scoreFile[size]; 
    int score[size]; 
    int NumberOfStudent; 
    const int SIZE = 7; 

    ifstream inFile; 

    char choice; 
    cout << "You want to enter your scores by your keyboard (A) or from your input (B): "; 
    cin >> choice; 
    if (choice == 'a' || choice == 'A') // It will take information from keyboard 
    { 
     cout << "How many students do you want to enter: "; 
     cin >> NumberOfStudent; 
     getInformationKeyBoard(NumberOfStudent, Name, score); 
     printReport(Name, score, NumberOfStudent); 
    } 

    else if (choice == 'b' || choice == 'B') // It will take information from file 
    { 

     string name; 
     char again = 'Y'; 
     bool close = false; 

     cout << "Enter name of file: "; 
     cin >> name; 
     openFile(inFile, name); 
     read2Array(inFile, SIZE, scoreFile); 
     display(SIZE, scoreFile); 




    } 
    else // If you choice is not A,a or B,b 
     cout << "Your did not follow the right instruction."; 


    cout << endl << endl; 
    system("pause"); 
    return 0; 

} 

// Open file 
bool openFile(ifstream &infile, string fileName){ 
    infile.open(fileName); 
    if (infile) 
     return true; 
    return false; 
} 

void getInformationKeyBoard(int size, string Names[], int scores[]) // Information from keyboard 
{ 
    for (int i = 0; i < size; i++) 
    { 
     cout << i + 1 << ". Student First Name and Last Name: "; 
     cin.ignore(); 
     getline(cin, Names[i]); 
     do 
     { 
      cout << i + 1 << ". Enter the score between 1 and 100: "; 
      cin >> scores[i]; 
     } while (scores[i] > 100 || scores[i] < 0); 

    } 
} 



void read2Array(ifstream &infile, int size, string array[]){ 
    int index = 0; 
    string line; 

    while (getline(infile, line)){ 
     array[index] = line; 
     ++index; 
    } 
} 

// Display array 
void display(int size, string array[]){ 
    for (int index = 0; index < size; ++index){ 
     cout << array[index] << endl; 
    } 
} 


void printReport(string name[], int score[], int NumberOfStudent) 
{ 
    int lowest, highest, mean; 
    cout << "Enter lowest score: "; 
    cin >> lowest; 
    cout << "Enter highest score: "; 
    cin >> highest; 
    cout << "Enter mean score: "; 
    cin >> mean; 

    cout << "================================================================================"; 
    cout << setw(10) << "Number of scores = " << NumberOfStudent << endl; 
    cout << setw(10) << "Lowest Score = " << lowest << endl; 
    cout << setw(10) << "Highest Score = " << highest << endl; 
    cout << setw(10) << "Mean Score = " << mean << endl; 
    cout << "Name" << setw(15) << "Score" << setw(15) << "IsLowest" << setw(15) << "IsHighest" << setw(15) << "Mean" << endl; 
    cout << "-----------------------------------------------------------------" << endl; 
    cout << name[NumberOfStudent] << endl; 
    cout << endl; 

} 

Une section statistique d'en-tête du nombre de scores, des scores les plus bas, les plus élevés et les moyennes, suivie par les détails pour chaque étudiant - un par ligne.Comment faire fonctionner la sortie pour écrire une sortie formatée sur l'écran et un fichier de sortie

Je me suis arrêté à la sortie de l'écran. Je veux que mon regard de sortie comme celui-ci

Number of scores = 3 
Lowest Score = 82 
Highest Score = 92 
Mean Score = 87 
Name Score IsLowest IsHighest >=Mean 
F1 L1 82   Y    N   N 
F2 L2 87   N    N   Y 
F3 L3 92   N    Y   Y 

Répondre

0

Peut-être que vous pourriez passer dans un objet ostream comme paramètre, remplacez toutes les occurences de votre fonction dans Cout avec le nom de cet argument. Ensuite, vous pouvez exécuter la fonction deux fois

printReport(cout, other args); 
printReport(outFile, other args); 

(ou configurer la fonction pour appeler lui-même de sorte que vous ne devez pas entrer Cout chaque fois). Le seul problème avec cette méthode est que je vois que vous saisissez une entrée à l'intérieur de la fonction. Si vous voulez utiliser la méthode ci-dessus, vous devez déplacer certaines choses. Au lieu de cela, je voudrais configurer une fonction différente qui prend une chaîne en entrée et insère la chaîne à la fois cout et votre fichier. Ainsi, plutôt que d'avoir à écrire

cout<<"hi"; 
file<<"hi"; 

Vous pouvez faire

... 
functionName("hi", outfile); 
... 
void functionName(string str, ostream outfile) 
{ 
cout<<str; 
outfile<<str; 
} 

Hope this helps

0

En général, la fonction suivante fonctionnera pour reproduire une sortie de la console dans un fichier.

#include <stdarg.h>  /* va_list, va_start, va_arg, va_end */ 

void print(FILE *f, char const *fmt, ...) { 
    va_list ap; 
    //Normal console print 
    va_start(ap, fmt); 
    vprintf(fmt, ap); 
    va_end(ap); 
    //Printing to file 
    if (f != NULL) { 
     va_start(ap, fmt); 
     vfprintf(f, fmt, ap); 
     va_end(ap); 
    } 
} 

Si vous ne souhaitez que la sortie de la console, ont simplement

print(NULL, "%d\t%d\n", 1, 100);//include any needed C style formatting here

Si vous voulez que la sortie de la console à enregistrer dans un fichier, il suffit de passer un pointeur de fichier approprié comme premier argument.

FILE *fp = fopen("logfile.txt","a"); 
print(fp, "%d\t%d\n, 1, 100);//logs the console output to logfile.txt 

La mise en forme de la fenêtre de console sera également conservée dans le fichier texte.