C语言程序设计实践实验题目 (4)

不喜勿撩 分享 2020-06-20 下载文档

绥化学院程序设计实践实验报告范例 参考

实 验 六:万年历

实验目的:

1、复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;

2、将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力 3、提高学生适应实际,实践编程的能力。

实验内容:

程序一:编写万年历 小组分工情况

小组分工情况统计表 信息工程学院 计算机科学与技术专业 2012级 软件工程(方向)

班级 班 组 名称 项目组长 组员 组员学号 工作简介 学生成绩管理系统 (本次项目小组组长) 一 需求分析 万年历能实现一些功能,主要包括以下几点:

(1)日历显示功能。能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。

判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期: nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nDay%7;

其中year:要查询的年份

nday:从该年的一月一日起到该天的天数 w:得出的星期数,w==0表示星期天。

在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。对于初始输入当前月历,可以通过中的time 和localtime函数取出系统时间进行初始化。 time_t timer; struct tm* gmt; time(&timer);

gmt=localtime(&timer);

gmt就是一个时间结构体,可以从中取出年月日.

(2)日历查询、闰年判断功能。输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年

能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。日期的查询,就是直接打印改天所在月份的月历

(3)参数检查功能。如果输入日期不合法,查询将被拒绝,并显示提示信息。

判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和

16

绥化学院程序设计实践实验报告范例 参考

31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。在查询过程中,如果发现输入不合法或者不满足输入要求,则要求重新输入。

(4)通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。

捕获键盘的输入,通过两个getch();将后一个getch()的返回值付给整型或字符型k,k为相应键的ascii值,判断ascii值,就可以知道时哪个键的输入。若捕获到某键的输入,则设置相应的年或月或日的值,再进行刷性输出,就可以实现日期的调整。 二 总体设计(visio)

本系统包括4个模块,分别是功能控制模块﹑打印输出模块﹑日历显示模块和键值获取模块。

1、功能控制模块。该模块用于实现日期有效性检查﹑判断是否是闰年和返回指定日期对应的日期。

2、打印输出模块。该模块主要是进行输出显示,包括打印指定个数的空格﹑打印分隔线﹑打印用户使用手册﹑打印当前日期对应的星期以及打印指定的星期。

3、日历显示模块。该模块是系统的核心模块,是用来显示指定日期所在月份的月历。 4、键值获取模块。该模块接受键盘操作,获取键值,来进行日期调整,并调用日历显示模块中的函数来显示调整后的日历。

万年历

功打 日键能印 历值控输 显获制出 示取模模 模模块 块 块 块 日日修帮 历历改助 显查日退 期 示 询 出 图2-1功能模块图

总函数流程图

17

绥化学院程序设计实践实验报告范例 参考

图3-1总函数流程图 三、详细设计

(1)由于万年历具有以下特点:

平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。 (2)根据万年历以上特点进行编写

1)首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义一个数组存放天数,用while循环控制。

2)再对其中的星期进行编写:

由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)由于其公式为:某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7

闰4百年3月1日星期算法(百年%4=0)其公式为:某年3月1日星期几=(年+年/4+月星期表+日+2天)%7例: 2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

18

绥化学院程序设计实践实验报告范例 参考

平4百年3月1日星期算法(百年%4<>0)其公式为:某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7 例:2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)

其中万年某日星期算法 其公式为:某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

(1)int isleapYear(int year);

该函数判断某年是否是闰年,参数year表示要判断的年份,返回值1表示该年为闰年,0表示该年为平年。

int IsLeapYear( int year )

{if ((year %4 == 0) && (year % 100 != 0) ||(year % 400 == 0) ) return 1; else return 0; 流程图: 开始 Y Return 1 Year@0 N

Y N Year%4 Year0 Return 0 N Y

Return 0 Return 1 闰年判断 (2)struct tm* getDay();

该函数用以取得系统的时间。该函数没有参数,返回值类型为struct tm*,是一个包含时间的结构体

struct tm* getDay()//从系统取得当前时间 {

time_t timer; struct tm* gmt; time(&timer);

gmt=localtime(&timer); return gmt; }

(3)int getwDay(int year,int month,int day);

该函数用以根据一个日期推断星期,参数为要判断的年月日。返回值为整型,123456分别表示星期一到星期六,0表示星期天。

int getwDay(int year,int month,int day)//取得星期 {

int nday=0,nDay,i,w; for(i=0;i

nday+=daysOfMonth[runYear(year)][i]; nday+=day;

nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday; w=nDay%7; return w; }

19

绥化学院程序设计实践实验报告范例 参考

(流程图!!!) 四、程序源代码 #include #include #include #include #include

#define KEYNUMUp 0x48 #define KEYNUMDown 0x50 #define KEYNUMLeft 0x4b #define KEYNUMRight 0x4d #define KEYNUMPageUp 0x49 #define KEYNUMPageDown 0x51

int year,month,day; //全局变量记录时间

int daysOfMonth[2][12]={{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 runYear(int year) //判断是否是闰年 { int flag=0; if(year@0==0||(year%4==0&&year0!=0)) flag=1; return flag; }

struct tm* getDay()//从系统取得当前时间 { time_t timer; struct tm* gmt; time(&timer); gmt=localtime(&timer); return gmt; }

int dayExame(int year,int month,int day)//检查日期是否正确 { if(year<0||month<1||month>12||day<1||day>31) return 0; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if(day>31)return 0;break; case 4: case 6: case 9: case 11:

20


C语言程序设计实践实验题目 (4).doc 将本文的Word文档下载到电脑

下一篇:造价练习题(含答案) - 图文

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7 元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx