PDA

Просмотр полной версии : Помогите плиз!! нужна срочная помощь с программой на с++


WeReWoLf777
03.06.2010, 19:38
Нужно сделать перегрузку ввода из файла и функцию чтения из файла, остальное все пашет помогите!! завтро здавать курсач а не пашет
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
using namespace std;

const string SUBJECTS[] = {"Биология", "Химия", "Информатика", "Математика"};
const int COUNT_SUBJECTS = sizeof(SUBJECTS) / sizeof(SUBJECTS[0]);
const string DAYS[] = {"ПН", "ВТ", "СР", "ЧТ", "ПТ", "СБ"};
const int COUNT_DAYS = sizeof(DAYS)/sizeof(DAYS[0]);
const int COUNT_LESSONS = 4;
const int LENGHT = 9;

class Raspisanye
{
int mas[COUNT_DAYS][COUNT_LESSONS];
public:
Raspisanye();
int GetLesson(int day, int lesson);
string GetLessonName(int day, int lesson);
void SetLesson(int subj, int day, int lesson);
int Static();
int StaticMax();
int StaticMin();
double StaticMid();
int GetSubjectNumber();
int GetDaysNumber();
int GetLesNumber();
friend ostream& operator<< (ostream&, Raspisanye&);
friend ofstream& operator<< (ofstream&, Raspisanye&);
friend ifstream& operator>> (ifstream&, Raspisanye&);
void Save();
void Load();
};

Raspisanye::Raspisanye()
{
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
SetLesson(LENGHT, day, lesson);
}
}
}

int Raspisanye::GetLesson(int day, int lesson)
{
return mas[day][lesson];
}

string Raspisanye::GetLessonName(int day, int lesson)
{
int subj = GetLesson(day, lesson);
if (subj == LENGHT)
{
return "Нет_пары";
}
return SUBJECTS[subj];
}


void Raspisanye::SetLesson(int subj, int day, int lesson)
{
mas[day][lesson] = subj;
}

ostream& operator<< (ostream& str, Raspisanye& r)
{
str << " ";
for (int day = 0; day < COUNT_DAYS; day++)
{
str.width(12);
str << DAYS[day];
}
str << endl;
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
str.width(3);
str << (lesson+1);
for (int day = 0; day < COUNT_DAYS; day++)
{
str.width(12);
str << r.GetLessonName(day, lesson);
}
str << endl;
}
return str;
}
ofstream& operator<< (ofstream& str, Raspisanye& r)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
for (int day = 0; day < COUNT_DAYS; day++)
{
str << r.GetLesson(day, lesson);
}
str << endl;
}
return str;
}
ifstream& operator>> (ifstream& str, Raspisanye& r) //не пашет перегрузка помогите!!!!
{
for (int i = 0; i < COUNT_LESSONS; i++)
{
for (int j = 0; j < COUNT_DAYS; j++)
{
str >> r.SetLesson(subj, day, lesson);
}
str << endl;
}
return str;
}
int Raspisanye::Static()
{
int s = 0;
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
if (GetLesson(day, lesson) != LENGHT)
{
s++;
}
}
}
return s;
}
int Raspisanye::StaticMax()
{
int max1[COUNT_DAYS];
int s = 0;
int max = 0;
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
if (GetLesson(day, lesson) != LENGHT)
{
s++;
}
}
max1[day]=s;
s=0;
}
max = max1[0];
for (int i = 0; i < COUNT_DAYS; i++)
{
if (max1[i] > max)
{
max = max1[i];
}
}
return max;
}
int Raspisanye::StaticMin()
{
int min1[COUNT_DAYS];
int s = 0;
int min = 0;
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
if (GetLesson(day, lesson) != LENGHT)
{
s++;
}
}
min1[day]=s;
s=0;
}
min = min1[0];
for (int i = 0; i < COUNT_DAYS; i++)
{
if (min1[i] < min)
{
min = min1[i];
}
}
return min;
}
double Raspisanye::StaticMid()
{
double mid1[COUNT_DAYS];
double s = 0;
double mid = 0;
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
if (GetLesson(day, lesson) != LENGHT)
{
s++;
}
}
mid1[day] = s;
s = 0;
}
for (int day = 0; day < COUNT_DAYS; day++)
{
s = s + mid1[day];
}
mid = ( s / COUNT_DAYS);
return mid;
}
int Raspisanye::GetSubjectNumber()
{

for (int k = 0; k < COUNT_SUBJECTS; k++)
{
cout << (k+1) << " - " << SUBJECTS[k] << endl;
}

int y = 0;
while (!((y>=1) && (y<=COUNT_SUBJECTS)))

{
cout << "Введите номер дисциплины ";
cin >> y;
}

return (y-1);
}

int Raspisanye::GetDaysNumber()
{
int x = 0;
while (!((x>=1) && (x<=COUNT_DAYS)))

{
cout << "Введите номер дня ";
cin >> x;
}

return (x-1);
}

int Raspisanye::GetLesNumber()
{
int y = 0;
while (!((y>=1) && (y<=4)))
{
cout << "Введите номер пары ";
cin >> y;
}
return (y-1);
}
void Raspisanye::Save()
{
ofstream myFile("text.txt");
myFile << (*this);
myFile.close();
}
void Raspisanye::Load() // не работает помогите (функция ввода массива в програму из файла)
{
string s;
ifstream myFS("text.txt");

while(myFS>>s)
{
getline(myFS,s);
for (int i = 0; i < 6; i++)
{
cout<<s[i];
}

}
/*
for (int day = 0; day < COUNT_DAYS; day++)
{
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
myFS.width(20);
myFS >> mas[day][lesson];

}
}
cout << endl;*/
myFS.close();
}

void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Raspisanye r;
r.Load();

cout << r;
while (true)
{
int numDays = r.GetDaysNumber();
int numLes = r.GetLesNumber();
int numSubject = r.GetSubjectNumber();
r.SetLesson(numSubject, numDays, numLes);
cout << r;
int numStatic = r.Static();
int numMax = r.StaticMax();
int numMin = r.StaticMin();
double numMid = r.StaticMid();
cout << "Общее число пар в неделю - " << numStatic << endl;
cout << "Максимальное колличество пар в день - " << numMax << endl;
cout << "Минимальное колличество пар в день - " << numMin << endl;
cout << "Среднее колличество пар в день - " << numMid << endl;
cout << "Введите 1 для выхода из программы или 0 для продолжения работы " << endl;
int c;
cin >> c;
if (c==1) break;
}
r.Save();
}

ImmortalWarrior
05.06.2010, 02:03
У меня скомпилилось после нижеуказанных исправлений, но дальше не копал.
Укажу направления:
1) Перегруженная операция ввода из файлового потока может быть такой:

ifstream& operator>> (ifstream& str, Raspisanye& r)
{
int subj;
for (int lesson = 0; lesson < COUNT_LESSONS; lesson++)
{
for (int day = 0; day < COUNT_DAYS; day++)
{
str >> subj;
r.SetLesson(subj,day,lesson);
}
}
return str;
}

2) Тогда, с учетом этого, функция загрузки из файла может быть такой:

void Raspisanye::Load()
{
ifstream myFS("text.txt");
myFS >> (*this);
myFS.close();
}

3) Обязательно нужны проверки на недопустимые входные данные, неверные операции ввода/вывода; обработка исключительных ситуаций.

4) "LENGHT" - нет такого слова в английском, правильно "LENGTH" (да, я зануда!);

WeReWoLf777
06.06.2010, 23:28
спс большое)