栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 6:MVC日历系统(项目)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 6:MVC日历系统(项目)

文章目录
  • 1. 日历系统
  • 2. 模式结构图
  • 3. MVC关于C++头文件互相引用问题解决
  • 4. 源代码

1. 日历系统

获得当前时间

#include
#include//time_t  tm
#include
using namespace std;

class CDateTime
{
private:
	//年 月 日 时 分 秒
	int year;
	int month;
	int day;
	int hour;
	int min;
	int sec;
public:
	CDateTime()
	{
		year = month = day = 1;
		hour = min = sec = 0;
	}
	//获得当前时间
	void Now()
	{
		time_t tn;
		tm tmp;
		time(&tn);
		localtime_s(&tmp, &tn);
		year = tmp.tm_year + 1900;
		month = tmp.tm_mon + 1;
		day = tmp.tm_mday;
		hour = tmp.tm_hour;
		min = tmp.tm_min;
		sec = tmp.tm_sec;
	}
	void PrintDate() const
	{
		printf("year:%d,month:%d,day:%d.n", year, month, day);
	}
};
int main()
{
	CDateTime cd;
	cd.Now();
	cd.PrintDate();
	return 0;
}

运行结果

2. 模式结构图


3. MVC关于C++头文件互相引用问题解决

4. 源代码

ModelDate.h

#ifndef CONTROLLER_H
#define CONTROLLER_H

#include"ViewDate.h"
#include"ModelDate.h"

class ModelDate;
class ViewDate;
class Controller
{
private:
	ModelDate* model;//模式指针
	ViewDate* view;//视图指针
public:
	Controller();
	~Controller();
	void SetModel(ModelDate* pmodel);
	void SetView(ViewDate* pview);
	void Run();
	void Now();
	void NextMonth();
	void PrevMonth();
	void NextYear();
	void PrevYear();
};
#endif 

ModelDate.cpp

#include // time.h
#include"ModelDate.h"

bool ModelDate::Is_Leap(int y)
{
	return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
int ModelDate::GetYM_Day(int y, int m)
{
	const static int day[] = { 29,31,28,31,30,31,30,31,31,30,31,30,31 };
	//                         0  1  2  3  4   5  6  7	8  9 10 11 12
	if (2 == m && Is_Leap(y))
	{
		m = 0;
	}
	return day[m];
}

int ModelDate::Get_Week(int year, int month,int d)
{
	int c = year / 100;
	int y = year % 100;
	int m = month;
	if (month == 1 || month == 2)
	{
		m += 12;
	}
	return (y + y / 4 + c / 4 - 2 * c + 26 * (m + 1) / 10 + d - 1) % 7;
}

ModelDate::ModelDate()
	:year(1),month(1),mday(1)
{
	Now();
}
ModelDate::~ModelDate() {}

void ModelDate::SetVeiw(ViewDate* pview)
{
	view = pview;
}

int ModelDate::GetYear() const
{
	return year;
}
int ModelDate::GetMonth() const
{
	return month;
}
int ModelDate::GetMday()const
{
	return mday;
}
int ModelDate::GetWeek() const
{
	return oneweek;
}
int ModelDate::GetMdays() const
{
	return mdays;
}
void ModelDate::Now()
{
	time_t tmp;
	tm tnode;
	time(&tmp);
	localtime_s(&tnode, &tmp);
	year = tnode.tm_year + 1900;
	month = tnode.tm_mon + 1;
	mday = tnode.tm_mday;
	curweek = tnode.tm_wday;
	mdays = GetYM_Day(year, month);
	oneweek = Get_Week(year, month);
	//view->Event(this);
}
void ModelDate::NextMonth()
{
	if (++month > 12)
	{
		year += 1;
		month = 1;
	}
	mday = 1;
	mdays = GetYM_Day(year, month);
	curweek = oneweek = Get_Week(year, month);
	//view->Event(this);
}
void ModelDate::PrivMonth()
{
	if (--month < 1)
	{
		year -= 1;
		month = 12;
	}
	mday = 1;
	mdays = GetYM_Day(year, month);
	curweek = oneweek = Get_Week(year, month);
	//view->Event(this);
}
void ModelDate::NextYear()
{
	year += 1;	// month; mday;
	curweek = Get_Week(year, month, mday);
	oneweek = Get_Week(year, month);
	mdays = GetYM_Day(year, month);
	//view->Event(this);
}
void ModelDate::PrevYear()
{
	if (--year < 1) return;
	curweek = Get_Week(year, month, mday);
	oneweek = Get_Week(year, month);
	mdays = GetYM_Day(year, month);
	//view->Event(this);
}

ViewDate.h

#ifndef VIEWDATE_H
#define VIEWDATE_H
#include"ModelDate.h"

class ViewDate
{
public:
	int Menum();
	void PrintDate(int year,int month,int mday,int oneweek,int mtotal) const;
	void Event(ModelDate * pmode);
};
#endif 

ViewDate.cpp

#include
#include
using namespace std;

#include"ModelDate.h"
#include"ViewDate.h"

//事件响应
void ViewDate::Event(ModelDate* pmode)
{
	PrintDate(pmode->GetYear(), pmode->GetMonth(), pmode->GetMday(),
		pmode->GetWeek(), pmode->GetMdays());
}
void ViewDate::PrintDate(int year, int month, int mday, int oneweek,int mtotal)const
{
	int n = mtotal + oneweek;//总的输出次数,总天数+星期
	int d = 1;
	printf("日   一   二   三   四   五   六n");
	for (int i = 1; i <= n; ++i)
	{
		if (i <= oneweek)
		{
			printf("t");
		}
		else
		{
			printf("%d", d++);
		}
		if (i % 7 == 0) printf("n");
	}
}
int ViewDate::Menum()
{
	printf("************欢迎使用LoveHoneyYou的日历**********n");
	printf("*******************当前日历***********************n");
	printf("**********   0.  按0退出            **********n");
	printf("**********   1.  获取下一个月的日历  **********n");
	printf("**********   2.  获取上一个月的日历  **********n");
	printf("**********   3.  获取下一个年的日历  **********n");
	printf("**********   4.  获取上一个年的日历  **********n");
	printf("**********   5.  获取当前日期的日历  **********n");
	int n = 0;
	printf("请输入你的选择-> ");
	scanf_s("%d", &n);
	return n;
}

Controller.h

#ifndef CONTROLLER_H
#define CONTROLLER_H

#include"ViewDate.h"
#include"ModelDate.h"

class ModelDate;
class ViewDate;
class Controller
{
private:
	ModelDate* model;//模式指针
	ViewDate* view;//视图指针
public:
	Controller();
	~Controller();
	void SetModel(ModelDate* pmodel);
	void SetView(ViewDate* pview);
	void Run();
	void Now();
	void NextMonth();
	void PrevMonth();
	void NextYear();
	void PrevYear();
};
#endif 

Controller.cpp

#include
using namespace std;
#include"Controller.h"

Controller::Controller() {}
Controller::~Controller() {}

void Controller::SetModel(ModelDate* pmodel)
{
	model = pmodel;
}
 
void Controller::SetView(ViewDate* pview)
{
	view = pview;
}

void Controller::Run()
{
	int select = 0;
	//轮询
	do
	{
		system("cls");
		select = view->Menum();
		switch (select)
		{
		case 0: break;
		case 1:	NextMonth(); break;
		case 2: PrevMonth(); break;
		case 3: NextYear(); break;
		case 4: PrevYear(); break;
		case 5: Now(); break;
		default: printf("input error n");
		}
	} while (select != 0);

}
void Controller::Now()
{
	model->Now();
}
void Controller::NextMonth()
{
	model->NextMonth();

}
void Controller::PrevMonth()
{
	model->PrivMonth();
}
void Controller::NextYear()
{
	model->NextYear();
}
void Controller::PrevYear()
{
	model->PrevYear();
}

TestMain.cpp

#include
using namespace std;
#include"ViewDate.h"
#include"ModelDate.h"
#include"Controller.h"

class Client
{
public:
	Client()
	{
		contr.SetModel(&model);
		contr.SetView(&view);
		model.SetVeiw(&view);
	}
	void Run()
	{
		contr.Run();//loop;
	}
private:
	ModelDate model;
	ViewDate  view;
	Controller contr;
};
int main()
{
	Client client;
	client.Run();
	
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948343.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号