Please tell me your ideas about the program.
Code:
// By SiavoshKC
//
//This program reads numbers from a text file and analyses them.
//It doesn't use vector maybe for simplfication (?)
#include "stdafx.h"
//This class manages every thing in this program
class Numbers{
public:
Numbers(char name[100]);
long long Sum();
int Ave();
int Mid();
void PrintNums();
int Min();
int Max();
int Count(){
return numCount;
}
~Numbers()
{
if(nums != NULL) delete[] nums;
if(fileOfNumbers != NULL) delete fileOfNumbers;
}
private:
unsigned int numCount;
void ReadFile();
enum errTypeE {FILE_NOT_OPENED=1, ERR_READING_FILE, MEM_ALLOC_FAILED};
void ErrHandling(errTypeE err);
char fileName[100];
ifstream *fileOfNumbers;
int *nums;
};
Numbers::Numbers(char name[100])
{
nums = NULL;
strcpy_s(fileName, name);
fileOfNumbers = new ifstream(fileName);
if(!fileOfNumbers->good()) ErrHandling(FILE_NOT_OPENED);
ReadFile();
fileOfNumbers->close();
}
void Numbers::ReadFile()
{
int temp;
numCount = 0;
//This loop counts the items in the text file
while(!fileOfNumbers->eof()){
cin.clear();
*fileOfNumbers >> temp ;
if(!fileOfNumbers->bad())numCount++;
else ErrHandling(ERR_READING_FILE);
}
try {
nums = new int[numCount+1];
}
catch (...) {
ErrHandling(MEM_ALLOC_FAILED);
}
numCount = 0;
fileOfNumbers->seekg(0);
fileOfNumbers->clear();
//Now saving numbers in memory
while(!fileOfNumbers->eof()){
cin.clear(); //Bad style?
*fileOfNumbers >> nums[numCount] ;
if(!fileOfNumbers->bad())numCount++;
else ErrHandling(ERR_READING_FILE);
}
}
void Numbers::PrintNums()
{
for(int i = 0; i<numCount;i++) cout << nums[i] << endl;
}
void Numbers::ErrHandling(errTypeE err)
{
switch (err) {
case FILE_NOT_OPENED:
cerr << "ERROR: File could not be opened!"<<endl;
this->~Numbers();
exit(err);
break;
case ERR_READING_FILE:
cerr << "ERROR: File can not be read!" << endl;
this->~Numbers();
exit(err);
break;
case MEM_ALLOC_FAILED:
cerr << "ERROR: Memory allocation failed!" << endl;
exit(err);
break;
}
}
int Numbers::Ave()
{
return(Sum()/numCount);
}
long long Numbers::Sum()
{
return accumulate(nums,nums+numCount,0);
}
int Numbers::Max()
{
return *max_element(nums,nums+numCount);
}
int Numbers::Min()
{
return *min_element(nums,nums+numCount);
}
int Numbers::Mid()
{
sort(nums, nums + numCount);
return (nums[numCount/2]);
}
int _tmain(int argc, _TCHAR* argv[])
{
Numbers nums("num.txt");
nums.PrintNums();
cout << "-------------------------------------------------------------------" << endl;
cout << "Count: " << nums.Count() << endl;
cout << "Sum: " << nums.Sum() << endl;
cout << "Average: " << nums.Ave() << endl;
cout << "Mid: " << nums.Mid() << endl;
cout << "Max: " << nums.Max() << endl;
cout << "Min: " << nums.Min() << endl;
cout << "\nPress a key to exit..." << endl;
getch();
return 0;
}
stdafx.h
Code:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <cstdio>
#include <tchar.h>
#include <fstream>
#include <iostream>
#include <numeric>
#include <algorithm>
#include <cstdlib>
#include <conio.h>
using namespace std;
// TODO: reference additional headers your program requires here