语言课程设计日期工具.docx
《语言课程设计日期工具.docx》由会员分享,可在线阅读,更多相关《语言课程设计日期工具.docx(16页珍藏版)》请在冰豆网上搜索。
语言课程设计日期工具
南昌航空大学
课程设计
课程名称:
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.yearreturn-1;
elseif(dat3.month>dat4.month)
return1;
elseif(dat3.monthreturn-1;
elseif(dat3.day>dat4.day)
return1;
elseif(dat3.dayreturn-1;
elseif(dat3.hour>dat4.hour)
return1;
elseif(dat3.hourreturn-1;
elseif(dat3.minute>dat4.minute)
return1;
elseif(dat3.minutereturn-1;
elseif(dat3.second>dat4.second)
return1;
elseif(dat3.secondreturn-1;
else
return0;
}
intrunnian(intx)
{
if((x%4==0&&x%100!
=0)||(x%100==0&&x%400==0))
return1;
else
return0;
}