C语言程序设计万年历Word格式.docx
《C语言程序设计万年历Word格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计万年历Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
![C语言程序设计万年历Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/7019626a-198e-41ac-8c69-7bc9adeb8da5/7019626a-198e-41ac-8c69-7bc9adeb8da51.gif)
XXXXXXX
XX
运行完成后显示:
“是否继续打印(Y/N)?
”如果输入Y,则重新显示“请输入要打印的月份(XXXX年XX月)”,否则回到主菜单。
(3)在主菜单中输入3后,显示:
“请输入要打印的年份(XXXX)”
运行后输出XXXX年的日历,
XXXX
X(月数)
SMTWTFS
XXXXXXX
xx
……
SMTWTFS
XXXXX
XXXXX
运行完成后显示:
”如果输入Y,则重新显示“请输入要打印的年份(XXXX)”,否则回到主菜单。
(4)在主菜单中输入4后,显示:
“是否要真的退出(Y/N)?
”如果输入Y,结束程序运行,否则重新显示主菜单。
本系统涉及的知识点有:
for语句、do-while语句、switch语句、break语句、if-else语句、还有sizeof、return、default、char、printf、scanf等,包含了课本上的很多知识。
有顺序、选择、循环的结构,数组、函数、指针等。
2功能设计:
本系统需要实现的功能要求:
利用for语句、do-while语句、switch语句、break语句和if-else语句来实现所需功能
如:
(万年历系统主菜单)
输入1输出:
XXXX年XX月XX日是星期X
输入2输出X月的日历
输入3输出XXXX年的日历
输入4退出
3程序代码设计
1)函数原形:
voidInputyearMonth();
输入年月日的函数判断格式是否正确
VoidInputDates();
输入日期判断格式是否正确
2)功能:
switch语句判断每月的天数是多少以及二月分的天数是多少
用while语句循环判断月份的函数及输入日期判断是否正确并赋值
3)变量及类型:
intYearTodays(inty);
类的私有函数intDatasToDays();
intMonthToWeek();
intYearMonthToDay(inty,intm);
voidDate:
:
InputDates()输出函数
4)说明:
利用输入模块来完成数据的输入
voidshowyuandan()//显示元旦是星期几的函数voidDisPlayMonth();
//显示月历voidDate:
showdatetime()//显示当前系统时间
用if语句判断是否是闰年然后输出下面的函数
VoidDate:
DisPlayMonth()输出结果的函数
Intyear;
intmonth;
intdays;
intwday;
类的私有成员
利用输出模块来完成数据的输出
4程序设计总结:
这次“万年历系统设计”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度,更加熟练的运用C语言,而且在一定意义上对面向对象设计的理解更加深刻了。
是我在编程路途上的一次质的飞跃。
而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。
当看着一个具有图形界面的万年历的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。
5致谢;
在程序设计报告的编写过程中得到了刘洁老师的有力帮助,还有朱浩同学的帮助提醒,以及网络资源的参考,在此一并表示感谢。
6参考文献:
【1】贾宗璞、许合利,《C语言程序设计》人民邮电出版社2010.9
【2】贾宗璞、许合利,《大学计算机基础》吉林大学出版社2010.8
【3】谭浩强,《C程序设计》清华大学出版社1999
【4】陈英,《C语言趣味程序百例精解》北京理工大学出版社1994
【5】
7附:
#include<
stdio.h>
stdlib.h>
typedefstruct{
intyear;
charmonth;
charday;
}*DATE;
DATENewDate(void);
intDestroyDate(DATEdate);
intDaysAMonth(DATEdate);
intCheckDate(DATEdate);
intSetDate(DATEdate,intyear,intmonth,intday);
intGetWeek(DATEdate);
intQueryDay(void);
intShowMonth(DATEdate);
intQueryMonth(void);
intQueryYear(void);
intConfirmExit(void);
intCalendar(void);
intmain()
{
if(Calendar())
return0;
else
return1;
}
DATENewDate(void)
DATEdate;
date=(DATE)malloc(sizeof(*date));
returndate;
intDestroyDate(DATEdate)
if(!
date)
free(date);
intDaysAMonth(DATEdate)
intdays;
switch(date->
month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
break;
case4:
case6:
case9:
case11:
days=30;
default:
days=0;
}
if(date->
month==2)
year%4==0&
&
date->
year%400!
=0||date->
year%400==0)
days=29;
days=28;
returndays;
intCheckDate(DATEdate)
month<
1||date->
month>
12)
day<
day>
DaysAMonth(date))
intSetDate(DATEdate,intyear,intmonth,intday)
year=year;
month=month;
day=day;
returnCheckDate(date);
intGetWeek(DATEdate)
intyear,month,day;
year=date->
year;
month=date->
month;
day=date->
day;
if(month<
=2)
month+=12;
--year;
return(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7+1;
intQueryDay(void)
charcont;
staticchar*week[]={"
星期一"
"
星期二"
星期三"
星期四"
星期五"
星期六"
星期日"
};
(date=NewDate()))
do{
printf("
请输入年月日(XXXX,XX,XX)"
);
scanf("
%d,%d,%d"
&
year,&
month,&
day);
if(SetDate(date,year,month,day))
%4d年%2d月%2d日是%s,是否继续查询(Y/N)?
"
\
year,month,day,week[GetWeek(date)-1]);
%c"
cont);
日期输入错误!
\n"
}while(cont=='
Y'
||cont=='
y'
DestroyDate(date);
intShowMonth(DATEdate)
intstartweek;
inti;
startweek=GetWeek(date);
days=DaysAMonth(date);
SMTWSFS\n"
startweek=startweek%7;
for(i=0;
i<
startweek;
++i)
"
for(i=1;
=days;
%2d"
i);
startweek=(startweek+1)%7;
if(startweek==0)
if(startweek!
=0)
intQueryMonth(void)
intyear,month;
请输入要打印的月份(XXXX,XX)"
%d,%d"
month);
if(SetDate(date,year,month,1))
%4d年%2d月\n"
year,month);
ShowMonth(date);
月份输入错误!
intQueryYear(void)
intmonth;
请输入要打印的年份(XXXX)"
%d"
year);
%4d年\n"
year);
for(month=1;
=12;
++month)
SetDate(date,year,month,1);
%2d月\n"
month);
是否继续打印(Y/N)?
intConfirmExit(void)
charexit;
是否要真的退出(Y/N)?
exit);
if(exit=='
||exit=='
)
intCalendar(void)
intmenu=1;
inttmp;
switch(menu)
\n|1查星期||2月日历||3年日历||4退出|:
tmp);
switch(tmp)
menu=11;
case2:
menu=12;
menu=13;
menu=14;
选择有误!
QueryDay();
menu=1;
QueryMonth();
case13:
QueryYear();
case14:
if(ConfirmExit())
menu=0;
}while(menu);