自动班“C++程序设计",日历记事本

本文介绍了使用C++编程实现一个功能丰富的日历记事本,具备日程查询、提醒设置及定时通知。用户能够查看前后一个月的日期,并能添加、编辑和删除日程提醒。当系统时间与提醒时间匹配时,系统会自动弹出提示对话框。

6、日历记事本

要求:带有日程提醒功能的日历。

显示信息:用户可以向前查询前一个月的日期,也可以向后查询下一个月的日期。

定时提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统时间和提醒时间相吻合时,给出具有提示信息的对话框。

查询信息:用户可以查询到某个月的所有的提示信息。



#include<iostream.h>
#include<string>
#include<fstream.h>
#include<time.h>
#include<windows.h>
#include<stdlib.h>

void turn();
class nb
{
public:
	int num;
	char sth[50];
	friend ostream & operator<<(ostream &out,nb &s);
	friend istream & operator>>(istream &in, nb &s);
};

ostream & operator<<(ostream &out,nb &s)
{
	out<<s.num<<"  "<<s.sth<<'\n';
	return out;
}
istream & operator>>(istream &in,nb &s)
{
	in>>s.num>>s.sth;
	return in;
}

int j=0;
int k=0;
int x;
/************************************************
***           输出是星期几的函数。            ***
************************************************/
void WEEK(int year,int month,int day)
{
	int d=0,i,t=1,week;
	int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年。
	int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年。
	
	if(year%4==0&&year%100!=0||year%400==0)//判断是否是闰年。
	{
		for(i=1;i<month;i++)
			
			d=d+a[i-1];
		
	}
	else 
	{
		for(i=1;i<month;i++)
			
			d=d+b[i-1];
		
	}
	
	d=d+day;
	week=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+d;//判断这一天是星期几的公式。
	week=week%7;//判断这一天是星期几的公式。当week=0,表示星期日。
	switch(week)//下面是输出星期。
	{
	case 1:printf("\t\t%d 年%d 月%d 日 是 星 期: 一 ",year,month,day);break;
		
	case 2:printf("\t\t%d 年%d 月%d 日 是 星 期: 二 ",year,month,day);break;
		
	case 3:printf("\t\t%d 年%d 月%d 日 是 星 期: 三 ",year,month,day);break;
		
	case 4:printf("\t\t%d 年%d 月%d 日 是 星 期: 四 ",year,month,day);break;
		
	case 5:printf("\t\t%d 年%d 月%d 日 是 星 期: 五 ",year,month,day);break;
		
	case 6:printf("\t\t%d 年%d 月%d 日 是 星 期: 六 ",year,month,day);break;
		
	case 0:printf("\t\t%d 年%d 月%d 日 是 星 期: 日 ",year,month,day);break;
	}
	
}

void pri()//菜单显示功能
{
	printf("\n\n 请按数字键选择你所需要的功能\n");
	
	printf("\n\t输入 :1  日历查询\n");
	
	printf("\n\t输入 :2  记事\n");

	printf("\n\t输入 :3  备忘查找\n");

	

	printf("\n\t输入 :0  退出\n");
}

void DAY(int year,int month)//导入日期并输出日历的函数
{
	int week;
	int t=1;
	int d=0,i;
	int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
	
	int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(year%4==0&&year%100!=0||year%400==0)//if和for是计算d的值,d表示到今天为止总共的天数。
			 {
		for(i=1;i<month;i++)
			d=d+a[i-1];
	}
	
	else 
	{
		for(i=1;i<month;i++)
			d=d+b[i-1];
	}
	week=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+d;//判断这个月的第一天是星期几
	
	week=week%7;
	
	printf("\n\n\t这是%d年的%d月的日历",year,month);
	
	printf("\n\t日\t一\t二\t三\t四\t五\t六\t\n");
	
	for(i=0;i<=week;i++)//输出日历第一行的格式
	{
		if(week==6)break;
		
		else cout<<"\t";
		
		t++;
	}
	printf("\t");
	
	if(year%4==0&&year%100!=0||year%400==0)//输出日历
	{ 
		for(i=1;i<=a[month-1];i++)
		{
			printf("%d\t",i);
			
			if(t%7==0)
				printf("\n\t");
			t++;
		}
	}
	else 
	{
		for(i=1;i<=b[month-1];i++)
		{
			printf("%d\t",i);
			if(t%7==0)
				printf("\n\t");
			t++;
		}
	}
}

void search()//这是查找某一天的函数
{
	int year,month,day;
	printf("\n\t请 输 入 你 所 想 要 查 找 的 日 期:\n");
	
	printf("\n格 式 为 ****-**-**  例 如(2011-1-1)\n");
	scanf("%d-%d-%d",&year,&month,&day);
	if(month<=12&&month>=1&&day<=31&&day>=1)
	{
		system("cls");	
		WEEK(year,month,day);
		DAY(year,month);
		cout<<endl;
		turn();
	}
	if(month>12||month<1||day>31)
	{
			printf("格式有误请重新输入!");
			search();
	}
}
		
		

//*******************  记事部分  **********************************



void record()   //记事功能开启
{
	ofstream ofile;
	ofile.open("1111.txt",ios::app);
	nb s;
	printf("输入时间和事件吧\n");
	cin>>s;
	ofile<<s;
	ofile.close();
	turn();
}
//******************************************************************


void recordlook()
{
	cout<<"输入要查询的时间,如20140312"<<endl;
	int Time;
	int num1=0;
	cin>>Time;
	ifstream ifile;
	ifile.open("1111.txt");
	nb s;
	ifile>>s;
	cout<<"事件查询结果:"<<endl;;
	while(!ifile.eof())
	{
	    if(s.num==Time)
		{
        cout<<s;
    	num1++;
		}
    	ifile>>s;
	}
    if(num1==0)
		cout<<"不存在!可能输入有误";
	ifile.close();
	cout<<endl<<endl;
	turn();
}
void allrecord()
{
	
	ifstream ifile;
	ifile.open("1111.txt");
	nb s;
	ifile>>s;
	cout<<"所有的事件:"<<endl;;
	while(!ifile.eof())
	{
	    
        cout<<s;
        ifile>>s;
	}
    ifile.close();
	cout<<endl<<endl;
	recordlook();

}
void check(int x)//菜单输入的检验
{
	if(x>3)
	{		
		printf("\t\t输入有误,请重新输入!\n");
		fflush(stdin);
		cin>>x;
		check(x);
	}

}

void choice(int x)  //菜单功能转入
{	
	switch(x)
	{
	case 0:
		exit(0);
	case 1:
		search();
		break;
	case 2:
		system("cls");
		fflush(stdin);
		record();
		break;

	case 3:
		system("cls");
		fflush(stdin);
		allrecord();
		break;
		}
}

void turn() //返回
{
	printf("输入0返回主菜单!!\n");
	while(1)
	{
		cin>>x;
		
		if(x==0)
		{		
			pri();
			fflush(stdin);
			cin>>x;
			check(x);
			choice(x);
		}

	}
}

int main()
{
	int year,month,day;
	
	int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};
	int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	time_t today;
	struct tm *p;
	time(&today);
	p=localtime(&today);          //转换成本地时间的日期
	year=p->tm_year+1900;
	month=p->tm_mon+1;
	day=p->tm_mday;
	
	
	
	WEEK(year,month,day);
	
	DAY(year,month);
	pri();
	cin>>x;
	
	check(x);
	choice(x);
	

	return 0;
}



 

计算机科学与技术本科专业 Java课程设计任务书 题目: 日历记事本 学生姓名: 学号: 级: 题目类型:软件工程(R) 指导教师: 一. 题目简介 该设计要求设计一个带有日程提醒功能日历。 通过该题目的设计,培养学生面向对象程序设计的思想,要求学生达到熟练掌握Java语言的基本知识和技能,基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。同强调好的程序设计风格,提高解决实际问题的能力。 二. 主要任务 1、查阅文献资料,一般在5篇以上; 2、应用系统分析,建立该系统功能模块框图以及界面的组织和设计; 3、分析系统中的各个实体及它们之间的关系包括属性和方法; 4、根据问题描述,设计系统的类层次; 5、完成类层次中各个类的描述(包括属性和方法); 6、完成类中各个成员函数的定义; 7、完成系统的应用模块; 8、完成系统的软件开发和测试工作; 9、撰写设计说明书; 10、做好答辩工作。 三. 主要内容、功能及技术指标 (一) 基本要求: 编写一个Applet小应用程序能够显示间,当用户最小化Applet程序会 被挂起,当还原Applet程序又会恢复执行,同Applet中应显示挂起和恢复的间。 (二)系统要求: 1、要求利用面向对象的方法以及Java的编程思想来完成系统设计; 2、要求在设计的过程中,建立清晰的类层次; 3、在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法; 4、在系统设计中,要求运用面向对象的机制(继承、派生及多态性)来实现系统功能。 5、该系统的要求: (1)显示信息:用户可以向前翻页查询前一个月的日期,也可以向后翻页查询下一个月的日期。 (2)定提醒:用户可以针对某一天来添加,删除和编辑这一天的日程提醒信息,当系统间和提醒间相吻合,给出具有提示信息的对话框; (3)查询信息:用户可以查询到某个月的所有提示信息。 四. 提交的成果 1. 设计说明书一份,内容包括: 1) 中文摘要100字;关键词3-5个; 2) 序言; 3) 基本要求实现(包括程序流程图;部分代码;) 4) 系统要求实现 系统分析与设计(包括设计系统的类层次,各个实体及它们之间的关系) 详细设计(包括各个类的详细设计,如数据成员及成员函数的设计); 系统测试(包含测试方案、测试用例、测试结果及软件可靠性分析); 软件使用说明书(核心界面说明); 5)设计总结、参考文献、致谢等。 五. 主要参考文献 [1]曲朝阳,杨杰明等.Java程序设计. 北京: 清华大学出版社,2008.10 [2]耿祥以,张跃平.Java大学生实用教程. 北京: 电子工业出版社,2012.6 [3]明日科技.Java经典编程.北京:清华大学出版社,2012.10 [4]李尊朝,苏军.Java语言程序设计.北京:中国铁道出版社,2004.2 [5]王博. 面向对象的建模、设计技术与方法. 北京希望电脑公司,1990. 六. 各阶段间安排(共2周): 周次 日期 内容 地点 第1周 星期一 教师讲解设计要求,准备参考资料 教室 星期二 分析系统,方案设计 实验室 星期三~五 编程 实验室 第2周 星期一~三 编程、调试程序 实验室 星期四 写设计书 实验室 星期五 答辩 实验室
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值