万年历课程设计_第1页
万年历课程设计_第2页
万年历课程设计_第3页
万年历课程设计_第4页
万年历课程设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

尚德励志

博学苜行

《程序设计基础(C/C++)》课程设计报告

万年历管理系统

学生姓名黄巨龙

学号201110821

班级电力工程与管理

指导教师胡建宏

日期2012年6月21日

兰州交通大学新能源与动力工程学院

程序设计课程设计

评分

目录

第一章设计目的与要求...........................................................1

1.1设计目的.....................................................................1

1.2设计要求.....................................................................1

第二章课程设计的相关内容.......................................................1

2.1设计背景.....................................................................1

2.2程序开发环境................................................................1

2.3课程设计主要内容............................................................1

第三章课程设计整体规划和设计..................................................2

3.1整体流程图...................................................................2

3.2功能模块图..................................................................3

3.3各模块功能详细说明..........................................................3

3.3.1查询星期模块..........................................................3

3.3.2判断模块..............................................................3

3.3.3查询月历模块..........................................................4

3.3.4显示模块..............................................................4

3.3.5退出模块..............................................................4

3.4各模块函数说明..............................................................4

3.4.1查询星期模块程序:....................................................4

3.4.2判断模块程序..........................................................4

3.4.3查询月历模块..........................................................4

3.4.4显示模块程序..........................................................5

第四章系统实现..................................................................6

4.1系统使用说明及出现的问题....................................................6

4.1.1系统使用说明...........................................................6

4.1.2可能出现的问题........................................................6

4.2系统运行结果及运行截图......................................................7

程序设计课程设计

4.2.1系统总体选择图.........................................................7

4.2.2查询输入的这天是星期几................................................8

4.2.3判断输入的这年是否为闰年..............................................8

4.2.4查询一年第几年的日历..................................................9

4.2.5打印出一年的日历.....................................................10

4.2.6输入年份不在范围内...................................................10

4.2.7输入错误符号..........................................................11

4.2.8输入的数字不在选择范围内.............................................11

4.2.9退出..................................................................12

4.3系统核心代码................................................................12

第五章课程设计心得与体会......................................................14

附录一:参考文献..............................................................14

附录二:程序清单................................................................14

程序设计课程设计

第一章设计目的与要求

1.1设计目的

通过显示年日历程序的设计,培养学生综合利用C++语言进行程序设计的能力,加强函

数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳

总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。

通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好

的巩固《C++语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动

手编程能力,闯过理论与实践相结合的难关!更加了解了C++语言的好处和其可用性!同时

增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!

通过C++语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过

程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设

计能力。为后续各门计算机课程的学习和毕'业设计打下坚实基础。

1.2设计要求

1、能够显示时间、时分、星期;

2、能够显示年月日;

3、能够自动清除屏幕以前的废弃信息;

4、能够修改;

5、能够提示用户是否继续;

6、要求用C++语言编程,在VisualC++环境下调试完成;

7、要求划分功能模块,各个功能分别使用函数来完成;

8、源代码程序要有必要的注释。

第二章课程设计的相关内容

2.1设计背景

C++教学起步的背景1996年,国外计算机产业界正在全面兴起面向对象编程与设计的

热潮,其主要工具就是C++。C++在数据类型的安全上,弥补了C的不足,克服了C的种种

安全隐患,用C++开发的产品正在稳步上市,并开始超过了C。C++的开发工具正在稳步推出,

在Windows环境下的两个主要C++开发工具BorlandC++Builder4.0和Microsoft

VisualC++6.0标志着C++开发工具已经成熟。

2.2程序开发环境

a.开发工具MicrosoftVisualC++6.0

b.系统环境WindowsXP

c.设计工具Office2003

2.3课程设计主要内容

1、打开系统自动显示系统当前时间,包括年月日时分等信息;

2、提示用户输入需要查询的年月;

1

程序设计课程设计

3、提示用户是否继续;

4、自动清屏清除屏幕以前废弃信息:

5、自动打印出用户输入的年月的日历信息;

6、系统自动显示当前年月的日历;

7、根据用户输入进行操作。

第三章课程设计整体规划和设计

3.1整体流程图

图3.1流程图

2

程序设计课程设计

3.2功能模块图

万年历系统

图3.2功能模块图

3.3各模块功能详细说明

3.3.1查询星期模块

本模块是用来查询输入日期是星期几。

3.3.2判断模块

本模块是用来判断输入年份是否为闰年。

3

程序设计课程设计

3.3.3查询月历模块

本模块是用来杳询、显示输入年份中的月历。

3.3.4显示模块

本模块是用来显示输入年份的年历o

3.3.5退出模块

本模块是用来合法退出本系统。

3.4各模块函数说明

3.4.1查询星期模块程序:

intDaySearch(intyear,intmonth,intday)〃此函数计算输入的日期对应的星期

(

intm,c=0;

floats;

for(m=l;m<month;m-i-+)

c=c+month_day(year,m);〃计算输入的月分的累计天数

c=c+day;〃计算日期在这一年中是第几天

s=year-1+(float)(year-l)/4+(float)(year-l)/100+(float)(year-l)/400-40+c;

return((int)s%7);//判断是星期儿,余数为零是星期日,余数为一是星期一,

为二是星期二,以此类推

)

3.4.2判断模块程序

intIsLeapYear(intyear)〃调用IsLeapYear函数判断闰年

(

if((year%4==0&&year%100!=0)ll(year%400=0))〃闰年条件:(l)year被4整除,并且year

不被100整除或⑵year被4整除,并且year被400整除

return1;〃如果是闰年就返回值1

else

return0;〃不是的话返回0

)

intmonth_day(intyear,intmonth)〃此函数用来判断这年的月份有多少天

4

程序设计课程设计

intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31);〃对每月的天数进行赋值

if(IsLeapYear(year)&&month==2)〃判断是判断是否是闰年,如果是闰年而且这

个月是2月那这个月有29天

return29;

else

retum(mon_day[month-l]);

)

3.4.3查询月历模块

intSearchMonth(intyear,intmonth)〃输出查询的月份

(

inttemp,i,j;

printf(u\n\n%d的月历一〉\n”,year);

fbr(i=l;i<=12;i++)

(

if(i=month)

{

printf(''\n\n\t==%s(%d)===\n\n,,,month_str[i-l],i);

printfC'H一二三四五六\nn);

printf(nSMTWTFS\n\nn);

temp=DaySearch(year,i,1);

for(j=l;j<=month_day(year,i)+temp;j++)

(

if(j-temp<=0)

printfC1'");

elseif(j-temp<10)

printf("%d”,j-temp);

else

printf(n%d",j-temp);

if(j%7==0)

printf(u\nM);

)

break;

)

)

return0;

}

3.4.4显示模块程序

intPrintAllYear(intyear)〃输出整年的函数

5

程序设计课程设计

inttemp,i,j;

printf(u\n\n%d的月历year);

for(i=l;i<=12;i++)

(

printf("\n\n\t===%s(%d)===\n\n'\month_str[i-l],i);

printf("日一二三四五六\nM);

printf(uSMTWTFS\n\nH);

temp=DaySearch(year,i,1);

for(j=1;j<=month_day(year,i)+temp;j++)

{if(j-temp<=0)

printf(H”);

elseif(j-temp<10)

printf(”%d",j-temp);

else

printf('f%dn,j-temp);

if(j%7==0)

printfCAn*');

)

)

return0;

}

第四章系统实现

4.1系统使用说明及出现的问题

4.1.1系统使用说明

这个程序是用C语言编写的,在软件MicrosoftVisualC++上运行,首先打开VisualC++,

创建文件夹保存,新建文件,然后编入代码,编译,如果没有错误的话运行。运行界面上有

五个选项,根据需求选择选项,首页最上面是显示的运行当时的本地时间。

4.1.2可能出现的问题

在编写代码的时候可能会出现错误,这时在代码下面会提示错误与警告的地方,双击

显示的代码就可找出代码的错误所在行,如果编译后下面都是显示o个错误和警告时,就可

以运行,有是即使是。个错误,有几个警告也可以运行。

在运行的过程中输入的年份不在1900到2500之间,系统就显示不出所要求的内容,

系统也会提醒。如果输入的不是数字,输入其他符号,系统会做出提示说输入错误,需重新

输入。

6

程序设计课程设计

4.2系统运行结果及运行截图

4.2.1系统总体选择图

c(*C:\Docu>entsand561t:£118$\4(1>:1111$七百101:\桌面\口61)11849「1・"6-□X

现在是:2012年6月19日17:49:22星期二

<==.欢迎进入万年历系统.==>

请选择以下功能一〉

查询曹

入的这

星几

1息

2是

一^

3查

一的

4g日

5土

请选择<1.2...〉

图4.2.1系统总体选择图

7

程序设计课程设计

4.2.2查询输入的这天是星期几

c:*C:\Docu>entsandSettings\Ad*inistrator\^ffi\Debug\Cpp1.exe-□X

B6

19

请:.

JA年22

年01

JAM几

JA年H

JA

2012-6-20isWednesday

是否继续?<Y/N〉,

H

图4.2.2星期查询图

4.2.3判断输入的这年是否为闰年

图4.2.3(a)判断是否为闰年图

8

程序设计课程设计

图4.2.3(b)判断是否为闰年图

4.2.4查询一年第几年的日历

*C:\Docu>entsandSettiIlgs\Ad>inistrator\桌面\Debug\Cppl.exeHEIQ

I▲

情输入这年的第几年6

卜初2的月历一>

===June<€>-==

S―.—四五六

SMTUTFS

12

3456789

10111213141516

17181920212223

24252627282930

是否想继续<Y/N〉?.

Ld

图4.2.4日历查询图

9

程序设计课程设计

4.2.5打印出一年的日历

*C:\Docu*entsandSettings\AdMinistrator\^ffi\Debug\Cpp1.exe*■一回X

请输入您要打印的某年<<如::>012»:2012▲

2012的月历一>—

—=January<l>===

S—__—四五六

SMTWTFS

1234567

891011121314

15161718192021

22232425262728

293031

===Februai'y<2>===

H—二—四五六

SMTWTFS

1234

567891011

12131415161718

19202122232425

26272829

二J

图4.2.5月历打印图

4.2.6输入年份不在范围内

图4.2.6输入错误数字图

10

程序设计课程设计

4.2.7输入错误符号

图4.2.7输入错误符号图

4.2.8输入的数字不在选择范围内

c:*C:\DocuBentsandSettings\AdBinistrator\^ffi\Debug\Cpp1.eze-|n|x

请选择以下功能一〉

查询

入的

1星几

2入

一^

3年

4.日

5出

情选择<1,2一.>6

Error:对不起.没有这个选择•

4.2.8输入错误选择图

II

程序设计课程设计

4.2.9退出

cl-C:\Docu>entsandSettings\Ad>inistrator\Debug\Cpp1.eze日回X

请选择以下功能一〉

查询

的这

1是星

2是

一3

3的

4K日

5七

请选择<1.2...>5

是否真的确定?〈Y/N〉,

图4.2.9退出图

4.3系统核心代码

#include<stdio.h>

#include<stdlib.h>〃定义杂项函数及内存分配函数

#include<time.h>

#include<conio.h>

char*month_str[]={',January,,;,February";,March","April",nMayn;,June","July,\',August',,,,Septe

mber","October","November","December”};〃定义变量month的方式

char*week[]={"Sunday","Monday","Tuesday”,"Wednesday","Thursday","Friday","Saturday"};

〃定义变量week的方式

voidTime()〃调用系统时间

(

time_tt;

structtm*tp;

staticchar*week[]={“一二”,”三四“,“五“J六“,“日“};

t=time(NULL);

tp=localtime(&t);

printf("\t------------------------------------------------------------------\nM);

printf("\t\t现在是:%d年%(1月%dH'\tp->tm_year+1900,tp->tm_mon4-l,tp->tm_mday);

12

程序设计课程设计

printf("%d:%d:%d,,,tp->tm_hour,tp->tm_min,tp->tm_sec);

printf("星期%5\11",week[(tp->tm_wday)-1]);

printf("\t------------------------------------------------------------------\nM);

}〃调用结束

intIsLeapYear(intyear)〃判断闰年

(

if((year%4==0&&year%100!=0)11(year%400==0))〃闰年条件:(1)year被4整除,并且year

不被100整除或⑵year被4整除,并且year被400整除

return1;〃如果是闰年就返回值1

else

return0;〃不是的话返回0

13

程序设计课程设计

第五章课程设计心得与体会

经过本学期对《C程序设计》的学习,我们学习了理论知识,了解了C语言程序设计的

思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检

查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时

也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。通过对.C语言万年历的设计进

一步的巩固了用C语言编写程序,并且有利于更好的掌握C语言!

在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础

知识。还有体会到了成功的感觉!通过本项课程设计也培养了我独立思考、综合运用所学

有关相应知识的能力,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与

实践相结合的难关!

在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能

够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一

次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序

后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对

自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!

也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要

自信!当自己都不相信自己能够成功时还可能会获得成功吗?在C语言程序设计的过程中也

知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看

不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知

识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以

伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌

握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础

和技能基础!

附录一:参考文献

谭浩强编著.C程序设计第四版卬].北京:清华大学出版社,2010

附录二:程序清单

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

char*month_strn={"January","February”:'March","April"JMay","June","July","August","Septe

mber","October","November","December”};〃定义变量month的方式

char*week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};

〃定义week的方式

voidTime()〃调用系统时间

(

time_tt;

structtm*tp;

staticchar*week[]={“一“,”二三“,“四五“,“六”,“日“};

t=time(NULL);

14

程序设计课程设计

tp=localtime(&t);

printf(n\t------------------------------------------------------------------\nn);

printf(n\t\t现在是:%d年%(1月%d日”,tp->tm_year+1900,tp->tm_mon+l,tp->tm_mday);

printf(n%d:%d:%d'\tp->tm_hour,tp->tm_min,tp->tm_sec);

printf("星期%s\n”,week[(tp->tm_wday)・l]);

printf("\t------------------------------------------------------------------\n");

)〃调用结束

intIsLeapYear(intyear)〃调用IsLeapYear函数判断闰年

(

if((year%4==0&&year%100!=0)ll(year%400==0))〃闰年条件:(l)year被4整除,并且year

不被100整除或⑵year被4整除,并且year被400整除

return1;〃如果是闰年就返回值1

else

return0;〃不是的话返回0

intmonth_day(intyear,intmonth)〃此函数用来判断这年的月份有多少天

intmon_day[]={31,28,31,30,31,30,31,31,30,31,30,31);〃对每月的天数进行赋值

if(IsLeapYear(year)&&month==2)〃判断是判断是否是闰年,如果是闰年而且这

个月是2月那这个月有29天

return29;

else

retum(mon_day[month-1]);

)

intDaySearch(intyear,intmonth,intday)//此函数计算输入的日期对应的星期

(

intm,c=0;

floats;

fbr(m=l;m<month;m++)

c=c+month_day(year,m);〃计算输入的月分的累计天数

c=c+day;〃计算日期在这一年中是第儿天

s=year-l+(float)(year-1)/4+(float)(year-1)/100+(float)(year-l)/400-40+c;

return((int)s%7);//判断是星期儿,余数为零是星期日,余数为一是星期一,

为二是星期二,以此类推

)

intPrintAllYear(intyear)〃输出整年的函数

(

inttemp,i,j;

printf(H\n\n%d的月历year);〃输出需要的整年月历

for(i=1;i<=12;i++)

printf("\n\n\t===%s(%d)===\n\n",month_str[i-l],i);〃输出月分名称

print"—•二三四五六\";

printf(HSMTWTFS\n\nu);

15

程序设计课程设计

temp=DaySearch(year,i,l);

for(j=l;j<=month_day(year,i)+temp;j++)

(

if(j-temp<=0)

printfC1");

elseif(j-temp<10)

printf('r%d"j-temp);

else

printf(u%dn,j-temp);

if(j%7==0)

printf(An");

)

)

return0;

)

intSearchMonth(intyear,intmonth)〃输出查询的月份

(

inttemp,i,j;

printf(u\n\n%d的月历year);〃输入查询年份

for(i=l;i<=12;i-H-)

(

if(i=month)

(

printf(,,\n\n\t==%s(%d)===\n\n',,month_str[i-1],i);

printf("日一二三四五六\nn);

printf(KSMTWTFS\n\nM);

temp=DaySearch(year,i,I);

for(j=l;j<=month_day(year,i)+temp;j4-+)

(

if(j-temp<=0)

printf(H“);

elseif(j-temp<10)

printf(H%dn,j-temp);

else

printf("%d",j-temp);

if(j%7=0)

printf("\nH);

)

break;

)

)

return0;

menu()

16

程序设计课程设计

intoption,da,year,month,day;

charch,c;

printf(u\n\n\t\t\t<==\3欢迎进入万年历系统\3==>\n\n\n”);

while(l)

printf(An\t\t\t请选择以下功能一>\n\n)

printf(,f\t\t\t1.查询输入的这天是星期几\n”);

printf(At\t\t2.判断输入的这年是否为闰年\n");

printfCAtXtXt3.查询一年第几月的日历\n");

printf('M\t\t4.打印出一年的日历\n“);

printf('\t\t\t5.退出\n");

printf("\t\tAn");

while(scanf(1,%dn,&option)!=l)

while((c=getchar())!='\n');

printf(n\n\n\n\n\n\t\t\t[X]Error:输入有误,请重新输入!”);

getch();

system(“cls");

Time();

menu();

switch(option)

case1:

while(l)

(

systemC^cls*');

nod:printf(”请输入某年某月某天如:\n2012\n06\nl9\n请输入…\n");

printf(”请输入某年:");

while(scanf("%d”,&year)!=1)

(

while((c=getchar())!=\n');

printf("\n\n\t\t\t[X]Error:输入有误,请重新输入!)

getch();

system(nclsM);

gotonod;

)

if(yearvl900llyear>2500)

{

printf("\n\n\n\t\t出错了!您输入的年份必须在1900〜2500之间,请重新输入…1

getch();

system(nclsn);

17

程序设计课程设计

gotonod;

)

frist:printf(”请输入这年的第几月:“);

while(scanf("%d",&month)!=1)

(

while((c=getchar())!=\n,);

printf("[X]Error:输入有误,请重新输入!\吟;

gotofrist;

)

if(month<1llmonth>12)

(

printf("出错了!您输入的月份必须在1〜12之间,请重新输入..An”);

gotofrist;

)

second:printf(”请输入这年的第几天:");

while(scanf(n%dM,&day)!=l)

(

while((c=getchar())!=\n*);

printf("[X]Error:输入有误,请重新输入!山

gotosecond;

}

if(day<lllday>=29&&IsLeapYear(year)&&month==2)

(

printf("出错了,您输入的天数必须在1〜29之间,请重新输入...\n");

gotosecond;

)

if(day<lllday>(float)day)

(

printf("出错了,您输入的天数有误,请重新输入...\n“);

gotosecond;

)

da=DaySearch(year,month,day);

printf("\n%d-%d-%dis%s\n\n是否继续?(Y/N)”,year,month,day,week[da]);

fflush(stdin);

scanf(u%c",&ch);

if(ch==,N,llch==,n,)

(

system(MclsM);

break;

)

)

break;

case2:

whiie(l)

18

程序设计课程设计

system(“cls");

loop:printf("请输入要查询闰年的年份?(<如:2012>):n);

while(scanf(M%dn,&year)!=l)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论