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