欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    C语言程序设计万历.doc

    • 资源ID:2384715       资源大小:2.74MB        全文页数:35页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计万历.doc

    综合性程序设计报告设计题目: 万年历 指导教师: 班 级: 学 号: _ 设 计 者: 成 绩: 设计时间: 2012年 6 月 8 日题目描述用于利用计算机实现万年历功能,包括日期对星期的转换,根据指定日期对N天后是什么日期的计算。和显示当前日期,纪念日提醒等功能。主要功能:1. 日期推算2. 日期显示3. 纪念日提醒功能模块分解及说明根据题目要求,可以用结构体实现,这个系统可以分为:年历显示、月历查询、日期查询和日期推算四个部分。其中在日期查询中包括纪念日提醒。(1) 主函数main()主函数利用while(1)循环使得执行完每个部分之后还能回到主菜单,并利用switch函数当输入不同的值时调用不同的模块。主函数如下:void main() /*主函数*/ int year,month,day,select; while(1) dushijian(); printf("n"); getmenu(); printf(" 请输入相应数字:"); /*菜单选择 */ scanf("%d",&select); system("cls"); switch(select) case 1: /*当选择为1时显示年历*/ printf(" 年历显示:输入年(如2011):"); scanf("%d",&year); if(year>0&&year<10000) /*显示年份从0-10000 */ display1(year); /*调用函数*/ printf(" 提示 按:上一年 按:下一年 按其他键:返回菜单nn"); setDay1( year,month, day); else system("cls"); /*清屏*/ printf(" 输入无效,重新输入!n"); break; case 2: /*当选择为2显示月历*/ printf(" 月历显示:输入年月(如2011,6):"); scanf("%d,%d",&year,&month); if(year>0&&year<10000&&month>=1&&month<=12) display2(year,month); printf(" 提示 按:上个月 按:下个月 按其他键:返回菜单nn"); setDay2( year,month, day); else system("cls"); printf(" 输入无效,重新输入!n"); break; case 3: /*当选择为3时显示日期*/ printf(" 日期显示:输入年月日(比如2011,6,23):"); scanf("%d,%d,%d",&year,&month,&day); if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) display3(year,month,day); printf(" 提示 按PageUp:前一天 按PageDown:后一天 按其他键:返回菜单nn"); setDay3( year,month, day); else system("cls"); printf(" 输入无效,重新输入!n"); break; case 4: /*当选择4时为日期推算*/ riqituisuan(); break; case 5: exit(0); default: /*当输入其他数字时,输入无效,重新输入*/ system("cls"); printf(" 输入无效,重新输入!n"); (2) 年历显示 用来显示某一年的日历。void display1(int year) /*输出年历*/ int i; printf("n"); for(i=1;i<=12;i+) printf("%d 年 %d 月nn ",year,i); display(year,i); void display(int year ,int month) /*输出年月*/ int max,number,i,j=1; max=maxDay(year,month); number=week(year,month,1); printf(" %4s %4s %4s %4s %4s %4s %4sn","Sun","Mon","Tue","Wed", "Thu","Fri","sat"); for(i=0;i<number;i+) printf(" "); /*1号前的星期补空格*/ while(j<=max) printf("%6d",j); if (i%7=6) printf("n"); /* 每7格换一行*/ i+; j+; printf("nn");(3) 输出月历 void display2(int year,int month) /*输出月历*/ printf("n%d 年 %d 月n ",year,month); display(year,month); void display(int year ,int month) /*输出年月*/ int max,number,i,j=1; max=maxDay(year,month); number=week(year,month,1); printf(" %4s %4s %4s %4s %4s %4s %4sn","Sun","Mon","Tue","Wed", "Thu","Fri","sat"); for(i=0;i<number;i+) printf(" "); /*1号前的星期补空格*/ while(j<=max) printf("%6d",j); if (i%7=6) printf("n"); /* 每7格换一行*/ i+; j+; printf("nn");(4) 日期查询 void display3(int year,int month,int day) /*输出日历*/ whatweek( year,month,day); jieri(month,day); counterdays(year,month, day); int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/ int year1, days0,days1,month1,days, day1; time_t timep; struct tm *p; time(&timep); p=gmtime(&timep); year1=(1900+p->tm_year) ; month1=(1+p->tm_mon) ; day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/ days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,day1); days=days0-days1; /*计算出两个日期之间的时间差*/ printf("n 今天距%d年%d月%d日还有%d天nn",year,month,day,days); return days; void whatweek(int year,int month,int day) /*判断是星期几*/ int number; number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ; switch( number) case 0: printf( "n %d年%d月%d日是星期日",year,month,day);break; case 1: printf( "n %d年%d月%d日是星期一",year,month,day);break; case 2: printf( "n %d年%d月%d日是星期二",year,month,day);break; case 3: printf( "n %d年%d月%d日是星期三",year,month,day);break; case 4: printf( "n %d年%d月%d日是星期四",year,month,day);break; case 5: printf( "n %d年%d月%d日是星期五",year,month,day);break; case 6: printf( "n %d年%d月%d日是星期六",year,month,day);break; default: system("cls"); printf(" 出现错误!n" ); void jieri(int month,int day) /*判断是否公历节日*/ if(month=1) switch(day) case 1: printf(",这天是元旦"); if(month=2) switch(day) case 14: printf(",这天是情人节"); if(month=3) switch(day) case 8: printf(",这天是妇女节"); break; case 12: printf(",这天是植树节"); if(month=4) switch(day) case 1: printf(",这天是愚人节"); if(month=5) switch(day) case 1: printf(",这天是劳动节"); break; case 4: printf(",这天是青年节"); if(month=6) switch(day) case 1: printf(",这天是儿童节"); if(month=7) switch(day) case 1: printf(",这天是建党节"); if(month=8) switch(day) case 1: printf(",这天是建军节"); if(month=9) switch(day) case 10: printf(",这天是教师节"); if(month=10) switch(day) case 1: printf(",这天是国庆节"); (5) 日期推算 if (info/10000000)<=9)&&(info/10000000)>0) xyear = info/10000;xmonth = (info - xyear*10000)/100;xday = info - xyear*10000 - xmonth*100;printf("您要查询的是%d年%d月%d日。n",xyear, xmonth, xday);counter = getwDay(xyear,xmonth,xday);printf("%d年%d月%d日是星期",xyear, xmonth, xday);if (counter = 0)counter = 7;printf("%dn", counter);day_differ = The_day(xyear,xmonth,xday);printf("距离今天相差%d天n",day_differ);int The_day(int year,int month,int day) /*判断要查询的日期据今天的时间*/int Year,Month,Day,flag,i,q;long sum=0;struct tm *gmt=getDay();Year = gmt->tm_year+1900; /*系统当前年*/Month = gmt->tm_mon+1; /*系统的当前月份*/Day = gmt->tm_mday; /*系统当前天*/if(year!=Year)if(year>Year)q=year;year=Year;Year=q;q=month;month=Month;Month=month;q=day;day=Day;Day=day;for(i=year;i<Year;i+)flag = checkYear(i);if(flag=1)sum=sum+366;elsesum=sum+365;flag = checkYear(year);for(i=1;i<month;i+)sum=sum-daysOfMonthflagi-1;sum=sum-day;flag = checkYear(Year);for(i=Month-1;i>=1;i-)sum=sum+daysOfMonthflagi-1;sum = sum+Day;else if(year=Year)flag = checkYear(year);if(month!=Month)if(month>Month)q=month;month=Month;Month=q;q=day;day=Day;Day=day;for(i=month+1;i<=Month;i+)sum=sum+daysOfMonthflagi-1;sum=sum+daysOfMonthflagmonth-1-day;sum = sum+Day;else if(month=Month)sum = Day - day;if(sum<0)sum = -sum;return sum;struct tm* getDay() /*从系统取得当前时间*/time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);return gmt;int checkYear(int year) /*判断是否是闰年*/int flag=0;if(year%400=0|(year%4=0&&year%100!=0)flag=1;return flag;int getwDay(int year,int month,int day)/*取得某年某月某日是星期几*/int nday=0, nDay, i, w;for (i=0;i<month-1;i+)nday+=daysOfMonthcheckYear(year)i;nday+=day;nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;return w; /*返回星期几*/(6)菜单显示 void getmenu() /* 显示菜单选择*/ printf(" *主菜单*nn"); printf(" * 欢迎进入万年历系统 *nn"); printf(" * 1、年历显示 *nn"); printf(" * 2、月历查询 *nn"); printf(" * 3、日期查询 *nn"); printf(" * 4、日期推算 *nn");printf(" * 5、退出系统 *nn"); printf(" *nn");(7) 通过“”“”“”“”和“pgup”“pgdn” 控制年历,月历以及日期的翻页。 void setDay1(int year,int month,int day) /*通过键盘""""控制年历的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMUp: /*""年份减小*/ if(year<2) system("cls"); printf(" 警告!超出范围!n"); break; year-; display1(year); setDay1(year,month,day); break; case KEYNUMDown: /*""年份变大*/ year+; display1(year); setDay1(year,month,day); break; default: system("cls"); void setDay2(int year,int month,int day) /*通过键盘""""控制月历的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMLeft: /*""月份变小*/ if(month<2) month+=12; year-; if(year<1) system("cls"); printf(" 警告!超出范围!n"); break; month-; display2(year , month); setDay2(year,month,day); break; case KEYNUMRight:/*""月份变小*/ if(month>11) month-=12; year+; if(year<9999) month+; display2(year , month); setDay2(year,month,day); break; default: system("cls"); ; void setDay3(int year,int month,int day) /*通过键盘"PageUp""PageDown"控制日期的变换*/ char k; getch(); k=getch(); switch(k) case KEYNUMPageUp: /*"PageUp"日期变小*/ if(day<2) month-; day=maxDay(year,month); if(month<1) month+=12; year-; if(year<1) system("cls"); printf(" 警告!超出范围!n"); break; day-; display3(year , month,day); setDay3(year,month,day); break; case KEYNUMPageDown: /*"PageDown"日期变大*/ day+; if(day>maxDay(year,month) day=1; month+; if(month>12) month-=12; year+; if(year<10000) display3(year , month,day); setDay3(year,month,day); break; default: system("cls"); ; 数据库设计及说明控制键的调用使用宏定义#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 long int info; /*全局变量*/int counter_line_1,counter_line_2;int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int year,month,day,select; /*定义年月日*/主要算法说明开始输入错误,请重新输入!显示当时时间和一系列选项功能N输入n,判断n是不是1-5?返回主菜菜单退出程序日期推算日期查询输出月历输出年历 界面说明主菜单页面显示如下:年历查询如下:月历查询:日期查询说明:日期推算说明:退出系统:代码清单及注释#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#include "stdlib.h" #define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51 long int info; /*全局变量*/int counter_line_1,counter_line_2;int daysOfMonth212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31, 30,31;int eachyeartotal(int year,int month,int day); /*函数声明*/int The_day(int year,int month,int day);int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);int checkYear(int year);int getwDay(int year,int month,in

    注意事项

    本文(C语言程序设计万历.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开