数据结构课程设计万年历查询

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

一、题目概述(内容及要求) (2)

二、功能分析 (2)

三、设计 (3)

四、运行与测试 (11)

五、总结 (15)

参考文献 (16)

一、题目概述(内容及要求)

1. 内容:

输出公元1年至9999年的日历;

以标准日历的形式输出,包含月份、星期以及具体某一天对应的年、月、星期;用数据结构课上所学二叉树及队列顺序存储形式存储。

1.要求:①输入年份②选择列数③打印日历并写入文件。说明:列数表示打印

格式12行一列、6行二列、四行三列。。。。。

二、功能分析

1. 当你输入正确的公元年份时,程序会弹出选择菜单,然你选择输出方式。然

后去F盘,看file文档即可。当你输入一个错误的年份,比如-2时。因为这个年份无法通过循环的判定,所以程序无法继续下去。

同时,时间复杂度为Q(n)。

2.确定每年的第一天是星期几。

设公元元年一日是星期一,根据蔡司公式,用365乘以(year-1)再与年多出来的一天求和,与7取余,再加一天,就能求出所求年的一月一日是星期几了。

3.确定所求年是不是闰年。

普通年能被4整除且不能被100整除的为闰年。

4. 使输出的数字对齐。

当输出数字小于10时,输出两个空格。当输出数字大于等于10时,输出一个空格。

5.算法的改进设想。

(1)可以不以公元元年一月一日为起点,可以找出任意年的任意天作为原点。

(2)case2,case3中的计算首日的部分可以共享,这样能减少代码长度。

三、设计

1. 每个程序中使用的存储结构设计说明。

本程序用到的存储结构式数组

int month[13]={0,1,2,3,4,5,6,7,8,9,10,11,12} //储存一年的总月数int Day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31} //储存每个月的天数

int i=12; //月份

int j=6; //每个月需要打印的行数

int k=7; // 每个月需要打印的列数

a[i][j][k] //储存每个月里,每个数据的位置

2.每个部分的算法设计说明。

图3-3 算法流程图3

3. 相应算法实现的源程序(有注解说明)

图4-1:printf(" 万年历 \n "); printf("请输入年份");

void DrawMenu() //菜单函数

{

图4-3:ystem("cls");

cout<

<

cout<<"\t "<

cout<<"\t 请选择输出方式 "<

cout<<"\t "<

cout<<"\t 1.十二行一列 "<

cout<<"\t "<

cout<<"\t 2.六行二列 "<

cout<<"\t "<

cout<<"\t 3.三行四列 "<

}

while(beContinue)

{

DrawMenu();

while(1)

{

ch=getchar();

if(ch<='3'&&ch>='1')

break;

DrawMenu();

}

图4-4:system("cls");

for(j=1;j<13;j++)

{

x=x+Day[j];

First_monthday=(x+First_yearday)%7; //所求年中的每个月的第一天是星期几

out<<"\n****************************************************\n";

out<

out<<"\n****************************************************\n";

out<<" 星期日星期一星期二星期三星期四星期五星期六´\n";

for(i=0;i

out<<" ";

for(x=1;x<=Day[j];x++) //在每个月结束后用空格补位

{

if(x<10)

out<<" "<

else

out<<" "<

if(((x+First_monthday)%7)==0 && x

out<

图4-5.:system("cls");

for(j=1;j<13;j++)

{

if(j!=1)

x+=Day[j-1];

First_monthday=(x+First_yearday)%7;

for(i=0;i

a[j-1][0][i]=0;

for(k=1;k<=Day[j];k++)

{

a[j-1][(i+k-1)/7][(i+k-1)%7]=k;

}

for(;k<43-First_monthday;k++)

a[j-1][(i+k-1)/7][(i+k-1)%7]=0;

}

for(i=0;i<12;i+=2)

{

l=1;

for(j=0;j<6;j++)

{

if(l==1)

{

out<<"\n********************************************************* ***********\n";

out<

out<

out<<"\n************************************************************* *******\n";

out<<" 日一二三四五六日一二三四五六

\n";

l=0;

}

for(k=0;k<7;k++)

{

if(a[i][j][k]==0)

out<<" ";

else

if(a[i][j][k]<10)

out<<" "<

else

out<<" "<

相关文档
最新文档