日程活动管理系统.docx
《日程活动管理系统.docx》由会员分享,可在线阅读,更多相关《日程活动管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
![日程活动管理系统.docx](https://file1.bdocx.com/fileroot1/2023-7/14/584f9a39-7c71-4cce-875a-34b82d6c0878/584f9a39-7c71-4cce-875a-34b82d6c08781.gif)
日程活动管理系统
(要求1500字以上,字体五号,宋体,行间距1.15)
一、项目的目的与意义
《日程活动管理系统》主要根据课程设计要求进行设计,能够进行个人的事件记录,可以将程序使用者的时间安排,重要事件,以及个人行程等事件做出具体详细的记述,并能够使使用者在程序上 完成查看时间的功能,足以使得使用者避免忘记一些重要事 件,也可以为使用者带来一些便利,帮助使用者节省了时间。
电子备忘录相较于笔记本,其最大的好处在于可以不受纸张的 限制,并切实的使用者可以在短时间内记述大量事件;查询时也可以节省大量的时间,使得使用者可以减短查询时间,方便 快捷。
同时,使用日程活动管理系统也是一种现代化的代表,将电子科技应用与人们的日常生活中,达到现代实惠的水平。
二、总体设计(思路、框图等)
1.系统目标
(1)录入:
添加一个活动,包括事件的活动标题,活动日期,开始结束时间,活动类型。
(2)删除:
删除活动信息。
(3)批量添加:
能够批量添加活动信息。
(4)显示事件:
能显示活动详细信息。
(5)退出。
2.系统实现方案
为实现系统功能,本程序主要分为五个大模块。
它们分别为:
输入信息、删除信息、批量添加信息、显示事件,退出该程序。
这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用通讯录的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
三、详细设计(主要的数据类型的定义,完成的各个功能模块的算法)
1.数据类型
intid;
stringbiaoti;
stringtime;
stringstart_time;
stringend_time;
inttype;
2.函数模块
1)日程添加:
intSche:
:
tianjia_acti(intnum)
2)批量添加日程intSche:
:
piliangtianjia_acti(intnum)
3)删除日程intSche:
:
shanchu_acti(intnum)
4)显示日程信息
4.1显示所有信息
4.2按照列表显示日程信息
4.3按照日历形式显示日程信息
4.4查询日程信息
5)退出
四、涉及的知识点(项目中涉及的知识点,请在下面表格中打勾。
)
类
继承
多态性
运算符重载
模板
STL
图形化界面
其他
√
√
√
五、调试与测试(运行的界面截图)
1.运行程序,界面如下
2.键入1,输入一条日程信息
3.键入3,批量添加日程
4.键入4,进入显示日程信息页面
4.1键入1,显示所有信息
4.2键入2,以列表形式显示信息
4.3键入3,以日历形式显示日程信息
4.4键入4,查询日程信息
5.退出
六、收获与总结
本次系统设计的是日程活动管理系统,类似于备忘录,它在我们生活中很常见,自己就试着去利用所学的知识实现一个自己的系统。
经过几天的设计,终于完成了。
功能齐全,提示语清晰,操作简单。
这次课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
回顾此次C++的学习,至今我仍感慨颇多,此次课程设计不仅可以巩固了以前所学的知识,而且学到了很多在书本上所没有学到过的知识。
我坚信此次的系统设计能够在以后的学习与实践结合方面对我提供很大的帮助!
谢谢老师!
七、附录(附上设计的源代码)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
typedefstructSchedule
{
intid;
stringbiaoti;
stringtime;
stringstart_time;
stringend_time;
inttype;
}Schedule;
Schedulea[100];
classSche
{
public:
intcaidan();
inttianjia_acti(intx);
intpiliangtianjia_acti(intx);
intshanchu_acti(intx);
voidxianshisuoyou(intnum);
voidliebiaoxianshi(intnum);
voidrilixianshi(intnum);
};
intSche:
:
caidan()
{
intcho;
cout<<"\t欢迎使用日程活动管理系统"<cout<<"***************主菜单****************"<cout<<"\t[1]在这里添加一个日程"<cout<<"\t[2]在这里删除一个日程"<cout<<"\t[3]在这里添加多个日程"<cout<<"\t[4]在这里显示日程信息"<cout<<"\t[5]退出"<cout<<"***************************************"<cout<<"请输入你的选择(1-5):
"<>cho;
while(cho>5)
{
cout<<"错误的数字,请重新输入:
";cin>>cho;
}returncho;
}
boolcompare(constSchedule&x,constSchedule&y)
{
if(x.time!
=y.time)
{
returnx.time}
elseif(x.time==y.time)
{
returnx.start_time}
}
boolcompare_time(stringb,stringe)
{
intb2,b1,e2,e1;
b1=((b[0]-'0')*10+b[1]-'0')*60+(b[3]-'0')*10+b[4]-'0';
e1=((e[0]-'0')*10+e[1]-'0')*60+(e[3]-'0')*10+e[4]-'0';
if(b1>e1)
{
returnfalse;
}
else
{
returntrue;
}
}
intSche:
:
tianjia_acti(intnum)
{
intflag=0,flag1=0,f=0;
inti=num;
loop1:
while(flag==3)
{
cout<<"由于输入太多导致发生错误!
!
\n";
returnnum;
}
cout<<"请输入活动信息:
";
a[i].id=i+1;
cin>>a[i].time;
cin.ignore(40,'/');
stringtime=a[i].time;
cin>>a[i].start_time;
cin.ignore(40,'/');
stringstart_time=a[i].start_time;
cin>>a[i].end_time;
cin.ignore(40,'/');
cin>>a[i].biaoti;
cin.ignore(40,'/');
cin>>a[i].type;
flag++;
if(a[i].time.length()!
=10||a[i].time[2]!
='-'||a[i].time[5]!
='-'||a[i].time[0]-'0'>3)
{
cout<<"输入格式错误:
请输入活动数据!
!
\n";
flag1++;
}
if(a[i].start_time.length()!
=5||a[i].start_time[2]!
=':
'||((a[i].start_time[0]-'0')*10+(a[i].start_time[1]-'0'))>24||((a[i].start_time[3]-'0')*10+(a[i].start_time[4]-'0'))>60)
{
cout<<"输入格式错误:
请输入活动开始时间!
\n";
flag1++;
}
if(a[i].end_time.length()!
=5||a[i].end_time[2]!
=':
'||((a[i].end_time[0]-'0')*10+(a[i].end_time[1]-'0'))>24||((a[i].end_time[3]-'0')*10+(a[i].end_time[4]-'0'))>60)
{
cout<<"输入格式错误:
请输入活动结束时间!
!
\n";
flag1++;
}
if(compare_time(a[i].start_time,a[i].end_time)==false)
{
cout<<"输入格式错误:
活动开始时间应该早于结束时间!
!
\n";
flag1++;
}
for(intj=0;j{
if(a[j].time==a[i].time)//日期相等
{
if(compare_time(a[i].start_time,a[j].end_time)==true||compare_time(a[j].start_time,a[i].end_time)==true)
{
f++;
}
}
}
if(f!
=0)
{
cout<<"输入格式错误:
时间冲突!
!
\n";
f==0;
flag1++;
}
if(a[i].type>4)
{
cout<<"输入格式错误:
活动类型!
!
"<flag1++;
}
if(flag1!
=0)
{
flag1=0;gotoloop1;
}
elseif(flag1==0)
{
return++num;
}
}
intSche:
:
piliangtianjia_acti(intnum)
{
ints=0;interr=0;
cout<<"请输入活动信息(输入0时结束):
\n";
while(true)
{
intflag=0,flag1=0;
inti=num;
a[i].id=i+1;
cin>>a[i].time;cin.ignore(40,'/');
if(a[i].time=="0")
{
cout<<"Thisinput:
"<
"<returnnum;
}
cin>>a[i].start_time;
cin.ignore(40,'/');
cin>>a[i].end_time;
cin.ignore(40,'/');
cin>>a[i].biaoti;
cin.ignore(40,'/');
cin>>a[i].type;
if(a[i].time.length()!
=10||a[i].time[2]!
='-'||a[i].time[5]!
='-'||a[i].time[0]-'0'>3)
{
continue;
}
if(a[i].start_time.length()!
=5||a[i].start_time[2]!
=':
'||((a[i].start_time[0]-'0')*10+(a[i].start_time[1]-'0'))>24||((a[i].start_time[3]-'0')*10+(a[i].start_time[4]-'0'))>60)
{
continue;
}
if(a[i].end_time.length()!
=5||a[i].end_time[2]!
=':
'||((a[i].end_time[0]-'0')*10+(a[i].end_time[1]-'0'))>24||((a[i].end_time[3]-'0')*10+(a[i].end_time[4]-'0'))>60)
{
continue;
}
if(compare_time(a[i].start_time,a[i].end_time)==false)
{
continue;
}
for(intj=0;j{
if(a[j].time==a[i].time)//日期相等
{
if(compare_time(a[i].start_time,a[j].end_time)==true||compare_time(a[j].start_time,a[i].end_time)==true)
{
err++;
flag++;
}
}
}
if(flag!
=0)
{
flag==0;
continue;
}
num++;s++;
}
}
intSche:
:
shanchu_acti(intnum)
{
stringdate;intflag=0;
cout<<"请输入要删除信息的日期:
";
cin>>date;
for(inti=0;i{
a[i].id=i+1;
if(a[i].time==date)
{
flag++;
cout<if(a[i].type==1)
{
cout<}
elseif(a[i].type==2)
{
cout<}
elseif(a[i].type==3)
{
cout<}
elseif(a[i].type==4)
{
cout<}
}
}
if(flag==0)
{
cout<<"找不到您输入的时间信息!
!
\n";
returnnum;
}
intid;
cout<<"请输入要删除的时间ID:
";cin>>id;
for(inti=0;i{
if(a[i].time==date)
{
if(a[i].id==id)
{
for(intj=i;j{
a[j]=a[j+1];
}
num--;
cout<<"删除成功!
!
\n";
break;
}
}
}
returnnum;
}
voidSche:
:
xianshisuoyou(intnum)
{
cout<<"时间和日期标题类型\n";
for(inti=0;i{
a[i].id=i+1;
cout<if(a[i].type==1)
{
cout<}
elseif(a[i].type==2)
{
cout<}
elseif(a[i].type==3)
{
cout<}
elseif(a[i].type==4)
{
cout<}
}
}
voidSche:
:
liebiaoxianshi(intnum)
{
structtmt1={0};
structtmt2={0};
time_tt=time(NULL);
charch[64]={0};
strftime(ch,sizeof(ch)-1,"%Y-%m-%d%H:
%M:
%S",localtime(&t));
stringy=strtok(ch,"-");
stringm=strtok(NULL,"-");
stringd=strtok(NULL,"");
//cout<t1.tm_year=1000*(y[0]-'0')+100*(y[1]-'0')+10*(y[2]-'0')+y[3]-'0'-1900;
t1.tm_mon=10*(m[0]-'0')+m[1]-'0';
t1.tm_mday=10*(d[0]-'0')+d[1]-'0';
intn,n1;
cout<<"请输入要查看的活动类型:
";
cin>>n;
cout<<"请输入要查看的天数:
";
cin>>n1;
cout<<"T时间和日期标题类型\n";
for(inti=0;i{
a[i].id=i+1;
chartt[40];
a[i].time.copy(tt,10,0);*(tt+10)='\0';
stringd1=strtok(tt,"-");stringm1=strtok(NULL,"-");stringy1=strtok(NULL,"");
t2.tm_year=1000*(y1[0]-'0')+100*(y1[1]-'0')+10*(y1[2]-'0')+y1[3]-'0'-1900;
t2.tm_mon=10*(m1[0]-'0')+m1[1]-'0';
t2.tm_mday=10*(d1[0]-'0')+d1[1]-'0';
doubleseconds=difftime(mktime(&t2),mktime(&t1));
if(seconds/86400<=n1&&a[i].type==n)
{
cout<if(a[i].type==1)
{
cout<}
elseif(a[i].type==2)
{
cout<}
elseif(a[i].type==3)
{
cout<}
elseif(a[i].type==4)
{
cout<}
}
}
}
intnyear(intyear)//判断是平年,还是润年
{
if(year%400==0||(year%4==0&&year%100!
=0))
return366;
else
return365;
}
intnmonth(intm,inty)//根据年份和月份,判断是那一个月的天数
{
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)return31;
elseif(nyear(y)==366&&m==2)return29;
elseif(nyear(y)==365&&m==2)return28;
elsereturn30;
}
intgetDays(intyear,intmonth)//输入年份和月份确定到1900年1月1日总共多少天
{
inti,sum=0;
if(year>1900)
for(i=1900;i{
sum+=nyear(i);
}
if(month>1)
for(i=1;isum+=nmonth(i,year);
returnsum;//返回总共多少天;
}
voidSche:
:
rilixianshi(intnum)
{
stringdate;
inti,j,year,month,day,sum,daycount,cases=1;
cout<<"请输入年份和月份(用空格分隔):
";
while(cin>>date)
{
month=10*(date[0]-'0')+date[1]-'0';
year=1000*(date[3]-'0')+100*(date[4]-'0')+10*(date[5]-'0')+date[6]-'0';
sum=getDays(year,month);
day=sum%7;//这里算出来这个月的一号前面需要几个空格;等于0的话,前面就不需要空格
daycount=nmonth(month,year);//算出这个月的天数
cout<<"Case"<"<cout<<"SunMonTueWedThuFriSat"<for(i=0;i<=day%7;i++)
cout<<"";//
for(i=1,j=day+1;i<=dayco