版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高级语言程序设计课程设计报告万年历程序设计信息技术工程学院软件1102张锦琪2021/6/15(1) 课程设计名称:C+万年历设计(2) 使用工具软件:Microsoft visual C+(3) 课程设计内容简介1、以开关语句进行执行功能的选择,这些功能分别是:A、 判断闰年;B、 判断某天是星期几;C、 判断某年的隶属生肖;D、 输出某年的日历; E、 输出某月的日期;F、 退出系统;2、 建立类wnl,定义类的成员函数; void isleapyear(); /判断闰年,用于输出判断结果,以流的形式bool isleap(int year); /判断闰年,返回判断结果,用于计算天数 in
2、t getdays(int year,int month,int day); /获取据第一天天数void weekdays(int year,int month,int day); /获取星期几 void printyear(int year);/输出年的日历void printyearmonth(int year,int month); /输出某年某月的日历void animal(int year); /判断某年的生肖int getyear()return Year; /返回私有成员的值 int getmonth()return Month; int getday()return Day;3
3、、定义私有成员:int Year,Month,Day;4、定义类的对象:_wnl;5、为类的成员函数填写代码,满足功能实现;6、运行环境:控制台应用程序的源程序;(4) 得意之处:1、 可以满足多功能实现,可以循环执行功能;2、 可以选择每行输出的月份数;3、 有欢迎界面;4、 客户输入错误会有提示;5、 使用了C语言的流的形式,判断闰年,提高执行速度;6、 使用I/O流控制头文件iomanip.h控制月份日历的输出,更加整齐;(5) 创意的技术实现(6)(7)(8) 主函数流程 判断某天是周几 判断闰年 获取天数 输出年份(9) 课程设计中目前存在的问题: 无法在欢迎页面插入字符画;(10)
4、 设计实践过程中的自我感受 这是我第一次编写如此长的代码,从网上如同大海捞针似的寻找编写方法,看铺天盖地的长代码,还有的程序是错的。输入的时候,没有小工具。在看着自己熬通宵打出的代码,一大串的错误,真的有些泄气。改对了执行输出结果还是错的,只好重新思考算法。不过通过这次编程我真的学会了好多,比如其他的头文件的功能;setfil()设置填充字符;setw()定义字段长度也让我真正体会到了编程的作用,爱上了编程。(11) 参考文献:1吕凤翥,C+语言程序设计,清华大学出版社。实验代码:/万年历#include<iostream.h>#include<stdio.h>#inc
5、lude<iomanip.h> int dayofmonth13=0,31,28,31,30,31,30,31,31,30,31,30,31; /整形数组用于储存每月的天数char monthname135="","Jan","Feb","Mar","Apr","May","June","July","Aug","Seb","Oct","Nov"
6、,"Dec" /字符型数组用于储存月份名 第一个数字用于表示字符串数(相当于行) 第二个用于表示字符串长度(相当于列)class wnlpublic:void isleapyear(int year); /判断闰年,用于输出判断结果,以流的形式bool isleap(int year); /判断闰年,返回判断结果,用于计算天数 int getdays(int year,int month,int day); /获取据第一天天数void weekdays(int year,int month,int day); /获取星期几 void printyear(int year);
7、 /输出年的日历void printyearmonth(int year,int month); /输出某年某月的日历void animal(int year); /判断某年的生肖int getyear()return Year; /返回私有成员的值int getmonth()return Month;int getday()return Day;private:int Year,Month,Day;_wnl;void main()int choice,year,month,day;cout<<" 欢迎来到万年历查询系统"<<endl<<
8、endl;cout<<"设计人:"<<endl;cout<<" 天津职业技术师范大学nttt设计人:张锦琪nn"loop:cout<<" 请按序号输入您要做的工作:"<<endl;cout<<" 判断闰年请按1; "<<endl;cout<<" 判断某天是星期几请按2; "<<endl;cout<<" 判断某年的隶属生肖请按3; "<<endl;
9、cout<<" 输出某年的日历请按4; "<<endl;cout<<" 输出某月的日期请按5; "<<endl;cout<<" 如果您要退出系统请按0; "<<endl;cin>>choice;switch(choice)case 0:return;case 1:cout<<"输入一个年份格式如:xxxx" cin>>year;_wnl.isleapyear(year);break;case 2:cout&l
10、t;<"请输入您要查询的天数 格式如xxxx xx xx"cin>>year>>month>>day;_wnl.weekdays(year,month,day);break;case 3:cout<<"请输入您要查询的年份 格式如xxxx:"cin>>year;_wnl.animal (year);break;case 4:cout<<"请输入你要输出的年份xxxx:"cin>>year;_wnl.printyear(year);break;ca
11、se 5:cout<<"请输入您要输出的年月,形如xxxx xx:"cin>>year>>month;_wnl.printyearmonth(year,month);break;default:cout<<"输入错误"<<endl;cout<<"继续查询请输 1 "<<endl<<"退出查询请输入字符"<<endl;int x;cin>>x;if(x=1)goto loop;void wnl:is
12、leapyear(int year)if(year>=1000&&year<=9999)printf("%sn",year%(year%100?4:400)?"no":"yes"); /以C语言流的形式判断会更快一些,节省内存else printf("%sn","没有按格式输入");bool wnl:isleap(int year)if(year%400=0|(year%100!=0&&year%4=0)return 1;else return 0;v
13、oid wnl:weekdays(int year,int month,int day)if(year>=1000&&year<=9999)if(month<=12&&month>=1)int max=dayofmonthmonth;if(day>0&&day<max)int s=getdays(year,month,day)%7;switch(s)case 0:cout<<"Sunday"<<endl;break;case 1:cout<<"M
14、onday"<<endl;break;case 2:cout<<"Tuesday"<<endl;break;case 3:cout<<"Wednesday"<<endl;break;case 4:cout<<"Thursday"<<endl;break;case 5:cout<<"Friday"<<endl;break;case 6:cout<<"Saturday"&
15、lt;<endl;elsecout<<"没有按格式输入"<<endl;int wnl:getdays(int year,int month,int day)int i,sum=0;for(i=1;i<year;i+)if(isleap(i) sum+=366;else sum+=365;if(isleap(year) dayofmonth2=29;for(i=1;i<month;i+) sum+=dayofmonthi;sum+=day;return sum;void wnl:animal(int year)if(year>=
16、1000&&year<=9999)int n=year%12;switch(n)case 0: cout<<"该年是猴年"<<endl; break;case 1: cout<<"该年是鸡年"<<endl; break;case 2: cout<<"该年是狗年"<<endl; break;case 3: cout<<"该年是猪年"<<endl; break;case 4: cout<<&
17、quot;该年是鼠年"<<endl; break;case 5: cout<<"该年是牛年"<<endl; break;case 6: cout<<"该年是虎年"<<endl; break;case 7: cout<<"该年是兔年"<<endl; break;case 8: cout<<"该年是龙年"<<endl; break;case 9: cout<<"该年是蛇年"
18、;<<endl; break;case 10: cout<<"该年是马年"<<endl; break;case 11: cout<<"该年是羊年"<<endl; break;elsecout<<"没有按格式输入"<<endl;void wnl:printyear(int year)if(year>=1000&&year<=9999)cout<<"输入一行输出的月份数:"int choice;c
19、in>>choice;int s;int a3,b3; /b数组用来储存每月的天数 a数组用来临时储存那一月输出到的日期cout<<" year: "<<year<<endl;int i=1;for(i=1;i<=12/choice;i+) /计算纵向输出几个月for(int h=1;h<=choice;h+) /该循环用于输出横向月份名int m=choice*(i-1)+h; /计算月份cout<<" "<<monthnamem<<" "
20、;cout<<endl;for(h=1;h<=choice;h+)cout<<"- "cout<<endl;for(int j=0;j<choice;j+)cout<<"Su "<<"Mo "<<"Tu "<<"We "<<"Th "<<"Fr "<<"Sa "<<" "co
21、ut<<endl;for(j=0;j<choice;j+) /这个循环是为了输出第一行,第一行都是单数,所以提出来输int month;month=choice*(i-1)+j+1; /计算月份s=getdays(year,month,1);s=s%7; /获取每月第一天for(int m=0;m<s;m+)cout<<" " /输出月前的空if(isleap(year) dayofmonth2=29;bj=dayofmonthmonth; /月份天数 b数组储存一个月的天数for(int i=1;i<8-s;i+) /从一号开始输
22、出cout<<setw(2)<<i<<" " /最后那个空是为了让一位数和两位数对齐aj=i; /a数组用来储存每一行的日期素材cout<<" " /两个月份之间的空隙 cout<<endl;for(int w=1;w<=5;w+) /一个月最多会在五个星期出现for(j=0;j<choice;j+) /输出要求个数的月份int w=1;for(w=1;w<=7;w+,aj+) /依次输出日期if(aj>bj) /如果那一行的日期数大于该月最大日期则跳出break;cou
23、t<<setw(2)<<aj<<" "if(w=7)cout<<" " /输出每两个月之间日期间的空隙for(int n=1;aj>bj,n<=8-w;n+) /月份cout<<" "if(aj>bj&&w!=8) /输出月份结束后的空cout<<" "cout<<endl; /为了美观 空一行void wnl:printyearmonth(int year,int month)if(year>
24、;=1000&&year<=9999)if(month<=12&&month>=1)cout<<" "<<monthnamemonth<<endl;cout<<" -"<<endl;cout<<setw(6)<<"Sun"<<setw(6)<<"Mon"<<setw(6)<<"Two"<<setw(6)&
25、lt;<"Wed"<<setw(6)<<"Thur"<<setw(6)<<"Fri"<<setw(6)<<"Sat"<<endl; /我觉得输出这个可以定义一个数组,用循环来做,但这样可能会使执行速度变慢 int number=getdays(year,month,1)%7; /第一天就一就相当于有一天了for(int k=0;k<number;k+)cout<<setw(6)<<" "int max=dayofmonthmonth;for(int j=1;j<=max;j+)cout<<setw(6)<<j;if(number+j)%7=0) /周六换行cout<<endl;cout<<endl<<endl<<endl;elsecout<<"没有按格式输入"<<endl; 公司印章管理制度一、目的 公司印章是公司对内对外行使权力的标志,也是公司名称的法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度租赁房屋租赁解除合同2篇
- 2025年消防器材销售与消防系统升级及维护合同3篇
- 二零二五年度国际时装周模特签约合同4篇
- 消费金融行业2024年信用回顾与2025年展望 -新世纪
- 二零二五版模具行业市场调研合同4篇
- 二零二五版电子设备模具采购合作协议4篇
- 2025年金融机构外汇借款合同范本及信用评估体系3篇
- 贫困助学金感谢信500字(合集3篇)
- 练习版2025年度影视制作与发行合同2篇
- pe波纹管 施工方案
- 大学生国家安全教育意义
- 2024年保育员(初级)培训计划和教学大纲-(目录版)
- 河北省石家庄市2023-2024学年高二上学期期末考试 语文 Word版含答案
- 企业正确认识和运用矩阵式管理
- 分布式光伏高处作业专项施工方案
- 陈阅增普通生物学全部课件
- 检验科主任就职演讲稿范文
- 人防工程主体监理质量评估报告
- 20225GRedCap通信技术白皮书
- 燃气有限公司客户服务规范制度
- 延迟交稿申请英文
评论
0/150
提交评论