




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南京理工大学计算机科学与工程学院 第 1 页 共 18 页 1 C+C+课程设计课程设计 -日历的设计(良好组)日历的设计(良好组) 专业:计算机科学与技术 完成时间: 2020 年 6 月 6 日 南京理工大学计算机科学与工程学院 第 2 页 共 18 页 2 目录目录 前言 .2 正文 .2 2.1 设计程序的目的和思想 .2 2.1.1 设计程序的目的: .2 2.1.2 设计程序的思想: .2 2.2 设计环境 .3 2.3 设计目的 .3 2.4 设计流程 .3 2.5 设计内容和设计思想.4 2.5.1 大月和小月的定义.4 2.5.2 闰年与非闰年二月的定义 .4 2.5.3 日历表的输出.5 2.6 关键技术.6 总结 .6 效果图 .6 致谢 .8 参考文献 .8 附录 A.9 南京理工大学计算机科学与工程学院 第 3 页 共 18 页 3 前言前言 C+是美国 AT else if (i=2) if(isleapyear() /判断闰年 return 29; /是的话返回 29 天 else return 28;/不是闰年返回 28 天 计算输入的年份和几点 年份之间相差的天数 计算输入年份的 1 月 1 号是星期几 依次递增,按照每月 的天数按照要求排列 用两种方式 输出日历 居中竖向输出 横向输出,每三 月为一行 主菜单选择,整 合程序 结束 南京理工大学计算机科学与工程学院 第 6 页 共 18 页 6 else return 30; 运用简单的 if 语句来设定大小月。 If 语句是 c+中常用且简单的判断语句,用途相当广泛,使用起来简单易懂,易操作。 2.5.2 闰年与非闰年二月的定义 int isleapyear() if(year%4=0 else return 0; 构造闰月的判断函数,用返回值 1 和 0 来表示是否为闰年,对于后来的函数调用起来简单不容易 出错,如果出现 bug,修改起来也简单。 2.5.3 两种不同的输出方法 1.居中输出 void display2() int n=judgeweek(); for(int i=1;i=12;i+) /总共 12 个月份 int t=1; coutendlsetw(40) setw(5)year年setw(5)i月份endl; coutsetw(30) *endl; coutsetw(30) ; for(int j=0;j7;j+) coutsetw(5)weekdayj; coutendlsetw(30) *endl; coutsetw(30) ; for(int k=1;kn;k+,t+) coutsetw(5) ; /输入每月第一天的起始位置,即该天为星期几,用空格补充 for(int d=1;d=monthday(i);d+,t+) coutsetw(5)d; if(t=7) coutendlsetw(30) ; /控制每行只输出 7 个数字 t=0; /控制一行输出到星期日,如果到星期日则重新计数 n=t%7; if(n=0) /输出完一个月后,记录这个月的最后一天在哪里,寻找下个月第一天的起始位置 n=7; coutendlsetw(30) *endl; 南京理工大学计算机科学与工程学院 第 7 页 共 18 页 7 设计这种输出方法主要运用 for 语句,多重循环,以每个月为单位循环,将一个月划分为 7 列, 控制每行不超过 7 个数字,月头和月尾分别用空格补齐,如此循环而得。 2.横向输出方法 void display1() coutsetw(35)” ”year”年日历”; print(1) ; print(2) ; print(3) ; print(4) ; 横向输出相对居中输出有难度,所以在设计横向输出时将其划分为两个函数,display1 为横向总 的输出函数,它的作用主要是输出日历的头和调用下面的 print 函数。 void print(int x) char *a,*b,*c; int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j; int total=0; total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400; swtich(x) case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29; else sm=28; modf=total%7; mods=(modf+31)%7; if(islearpyear() modt=(mods+29)%7; else modt=(mods+28)%7; break; case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break; case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; fm 和 tm 和 sm 分别代表一组中三 个月依次的天数,modf 等代表每 个月依次的第一天的位置,dof 等 分别用来表示每个月从第一天到最 后一天. 南京理工大学计算机科学与工程学院 第 8 页 共 18 页 8 else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break; case 4:a=”十月”,b=”十一月”,c=”十二月”; fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break; default:cout”数据溢出”; break; coutsetw(12) asetw(17) bsetw(18) cendlendl; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 ; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 endl; for (i=1;i=modf;i+) coutsetw(3) ; for(dof=1;dof=7-modf;dof+) coutsetw(3)dof; for (i=1;i=mods;i+) coutsetw(3) ; for(dos=1;dos=7-mods;dos+) coutsetw(3)dos; for (i=1;i=modt;i+) coutsetw(3) ; for(dot=1;dot=7-modt;dot+) 南京理工大学计算机科学与工程学院 第 9 页 共 18 页 9 coutsetw(3)dot; coutendl; for(j=1;j=5;j+) for(i=1;ifm)coutsetw(3) ; else coutsetw(3)dof; dof+; for(i=1;ism)coutsetw(3) ; else coutsetw(3)dos; dos+; for(i=1;itm)coutsetw(3) ; else coutsetw(3)dot; dot+; coutendl; coutendl; 从写的程序来看横向输出要难的多,但主要思想不变,还是依赖多重循环,因为最终要求三个月 为一组输出,所以在设计时便将每三月作为一个整体,最后有四组,因为每个月按 7 列最多可排列 5 行,所以在一组中仅计算天数又有 7 列五行,如以上所标注的那样。 3.主函数的设计 int main() Date a; coutsetw(6)万年历查询endl; cout*endl; int choose; w:while(choose!=0) cout1 以横向模式显示该年万年历 endl; cout”2 以竖向模式显示该年万年历“endl; cout3 查询某天对应的星期数endl; cout4 退出系统endl; coutchoose; switch(choose) /功能选择 case 1:a.getyear();a.display1();break; case 2:a.getyear();a.display2();break; case 3:a.getday();a.searchday();break; case 4:cout谢谢使用万年历系统,请关闭!endl;exit(0);break; default:cout您输入有误,请重新输入endl;goto w; return 0; 主函数主要包括,日历的主界面,主菜单,上面各种函数的调用,其中选择使用 while 和 switc 函数两者结合,主函数是一个总结过程,将程序从头到尾整理依次运行。 2.6 关键技术 就本程序使用的技术有方面。都是使用的是简单的如 if 语句,switch 语句,for 循环语句, 输入和输出,变量的定义,等。 总结总结 通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习 C+,还是其它的语言, 以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使 自己便好地学好计算机。 效果图效果图 刚运行时如:图 1 图 1 南京理工大学计算机科学与工程学院 第 11 页 共 18 页 11 输入 2012 时,如:图 2 图 2 横向输出图 3 图 3 程序结束 图 4 致谢致谢 经过两周的不懈努力,很高兴能完成一个 C+编程,紧张的心终于可以平静了。从中体会到 以及学习到很多关于 C+的很大方面的只是,是我更加了解了 C+,并更加熟练了 C+。 在此次设计中我也遇到了很多的问题,都是经过查看老师所给的关于课程设计书和图书馆借 的书才明白所用函数的用法,更重要的是上课时老师的细心教学,使我们学会了许多关于 C+的 基础知识,为本次的课程设计打好了很好的基础。从而使我能够顺利完成这次课程设计。 南京理工大学计算机科学与工程学院 第 12 页 共 18 页 12 在本次做课程设计过程中,要感谢陆建锋老师的悉心关照,一直陪伴我们,并为大家讲解不 懂的地方,很是辛苦,也很是忙碌。还要感谢学院为我们此次课程设计提供机房,让我们有了良 好的学习环境可以利用所学做课程设计,从很大的程度上增强了我们对于 C+学习的兴趣。和小 组成员一块讨论,多听听别人的想法,想办法改进自己,这是我受益匪浅。只有比较才知道自己 的不足。我们一定要好好的改正自己的不足之处,完善自己。不做最好,只做更好!努力在老师 规定的时间内完成老师所规定的任务。 结束课设的时侯,心里就有一种很渴望但又很害怕的感觉,明白了自己与实际所需的距离, 因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是 更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课设就是对自己一个很 好的锻炼机会,无论任何的偿试,都是自己以后很宝贵的经验,更是对自己的一种充实。 参考文献参考文献 1谭浩强 著.C+面向程序程序设计.北京:清华大学出版社,2006.7 2吴乃陵,况迎辉,李海文 著.VC+程序设计.北京:高等教育出版社,2003.8 3邓宗明,张睿哲,张晓竞,等编著.Visual C+ 6.0 编程实用技术与案例.北京:清华大学 出版社,2001.5 4李海文,吴乃陵 等编C+程序设计及实践教程北京:高等教育出版社,2003.9 附录 1: #include #include #include #include #include using namespace std; class Date public: void getyear(); /输入想要查询的年份 void getday(); /输入想要查询的日期 int isleapyear(); /判断该年是否为闰年 int judgeweek(); /判断该年的 1 月 1 日是星期几 int monthday(int i);/判断该年每个月的天数 void display1(); /以横向模式输出结果 void display2(); /以居中模式输出结果 void print(int x); /横向输出的计算 void putfile(); /结果存入文件 void searchday(); /判断具体某天为星期几 private: int year; 南京理工大学计算机科学与工程学院 第 13 页 共 18 页 13 int month; int day; ; string weekday7= 一,二,三,四,五,六,”日”; /记录星期一到星期日 void Date:getyear() coutyear; void Date:getday() coutyear; cinmonth; cinday; int Date:isleapyear() if(year%4=0 else return 0; int Date:judgeweek() int total=0; /以 01 年 1 月 1 日(星期一)为基点 int n; total=(year-1)*365+(year-1)/4+(year-1)/400-(year-1)/100; /计算基点到输入年份的天数 n=total%7; if(n=0) return 0; else return n+1; /返回该年的 1 月 1 日为星期几 int Date:monthday(int i) if(i=1|i=3|i=5|i=7|i=8|i=10|i=12) return 31; else if (i=2) if(isleapyear() return 29; else return 28; else return 30; void Date:display1() 南京理工大学计算机科学与工程学院 第 14 页 共 18 页 14 coutsetw(35)” ”year”年日历”; print(1) ; print(2) ; print(3) ; print(4) ; void Date:print(int x) char *a,*b,*c; int fm,sm,tm,modf,mods,modt,dof,dos,dot,i,j; int total=0; total=(year-2000)*365+(year-2001)/4-(year-2001)/100+(year-2001)/400; swtich(x) case 1:a=”一月”,b=”二月”,c=”三月”; fm=31,tm=31; if(islearpyear() sm=29; else sm=28; modf=total%7; mods=(modf+31)%7; if(islearpyear() modt=(mods+29)%7; else modt=(mods+28)%7; break; case 2:a=”四月”,b=”五月”,c=”六月”; fm=30,sm=31,tm=30; if(islearpyear() modf=(total+91)%7; else modf=(total+90)%7; mods=(modf+30)%7; modt=(mods+31)%7; break; case 3:a=”七月”,b=”八月”,c=”九月”; fm=31,sm=31,tm=30; if(islearpyear() modf=(total+182)%7; else modf=(total+181)%7; mods=(modf+31)%7; modt=(mods+31)%7; break; case 4:a=”十月”,b=”十一月”,c=”十二月”; 南京理工大学计算机科学与工程学院 第 15 页 共 18 页 15 fm=31,sm=30,tm=31; if(islearpyear() modf=(total+274)%7; else modf=(total+273)%7; mods=(modf+31)%7; modt=(mods+30)%7; break; default:cout”数据溢出”; break; coutsetw(12) asetw(17) bsetw(18) cendlendl; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 ; cout setw(3) 日 setw(3) 一 setw(3) 二 ; cout setw(3) 三 setw(3) 四 setw(3) 五 ; cout setw(3) 六 endl; for (i=1;i=modf;i+) coutsetw(3) ; for(dof=1;dof=7-modf;dof+) coutsetw(3)dof; for (i=1;i=mods;i+) coutsetw(3) ; for(dos=1;dos=7-mods;dos+) coutsetw(3)dos; for (i=1;i=modt;i+) coutsetw(3) ; for(dot=1;dot=7-modt;dot+) coutsetw(3)dot; coutendl; for(j=1;j=5;j+) for(i=1;ifm)coutsetw(3) ; else coutsetw(3)dof; dof+; for(i=1;ism)coutsetw(3) ; else coutsetw(3)dos; dos+; for(i=1;itm)coutsetw(3) ; else coutsetw(3)dot; dot+; coutendl; coutendl; void Date:display1() coutsetw(35)” ”year”年日历”; print(1) ; print(2) ; print(3) ; print(4) ; void Date:display2() int n=judgeweek(); for(int i=1;i=12;i+) /总共 12 个月份 int t=1; coutendlsetw(40) setw(5)year年setw(5)i月份endl; coutsetw(30) *endl; coutsetw(30) ; for(int j=0;j7;j+) coutsetw(5)weekdayj; coutendlsetw(30) *endl; coutsetw(30) ; for(int k=1;kn;k+,t+) coutsetw(5) ; /输入每月第一天的起始位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京顺义区教委所属事业单位第二次招聘教师131人考前自测高频考点模拟试题及答案详解参考
- 2025北京市通州区新华街道社区卫生服务中心招聘非在编药学人员考前自测高频考点模拟试题附答案详解(典型题)
- 线上课堂协议样本
- 小学佛山安全教育培训课件
- 2025年微机励磁屏项目发展计划
- 2025年皮手套及皮革制衣着附件项目合作计划书
- 2025安徽六安市中医院紧缺人才招聘考前自测高频考点模拟试题附答案详解(突破训练)
- 2025届中国兵器装备春季校园招聘模拟试卷完整答案详解
- 2025年机组自动化屏项目建议书
- 2025年烟台莱阳市卫生健康局所属事业单位公开招聘工作人员(35人)模拟试卷及1套参考答案详解
- 18米固定式高杆灯
- 临时起搏器植入术后护理(心血管内科)
- 有机化学饱和烃课件
- GB/T 30707-2014精细陶瓷涂层结合力试验方法划痕法
- GB/T 26536-2011竹条
- 公司付款委托书 模板
- 全屋定制基础知识培训课件
- 设备安装施工方案
- 危险化学品作业场所安全、危险象形图、方向辅助标志、警戒线、警示语句、图形标志尺寸、基本形式
- 可测试性设计DFT课件
- 排污许可证管理培训
评论
0/150
提交评论