个人日程管理系统.docx
- 文档编号:30082859
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:19
- 大小:305.05KB
个人日程管理系统.docx
《个人日程管理系统.docx》由会员分享,可在线阅读,更多相关《个人日程管理系统.docx(19页珍藏版)》请在冰豆网上搜索。
个人日程管理系统
沈阳航空航天大学
课程设计报告
课程设计名称:
软件综合课程设计
课程设计题目:
个人日程信息管理系统
院(系):
计算机学院
专业:
计算机科学与技术
班级:
24010104
学号:
2012040101155
姓名:
潘禹婷
指导教师:
张翼飞
说明:
结论(优秀、良好、中等、及格、不及格)作为相关教环节考核必要依据;格式不符合要求;数据不实,不予通过。
报告和电子数据必须作为实验现象重复的关键依据。
学术诚信声明
本人声明:
所呈交的报告(含电子版及数据文件)是我个人在导师指导下独立进行设计工作及取得的研究结果。
尽我所知,除了文中特别加以标注或致谢中所罗列的内容以外,报告中不包含其他人己经发表或撰写过的研究结果,也不包含其它教育机构使用过的材料。
与我一同工作的同学对本研究所做的任何贡献均己在报告中做了明确的说明并表示了谢意。
报告资料及实验数据若有不实之处,本人愿意接受本教学环节“不及格”和“重修或重做”的评分结论并承担相关一切后果。
本人签名:
日期:
年月日
沈阳航空航天大学
课程设计任务书
课程设计名称
软件综合课程设计
专业
计算机科学与技术
学生姓名
潘禹婷
班级
24010104
学号
2012040101155
题目名称
个人日程信息管理系统
起止日期
2015
年
12
月
21
日起至
2016
年
1
月
15
日止
课设内容和要求:
内容:
设计并实现一个个人日程信息管理系统,可以记录并管理个人的所有工作日程,并可以按设定时间进行提醒。
要求:
1.支持多种图形化日历显示(按月,按天)等
2.支持普通任务和循环任务安排
3.提供多种查询手段
4.编程工具自定,但必须采用图形化界面,后台数据采用数据库管理
5.尽量采用面向对象的程序设计方法
教研室审核意见:
教研室主任签字:
指导教师(签名)
年
月
日
学生(签名)
年
月
日
1需求分析
1.1项目背景
随着计算机技术的飞速发展,手机应用的迅速推广,手机给人们的日常生活、工作、学习带来了十分巨大的影响,手机改变了人们的生活,目前不管男女老少都在用智能机,苹果手机用户尤为多,一款实用的APP对人们也是带来很大的帮助,因此我们采用语Objective-C言开发一个实用的个人日程管理的APP,以便提醒大家一些重要的事情不要忘记,比如开会,生日什么的事情,有了这款APP,它会按时的提醒你去做该事情,你可以设置提醒一次,每天提醒,每周提醒。
1.2项目目标
1.通过关于管理系统的实现,使个人的日程管理更加完善。
2.可以编辑日程事务,提醒行程。
3.可以提醒备忘事项,大大提高了办事效率。
1.3用户需求
(1)功能需求:
本系统完成对自己昨天的日程进行记录,日后日程安排以及查看修改工作的提醒。
(2)权限需求:
用户可以对系统中所有的数据进行查看、添加、修改和删除等操作。
(3)系统安全性需求:
因为个人日程管理只是用于个人适用,因此,可以不用进行登录或其他用户验证等安全性操作。
1.4功能需求
(1)支持多种图形化日历显示(按月,按天)等
(2)持普通任务和循环任务安排
(3)提供多种查询手段
(4)编程工具自定,但必须采用图形化界面,后台数据采用数据库管理
1.5开发环境
操作系统:
MacOSX10.10.5
开发软件:
Xcode7.2
数据库:
SQLite
2设计
2.1logo的设计
由于是我自己设计的APP,用来提醒自己日程的事情,我选用我自己的照片来做这个logo。
名字为Mynote。
2.2首页界面
首页界面为我的记事本的呈现,是一个列表,可以进行查看,添加(+为添加),修改,删除。
2.3事件信息
点击事件进入界面。
可以查看,可以修改,选择事件类型,事件提醒时间,
3系统设计
3.1设计目标
个人日程管理系统是对已完成的工作进行记录,对未完成的工作进行有效、合理的安排,提高工作效率。
3.2系统角色
本系统的角色主要就是用户本身,该用户可以对自己要办的事进行提醒设置,且只有用户一个角色。
4UI及数据库设计
4.1主界面UI设计
主界面是一个tableView,上方是一个NavigationBar,”编辑”和”+”分别是NavigationBar的LeftBarButtonItem和RightBarButtonItem。
如图4.1
图4.1
4.2时间选择及日记类型UI设计
如图4.2此界面主要包括四种UI控件,UILabel、UIButton、UITextView、UITextField;
日期以及日记类型的显示部分用的是UILabel,并且将背景设置为黄色;其后面的选择按钮是UIButton,可以添加点击事件,点击后可以进行时间日期的选择和日记类型选择,如图4.3和图4.4;
图4.2
图4.3图4.4
标题输入和正文输入分别应用的是UITextField和UITextView;为什么要使用UITextView呢?
因为UITextField无法进行自助的判断进行换行,只能规定每行的固定的字符数进行换行。
而UITextView则可以自主进行判断,根据其设置的宽度进行换行。
最下一部分的三个Button分别是设置的提醒周期,每天提醒,只提醒一次,以及每周提醒。
同时,在界面的输入时会进行相应的处理,例如:
如果标题输入栏为空时,则会进行提示重新输入标题。
当添加提醒事件成功后,会利用通知中心进行通知,同时利用单例进行存值。
当添加界面退出后,主界面会重新进行加载,将刚刚添加的事件显示在tableView上。
4.3笔记分类查找UI设计
添加的提醒事件都有各自的属性,可以通过属性进行分类显示。
4.4数据库管理
SQLite:
是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。
它是D.RichardHipp建立的公有领域项目。
它的设计目标是嵌入式的,而且目前已经在很多嵌入式中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
SQLite第一个Alpha版本诞生于2000年5月至2015年已经有15个年头。
本次课设中只是将SQLite的属性按行进行存储,同时,可以实现数据的增删改查等操作。
SQLite是本地数据持久化方式的一种,与其他方式一样,当程序被彻底删除时,本地持久化的数据也会随之进行删除。
5、系统实现
系统主要分为两大部分:
一、主界面模块;二、选择输入模块;三、消息推送
一、主界面模块:
(1)、主界面的tableView显示数据,数据来源于本地数据库,这几部分主要实现的代码如下:
数据的获取:
DatabaseControl*database=[[DatabaseControlalloc]init];
collection=[NSMutableArrayarrayWithArray:
[databasegetInfos]];
tableView的创建和数据显示:
因为当前的ViewController是继承UITableViewController的,所以不用再次创建tableView,只用self.tableView代替便可。
同时,有三个方法是必须实现的
#pragmamark以下的三个方法是必须实现的三个方法
//返回的tableView的组数
-(NSInteger)numberOfSectionsInTableView:
(UITableView*)tableView{
return1;
}
//返回的是每组里面有多少个元素
-(NSInteger)tableView:
(UITableView*)tableViewnumberOfRowsInSection:
(NSInteger)section{
returncollection.count;
}
-(UITableViewCell*)tableView:
(UITableView*)tableViewcellForRowAtIndexPath:
(NSIndexPath*)indexPath{
}
(2)UIPopoverPresentationController:
点击左上角的编辑按钮,则会弹出PopoverPresentationController,从而进行选择。
弹出的实现代码是:
OptionViewController*target=[[OptionViewControlleralloc]init];
target.modalPresentationStyle=UIModalPresentationPopover;
target.preferredContentSize=CGSizeMake(200,300);
UIPopoverPresentationController*pop=target.popoverPresentationController;
UIView*view=[[UIViewalloc]initWithFrame:
CGRectMake(64,500,[UIScreenmainScreen].bounds.size.width,100)];
pop.sourceRect=CGRectMake(100,100,[UIScreenmainScreen].bounds.size.width,100);
pop.sourceView=view;
pop.permittedArrowDirections=UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown|UIPopoverArrowDirectionLeft|UIPopoverArrowDirectionRight;
pop.delegate=self;
[selfpresentViewController:
targetanimated:
YEScompletion:
nil];
二、选择输入模块
1、时间选择器:
if(datePicker==nil){
datePicker=[[UIDatePickeralloc]init];
//设置选择器的样式,有时间的,有日期的,有时间和日期的,此处选出的时间可以直接赋值给消息推送的fireDate
datePicker.datePickerMode=UIDatePickerModeDateAndTime;
datePicker.frame=CGRectMake(10,30,335,216);
datePicker.date=[NSDatedate];
}
UIAlertController*alertController=[UIAlertControlleralertControllerWithTitle:
@"请选择日期:
"message:
@"\n\n\n\n\n\n\n\n\n\n\n"preferredStyle:
UIAlertControllerStyleActionSheet];
[alertController.viewaddSubview:
datePicker];
UIAlertAction*actionSelect=[UIAlertActionactionWithTitle:
@"确定"style:
UIAlertActionStyleDestructivehandler:
^(UIAlertAction*action){
currentDate=datePicker.date;
lblDate.text=[formatterstringFromDate:
currentDate];
}];
[alertControlleraddAction:
actionSelect];
UIAlertAction*actionCancel=[UIAlertActionactionWithTitle:
@"取消"style:
UIAlertActionStyleCancelhandler:
nil];
[alertControlleraddAction:
actionCancel];
[selfpresentViewController:
alertControlleranimated:
YEScompletion:
nil];
2、标题输入框
tfTitle=[[UITextFieldalloc]init];
tfTitle.frame=CGRectMake(20,164,335,30);
tfTitle.borderStyle=UITextBorderStyleRoundedRect;
tfTitle.placeholder=@"请输入标题";
[self.viewaddSubview:
tfTitle];
3、内容输入框
tfContent=[[UITextViewalloc]init];
tfContent.frame=CGRectMake(20,204,335,200);
tfContent.textAlignment=NSTextAlignmentLeft;
tfContent.contentMode=UIViewContentModeTop;
tfContent.isAccessibilityElement=YES;
tfContent.layer.borderWidth=1;
tfContent.layer.borderColor=[[UIColorblackColor]CGColor];
tfContent.userInteractionEnabled=YES;
[self.viewaddSubview:
tfContent];
三、消息推送
1、在appdelegate中进行注册:
-(void)sendLocalNotificationWithDate:
(NSDate*)date
{
notification.fireDate=date;
//notification.applicationIconBadgeNumber+=1;
[[UIApplicationsharedApplication]scheduleLocalNotification:
notification];
[[UIApplicationsharedApplication]presentLocalNotificationNow:
notification];
}
//设置本地通知
-(void)registerLocalNotification{
notification=[[UILocalNotificationalloc]init];
//时区
notification.timeZone=[NSTimeZonedefaultTimeZone];
//设置重复的间隔
notification.repeatInterval=kCFCalendarUnitSecond;
//通知内容
notification.alertBody=@"你有一个提醒通知";
//待机界面的滑动动作提示
notification.alertAction=@"打开应用";
//通过点击通知打开应用时的启动图片
notification.alertLaunchImage=@"Default";
//通知被触发时播放的声音
notification.soundName=UILocalNotificationDefaultSoundName;
//通知参数
NSDictionary*userDict=[NSDictionarydictionaryWithObject:
@"您有一条前台通知"forKey:
@"Key"];
//设置userinfo,以便在撤销通知的时候调用
notification.userInfo=userDict;
//如果已经获得发送通知的授权则创建本地通知,否则请求授权(注意:
如果不请求授权在设置中是没有对应的通知设置项的,也就是说如果从来没有发送过请求,即使通过设置也打不开消息允许设置)
if([[UIApplicationsharedApplication]respondsToSelector:
@selector(registerUserNotificationSettings:
)]){
UIUserNotificationTypetype=UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound;
UIUserNotificationSettings*settings=[UIUserNotificationSettingssettingsForTypes:
typecategories:
nil];
[[UIApplicationsharedApplication]registerUserNotificationSettings:
settings];
//通知重复提示的单位,可以是天、周、月
notification.repeatInterval=NSCalendarUnitDay;
}else{
//通知重复提示的单位,可以是天、周、月
notification.repeatInterval=NSCalendarUnitDay;
}
}
//本地通知回调函数,当应用程序在前台时调用
-(void)application:
(UIApplication*)applicationdidReceiveLocalNotification:
(UILocalNotification*)notification{
//这里真实需要处理交互的地方
//获取通知所带的数据
NSString*notMess=[notification.userInfoobjectForKey:
@"key"];
UIAlertView*alert=[[UIAlertViewalloc]initWithTitle:
@"本地通知(前台)"
message:
notMess
delegate:
nil
cancelButtonTitle:
@"OK"
otherButtonTitles:
nil];
[alertshow];
//更新显示的徽章个数
NSIntegerbadge=[UIApplicationsharedApplication].applicationIconBadgeNumber;
badge--;
badge=badge>=0?
badge:
0;
[UIApplicationsharedApplication].applicationIconBadgeNumber=0;
//在不需要再推送时,可以取消推送
//[UIViewControllercancelLocalNotificationWithKey:
@"key"];
}
2、当需要进行消息推送时,则需要实现如下代码:
//向appDelegate发送通知
AppDelegate*appDelegate=[UIApplicationsharedApplication].delegate;
[appDelegatesendLocalNotificationWithDate:
currentDate];
参考文献
[1]杨正洪《Objective-C程序设计》[M].北京:
清华大学出版社,2011
[2]MattNeubury.《iOS程序设计》[M].机械工业出版社,2013.04
[3]DavidMark.《精通iOS开发》[M].北京:
人民邮电出版社2013.09
[4]孔祥盛.MySQL核心技术与最佳实践[M].北京:
人民邮电出版社,2014
[5]刘丽华付晓东.JSP程序设计案例教程[M].北京:
冶金工业出版社,2011
[6]邱仲潘张星成.JSP程序设计实训与案例教程[M].北京:
清华大学出版社,
附录(关键部分程序清单)
课程设计总结:
通过这次的个人日程管理系统的制作,我既提高了系统设计和软件编码的能力,自身各方面素质也得到提高。
参与这样一个系统开发,就要在整个开发过程中贯穿一种系统工程的概念,强调的是系统的统一和协调。
其中,最主要的是在管理上统一规范和标准。
在开发过程中,我熟悉了OC编程,对数据库的概念和使用,有了更深一层的理解。
所有这些,不但充实了我的知识结构,扩大了知识面,增强了分析和解决问题的能力,也提高了自学能力,为今后工作打下了基础。
同时,在系统开发的过程中,也培养了一种坚忍不拔的精神。
因为,在系统的开发过程中,经常要对基本的数据库结构进行修改,这样就会给系统的运行带来错误,刚开始时我茫然无措,通过向别人请教及查阅资料,后来,在进一步熟悉了之后,慢慢完善这些功能。
在这次课程设计中,让我感触最深的是一个成功的系统是离不开前期大量的需求分析,只有让用户感到满意的系统才算是一个真正成功的系统。
因此,在程序的设计与测试过程中,我不断地以用户的角度思考,根据用户的需求来完善该系统,力图使自己的系统更贴近实际情况和用户需要。
在实现代码的过程中,会不断的发现新的问题,例如:
后台数据库建的不够合理,当前台形成一定规模时,不宜再修改数据库的结构。
系统使用时的安全性主要体现在操作员的权限和对业务流程的控制方面。
要对各类操作员所涉及的业务内容进行详细的划分,防止其进入他人的业务范围。
由于我经验不足,系统仍有很多不完善的地方。
我认为自己在这次系统开发过程中,还培养了一种严谨、认真的工作态度和良好的工作习惯。
我觉得经过这一段时间的课程设计工作,我在各方面都有较大的收获,取得了较大的进步。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人 日程 管理 系统