C语言课设作业不会做,求救!!
11、年历显示输入一个年份,屏幕上显示该年的日历情况,具体显示格式可以灵活设置,以美观、实用为基本要求。输入的年份限制在1940-2040年之间。
功能要求:
(1)输入年月,屏幕上显示该月的日历;
(2)输入年月日,屏幕显示距今天还有多少天,星期几,是否是公历节日等;
(3)查询某年某月某日的农历日期;
(4)将查询情况以日志的形式保存到相应磁盘文件中,并随时可查。
第四项不知该新建一个怎样的新函数来实现。
感谢大佬们!!! “不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的,还是给你提供思路
你不要告诉我,你是一个字母也动不了手的
本帖最后由 上官洛栖 于 2020-3-13 15:39 编辑
人造人 发表于 2020-3-13 15:11
“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的, ...
#pragma warning(disable : 4996)
#include <stdio.h>
#include <time.h>
int total(int yeara)//计算公元一年一月一日到输入年份之前的总天数
{
int i, s = 0, a;
for (i = 1; i <= yeara - 1; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
a = 366;
else
a = 365;
s = s + a;
}
return s;
}
int where(int yearb, int monb) //判断每月天数
{
int tian;
switch (monb)
{
case 1: tian = 31; break;
case 2:
if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
tian = 29;
else
tian = 28;
break;
case 3: tian = 31; break;
case 4: tian = 30; break;
case 5: tian = 31; break;
case 6: tian = 30; break;
case 7: tian = 31; break;
case 8: tian = 31; break;
case 9: tian = 30; break;
case 10: tian = 31; break;
case 11: tian = 30; break;
case 12: tian = 31; break;
default:
printf("输入日期不存在");
main();
}
return tian;
}
void when(int day) //判断输入日期是星期几
{
switch (day)
{
case 1: printf("该日为星期一\n"); break;
case 2: printf("该日为星期二\n"); break;
case 3: printf("该日为星期三\n"); break;
case 4: printf("该日为星期四\n"); break;
case 5: printf("该日为星期五\n"); break;
case 6: printf("该日为星期六\n"); break;
case 7: printf("该日为星期日\n"); break;
}
}
void why(int month, int day)//公历节日判断
{
if (month == 1)
if (day == 1)
printf("该日是元旦\n");
else
printf("该日不是公历节日!\n");
if (month == 3)
{
switch (day)
{
case 8: printf("该日是国际妇女节\n"); break;
case 12: printf("该日是植树节\n"); break;
default: printf("该日不是公历节日!\n"); break;
}
}
if (month == 4)
if (day == 5)
printf("该日是清明节\n");
else
printf("该日不是公历节日!\n");
if (month == 5)
{
switch (day)
{
case 1: printf("该日是劳动节\n"); break;
case 4: printf("该日是五四青年节\n"); break;
default: printf("该日不是公历节日!\n"); break;
}
}
if (month == 6)
if (day == 1)
printf("该日是儿童节\n");
else
printf("该日不是公历节日!\n");
if (month == 7)
if (day == 1)
printf("该日是中国建党节\n");
else
printf("该日不是公历节日!\n");
if (month == 8)
if (day == 1)
printf("该日是建军节\n");
else
printf("该日不是公历节日!\n");
if (month == 9)
{
switch (day)
{
case 3: printf("该日是抗日战争胜利纪念日\n"); break;
case 10: printf("该日是教师节\n"); break;
default: printf("该日不是公历节日!\n"); break;
}
}
if (month == 10)
if (day == 1)
printf("该日是国庆节\n");
else
printf("该日不是公历节日!\n");
}
void output_year() //年份输出
{
int year, d, di, did, z, j;
printf("请输入年份(eg:2015):");
scanf_s("%d", &year);
z = total(year);
if (year > 2040 || year < 1940)
{
printf("查询范围为1940年到2040年");
main();
}
else
{
for (j = 1; j <= 12; j++)
{
d = z % 7;
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" %d月份\n", j);
printf("sun mon tue wed thu fri sat\n");
if (d < 6)
for (di = 1; di <= d + 1; di++)
printf(" ");
for (did = 1; did <= where(year, j); did++)
{
printf("%d", did);
if (did < 10)
printf(" ");
else
printf("");
if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
printf("\n");
}
z = z + where(year, j);
}
main();
}
}
voidoutput_month() //年月输出
{
int year, m, n, d, di, did, j, Z, D;
printf("请输入所查日历的年月(eg:2015 01):");
scanf_s("%d%d", &m, &n);
if (m > 2040 || m < 1940)
{
printf("查询范围为1940年到2040年");
main();
}
else
{
Z = total(m);
for (j = 1; j <= n - 1; j++)
{
D = where(m, j);
Z = Z + D;
}
d = Z % 7;
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" %d月份\n", n);
printf("sun mon tue wed thu fri sat\n");
if (d < 6)
for (di = 1; di <= d + 1; di++)
printf(" ");
for (did = 1; did <= where(m, n); did++)
{
printf("%d", did);
if (did < 10)
printf(" ");
else
printf("");
if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
printf("\n");
}
main();
}
}
voidoutput_day() //年月日输出
{
int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
time_t timep;
struct tm* p;
time(&timep); //系统时间获取
p = localtime(&timep);//此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
printf("请输入年月日(eg:2015 01 01):");
scanf("%d%d%d", &x, &y, &z);
if (x > 2040 || x< 1940)
{
fprintf("查询范围为1940年到2040年");
main();
}
else
{
judge = where(x, y);
if (judge < z || y>12)
printf("输入日期不存在!");
else
{
Z = total(x);
for (j = 1; j <= y - 1; j++)
{
D = where(x, j);
Z = Z + D;
}
Z = Z + z;
h = 1900 + p->tm_year;//时间赋值
k = 1 + p->tm_mon;
l = 1 + p->tm_mday;
Z1 = total(h);
for (j = 1; j <= k - 1; j++)
{
D = where(k, j);
Z1 = Z1 + D;
}
Z1 = Z1 + l;
jian = Z1 - Z;
printf("输入日期距今有%d天\n", jian);
d = Z % 7;
when(d);
why(y, z);
}
main();
}
}
int main()
{
int number;
printf("\n\n*************查询方式************* \n");
printf("* 1.查询某年的日历 * \n");
printf("* 2.查询某月的日历 * \n");
printf("* 3.查询特定的日期 * \n");
printf("* 4.查询特定的农历 * \n");
printf("* 5.查询结束--退出 * \n");
printf("********************************** \n");
do
{
printf("请输入查询方式:");
scanf_s("%d", &number);
switch (number)
{
case 1: output_year();break;
case 2: output_month(); break;
case 3: output_day(); break;
case 4: printf("暂时未实现"); break;
case 5: break;
default: printf("输入错误!\n--------------\n"); break;
}
} while (number != 1 && number != 2 && number != 3 && number != 4);
}
人造人 发表于 2020-3-13 15:11
“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的, ...
第三个国历转换为农历犹豫过于复杂老师决定取消,现在就差第四点了{:5_106:} http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的
java写的,我试试看能不能改成C语言的
人造人 发表于 2020-3-13 15:56
http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的
emmm,我想问的是文件的存储。。 上官洛栖 发表于 2020-3-13 16:07
emmm,我想问的是文件的存储。。
? 人造人 发表于 2020-3-13 16:15
?
就是怎么把我输出来的结果存进一个文件里 上官洛栖 发表于 2020-3-13 16:30
就是怎么把我输出来的结果存进一个文件里
最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?
人造人 发表于 2020-3-13 16:49
最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?
emmm,学了,但是听不太懂,所以来求助 人造人 发表于 2020-3-13 16:49
最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?
文件操作应该怎么弄呀 上官洛栖 发表于 2020-3-13 19:43
文件操作应该怎么弄呀
#include <stdio.h>
int main(void)
{
FILE *fp = fopen("output.txt", "w");
fprintf(fp, "hello world!\n");
fclose(fp);
return 0;
}
把你想写的内容通过fprintf写到文件
翻译完了
参考 http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
使用这个验证 https://gonglinongli.51240.com/
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
static size_t month_days[] = {29, 30};
static size_t days_month [] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
static size_t datas[] = {
{23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
{41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
{30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
{49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
{38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
{45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
{24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
{43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
{32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
{21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
{40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
{28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1},
{36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1},
{33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
{23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
{42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
{30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
{48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
{38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
{45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0},
{35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
{24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
{43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
{32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
{20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
{39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0},
{29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
{36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
{26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1},
{45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
{33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1},
{22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
{41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
{30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
{48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1},
{37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
{27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
{46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0},
{35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1},
{24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
{43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
{32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
{50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
{39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1},
{28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0},
{47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
{36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
{26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1},
{45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0},
{34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0},
{22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
{40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
{30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1},
{49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1},
{37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
{27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1},
{46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
{35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
{23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
{21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
{28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
{48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
{37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
{25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
{44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
{33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
{30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1},
{38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
{27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
{46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0},
{35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
{24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
{31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
{21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
{28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
{47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1},
{36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
{25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
{43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
{32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0},
{22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}
};
bool is_leap_year(size_t year)
{
if(year % 400 == 0)
return true;
if(year % 100 == 0)
return false;
if(year % 4 == 0)
return true;
return false;
}
size_t day_of_year(size_t year, size_t month, size_t day)
{
const static size_t day_of_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
size_t days = 0;
for(size_t i = 0; i < month - 1; ++i)
days += day_of_month;
days += day;
if(is_leap_year(year))
++days;
return days;
}
void print_gregorian_calendar(size_t year, size_t month, size_t day)
{
size_t index = year - 1936;
//month += 1;
size_t end_index = month;
if(datas != 0 && month > datas)
++end_index;
ssize_t day_num = 0;
for(size_t i = 0; i < (end_index - 1); ++i)
day_num += month_days];
day_num += day;
day_num += datas;
ssize_t year_days = 365;
if(is_leap_year(year))
year_days = 366;
if(day_num > year_days) {
++year;
day_num -= year_days;
}
size_t day_of_month;
memcpy(day_of_month, days_month, sizeof(size_t) * 12);
if(is_leap_year(year))
memcpy(day_of_month, days_month, sizeof(size_t) * 12);
month = 1;
size_t i;
for(i = 0; i < 12; ++i) {
day_num -= day_of_month;
if(day_num <= 0)
break;
++month;
}
day = day_of_month + day_num;
printf("%lu - %lu - %lu\n", year, month, day);
}
void print_lunar_calendar(size_t year, size_t month, size_t day)
{
if(year < 1936 || year > 2028)
return;
size_t index = year - 1936;
size_t day_year = day_of_year(year, month, day);
size_t days;
if(day_year >= datas) days = day_year - datas;
else {
--index;
--year;
days = day_of_year(year, 12, 31) + day_year - datas;
}
size_t i;
size_t day_num = 0;
month = 1;
for(i = 0; i < 13; ++i) {
day_num += month_days];
if(day_num >= days)
break;
++month;
}
day = month_days] - (day_num - days);
if(datas != 0 && month > datas)
--month;
printf("%lu - %lu - %lu\n", year, month, day);
}
int main(void)
{
print_gregorian_calendar(2020, 7, 19);
print_lunar_calendar(2020, 7, 19);
return 0;
}
人造人 发表于 2020-3-13 20:57
把你想写的内容通过fprintf写到文件
谢谢大佬
页:
[1]