C语言 我的第一次课程设计---万年历

#要求
输入任意一年将显示出该年的所有月份日期,对应的星期
其显示格式要求如下
1、月份用中文显示
2、下一行显示星期,从周日到周六,中英文都可以
3、下一行开始显示日期,从一号开始,并按其实周期实际情况与上面的星期数垂直对齐
4、可以查询闰年

#函数功能
(1)函数 welcome(),欢迎界面。
(2)函数 all_month() ,月历输出函数,循环输出该年一月到十二月的月历
(3)函数 putm() ,输出中文月份
(4)函数 leap_year(),判断是否为闰年

#模块设计
主功能模块:all_month()

输入年份
定义数组month[12]用来存放非闰年时,每月天数,如果是闰年则month[1]=29定义数组ri[12]用于存放某一年每个月的第一天是星期几.ri[0]=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+leap_year(year))%7计算某一年1月1日为星期几ri[m]=((month[m-1]-(7-ri[m-1]))%7)第一个值来推出该年其他月份第一天是周几并存入数组
用for循环循环输出1到12月的月历,先根据ri[12]输出每月第一日前的空格,再根据month[12]输出每月的日期e=e+1;if(e%7==0){ printf("\n"); printf("\n"); printf(" "); } 因为月历的第一个星期是星期天,所以月历的第一行到了 星期六就要换行了。逢七换行 ,就是到了星期六就会换行, 换行的下一个星期是星期天

源代码:

#include<stdio.h> 
#include<conio.h>
#include<windows.h>//清屏 
char welcome();//欢迎界面 
void all_month(int year);//月历输出函数 
void putm(int m);//输出中文月份 
int leap_year(int year);//判断是否为闰年
int main()
{
int a,b,c,year,month;
char number;
number=welcome();
number=welcome();
 if(number == '1')//如果number是1则判断闰年 
{
 system("cls");//清屏
 printf("请输入年份:\n");
 scanf("%d",&year);
 if(year>1000000000 && year<-1000000000)
 {printf("年份计算错误");}//防止计算量过大 
 else{
 if(leap_year(year) ==366)//闰年判断 
 {printf("%d年是闰年\n",year);}
 else
{printf("%d年是平年\n",year);}}
 printf("\n");
 printf("是否继续?(y/n):\n");
 number = getch();
 if(number == 'y')//判断是否继续 
 {system("cls");main();}//继续,清屏并且主函数调用主函数本身 
 else{system("cls");}//否则,清屏结束 
 }
 
 else if(number == '2')//如果number是2就输出该年的全部月历
 {
 system("cls");//清屏
 printf("* Input the year: *\n");
 scanf("%d",&year);//输入年份
 if(year>1000000000)//防止计算量过大
 {printf("年份计算错误");}
 else{
 printf("* The calendar of the year:%d *\n",year); 
 printf("\n");
 all_month(year);}//输出该年的全部月历
 printf("\n");
 printf("是否继续?(y/n):\n");
 number = getch();
 if(number == 'y')//判断是否继续 
 {system("cls");main();}//继续,清屏并且主函数调用主函数本身
 else{system("cls");}//否则,清屏结束  
 } 
 else if(number == '3')
 {
 //待续 
 }
 return 0;    
 } 
 
 char welcome()//设置欢迎界面  
 {
 printf("\n");
 printf("\n");
 printf("\n");
 printf("\n");
 printf("\n");
 printf("\n");
 printf("\n");
 printf("                                ******************************************************\n");
 printf("                                **         *                           *           **\n");
 printf("                                **         *    欢迎来到万年历系统     *           **\n");
 printf("                                **         *                           *           **\n");
 printf("                                *****************************************************\n");  
 printf("                                           *-------请选择你的操作------* \n");
 printf("                                           *     1.查询闰年            *\n");
 printf("                                           *     2.查询某年全部日期    *\n");// 通过不同的选项进行操作 
 printf("                                           *     3.退出                *\n");
 printf("\n");
 char number;//定义用户输入字符  
 number = getch();
 return number;
 } 
 
 void all_month(int year)//输出全部月历 
 {
  int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  //非闰年时,每月天数 
 int ri[12];//定义数组,用于存放某一年每个月的第一天是星期几
 int e,i,j,flag,m,b;
 if(leap_year(year) == 366)
 {
 month[1]=29;//如果是闰年则二月有29天
 }
 ri[0]=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+leap_year(year))%7;
 //计算某一年1月1日为星期几的递推公式 
 for(m=1;m<12;m++)
 {ri[m]=((month[m-1]-(7-ri[m-1]))%7);} 
 //用上一个递推公式可以算出第一个月的一号是周几
 //用第一个值来推出该年其他月份第一天是周几并存入数组 
 
 for(b=1;b<13;b++)//循环输出 
 {
 e=ri[b-1];//e表示在该年某个月第一天是周几
 i=b-1;
 putm(b);//输出中文的月份 
 printf("                              ******************************************************\n");
 printf("\n");
 printf("                                  Sun    Mon    Tue    Wed    Thu    Fri    Sat\n");
 printf("                                  日     一     二     三     四     五     六\n");
 flag=1;
 printf("                               ");
 for(j=0;j<e;j++)
 {
 printf("       ");//输出每月第一日前的空格
 }
 while(flag<=month[i])//输出每月的日期 
 {
 printf("  %3d  ",flag);//输出第一天 
 flag++;//日期增加 
 e=e+1;//该月的第一天也跟着增加       
 if(e%7==0)
 {
 printf("\n");
 printf("\n");
 printf("                               ");
 }
 /**因为月历的第一个星期是星期天,所以月历的第一行到了
 星期六就要换行了。逢七换行 ,就是到了星期六就会换行,
 换行的下一个星期是星期天 
 */ 
 }
 printf("\n");
 printf("\n");
 printf("                                  =============================================\n");
          printf("\n");
 printf("\n");
 }
          printf("\n");
 }
  
 void putm(int m)//输出中文月份 
 {
  switch(m)//使用switch函数 
 {
  case 1:printf("                        一月:\n"); printf("\n"); break;
  case 2:printf("                        二月:\n"); printf("\n"); break;
  case 3:printf("                        三月:\n"); printf("\n"); break;
  case 4:printf("                        四月:\n"); printf("\n"); break;
  case 5:printf("                        五月:\n"); printf("\n"); break;
  case 6:printf("                        六月:\n"); printf("\n"); break;
  case 7:printf("                        七月:\n"); printf("\n"); break;
  case 8:printf("                        八月:\n"); printf("\n"); break;
  case 9:printf("                        九月:\n"); printf("\n"); break;
  case 10:printf("                       十月:\n"); printf("\n"); break;
  case 11:printf("                       十一月:\n"); printf("\n"); break;
  case 12:printf("                       十二月:\n"); printf("\n"); break;
  default:printf("Error!");
 } 
  } 
 
 int leap_year(int year)//判断闰年 
 {
  int i;
  if(year%4 == 0 && year%100 != 0) 
  {i=366;}
  else if(year%1000 == 0 && year%400 == 0)
  {i=366;}
  else
  {i=365;}
  return i;//单一出口原则
 } 

##后记
课程设计是检验C语言学习的一个炼金石,也同样是整合所学知识的一次训练,课程设计的过程中,有无数道Bug等着你,无论是语法上的还是逻辑上的,在这个过程中是很锻炼人的耐心的,只有将他们一一降伏,你才会发现走过的路也不过如此,通过一个课程设计,可以说你已经就此简单入门,但是C语言学习的路还很长,还需继续努力。

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
软件体系结构设计是一个非常重要的步骤,它可以帮助开发人员更好地理解软件系统的结构和组成部分。以下是商店销售管理系统的软件体系结构设计: 1. 系统架构 商店销售管理系统的系统架构应该是基于分层架构的,将系统分为三个主要层次: - 表示层:用户界面和用户输入/输出接口,包括所有的图形用户界面(GUI)和命令行接口(CLI)。 - 业务逻辑层:处理商店的销售管理业务逻辑,包括所有的销售管理功能和数据处理。 - 数据层:存储销售管理系统中的所有数据,包括商品信息、销售记录、用户信息等。 2. 模块设计 商店销售管理系统应该包含以下模块: - 用户管理模块:管理系统用户的登录和注册。 - 商品管理模块:管理商店中的商品信息,包括商品的添加、删除、修改和查询功能。 - 销售管理模块:管理商店中的销售记录,包括销售单的添加、删除、修改和查询功能。 - 报表生成模块:根据销售记录生成各种报表和统计数据。 - 数据库管理模块:管理系统中的所有数据,包括数据的备份和恢复功能。 3. 技术选型 商店销售管理系统应该使用以下技术进行开发: - 开发语言:C语言 - 数据库:MySQL - 用户界面:Qt(可跨平台、易于使用的GUI框架) - 编译器:GCC 4. 性能优化 为了提高商店销售管理系统的性能,应该采取以下措施: - 使用缓存技术,减少数据库访问次数。 - 优化数据库索引,加快数据查询速度。 - 采用多线程技术,提高系统并发处理能力。 通过以上设计步骤,商店销售管理系统的软件体系结构将会更加清晰,并且有助于开发人员更好地理解系统的组成部分和功能模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值