课程设计万年历的设计52503328
万年历单片机课程设计
![万年历单片机课程设计](https://img.taocdn.com/s3/m/e2247c4953d380eb6294dd88d0d233d4b14e3ff8.png)
万年历单片机课程设计一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握其功能和应用。
2. 学生能掌握万年历的运行机制,理解日期、时间计算的方法。
3. 学生能了解并运用编程语言(如C语言)进行单片机程序设计。
技能目标:1. 学生能运用所学知识,设计并实现一个具有日期和时间显示功能的万年历单片机系统。
2. 学生能够通过实践操作,掌握使用开发工具和调试技巧,提高问题解决能力。
情感态度价值观目标:1. 学生培养对单片机技术及编程的兴趣,激发创新意识和探索精神。
2. 学生通过团队协作,培养沟通、合作能力,提高集体荣誉感。
3. 学生在学习过程中,认识到科技发展对社会的重要性,增强社会责任感。
课程性质:本课程为实践性较强的课程,结合理论知识与实践操作,让学生在动手实践中掌握单片机技术。
学生特点:学生具备一定的电子技术基础,对编程有一定了解,好奇心强,喜欢动手实践。
教学要求:教师需结合学生特点,采用任务驱动、案例教学等方法,引导学生主动探究,确保课程目标的实现。
在教学过程中,注重培养学生的实践能力和创新能力。
通过对课程目标的分解和教学评估,确保学生达到预期学习成果。
二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理及功能特点,结合教材第二章内容,使学生建立单片机的基本概念。
2. 编程语言基础:回顾C语言编程基础,强调其在单片机编程中的应用,参考教材第四章进行教学。
3. 万年历原理:讲解日期和时间的计算方法,分析万年历的运行机制,结合教材第三章内容进行教学。
4. 单片机程序设计:教授如何使用C语言编写单片机程序,实现万年历功能,参考教材第五章内容。
5. 硬件电路设计:介绍万年历单片机系统的硬件组成,分析电路原理,结合教材第六章进行教学。
6. 实践操作:指导学生使用开发工具进行程序编写、调试和烧录,完成万年历单片机系统的搭建和测试。
7. 教学进度安排:- 第1周:单片机基础知识学习;- 第2周:编程语言基础复习;- 第3-4周:万年历原理讲解和单片机程序设计;- 第5周:硬件电路设计;- 第6周:实践操作,完成万年历单片机系统设计;- 第7周:总结与展示,进行教学评估。
c语言课程设计万年历
![c语言课程设计万年历](https://img.taocdn.com/s3/m/84cfe17c59fb770bf78a6529647d27284b733788.png)
c语言课程设计万年历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念,并能运用这些知识实现万年历的基本功能;2. 学会使用循环、判断等控制结构,实现对日期的有效处理;3. 了解并掌握C语言中模块化编程的方法,将万年历功能划分为独立的功能模块。
技能目标:1. 能够独立编写C语言程序,实现万年历的日期显示、查询、切换等功能;2. 学会使用调试工具,对程序进行调试和优化,提高程序的稳定性;3. 学会在团队协作中发挥个人优势,与他人共同完成程序设计。
情感态度价值观目标:1. 培养学生积极思考、勇于探索的精神,增强学生对编程的兴趣和热情;2. 培养学生良好的编程习惯,遵循编程规范,注重代码的可读性和可维护性;3. 培养学生的团队协作意识,学会与他人沟通、分享、互助,共同进步。
课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基本知识的基础上,运用所学知识完成万年历的设计与实现。
学生特点:学生具备一定的C语言基础,对编程有一定了解,但实践经验不足。
教学要求:结合学生特点,注重理论与实践相结合,引导学生主动参与,培养学生的编程能力和团队协作能力。
通过课程学习,使学生能够独立完成万年历的设计与实现,提高学生的编程水平和实际操作能力。
二、教学内容1. C语言基本语法复习:回顾结构体、数组、函数等基本概念,确保学生能够熟练运用;相关教材章节:第一章至第四章。
2. 控制结构:讲解循环、判断等控制结构在万年历中的应用;相关教材章节:第五章。
3. 模块化编程:引导学生将万年历功能划分为独立的功能模块,讲解模块之间的调用关系;相关教材章节:第六章。
4. 程序调试与优化:介绍调试工具的使用,教授学生如何找出并解决程序中的错误;相关教材章节:第七章。
5. 项目实践:指导学生按照教学大纲,分阶段完成万年历的设计与实现;相关教材章节:全书综合应用。
教学进度安排:1. 第一周:C语言基本语法复习;2. 第二周:控制结构;3. 第三周:模块化编程;4. 第四周:项目实践(第一阶段:功能设计);5. 第五周:项目实践(第二阶段:功能实现);6. 第六周:项目实践(第三阶段:调试与优化)。
c万年历课程设计
![c万年历课程设计](https://img.taocdn.com/s3/m/9f47d332571252d380eb6294dd88d0d232d43c57.png)
c 万年历课程设计一、课程目标知识目标:1. 让学生掌握年、月、日的概念及其关系,理解平年和闰年的区别;2. 使学生掌握如何使用万年历查找任意日期的星期,并了解其原理;3. 让学生了解不同历法的起源和发展,提高历史文化的认识。
技能目标:1. 培养学生运用数学知识解决实际问题的能力,如计算日期与星期之间的关系;2. 培养学生动手制作简单万年历的能力,提高动手操作和创新能力;3. 提高学生运用万年历进行时间管理和规划的能力。
情感态度价值观目标:1. 培养学生珍惜时间、合理安排生活的态度,树立时间观念;2. 激发学生对数学学科的兴趣,增强学习数学的自信心;3. 培养学生团队协作意识,学会与同学分享和交流学习心得。
本课程针对小学四年级学生设计,结合学生年龄特点和认知水平,注重知识性与趣味性的结合。
课程内容与教材紧密联系,旨在通过万年历的制作和使用,让学生在实际操作中掌握数学知识,提高解决问题的能力。
同时,注重培养学生良好的时间观念和情感态度,使学生在轻松愉快的氛围中学习,达到预期的学习成果。
二、教学内容1. 年、月、日的基本概念及其关系:包括一年有多少个月,一个月有多少天,平年和闰年的区别及其判断方法。
相关教材章节:第三章《年、月、日》。
2. 万年历的制作原理与使用方法:介绍星期与日期的关系,引导学生学会使用万年历查找任意日期的星期。
相关教材章节:第三章《认识星期》。
3. 不同历法的起源和发展:简述公历、农历等历法的历史背景,提高学生对历史文化的了解。
相关教材章节:第四章《历法的故事》。
4. 实践活动:分组让学生动手制作简易万年历,巩固所学知识,提高动手操作能力。
相关教材章节:第三章实践活动《制作自己的万年历》。
教学内容安排和进度:第一课时:介绍年、月、日的基本概念及其关系,判断平年和闰年的方法。
第二课时:讲解万年历的制作原理与使用方法,学会查找任意日期的星期。
第三课时:简述不同历法的起源和发展,提高历史文化认识。
自动万年历课程设计
![自动万年历课程设计](https://img.taocdn.com/s3/m/0e0e4f73ff4733687e21af45b307e87101f6f81f.png)
自动万年历课程设计一、引言万年历是一种常见的时间表示工具,能够提供年、月、日、星期等日期信息。
随着科技的发展,人们对于万年历的需求也越来越多样化。
本次课程设计旨在实现一个自动万年历的功能,通过编程实现自动计算日期、星期和节假日等功能。
二、设计目标设计一个自动万年历的程序,实现以下功能:1.输入年份和月份,自动计算该月的日期信息;2.根据输入的日期,自动计算该日是星期几;3.判断输入的日期是否是法定假日,如春节、清明节等;4.根据输入的年份,自动计算该年的各个节假日日期。
三、设计思路3.1 输入年份和月份,自动计算日期1.根据输入的年份和月份,判断该年是否为闰年;2.根据月份判断该月的天数;3.输出该月的日期信息。
3.2 根据日期,自动计算星期1.判断输入的年份是否为闰年;2.计算该日的累计天数;3.判断累计天数对7取模的结果,得到星期。
3.3 判断输入日期是否为法定假日1.根据输入日期判断是否是法定假日,需根据法定假日的具体规定进行判断;2.输出判断结果。
3.4 根据年份,自动计算节假日日期1.根据公历计算的时间规律,计算出春节的日期;2.根据农历计算的时间规律,计算出农历节日的日期;3.输出计算结果。
四、详细设计4.1 输入年份和月份,自动计算日期1.首先通过输入函数获取用户输入的年份和月份;2.使用条件语句判断输入的年份是否为闰年,根据结果确定二月的天数;3.根据月份和上一步得到的天数,使用循环结构输出该月的日期信息。
4.2 根据日期,自动计算星期1.输入年份、月份和日期;2.使用条件语句判断输入的年份是否为闰年,根据结果确定二月的天数;3.根据输入的年、月、日,计算出累计天数;4.使用计算得到的累计天数对7取模,得到星期。
4.3 判断输入日期是否为法定假日1.定义法定假日的日期范围和名称;2.输入日期;3.对输入日期进行判断,判断是否在法定假日日期范围内;4.输出判断结果。
4.4 根据年份,自动计算节假日日期1.输入年份;2.根据公历的时间规律,计算出春节的日期;3.根据农历的时间规律,计算出农历节日的日期;4.输出计算结果。
自动万年历课程设计
![自动万年历课程设计](https://img.taocdn.com/s3/m/e04f15e577a20029bd64783e0912a21615797f54.png)
自动万年历课程设计一、课程设计背景二、教学目标三、教学内容1. 自动万年历的基本原理2. 自动万年历的功能设计3. 自动万年历的界面设计四、教学方法和手段1. 讲授法2. 实践操作法五、教学流程安排六、评估方式和标准一、课程设计背景随着现代科技的不断发展,计算机技术已经成为人们日常生活中不可或缺的一部分。
计算机程序设计也成为了计算机科学中非常重要的一个方向。
自动万年历是一个基于计算机程序实现的应用软件,在日常生活中具有广泛应用。
因此,开设自动万年历课程能够帮助学生更好地了解软件开发过程,提高编程能力。
二、教学目标本课程旨在帮助学生掌握以下知识和能力:1. 掌握自动万年历的基本原理。
2. 理解自动万年历功能设计和界面设计。
3. 能够使用Java语言编写简单的自动万年历程序。
4. 能够运用所学知识,开发出实用性较强的自动万年历应用程序。
三、教学内容1. 自动万年历的基本原理介绍自动万年历的基本概念和原理,包括公历和农历的计算方法,闰年和平年的判断方法,节气计算等。
2. 自动万年历的功能设计介绍自动万年历应用程序的功能设计,包括日期查询、日程管理、节日提醒等功能。
3. 自动万年历的界面设计介绍自动万年历应用程序的界面设计,包括主界面设计、日期查询界面设计、日程管理界面设计等。
四、教学方法和手段1. 讲授法通过讲解理论知识,帮助学生掌握自动万年历的基本原理和应用程序开发过程。
2. 实践操作法通过实践操作,帮助学生更好地理解所学知识,并能够独立开发出实用性较强的自动万年历应用程序。
五、教学流程安排1. 第一周:介绍自动万年历的基本原理。
2. 第二周:讲解自动万年历应用程序的功能设计。
3. 第三周:讲解自动万年历应用程序的界面设计。
4. 第四周:进行实践操作,编写简单的自动万年历程序。
5. 第五周:进行实践操作,开发出实用性较强的自动万年历应用程序。
6. 第六周:进行课程总结和回顾。
六、评估方式和标准1. 课堂表现(占比30%):包括听课态度、提问能力等方面的表现。
万年历c语言课程设计
![万年历c语言课程设计](https://img.taocdn.com/s3/m/16492bdad5d8d15abe23482fb4daa58da0111cf7.png)
万年历 c语言课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握日期与星期之间的转换关系。
2. 学生能够运用C语言中的数据类型、运算符和函数实现日期的计算。
3. 学生掌握结构体在C语言中的应用,并能利用结构体数组存储和管理大量日期数据。
技能目标:1. 学生能够运用所学知识,设计并编写一个简单的万年历程序,实现日期的输入、输出及查询功能。
2. 学生能够在编写程序的过程中,运用结构化编程思想,使代码具有可读性和可维护性。
3. 学生能够通过调试和修改程序,解决实际问题,提高编程解决问题的能力。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,增强学习C语言的自信心。
2. 学生在团队合作中,学会互相帮助、沟通与协作,培养团队精神。
3. 学生通过编程实践,体会计算机科学在生活中的应用,认识到编程对解决实际问题的价值。
本课程针对高中年级学生,结合C语言编程知识,设计具有实用性和趣味性的万年历项目。
课程旨在让学生在实际编程过程中,掌握C语言的基本语法和编程技巧,提高解决问题的能力,同时培养团队协作和沟通能力。
通过本课程的学习,为学生奠定扎实的编程基础,激发他们对计算机科学的兴趣。
二、教学内容1. C语言基础语法复习:变量、数据类型、运算符、控制语句(条件语句、循环语句)。
2. 函数的定义与调用:重点复习函数的定义格式、参数传递、返回值。
3. 结构体的定义与应用:介绍结构体的概念、定义方法以及如何使用结构体数组。
4. 日期与星期的计算方法:讲解日期与星期之间的转换公式,引导学生理解算法。
5.万年历程序设计:a. 界面设计:设计简洁明了的用户界面,方便用户输入和查看日期。
b. 功能实现:实现日期的输入、输出、查询(按年月查询、按日期查询)。
c. 程序优化:讨论如何优化代码,提高程序运行效率。
d. 错误处理:学习如何处理用户输入错误、日期有效性验证等。
教学内容参考教材相关章节,按照以下进度安排:1. 第一课时:C语言基础语法复习,引入结构体概念。
万年历课程设计
![万年历课程设计](https://img.taocdn.com/s3/m/dcc72f6deffdc8d376eeaeaad1f34693dbef106b.png)
万年历课程设计一、课程目标知识目标:1. 学生能理解万年历的基本概念,掌握年、月、日的关系及其计算方法。
2. 学生能运用所学知识,制作并解释简单的阴阳历、阳历和阴历。
3. 学生能通过实例分析,了解不同文化背景下时间记录方式的异同。
技能目标:1. 学生能够运用万年历知识,解决生活中的实际问题,如日期推算、节日计算等。
2. 学生通过小组合作,提高沟通协调能力,共同完成万年历的制作。
3. 学生能够运用信息技术,收集、整理万年历相关资料,提高信息处理能力。
情感态度价值观目标:1. 学生培养对时间管理的重视,养成珍惜时间、合理安排时间的良好习惯。
2. 学生通过学习不同文化背景下的时间记录方式,增强对多元文化的尊重和理解。
3. 学生在合作探究过程中,培养团队协作精神,提高问题解决能力和自信心。
课程性质:本课程为实践性、综合性课程,结合数学、历史、文化等多学科知识,旨在培养学生的综合素质。
学生特点:六年级学生具备一定的数学基础和动手操作能力,对新鲜事物充满好奇,善于合作交流。
教学要求:注重理论与实践相结合,以学生为主体,激发学生兴趣,引导学生主动探究,培养学生的实践能力和创新精神。
通过课程目标的分解,使学生在学习过程中达到预期的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 万年历的基本概念- 日期的组成:年、月、日- 阴阳历、阳历、阴历的定义及特点2. 年月日的关系及计算- 平年、闰年的判断- 月份数与天数的对应关系- 日期推算方法3. 不同文化背景下时间记录方式- 我国古代的时间记录方法- 西方阳历的发展及现行公历- 世界各地阴历的运用4. 万年历的制作与应用- 制作方法:手工绘制与电子表格- 实际应用:节假日计算、纪念日查询等5. 教学内容的安排与进度- 第一课时:万年历的基本概念,日期的组成- 第二课时:年月日的关系及计算方法- 第三课时:不同文化背景下时间记录方式- 第四课时:万年历的制作与应用,实践操作教学内容依据课程目标,结合教材章节进行组织,确保科学性和系统性。
课程设计说明万年历程序设计
![课程设计说明万年历程序设计](https://img.taocdn.com/s3/m/aed160f1a76e58fafbb0031d.png)
《高级语言程序设计》课程设计说明书设计题目:万年历程序设计班级:学号:姓名:完成日期:一:课程设计目的《高级语言程序设计》课程设计是电子信息、光信息专业和物理学专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计大体知识的明白得,把握利用C语言进行模块化软件设计的大体方式,提高通过编写程序解决实际问题的能力,为尔后从事设计工作和后续各类编程课程的学习打好基础。
二:需求分析题目:要求:输入年份和月份,自动输出该月的日历,清楚的显示每一天是礼拜几,输入年份,月份和具体日期能确信某天是礼拜几。
万年历是采纳数字电路实现对.时,分,秒.数字显示的计时装置,普遍用于个人家庭,车站, 码头办公室等公开场合,成为人们常生活中不可少的必需品,由于数字集成电路的进展和石英晶体振荡器的普遍应用,使得数字钟的精度,远远超过老式钟表, 钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如按时自动报警、按时自动打铃、时刻程序自动操纵、按时广播、自动起闭路灯、按时开关烘箱、通断动力设备、乃至各类按时电气的自动启用等,可是所有这些,都是以钟表数字化为基础的。
因此,研究万年历及扩大其应用,有着超级现实的意义。
它能够对年、月、日、周日、时、分、秒进行计时,关于数字电子万年历采纳直观的数字显示,能够同时显示年、月、日、周日、时、分、秒等信息,还具有时刻校准等功能。
综上所述此万年历具有读取方便、显示直观、功能多样、电路简练、本钱低廉等诸多优势,符合电子仪器仪表的进展趋势,具有广漠的市场前景。
三:概要设计1-判定是不是为闰年计算所输入的年份是不是可被4整除,假设不能被整除,为平年。
假设可被4整除,计算此年份可否被100整除,不能被100整除那么为闰年。
既能被4整除,也能被100整除的年份,假设也能被400整除,那么为闰年,不然为平年。
闰年366天,平年365天2-要紧设计思路四:详细设计源程序:#include <stdio.h> #include <stdlib.h>void DayOfWeek(){int rtnDay;int y,m,d;char ch;while (1){printf("请输入年月日(xxxx,xx,xx): ");scanf("%d,%d,%d", &y, &m, &d);fflush(stdin);rtnDay =(3*y-(7*(y+(m+9)/12))/4+(23*m)/9+d+17-((y+(m<3?-1:0))/100+1)*3/4) % 7; printf("%04d年%02d月%02d日是礼拜%d\n", y, m, d, rtnDay?rtnDay:7); printf("继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}void GetMonth(int D, int md, int n){int N ,m,d,y,c,Wd;int i,maxday,i1;if(md>=13||md<=0)printf("HAVE WRONG!");else{for(i1=0;;md++,i1++){if(md==0){md=12;D-=1;}elseif(md==13){md=1;D+=1;}m=md;printf("\n============%d,%2d============\n",D,md);if(0<m&&m<=12){switch(m){case 1:maxday=31;break;case 2:if(D%4==0&&D%100!=0||D%400==0) maxday=29;elsemaxday=28;break;case 3:maxday=31;break;case 4:maxday=30;break;case 5:maxday=31;break;case 6:maxday=30;break;case 7:maxday=31;break;case 8:maxday=31;break;case 9:maxday=30;break;case 10:maxday=31;break;case 11:maxday=30;break;case 12:maxday=31;break;default:printf("HAVE WRONG");}if(0<m&&m<=2){N=D-1;m=m+10;}else{N=D;m=m-2;}c=N/100;y=N%100;Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7; printf(" SUN MOU TUE WED TUR FRI SAT\n"); for(i=0;i<Wd;i++)printf("%4c",' ');for(d=1;d<=maxday;d++){printf("%4d",d);Wd=(Wd+1)%7;if(Wd==0)printf("\n");}}elseprintf("HAVE WRONG!");if(i1==n)break;}}}void MonthOfYear(){char ch;int y, m;while (1){printf("请输入年月(xxxx,xx): "); scanf("%d,%d", &y, &m);fflush(stdin);GetMonth(y, m, 0);printf("\n继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}void GetYear(){char ch;int y;while (1){printf("请输入年: ");scanf("%d", &y);fflush(stdin);GetMonth(y, 1, 11);printf("\n继续查询(y/n)");ch = getchar();if(ch != 'y' && ch != 'Y')break;}}int main(){char ch;while(1){system("cls");printf("1.查询礼拜\n");printf("2.查询月份\n");printf("3.显示一年\n");printf("4.退出程序\n");ch = getchar();fflush(stdin);switch(ch){case '1':DayOfWeek();break;case '2':MonthOfYear();break;case '3':GetYear();break;case '4':printf("是不是退出(y/n)");ch = getchar();fflush(stdin);if(ch == 'y' || ch == 'Y')exit(0);break;}}}五:运行成效及分析1 登录界面输入3,通过输入年份可显示一年每一个月份的日历;输入2,通过输入年份和月份(中间以空格分开)可显示该月的日历;假设输入1,通过输入年份月份和日期(中间以逗号分开)可显示该日的礼拜;输入4,那么退出查询系统2查询礼拜输入1后回车,然后输入具体的年月日可查出该天为礼拜几3查询月历输入2回车,然后输入年月可显示该月月历4显示一年输入3后回车,输入一个有效年份可显示该年的十二个月的月历。
c万年历课程设计
![c万年历课程设计](https://img.taocdn.com/s3/m/d59a92816e1aff00bed5b9f3f90f76c661374cb2.png)
c万年历课程设计一、课程目标知识目标:1. 学生能理解万年历的基本概念,掌握年、月、日的关系及其换算方法。
2. 学生能运用所学的数学知识,编写简单的万年历程序,计算任意日期是星期几。
3. 学生了解历法的起源和发展,理解我国农历与公历的区别和联系。
技能目标:1. 学生通过编写万年历程序,提高编程能力和逻辑思维能力。
2. 学生能够运用万年历知识解决实际问题,如计算节日日期、安排活动等。
3. 学生学会查阅相关资料,培养自主学习能力和合作精神。
情感态度价值观目标:1. 学生对万年历产生兴趣,激发学习数学和编程的热情。
2. 学生通过了解历法的发展,增强对传统文化的认识,培养民族自豪感。
3. 学生在合作学习中,学会尊重他人,培养团队协作意识。
本课程旨在结合学生年级特点,以提高学生的数学应用能力和编程技能为核心,通过万年历的学习,使学生在掌握知识的同时,培养良好的学习态度和价值观。
课程目标具体、可衡量,为教学设计和评估提供明确方向。
二、教学内容1. 万年历的基本概念:年、月、日的关系,闰年的判断方法,星期计算。
2. 编写万年历程序:流程图设计,算法实现,调试与优化。
3. 历法的起源与发展:古代历法,农历与公历的转换,二十四节气。
4. 实践应用:计算特定日期的星期,安排节日活动,了解历史上的今天。
教学大纲:第一课时:万年历的基本概念,闰年的判断方法,星期计算。
第二课时:编写万年历程序,学习流程图设计,实现基本算法。
第三课时:历法的起源与发展,了解农历与公历的转换,学习二十四节气。
第四课时:实践应用,解决实际问题,如计算节日日期,了解历史上的今天。
教学内容依据课程目标,结合课本章节,保证科学性和系统性。
通过以上安排,使学生掌握万年历相关知识,提高编程技能,并培养对传统文化的认识。
三、教学方法本课程采用以下多样化的教学方法,旨在激发学生的学习兴趣,提高主动性和参与度:1. 讲授法:教师通过生动的语言和形象的比喻,讲解万年历的基本概念、历法的发展和算法原理,为学生奠定坚实的理论基础。
数字电子课设:万年历的设计
![数字电子课设:万年历的设计](https://img.taocdn.com/s3/m/060d7557dd88d0d232d46aac.png)
编号北京工商大学数字电子技术基础《万年历的设计》姓名学院班级学号设计时间一、设计目的1、熟悉集成电路的引脚安排2、掌握芯片的逻辑功能及使用方法3、了解数字电子钟及万年历的组成及工作原理4、熟悉数字电子钟及万年历的设计与制作5、熟悉multisim电子电路设计及仿真软件的应用二、设计思路1、设计60进制秒计数器芯片2、设计24进制时计数器芯片3、设计31进制天计数器芯片4、设计12机制月计数器芯片5、设计7进制周计数器芯片6、设计闰年平年不同月份不同进制逻辑三、设计过程1、Tr_min and s 60进制计数器芯片:“秒”、“分”电路都六十进制,它由一级十进制计数器和一级六进制计数器组成,六十进制计数器的设计图如下,采用四个片74ls161N串联而成,低位芯片的抚慰信号作为下级输入信号,串接起来构成“秒”、“分”计数器芯片。
2、Tr_hour 24进制计数器芯片:24进制计数器芯片的设计图如下,时计数电路由两片74ls161串联组成。
当时个位计数为4,十位计数为2时,两片74ls160N复零,从而构成24进制计数。
3、Tr_day天计数器芯片:采用两片74ls160N和一片74ls151N串联而成,天计数器的进制受到月计数器反馈M、N影响和年计数器反馈R4的影响,在M、N不收到反馈信息的时候,天计数器为28进制,电路设计图如下:4、Tr_week周计数器芯片:周计数器由一块74ls161N构成一个七进制计数器,原理与秒、分、时计数器相似,电路设计图如下5、Tr_month月计数器芯片:采用两片74160N和两片74HC151D_2V串联而成,月计数器的反馈信息M、N影响日计算器的进制,本身月进制计数器为12进制,电路设计图如下:6、Tr_year年计数器芯片:年计数器由七片74160N组成,其中四片构成四个十进制来确定年份,另外三块则为闰年R4确定值,并把R4反馈到日计数器芯片中。
电路设计图如下:7、Tr_555 555计数器:方波信号,其周期约为一秒。
万年历课程设计
![万年历课程设计](https://img.taocdn.com/s3/m/553323e21b37f111f18583d049649b6648d709eb.png)
万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及其换算方法。
2. 学生能够运用所学的知识,制作并解释简单万年历,了解闰年和平年的判断规则。
3. 学生能够解释生活中的时间单位,如时、分、秒,并掌握它们之间的换算。
技能目标:1. 学生通过实际操作,学会制作和应用简单万年历,提升解决问题的能力和动手实践能力。
2. 学生能够运用万年历进行日期查询和推算,增强逻辑思维和计算能力。
3. 学生通过合作交流,提高表达和沟通能力,培养团队协作精神。
情感态度价值观目标:1. 学生培养对时间管理和计划安排的意识,养成珍惜时间、合理规划的好习惯。
2. 学生在学习过程中,体验探索和发现的乐趣,激发对自然科学和数学的兴趣。
3. 学生通过了解不同文化背景下的时间观念,增强跨文化理解和尊重多元文化的态度。
课程性质:本课程以实践性、探究性和趣味性为主要特点,结合数学、自然科学和社会文化知识,帮助学生建立时间观念,提高综合运用知识的能力。
学生特点:考虑到学生的年级特点,课程设计将注重直观演示和实际操作,以激发学生的兴趣和好奇心,同时结合学生的认知水平,逐步引导他们掌握万年历的制作和应用。
教学要求:教师在教学过程中,应关注学生的个体差异,提供个性化的指导和支持。
课程设计应注重培养学生的动手能力、逻辑思维能力和团队协作能力,确保学生能够达到预定的学习目标。
二、教学内容1. 年、月、日的概念及其关系- 介绍年、月、日的定义和相互关系。
- 年份的种类:闰年和平年的区别及判断方法。
2. 万年历的制作原理- 探索如何将日历与天文数据相结合,介绍格里高利历的基本原理。
- 学习如何通过计算确定每个月的天数,以及如何安排闰年的2月。
3. 日期的换算与查询- 学习日期的换算方法,如年与日、日与星期等。
- 实践操作:使用万年历进行日期查询和推算。
4. 实际应用与时间管理- 讨论如何利用万年历进行时间规划和管理。
万年历课程设计报告
![万年历课程设计报告](https://img.taocdn.com/s3/m/7b92fb9cba4cf7ec4afe04a1b0717fd5360cb2ab.png)
万年历课程设计报告一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及其换算方法。
2. 学生能够运用所学知识,独立制作并使用简易的万年历。
3. 学生了解我国农历与公历的区别及相互转换方法。
技能目标:1. 培养学生运用数学知识解决实际问题的能力,提高逻辑思维和推理能力。
2. 培养学生动手操作和团队协作能力,通过制作万年历的过程,锻炼实践操作技能。
情感态度价值观目标:1. 培养学生对时间管理的重视,树立珍惜时间的观念。
2. 增强学生对传统文化的认识,激发对中国古代天文历法的兴趣。
3. 培养学生积极探究、合作交流的良好学习态度,提高学习自信心。
课程性质分析:万年历课程属于数学与生活相结合的综合性课程,旨在让学生在实际问题中运用数学知识,提高解决实际问题的能力。
学生特点分析:考虑到学生所在年级的特点,课程内容应以直观、生动、有趣的方式进行设计,注重培养学生的动手操作能力和团队协作精神。
教学要求:1. 教师应充分准备教学资源,提供丰富的实例,引导学生主动参与学习过程。
2. 教学过程中,教师要以学生为主体,关注学生的个体差异,给予个性化指导。
3. 教师要关注学生的学习反馈,及时调整教学策略,确保课程目标的达成。
二、教学内容1. 年、月、日的关系及其换算方法- 公历与农历的基本概念- 年、月、日的定义及其相互关系- 闰年和平年的判断方法2. 简易万年历的制作- 万年历的基本结构- 制作步骤及注意事项- 万年历的使用方法3. 我国农历与公历的转换方法- 农历与公历的对应关系- 农历日期的推算方法- 二十四节气的计算与应用教学大纲安排:第一课时:导入万年历的概念,介绍年、月、日的关系及其换算方法,讲解闰年和平年的判断方法。
第二课时:指导学生动手制作简易万年历,掌握万年历的基本结构和使用方法。
第三课时:学习我国农历与公历的转换方法,了解二十四节气的计算与应用。
教材章节:《数学》教科书:第四章 时间与测量,第四节 万年历的制作与应用。
万年历课程设计
![万年历课程设计](https://img.taocdn.com/s3/m/5935d6c40c22590102029d38.png)
汇编语言课程设计报告书一.课程设计的题目和内容用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。
二.系统设计及功能要求1.系统封面设计内容:题目名称,设计日期,设计者姓名。
要求:具有动感,如题目名称移动;字体具有立体感。
可插入一些图画,如学校的校徽图。
2.输入画面设计内容及要求:①密码及口令:输入,核查及修改功能。
②年份:输入及判断功能。
如:年份值是否为4位整数,不为4位,提示用户重输。
3.日历计算功能设计①求某年某月某日是星期几的子功能。
(要求编成子程序)算法:s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c(其中:y为年份;c为某月某日是这一年的第几天,由②求出;s为总天数。
“/”为整除。
)n=s%7 (其中:n为星期数;“%”为求余数)②求某月某日是这一年的第几天的子功能。
(要求编成子程序)二月份是否为平年(28天)或闰年(29天)的算法:y/400=0∨y/4=0∧y/100≠0 (y为年份;“/”整除),则y为以闰年;否则,y为平年。
根据①②可求出一年中的日历。
4.日历输出功能设计。
①格式及显示设计显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。
②日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或再次显示使用。
1.程序系统总体功能模块调用图及模块功能说明封面程序的功能是显示欢迎信息,并且显示制作人的信息的;验证用户名和密码的程序是验证用户是否是合法的用户的,该程序要有容错的功能;万年历程序是主程序,该程序的功能是通过用户输入年和月,来查询日历的,并且该程序还可以判断输入的年份是平年还是闰年。
封底程序是用来显示用户退出万年历系统的时候,一个感谢用户使用万年历的界面的。
2.程序系统详细的程序框图(每个子程序的流程图)①封面子程序,封底子程序的框图注:以封面程序为例,封底程序与封面程序类似②用户名和密码子程序框图注:以用户名程序为例,密码程序和用户名程序类似③求某年某月某日是星期几的子程序④..求某月某日是这一年的第几天的⑤判断是平年还是闰年的子程序⑥年份月份转化为真值的子程序四. 程序运行结果五.系统源程序.386DATA SEGMENT USE16A0 DB ' _____◆____◆____◆____◆____◆____◆_____◆_____ $' DB '※※$' DB '| |$' DB '◆◆$' DB '| ┏☆━━━━━━━━━━━━━━☆┓|$' DB '◆☆^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆◆$' DB '| ┃欢迎进入万年历系统┃|$' DB '◆☆^ǒ^*★*^ǒ^*☆*^ǒ^*★*^ǒ^*☆*^ǒ^*☆◆$' DB '| ┗☆━━━━━━━━━━━━━━☆┛|$' DB '◆◆$' DB '| |$' DB '◆制作人:某某某◆$' DB '| |$' DB '◆班级:2班◆$' DB '| |$' DB '◆学号:123456789012 ◆$' DB '| |$' DB '◆日期:08.1.15 ◆$' DB '| |$' DB '◆◆$' DB '| |$' DB '◆◆$' DB '| 版权所有,请勿仿冒|$' DB '※____◆____◆____◆____◆____◆____◆____◆____※$'A1 DB ' ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆┏━☆━━━━━━★━━━━━━☆━┓◆$' DB '◇┃◆◇┃◇$' DB '◆┃请输入用户名和密码┃◆$' DB '◇┃◇↑↑↑↑↑↑↑↑↑↑↑↑↑◆┃◇$' DB '◆┗━☆━━━━━━★━━━━━━☆━┛◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇用户名:◇$' DB '◆◆$' DB '◇◇$' DB '◆密码: ◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB '◇◇$' DB '◆◆$' DB ' ◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇$'A2 DB '******★******☆******★*******☆*******★********$' DB '☆☆$' DB '| |$' DB '★★$' DB '| *********************************** |$' DB '☆* 欢迎再次使用万年历系统* ☆$' DB '| *********************************** |$' DB '★★$' DB '| |$' DB '☆☆$' DB '| |$' DB '★☆☆★★$' DB '| 如有不足之处,请联系我☆☆|$' DB '☆☆$' DB '| ★★☆|$' DB '★我们会不断的完善的★$' DB '| |$' DB '☆^_^ ☆$' DB '| |$' DB '★ISBN 7-300-00528-9 ★$' DB '| |$' DB '☆********★******☆********★********★*********☆$'A3 DB '******************万年历*******************$' DB '** ** ** **$' DB '======================================$' DB '| S UN | MON | T UE | WED | T HU | F A I | S A T |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$' DB '| | | | | | | |$' DB '|=====|=====|=====|=====|=====|=====|=====|$'YEAR DW ?MONTH DB ?B DW ?C1 DW 0D1 DW 0E DW 0G DB 0T DW 0S DB 0P DW ?N DW 0Y DW 0M DW 0BUF1 DB 31,?,31,30,31,30,31,31,30,31,30,31BUF2 DB 1,2,3,4,5,6,7,8,9,10,11,12INPUT1 DB '请输入要查询的年份:$'INPUT2 DB '请输入要查询的月份:$'INPUT3 DB '该年是平年$'INPUT4 DB '该年是闰年$'INPUT5 DB '要继续查询? 1.继续查询 2.退出万年历系统$'STR5 DB 5DB 0DB 5 DUP(0)STR6 DB 3DB 0DB 3 DUP(0)BUF3 DB ' 1',0AH,0DH,'$'DB ' 2',0AH,0DH,'$'DB ' 3',0AH,0DH,'$'DB ' 4',0AH,0DH,'$'DB ' 5',0AH,0DH,'$'DB ' 6',0AH,0DH,'$'DB ' 7',0AH,0DH,'$'DB ' 8',0AH,0DH,'$'DB ' 9',0AH,0DH,'$'DB '10',0AH,0DH,'$'DB '11',0AH,0DH,'$'DB '12',0AH,0DH,'$'DB '13',0AH,0DH,'$'DB '14',0AH,0DH,'$'DB '15',0AH,0DH,'$'DB '16',0AH,0DH,'$'DB '17',0AH,0DH,'$'DB '18',0AH,0DH,'$'DB '19',0AH,0DH,'$'DB '20',0AH,0DH,'$'DB '21',0AH,0DH,'$'DB '22',0AH,0DH,'$'DB '23',0AH,0DH,'$'DB '24',0AH,0DH,'$'DB '25',0AH,0DH,'$'DB '26',0AH,0DH,'$'DB '27',0AH,0DH,'$'DB '28',0AH,0DH,'$'DB '29',0AH,0DH,'$'DB '30',0AH,0DH,'$'DB '31',0AH,0DH,'$'C DB ?D DB ?STR1 DB 20DB 0DB 20 DUP(0)STR2 DB 20DB 0DB 20 DUP(0)STR3 DB 'admin' ; 用户名COUNT1 EQU $-STR3STR4 DB 'admin' ;密码COUNT2 EQU $-STR4BUF4 DB '用户名不正确,请重新输入!$'BUF5 DB '密码不正确,请重新输入!$'DATA ENDSSTACK SEGMENT USE16 STACKDB 200 DUP(0)STACK ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AH,0 ;设置显示方式MOV AL,3 ;彩色文本方式INT 10H;************************封面程序************************************ MOV AH,6MOV AL,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,26INT 10HMOV CX,24MOV SI,OFFSET A0MOV B,000EHLOPA0: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA0MOV AH,1INT 21H;*************************用户名,密码程序****************************MOV AL,0MOV CH,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,30INT 10HMOV CX,24 ;显示用户名的密码页面,共24行,循环输出24次MOV SI,OFFSET A1MOV B,000EHLOPA1: MOV AH,2 ;定光标位置MOV BX,1MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SI ; 显示字符串MOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA1MOV C,3 ;容错三次LOPA2: MOV AH,2 ;设置用户名光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,0D21HINT 10HLEA DX,STR1 ;输入用户名,保存在缓冲区STR1中MOV AH,10INT 21HMOV AL,STR1+1 ;用户名的长度送到AL中CMP AL,COUNT1 ;比较输入的用户名是否和指定的用户名长度一样JNE R ;长度不一样,跳转到PLEA SI,STR1+2LEA DI,STR3MOV CX,COUNT1REPZ CMPSB ;逐一比较两串的对应字符是否相等JNE R ;不相等,跳转到P 否则程序往下执行,输入密码MOV D,3LOPA3: MOV AH,2 ;设置密码光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1021HINT 10HLEA DX,STR2 ;输入密码,保存在缓冲区STR2中MOV AH,10INT 21HMOV AL,STR2+1 ;密码的长度送到AL中CMP AL,COUNT2 ;比较输入的密码是否和指定的密码长度一样JNE Q ;长度不一样,跳转到QLEA SI,STR2+2LEA DI,STR4MOV CX,COUNT2REPZ CMPSB ;逐一比较两串的对应字符是否相等JNE Q ;不相等,转QJMP T1 ;相等,转LOPA4R: MOV AH,2 ;设置显示用户名错误信息光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1521HINT 10HLEA DX,BUF4 ;输出用户名错误信息MOV AH,9INT 21HMOV AH,6MOV AL,1MOV CH,13MOV CL,33 ;清用户名输入行的屏幕MOV DH,13MOV DL,53MOV BH,30INT 10HINT 21HMOV AH,6MOV AL,1MOV CH,21MOV CL,33 ;清用户名出错行的屏幕MOV DH,21MOV DL,60MOV BH,20INT 10HDEC C ;循环次数减1JNZ LOPA2 ;跳转到LOPA2,重新输入用户名JE EXITQ: MOV AH,2 ;设置显示密码错误信息光标位置MOV BH,0 ; 页号为1(帧屏号)MOV DX,1521HINT 10HLEA DX,BUF5 ;输出密码错误信息MOV AH,9INT 21HMOV AH,6MOV AL,1MOV CH,16MOV CL,33 ;清密码输入行的屏幕MOV DL,53MOV BH,30INT 10HMOV AH,1INT 21HMOV AH,6MOV AL,1MOV CH,21MOV CL,33 ;清密码出错行的屏幕MOV DH,21MOV DL,60MOV BH,20INT 10HDEC D ;循环次数减1JNZ LOPA3 ;跳转到LOPA3,重新输入密码JE EXITMOV AH,1INT 21H;***********************显示万年历程序*******************************T1: MOV T,0MOV AH,6MOV AL,0MOV CL,0 ;清整个屏幕MOV DH,24MOV DL,79MOV BH,27INT 10HMOV CX,17MOV SI,OFFSET A3MOV B,0411HLOPA4: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,44DEC CXJNZ LOPA4MOV AH,2 ;定输入年份提示信息的光标MOV BX,0MOV DH,1MOV DL,17INT 10HLEA DX,INPUT1 ;提示信息,请输入要查询的年份MOV AH,9INT 21HMOV AH,2 ;定输入年份的光标MOV BX,0MOV DH,5MOV DL,19INT 10HLEA DX,STR5 ;输入年份,保存在缓冲区STR1中MOV AH,10INT 21HLEA DI,STR5+2 ; DI指向年份输入串的首地址MOV CL,STR5+1 ;输入年份字符串的长度送到CLMOV AX,0 ;年份转化为真值P1: MOV BL,[DI] ; 取字符送到BLSUB BL,30H ;字符减去30H,转化为真值MOV BH,0MOV P,10MUL PADD AX,BXINC DI ;DI指向下一个字符DEC CX ;长度减一JNZ P1MOV YEAR,AX ;把年送到YEAR中CALL PR ;调用判断平年还是闰年的程序JC L1 ;有进位,借位,跳转到L1,输出闰年,否则顺序执行,是平年MOV AH,2 ;输出平年信息的光标MOV BX,0MOV DH,1MOV DL,36INT 10HLEA DX,INPUT3 ;输出平年MOV AH,9INT 21HLEA DI,BUF1MOV [DI+1],BYTE PTR 28 ;平年把28送入BUF1中JMP J0L1: MOV AH,2 ;输出闰年信息的光标MOV BX,0MOV DH,1MOV DL,36INT 10HLEA DX,INPUT4 ; 输出闰年MOV AH,9INT 21HLEA DI,BUF1MOV [DI+1],BYTE PTR 29 ;闰年把29送入BUF1中J0: MOV AH,2 ;定输入月份提示信息的光标MOV BX,0MOV DH,2MOV DL,17INT 10HLEA DX,INPUT2 ;提示信息,请输入要查询的月份MOV AH,9INT 21HMOV AH,2 ;定输入月份的光标MOV BX,0MOV DH,5MOV DL,56INT 10HLEA DX,STR6 ;输入月份,保存在缓冲区STR2中MOV AH,10INT 21HLEA DI,STR6+2 ;DI指向月份输入串的首地址MOV CL,STR6+1 ;月份输入串的长度送到CL中MOV AX,0P2: MOV BL,[DI] ;取字符送到BL中SUB BL,30H ;字符减去30HMOV BH,0MOV S,10MUL SADD AX,BXINC DI ;DI指向下一个字符DEC CX ;长度减一JNZ P2MOV WORD PTR MONTH,AX ;月份值送到MONTH中CALL DTOB1 ;显示日历,调用DTOB1子程序返回N侄MOV DI,OFFSET BUF1DEC MONTHADD DI,WORD PTR MONTH ;取出每个月的天数MOV CL,[DI]MOV G,CLMOV SI,OFFSET BUF3MOV AL,6MUL NADD AX,19MOV B,AXMOV C1,9J1: MOV AH,2 ;确定每个月的一号的光标位置,即确定初始输入位置MOV BX, 0MOV DH,BYTE PTR C1MOV DL,BYTE PTR BINT 10HCMP DL,55JBE J2 ;DL<33,跳转到J2,否则行加1列从3开始ADD C1,2MOV B,19JMP J1J2: MOV DX,SIMOV AH,9 ;在当前光标位置显示数字INT 21HADD SI,5ADD B,6DEC GJNZ J1MOV AH,2 ;定输入月份的光标MOV BX,0MOV DH,22MOV DL,17INT 10HLEA DX,INPUT5MOV AH,9INT 21HMOV AH,1INT 21HCMP AL,31HJE T1JMP T2DTOB1 PROC NEAR ;求某年某月某日是星期几子程序PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV CX,0DEC YEARMOV AX,YEAR ;YEAR-1送入AX中MOV CX,YEARMOV DX,0MOV BL,4DIV BXMOV C1,AX ;(YEAR-1)/4送入C1中ADD CX,C1MOV AX,YEARMOV DX,0MOV BL,100DIV BXMOV D1,AX ;(YEAR-1)/100送入D中SUB CX,D1MOV AX,YEARMOV DX,0MOV BX,400DIV BXMOV E,AX ;(YEAR-1)/400 送入E中ADD CX,EMOV DX,0 ;DX清零MOV BX,0 ;BX清零MOV DL,MONTH ;求每个月的第一天是本年的第几天SUB DL,1MOV DI,OFFSET BUF2MOV SI,OFFSET BUF1R1: CMP [DI],DLJA R2 ;一月份的时候,跳转到R2MOV BL,[SI] ; 其它月份的时候,进行累加,计算每个月的第一天是该年的第几天ADD T,BXADD SI,1ADD DI,1JMP R1R2: ADD T,1ADD CX,T ;s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+TMOV AX,CXMOV DX,0MOV BX,7 ;S%7,计算每个月的第一天是星期几DIV BXMOV N,DXPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETDTOB1 ENDPPR PROC NEAR ;判断是平年还是闰年PUSH AXPUSH BXPUSH CXPUSH DXMOV AX,YEARMOV CX,AXMOV DX,0MOV BX,4DIV BXJNZ B1MOV AX,CXMOV BX,100DIV BXCMP DX,0JNZ B2MOV AX,CXMOV BX,400DIV BXCMP DX,0JZ B2B1: CLCJMP B3B2: STCB3: POP DXPOP CXPOP BXPOP AXRETPR ENDP;***********************底封程序*************************************T2: MOV AH,6MOV AL,0MOV CH,0MOV CL,0 ;清整个屏幕MOV DL,79MOV BH,26INT 10HMOV CX,22MOV SI,OFFSET A2MOV B,010EH LOPA5: MOV AH,2MOV BX,0MOV DX,BINT 10HADD DX,0100HMOV B,DXMOV DX,SIMOV AH,9INT 21HADD SI,52DEC CXJNZ LOPA5EXIT: MOV AH,4CHINT 21HCODE ENDSEND START六.系统设计及实现的技术特点,不足及改进的建议设计封面,封底的时候,我先开始不会用循环的方法显示封面,所以用了许多9号功能调用来显示封面,但用这样的方法,显示的封面不能太大,所以我改用了循环的方法来显示封面,这样封面就可以做的很大了,这是我的一个技术特点在编写验证用户名和密码的程序时,我原先没有弄容错的功能,但是后来经过我的思考,我加了一个循环,让输入错了再返回到原输入位置,并且用循环判断是不是到了最大的输入次数,超过最大次数就退出系统,否则继续输入。
课程设计--万年历的设计
![课程设计--万年历的设计](https://img.taocdn.com/s3/m/ae530002a216147917112878.png)
*******************实践教学*******************兰州理工大学计算机与通信学院2014年秋季学期面向对象课程设计题目:万年历的设计专业班级:姓名:学号:指导教师:成绩:序言《面向对象的程序设计》是计算机专业一门重要的专业基础课。
此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象的程序设计方法。
(6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。
1目录摘要 (3)第一章系统总体设计 (3)一.理论说明 (3)二.流程图说明 (5)1.总体流程说明图 (5)2.部分流程说明图 (5)第二章系统详细设计 (8)一.主要组成部分 (8)二.源程序 (10)第三章系统测试 (35)四软件使用说明书 (41)一.系统运行环境 (41)二.系统操作提示 (41)总结 (42)参考文献 (43)致谢 (43)2摘要万年历作为日常中的小工具,具有多方面的功能,能有效帮助人们记录以及计算时间,在极大程度上帮助人们在日期以及时间方面有最直观的体现。
该设计通过C++的基本知识和技能设计出一个万年历程序,该程序需实现时间和日期的显示以及计算。
c万年历课程设计
![c万年历课程设计](https://img.taocdn.com/s3/m/b0e1ac9f5ebfc77da26925c52cc58bd631869339.png)
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日之间的关系。
2. 学生能够运用数学知识,进行日期的计算和推算。
3. 学生能够了解不同历法的起源和发展,认识我国农历的特色。
技能目标:1. 学生能够运用所学知识,制作简单的万年历。
2. 学生能够通过观察、分析、推理等方法,解决日期计算问题。
3. 学生能够运用信息技术,查找历法相关资料,提高信息处理能力。
情感态度价值观目标:1. 学生培养对时间观念的尊重,养成珍惜时间的良好习惯。
2. 学生通过学习万年历,增强对我国传统文化的认同感。
3. 学生在学习过程中,培养合作意识,提高团队协作能力。
课程性质:本课程为数学学科拓展课程,结合实际生活,培养学生的实际应用能力。
学生特点:四年级学生具有较强的观察、分析、推理能力,对新鲜事物充满好奇心。
教学要求:注重理论与实践相结合,鼓励学生主动探究,充分调动学生的学习积极性。
在教学过程中,关注学生的个体差异,因材施教,确保每个学生都能达到课程目标。
通过课程学习,使学生能够将所学知识运用到实际生活中,提高综合素养。
二、教学内容1. 年、月、日的基本概念及关系- 介绍公历、农历的年份、月份、日期的表示方法。
- 讲解平年、闰年的判断方法及其意义。
2. 日期的计算与推算- 掌握日期推算的基本方法,如加减法、乘除法等。
- 引导学生运用所学知识,解决实际问题,如计算某人生日是星期几。
3. 历法的起源与发展- 简要介绍世界主要历法的发展历程。
- 着重讲解我国农历的起源、特点及其在生活中的应用。
4. 制作简单万年历- 教授制作方法,引导学生运用所学知识,动手制作属于自己的万年历。
- 选取合适的教学案例,展示万年历在实际生活中的应用。
5. 教学内容的安排与进度- 第一章节:年、月、日的基本概念及关系(1课时)- 第二章节:日期的计算与推算(2课时)- 第三章节:历法的起源与发展(1课时)- 第四章节:制作简单万年历(2课时)教学内容与教材关联性:本教学内容紧密围绕课程目标,结合教材相关章节,确保教学内容的科学性和系统性。
万年历的课程设计
![万年历的课程设计](https://img.taocdn.com/s3/m/1056918251e2524de518964bcf84b9d528ea2cf1.png)
万年历的课程设计一、课程目标知识目标:1. 学生能够理解年、月、日的关系,掌握闰年和平年的判断方法。
2. 学生能够运用万年历知识,正确编制和计算不同年份的日历。
3. 学生了解中国农历的基本知识,理解农历与公历之间的关系。
技能目标:1. 学生能够运用所学知识,独立完成万年历的制作。
2. 学生通过实际操作,提高观察、分析、解决问题的能力。
3. 学生能够运用信息技术手段,查找、整理万年历相关知识。
情感态度价值观目标:1. 学生培养对时间管理的重视,养成珍惜时间的良好习惯。
2. 学生在学习过程中,增强对我国传统文化的认同感和自豪感。
3. 学生通过合作学习,培养团队协作精神和沟通能力。
课程性质:本课程为综合实践活动课程,结合数学、历史等学科知识,注重实践与探究。
学生特点:四年级学生具有较强的求知欲和动手能力,对时间概念有初步的认识。
教学要求:教师应注重引导学生主动探究,培养学生的实践能力和创新精神,将理论知识与实际生活相结合,提高学生的学习兴趣和积极性。
通过本课程的学习,使学生达到上述课程目标,并将目标分解为具体的学习成果,以便于后续的教学设计和评估。
二、教学内容1. 年、月、日的关系及其计算方法- 公历与农历的基本概念- 闰年和平年的判断规则- 每月天数及年度天数的计算2. 万年历的制作原理与步骤- 万年历的基本结构- 万年历的制作方法及注意事项- 制作过程中日期排列与校验技巧3. 中国农历基础知识- 农历的起源与发展- 二十四节气的基本概念及其应用- 生肖、农历节日及其习俗4. 教学内容的安排与进度- 第一节课:介绍年、月、日的关系及计算方法,闰年和平年的判断规则- 第二节课:讲解万年历的制作原理与步骤,学生动手制作简易万年历- 第三节课:讲解中国农历基础知识,探讨农历与公历的异同教学内容参考教材章节:- 《数学》四年级上册:时间与日期- 《综合实践活动》四年级上册:我们的时间教学内容确保科学性和系统性,结合教学大纲,让学生在掌握万年历知识的基础上,深入了解我国传统文化,提高实践与探究能力。
c万年历课程设计
![c万年历课程设计](https://img.taocdn.com/s3/m/f7581d79580102020740be1e650e52ea5518cea7.png)
c 万年历课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握年、月、日的关系及换算方法;2. 学生能够运用所学的日期知识,正确编制简单的万年历;3. 学生了解我国农历及二十四节气的由来及特点。
技能目标:1. 学生通过实际操作,提高观察能力、分析能力和解决问题的能力;2. 学生能够运用万年历知识解决生活中的实际问题,如计算日期、安排活动等;3. 学生掌握基本的计算机或手工制作万年历的技能。
情感态度价值观目标:1. 学生培养对时间管理和珍惜时间的意识,树立时间观念;2. 学生在学习过程中,增强对我国传统文化的认同感和自豪感;3. 学生通过合作学习,培养团队协作能力和沟通能力,形成积极向上的学习态度。
课程性质:本课程为综合实践课程,结合数学、历史、文化等多学科知识。
学生特点:五年级学生具备一定的观察能力、分析能力和动手操作能力,对新鲜事物充满好奇心。
教学要求:教师应注重激发学生的学习兴趣,引导他们主动探究万年历知识,将理论与实践相结合,提高学生的综合运用能力。
同时,关注学生的情感态度价值观的培养,使他们在学习过程中形成正确的价值观。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 万年历的基本概念:介绍年、月、日的关系,引导学生理解闰年和平年的区别,掌握日期的换算方法。
教材章节:《数学》五年级下册第四章“年、月、日”2. 农历及二十四节气:讲解我国农历的起源、发展及特点,引导学生了解二十四节气的意义及农事活动。
教材章节:《传统文化》五年级下册第三章“我国的农历和节气”3. 万年历的制作:指导学生运用所学的日期知识,手工或使用计算机软件制作简单的万年历。
教材章节:《信息技术》五年级下册第四章“电子表格的应用”4. 实践活动:组织学生进行观察、记录和分析,了解日常生活中时间管理的重要性,提高珍惜时间的意识。
教材章节:《综合实践活动》五年级下册第二单元“时间管理”教学进度安排:第一课时:万年历的基本概念及换算方法第二课时:农历及二十四节气的学习第三课时:万年历制作方法的学习与实践第四课时:实践活动及成果展示教学内容注重科学性和系统性,结合教材章节,使学生在掌握万年历知识的同时,提高实践操作能力,培养正确的价值观。
万年历c语言课程设计
![万年历c语言课程设计](https://img.taocdn.com/s3/m/206a0a32a55177232f60ddccda38376baf1fe0cd.png)
万年历c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言中结构体和指针的基本概念及应用。
2. 使学生理解万年历的核心算法,包括日期的存储、计算及显示。
3. 帮助学生掌握如何使用C语言进行简单的文件操作。
技能目标:1. 培养学生运用结构体和指针进行数据组织的能力。
2. 培养学生利用循环和判断语句进行逻辑处理的能力。
3. 提高学生利用C语言解决实际问题的编程能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,增强其学习动力。
2. 培养学生团队协作和沟通能力,使其在合作中共同解决问题。
3. 培养学生面对问题时的耐心和毅力,树立正确的价值观。
课程性质:本课程为C语言程序设计实践课,强调理论与实践相结合,培养学生的编程能力和实际应用能力。
学生特点:学生已经具备一定的C语言基础,了解基本语法和编程思路,但对结构体、指针等高级概念掌握不牢,需要通过实践加深理解。
教学要求:教师应注重引导学生运用所学知识解决实际问题,关注学生个体差异,提供个性化指导,确保学生在课程中学有所得。
通过本课程的学习,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 结构体和指针的概念与应用- 结构体定义和使用- 指针的基本概念和操作- 结构体指针及用法2. 万年历核心算法- 日期的存储与计算- 判断闰年的方法- 星期计算算法3. C语言文件操作- 文件的打开与关闭- 文件读写操作- 文件错误处理4. 万年历程序设计- 界面设计及用户交互- 功能模块划分与实现- 程序调试与优化教材章节关联:1. 结构体与指针:参考教材第3章“复合数据类型”和第4章“指针”。
2. 核心算法:结合教材第6章“控制语句”和第7章“函数”。
3. 文件操作:参考教材第8章“文件”。
4. 程序设计:综合运用教材第1章至第8章的知识点。
教学进度安排:1. 结构体和指针(2课时)2. 万年历核心算法(3课时)3. C语言文件操作(2课时)4. 万年历程序设计(4课时)三、教学方法本课程采用以下教学方法,旨在激发学生学习兴趣,提高教学效果:1. 讲授法:- 对于结构体、指针等基本概念和理论,采用讲授法进行教学。
万年历课程设计报告
![万年历课程设计报告](https://img.taocdn.com/s3/m/f41f90fbf705cc17552709d7.png)
课程设计报告课程:面向对象程序设计设计项目:万年历学号:姓名:班级:指导教师:1.设计内容:显示公元后任何年份的日历,日历以月份顺序排列,每月一星期顺序排列,类似于一般挂历上的格式。
2.设计目的与要求:达到熟练掌握c++语言的基本知识和技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的设计问题。
3.工具与准备工作:在开始实验前,应回顾或复习相关内容。
需要一台计算机,其中装有Visual C++ 6.0 ,Visual C++ 2005,Dev-C++或MinGW Developer Studio等集成开发环境软件。
4. 系统分析与设计:万年历具有以下特点:平年365天(52周+1天),闰年366天(52周+2天),平年2月28天,闰年2月29天;每400年整一闰,或每4年且不为百年的一闰。
由以上特点以及1900年的元旦刚好是星期一这一已知条件,在程序中定义Date类的声明如下:class Data{private:int year;public:void getyear(); //提示用户输入想要查询的年份 int ioleapyear(); //判断该年是不是闰年int weekday(); //判断该年的元旦是星期几int monthday(int i); //该年每个月的天数void disp(); //显示结果。
};5.具体实现步骤:#include <iostream>#include <iomanip>using namespace std;class Data{private:int year;public:void getyear(); //提示用户输入想要查询的年份 int ioleapyear(); //判断该年是不是闰年int weekday(); //判断该年的元旦是星期几int monthday(int i); //该年每个月的天数void disp(); //显示结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计万年历的设计52503328兰州理工大学计算机与通信学院2014年秋季学期面向对象课程设计题目:万年历的设计序言《面向对象的程序设计》是计算机专业一门重要的专业基础课。
此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。
从而提高自我分析问题、解决问题的能力。
通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象的程序设计方法。
(6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。
目录摘要 (2)第一章系统总体设计 (3)一.理论说明 (3)二.流程图说明 (4)1.总体流程说明图 (4)2.部分流程说明图 (4)第二章系统详细设计 (7)一.主要组成部分 (7)二.源程序 (9)第三章系统测试 (34)四软件使用说明书 (40)一.系统运行环境 (40)二.系统操作提示 (40)总结 (41)参考文献 (42)致谢 (42)摘要万年历作为日常中的小工具,具有多方面的功能,能有效帮助人们记录以及计算时间,在极大程度上帮助人们在日期以及时间方面有最直观的体现。
该设计通过C++的基本知识和技能设计出一个万年历程序,该程序需实现时间和日期的显示以及计算。
一.实现提供时、分、秒组成的时间,并提供时间增加的方法(按秒);二.实现记录年、月、日的过程,并提供日期增加的方法(按天);三.通过上述两项,设计出除除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;四. 输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
该设计不仅体现了普通日历的功能,还加入了电子计时器的部分,使得万年历在原本的基础上有了更大的扩充。
关键字:时间,日期,格林威治时间差,电子计时器第一章系统总体设计一.理论说明关于万年历的基本要求,须体现时间,日期等,所以,定义时间类time,日期类date,完成关于年(year),月(month),日(day),时(hour),分(minute),秒(second)的定义。
1 在计算时间的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,minute到达60hour就加一,同样的方法对hour、day、month和year进行计算。
2在计算日期的时候,在对day计数时,考虑到大小月和闰年,对day 进行加1时,判断是哪一月和是否为闰年。
在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。
在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。
在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。
二.流程图说明1.总体流程说明图(图一)2.部分流程说明图(1)二月天数全年天数(2)(图三)另:在本程序中共用到三个类,定义时间的time类,定义日期的date类,以及公有继承了time和date的datetime类,此派生类的作用是定义电子时钟的运行方式。
在程序中还运用到一些独立的函数,以实现星期以及格林威治时间差等功能。
二、系统详细设计1. 主要组成部分该程序主要为了实现日期和时间的显示以及格林威治时间差的计算结果,其中功能时间的显示使用类datetime来实现,功能时差的计算使用类time 和类date来实现。
下面分别介绍类time,date的详细设计。
时间类time的具体实现流程:先声明后定义,类time定义为时间基类,其中:成员函数time()主要功能为时分秒赋初值,实现方式为:函数内定义成员函数int gethour(){return hour;};int getminute(){return minute;};int getsecond(){return second;}返回时分秒的值;成员函数void sethour(int nhour){hour=nhour;};void setminute(int nminute){minute=nminute;};void setsecond(int nsecond){second=nsecond;};成员函数~time主要功能为在撤销对象占有的内存之前完成清理工作释放内存,实现方式为:,通过对象调用析构函数完成清理工作。
类time具体实现流程为:class time{private:int hour;int minute;int second;public:time();time(int nhour,int nminute,int nsecond);time(time &c);~time();int gethour(){return hour;};int getminute(){return minute;};int getsecond(){return second;};void sethour(int nhour){hour=nhour;};void setminute(int nminute){minute=nminute;};void setsecond(int nsecond){second=nsecond;};};类date定义为:描述日期的基类其中:成员函数int getyear(){return year;};int getmonth(){return month;};int getday(){return day;};string getweek(){ return week;};主要功能为返回年月日的值,实现方式为:调用成员函数成员函数void setyear(int nyear){year=nyear;};void setmonth(int nmonth){month=nmonth;};void setday(int nday){day=nday;};void setweek(string c){week=c;};主要功能为给私有数据成员赋值,实现方式为通过调用析构函数实现。
类datetime公开继承类time和类date的属性,实现电子时钟的功能,完成时间由秒自增的过程。
定义函数week(),以及situation(),完成日期对应星期数以及时间差的计算过程,完善电子时钟以及万年历的功能。
2. 源程序#include<iostream>#include<string>#include<cmath>#include<windows.h>using namespace std;int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};bool isleapyear(int year)//判断是否是闰年{return (year%4==0 && year%100!=0)||(year%400==0);}int mon_day(int year ,int month)//判断月份对应的天数{if (isleapyear(year)&&month==2){return 29;}else return mon[month];}int getyearday(int year)//返回一年天数{if(isleapyear(year))return 366;else return 365;}class time{private:int hour;int minute;int second;public:time();time(int nhour,int nminute,int nsecond);time(time &c);~time();int gethour(){return hour;};int getminute(){return minute;};int getsecond(){return second;};void sethour(int nhour){hour=nhour;};void setminute(int nminute){minute=nminute;};void setsecond(int nsecond){second=nsecond;}; };class date{private:int year;int month;int day;string week;public:date();date(int y,int m,int d);date(date &t);~date();int getyear(){return year;};int getmonth(){return month;};int getday(){return day;};string getweek(){ return week;};void setyear(int nyear){year=nyear;};void setmonth(int nmonth){month=nmonth;};void setday(int nday){day=nday;};void setweek(string c){week=c;};void reset(int y=0,int m=0,int d=0);date operator +(const date &t);date operator -(const date &t);};class datetime:public date,public time{private:public:datetime();datetime(int nyear,int nmonth,int nday,int nhour,int nminute,int nsecond);datetime(int nyear,int nmonth,int nday,time & c);datetime(date & t,int nhour,int nminute,int nsecond);datetime addbysecond();datetime operator=(datetime & t);datetime operator+(datetime & t);};time::time()//判断时间并进行赋值{hour=0;minute=0;second=0;}time::time(int nhour,int nminute,int nsecond){if(nhour>24||nhour<0){ hour=0;}else hour=nhour;if(nminute>59||nminute<0){minute=0;}else minute=nminute;if(nsecond>59||nsecond<0){second=0;}else second=nsecond;}time::time(time &c){hour=c.hour;minute=c.minute;second=c.second;}time::~time()//time析构函数{}date::date()//date构造函数{year=0;month=0;day=0;}date::date(int y,int m,int d) {if(y<1900){y=1900;}else year=y;if(m>12 || m<=0)m=1;}else month=m;int maxday=0;if(m==2){if(isleapyear(year)) {maxday=29;}else{maxday=28;}}else{maxday=mon[m]; }if(d>maxday || d<=0) {d=1;}day=d;}date::date(date & t){year=t.year ;month=t.year;day=t.day;}date::~date(){};void date::reset (int y,int m,int d){this->year =y;this->month =m;this->day =d;}datetime::datetime():date(),time(){};datetime::datetime(int nyear,int nmonth,int nday,int nhour,int nminute,int nsecond):date(nyear,nmonth,nday),time(nhour,nminute,nsecond) {}datetime::datetime(int nyear,int nmonth,int nday,time & c):time(c),date(nyear,nmonth,nday){}datetime::datetime(date & t,int nhour,int nminute,int nsecond):date(t),time(nhour,nminute,nsecond){}datetime datetime::addbysecond(){this->setsecond(this->getsecond()+1);if(this->getsecond()>59){this->setsecond(0);this->setminute(this->getminute()+1);if(this->getminute()>59){this->setminute(0);this->sethour(this->gethour()+1);if(this->gethour()>23){this->sethour(0);this->setday(this->getday()+1);if(this->getday()>mon_day( this->getyear() ,this->getmonth())){this->setday(1);this->setmonth(this->getmonth()+1);if(this->getmonth() >12){this->setmonth(1);this->setyear(this->getyear()+1);}}}}}return *this;}datetime datetime::operator=(datetime & t){this->setyear(t.getyear());this->setmonth(t.getmonth());this->setday(t.getday());this->sethour(t.gethour());this->setminute(t.getminute());this->setsecond(t.getsecond());return *this;}datetime datetime::operator+(datetime & t){if((this->getyear()+t.getyear())<1900){this->setyear(1900);}else this->setyear((this->getyear()+t.getyear()));if((this->getmonth()+t.getmonth())>12 || (this->getmonth()+t.getmonth())<=0){this->setmonth(1);}else this->setmonth((this->getmonth()+t.getmonth()));int maxday=0;if((this->getyear()+t.getyear())==2){if(isleapyear((this->getyear()+t.getyear()))){maxday=29;}else{maxday=28;}}else{maxday=mon[this->getmonth()+t.getmonth()];}if((this->getday()+t.getday())>maxday ||(this->getday()+t.getday())<=0) {this->setday(1);}this->setday((this->getday()+t.getday()));return *this;}int dayinyear(datetime & t)//日期在年中的天数{int i=0,day=0;for(i=1;i<t.getmonth();i++){day+=mon_day(t.getyear(),i);}day+=t.getday();return day;}void getweek( datetime &t)//判断天数对应星期{int week=0;int diffday;if(t.getyear()==1900){if(t.getmonth()==1){diffday=t.getday()-1;}else{diffday=dayinyear(t)-1;}}else{int d1=getyearday(1900)-1;int d2=dayinyear(t);int d3=0;int year=0;for(year=1901;year<t.getyear();year++){d3+=getyearday(year);}diffday=d1+d2+d3;}week=diffday%7;switch(week){case 0:t.setweek("星期一");break;case 1:t.setweek("星期二");break;case 2:t.setweek("星期三");break;case 3:t.setweek("星期四");break;case 4:t.setweek("星期五");break;case 5:t.setweek("星期六");break;case 6:t.setweek("星期天");break;}cout<<t.getweek() <<" "<<endl;;}int getmonthfirst(datetime & t)//返回对应月的第一天星期数{datetimetemp(t.getyear(),t.getmonth(),1,t.gethour(),t.getminute(),t.getsecond());getweek( temp);//判断对应星期数if(temp.getweek()=="星期一")return 1;else if(temp.getweek()=="星期二")return 2;else if(temp.getweek()=="星期三")return 3;else if(temp.getweek()=="星期四")return 4;else if(temp.getweek()=="星期五")return 5;else if(temp.getweek()=="星期六")return 6;elsereturn 7;}void showmonth(datetime & t)//打印当前月日历{int i=0;cout<<"Monday"<<" "<<"Tusday"<<" "<<"Wedday"<<" "<<"Thuday"<<" "<<"Friday"<<" "<<"Satday"<<" "<<"Sunday"<<endl;int j=0;int k=1;int num=getmonthfirst(t);cout<<" ";for(k=1;k<=8-num;k++)cout<<k<<" ";cout<<endl;for(i=k;i<=mon_day(t.getyear(),t.getmonth());i++) {int flag=1;int first=k;if(i<10){cout<<" "<<i<<" ";}else cout<<i<<" ";if((i-k)==6){cout<<endl;k=i+1;}}}void stuation1(datetime & t)//计算两日期相差天数{int nyear=0;int nmonth=0;int nday=0;int nhour=0;int nminute=0;int nsecond;cout<<"请输入年月日:"<<endl;cin>>nyear>>nmonth>>nday;cout<<"请输入时分秒:"<<endl;cin>>nhour>>nminute>>nsecond;datetime temp ( nyear, nmonth,nday, nhour, nminute,nsecond); int diffday=0;if(t.getyear()==nyear){if(t.getmonth()==nmonth){diffday=abs(t.getday()-nday);}else{diffday=abs(dayinyear(t)-dayinyear(temp));}}else if(nyear<t.getyear()){int d1=getyearday(temp.getyear())-dayinyear(temp);int d2=dayinyear(t);int d3=0;int year=0;for(year=nyear;year<t.getyear();year++){d3+=getyearday(year);}diffday=d1+d2+d3;}else{int d1=getyearday(t.getyear())-dayinyear(t);int d2=dayinyear(temp);int d3=0;int year=0;for(year=t.getyear();year<nyear;year++){d3+=getyearday(year);}diffday=d1+d2+d3;}cout<<"与原日期相隔的天数为:"<<diffday<<endl; }int monthsurplus(datetime & t)//当月剩余天数{return mon_day(t.getyear(),t.getmonth())-t.getday(); }int yearsurplus(datetime & t)//当年剩余天数{return getyearday(t.getyear())-dayinyear(t);}void stuation2(datetime & t ){int diffday=0;int lastday=0;int lastmonth=0;int lastyear=0;cout<<" 请输入相隔的天数:"<<endl;cin>>diffday;if(diffday>0){if(diffday<=monthsurplus(t))//月未变{lastday=diffday+t.getday();lastmonth=t.getmonth();lastyear=t.getyear();}else if(diffday<=yearsurplus(t))//年未变{lastyear=t.getyear();int k=1;int i=monthsurplus(t);while(i<diffday){i+=(mon_day(t.getyear(),t.getmonth()+k));k++;}lastmonth=t.getmonth()+k-1;int h=0; int total=monthsurplus(t);for(h=(t.getmonth()+1);h<lastmonth;h++){total+=mon_day(t.getyear(),h);}lastday=diffday-total;}else//年变了{int k=1;int fmonth=0;int i=yearsurplus(t);while(i<diffday){i+=getyearday(t.getyear()+k);k++;}lastyear=t.getyear()+k-1;int fyear=yearsurplus(t);for(i=(t.getyear()+1);i<lastyear;i++){fyear+=getyearday(i);}int surplusday=diffday-fyear;//所求年的天数int h=0,j=1;while(h<=surplusday){h+=mon_day(lastyear,j);j++;}lastmonth=j-1;int total=0;int j1=1;for(;j1<lastmonth;j1++){total+=mon_day(lastyear,j1);}lastday=surplusday-total;}}else//diffday<0{if (abs(diffday)<t.getday()){lastday=t.getday();lastmonth=t.getmonth();lastyear=t.getyear();}else if(abs(diffday)<=dayinyear(t)){lastyear=t.getyear();int j=0,total=0;int k=t.getmonth();int i=t.getday();while(i<diffday){i+=mon_day(t.getyear(),k-1);k--;}lastmonth=k;for(j=t.getmonth();j>=(lastmonth+1);j--){total+=mon_day(t.getyear(),j);}lastday=diffday-total;}else{int i=dayinyear(t);int k=t.getyear();while(i<diffday){i+=getyearday(k-1);k--;}lastyear=k;int mtotal=0;int j=0;for(j=t.getyear();j>=lastyear+1;j--){mtotal+=getyearday(j);}int nday=abs(diffday)-mtotal;int h=0;int flag=0;int m=0;while(h<nday){h+=mon_day(lastyear,12-flag);flag--;}lastmonth=flag;int dtotal=0;for(m=12;m>=lastmonth+1;m--){dtotal+=mon_day(lastyear,m);}lastday=nday-dtotal;}}cout<<"日期为:"<<endl;cout<<lastyear<<"年"<<lastmonth<<"月"<<lastday<<"日"<<endl; }void Tprojection(datetime & sytime){int option=0;cout<<" 您已进入万年历系统"<<endl;cout<<" 您已进入日期推算菜单"<<endl;cout<<" 1.计算两日期相差天数"<<endl;cout<<" 2.计算日期前后推算"<<endl;cout<<" 请选择:"<<”1或2:”;cin>>option;system("cls"); //清屏switch(option){case 1:stuation1(sytime);//计算两日期相差天数break;case 2:stuation2(sytime);//计算日期前后推算break;}}void timers( datetime &dtime)//模拟电子计时器{int k=0;cout<<dtime.getyear()<<"年"<<dtime.getmonth()<<"月"<<dtime.getday() <<"日"<<dtime.gethour()<<"时"<<dtime.getminute()<<"分"<<dtime.getsecond()<<"秒"<<endl;getweek( dtime );//判断对应星期数while(true){Sleep(2200);dtime.addbysecond();//电子模拟showmonth(dtime);//打印当前月日历system("cls");cout<<dtime.getyear()<<"年"<<dtime.getmonth()<<"月"<<dtime.getday()<<"日"<<dtime.gethour()<<"时"<<dtime.getminute()<<"分"<<dtime.getsecond()<<"秒"<<endl;getweek( dtime );//判断对应星期数showmonth(dtime);//打印当前月日历}}void Elcsystem(datetime & sytime){int option=0;cout<<" 您已进入万年历模拟系统"<<endl;cout<<" 1.进入日期模拟输出系统"<<endl;cout<<" 2.进入日期推算系统"<<endl;cout<<"请选择"<<”1或2:”;cin>>option;system("cls"); //清屏switch(option){case 1 :{cout<<" 当前时间为:"<<endl;cout<<" ";timers( sytime);//模拟电子计时器};case 2:Tprojection(sytime);//日期推算break;system("plause");//暂停defaut:cout<<" 无此选项!!!!"<<endl;}}void showmenu(){cout<<" 您已进入电子模拟系统"<<endl;cout<<" 1.模拟万年历输出"<<endl;cout<<” 2.退出万年历系统"<<endl;cout<<"请选择:"<<”1或2:”;}int main(){int nyear=0;int nmonth=0;int nday=0;int nhour=0;int nminute=0;int nsecond;cout<<" 您已进入万年历系统"<<endl;cout<<" 请输入年月日"<<endl;cin>>nyear>>nmonth>>nday;cout<<" 请输入时分秒"<<endl;cin>>nhour>>nminute>>nsecond;system("cls"); //清屏datetime sytime( nyear, nmonth,nday, nhour, nminute,nsecond);int option;showmenu();cin>>option;system("cls"); //清屏while(option!=3){switch (option){case 1: Elcsystem(sytime);//调用电子模拟系统break;case 2:goto l;//退出系统break;default :break;}showmenu();cin>>option;}l:system("cls"); //清屏cout<<" ——谢谢使用——"<<endl; return 0;}第三章系统测试1.请输入日期按回车键进行下一步骤;(图3.1)2.请输入时间按回车进行下一步骤;(图3.2)3.选择下一过程按回车键继续;(图3.3)4.进入万年历模拟系统之后选择下一步骤按回车键继续;(图3.4)5.输出当前时间;(图3.5.1)停顿几秒后会显示万年历的输出情况;(图3.5.2)6.进入万年历模拟系统之后进行第二步骤;(图3.6)7.进入日期推算后选择下一步骤;(图3.7)8.输入日期计算与原日期相差天数值;(图3.8)9.推算出相差天数之后进行另一步骤;(图3.9.1)(图3.9.2)10.在日期推算界面中选择另一步骤,进行日期的前后推算;(图3.10)11.输入相隔天数按回车键继续;(图3.11)12.选择退出系统。