语言课程设计日期工具.docx

上传人:b****5 文档编号:7476193 上传时间:2023-01-24 格式:DOCX 页数:16 大小:107.32KB
下载 相关 举报
语言课程设计日期工具.docx_第1页
第1页 / 共16页
语言课程设计日期工具.docx_第2页
第2页 / 共16页
语言课程设计日期工具.docx_第3页
第3页 / 共16页
语言课程设计日期工具.docx_第4页
第4页 / 共16页
语言课程设计日期工具.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

语言课程设计日期工具.docx

《语言课程设计日期工具.docx》由会员分享,可在线阅读,更多相关《语言课程设计日期工具.docx(16页珍藏版)》请在冰豆网上搜索。

语言课程设计日期工具.docx

语言课程设计日期工具

南昌航空大学

课程设计

课程名称:

C语言

设计课题:

日期工具

专业:

班级:

姓名:

虞乐文学号:

评分:

指导老师(签字):

20年月日

目录:

1.要求分析.........................................................................

2.概要设计........................................................................

3.详细设计.........................................................................

4.调试分析.........................................................................

5.用户使用说明.................................................................

6.测试结果.........................................................................

7.源程序.............................................................................

1.要求分析:

日期工具(难度系数:

A)

要求实现以下功能:

创建日期

日期差计算

判断某个日期为星期几

按格式输出日期

(1)系统变量(基本)

Structdate{

Intyear,

Intmonth,

Intday,

Inthour,

Intminute,

Intsecond

}

(2)待实现的方法(基本)

方法名称

方法声明

方法作用

初始化

Create()

初始化系统相关变量

输入日期

Dateinpur

输入日期的年月日,返回该日期结构体

计算日期差

Intdatediff(datedate1,datedate2,intunit)

返回两个日期之间unit所表示的时间差,unit表示单位,0—年,1—月,2—日,3—时,4—分,5—秒

比较日期大小

Intcompare(datedate1,datedate2)

判断两个日期大小,如果date1较新则返回1,相等则返回0,date2较新则返回-1

获取星期几

Intget_weekday(datedate)

返回date当前星期几,0—星期天,1—星期一,2—星期二,……

按格式输出日期

Char*format(datedate,char*format)

返回按format格式化输出的date日期。

如格式format为“yyyy_mm_d”当前日期输出为2011——08——29,格式规定如下:

y_年,m_月,d_日,h_时,m_分,s_秒

打印

Voidprint()

按默认格式打印当前时间

记录操作日志

Voidinfo(char*filename)

将每次用户的操作信息写到日志文件filename中

屏幕显示(主菜单)

主函数

2.概要设计:

a.数据类型:

int,FILE。

b.标准函数名称和自定义函数名称:

scanf函数

printf函数

gettime函数

intget_weekday(structdat);

intdatdiff(structdat);

intcompare(structdat,structdat);

intrunnian(intx);

3.详细设计:

4.调试分析:

a.遇到的问题:

switch语句中漏了break,

子函数中漏了右括号,

自定义的结构体structdate与时间函数的date同名导致冲突

创建文件时指针fp写错

b.解决方案:

对应地方加上break和括号

把自定义的结构体名称改为structdat

统一并修改文件指针fp

c.经验与体会:

要熟练地掌握c语言开发环境,明确函数与函数间的调用

写代码时尽量认真避免出现小错误

学习独立完成程序的编写过程,在修改和整理中了解c语言中常常出现的错误,并找到其改正方法

只有多写代码才可以让自己真正学好c语言

5.用户使用说明:

a..编译完了之后,首先屏幕上会显示当前时间,并提示用户请输入一个日期包括年月日时分秒

b.输入六个数据后它会以规定格式输出刚才所输入的日期,并显示刚才输入日期为星期几,同时提示用户输入两个日期,即十二个数据。

c.屏幕上会显示这两个日期的差,同时提示用户再一次输入两个日期,即十二个数据。

d.运行后屏幕上会显示两个日期的比较结果

e.之后,文件进行保存,可以显示刚才的操作。

6.测试结果:

7.源程序:

#include

#include

#include

#include

structdat

{

intyear;

intmonth;

intday;

inthour;

intminute;

intsecond;

};

intget_weekday(structdat);

intdatdiff(structdat);

intcompare(structdat,structdat);

intrunnian(intx);

voidmain()

{

inty;

intp,q,o,m,n,l;

intz;

structdata;

structdatdat1;

structdatdat2;

structdatdat3;

structdatdat4;

structtimedt,dt2;

FILE*fp;

if((fp=fopen("yulewen.txt","a+"))==NULL)

{printf("cannotopenfilesum!

!

!

strikeanykeyexit");

getch();

exit

(1);}

gettime(&dt);

printf("currenttimeis%d%d%d\n",dt.ti_hour,dt.ti_min,dt.ti_sec);

printf("pleaseinputsixnumbers!

\n");scanf("%d%d%d%d%d%d",&a.year,&a.month,&a.day,&a.hour,&a.minute,&a.second);printf("thedateyouinputis\n");

fprintf(fp,"thedateyouinputis\n");

printf("%dnian,%dyue,%dri,%ddian,%dfen,%dmiao\n",a.year,a.month,a.day,a.hour,a.minute,a.second);

fprintf(fp,"%d,%d,%d,%d,%d,%d\n",a.year,a.month,a.day,a.hour,a.minute,a.second);

y=get_weekday(a);

printf("thedateisxingqi%d\n",y);

printf("pleaseinputtwelvenumbers!

tocaculatetheirdistance!

\n");

scanf("%d%d%d%d%d%d,%d%d%d%d%d%d",&dat1.year,&dat1.month,&dat1.day,&dat1.hour,&dat1.minute,&dat1.second,&dat2.year,&dat2.month,&dat2.day,&dat2.hour,&dat2.minute,&dat2.second);

fprintf(fp,"pleaseinputtwelvenumbers!

tocaculatetheirdistance!

\n");

fprintf(fp,"%d,%d,%d,%d,%d,%d\n%d,%d,%d,%d,%d,%d\n",dat1.year,dat1.month,dat1.day,dat1.hour,dat1.minute,dat1.second,dat2.year,dat2.month,dat2.day,dat2.hour,dat2.minute,dat2.second);

p=datdiff(dat1);

q=datdiff(dat2);

o=fabs(p-q);

m=fabs(dat1.hour-dat2.hour);

n=fabs(dat1.minute-dat2.minute);

l=fabs(dat1.second-dat2.second);

printf("thedistanceis%dtian,%dxiaoshi,%dfenzhong,%dmiao\n",o,m,n,l);

printf("pleaseinputtwelvenumbersagain!

inordertocomparewhichisbig!

\n");

scanf("%d%d%d%d%d%d,%d%d%d%d%d%d",&dat3.year,&dat3.month,&dat3.day,&dat3.hour,&dat3.minute,&dat3.second,&dat4.year,&dat4.month,&dat4.day,&dat4.hour,&dat4.minute,&dat4.second);

fprintf(fp,"pleaseinputtwelvenumbersagain!

inordertocomparewhichisbig!

\n");

fprintf(fp,"%d,%d,%d,%d,%d,%d\n%d,%d,%d,%d,%d,%d\n",dat3.year,dat3.month,dat3.day,dat3.hour,dat3.minute,dat3.second,dat4.year,dat4.month,dat4.day,dat4.hour,dat4.minute,dat4.second);

z=compare(dat3,dat4);

if(z>0)

printf("qianzhedayuhouzhe!

\n");

elseif(z<0)

printf("qianzhexiaoyuhouzhe!

\n");

else

printf("liangzhexiangtong!

");

fclose(fp);

}

intget_weekday(structdata)

{

intA,B,D,E,F,G,i;

intC=0,s=0;

if(a.year==2000)

{

switch(a.month)

{

case1:

s=s+a.day-1;break;

case2:

s=s+30+a.day;break;

case3:

s=s+30+29+a.day;break;

case4:

s=s+30+29+31+a.day;break;

case5:

s=s+30+29+31+30+a.day;break;

case6:

s=s+30+29+31+30+31+a.day;break;

case7:

s=s+30+29+31+30+31+30+a.day;break;

case8:

s=s+30+29+31+30+31+30+31+a.day;break;

case9:

s=s+30+29+31+30+31+30+31+31+a.day;break;

case10:

s=s+30+29+31+30+31+30+31+31+30+a.day;break;

case11:

s=s+30+29+31+30+31+30+31+31+30+31+a.day;break;

case12:

s=s+30+29+31+30+31+30+31+31+30+31+30+a.day;break;

}

A=s%7;

switch(A)

{

case0:

B=6;break;

case1:

B=7;break;

case2:

B=1;break;

case3:

B=2;break;

case4:

B=3;break;

case5:

B=4;break;

case6:

B=5;break;

}

returnB;

}

else

{

for(i=2000;i

{

if(runnian(i)==1)

C=C+366;

else

C=C+365;

}

D=C%7;

switch(D)

{

case0:

E=6;break;

case1:

E=7;break;

case2:

E=1;break;

case3:

E=2;break;

case4:

E=3;break;

case5:

E=4;break;

case6:

E=5;break;

}

if(runnian(a.year)==1)

{

switch(a.month)

{

case1:

F=a.day-1;break;

case2:

F=30+a.day;break;

case3:

F=30+29+a.day;break;

case4:

F=30+29+31+a.day;break;

case5:

F=30+29+31+30+a.day;break;

case6:

F=30+29+31+30+31+a.day;break;

case7:

F=30+29+31+30+31+30+a.day;break;

case8:

F=30+29+31+30+31+30+31+a.day;break;

case9:

F=30+29+31+30+31+30+31+31+a.day;break;

case10:

F=30+29+31+30+31+30+31+31+30+a.day;break;

case11:

F=30+29+31+30+31+30+31+31+30+31+a.day;break;

case12:

F=30+29+31+30+31+30+31+31+30+31+30+a.day;break;

}

G=F%7;

switch(G)

{

case0:

returnE;

case1:

if(E+G==7)

return7;

else

return((E+G)%7);

case2:

if(E+G==7)

return7;

else

return((E+G)%7);

case3:

if(E+G==7)

return7;

else

return((E+G)%7);

case4:

if(E+G==7)

return7;

else

return((E+G)%7);

case5:

if(E+G==7)

return7;

else

return((E+G)%7);

case6:

if(E+G==7)

return7;

else

return((E+G)%7);

}

}

else

{

switch(a.month)

{

case1:

F=a.day-1;break;

case2:

F=30+a.day;break;

case3:

F=30+28+a.day;break;

case4:

F=30+28+31+a.day;break;

case5:

F=30+28+31+30+a.day;break;

case6:

F=30+28+31+30+31+a.day;break;

case7:

F=30+28+31+30+31+30+a.day;break;

case8:

F=30+28+31+30+31+30+31+a.day;break;

case9:

F=30+28+31+30+31+30+31+31+a.day;break;

case10:

F=30+28+31+30+31+30+31+31+30+a.day;break;

case11:

F=30+28+31+30+31+30+31+31+30+31+a.day;break;

case12:

F=30+28+31+30+31+30+31+31+30+31+30+a.day;break;

}

G=F%7;

switch(G)

{

case0:

returnE;

case1:

if(E+G==7)

return7;

else

return((E+G)%7);

case2:

if(E+G==7)

return7;

else

return((E+G)%7);

case3:

if(E+G==7)

return7;

else

return((E+G)%7);

case4:

if(E+G==7)

return7;

else

return((E+G)%7);

case5:

if(E+G==7)

return7;

else

return((E+G)%7);

case6:

if(E+G==7)

return7;

else

return((E+G)%7);

}

}

}

}

intdatdiff(structdata)

{

inti;

intc=0;

for(i=0;i

{

if(runnian(i)==1)

c=c+366;

else

c=c+365;

}

if(runnian(a.year)==1)

{

switch(a.month)

{

case1:

c=c+a.day;break;

case2:

c=c+31+a.day;break;

case3:

c=c+31+29+a.day;break;

case4:

c=c+31+29+31+a.day;break;

case5:

c=c+31+29+31+30+a.day;break;

case6:

c=c+31+29+31+30+31+a.day;break;

case7:

c=c+31+29+31+30+31+30+a.day;break;

case8:

c=c+31+29+31+30+31+30+31+a.day;break;

case9:

c=c+31+29+31+30+31+30+31+31+a.day;break;

case10:

c=c+31+29+31+30+31+30+31+31+30+a.day;break;

case11:

c=c+31+29+31+30+31+30+31+31+30+31+a.day;break;

case12:

c=c+31+29+31+30+31+30+31+31+30+31+30+a.day;break;

}

returnc;

}

else

{

switch(a.month)

{

case1:

c=c+a.day;break;

case2:

c=c+31+a.day;break;

case3:

c=c+31+28+a.day;break;

case4:

c=c+31+28+31+a.day;break;

case5:

c=c+31+28+31+30+a.day;break;

case6:

c=c+31+28+31+30+31+a.day;break;

case7:

c=c+31+28+31+30+31+30+a.day;break;

case8:

c=c+31+28+31+30+31+30+31+a.day;break;

case9:

c=c+31+28+31+30+31+30+31+31+a.day;break;

case10:

c=c+31+28+31+30+31+30+31+31+30+a.day;break;

case11:

c=c+31+28+31+30+31+30+31+31+30+31+a.day;break;

case12:

c=c+31+28+31+30+31+30+31+31+30+31+30+a.day;break;

}

returnc;

}

}

intcompare(structdatdat3,structdatdat4)

{

if(dat3.year>dat4.year)

return1;

elseif(dat3.year

return-1;

elseif(dat3.month>dat4.month)

return1;

elseif(dat3.month

return-1;

elseif(dat3.day>dat4.day)

return1;

elseif(dat3.day

return-1;

elseif(dat3.hour>dat4.hour)

return1;

elseif(dat3.hour

return-1;

elseif(dat3.minute>dat4.minute)

return1;

elseif(dat3.minute

return-1;

elseif(dat3.second>dat4.second)

return1;

elseif(dat3.second

return-1;

else

return0;

}

intrunnian(intx)

{

if((x%4==0&&x%100!

=0)||(x%100==0&&x%400==0))

return1;

else

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

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

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