万年历程序设计说明书
- 格式:docx
- 大小:37.50 KB
- 文档页数:3
JA V A程序设计课程设计(论文)题目:万年历院(系):软件学院专业班级:计算机信息管理051班学号:学生姓名:指导教师:教师职称:起止时间:程序设计专题(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1课程设计题目 (2)2.2课程设计整体设计说明 (2)2.2.1课程设计内容 (2)2.2.2程序中所用类说明 (3)2.2.3程序中使用方法的说明 (3)2.2.4异常处理说明 (4)2.2.5程序运行效果及存在的问题 (4)2.3程序部分源代码及注释 (5)第3章课程设计总结 (12)参考资料 (13)第1章课程设计的目的与要求1.1 课程设计目的《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机信息管理专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
1.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
1.3 课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。
1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
万年历系统程序设计有以下特点:
①日历初始化和显示。
能根据系统日期进行初始化,并显示当前月份的月历,并突出显示当前日期。
②日期查询,可以输入一个日期,然后查询并正确显示日期所在月份的月历,并突出显示查询日期,如果输入日期不正确给出提示。
满足了以上设计要求之后,此程序设计的重点在于分析年、月以及信息流程的算法,然后根据万年历的特点,以及c语言程序设计流程算法,来完成此程序的设计。
当然,还利用c语言编写各个子程序,将软件将各个模块的功能分为列菜单、表明结构体、录入、排序、查询、插入及读取等来组成整个程序,实现对万年历的系统管理。
Step 1.
Step 2.
Step 3.。
万年历程序设计说明书一、引言万年历是一款方便用户查询日期、农历、节假日等信息的应用程序。
本文档将详细介绍万年历程序的设计和功能实现,以帮助开发人员理解和使用该程序。
二、需求分析1. 用户可以通过程序查询指定日期的公历和农历信息。
2. 用户可以查看指定日期是否为节假日,并显示节假日名称。
3. 用户可以选择查询某个年份的所有节假日。
4. 用户可以设置提醒功能,当指定日期到来时,程序会发送通知提醒用户。
5. 界面友好,操作简单,用户体验良好。
三、系统设计1. 技术选型本程序将使用Python语言进行开发,使用以下库和框架:- tkinter:用于创建程序的图形用户界面。
- datetime:用于处理日期和时间相关的操作。
- requests:用于发送HTTP请求,获取节假日数据。
- plyer:用于发送系统通知。
2. 模块划分本程序将分为以下几个模块:- 主界面模块:负责显示程序的主界面,包括日期选择框、查询按钮等。
- 日期查询模块:负责处理用户输入的日期,查询公历和农历信息,并显示在界面上。
- 节假日查询模块:负责查询指定日期是否为节假日,并显示节假日名称。
- 节假日提醒模块:负责设置提醒功能,当指定日期到来时发送系统通知提醒用户。
3. 数据获取与处理- 公历和农历信息:使用datetime库获取指定日期的公历和农历信息。
- 节假日数据:通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
四、功能实现1. 主界面设计主界面应包括日期选择框、查询按钮、显示区域等组件,用户可以通过日期选择框选择查询日期,并点击查询按钮进行查询操作。
查询结果将显示在显示区域中。
2. 日期查询功能实现用户选择查询日期后,程序将使用datetime库获取公历和农历信息,并将其显示在界面上。
3. 节假日查询功能实现用户可以选择查询某个年份的所有节假日。
程序将通过发送HTTP请求获取节假日数据,并使用json库进行解析和处理。
湄洲湾职业技术学院万年历说明书系别:自动化工程系年级:10级专业:电气自动化姓名:小清学号:1001020254导师姓名:佘明辉职称:副教授2013年 5 月27日目录1.前言 (1)2.系统设计参数要求 (2)3.系统设计 (3)3.1系统设计总体框图 (3)3.2 各模块原理说明 (3)3.2.1 AT89C51单片机最小系统模块 (3)3.2.2 液晶显示模块 (4)3.2.3 蜂鸣器模块 (5)3.2.4 独立键盘模块 (5)3.3 系统总原理图说明 (6)3.4系统印刷电路板的制作图 (6)3.5系统的操作说明 (6)3.6 系统操作注意事项 (6)参考文献 (7)致谢词 (8)附录 (9)附录1:电路总原理图 (9)附录2:印刷电路板 (10)附录3:原件清单 (11)1.前言随着半导体技术的迅速发展,特别是大规模集成电路出现,给人类生活带来了很多的改变。
尤其是单片机技术的应用产品已经随着社会前进的步伐走进我们的生活。
电子产品的应用可谓多不胜数,电子万年历就是其中的一种。
电子万年历的出现给人们的生活带来的极大的方便。
单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。
本设计是制作一个万年历,系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。
系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。
本系统硬件部分由AT89C51单片机、液晶显示器、DS18B20温度测量、键盘、蜂鸣器系统等部分构成。
软件部分在keil环境下用C51语言编写,包括时间设置、时间显示、定时闹钟、温度显示。
2.系统设计参数要求该系统要求参数具体如下:[1] 能显示年、月、日、星期、时、分、温度[2] 用液晶显示器来显示时间[3] 用PROUTEUS设计,仿真基于AT89C51单片机的万年历实验的硬件电路[4] 可设置定时时间,当定时时间到时,蜂鸣器发出报警声音3.系统设计3.1系统设计总体框图采用AT89C51作为主控单片机,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路,其框图如图3.1所示。
C++程序设计说明书题目:万年历班级学号:学生姓名:目录一.应用程序的名称二.应用程序的主题、设计目的三.应用程序简介1.程序的基本结构及内容2。
程序的运行环境四.主要运行界面的介绍五.程序亮点六.课程设计中存在的问题及解决方法一.课程设计名称万年历二.应用程序要求、目的主题:万年历目的:实现对年月的查询三.应用程序简介(1)基本结构:整个程序有cls_screen(清屏)、judgement(判断是否为闰年)、show_week(记录周几)、print_year(查询某年)、print_year_month(查询某年某月)等自定义函数,程序中涉及到switch语句、for语句、if语句等和多次函数调用语句,开头定义了day_of_month[]数组,主要目的是将12个月每个月有多少天依次排出,在后面又用if语句判断二月的天数是28还是29。
在主函数中运用while 语言与switch语句的嵌套,是程序拥有了循环的功能.用fflush(stdin);语句清除输入缓存,使程序在使用过程中不会太过眼花缭乱。
万年历的编程,需要两个方面的讨论和研究,一是要在用户输入年份的时候,判断该年是否为闰年,而对于闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。
所以会改变day_of_month[]数组中的二月份的数值。
二是在用户输入年月份的时候,判断该年该月的第一天是周几,从来好排列。
而对于判断周几,需要运用公式:w=(y+[y/4]+[c/4]—2c+[26(m+1)/10]+d-1)%7并用if语句使用判断。
通过这两个方面的讨论和实现,才能合理的编程出万年历的基本程序代码.(2)源程序代码:#include〈stdio.h>#include 〈string。
h〉#include 〈time.h>#include <math。
h〉#include 〈windows。
*******************实践教学*******************兰州理工大学计算机与通信学院2012年秋季学期Java 课程设计题目:万年历的设计专业班级:姓名:学号:指导教师:成绩:目录摘要 (2)序言 (3)正文 (4)一、系统分析与设计 (4)二、详细设计 (5)2.1 类Calendars (5)2.2 类Time (5)2.3 类CalTabel (5)三、系统测试 (6)四、软件使用说明书 (9)设计总结 (10)参考文献 (11)致谢 (12)附录1(源代码) (13)摘要根据万年历的需要,设计一个万年历的程序,实现在此万年历表中有关日期和时间的基本操作:显示当时系统的日期和时间;显示当日的年和月;通过查询显示指定年、月的日历;设置北京时间,以显示北京和格林威治的时间并以设定的时间开始计时。
设置时间和查询日历通过设计的窗体执行和显示。
关键词:万年历;图形界面;java技术序言1996年Java第一次发布就引起了人们的极大兴趣。
关注Java的人士不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》、《商业周刊》这样的主流媒体。
Java时第一种也是唯一一种在National Public Radio上占用了十分钟时间进行介绍的程序设计语言,并且还得到了$100 000 000的风险投资基金。
这些基金全部用来支持这种特别的计算机语言开发的产品。
Java语言在Internet舞台上以及亮相便名声大噪,其原因在于它将有望成为连接用户与信息的万能胶,而不论这些信息来源于Web服务器、数据库、信息提供商,还是任何其他渠道,Java固有的可靠性与安全性不仅令Java程序员放心,也令使用Java程序的用户放心。
而此次将用Java设计一个万年历表,我们更加了解Java面向对象的程序设计语言。
正文一、系统分析与设计1、系统的要求(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒);(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天);(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;(4)输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
单片机万年历课程设计说明书第一章设计原理功能:电子时钟能够显示时、分、秒显示时间的功能,还可以进行时和分的校对,而且其片选的灵活性强。
并且是以单片机为核心来设计的。
28BYJ48步进电机主要技术参数如表1-1所示。
表1-1 28BYJ48步进电机主要技术参数第二章硬件电路设计总体硬件原理图如图2-1所示。
AT89C51因为其含一个可擦除的ROM,以及其存储数据的时间长度可达10年之久所以选其作为该设计的核心控制部件。
图2-1 系统电路原理图2.1键盘电路设计该设计只用了一个键盘,但实现的功能却是比较完善,减少了硬件资源的损耗,该键盘可以实现小时和分钟的调节以及控制是否进入省电模式。
当按键按下又松开,可以实现屏蔽数码管显示的功能,达到省电的目的;直接按下不松开,则可以通过按键实现分钟的累加,每按一次分钟加一;而连续两次按下按键不放松,则可实现小时的调节,同样每按一次小时加一。
达到时间调节的目的。
选择的多功能按键如图2-2所示。
图2-2 多功能控制键2.2主控模块89C5189C51是一个8位单片机,片ROM全部采用FLASH ROM技术,晶振时钟为12MHz。
89C51是标准的40引脚双列直插式集成电路芯片,有4个八位的并行双向I/O端口,分别记作P0、P1、P2、P3。
第31引脚需要接高电位使单片机选用部程序存储器;第40脚为电源端VCC,接+5V电源,第20引脚为接地端VSS,通常在VCC和VSS引脚之间接0.1μF高频滤波电容。
第三章软件设计在主程序的开始定义了一组固定单元用来存储计数的分、秒、时的存储单元。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整。
系统总体流程图如图4-1所示。
图3-1 总体流程图第四章系统测试本系统的软件系统主要可分为主程序、定时计数中断程序、时间调整程序、延时程序四大模块。
在程序设计过程中,加强了部分软件抗干扰措施,下面对部分模块作介绍。
系统开始仿真的仿真图如图4-1系统仿真图所示。
《高级语言程序设计》课程设计说明书设计题目:万年历程序设计班级:学号:姓名:完成日期:一:课程设计目的《高级语言程序设计》课程设计是电子信息、光信息专业以及物理学专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习,其目的在于加深对程序设计基本知识的理解,掌握使用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;开始输入指令(1234)输入4退出判断是否为闰年1日历2月历3年历输入年月日数日年月输入年份按下回车可得星期几按下回车可得月历按下回车可得年历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后回车,输入一个有效年份可显示该年的十二个月的月历。
万年历设计报告书一、设计要求:1.具有年、月、日、星期、时、分、秒等功能;2.时间与阴、阳历能够自动关联;图-1 主程序流程图三、各模块的功能及程序说明1. 具有年、月、日、星期、时、分、秒等功能在设计这一程序的时候,考虑到要在用户界面上对年月日以及时分秒的输入,在使用上更简单易操作。
2. 时间与阴、阳历能够自动关联在设计这一功能的时候,考虑到阴历和阳历要关联,翻阅了大量的资料,找到他们的函数关系,使这一功能在使用上更方便。
四、源程序package prog;import java.util.Scanner;public class MC2 {static final int BASE_YEAR = 2000;static final int BASE_WEEK_DAY = 6;static int getWeekDay(int year, int month, int day) {int base = getWeekDayOfFirstDay(year);int days = getDaysBetweenFirstDay(year, month, day);return (base + days) % 7;}static int getWeekDayOfFirstDay(int year) {if (BASE_YEAR == year) return BASE_WEEK_DAY;int days = getDaysBetweenTwoYear(year, BASE_YEAR);if (year > BASE_YEAR)return (BASE_WEEK_DAY + days) % 7;elsereturn (BASE_WEEK_DAY - days % 7);}static int getDaysBetweenTwoYear(int year1, int year2) {int min = Math.min(year1, year2);int max = Math.max(year1, year2);int sum = 0;for (int i = min; i < max; i++)sum += getYearDays(i);return sum;}static int getYearDays(int year) {return isLeapYear(year)? 366: 365;}static int getDaysBetweenFirstDay(int year, int month, int day) { int sum = 0;for (int i = 1; i < month; i++)sum += getMonthDays(year, i);sum += day - 1;return sum;}static int getMonthDays(int year, int month) {switch (month) {case 1: case 3: case 5: case 7:case 8: case 10: case 12:return 31;case 4: case 6: case 9: case 11:return 30;case 2:return isLeapYear(year)? 29: 28;}return 0;}static boolean isLeapYear(int year) {return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;}static void printYear(int year) {for (int i = 1; i <= 12; i++)printMonth(year, i);}static void printMonth(int year, int month) {System.out.print("\n\n====================== " + month + " ======================\n");System.out.print("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");int wd = getWeekDay(year, month, 1);for (int i = 0; i < wd; i++)System.out.print("\t");int lastday = getMonthDays(year, month);for (int i = 1; i <= lastday; i++) {System.out.printf("%3d\t", i);if (wd++ % 7 == 6 && i != lastday)System.out.println();}}public static void main(String [] args) {System.out.print("Input a year: ");Scanner scanner = new Scanner(System.in);int year = Integer.parseInt(scanner.nextLine());printYear(year);}}五、操作方法当进入用户界面的时候,可以在年月日栏里分别输入年份月份和日,并能自己显示出相对应的农历以及星期。
目录一、概况设计 01主要模块设计 0二、核心功能设计 (4)3.1显示模块 (4) (5)3.2信号调用模块 (7)3.2.1时间信号调用 (7)3.2.2功能选择调用 (10)3.2.3温度湿度调用 (10)温度计算: (10)湿度计算: (10)露点计算: (11)三、程序基本操作流程图 (13)一、概况设计1主要模块设计2界面设计2.1时间显示界面2.2温度湿度露点显示界面2.3时间设置界面2.4闹钟设定界面2.5生日提醒界面如图所示,每个按键上方都对应着相应的按键描述,可根据描述选择功能、选择、调整、确认等功能。
二、核心功能设计3.1显示模块显示屏为12864LCD液晶显示屏,分辨率为128*64。
基本指令如下:函数设置:检查忙位延时子程序写命令到LCD写数据到LCD初始化LCD屏显示图片显示字符串显示字节图片清整个GDRAM空间请指定区域GDRAM清屏命令数字图片转换指定位置反白3.2信号调用模块3.2.1时间信号调用由于硬件使用了时钟芯片ds1302,因此对时间的读取可直接对芯片寄存器内数据进行读取。
根据上图所给地址,调用函数即可实现对时间信息的读取。
时序图:寄存器地址:函数变量设置:初始化读数据写数据实时数据单字节写实时数据单字节读时间设置设置时间调整闹钟时间设置3.2.2功能选择调用设置一个函数Check_key()扫描按键,当出现按键变化时返回一个值。
设置一个全局变量MODE根据返回值选择相应的功能。
设置5个界面--功能函数,每个MODE 对应一个界面。
3.2.3温度湿度调用温度湿度传感器SHT11与口P2.0/P2.1相连读取data处理相应数据即可。
温度计算:湿度计算:露点计算:时序图:函数变量设置:启动sht11重连sht11向sht11中写数据从sht11中读数据测量实时温湿度计算温湿度计算露点获取温度湿度露点3.3其它模块存放一些上述模块未提到或关联不大的函数。
函数变量设置:响铃延迟子函数数字图库ASC码转换六、程序基本操作流程图。
数据结构课程设计设计说明书万年历的实现学生姓名学号班级成绩指导教师数学与计算机科学学院2012 年 9 月 8 日数据结构课程设计评阅书课程设计任务书2012—2013学年第1学期专业:计算机科学与技术学号:姓名:课程设计名称:数据结构课程设计设计题目:万年历的实现完成期限:自 2012 年 8 月 27 日至 2012 年 9 月 8 日共 2 周设计依据、要求及主要内容(可另加附页):运用C/ C++结构体、函数、数据结构等基知识,按以下要求编程实现万年历的功能:1)阐述设计思想,画出流程图;2)输入任一年,判断该年是否为闰年;输入年月日计算该日为当年的那一天;3).输入任一年,显示该年的日历,日历包括阳历、农历、节气;4). 说明测试方法,写出完整的运行结果,较好的界面设计.设计要求:1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。
2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型。
逻辑设计的结果应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
详细设计的结果是对数据结构和基本操作做出进一步的求精,写出数据存储结构的类型定义,写出函数形式的算法框架;4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。
同时加入一些注解和断言,使程序中逻辑概念清楚;5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。
能够熟练掌握调试工具的各种功能,设计测试数据确定疑点,通过修改程序来证实它或绕过它。
《高级语言程序设计》课程设计说明书设计题目:编写万年历系统目录第1章需求分析 (2)第2章概要设计 (2)第3章详细设计 (5)第4章运行结果及分析 (12)第5章课程设计心得 (17)参考文献 (17)1第1章需求分析(1)程序运行时,首先给出六个菜单选项和输入提示:图1(2)用户可以通过主菜单选择不同选项。
输入1,通过输入具体日期可显示该日的星期;输入2,通过输入年份可判断是否是闰年;若输入3,打印某年的年历;输入4,打印某年某月的日历;输入5,查询某月的最大天数;输入6,退出。
第2章概要设计1.闰年的判断:计算所输入的年份是否可被4整除,若不能被整除,为平年。
若可被4整除,计算此年份能否被100整除,不能被100整除则为闰年。
既能被4整除,也能被100整除的年份,若也能被400整除,则为闰年,否则为平年。
闰年366天,平年365天3图2代码:int runnian(int year){if(year%4==0&&year%100!=0||year%400==0) return 1;elsereturn 0;}2.判断某月的天数;通过函数:int day1(int year,int month){int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 若为闰,则二月为29天。
图2-1代码:if(runnian(year))a[1]=29;3.打印年历第3章详细设计#include <stdio.h>#include <stdlib.h>bool isLeapyear( int nowYear );int calcuWeek( int totalDays );int calcuDays( int nowYear,int nowMonth,int nowDay );bool checkValid( int nowYear,int nowMonth,int nowDay ); void nowMonthprint( int nowYear,int nowMonth,int nowDay );5void weekDayPrint( int nowYear,int nowMonth,int nowDay );void nowYearprint( int nowYear );void menuPrint();const int leapDay[12]={31,29,31,30,31,30,31,31,30,31,30,31};//存储闰年每月天数const int noleapDay[12]={31,28,31,30,31,30,31,31,30,31,30,31};//存储非闰年每月天数int main(){int year,month,day;while( true ){menuPrint();int op;scanf("%d",&op);switch( op ){case 1:{printf("请输入年月日(格式为YYYY-MM-DD):");scanf("%d-%d-%d",&year,&month,&day);if ( checkValid(year,month,day) )weekDayPrint(year,month,day);else{printf("输入错误!!!退出操作\n");break;}break;}case 2:{printf("请输入需要查询的年份:");scanf("%d",&year);if( year > 9999 || year < 0 ){printf("年份输入错误!!!退出操作\n\n");}if ( isLeapyear( year ) )printf("%-4d年是闰年!!!\n\n",year);elseprintf("%-4d年是平年!!!\n\n",year);break;}case 3:printf("请输入需要查询的年份:");scanf("%d",&year);if( year > 9999 || year < 0 ){printf("年份输入错误!!!退出操作\n\n");break;}nowYearprint(year);break;case 4:printf("请输入年月日(格式为YYYY-MM-DD):");scanf("%d-%d-%d",&year,&month,&day);if ( checkValid(year,month,day) )nowMonthprint(year,month,day);else{printf("输入错误!!!退出操作\n");break;}break;case 5:int maxdays;printf("请输入需要查询的年份及月份(格式YYYY-MM):"); scanf("%d-%d",&year,&month);if( year > 9999 || year < 0 || month > 12 || month < 0 ){printf("年份及月份输入错误!!!退出操作\n\n");7}if ( isLeapyear(year))maxdays = leapDay[month-1];elsemaxdays = noleapDay[month-1];printf("%d年%d月最大天数为%d\n\n",year,month,maxdays);break;case 6:printf("退出系统,谢谢使用\n\n");return 0;break;}}return 0;}bool isLeapyear( int nowYear ) // 判断是否闰年{if( nowYear%4 == 0 && nowYear%100 != 0 || nowYear%400 == 0) return true;elsereturn false;}bool checkValid( int nowYear,int nowMonth,int nowDay )// 输入合法性检查{if ( nowYear <= 0 ){printf( "输入年份不合法!!!");return false;}if ( nowMonth < 0 && nowMonth > 12 ){printf("输入月份不合法!!!");return false;}if ( nowDay < 0 && nowDay > 31 && isLeapyear(nowYear) ){printf("输入号数不合法!!!");return false;}if ( nowDay < 0 && nowDay > 30 && !isLeapyear(nowYear) ) {printf("输入号数不合法!!!");return false;}return true;}int calcuDays( int nowYear,int nowMonth,int nowDay )// 计算总天数{int days = 0;int mon = 0;for ( int i = 1;i < nowYear;i++ ){if( isLeapyear( i ) )days += 366;elsedays += 365;}for ( int j = 1;j < nowMonth;j++ ){if ( isLeapyear(nowYear) )mon = mon + leapDay[j-1];elsemon = mon + noleapDay[j-1];}days = days + mon + nowDay;return days;}int calcuWeek( int totalDays ) // 计算星期几{int weekNo = totalDays%7;9return weekNo;}void weekDayPrint( int nowYear,int nowMonth,int nowDay ) //打印某年某日星期几{int days = calcuDays(nowYear,nowMonth,nowDay);int weekNo = calcuWeek( days );switch ( weekNo ){case 0:printf( "%-4d年%-2d月%-2d日是星期天!!!",nowYear,nowMonth,nowDay); break;case 1:printf( "%-4d年%-2d月%-2d日是星期一!!!",nowYear,nowMonth,nowDay); break;case 2:printf( "%-4d年%-2d月%-2d日是星期二!!!",nowYear,nowMonth,nowDay); break;case 3:printf( "%-4d年%-2d月%-2d日是星期三!!!",nowYear,nowMonth,nowDay); break;case 4:printf( "%-4d年%-2d月%-2d日是星期四!!!",nowYear,nowMonth,nowDay); break;case 5:printf( "%-4d年%-2d月%-2d日是星期五!!!",nowYear,nowMonth,nowDay); break;case 6:printf( "%-4d年%-2d月%-2d日是星期六!!!",nowYear,nowMonth,nowDay); break;}printf("\n\n");}void nowMonthprint( int nowYear,int nowMonth,int nowDay ) // 打印月历{int monthDay;int days = calcuDays(nowYear,nowMonth,1);int weekNo = calcuWeek(days);if ( isLeapyear(nowYear) )monthDay = leapDay[nowMonth-1];elsemonthDay = noleapDay[nowMonth-1];printf( "-----------------%4d年%02d月---------------\n",nowYear,nowMonth );printf( "%-5s%-5s%-5s%-5s%-5s%-5s%-5s\n","天","一","二","三","四","五","六" );for ( int j = 1; j <= monthDay; j++ ){if ( j == 1){for ( int k = 0;k < weekNo;k++ )printf("%-5s"," ");}if ( nowDay == j )printf("*%-4d",j );elseprintf( "%-5d",j);if ( weekNo%7 == 6 )printf("\n");weekNo = calcuWeek(days+j) ;}printf("\n");}void nowYearprint( int nowYear ) // 打印年历{int monthDay;for ( int i = 0; i < 12; i++ ){int days = calcuDays(nowYear,i+1,1);int weekNo = calcuWeek(days);if ( isLeapyear(nowYear) )monthDay = leapDay[i];elsemonthDay = noleapDay[i];printf( "-----------%4d年%02d月-----------\n",nowYear,i+1 );11printf( "%-5s%-5s%-5s%-5s%-5s%-5s%-5s\n","天","一","二","三","四","五","六" ); for ( int j = 1; j <= monthDay; j++ ){if ( j == 1){for ( int k = 0;k < weekNo;k++ )printf("%-5s"," ");}printf( "%-5d",j);if ( weekNo%7 == 6 )printf("\n");weekNo = calcuWeek(days+j) ;}printf("\n");}}void menuPrint() // 打印系统菜单{printf("\t万年历查询系统\n");printf("\n******************************");printf("\n1.查询某年某月某日是星期几");printf("\n2.查询某年是否是闰年");printf("\n3.打印某年的年历");printf("\n4.打印某年某月的月历");printf("\n5.查询某月的最大天数");printf("\n6.退出");printf("\n*****************************\n");printf("\n请选择:");}第四章运行结果及分析1.登陆界面13图3登陆界面提供了六个选项进行选择,并提示输入后的操作方法;2.查询具体日期图4输入指令后,可查询某天是星期几;3.判断闰年图5 4.显示全年日历图615图7图84查询某月最大天数图10第5章课程设计心得通过本次课程设计我第一次通过自己的实践对书本上的知识进行了与生活相关的运用。
目录前言 (3)正文..............................................................................4-6 本次课程总结 (7)附录…………………………………………………………………8-16一.设计题目模仿现实生活中的挂历。
当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。
当系统日期变到下一月时,系统自动翻页到下一月。
二.要求简析根据题目要求,实现当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几)。
并且在系统时间变化时能够自动翻转页数。
三.实现功能与设计目的题目中要求尽量模仿生活中的挂历,在起始页显示当前的时间以及当前月的月历,目的是使使用者能够直接获取时间,月内周次显示等生活便捷信息。
在功能上有一定创新,表现在周次查询,闰年查询和全年年历查询等便捷功能,操作要求也很快捷,在起始页按下对应数字即可,实现了程序使用上的简便性和快捷性。
另外,功能界面上具有持续性,即可让使用者选择性的持续使用谋一个固定的功能,方便快速使用。
同时,实现了快速回复主菜单的功能,在每个功能菜单上,都可以通过一键快速启用主菜单,从而在功能转换方面得到了很好的提升,方便使用。
通过本程序,实现查询方便,功能持续,转换快捷等有利于方便人们生活的功能,达到了时间知识,灵活运用的目的。
一.需求分析(1)输入的形式和输入值的范围;程序输入要求包含数字输入和字母输入两个部分,回车键确定,数字输入部分主要为年份,月份,日期查询命令时使用,要求了固定的输入格式年份规定位数为四位正数,月份和日期固定为两位正数。
字母输入部分主要为功能转换和输入确定使用。
若输入出错将提示使用者“输入有错,请从新确定输入”。
(2)输出的形式;输出形式以汉字和数字结合的方式输出,输出环境汉语显示,简单明了,数字排列简明,读数方便。
(3)程序所能达到的功能;程序所能达到的功能包括五个方面:1、当前时间,精确到分钟;2、当前月的月历;3、周次查询功能;4、闰年查询功能;5、任意年全年年历查询功能。
机械工程系课程设计说明书课程名称:微机接口技术题目名称:带闹钟功能及测温的时钟控制器设计年级专业及班级:2008级机械设计制造及其自动化 2 班姓名:郑泽龙学号:0808012217指导教师:刘建春评定成绩:教师评语:指导老师签名:2011 年 7 月 1 日多功能数字时钟系统设计目录1..前言: (3)2.整体方案确定: (3)3.硬件系统设计: (4)3.1. 按键扫描模块设计: (5)3.2. LCD显示模块 (6)3.3. 时钟DS1302模块 (7)3.4. 存储器24C02模块 (8)3.5. 蜂鸣器模块 (8)3.6. 测温模块 (9)4.软件系统设计: (9)4.1.按键控制函数key_control(void)流程图: (10)4.2. 按键扫描函数char KeyScan(void)流程图: (10)4.3.闹钟函数ALARM(void) (11)4.4. 24c02数据存数函数头文件声明程序如下: (12)5.试验仿真: (15)5.1硬件调试 (15)5.1.1排除元件失效 (15)5.1.2.排除电源故障 (15)5.1.3.联机仿真调式 (16)5.2软件仿真 (16)5.2.1系统误差分析 (16)6.结论 (16)7.成果展示 (17)8.参考资料 (18)1..前言:带闹钟功能及测温的时钟控制器是一种可实现年、月、日时、分、秒计时,温度扫描,数据存储,按键调节时间及闹钟功能的装置,并通过单片机处理后送给显示芯片(9325tp)显示的装置,与机械式时钟相比具有更高的准确性和直观性,且具有更长的使用寿命。
本系统可以分为六大模块:按键扫描模块、LCD显示模块、时钟DS1302模块、存储器24C02模块、蜂鸣器模块、测温模块。
2.整体方案确定:程序开始时先对系统初始化,初始化屏幕显示并设置好各种中断。
首先从24c02芯片中读取上次关机前闹钟的存储数据,扫描按键程序,如有按键按下则进入时间修改函数并将修改后的时间信息写入DS1302的时间芯片中并送显示,同时向24c02中写入更改后的闹钟数据,若无按键按下则进入更新时间函数,从时钟芯片中读取时间信息并送显示,并判断从时间芯片上读取的小时,分的数据和24c02中存储的数据是否一致,若一致则进入闹铃程序,若不一致则将时钟芯片的信息送显示。
课程设计说明书课程名称基于proteus的单片机项目时间教程设计题目电子万年历设计与调试专业班级姓名学号教师职称系20年月日目录第1章方案论证与比较 (3) (3) (4) (4) (5) (6)第2章仿真电路设计 (7) (7) (7)主要元器件清单 (9)第3章软件程序设计 (10)液晶显示模块 (10)温度控制模块 (14)时间控制模块 (19)按键扫描模块 (23)设计总结 (29)参考文献 (30)第1章方案论证与比较以单片机为控制器设计的电子万年历单片机最小系统、利用温度传感器采集外界温度,利用时钟控制芯片进行时间控制,利用输入器件进行参数调整,并通过显示设备进行参数显示。
方案一:AT89S52(图1-1)是ATMEL公司一款高性能8位单片机,兼容标准的MCS51指令系统级80C51引脚结构,片内含8K的可反复擦写的Flash 只读存储器,256B的内部数据存储器,具有4个并行I/O口,1个全双工串行口,3个16位的定时/计数器,6个中断源,2个中断优先级,广泛应用于各种控制系统中。
图1-1方案二:STC89C52RC(图1-2)是宏晶科技公司的一款高性能低功耗8位单片机,兼容标准的8051内核,片内含8K的可反复擦写的Flash只读存储器,256B的内部数据存储器,具有4个并行I/O口,1个全双工串行口,3个16位的定时/计数器,6个中断源,2个中断优先级,广泛应用于各种控制系统中。
图1-2方案选择:二者在结构和功能上基本一样,与AT89S52相比,STC89C52RC 具有更好的性价比,实用性好,因此选择STC89C52RC为控制器。
方案1:LED数码管(图1-3)是由LED发光二极管组合显示字符的显示器件。
它使用了8个LED发光二极管,其中7个用于显示字符,1个用于显示小数点,故通常称为7段发光二极管。
数码管静态显示特点是数码管恒定亮,亮度较高,显示某个数值,直到显示字符的编码改变为止。
万年历程序设计说明书
一、引言
万年历是一种常见的日历工具,用于显示日期和计算日期间的差异。
本说明书旨在介绍万年历程序的设计原理和功能,帮助用户更好地理解和使用该程序。
二、程序设计原理
1. 数据结构
万年历程序主要基于日期的计算和显示,因此需要设计合适的数据结构来存储日期信息。
常用的数据结构包括日期对象、月份对象和年份对象。
2. 界面设计
万年历程序需要提供用户友好的界面,以便用户能够方便地输入和查看日期信息。
界面设计应简洁明了,同时考虑不同屏幕尺寸和分辨率的适配。
3. 算法设计
万年历程序的核心功能是日期的计算和显示。
算法设计应能够准确计算日期间的差异,包括年份、月份和天数的计算。
同时,还需要考虑闰年和月份天数不同的情况。
三、功能介绍
1. 日期查询
用户可以通过输入日期来查询该日期的详细信息,包括星期几、所在月份和年份等。
程序应能够准确显示查询结果并提供相关操作选项。
2. 日期计算
用户可以输入两个日期,程序将计算并显示这两个日期之间的差异,包括相差的年份、月份和天数。
程序应能够处理闰年和月份天数不同的情况。
3. 节假日提醒
万年历程序可以提供节假日的提醒功能,用户可以设置节假日的提醒日期和提醒方式。
程序应能够准确提醒用户,并提供相应的操作选项。
4. 日期转换
用户可以输入不同的日期格式,程序将自动转换为标准的日期格式进行计算和显示。
程序应支持常见的日期格式,并提供错误处理机制。
四、程序设计实现
1. 开发环境
万年历程序可以使用各种编程语言和开发工具进行实现。
常见的开发环境包括Java、Python、C++等。
选择合适的开发环境可以提高开发效率和程序性能。
2. 数据库设计
万年历程序可以使用数据库存储节假日和相关数据,以便程序查询和显示。
数据库设计应考虑数据的结构和索引,提高数据的查询效率和程序的响应速度。
3. 界面设计
万年历程序的界面设计应简洁明了,用户可以方便地输入和查看日期信息。
界面设计可以使用图形界面或命令行界面,根据实际需求选择合适的设计方式。
4. 算法实现
万年历程序的核心算法是日期的计算和显示。
算法实现应准确计算日期间的差异,并处理闰年和月份天数不同的情况。
同时,还需要考虑输入的日期格式和错误处理。
五、使用说明
1. 安装和运行
用户可以根据具体的程序实现方式进行安装和运行。
一般情况下,用户只需下
载程序文件并双击运行即可。
如果需要额外的依赖库或配置文件,请参考程序的文档说明。
2. 输入和查询
用户可以通过界面输入日期进行查询和计算。
程序应提供相应的输入框和按钮,用户可以选择查询日期、计算日期差异或设置节假日提醒等功能。
3. 结果显示
程序将根据用户的输入和操作显示相应的结果。
结果应准确显示日期的详细信息、计算的差异或节假日的提醒信息。
程序还可以提供导出和打印等功能,方便用户保存和分享结果。
六、总结
本说明书介绍了万年历程序的设计原理和功能,帮助用户更好地理解和使用该
程序。
通过合理的数据结构、界面设计和算法实现,万年历程序可以提供准确、方便的日期查询和计算功能,满足用户的日常需求。
希望本说明书能对用户在使用万年历程序时有所帮助。