c语言课程设计报告万年历.docx
- 文档编号:26979547
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:16
- 大小:18.29KB
c语言课程设计报告万年历.docx
《c语言课程设计报告万年历.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告万年历.docx(16页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告万年历
C
语
言
课
程
设
计
报
告
C语言课程设计报告
实验课程:
c语言课程设计年级:
软件2班实验成绩:
课程设计名称万年历姓名:
**
任课教师:
杨**学号:
****实验日期:
2014.6.11
一、目的
利用所学的知识解决生活中的实际问题。
本课题涉及的知识内容:
时间函数,tm结构,for,do..while循环嵌套,if语句,指针,函数回调,结构体函数,文件创建与保存,自定义函数等语言内容。
二、内容与设计思想
1.设计内容
①显示系统当前时间
②查询用户输入的时间
③在用户输入的时间上,进行下一步的查询
④对用户所需日期添加备忘,可供查看和添加
2.主要代码结构
main()函数调用了菜单函数,通过菜单函数来调用各个不同功能的函数。
3.主要代码段分析。
先显示系统时间,再通过列一个菜单来调用各个功能的函数;
Themonth函数实现了对用户输入日期当月的处理,例如:
日期的显示,日期与周几的对应等等。
Nextstep函数则是对输入日期的后续操作.Writetext、Readtext,、Changetext函数是对备忘录方面的操作,主要功能分别是写备忘,查看备忘,修改备忘。
三、使用环境
本次上机实践所使用的平台和相关软件。
平台:
Windows2000
相关软件:
VC++
四、调试过程
1.测试结果分析
经检验,运行结果正确
五、总结
1.设计中遇到的问题及解决过程
调试过程中往往一个月的第一天与相对应的星期几对上比较棘手,通过查阅资料,找到了相应的函数;解决了问题
备忘方面设计有关文件的读取方面的知识,在此之前,对文件的读取,修改比较,生疏模糊。
通过看书和上网寻找有关文件读取方面的例子,对文件有了初步的认识和应用。
期望备忘录功能中有修改功能,后期实在解决不了,换成了较为简单的添加功能。
2.设计体会和收获。
学会了如何通过现有资源解决问题;对c语言的有了更深的了解
六、附录
1.源代码
#include"stdio.h"
#include"time.h"
#include"malloc.h"
#include"stdlib.h"
#include"string.h"
typedefstructtext
{
intnum;
chardate[100];
}Text[30],*pText;
//函数声明
voidin_menu(void);
voidmenu(void);
voidthemonth(int,int);
voidnextstep(int,int);
voidWritetext(pText);
voidReadtext(void);
voidaddtext(pText);
voidexit_calendar(void);
intthelast(FILE*);
//总菜单
voidallmenu(void)
{
in_menu();//输出菜单
menu();//选择菜单
}
//输出菜单
voidin_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("请选择菜单号码:
");
}
//菜单选择
voidmenu(void)
{
structtextt;
inti;
scanf("%d",&i);
switch(i)
{
case1:
{
//当前查询的月份
intyear;
intmonth;
printf("请输入要查询的年份及月份:
\n");
scanf("%d%d",&year,&month);
themonth(year,month);
printf("按回车键返回主菜单!
\n");
getchar();
getchar();
system("cls");
allmenu();
break;
}
case2:
{
Writetext(&t);//写备忘
printf("按回车键返回主菜单!
\n");
getchar();
getchar();
system("cls");
allmenu();
break;
}
case3:
{
Readtext();//查看备忘内容
printf("按回车键返回主菜单!
\n");
getchar();
getchar();
system("cls");
allmenu();
break;
}
case4:
{
addtext(&t);//修改备忘
printf("按回车键返回主菜单!
\n");
getchar();
getchar();
system("cls");
allmenu();
break;
}
case5:
{
exit_calendar();
}
default:
break;
}
}
voidnextmenu(intyear,intmonth)
{
intj;
printf("===================1、结束本次查询,回菜=====================\n");
printf("===================2、继续查询============================\n");
scanf("%d",&j);
if(j==1)
{
allmenu();
}
else
{
nextstep(year,month);
}
}
/************************
查询的当月
*/
voidthemonth(intyear,intmonth)
{
//定义变量
structtmt,*date;//tm结构指针
time_tt_day;//声明time_t类型的变量t_day
inti,j;
intday;
if(month==2)//月份天数的判断
{
if(year%4==0&&year%100==0||year%400==0)
day=28;
else
day=29;
}
elseif(month==4||month==6||month==9||month==11)//小月
{
day=30;
}
else
day=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;//夏令时标识符,实行夏令的时候为正否则为0
t_day=mktime(&t);//
date=gmtime(&t_day);
if(i==1)
{
for(j=0;j
printf("\t");
}
if(date->tm_wday==6)
{
printf("%d\n",i);
}
else
printf("%d\t",i);
}
printf("\n\n");
nextmenu(year,month);
}
boolsfnext(int*k)//判断是否继续
{
if((*k)==1)
returntrue;
else
returnfalse;
}
//是否进行后续操作
voidnextstep(intyear,intmonth)
{
intm,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);
}
elseif(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));
}
//读文件
voidWritetext(pTextt)
{
intlen;
charn;
//读取文件
FILE*fp;
if((fp=fopen("C:
\\text.txt","a+"))==NULL)//a+:
以读写方式打开一个文件,允许读
{
printf("Cannotopenthefile,pressanykeytoexit");
getchar();
exit(0);//退出程序
}
printf("是否确定对某年某月某日进行备忘:
y或n\n");
getchar();
scanf("%c",&n);
if(n=='y'||n=='Y')
{
printf("请输入要添加备忘的数量:
\n");
scanf("%d",&len);
printf("按格式输入(如:
12014617c语言作业)\n");//输入需要备忘的年月日
for(inti=0;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); } } //判断文件是否读完 intthelast(FILE*fp) { if(fgetc(fp)==EOF) return1; else { fseek(fp,-1L,SEEK_CUR); return0; } } //查看备忘内容 voidReadtext(void) { staticcharc[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"); } } voidaddtext(pTextt) { FILE*fp; intn,m; if((fp=fopen("C: \\text.txt","a+"))==NULL)//a+: 以读写方式打开一个文件,允许读 { printf("Cannotopenthefile,pressanykeytoexit"); getchar(); exit(0);//退出程序 } printf("请输入要继续添加备忘的数量: \n"); scanf("%d",&n); printf("已备忘数量: "); scanf("%d",&m); printf("按格式输入(如: 12014617c语言作业)\n");//输入需要备忘的年月日 for(inti=0;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); } voidexit_calendar(void)//退出系统 { exit (1); } //主函数 voidmain() { time_tnow;//声明time_t类型变量 time(&now);//获取时间 printf("\n\t\t现在是: %s\n",ctime(&now));//系统时间 allmenu(); //nextstep(year,month,&t);//对当前月份的后续操作 }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 万年历