程序设计基础课程设计.docx
《程序设计基础课程设计.docx》由会员分享,可在线阅读,更多相关《程序设计基础课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
![程序设计基础课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/11/1f28ca0e-a4dc-4617-a633-fde5c14d3944/1f28ca0e-a4dc-4617-a633-fde5c14d39441.gif)
程序设计基础课程设计
程序设计基础课程设计
万年历管理系统
院系:
计算机学院网络工程系
班级:
网络13–2班
姓名:
刘帅
指导教师:
阎肃
2013年12月30日
程序设计基础课程设计任务书
一引言……………………………………………………….3
二系统功能和数据说明…………………………………….3
一)功能简介………………………………………………3
三程序总体设计及流程图………………………………….4
一)应用到的c语言………………………………………4
二)程序的总框架…………………………………………4
四功能模块设计及调试…………………………………….5
一)算法说明………………………………………………5
1.输出某年的日历…………………………….……….10
2.求某年某月的月历………………………....……….11
3.求某个日期的详细内容………..…………………….16
4.界面的控制…………………………………………...21
五完整代码…………………………………………………21
五小结……………………………………………………..36
一引言
通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。
学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。
我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。
C语言是近年在国内外得到迅速推广应用的一种语言。
C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。
因此,C语言特别适合于编写各种软件。
在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。
通过这个小小的日历可以实现很多功能。
在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。
在不断的调试中最终才获得最为完整的程序。
接下来就是我的C语言课程设计的具体内容来了
二系统功能和数据说明
(一)功能简介
在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。
在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。
下面是它要实现的一些基本功能:
用C语言编写万年历
1、输出某年的日历
2、求某年某月的日历
3、求某个日期的详细内容
4、结束程序
[名称]万年历
[修改]1、对输入的日期进行容错处理
三程序总体设计及流程图
(一)应用到的C语言
头文件:
stdio.h/**/
windows.h/**/
stdlib.h/**/
Iostream.h/**/
在程序中运用了大量的自定义函数,都涉及为了使程序更简介明了。
其中有:
intWeekDay/*根据输入的日期,返回对应的星期*/
voidHowManyDays/*求某年某月距离输入日期的天数*/
intMonthDays/*根据输入的年号和月份,返回该月的天数*
voidPrintWeek/*打印星期几*/
voidPrintMonth/*打印月份*/
voidPrintData/*打印日历*/
voidPrintMonthData()/*打印月历*/
voidAboutDay()/*日期详细内容*/
voidHoliday/*判断公历节日函数*/
这些函数的定义极其相应的内部程序共同构筑起了这个万年历总程序。
其中的voidPrintData函数是用来打印日历,实现了预计功能的第一个方面;voidPrintMonthData(),voidPrintMonth函数则是为了实现求某年某月的日历编写的;voidAboutDay(),voidHoliday,voidPrintWeek这三个函数的共同使用就能够完成第三个功能
(二)程序的总框架
四功能模块函数设计和调试
一).算法说明
1.输出日历:
voidPrintData函数的使用,将日历输出来了。
输出日历的方法是:
voidPrintData(void)
{
structmonmonth[13];
inti,j,k;
intyear,mon,week;
puts("请输入年号:
");
scanf("%d",&year);
for(i=1;i<13;i++)//存储该年每个月的总天数和初始日期
{
month[i].data=1;
month[i].maxdata=MonthDays(year,i);
}
for(i=0;i<6;i++)//总共输出6排
{
for(j=1;j<=2;j++)//每排输出2个月
{
mon=2*i+j;
printf("s","");
PrintMonth(mon);//第一行打印月份
printf("s","");
if(j==1)
printf("\t");
}
printf("\n\n");
for(j=1;j<=2;j++)
{
for(k=0;k<7;k++)
{
PrintWeek(k);//第2行打印星期
}
printf("\t");
}
printf("\n");
for(j=1;j<=2;j++)
{
mon=2*i+j;
week=WeekDay(year,mon,1);//根据输入的日期,返回对应的星期
printf("%*d",week*5+2,month[mon].data++);//控制输出格式,把每月的1日打印在对应星期的下面
week++;
while(week<7)//接着在该行打印该周剩余的日期
{
printf("%5d",month[mon].data++);
week++;
}
if(j==1)printf("\t");}
printf("\n\n");//从第4行起打印该月剩余的日期,每7个一行;直至该月日期打印完毕
while(month[2*i+1].data<=month[2*i+1].maxdata||month[2*i+2].data<=month[2*i+2].maxdata)
{
for(j=1;j<=2;j++)
{
mon=2*i+j;
for(k=0;k<7;k++)
{//如果该月日期未打印完,打印该日期
if(month[mon].data<=month[mon].maxdata)
printf("%5d",month[mon].data++);
else//否则输出空格
printf("");
}
if(j==1)
printf("\t");
}
printf("\n");printf("\n");
}
printf("\n");
}
}
2.求某年某月的日历
利用voidPrintMonth函数可以打印月份,然后对于输入的月份可以通过voidPrintMonthData()函数就可以输出相应的月历。
voidPrintMonth(intmonth)//打印月份
{
switch(month)
{
case1:
printf("%s","一月");break;
case2:
printf("%s","二月");break;
case3:
printf("%s","三月");break;
case4:
printf("%s","四月");break;
case5:
printf("%s","五月");break;
case6:
printf("%s","六月");break;
case7:
printf("%s","七月");break;
case8:
printf("%s","八月");break;
case9:
printf("%s","九月");break;
case10:
printf("%s","十月");break;
case11:
printf("%s","十一月");break;
case12:
printf("%s","十二月");break;
}
}
intWeekDay(intyear,intmonth,intday)//根据输入的日期,返回对应的星期
{
inti;
intrun=0,ping=0;
longsum;
for(i=1;i{
if(i%4==0&&i%100!
=0||i%400==0)
run++;
Else
ping++;
}
sum=366*run+365*ping;
for(i=1;isum+=MonthDays(year,i);
sum+=day;//计算总天数
return(int)sum%7;
}
intMonthDays(intyear,intmonth)//根据输入的年号和月份,返回该月的天数
{
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
return31;
case4:
case6:
case9:
case11:
return30;
case2:
if(year%4==0&&year%100!
=0||year%400==0)
return29;
else
return28;
default:
puts("这是一个错误的月份!
");system("pause");return0;
}
}
voidPrintMonthData(void)
{
intmonth;
inti,j,k,l,a;
intyear,mon,week;
puts("请输入年号和月份:
");
scanf("%d,%d",&year,&month);
printf("你的输入为%d年%d月,",year,month);
printf("\n\n");
PrintMonth(month);//第一行打印月份
printf("\n\n");
for(k=0;k<7;k++)
{
PrintWeek(k);//第2行打印星期
}
printf("\n");
a=WeekDay(year,month,1);
if(a>0)
printf("%*c",a*5-1,32);//控制输出格式,把该月的1日打印在对应星期的下面32为空格的ASCII码
for(i=1;i<=MonthDays(year,month);i++)
{
if(a==0)printf("");
elseprintf("");
printf("%*d",2,i);
a++;
if(a==7)
{printf("\n");
a=0;
}
}
printf("\n");
}
五完整代码
#include
#include
#include
#include
usingnamespacestd;
structmon
{
intmaxdata;
intdata;
};
intWeekDay(intyear,intmonth,intday);//根据输入的日期,返回对应的星期
voidHowManyDays(intyear,intmonth,intday,intyear1,intmonth1,intday1);//求某年某月距离输入日期的天数
intMonthDays(intyear,intmonth);//根据输入的年号和月份,返回该月的天数
voidPrintWeek(intweekday);//打印星期几
voidPrintMonth(intmonth);//打印月份
voidPrintData();//打印日历
voidPrintMonthData();//打印月历
voidAboutDay();//日期详细内容
voidHoliday(int,int);//判断公历节日函数
intmain(void)//主函数
{
intchoice;
printf("\t\t\t*******************************\n");
printf("\t\t\t欢迎进入万年历查询系统\n");
printf("\t\t\t*******************************\n");
printf("\n");
printf("输入的年月日格式如2001,1,1");
printf("\n\n");
while
(1)
{
puts("------------------------------------------");
puts("-----请输入您的选择:
--------");
puts("-----输入1输出某年的日历--------");
puts("-----输入2求某年某月的月历--------");
puts("-----输入3求某个日期的详细内容--------");
puts("-----输入4结束程序--------");
puts("------------------------------------------");
puts("\t\t\t\t制作者:
杜震鹏\n\n\t\t\t\t\n\n\n\n\n\n");
scanf("%d",&choice);
switch(choice)
{
case1:
PrintData();break;//打印某年日历
case2:
PrintMonthData();break;//打印某年某月月历
case3:
AboutDay();break;//求某日期的详细内容
case4:
return0;//结束程序
default:
puts("格式或选择输入错误,请重新输入");break;
}
printf("\n\n");
}
system("pause");
return0;
}
voidHowManyDays(intyear,intmonth,intday,intyear1,intmonth1,intday1)//求某年某月距离输入日期的天数
{
intdays2,sum,days;
intsum1=0;
if(year==year1&&month==month1)//如果同年同月直接日期想减
{
sum=day1-day;}
else//否则内嵌年月循环,求两个日期内每年每月的日数累加
{
days=MonthDays(year,month)-day;
for(year;year{
for(month;month<13;month++)
{
days2=MonthDays(year,month);
sum1=sum1+days2;
}
month=1;
}
sum=sum1+days+day1;
}
printf("相距有%d天\n",sum);
}
voidAboutDay()//日期详细内容
{
intyear,month,day,weekday,s;
intyear1,month1,day1;
puts("请输入年,月,日:
");
scanf("%d,%d,%d",&year,&month,&day);
printf("你的输入为%d年%d月%d日\n",year,month,day);
weekday=WeekDay(year,month,day);//根据输入的日期,返回对应的星期
printf("这天是");
PrintWeek(weekday);//打印星期几
printf("\t");
Holiday(month,day);
printf("\n\n");
puts("是否求该日期与另一日期的间距?
(是请输入1,否请输入0)\n");
scanf("%d",&s);
if(s==1)
{
printf("\n请输入想求相距的年份的年,月,日:
");
scanf("%d,%d,%d",&year1,&month1,&day1);
HowManyDays(year,month,day,year1,month1,day1);
}
if(s==0)
exit;
}
voidHoliday(intmonth,intday)
{
intsum;
sum=month*100+day;//以每个公历日期的月日组合为相对唯一的数字作选择
switch(sum)
{
case101:
printf("元旦");break;
case214:
printf("情人节");break;
case308:
printf("妇女节");break;
case312:
printf("植树节");break;
case314:
printf("国际警察日");break;
case315:
printf("消费者权益日");break;
case321:
printf("世界森林日");break;
case322:
printf("世界水日");break;
case401:
printf("愚人节");break;
case407:
printf("世界卫生日[世界无烟日]");break;
case422:
printf("世界地球日");break;
case501:
printf("劳动节");break;
case504:
printf("青年节");break;
case508:
printf("世界红十字日");break;
case512:
printf("护士节");break;
case601:
printf("儿童节");break;
case605:
printf("世界环境保护日");break;
case606:
printf("全国爱眼日");break;
case623:
printf("国际奥林匹克日");break;
case625:
printf("全国土地日");break;
case626:
printf("国际禁毒日");break;
case701:
printf("建党纪念日");break;
case707:
printf("抗日战争纪念日");break;
case801:
printf("建军纪念日");break;
case815:
printf("抗日战争胜利纪念日");break;
case908:
printf("国际扫盲日[国际新闻工作者日]");break;
case910:
printf("教师节");break;
case927:
printf("世界旅游日");break;
case1001:
printf("国庆节");break;
case1002:
printf("国际和平斗争日");break;
case1006:
printf("老人节");break;
case1009:
printf("世界邮政日");break;
case1014:
printf("世界标准日");break;
case1015:
printf("国际盲人节");break;
case1016:
printf("世界粮食日");break;
case1024:
printf("联合国日");break;
case1031:
printf("世界勤俭日");break;
case1101:
printf("万圣节");break;
case1108:
printf("记者节");break;
case1117:
printf("国际学生日");break;
case1201:
printf("世界艾滋病日");break;
case1210:
printf("世界人权日");break;
case1225:
printf("ChristmasDay");break;
default:
break;
}
}
voidPrintWeek(intweekday)//打印星期几
{
switch(weekday)
{
case0:
printf("%s","周日");break;
case1:
printf("%s","周一");break;
case2:
printf("%s","周二");break;
case3:
printf("%s","周三");break;
case4:
printf("%s","周四");break;
case5:
printf("%s","周五");break;
case6:
printf("%s","周六");break;
}
}
voidPrintMonth(intmonth)//打印月份
{
switch(month)
{
case1:
printf("%s","一月");break;
case2:
printf("%s","二月");break;
case3:
printf("%s","三月");break;
case4:
printf("%s","四月");break;
case5:
printf("%s","五月");bre