c语言专业课程设计方案报告万年历最详细.docx
《c语言专业课程设计方案报告万年历最详细.docx》由会员分享,可在线阅读,更多相关《c语言专业课程设计方案报告万年历最详细.docx(21页珍藏版)》请在咨信网上搜索。
C语言课程设计汇报 -----万年历 设计人:贾伟涛 学号:010912 班级:13电信应电班 指导老师:张伟 日期:6月9日 内容提要 经过大一下学期对C语言学习,了解到了很多C语言相关知识。学习过程即使有很多迷惑,不过当自己能够独立看懂和独立完成一个简单程序时,心中就会收获无限喜悦和成就感。我即使能够看懂部分简单程序,编写部分简单计算程序,更多是学会了一个思想——编程,它让我在去思索很多日常生活中事物是怎么样经过一个个小小函数实现功效,激发我对c语言爱好。 C语言是多年在中国外得到快速推广应用一个机器语言。C语言功效丰富,表示能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既含有高级语言优点,又含有低级语言很多特点。所以,C语言尤其适合于编写多种软件。 在这次课程设计中我将把日常生活中最常常接触——日历查询,利用C语言程序编成一个简单万年历查询系统。经过这个小小系统能够实现很多功效。在程序中你能看到很多熟悉C语言关键字,同时也加入了很多自己课外了解到部分关键字。在不停调试中最终才取得最为完整程序。接下来就是我C语言课程设计具体内容来了,大家拭目以待吧! 目录 一、 系统功效和数听说明----------------------- 二、 问题分析--------------------------------- 三、 程序总体设计及功效结构框图--------------- 四、 程序步骤图------------------------------- 五、 源程序代码------------------------------- 六、使用说明--------------------------------- 七、个人心得--------------------------------- 八、参考文件--------------------------------- 一、系统功效和数听说明 (一)功效介绍 在日常生活中能接触到很多不一样类型日历,在日历上我们通常期望它能简单明了给我们最想要日期信息。在我万年历系统当中,就是将日历,月历做简单明了,很方便我们查询使用。下面是它要实现部分基础功效: C语言编写万年历查询系统: (1)输入年份,判定是否为闰年 (2)输入年月日,判定是星期几 (3)输入年份,打印出12个月月历 (4)输入年月,打印出本月日历 另新增: (1) 对输入指令错误提醒 (2) 加入了调用系统时间函数 (3) 还添加了欢迎界面并进行界面优化 (二)程序中数听说明 ①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 这是定义相关每个月天数数组,依据大小月和二月份特殊情况将每个月天数变为数组中元素存入数组当中。其中days[1]=28,是将闰年二月天数28天作为初始元素存入。在经过yearMonth函数后就能够给days[1]中存入正确月天数。 ② tm *tp; char *week[]={"一","二","三","四","五","六","日"}; 这两组数据设计全部利用了指针定义,利用指针能够提升程序可读性,能够更方便使用。这两个数组作用是用于调用系统时间,而定义星期数组*week[]和年月日变量*tp,因为还没学到指针,在这里查阅了很多资料,并也借鉴了前辈们很多程序。 二、问题分析 对于闰年判定,能被4整除但不能被100整除,或能被400整除年份为闰年,不然为平年。日期查询,就是直接打印改天所在月份月历。 程序难点在于判定星期,但依据公式,我们能够很轻易地用年月日推断出星期: weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; 其中year:要查询年份 day:从该年一月一日起到该天天数 weekday:得出星期数。 在打印月历时,只要知道第一天星期,就能够依次输入后面日期,经过一定长度输出日期,在碰到某天时星期天时,就换行输出,所以能够根据月历格式输出。 对于初始输入目前系统时间,能够经过<time.h>中time 和localtime函数取出系统时间进行初始化。 判定日期是否正当, if((year>=3000||year<=1600)||(month>=12||month<0)||(day>=31||day<=0)) { system("CLS"); printf(" 输入错误,系统及立即返回!"); Sleep(3000); goto tz; } 能够先判定年月日是否有小于0值,月和日是否有超出最大值12和31 ,假如经过此判定正当,再判定是否时闰年,假如时闰年,则判定二月份是否满足要求,闰年二月份不能超出29天,平年二月份不能超出28天。在查询过程中,假如发觉输入不正当或不满足输入要求,则提醒错误,并返回主菜单。 三、程序总体设计及功效结构框图 (一)功效结构框图 系统时间显示 主菜单 星期查询 输出年历 输出月历 闰年判定 欢迎使用 (二)程序设计 头文件:#include<stdio.h>//标准输入输出函数 #include<stdlib.h>//清屏函数system() #include<windows.h>//延时函数Sleep() #include<time.h> //调用系统时间函数time() 在程序中利用了大量自定义函数,全部包含为了使程序更介绍明了。其中有: int isLeapYear(int year)//判定是否为闰年 void hy()//欢迎信息; void Time() //获取系统时间; int whichWeekday(int year, int month, int day)//判定某天为星期几; void yearMonth(int year, int month)//打印某年某月月历; void monthDay(int year)//输入年份,打出个月历; void menu()//主菜单; void main()//主函数; 这些函数定义及其对应内部程序共同构筑起了这个万年历查询系统总程序。其中isLeapYear函数是用来判定输入年份是否为闰年,实现了估计功效第一个方面;whichWeekday函数则是为了实现判定星期而编写;yearMonth函数则是为了实现月历而编写;Time()函数则是为调用系统时间而编写,该Time()函数采取指针形式定义了*week[]数组和*tp变量;yearMonth,monthDay 这两个函数共同使用就能够完成输出年历功效。 四、程序步骤图 (一)总步骤图 开始 计算是否为闰年 计算星期数 按键1? 按键3和44 输出是否为闰年 输出星期数 计算编辑接收到数据 输出具体年历和月历 按键5? 是 是 是 是 计算是否为闰年 计算星期数 按键2? 是 是 是 计算是否为闰年 计算星期数 是 是 是 是 结束 退出 (二)算法说明 1. 总天数算法: isLeapYear函数使用,判定出了输入年份是否为闰年信息。判定十二个月是否为闰年方法是:该年分而能被4整除但不能被100整除,或是能被400整除。 判定是否为闰年步骤图: 2.输入日期计算星期几: 利用whichWeekday函数能够判定出星期,然后对于输入日期能够经过公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7计算就能够输出对应星期数。 int whichWeekday(int year, int month, int day)//判定某天为星期几 { int weekday; if (month == 1 || month == 2)//公式中要把月和月换成是上十二个月月和月 { month += 12; year -= 1; } weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; //计算星期公式 return weekday+1; } 3. 对输入信息汇总: void yearMonth(int year, int month)//打印某年某月月历,void monthDay(int year)//输入年份,打出个月历;经过这两个函数能够将输入数据具体信息经过完整日历形式表示出来。 void yearMonth(int year, int month)//打印某年某月月历 { int i,j=0; int weekday; //计算这个月第一天是星期几 weekday = whichWeekday(year, month, 1); printf("\n %d年%d月\n",year,month); printf(" ------------------------------------------------\n"); printf(" 星期一星期二星期三星期四星期五星期六星期天\n"); if(isLeapYear(year) && month == 2) days[1] = days[1] + 1; printf(" "); for(i = 1; i < weekday; i ++) printf(" "); for(i = 0; i < 8 - weekday; i ++) { printf("%6d", i+1); printf(" "); } printf("\n "); for(i = 9-weekday; i <= days[month-1]; i ++,j++) { if(j == 7) { j = 0; printf("\n "); } printf("%6d ", i); } printf("\n ------------------------------------------------\n"); } void monthDay(int year)//输入年份,打出个月历 { int i; for(i = 0; i < 12; i ++) yearMonth(year,i+1); printf("\n\n"); } 五、源程序代码 #include<stdio.h>//标准输入输出函数 #include<stdlib.h>//清屏函数system() #include<windows.h>//延时函数Sleep() #include<time.h> //调用系统时间函数time() int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月天数,闰年二月要加 int isLeapYear(int year)//判定是否为闰年 { if(year%4 == 0 && year%100 != 0 || year%400 == 0) return 1; else return 0; } void hy()//欢迎信息 { printf("\n 欢迎使用万年历查询系统\n\n"); Sleep(700);//延时毫秒 printf(" 祝您天天好心情!\n\n\n"); Sleep(1000); printf(" 版本:v2.0\n\n\n"); Sleep(1000); printf(" 正在进入功效菜单,请稍候》》\n"); Sleep(5000);//延时秒 } void Time() //获取系统时间 { time_t t; struct tm *tp; static char *week[]={"一","二","三","四","五","六","日"}; t=time(NULL); tp=localtime(&t); printf("\t ─────────────────────\n"); printf("\t\t 系统时间日期:%d年%d月%d日",tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday); printf(" %d:%d:%d ",tp->tm_hour,tp->tm_min,tp->tm_sec); printf("星期%s\n",week[(tp->tm_wday)-1]); printf("\t ─────────────────────\n"); } int whichWeekday(int year, int month, int day)//判定某天为星期几 { int weekday; if (month == 1 || month == 2)//公式中要把月和月换成是上十二个月月和月 { month += 12; year -= 1; } weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7; //计算星期公式 return weekday+1; } void yearMonth(int year, int month)//打印某年某月月历 { int i,j=0; int weekday; //计算这个月第一天是星期几 weekday = whichWeekday(year, month, 1); printf("\n %d年%d月\n",year,month); printf(" ------------------------------------------------\n"); printf(" 星期一星期二星期三星期四星期五星期六星期天\n"); if(isLeapYear(year) && month == 2) days[1] = days[1] + 1; printf(" "); for(i = 1; i < weekday; i ++) printf(" "); for(i = 0; i < 8 - weekday; i ++) { printf("%6d", i+1); printf(" "); } printf("\n "); for(i = 9-weekday; i <= days[month-1]; i ++,j++) { if(j == 7) { j = 0; printf("\n "); } printf("%6d ", i); } printf("\n ------------------------------------------------\n"); } void monthDay(int year)//输入年份,打出个月历 { int i; for(i = 0; i < 12; i ++) yearMonth(year,i+1); printf("\n\n"); } void menu()//主菜单 { printf(" -----------------------------------------------\n"); printf(" "); printf(" 万年历查询系统\n\n"); printf(" **************************************************\n"); printf(" ** 1、输入年份,判定是否为闰年 **\n"); printf(" ** 2、输入年月日,判定该日为星期几 **\n"); printf(" ** 3、输入年份,打出个月历 **\n"); printf(" ** 4、输入月份,打出该月日历 **\n"); printf(" ** 5、退出 **\n"); printf(" **************************************************\n\n"); } void main()//主函数 { int num,year,month,day,weekday; char ch; while(1) { system("CLS"); //清屏 hy();//欢迎信息 tz:system("CLS");//goto语句跳转菜单标志 Time();//调用系统函数 menu();//菜单 printf(" 请输入对应操作:"); scanf("%d", &num); switch(num) { case 1: { system("CLS"); t1:printf("\n 请输入年份,确定按‘回车’(格式:):\n");//goto语句标志 scanf("%d", &year); if(year>=3000||year<=1600) { system("CLS"); printf(" 输入错误,系统及立即返回!"); Sleep(3000); goto tz; } if(isLeapYear(year)) printf(" %d年是闰年。\n",year); else printf(" %d年不是闰年。\n",year); printf("提醒:\n如继续运行请按\n如回首菜单请按\n如退出请按\n请选择:"); ch=getch(); if(ch=='1') goto t1;//goto语句返回t1 if(ch=='2') goto tz;//实施主函数 if(ch=='0') exit(0);//退出 break; } case 2: { system("CLS"); t2:printf("\n 请输入年月日,以空格隔开,确定按‘回车’(格式:6 10):\n"); scanf("%d%d%d", &year,&month,&day); if((year>=3000||year<=1600)||(month>=12||month<0)||(day>=31||day<=0)) { system("CLS"); printf(" 输入错误,系统及立即返回!"); Sleep(3000); goto tz; } weekday = whichWeekday(year, month, day); printf(" 这天是星期%d。\n\n",weekday); printf("提醒:\n如继续运行请按\n如回首菜单请按\n如退出请按\n请选择:"); ch=getch(); if(ch=='1') goto t2; if(ch=='2') goto tz; if(ch=='0') exit(0); break; } case 3: { system("CLS"); t3:printf("\n 请输入年份,确定按‘回车’(格式:):\n"); scanf("%d", &year); if(year>=3000||year<=1600) { system("CLS"); printf(" 输入错误,系统及立即返回!"); Sleep(3000); goto tz; } monthDay(year); printf("提醒:\n如继续运行请按\n如回首菜单请按\n如退出请按\n请选择:"); ch=getch(); if(ch=='1') goto t3; if(ch=='2') goto tz; if(ch=='0') exit(0); break; } case 4: { system("CLS"); t4:printf("\n 请输入年份(格式:):\n"); scanf("%d", &year); printf(" 请输入月份,确定按‘回车’(格式:):\n"); scanf("%d", &month); if((year>=3000||year<=1600)||(month>=12||month<0)) { system("CLS"); printf(" 输入错误,系统及立即返回!"); Sleep(3000); goto tz; } yearMonth(year,month); if(isLeapYear(year) && month == 2)//假如年份为闰年,则月加天 days[1] = days[1] + 1; printf("提醒:\n如继续运行请按\n如回首菜单请按\n如退出请按\n请选择:"); ch=getch(); if(ch=='1') goto t4; if(ch=='2') goto tz; if(ch=='0') exit(0); break; } case 5: { printf("\n 是否确定退出?\n"); printf(" 确定请按,取消请按"); ch=getch(); if(ch == '2') goto tz; else { printf(" "); exit(0);//退出 } break; } default: { system("CLS"); printf(" 您输入指令有误,请重新输入!!\n\n"); printf("提醒:\n如回首菜单请按\n如退出请按\n请选择:"); ch=getch(); if(ch=='1') goto tz; if(ch=='0') exit(0); break; } } } } 六、使用说明 运行程序,首优异入欢迎界面,等候3秒后,进入主菜单界面,可看到以下界面 ───────────────────── 系统时间日期:6月10日 16:55:14 星期二 ───────────────────── ----------------------------------------------- 万年历查询系统 ************************************************** ** 1、输入年份,判定是否为闰年 ** ** 2、输入年月日,判定该日为星期几 ** ** 3、输入年份,打出12个月历 ** ** 4、输入月份,打出该月日历 ** ** 5、退出 ** ************************************************** 请输入对应操作: 1、在“请输入对应操作:”后面输入功效序号,如需“输入年份,判定是否为闰年”,请输入“1”,其它功效雷同。 2、进入隶属界面后会出现以下界面: 请输入年份,确定按‘回车’(格式:): 3、可在“请输入年份,确定按‘回车’(格式:):”语句后输入年份””,会出现下面界面: 请输入年份,确定按‘回车’(格式:): 不是闰年。 提醒: 如继续运行请按1 如回首菜单请按2 如退出请按0 请选择: 4、可在“请选择:”后面填写序号,即可得到对应提醒功效。 5、 其它功效做法于上相同,就不一一赘述。 七、个人心得 (略) 八、参考文件 [1]谭浩强。C程序设计(第四版).北京:清华大学出版社, [2]杜 恒。C程序程序设计(理实一体化教程).北京:机械工业出版社, [3]部分资料起源网络,作者不详。在这里对她们表示由衷感谢- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 专业课程 设计方案 报告 万年历 详细
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文