ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:215.27KB ,
资源ID:8534864      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8534864.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言日历系统.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言日历系统.docx

1、C语言日历系统目 录一、设计题目 1二、设计目的 1三、设计分析 1四、总体设计 1五、详细设计 3六、程序调试 3七、结论 8一、设计题目 日历系统的实现二、设计目的1. 掌握算法在程序设计中的应用,能够利用所学的基本知识和技能,解 决复杂的程序设计问题。2. 学会利用TC的编程思想来完成系统的设计, 学会在设计的过程中,建 立清晰的结构体层次3. 学习发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时的向教师汇报。4. 能够独立思考,课程设计中各项任务的设计和调试要求独立完成,遇到问题可以讨论,进而解决问题。三、设计分析 本日历系统是

2、通过C语言实现的,能实现万年历的基本功能。万年历的核心是计算机其对应的星期,并按照合适的方式输出日历。并可以输入确切日期并显示出来,完成了日历系统的显示、查询、支持键盘操作等功能。本次设计在功能需求上可分为以下4个方面:1)输入任一年将显示出该年的所有月份日期,对应的星期,并突出显示当前的日期。2)输入日期进行查询,查询后将显示查询日期所在的月份的日历,并突出显示查询日期。同时还将显示所查询的日期所在年份是否为闰年。3)通过键盘操作调整年、月、日,并显示调整后的日期。同时可以通过键盘操作以达到复位到系统当前日期。4)判定输入年月日格式的合法性,如果合法则继续进行,否则显示错误提示信息,并令其重

3、新输入。四、总体设计程序流程图,如下 五、详细设计1) 功能控制模块。该模块用于实现日期有效性检查、判断是否是闰年和返回指定日期对应的星期。Void check (),检查日期合法性。int isLeapyear ( int year ),判断指定年year是否是闰年。Int maxday (int year ,int month ) 计算该月的最大天数。eachYearTotal (int year ,int month ,int day) 用于计算出该年该月该天的一年中的总天数。Int week(int year ,int month ,int day)用于判断该年该月该天为星期几。Get

4、monthname(month) 用于输出每个月份对应的英文单词。2) 打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格、打印分隔线、打印用户使用手册、打印当前日期对应的星期以及打印给定的星期。Void printUsage (), 打印用户使用手册。3) 日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。Display(int year ,int month ,int day),显示日历年月日。4) 键值获取模块。该模块接收键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。getKeyValue(), 获取按键值。六、程序调

5、试1、 程序开始与退出程序以系统的日期进行初始化,程序开始时显示的是系统日期所在的月的月历,如图。要想退出程序,可按ESC键。2、 移动上下键移动上下键可以调整日期中表示年的部分。控制向上键可以增加年份,按SPACE(空格)键后,将恢复到程序开始的状态,如图。3、 移动左右键移动左右键可以调整日期中表示的月份。控制向左键可以减少月份,按SPACE(空格)键将程序重置到开始状态,如图。4、 移动下载翻页键控制PageUp和PageDown键可以调整日期中表示的日的部分。控制PageUp键可以减小天数,按SPACE键将程序重置到开始状态,如图。5、 查询日期1 日期查询如果查询某一个日期,可以按Q

6、或者q键进行,如图。按q键后,将出现提示性语句“Input date (eg,1988 11 23):”其中“(eg,1988 11 23)是输入示例,只有按扎这样的输入才被程序所接受。输入查询日期后,即可按ENTER键进行查询操作,如图。2 日期合法性检测对于查询操作,程序是要进行日期合法性检测的,包括日期中的年份、月份和天数检查。如果有任何一部分出错,程序将提示用户,并显示系统日期所在月的月历。年份无效,如图月份无效,如图天数无效,如图七、结论 此次课程设计让我们知道万年历具有以下特点:1平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。 由于公元

7、1月1日设为星期六,故3月1日为星期三。 为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。2每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。) 所以百年%4=0闰或(年%4=0并且年0)闰。3每 4年(

8、3个平年+1个闰年)共208周+5天 每百年共100*(208周+5天)-1天=5217周+5天 每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天注意这个“0天”和“1天”(4个整百年只有一个闰年),即400年一轮回!(原来万年历400年前是一家)此外,通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利于更好的掌握c语言!在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌

9、握好基础知识。还有体会到了成功的感觉! 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性! 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的

10、知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!附录(程序源代码)#include #include #include #include /*左移键*/#define LEFT 0x4b00/*右移键*/#define RIGHT 0x4d00 /*下移键*/#define DOWN 0x5000 /*上移键*/#define UP 0x4800/*向上翻页移键*/#define PAGEUP 0x4900/*向下翻页移键*/#

11、define PAGEDOWN 0x5100/*小写字母q*/#define QLOWER 0x1071/*大写字母Q*/#define QUPPER 0x1051/*空格键*/#define SPACE 0x3920/*Escape键*/#define ESC 0x011b int isLeap(int year); int maxDay(int year,int month); int eachYearTotal(int year,int month,int day); int week(int year,int month,int day); int check(int year,int

12、 month,int day); void display(int year,int month,int day);void getmonthname(int month);void printusage();void getKeyValue();struct date sysTime;int currentYear;int currentMonth;int currentDay;int n_currentMon;int n_lastMon;void main() int year,month,day,flag;char ch; while(1) geninterrupt(0x10); get

13、date(&sysTime); currentYear=sysTime.da_year; currentMonth=sysTime.da_mon; currentDay=sysTime.da_day ; display(currentYear,currentMonth,currentDay); printusage(); getKeyValue(currentYear,currentMonth,currentDay); do gotoxy(45,23); textcolor(YELLOW); cprintf(PLEASE INPUT THE YEAR MONTH DAY: nn); gotox

14、y(45,25); cprintf(eg: (1988 11 23 ):); scanf(%d%d%d,&year,&month,&day); flag=check(year,month,day); if(flag=0) printf(ERROR,PLEASE INPUT AGAINn); while(flag=0); display(year,month,day); printusage(); gotoxy(45,22); cprintf(CONTINUE TO INPUT?(y/n): ); fflush(stdin); ch=getchar(); if (ch=n | ch=N) got

15、oxy(44,21);exit(0); int isLeap(int year) if(year%4=0&year%100!=0|year%400=0) return 1; else return 0; int maxDay(int year,int month) int a=0,31,28,31,30,31,30,31,31,30,31,30,31; if(isLeap(year) a2=29; /*当前月的天数*/ n_currentMon=amonth; /*上一月的天数*/ n_lastMon=amonth-1; return amonth; int eachYearTotal(int

16、 year,int month,int day) int i,sum=0; for(i=1;imonth;i+) sum+=maxDay(year,i); sum+=day; return sum; int week(int year,int month,int day) int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,day); number%=7; return number; int check(int year,int month,int day) if(year0|mo

17、nth12|daymaxDay(year,month) return 0; else return 1; void getmonthname(int month) switch(month) case 1: textcolor(55); cprintf( January 1 ); printf(nn); break; case 2: textcolor(55); cprintf( February 2 ); printf(nn); break; case 3: textcolor(55); cprintf( March 3 ); printf(nn); break; case 4: textc

18、olor(55); cprintf( April 4 ); printf(nn); break; case 5: textcolor(55); cprintf( May 5 ); printf(nn); break; case 6: textcolor(55); cprintf( June 6 ); printf(nn); break; case 7: textcolor(55); cprintf( July 7 ); printf(nn); break; case 8: textcolor(55); cprintf( August 8 ); printf(nn); break; case 9

19、: textcolor(55); cprintf( September 9 ); printf(nn); break; case 10: textcolor(55); cprintf( October 10 ); printf(nn); break; case 11: textcolor(55); cprintf( November 11 ); printf(nn); break; case 12: textcolor(55); cprintf( December 12 ); printf(nn); break; void display(int year,int month,int day)

20、 int max,number,i,j=1; max=maxDay(year,month); number=week(year,month,1); clrscr(); printf(nn); textcolor(75); cprintf(%10d,year); getmonthname(month); textcolor(BLUE); cprintf(*); printf(n); textcolor(44); cprintf(%5s,SUN); textcolor(BLACK); cprintf(%4s%4s%4s%4s%4s,MON,TUE,WHE,THR,FRI); textcolor(4

21、4); cprintf(%4sn,SAT); printf(n);for(i=0;inumber;i+) printf( ); while(j=max) if(i%7=6 | i%7=0) if (i%7=0) if (j=day) printf( );textcolor(188); cprintf(%2d,j); elsetextcolor(44);cprintf(%4d,j); else if (j=day) printf( );textcolor(188); cprintf(%2d,j); printf(nn); else textcolor(44);cprintf(%4d,j); pr

22、intf(nn); else if (j=day) printf( );textcolor(188); cprintf(%2d,j); else textcolor(BLUE); cprintf(%4d,j); i+; j+; printf(n);textcolor(BLUE);cprintf(*n);printf(n); void printusage() gotoxy(45,3); cprintf(-usage-); gotoxy(45,5); textcolor(YELLOW); cprintf(YEAR); gotoxy(50,5); textcolor(BLACK); cprintf

23、( Up key( ) to increase;n); gotoxy(50,7); cprintf( Down key( ) to decrease.n); gotoxy(45,9); textcolor(YELLOW); cprintf(MONTH:); gotoxy(50,9); textcolor(BLACK); cprintf( Right key( ) to increase;n); gotoxy(50,11); cprintf( Left key( ) to decrease.n); gotoxy(45,13); textcolor(YELLOW); cprintf(DAY); g

24、otoxy(50,13); textcolor(BLACK); cprintf( PageDown key to increase;n); gotoxy(50,15); textcolor(BLACK); cprintf( PageUp key to decrease.n ); gotoxy(45,17); textcolor(YELLOW); cprintf(QUERY); gotoxy(50,17); textcolor(BLACK); cprintf( Q/q keyn); textcolor(YELLOW); gotoxy(45,16); cprintf(RESET); gotoxy(

25、50,16); textcolor(BLACK); cprintf( SPACE key.n); gotoxy(45,19); textcolor(YELLOW); cprintf(EXIT); gotoxy(50,19); textcolor(BLACK); cprintf( Esc keyn); gotoxy(59,5); /*设置寄存器,表示在指定位置输出一次指定的字符*/ _CX=01; _AH=0xa; /*指定输出字符为向上的箭头*/ _AL=24; /*产生一次中断,输出向上的箭头*/ geninterrupt(0x10); gotoxy(61,7); _CX=01; _AH=0

26、xa; /*指定输出字符为向下的箭头*/ _AL=25; geninterrupt(0x10); gotoxy(62,9); _CX=01; _AH=0xa; _AL=26; /*指定输出字符为向右的箭头*/ geninterrupt(0x10); gotoxy(61,11); _CX=01; _AH=0xa; /*指定输出字符为向左的箭头*/ _AL=27; geninterrupt(0x10); void getKeyValue(currentYear,currentMonth,currentDay) int key ; char ch; int year ,month,day; year

27、=currentYear; month=currentMonth; day=currentDay; while(1) key=bioskey(0); if(key=SPACE) currentYear= year; currentMonth=month; currentDay=day; if(key=RIGHT) if(currentMonth=1) currentMonth+; else currentYear+; currentMonth=1; if(key=LEFT) if(currentMonth1) currentMonth-; else currentYear-; currentMonth=12; if(key=UP) currentYear+; if(key=DOWN) currentYear-; if (key=QLOWER | key=QUPPER) break ; if(key=PAGEUP) if(currentDay!=1) currentDay-;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1