




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录
一、题目概述(内容及要求)...............................2
二、功能分析.............................................2
三、设计.................................................3
四、运行与测试..........................................11
五、总结.................................................15
参考文献.................................................16
一、题目概述(内容及要求)
1.内容:
输出公元1年至9999年的日历;
以标准日历的形式输出,包含月份、星期以及具体某一天对应的年、月、星期;
用数据结构课上所学二叉树及队列顺序存储形式存储。
1.要求:①输入年份②选择列数③打印日历并写入文件。说明:列数表示打印
格式12行一列、6行二列、四行三列。。。。。
二、功能分析
1.当你输入正确的公元年份时,程序会弹出选择菜单,然你选择输出方式。然
后去F盘,看file文档即可。当你输入一个错误的年份,比如-2时。因为这
个年份无法通过循环的判定,所以程序无法继续下去。
同时,时间复杂度为Q(n)0
2.确定每年的第一天是星期儿。
设公元元年一日是星期一,根据蔡司公式,用365乘以(year-1)再与年多
出来的一天求和,与7取余,再加一天,就能求出所求年的一月一日是星期
儿了。
3.确定所求年是不是闰年。
普通年能被4整除且不能被100整除的为闰年。
4.使输出的数字对齐。
当输出数字小于10时,输出两个空格。当输出数字大于等于10时,输
出一个空格。
5.算法的改进设想。
(1)可以不以公元元年一月一日为起点,可以找出任意年的任意天作为原
点。
(2)case2,case3中的计算首日的部分可以共享,这样能减少代码长度。
图2-1程序功能图
三、设计
1.每个程序中使用的存储结构设计说明。
本程序用到的存储结构式数组
intmonth[13>{0,1,2,3,4,5,6,7,8,9,10,11,12}〃储存一年的总月数
intDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}〃储存每个月
的天数
inti=12;〃月份
intj=6;//每个月需要打印的行数
intk=7;//每个月需要打印的列数
a[i][j][k]〃储存每个月里,每个数据的位置
2.每个部分的算法设计说明。
图3-1算法流程图1
图3-2算法流程图2
图3-3算法流程图3
3.相应算法实现的源程序(有注解说明)
图4T:printf(,z万年历\n〃);
printf(〃请输入年份〃);
voidDrawMenu()〃菜单函数
(
图4-3:ystem(〃cls〃);
cout<<endl
«endl;
cout«,z\t/z<<endl;
cout<<,z\t请选择输出方式,z«endl;
cout«/z\tz\<endl;
COUt«Z,\t1.十二行一列/z«endl;
COUt«Z,\t〃<〈endl;
cout«,z\t2.六行二列〃<<endl;
COUt«Z,\t/z<<endl;
C0Ut«z,\t3,三行四列,,<<endl;
while(beContinue)
(
DrawMenu();
while(1)
(
ch=getchar();
if(ch<=,3'&&ch>=,T)
break;
DrawMenu();
图4-4:system(z/cls,z);
for(j=l;j<13;j++)
(
x=x+Day[j];
First_monthday=(x+First_yearday)%7;〃所求年中的每个月的第一1天是
星期儿
out«year<〃年〃<<〃z/<<month[j]«^月”;
out«〃星期日星期一星期二星期三星期四星期五星期六’\n〃;
for(i=0;i<First_monthday;i++)〃在每个月的第一天开始前,用空
格补位
out«?,〃;
for(x=l;x<=Day[j];x++)〃在每个月结束后用空格补位
(
if(x<10)
out«/z/z«x;
else
out«z,z,<<x;
if(((x+First_monthday)%7)==0&&x<Day[j])〃换行
out<<endl;
图4-5.:system(z,clsz,);
for(j=l;j<13;j++)
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;
for(i=0;i<First_monthday;i++)
a[j-l][0][i]=0;
for(k=l;k<=Day[j];k++)
a[j-l][(i+k-l)/7][(i+k-l)%7]=k;
for(;k<43-First_monthday;k++)
a[j-l][(i+k-l)/7H(i+k-l)%7]=0;
)
for(i=0;i<12;i+=2)
(
1=1;
for(j=0;j<6;j++)
(
if(1==1)
***********\n〃;
out«year<<“年〃<<i+l<<〃月;
out«year<<〃年〃«i+2<X〃月〃<<〃\t\t〃;
*******\n〃;
out。"日•二三四五六日一二三四五六
1=0;
)
for(k=0;k<7;k++)
if(a[i][j][k]==0)
out<<”";
else
if(a[i][j][k]<10)
out<C
else
outY
out«"\t";
for(k=0;k<7;k++)
if(a[i+l][j][k]==0)
out<<”
else
if(a[i+l][j][k]<10)
out。"/,«a[i+l][j][k];
else
out<<z,z,«a[i+l][j][k];
)
out<<z/\tz/;
out«endl;
)
out<<endl;
)
out.close();
)
5.
system("cis");
for(j=l;j<13;j++)
(
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;〃计算每个月的第一天是星
期几
for(i=0;i<First_monthday;1++)〃每个月到达第一天之前,置0
[0][i]=0;
for(k=l;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-l)%7]=0;
for(i=0;i<12;i+=3)
(
1=1;
for(j=0;j<6;j++)
(
if(l==l)
out<〈year<<"年<<"月;
out«year<<"年”《i+2久"月
out<〈year«"年"<Xi+3〈〈“月;
out«,z日一二三.・二三六日一二三四五六日一二三
四五六'\n〃;
1=0;
)
for(k=0;k<7;k++)〃置零处,置成空格
(
if(a[i][j][k]==0)
out<<z/";
else
if(a[i][j][k]<10)
out。”"«a[i][j][k];
else
out<<-[k];
out«"\t";
for(k=0;k<7;k++)
(
if(a[i+l][j][k]==0)
out<<,z
else
if(a[i+l][j][k]<10)
out。”,,«a[i+l][j][k];
else
out<<〃
)
OUt«/Z\t,Z;
for(k=0;k<7;k++)
(
if(a[i+2][j][k]==0)
out<<,z〃;
else
if(a[i+2][j][k]<10)
out«,zz,«a[i+2][j][k];
else
out<<〃"<<a[i+2][j][k];
)
out<<endl;
)
out<<endl;
四、运行与测试
1.运行界面图。
6一C:\Docu»entsandSettings\Ad>inistrator\桌面'教学软件\Debug\翼马超12030--日I3E3
''D
请输入年份|
图4-1(输入年份之后单击回车)
c\C:\Docu>entsandSettings\Ad>inistrator\桌面'教学软件\Debug\翼马超12030...HlfiW
请选择输出方式
1.十二行一列
2.六行二列
3.三行四列
图4-2(选择输出方式,单击回车后自动写入文件)
2嬴年1月
星期日星期一星期二星期三星期四星期五星期六
135
678101112
13141516171819
20212223242526
2728293031
**************************************************:**
2000年2月
****************************************************
星期日星期一星期二星期三星期四星期五星期六
4
5671011
1213141718
1920212425
262728
************¥:*****¥:*******************:**************
2000年3月
****************************************************
星期日星期一星期二星期三星期四星期五星期六
123
567891011
12131415161718
19202122232425
262728293031
****************************************************
2000年4月
************************:1:****:1:***************:1:******
星期日星期一星期二星期三星期四星期五星期六
12
3456789
10111213141516
17181920212223
24252627282930
图4-312行1列
2000年1月2000年2月
日一二三四五六日一二三四五六
11234
3456786789101112
10111213141513141516171819
1617181920212220212223242526
232425262728292728
3031
2000年3月2000年4月
日一二—四五六a一二三四五六
1345
67810111234567
1314151617181910111213141516
2021222324252617181920212223
272829303124252627282930
瑞蕃5月******2温年々月
B——四五六S——四五六
1-456734
8101112131456781011
1516171819202112131415161718
2223242526272819202122232425
2930312627282930
图4-4六行2列
2000年1月2000年2月2000年3月
*********************************************************************************
日一二三四五六日一二三四五六日一二三四五六
11234512345
234567867891011126789101112
91011121314151314151617181913141516171819
161718192021222021222324252620212223242526
2324252627282927282728293031
3031
2000年4月2000年5月2000年6月
、
B一—四五六S—二—四五八B——四五六
567234
34567101112131456791011
101112131415161516171819202112131415161718
171819202122232223242526272819202122232425
242526272829302930312627282930
2000年7月2000年8月2000年9月
*********************************************************************************
日一二三四五六日一二三四五六日一二三四五六
12123456123
34567897891011121345678910
101112131415161415161718192011121314151617
171819202122232122232425262718192021222324
2425262728293028293031252627282930
31
图4~53行4列
五、总结
这两周课设从开始的确定命题,到搜集资料,到初步编程,到修改代
码,到最终完成代码,这是一个学习的过程,一个升华的过程。我想课设
的意义也是在于此吧。刚开始接触到课题感觉到无从下手,后来通过逐步
的思考,认真的研究逐步的建立了整个宏观的流程,然后就是一段时间的
埋头苦干,反复优化程序。现在,一切都结束了,感觉这个命题其实也不
难的。这就告诉我们理论与实践的关系。想到不一定能做到,但做到了一
定会想到,做到不一定有想象的那么难。只要你愿意做,就一定能做到。
当然课设也有很多的不足,由于刚学完数据结构没多久,因此没有建立一
个系统的知识框架,在编程时大体上还是延续C的思路,并没有过多的采
用数据结构在算法和效率上进行优化,这是此次最大的不足,也将会是今
后学习的重点。
在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好
该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过
自己的独立思考和同学的帮助终于完成了课程设计!完成该程序后想起自己以前
的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己
缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的
事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在
做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?
在课程设计的过程中也知道了自己在以前的学习中有很大的不足导致在设
计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计
过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以
前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想
学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该
门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知
识基础和技能基础!
当然,我的成功也离不开大家的帮助,所以,在此我要感谢给于过我帮助的
指导老师和热心的同学们。
六、参考文献
[1]严蔚敏,吴伟民著.数据结构:C语言版.清华大学出版社,2007
[2]谭浩强著.C++面向对象程序设计.北京:清华大学出版社,2006
[3]李爱华著.C++面向对象程序设计.
七、附件
程序代码:
#include<iostream>
#include<conio.h>
#include<fstream>
usingnamespacestd;
voidDrawMenu()〃菜单函数
system(〃cls〃);
cout«endl
<<endl;
cout«/z\t"«endl;
cout«z/\t请选择输出方式/z<<endl;
cout«,z\t/z<<endl;
cout<</z\t1.十二行一列,z<<endl;
cout<<z'\t/z<<endl;
cout«/z\t2.六行二列z,«endl;
COUt«/Z\tz,«endl;
COUt<<,Z\t3.三行四列,z«endl;
)
intmain()
inta[12][6][7];
intyear;
intmonth[13]={0,1,2,3,4,5,6,7,8,9,10,11,12};〃定义一年的总月
数
intday;
intleapyear;〃闰年
intFirst_yearday;〃一年的第一天
intFirst_monthday;〃一个月的第一天
intx=0,i,j,k,1,y;
charch;
intDay[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//定义每
个月有多少天
ofstreamout;〃写入文件
out.open(,,f:\\file.txt",ios::out);
if(!out)
(
cout<<z,CanJtopenfile!!!z,<<endl;
return-1;
)
printfC万年历\n〃);
printf(〃请输入年份〃);
scanf(〃%d〃,&year);
First_yearday=(365*(year-1)+(year-1)/4-(year-1)/100+(year-1)/4
00)%7+l;"〃判断所求年的一月一日是星期儿
leapyear=(year%4==4&&year%100!=100I|year%400==0)?0:1;//
Day[2]=(leapyear==l)?29:28;〃求年是闰年的话,二月置为
29天否则二月置为28天
while(year>0)
(
DrawMenu();
while(l)
(
ch=getchar0;
if(ch<=,3'&&ch>=?T)
break;
DrawMenu();
switch(ch)
caseP:
system(z,cls,z);
for(j=l;j<13;j++)
(
x=x+Day[j];
First_monthday=(x+First_yearday)%7;〃所求年中的每个月的第一1天
是星期儿一
out〈<year«〃年〃〈〈"z,«month[j]月”;
[]t<<〃\51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c51c\j~|〃.
out«〃星期日星期一星期二星期三星期四星期五星期‘六
'\n〃;
for(i=0;i<First_monthday;i++)〃在每个月的第一天开始前,
用空格补位
out«zz〃;
for(x=l;x<=Day[j];x++)〃在每个月结束后用空格补位
if(x<10)
OUt«Z,Z,«X;
else
out«z/z,<<x;
if(((x+First_monthday)%7)==0&&x<Day[j])〃换行
out<<endl;
}
break;
case'3’:
system(〃cls〃);
for(j=l;j<13;j++)
if(j!=l)
x+=Day[j-l];
First_monthday=(x+First_yearday)%7;〃计算每个月的第一天
是星期儿
for(i=0;i<First_monthday;i++)〃每个月到达第一天之前,置0
a[j-l][0][i]=0;
for(k=l;k<=Day[j];k++)
a[j-l][(i+k-l)/7][(i+k-l)%7]=k;〃输出日期
for(;k<43-First_monthday;k++)〃排版
a[j-l][(i+k-l)/7H(i+k-l)%7]=0;
for(i=0;i<12;i+=3)
(
1=1;
for(j=0;j<6;j++)
(
if(1==1)
out〈〈year<<"年"<<i+l<<"月"<<'\t\t\t";
out〈<year<<"年月;
out〈<year<<"年月;
out。"日二三,•四五)/日一二三四五六日一二
三四五六'\n";
1=0;
)
for(k=0;k<7;k++)〃置零处,置成空格
(
if(a[i][j][k]==0)
out<<z"";
else
if(a[i][j][k]<10)
out。”"«a[i][j][k];
else
)
;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第16课《散文二篇-我为什么而活着》教学设计 2024-2025学年统编版语文八年级上册
- 2《我学习我快乐》 教学设计-2024-2025学年道德与法治三年级上册统编版
- 第12课《论语》十二章 教学设计2024-2025学年统编版语文七年级上册
- 10.1《浮力》(教学设计)-2024-2025学年人教版(2024)初中物理八年级下册
- 云计算与边缘计算对算力需求的影响
- 2025年度环保项目担保合同解除协议书
- 2025年河南建筑职业技术学院单招职业倾向性测试题库及答案一套
- 2025年度网络安全解决方案赊销合作协议
- 二零二五年度宠物医院店铺租赁合同协议书
- 低空经济行业趋势及市场前景分析报告
- 2023年金华职业技术学院高职单招(英语)试题库含答案解析
- GB/T 16492-1996光学和光学仪器环境要求总则、定义、气候带及其参数
- 部编版四年级语文下册第二单元教案
- FZ/T 01010-2012涂层织物涂层剥离强力的测定
- 混凝土耐久性课件
- 情报学与情报分析基础知识课件
- 穷查理宝典课件
- 殡葬礼仪服务整体保障方案
- 中山市口腔医院门诊牙科诊所医疗机构地址名单
- 新疆特色美食介绍课件
- 做时间的主人课件- 高中时间管理主题班会
评论
0/150
提交评论