Форум программистов, компьютерный форум CyberForum.ru

Календарь С++, вывод по строкам - C++

Восстановить пароль Регистрация
 
Lenka!
0 / 0 / 0
Регистрация: 29.09.2012
Сообщений: 3
09.12.2013, 21:37     Календарь С++, вывод по строкам #1
Задание: На вход подается год и количество столбцов, в которые нужно вывести календарь.

У меня получается только в 1 столбец, и еще проблема, выводит 8 дней в неделю.
С нетерпением жду вашей помощи, заранее спасибо^^.
Вот мой код.

"Date.h"
#ifndef _DATE__H
#define _DATE__H
#include <time.h>
#include <iomanip>
#include <iostream>

using namespace std;
enum Month{
January = 1, February, March, April, May, June,
July, August, September, October, November, December,
};

enum Days{
Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun,
};

class Date{
private:
int d;
int m;
int y;
public:
Date(int d, int m, int y){
this->d = d;
this->m = m;
this->y = y;
}

Date(const Date & date){
* this = date;
}
~Date(){
cout << this->d << this->m << this->y;
}

Date & operator=(const Date & date);
bool IsLeapYear(int year);
int numOfDaysInMonth(int, bool);
int WhatDay(Date date);
void printMonth(int);
void printDayWeeks();
void printDays(int, int);
void skip(int);
};
#endif

"Date.cpp"

#include "Date.h"
using namespace std;

int Date::WhatDay(Date date){
const int dayInWeek = 7;
const int montInYear = 12;
int a = (14 - date.m) / montInYear;
int yy = date.y - a;
int mm = date.m + montInYear * a - 2;
int d = (7000 + (date.d + yy + yy / 4 - yy / 100 + yy / 400 + (31 * mm) / montInYear)) % dayInWeek;
return d;
}

Date & Date::operator=(const Date & date){
d = date.d;
m = date.m;
y = date.y;
return *this;
}
bool Date::IsLeapYear(int year){
return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}


int Date::numOfDaysInMonth(int m, bool leap){
const char* ERROR = "Error in Month";
if (1 == m) return (31);
if (2 == m) if (leap) return (29); else return (28);
if (3 == m) return (31);
if (4 == m) return (30);
if (5 == m) return (31);
if (6 == m) return (30);
if (7 == m) return (31);
if (8 == m) return (31);
if (9 == m) return (30);
if (10 == m) return (31);
if (11 == m) return (30);
if (12 == m) return (31);
else if ((m < 1) || (m > 12))
cout << ERROR;
return 0;
}

void Date::skip(int i){
while(i > 0){
cout << " ";
i--;
}
}





void Date::printMonth(int m){
if(1==m){skip(8); cout << "January"; skip(7); cout << endl;}
if(2==m){skip(8); cout << "February"; skip(6); cout << endl;}
if(3==m){skip(10); cout << "March"; skip(7); cout << endl;}
if(4==m){skip(10); cout << "April"; skip(7); cout << endl;}
if(5==m){skip(11); cout << "May"; skip(8); cout << endl;}
if(6==m){skip(10); cout << "June"; skip(8); cout << endl;}
if(7==m){skip(10); cout << "July"; skip(8); cout << endl;}
if(8==m){skip(8); cout << "August"; skip(6); cout << endl;}
if(9==m){skip(7); cout << "September"; skip(6); cout << endl;}
if(10==m){skip(8); cout << "October"; skip(7); cout << endl;}
if(11==m){skip(8); cout << "November"; skip(6); cout << endl;}
if(12==m){skip(8); cout << "December"; skip(6); cout << endl;}
}

void Date::printDayWeeks(){
cout << " MO TU WE TH FR SA SU " << endl;
}

void Date::printDays(int numDays, int weekDay){
skip(2*weekDay);
int day = 1;
while(day <= numDays){
cout << setw(2) << day << " ";
if (weekDay == 7){
cout << endl;
weekDay = 0;
}
else weekDay++;
day++;

}
cout << endl;
}

"main.cpp"
#include "Date.h"


using namespace std;

int main(){
const char* error1 = "Not enough arguments";
const char* error2 = "Many arguments";

int year = 2014;
int columns = 2;

int currentMonth = 1;
bool leap;
int firstDayInCurrentMonth;
int numDays;

Date date(1, January, year);
leap = date.IsLeapYear(year);
firstDayInCurrentMonth = date.WhatDay(date);

while (currentMonth <= 12){
numDays = date.numOfDaysInMonth(currentMonth, leap);
date.printMonth(currentMonth);
date.printDayWeeks();
date.printDays(numDays, firstDayInCurrentMonth);
currentMonth++;
}
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2013, 21:37     Календарь С++, вывод по строкам
Посмотрите здесь:

Вечный календарь C++
C++ Вечный календарь
C++ календарь
Вывод массива с числами по строкам C++
Календарь в С C++
C++ Календарь
Календарь. Ввод даты - вывод дня недели C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13970 / 8801 / 1226
Регистрация: 24.12.2010
Сообщений: 15,944
09.12.2013, 22:04     Календарь С++, вывод по строкам #2
Lenka!, Пользуйся тегами кода. Иначе никто не поймет и читать не будет. И имей в виду, что эта задача должна решаться кодом в 15-20 строк.

Добавлено через 2 минуты
Грубые ошибки уже в первой десятке строк. Дальше не читал. Да и никто не будет.
Yandex
Объявления
09.12.2013, 22:04     Календарь С++, вывод по строкам
Ответ Создать тему
Опции темы

Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru