万年历+备忘录(C语言课程设计)

合集下载

c语言课程设计万年历

c语言课程设计万年历

c语言课程设计万年历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念,并能运用这些知识实现万年历的基本功能;2. 学会使用循环、判断等控制结构,实现对日期的有效处理;3. 了解并掌握C语言中模块化编程的方法,将万年历功能划分为独立的功能模块。

技能目标:1. 能够独立编写C语言程序,实现万年历的日期显示、查询、切换等功能;2. 学会使用调试工具,对程序进行调试和优化,提高程序的稳定性;3. 学会在团队协作中发挥个人优势,与他人共同完成程序设计。

情感态度价值观目标:1. 培养学生积极思考、勇于探索的精神,增强学生对编程的兴趣和热情;2. 培养学生良好的编程习惯,遵循编程规范,注重代码的可读性和可维护性;3. 培养学生的团队协作意识,学会与他人沟通、分享、互助,共同进步。

课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基本知识的基础上,运用所学知识完成万年历的设计与实现。

学生特点:学生具备一定的C语言基础,对编程有一定了解,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,引导学生主动参与,培养学生的编程能力和团队协作能力。

通过课程学习,使学生能够独立完成万年历的设计与实现,提高学生的编程水平和实际操作能力。

二、教学内容1. C语言基本语法复习:回顾结构体、数组、函数等基本概念,确保学生能够熟练运用;相关教材章节:第一章至第四章。

2. 控制结构:讲解循环、判断等控制结构在万年历中的应用;相关教材章节:第五章。

3. 模块化编程:引导学生将万年历功能划分为独立的功能模块,讲解模块之间的调用关系;相关教材章节:第六章。

4. 程序调试与优化:介绍调试工具的使用,教授学生如何找出并解决程序中的错误;相关教材章节:第七章。

5. 项目实践:指导学生按照教学大纲,分阶段完成万年历的设计与实现;相关教材章节:全书综合应用。

教学进度安排:1. 第一周:C语言基本语法复习;2. 第二周:控制结构;3. 第三周:模块化编程;4. 第四周:项目实践(第一阶段:功能设计);5. 第五周:项目实践(第二阶段:功能实现);6. 第六周:项目实践(第三阶段:调试与优化)。

c语言课程设计报告--万年历

c语言课程设计报告--万年历

c语言课程设计报告--万年历C 语言课程设计报告C语言课程设计报告实验课程:c语言课程设计年级:软件2班实验成绩:课程设计名称万年历姓名:**任课教师:杨** 学号:**** 实验日期:2014.6.11一、目的利用所学的知识解决生活中的实际问题。

本课题涉及的知识内容:时间函数,tm结构,for,do..while循环嵌套,if语句,指针,函数回调,结构体函数,文件创建与保存,自定义函数等语言内容。

二、内容与设计思想1.设计内容①显示系统当前时间②查询用户输入的时间③在用户输入的时间上,进行下一步的查询④对用户所需日期添加备忘,可供查看和添加2.主要代码结构main()函数调用了菜单函数,通过菜单函数来调用各个不同功能的函数。

3.主要代码段分析。

先显示系统时间,再通过列一个菜单来调用各个功能的函数;Themonth函数实现了对用户输入日期当月的处理,例如:日期的显示,日期与周几的对应等等。

Nextstep函数则是对输入日期的后续操作. Writetext、Readtext,、Changetext函数是对备忘录方面的操作,主要功能分别是写备忘,查看备忘,修改备忘。

三、使用环境本次上机实践所使用的平台和相关软件。

平台:Windows 2000相关软件:VC++四、调试过程1.测试结果分析经检验,运行结果正确五、总结1.设计中遇到的问题及解决过程调试过程中往往一个月的第一天与相对应的星期几对上比较棘手,通过查阅资料,找到了相应的函数;解决了问题备忘方面设计有关文件的读取方面的知识,在此之前,对文件的读取,修改比较,生疏模糊。

通过看书和上网寻找有关文件读取方面的例子,对文件有了初步的认识和应用。

期望备忘录功能中有修改功能,后期实在解决不了,换成了较为简单的添加功能。

2.设计体会和收获。

学会了如何通过现有资源解决问题;对c语言的有了更深的了解六、附录1.源代码#include "stdio.h"#include "time.h"#include "malloc.h"#include "stdlib.h"#include "string.h"typedef struct text{int num;char date[100];}Text[30],*pText;//函数声明void in_menu(void);void menu(void);void themonth(int,int);void nextstep(int,int);void Writetext(pText);void Readtext(void);void addtext(pText);void exit_calendar(void);int thelast(FILE*);//总菜单void allmenu(void){in_menu();//输出菜单menu();//选择菜单}//输出菜单void in_menu(void){printf(" △○日历查询及备忘系统○△\n");printf("\n");printf(" ===================1、日历==============================\n\n");printf(" ===================2、编辑备忘=========================\n\n");printf(" ===================3、查看备忘===========================\n\n");printf(" ===================4、添加备忘===========================\n\n");printf("====================5、退出==============================\n\n");printf("******************************************************* *********\n\n");printf("请选择菜单号码:");}//菜单选择void menu(void){struct text t;int i;scanf("%d",&i);switch(i){case 1:{//当前查询的月份int year;int month;printf("请输入要查询的年份及月份:\n"); scanf("%d %d",&year,&month); themonth(year,month);printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 2:{Writetext(&t);//写备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 3:{Readtext();//查看备忘内容printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 4:{addtext(&t);//修改备忘printf("按回车键返回主菜单!\n"); getchar();getchar();system("cls");allmenu();break;}case 5:{exit_calendar();}default: break;}void nextmenu(int year,int month){int j;printf("===================1、结束本次查询,回菜=====================\n");printf(" ===================2、继续查询============================\n");scanf("%d",&j);if(j == 1){allmenu();}else{nextstep(year, month);}}/************************查询的当月*/void themonth(int year,int month){//定义变量struct tm t,*date;//tm结构指针time_t t_day;//声明time_t类型的变量t_dayint i,j;int day;if(month == 2 )//月份天数的判断if(year%4 == 0&&year%100 == 0||year%400 == 0)day = 28;elseday = 29;}else if(month == 4 || month == 6 || month == 9 || month == 11)//小月{day=30;}elseday=31;printf("查询日期当月天数是:%d\n日历\n",day); //输出当前天数printf("一\t二\t三\t四\t五\t六\t日\t\n"); //日历的第一行,显示一二三四五六日//功能:使当月中的每一天与对应的周几对齐for(i = 1;i <= day;i++){t.tm_year=year-1900;//从1900开始t.tm_mon=month-1;//月份【取值[0-11]】t.tm_mday=i;//一个月的日期[1-31]t.tm_hour=0;//时-取值区间t.tm_min=0;//分-取值区间t.tm_sec=0;//秒-取值区间t.tm_isdst=0;//夏令时标识符,实行夏令的时候为正否则为0t_day=mktime(&t);//date=gmtime(&t_day);if(i==1)for(j=0;jtm_wday;j++)printf("\t");}if(date->tm_wday == 6){printf("%d\n",i);}elseprintf("%d\t",i);}printf("\n\n");nextmenu(year,month);}bool sfnext(int * k)//判断是否继续{if((*k) == 1)return true;elsereturn false;}//是否进行后续操作void nextstep(int year,int month) {int m,k;do{printf("月历上翻请按-1,下翻请按1\n"); scanf("%d", &m);system("cls");if(m == 1){month += 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month/12 != 0){year = year + month/12;month = month % 12;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else if(m == -1){month -= 1;printf("现在查询时间为%d年%d月的日历:\n",year,month); if(month == 0){month = 12;year--;}if(month <= 0){month += 12;year--;}themonth(year,month);printf("是否继续查询,是:请按1\n");printf("否:请按0\n");scanf("%d",&k);}else{printf("error");}}while(sfnext(&k));}//读文件void Writetext(pText t){int len;char n;//读取文件FILE *fp;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("是否确定对某年某月某日进行备忘:y或n\n");getchar();scanf("%c",&n);if(n == 'y'||n == 'Y'){printf("请输入要添加备忘的数量:\n");scanf("%d",&len);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < len; i++){printf("Num%d:",i+1);scanf("%d %s",&t[i].num ,&t[i].date);fprintf(fp,"%d %s\n",t[i].num ,t[i].date);//格式化读写}fclose(fp);}else{exit(-1);}}//判断文件是否读完int thelast(FILE*fp){if(fgetc(fp) == EOF)return 1;else{fseek(fp,-1L,SEEK_CUR);return 0;}}//查看备忘内容void Readtext(void){static char c[200];//文件输入FILE*fp;if((fp = fopen("c:\\text.txt","r")) == NULL){printf("文件不存在,按任意键退出.");exit(0);}else{printf("序号\n备忘内容\n");while(!thelast(fp)){fscanf(fp,"%s",c);//读取文件中的信息printf("%s\n",c);}printf("\n");}}void addtext(pText t){FILE *fp;int n,m;if((fp = fopen("C:\\text.txt","a+"))==NULL)//a+:以读写方式打开一个文件,允许读{printf("Cannot open the file ,press any key to exit");getchar();exit(0); //退出程序}printf("请输入要继续添加备忘的数量:\n");scanf("%d",&n);printf("已备忘数量:");scanf("%d",&m);printf("按格式输入(如:1 2014 6 17 c语言作业)\n");//输入需要备忘的年月日for(int i = 0;i < n; i++){printf("Addnum%d:",i+m+1);scanf("%d %s",&t[i+m].num ,&t[i+m].date);fprintf(fp,"%d %s\n",t[i+m].num ,t[i+m].date);//格式化读写}fclose(fp);}void exit_calendar(void)//退出系统{exit(1);}//主函数void main(){time_t now;//声明time_t类型变量time(&now);//获取时间printf("\n\t\t现在是:%s\n",ctime(&now));//系统时间allmenu();// nextstep(year, month,&t);//对当前月份的后续操作}。

c语言备忘录课程设计

c语言备忘录课程设计

c语言备忘录课程设计一、课程目标知识目标:1. 学生能理解C语言中备忘录(函数、指针、数组)的基本概念及其在程序中的作用;2. 学生能掌握C语言中常用的数据结构和算法,并运用到备忘录的编写中;3. 学生能了解C语言的模块化编程思想,理解函数调用的原理及其在备忘录中的应用。

技能目标:1. 学生能运用C语言编写简单的备忘录程序,实现数据的存储、读取和修改;2. 学生能通过分析实际问题,运用所学知识设计并实现具有实际意义的备忘录功能;3. 学生能通过调试和优化程序,提高备忘录的运行效率,培养解决问题的能力。

情感态度价值观目标:1. 学生在学习和实践过程中,培养对编程的兴趣和热情,树立编程解决问题的信心;2. 学生在小组合作中,培养团队协作精神,提高沟通与表达能力;3. 学生通过解决实际问题,认识到编程在生活中的应用价值,增强学以致用的意识。

课程性质分析:本课程为C语言编程的进阶课程,以备忘录为主题,旨在帮助学生巩固C语言基础知识,提高编程实践能力。

学生特点分析:学生已具备C语言基础知识和简单的编程能力,具有一定的逻辑思维能力,但可能对复杂概念和实际应用场景的应对能力有限。

教学要求:1. 结合实际案例,引导学生掌握备忘录编程的核心知识;2. 注重实践操作,鼓励学生动手编写程序,培养解决问题的能力;3. 强调团队协作,提高学生的沟通与表达能力。

二、教学内容1. 备忘录概念与作用:介绍备忘录的定义、作用及其在实际编程中的应用场景,结合教材相关章节,让学生理解备忘录在程序设计中的重要性。

2. 基本数据结构:回顾数组、指针等基本数据结构,结合备忘录的需求,讲解如何选择合适的数据结构进行数据存储。

- 数组的使用与优化- 指针的概念与操作3. 函数与模块化编程:讲解函数的定义、调用、参数传递等概念,引导学生利用函数实现模块化编程,提高代码的可读性和可维护性。

- 函数的定义与调用- 参数传递与返回值- 递归函数的原理与应用4. 备忘录编程实践:通过实际案例,教授如何编写备忘录程序,实现数据的存储、读取和修改。

c万年历课程设计

c万年历课程设计

c 万年历课程设计一、课程目标知识目标:1. 让学生掌握年、月、日的概念及其关系,理解平年和闰年的区别;2. 使学生掌握如何使用万年历查找任意日期的星期,并了解其原理;3. 让学生了解不同历法的起源和发展,提高历史文化的认识。

技能目标:1. 培养学生运用数学知识解决实际问题的能力,如计算日期与星期之间的关系;2. 培养学生动手制作简单万年历的能力,提高动手操作和创新能力;3. 提高学生运用万年历进行时间管理和规划的能力。

情感态度价值观目标:1. 培养学生珍惜时间、合理安排生活的态度,树立时间观念;2. 激发学生对数学学科的兴趣,增强学习数学的自信心;3. 培养学生团队协作意识,学会与同学分享和交流学习心得。

本课程针对小学四年级学生设计,结合学生年龄特点和认知水平,注重知识性与趣味性的结合。

课程内容与教材紧密联系,旨在通过万年历的制作和使用,让学生在实际操作中掌握数学知识,提高解决问题的能力。

同时,注重培养学生良好的时间观念和情感态度,使学生在轻松愉快的氛围中学习,达到预期的学习成果。

二、教学内容1. 年、月、日的基本概念及其关系:包括一年有多少个月,一个月有多少天,平年和闰年的区别及其判断方法。

相关教材章节:第三章《年、月、日》。

2. 万年历的制作原理与使用方法:介绍星期与日期的关系,引导学生学会使用万年历查找任意日期的星期。

相关教材章节:第三章《认识星期》。

3. 不同历法的起源和发展:简述公历、农历等历法的历史背景,提高学生对历史文化的了解。

相关教材章节:第四章《历法的故事》。

4. 实践活动:分组让学生动手制作简易万年历,巩固所学知识,提高动手操作能力。

相关教材章节:第三章实践活动《制作自己的万年历》。

教学内容安排和进度:第一课时:介绍年、月、日的基本概念及其关系,判断平年和闰年的方法。

第二课时:讲解万年历的制作原理与使用方法,学会查找任意日期的星期。

第三课时:简述不同历法的起源和发展,提高历史文化认识。

C语言课程设计--万年历

C语言课程设计--万年历

C 语言课程设计报告设计题目:万年历学生姓名:学生学号:专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师:2011年6月15 日1 需求分析1.1问题描述我们需要实现万年历的功能,那么如何实现这个功能呢?我们都很清楚,普通年份和闰年是有区别的,那么该怎么区分这种一天的差别对于万年历日期现实的影响呢?而且已知一个日期,那么我们怎么能够知道它是星期几?是不是需要一个参照物来比较呢?而且还有很多关于万年历的美化问题,占位符的考虑等等。

另外我们还必须判断输入的万年历是否合法,这也需要一个子函数来实现。

好吧,至于基础的判断闰年也是不在话下了。

1.2输入数据要求我们要考虑三种情况,这三种情况下是不能够实现这个万年历的功能的:/*如果给定的日期中年份部分为非正数*/if(date.year<=0)printf("年份不符合要求!\n"printf("请重新输入)/*如果给定的日期中月份部分为负数,为0或者大于12*/if(date.month>12||date.month<1)printf("月份不符合要求!\n");printf("请重新输入");getchar();exit(0);/*如果给定的日期中天数部分为非正数,或者大于31*/a[2]=28+leap(date.year);if(date.day>a[date.month]||date.day<1)printf("日期不符合要求!\n");printf("请重新输入");getchar();exit(0);1.3输出数据要求根据输入数据,输出数据必须严格的按照占位符进行逻辑的策划,然后得知一行万年历的日期的占位符是38个占位符,于是空格占位符和字符显示出来的那些占位符就需要有一个限定使得其不凌乱特别应该注意空格符的占位。

C语言课程设计 万年历

C语言课程设计 万年历

计算机基础课程设计C语言设计报告题目:万年历学院:电气与电子工程学院专业:自动化班级:070304姓名:于洋指导教师:周丽娟设计日期:一、设计题目及来源万年历,来自网上搜索。

二、功能isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal ()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示月历;check()检查有效性;display1()输出年历;display2()输出月历;display3()输出日历;getMenu()调菜单;三、流程图#include<stdio.h>#include<stdlib.h>int isLeap(int year);int maxDay(int year,int month);int eachYearTotal(int year,int month,int day); int week(int year,int month,int day);char *chineseWeek(int number);void output(int year,int month,int day);void display(int year,int month);int check(int year,int month,int day);void display1(int year);void display2(int year,int month);void display3(int year,int month,int day); void getMenu();void main(){int year,month,day,flag,select;while(1){getMenu();printf("shu ru xuan ze: ");fflush(stdin);scanf("%d",&select);fflush(stdin);switch(select){case 1:do{printf("shu ru nian: ");scanf("%d",&year);flag=check(year,1,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display1(year);break;case 2:do{printf("shu ru nian yue: ");scanf("%d%d",&year,&month);flag=check(year,month,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display2(year,month);break;case 3:do{printf("shu ru nian yue ri: ");scanf("%d%d%d",&year,&month,&day);flag=check(year,month,day);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display3(year,month,day);break;case 4:exit(0);default:printf("shu ru you wu!\n\n");}}}int isLeap(int year){if(year%4==0&&year%100!=0||year%400==0) return 1;elsereturn 0;}int maxDay(int year,int month){int a[]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap(year))a[1]=29;return a[month-1];}int eachYearTotal(int year,int month,int day){int i,sum=0;for(i=1;i<month;i++){sum+=maxDay(year,i);}sum+=day;return sum;}int week(int year,int month,int day){intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,d ay);number%=7;return number;}char *chineseWeek(int number){switch(number){case 0:return "Sunday";case 1:return "Monday";case 2:return "Tuesday";case 3:return "Wednesday";case 4:return "Thursday";case 5:return "Friday";case 6:return "Saturday";default:return "error";}}void output(int year,int month,int day){int number=week(year,month,day);printf(" gong yuan%d nian%d ue%d ri%10s\n\n",year,month,day,chineseWeek(number)); }void display(int year,int month){int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n"," Sunday "," Monday "," Tuesday "," Wednesday "," Thursday "," Friday "," Saturday ");for(i=0;i<number;i++){printf(" ");}while(j<=max){printf("%4d",j);if(i%7==6){printf("\n");}i++;j++;}printf("\n\n");}int check(int year,int month,int day){if(year<0||month<1||month>12||day<1||day>maxDay(year,month))return 0;elsereturn 1;}void display1(int year){int i;printf("\n");for(i=1;i<=12;i++){printf(" gongyuan%d nian%d yue\n\n",year,i); display(year,i);}}void display2(int year,int month){printf("\n gongyuan%d nian%d yue\n\n",year,month); display(year,month);}void display3(int year,int month,int day){printf("\n");output(year,month,day);display(year,month);}void getMenu(){printf("1.nianli\t2.yueli\t3.rili\t4.tuiqu\n");}。

C语言课程设计万年历 完整版

C语言课程设计万年历  完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

c万年历课程设计

c万年历课程设计

c 万年历课程设计一、课程目标知识目标:1. 学生能够理解年、月、日的关系,掌握平年、闰年的判断方法。

2. 学生能够运用所学的日期知识,制作一个简易的万年历。

3. 学生了解我国农历与公历的异同,认识到不同文化背景下的时间观念。

技能目标:1. 学生通过观察、分析、实践,提高解决问题的能力。

2. 学生学会运用万年历查找特定日期,为生活实际提供便利。

3. 学生能够运用所学知识,创新设计具有个性化的万年历。

情感态度价值观目标:1. 学生培养对时间管理的重视,养成珍惜时间、合理安排时间的好习惯。

2. 学生通过学习我国农历文化,增强民族自豪感,树立文化自信。

3. 学生在合作交流中,培养团队协作精神,学会尊重他人意见,取长补短。

本课程针对小学四年级学生设计,结合学生好奇心强、动手能力逐渐提高的特点,注重培养学生的学习兴趣和实际操作能力。

课程性质为实践性、探究性,旨在让学生在动手实践的过程中,掌握日期知识,提高解决实际问题的能力。

教学要求以学生为主体,教师为主导,注重启发式教学,激发学生的学习兴趣和思考能力,使学生在轻松愉快的氛围中学习,达到课程目标。

通过本课程的学习,学生能够具备制作和运用万年历的基本能力,同时培养良好的时间观念和团队协作精神。

二、教学内容1. 年、月、日的认识与关系- 公历与农历的基本概念- 年、月、日的定义及其相互关系- 平年与闰年的判断方法2. 万年历的制作方法- 万年历的基本结构- 制作万年历的步骤与技巧- 创新设计个性化万年历3. 日期查找与应用- 运用万年历查找特定日期- 日期在实际生活中的应用- 时间管理的方法与技巧教材章节关联:- 《数学》四年级上册第四章“年、月、日”- 《综合实践活动》四年级上册“我们的时间”教学进度安排:1. 第一节课:年、月、日的认识与关系,平年、闰年的判断方法2. 第二节课:万年历的基本结构,制作万年历的步骤与技巧3. 第三节课:个性化万年历的设计与创新,日期查找与应用4. 第四节课:总结与拓展,时间管理的方法与技巧教学内容确保科学性和系统性,以教材为依据,结合实际生活,让学生在掌握日期知识的基础上,学会制作和运用万年历,提高时间管理能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*湖南大学数学与应用数学胡凡C语言课程设计万年历+备忘录命令提示行完成于2011年完整版*//*-------------------------------我是分割线-------------------------------*/ /*命令行功能选项*//*-d:显示当月日历和当日备忘*//*-i:显示当月日历和添加当日备忘*//*-m:显示当月日历和修改当日备忘*//*-g:删除当日备忘*//*-t:删除全部备忘*//*-------------------------------我是分割线-------------------------------*/ /*头文件*/#include<stdio.h>#include<stdlib.h>#include<unistd.h> /*调用getopt函数*//*定义全局变量(各月所含天数)*/int a[]={0,31,0,31,30,31,30,31,31,30,31,30,31};/*定义结构体*/struct date_message{int year; /*年*/int month; /*月*/int day; /*日*/char memo[300]; /*备忘*/}date={1,1,1,"\0"};/*-------------------------------我是分割线-------------------------------*/ /*主函数*/int main(int argc,char *argv[]){/*函数声明*/void checkDate(); /*检查日期合法性*/ void show_calender(); /*显示日历*/void memo_written(); /*写入备忘*/void memo_modify(); /*修改备忘*/void memo_delete(); /*删除当日备忘*/void memo_delete_all(); /*删除全部备忘*/void memo_read(); /*读取备忘*//*定义变量*/int choice;/*使用getopt函数分析命令行参数,识别选项*/while((choice=getopt(argc,argv,"d:i:m:g:t"))!=-1){ /*选项*/switch(choice){ /*选项为d时,显示当月日历和当日备忘*/case 'd':/*调用atoi函数,将字符型数字转化为整型*/date.year=atoi(argv[2]);date.month=atoi(argv[3]);/*如果没有输入日期则不赋值*/if(atoi(argv[4])!=0)date.day=atoi(argv[4]);/*检查日期合法性*/checkDate();/*显示当日日历*/show_calender();/*显示备忘*/memo_read();break;/*选项为i时,显示当月日历和添加当日备忘*/case 'i':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();show_calender();memo_read();printf("请输入该日备忘\n");/*写入备忘*/memo_written();/*添加之后*/printf("添加之后的日历为\n");show_calender();memo_read();break;/*选项为m时,显示当月日历和修改当日备忘*/case 'm':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();show_calender();memo_read();printf("请输入该日修改后的备忘\n");/*修改备忘*/memo_modify();/*修改之后*/printf("修改之后的日历为\n");show_calender();memo_read();break;/*选项为g时,删除当日备忘*/case 'g':date.year=atoi(argv[2]);date.month=atoi(argv[3]);if(atoi(argv[4])!=0)date.day=atoi(argv[4]);checkDate();/*确认信息*/printf("确认要删除当日备忘吗(y/n)?");/*如果输入y的话删除*/if(getchar()=='y'||'Y')memo_delete();break;/*选项为t时,删除全部备忘*/case 't':/*确认信息*/printf("确认要删除全部备忘吗(y/n)?");/*如果输入y的话删除全部*/if(getchar()=='y'||'Y')memo_delete_all();getchar();break;}}printf("\t\t Please any key to continue…………");getchar();system("cls");return 0;}/*-------------------------------我是分割线-------------------------------*//*显示当月日历*/void show_calender(){/*函数调用声明*/int leap(int t_year);/*定义函数*/int sum=0,count=0,i,t,temp_year,temp_month,temp_day=-1;/*输出年月日*/printf("\n\t\t\t\t%d年%d月",date.year,date.month);if(date.day!=0)printf("%d日\n",date.day);else printf("1日\n");/*计算某月第一天是星期几,以2011年1月1日星期六为基点,计算某月第一天距离基点的天数除以7取余*//*当某年不低于2011年*/if(date.year>=2011){/*加上整年的天数*/for(temp_year=2011;temp_year<date.year;temp_year++)sum+=365+leap(temp_year);a[2]=(leap(date.year)==1)?29:28;/*加上整月的天数*/for(temp_month=1;temp_month<date.month;temp_month++)sum+=a[temp_month];/*计算某月第一天是星期几*/t=(sum%7>0)?sum%7:(sum%7+7);}/*当某年低于2011年*/if(date.year<2011){/*加上整年的天数*/for(temp_year=2011;temp_year>date.year+1;temp_year--)sum+=365+leap(temp_year-1);a[2]=(leap(date.year-1)==1)?29:28;/*加上整月的天数*/for(temp_month=12;temp_month>=date.month;temp_month--)sum+=a[temp_month];/*计算某月第一天是星期几*/t=(sum%7>=0)?(7-sum%7):(-sum%7);}/*输出当月日历*/printf("\n\t\t Sun Mon Tue Wed Thu Fri Sat\n\t\t ");/*输出一定数量的空格*/for(i=1;i<=5*t-2;i++){printf(" ");/*计数一行中已输出多少个位数*/count++;}/*逐行输出日历中的日期部分*/for(temp_day=1;temp_day<=a[date.month];temp_day++){/*如果有输入日期则特别标出*/if(temp_day==date.day){if(date.day<10)printf("\b[%d] ",date.day);else printf("\b[%d] ",date.day);}/*普通日期无特别表示*/else printf("%-5d",temp_day);/*计数增加*/count+=5;/*当一行已输出38个位数的时候换行(除每行开头的一堆空格外)*/if(count==38){printf("\n ");count=3;}}printf("\n");}/*-------------------------------我是分割线-------------------------------*//*备忘读取*/void memo_read(){/*定义文件指针*/FILE *fp;/*定义变量*/int i=0;struct date_message temp={0,0,0,"\0"};/*打开文件*/if((fp=fopen("calender","ab+"))==NULL){printf("\t\t\t\t\n");return;}/*查找文件中是否有相同的日期*/do{if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break;}while((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day));/*如果没有相同日期的话*/if((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day)) printf("\t\t\t\t该日暂无备忘\n\n");/*如果有相同日期的话*/else if(date.memo=="\0")printf("\n\t\t\t\t该日暂无备忘\n\n");/*有备忘则输出备忘*/else{for(i=0;i<300;i++)date.memo[i]=temp.memo[i];printf("\n\t\t\t备忘:%s\n\n",date.memo);}fclose(fp);}/*-------------------------------我是分割线-------------------------------*/ /*备忘写入*/void memo_written(){/*定义文件指针*/FILE *fp;/*打开文件*/if((fp=fopen("calender","ab+"))==NULL){printf("\n\t\t\t\t 打开文件失败\n\n\t\t\t ");return;}/*输入备忘*/scanf("%s",date.memo);/*写入备忘*/if(fwrite(&date,sizeof(struct date_message),1,fp)==1){system("cls");printf("\n\t\t\t\t 备忘存入成功\n\n\t\t\t ");}else{system("cls");printf("\n\t\t\t\t 备忘存入失败\n\n\t\t\t ");}getchar();fclose(fp);}/*-------------------------------我是分割线-------------------------------*/ /*备忘修改*/void memo_modify(){/*定义文件指针*/FILE *fp;/*定义变量*/int i=0;struct date_message temp;/*打开文件*/if((fp=fopen("calender","rb+"))==NULL){printf("\n\n\n\n\n\n\n\n\n\t\t\t 打开文件失败\n\n");return;}/*输入备忘*/scanf("%s",&date.memo);/*在文件中寻找该日期*/do{fseek(fp,i*sizeof(struct date_message),0);if(fread(&temp,sizeof(struct date_message),1,fp)!=1)break;i++;}while((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day));/*如果没有的话添加备忘*/if((temp.year!=date.year)||(temp.month!=date.month)||(temp.day!=date.day)) fwrite(&date,sizeof(struct date_message),1,fp);/*有的话修改*/else{fseek(fp,(i-1)*sizeof(struct date_message),0);fwrite(&date,sizeof(struct date_message),1,fp);}printf("\n\t\t\t\t 修改成功!\n\n");getchar();system("cls");fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*当日备忘删除*/void memo_delete(){/*定义文件指针*/FILE *fp;/*定义变量*/struct date_message temp1={0,0,0,"\0"};struct date_message temp2;/*打开文件*/if((fp=fopen("calender","rb+"))==NULL){printf("打开文件失败\n\n");return;}/*在文件中查找是否有输入的年月日的信息*/do{fseek(fp,i*sizeof(struct date_message),0);if((fread(&temp2,sizeof(struct date_message),1,fp))!=1)break;i++;}while((temp2.year!=date.year)||(temp2.month!=date.month)||(temp2.day!=date.day));/*没有的话返回*/if((temp2.year!=date.year)||(temp2.month!=date.month)||(temp2.day!=date.day)){fclose(fp);printf("该日无备忘!\n\n");getchar();return;}else/*有的话覆盖*/{fseek(fp,(i-1)*sizeof(struct date_message),0);fwrite(&temp1,sizeof(struct date_message),1,fp);i++;printf("删除成功!\n\n");}getchar();fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*全部备忘删除*/void memo_delete_all(){/*定义文件指针*/FILE *fp;/*定义变量*/struct date_message temp1={0,0,0,"\0"};struct date_message temp2;/*打开文件*/if((fp=fopen("calender","wb+"))==NULL){printf("打开文件失败\n\n");return;}/*将位置指针依次后移,将所有的内容覆盖*/do{fseek(fp,i*sizeof(struct date_message),0);if(fread(&temp2,sizeof(struct date_message),1,fp)!=1)break;fseek(fp,i*sizeof(struct date_message),0);fwrite(&temp1,sizeof(struct date_message),1,fp);i++;}while(1);printf("全部删除成功!\n\n");fclose(fp);}/*-------------------------------我是分割线-------------------------------*//*判断输入的日期是否合法*/void checkDate(){/*函数声明*/int leap(int t_year);/*如果给定的日期中年份部分为非正数*/if(date.year<=0){printf("年份不符合要求!\n");printf("请重新输入。

相关文档
最新文档