博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言日历系统的设计与部分实现
阅读量:4618 次
发布时间:2019-06-09

本文共 1499 字,大约阅读时间需要 4 分钟。

c语言实现日历系统,sqlite保存数据库,发现问题不少,特别是数据库的设计,另外,c语言的字符拼接问题也很蛋疼,问题起源如下:

起源:在日历中有个功能就是可以设置重复的事件,比如我在日历中加入一个

事件,然后可以设置这个事件按天,或者按星期,或者按月,或者按年重复提醒。
如果每个事件都是一条记录的话,肯定不可行,会导致过多的记录。但如果
是所有重复事件加个标志位使它成为一条记录的话也有个问题。就是需求中在
这一系列重复事件中我可以单独改一个事件而不影响其他事件。举个例子,我建一个事件,然后指定
这个事件在2008年12月份中的每天的12点,那我在日历中12月的每一天都可以看到这个
事件,然后我可以单独修改12月22日的事件而不影响其他的事件。这样肯定不能用一条记录。
想请教下数据库该如何设计,可以参考google日历的事件重复功能,功能差不多

解决方案:

分析如下:

1、你设计的不是闹钟,所以预订时间是没什么作用的,只是一个显示属性而已。
2、按天实际上就是按星期或者按月。。。,只是发生的日期点是“周1、周2。。。、周日”
3、实际有效的设定是按周、按月、按年。
4、日历上的每天都要按上面的周期得到属性值,比如今天是“周日”、“28日”、“12月28日”
设计如下:
1、t_memo 备忘录主表:
id int 主键
userid  int 表示属于哪个用户
begindate  date  起始日期(设定开始日期)
enddate    date  结束日期(如果为空表示一直有效,不过为了编程方便,最好是放入一个非常大的日期,比如2099年12月31日)
memomessage  varchar  备忘录内容
alarmtime  time  闹钟时间
type     int  (1表示按周、2表示按月、3表示按年。。。)
2、t_schedule 定时表
id int 主键
memoid  int  外键关联备忘录主表的主键 
validdate varchar  有效日期(按周就存入1/2/3/.../7,按月就1/2/....31/,按年就存入0101/0102/....1231)
编程(以月历方式):
从当月1号开始,计算每天的周值、月值、年值(要跟定时表的validdate匹配)
到数据库中查找满足条件的memomessage,SQL可能会是:
select m.* from t_memo m,t_schedule s
where m.id=s.memoid and begindate<=:today and enddate>=:today
and ((m.type=1 and s.validdate=:weekvalue) or (m.type=2 and s.validdate=:monthvalue) or (m.type=3 and s.validdate=:yearvalue))

 

 

 

本人采用c语言进行实现,只采用了一张表,简化了主从表查询,也达到了类似的效果

表设计如下:

create table if not exists mytimetable(id integer primary key autoincrement,startTime datetime,endTime datetime,alarmtime datetime,eventDes varchar(128),repeatOption int,validdate varchar(256))"

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/pengkelian/p/3699476.html

你可能感兴趣的文章
各种浏览器的user-agent和
查看>>
Restful levels
查看>>
Phonegap移动开发:布局总结(一) 全局
查看>>
Java 变参函数的实现
查看>>
nrf51 SDK自带例程的解读
查看>>
SESSION技术
查看>>
数据结构(五)之直接插入排序
查看>>
SQL函数——LENGTH()和LENGTHB()
查看>>
vim - manual -个人笔记
查看>>
详解Javascript中prototype属性(推荐)
查看>>
angularjs实现首页轮播图
查看>>
Git 对象 和checkout 和stash的笔记
查看>>
团队项目总结2-服务器通信模型和顺序图
查看>>
hdu 1085 Holding Bin-Laden Captive!
查看>>
[周记]8.7~8.16
查看>>
递归定义
查看>>
kindeditor 代码高亮设置
查看>>
图的邻接表存储
查看>>
2018 leetcode
查看>>
各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
查看>>