微信小程序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去调试
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)