CC++程序设计——万年历 完整代码+实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计报告
(2009/2010学年第一学期)
题目:万年历查询系统
专业电气信息工程 _
学生姓名王XX
班级学号 B080510XX
指导教师张台国
指导单位计算机软件基础教学中心
日期 2009.10.30
万年历查询系统
一、课题内容和要求
万年历在现在日常生活工作学习等众多方面被广泛使用。本课题旨在以“公元2005年10月20日星期四”为已知条件编写一个基本的万年历查询系统,可以查询公元元年至公元9999年间任一年的全年日历,以双月并排显示的方式输出,并要求对用户输入的待查询数据有较强的错误检查能力。通过该课题,进一步加深对C++面向对象特性的认识,更加深层的理解了类的封装意义,较为熟练的掌握了函数调用、文件读写、对象操作等知识。
二、需求分析
功能框架图:(图2-1
功能详解:
(1)提供界面友好的操作菜单:输出欢迎信息和操作菜单,用于提示用户选择需要的操作。根据用户输入的选项实现相应的功能。
(2)进行数据的输入和错误检查:要求用户输入待查询数据,并对输入的数据执行错误检查,如果输入有误,则提示用户重新输入,直到输入正确。
(3)计算待求年份元旦的星期数:通过求出待求年份与2005年元旦相距的总天数求出待求年份元旦的星期数,为准确输出万年历奠定基础。
(4)打印日历的标题和日期:可以将万年历以双月并排的形式输出,一方面使得万年历看起来美观;另一方面,也确保了万年历日期与星期的准确对应。
(5)选择菜单:供用户选择需要继续的操作,具有较强的输入数据错误检查能力;同时实现了程序操作的循环性。
三、概要设计
1、主要类:
class Data
{
private:
int Week[12]; //用于储存每个月1号为星期几
int year; //用于存放用户输入的年份
public:
Data(); //类Data的构造函数
int Getyear(); //获取用户输入的年份
void FirstDayOfYear(int); //求出任意一年元旦的星期数
void FirstDayOfMonth(int); //求出任意年份的每个月一号的星期数
int IsLeapyear(int); //判断是否为闰年
void PrintYear(int); //显示年份图案
void PrintTitle(int); //输出每个月日历的标题部分
void PrintMonth(int); //打印月份日历
void PrintForm(int); //使日历按照每两个月并排的方式输出
void ChooseMenu(); //显示选择操作界面,实现程序的循环
void PrintThanks(); //退出程序时显示结束信息
};
2、主要函数流程图:
(1)类的构造函数:用于给类的对象赋值。提示用户输入数据,并具有较强的错误输入数据检查功能。(参见图3-1)
(2)闰年判断函数:判断哪些年份为闰年。(图3-2)
(3)求待求年份元旦星期函数:求出待求年份元旦距离2005年元旦的总天数,进而求出待求年份元旦的星期数。(图3-3,其中Week[0]代表元旦星期数)
四、程序源码
#include
#include
#include
#include
using namespace std;
ofstream fout("万年历_执行结果.txt"); //文件输出到“万年历_执行结果.txt文件中”
const int Year=2005; //const符号常量,代表2005年
int MonNum[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //储存每月的天数
void PrintWelcome(); //顶层函数,用于开始执行程序时输出欢迎信息
class Data
{
private:
int Week[12]; //用于储存每个月1号为星期几
int year; //用于存放用户输入的年份
public:
Data(); //类Data的构造函数
int Getyear(); //获取用户输入的年份
void FirstDayOfYear(int); //求出任意一年元旦的星期数
void FirstDayOfMonth(int); //求出任意年份的每个月一号的星期数
int IsLeapyear(int); //判断是否为闰年
void PrintYear(int); //显示年份图案
void PrintTitle(int); //输出每个月日历的标题部分
void PrintMonth(int); //打印月份日历
void PrintForm(int); //使日历按照每两个月并排的方式输出
void ChooseMenu(); //显示选择操作界面,实现程序的循环
void PrintThanks(); //退出程序时显示结束信息
};
void main()
{
static int i=0; //静态全局变量i,控制PrintWelcome()只输出一次
if(!i++)
PrintWelcome(); //调用顶层函数,输出欢迎信息
Data data; //定义类Data的对象data
int yy=data.Getyear();
data.PrintYear(yy);
data.FirstDayOfYear(yy);
data.ChooseMenu();
}
/*函数功能:判断输入的年份是否为闰年,如果是则返回1,否则返回0