微信小程序之自定义日历组件

微信小程序之自定义日历组件,第1张

我们单位实行的大小周工作制,即大周休息2天,小周消息一天。因这点小特殊,总有同事常记错周六这天是否上班。也因这点,在程序上需要特别体现出大小周的提示,于是需要设计一个日历组件,并在日历上标注出排班名称和大小周。最终闷陪实现图如下:

微信小程序demo提供了一个简单的日历组件,vant也提供了一个日历组件,在github上也有一些日历组件,我试用了一番,都多少存在一些不符合之处。重点说一下vant,它有几个问题:一是加载数据太大,一运行就加载至少一年以上的数据;二是行罩渣样式不好控制,大小相档悄修改一下就会变形;三是在日期上下方加文字不方便。

因为没有找到太好的组件可以引用,就自己想设计一个能方便控制的,遂有下面的设计,

1、采用grid组件显示日期,分三行,中间一行为日期具体天的数字,上面一行显示大小周提示、下面一行显示排班名称

2、采用scroll-view动态包含grid数目

3、一行显示几天,可以动态设置

1、日历头部

2、日历内容

3、日历结构体

4、具体每个月的日历算法

获取某个月的第一天和最后一天,再获取每天的星期数,循环放到grid结构体中

优点:一是加载数据量少,可控制;二是显示内容丰富,可以控制;三是也是显示可以使用slot,更加丰富

缺点:一不是专业日历组件,样式简单了些;二是加载数据量有限,grid自身也是一个组件,加载多了额外的开销肯定大起来。

兄弟,闲着没事,帮你做了一下,在VC6.0上调试通过

有什么不满意的,你自己再改改

//====================================

#include <iostream>

using namespace std

//Date类的定义

class Date

{

public:

Date(){year=0month=0day=0}

void Display()//输出函数声明

void AddOneDay()//加一天函数声明

void SetDay()//设置日期函数声明

friend bool Legal(int y, int m, int d)//声明判断日期是否合法函数为友元函数,因为成员函数调用了该函数

protected:

int year

int month

int day

}

//=============================================

void Date::Display()

{

cout <<day <<"/" <<month <<"/"  <<year <<endl

}

//============================================

void Date::AddOneDay()

{

if(Legal(year,month,day+1))

day++

else if(Legal(year,month+1,1))

month++,day=1

else if(Legal(year+1,1,1))

day=1,month=1,year++

}

//=======================================

void Date::SetDay()

{

int y

int m

int d

cout<<"请输入年 月 日,中间用空格圆睁雀隔开:"

cin>>y>>m>>d

while(!Legal(y,m,d))

{

cout<<"您输入的日期不合法,请重新设置:"

cin>>y>>m>>d

}

year=y

month=m

day=d

}

//===========================================

bool Legal(int y, int m, int d)

{

if(y>9999||y<1||d<1||m<1||m>12)

return false

int dayLimit=31

switch(m)

{

case 4:

case 6:

case 9:

case 11:

dayLimit--

}

if(m==2) dayLimit = ((y%4==0&&y%100!=0)||y%400==0) ? 29 : 28

return (d>dayLimit)? false : true

}

//=================================================

void IsLeapYear()

{

int y

cout<<"请输入要判断的年份:"

cin>>y

if((y%4==0&&y%100!=0)||y%400==0)

cout<<y<<"  是闰年"<<endl

else

cout<<y<<"  不是闰年"<<endl

}

//===============================================

void Week()// 基姆拉尔森计算公式

{

int y

int m

int d

cout<<"请输入年 月 日,中间用空格隔开:"

cin>>y>>m>>d

while(!Legal(y,m,d))

{

cout<<"输入日期不合法橘早!请重新输入日期:"

cin>>y>>m>>d

}

if((m==1)||(m==2))

{

m+=12

y--

}

int week= int(((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7)

switch(week)

{

case 0:

cout<<"今天是星早肢期日"<<endlbreak

case 1:

cout<<"今天是星期一"<<endlbreak

case 2:

cout<<"今天是星期二"<<endlbreak

case 3:

cout<<"今天是星期三"<<endlbreak

case 4:

cout<<"今天是星期四"<<endlbreak

case 5:

cout<<"今天是星期五"<<endlbreak

case 6:

cout<<"今天是星期六"<<endlbreak

}

}

//===============================================

int main()

{

cout<<"********************************************************************************\n"

cout<<"欢迎使用简单电子日历,请输入功能选择:(0-5)"<<endl<<endl

cout<<"0.退出 1.设置日期 2.输出日期 3.日期加一天 4.查看任一天星期几 5.判断是否闰年"<<endl

cout<<"********************************************************************************\n"

int num

Date date

cin>>num//输入功能选择

if(!(num==0 ||num==1 || num==2 || num==3 || num==4 || num==5))

{

cout<<"您输入有误,请重新输入功能选择:(0-5)"

cin>>num

}

else

{

do

{

if(num==0) break

if(num==1) date.SetDay()

if(num==2) date.Display()

if(num==3)

{

cout<<"加一天前的日期:"

date.Display()

date.AddOneDay()//加一天

cout<<endl<<"加一天后的日期:"

date.Display()

}

if(num==4) Week()

if(num==5) IsLeapYear()

cout<<"********************************************************************************\n"

cout<<"欢迎使用简单电子日历,请输入功能选择:(0-5)"<<endl<<endl

cout<<"0.退出 1.设置日期 2.输出日期 3.日期加一天 4.查看任一天星期几 5.判断是否闰年"<<endl

cout<<"********************************************************************************\n"

cin>>num

if(!(num==0 ||num==1 || num==2 || num==3 || num==4 || num==5))

{

cout<<"您输入有误,请重新输入功能选择:(0-5)"

cin>>num

}

}while(num!=0)

}

cout<<"\t欢迎下次使用!"<<endl

return 0

}

你直接复制粘贴到你的VC6.0去调试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12326364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存