c语言程序设计报告

江南大学 物联网工程学院

课程名称:设计题目:班 级:姓 名:指导教师:

课程设计报告 C语言课程设计 学生成绩管理系统 自动化1003班 孙海洋 学 号: 赵芝璞 评 分: 2011 年 11 月 20 日

目录

1、设计题目及要求------------------------------------------------

2、总体设计(程序设计组成框图、流程图)-------------------------

3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等))-------------------------------------

4、调试与测试:调试方法,测试数据,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施----------

5、源程序清单和执行结果(可附上截屏图片):清单中应有足够的注释--------------------------------------------------------------

一、设计题目及要求:

1、设计题目:

学生成绩信息包括:学号,姓名,三门课程成绩(数学、英语和计算机)等。

主要功能:

(1) 计算各个学生的总分及平均分,并按平均分排出名次。

(2) 统计全班学生平均分成绩,输出60分以下、60~79、80~89、90分以上各分数人数

(3) 能按学号、姓名查询学生成绩,并能输出学生的成绩单

(4) 输出不及格科目及学生名单

(5) 选做:在屏幕打印优等生名单(学号,三门课程成绩,平均成绩,名次),优等生必须满足下列条件:

1)平均成绩大于90分;或平均分大于85分且至少有一门功课为100分;或者平均分大于85分且至少两门课程成绩为95分以上;

2) 名次在前三名;

3) 每门功课及格以上;

要求:使用文本文件方式存储数据,系统以菜单方式工作 查询和统计的结果均写入单独的文件中。

二、总体设计

1、程序设计组成框图:

c语言程序设计报告

2、流程图:

c语言程序设计报告

三、详细设计

模块功能说明:(未定义函数,所有的程序直接在main函数中进行)

1、输入学生的信息函数功能:定义了一个结构体,通过scanf输入函数直接输入学生的姓名、学号、英语成绩、数学成绩、计算机成绩。

2、计算机排序功能:mian函数中的第二个模块直接输出学生的总分及平均分,

c语言程序设计报告

并按平均分排出名次。

3、输出功能:第三模块中,通过for循环功能,输出不及格科目及学生名单。

4、查询功能:通查询信息,在第四模块中,输入学生的学号或姓名,找到输入的结构体的姓名或是学号对应的学生的所有的信息,并输出该学生信息。

5、退出程序

四、调试与测试

1、调试方法:逐条的对程序中的错误进行修改;修改程序中的变量、对各个模块的函数功能进行修改调试,直至零错误、零警告。

2、调试数据:

姓名 学号 英语成绩 数学成绩 计算机成绩 Qipengcheng 1 78 58 78

Luoxiuqing 2 78 87 90

Sunhaiyang 3 39 67 97

Wanghongcheng 4 80 69 49

Weipeng 5 69 99 87 Piaonanji 6 57 79 98

3、测试结果的分析与讨论:

由测试数据分析输出的结果可以得出输出的成绩排名、不及格人数及信息、按姓名和学号查询学生的信息输出均为正确的。

4、测试过程中遇到的问题:

①显示结果时候出错

问题描述:每一个功能在现实结果现实的信息部完整,部分信息部能现实或被覆盖。

解决办法:现实出错也就是printf语句中的结构没有排列好所导致的。检查所有的Printf语句后发现所有的printf语句中少输出了以个语文成绩,且它们不能完全对齐。在增加了“语文”,修改了转义字符以及空格后,问题解决了。 ②在查询信息的时候出错

问题描述:在输入不在文件中保存的姓名、学号时,没有信息提示。

解决办法:出现此问题说明if语句后少了一条else语句,加上该语句后,显示的结果正确了。

五、原程序清单及执行结果

原程序清单:

#include <stdio.h>

#include <string.h>

struct student

{ int paiming;

int number;

char name[30];

double english,math,computer;

double sum;

double aver;

};

int main()

{

struct student b[100];

int t;

int i,j=0;

int s=0;

int n;

char name[30];

double english, math, computer;

double aver=0.0;

int a[4];

int p;

int m;

int y;

char xingming[30];

for(i=0; i<4; i++)

a[i]=0;

printf("**********若结束输入,请输入0 ************\n");

for(i=0; ;i++)

{ printf("请输入学号:\n");

scanf("%d",&n);

if(n==0) break;

else

{

b[++j].paiming=j;

b[j].number=n;

printf("请输入学生姓名:\n");

scanf("%s",name);

strcpy(b[j].name,name);

printf("请输入学生英语成绩:\n"); scanf("%lf",&english);

b[j].english=english;

printf("请输入学生数学成绩:\n");

scanf("%lf",&math);

b[j].math=math;

printf("请输入学生电脑成绩:\n"); scanf("%lf",&computer);

b[j].computer=computer;

s++;}

}

for(i=1; i<=s; i++)

{b[i].sum=b[i].english+b[i].math+b[i].computer; b[i].aver=b[i].sum/3.0;

}

for(i=1; i<s; i++)

{

if(b[i].aver<b[i+1].aver)

{t=b[i].paiming;

b[i].paiming=b[i+1].paiming;

b[i+1].paiming=t;

}

}

printf("现在按平均分从小到大输出学生信息:\n"); for(i=1; i<=s; i++)

{

printf("排名:%d\n",b[i].paiming);

printf("学号:%d\n",b[i].number);

printf("姓名:%s\n",b[i].name);

printf("英语成绩:%lf\n",b[i].english); printf("数学成绩:%lf\n",b[i].math); printf("电脑成绩:%lf\n",b[i].computer); printf("总分:%lf\n",b[i].sum);

printf("平均分:%lf\n",b[i].aver);

}

for(i=1; i<=s; i++)

{aver+=(b[i].aver/(s*1.0));

}

printf("学生的平均分为:%lf\n",aver);

for(i=1; i<=s; i++)

{ switch(((int)b[i].aver)/10)

{ case 6:

case 7: a[1]++;break;

case 8: a[2]++;break;

case 9:

case 10: a[3]++;break;

default: a[0]++;break;

}

}

printf("平均分在60分以下的人数为:%d\n",a[0]);

printf("平均分在60分~79分的人数为:%d\n",a[1]); printf("平均分在80分~89分的的人数为:%d\n",a[2]); printf("平均分在90分以上的人数为:%d\n",a[3]); printf("\n");

printf("以下是不及格的学生信息:\n");

for(i=1; i<=s; i++) /*只输出不及格科目即可*/ {

if(b[i].english<60 || b[i].math<60 || b[i].computer<60) {printf("姓名:%s\n",b[i].name);

if(b[i].english<60)

{

printf("英语成绩:%lf\n",b[i].english);

}

if(b[i].math<60)

{printf("数学成绩:%lf\n",b[i].math);

}

if(b[i].computer<60)

{

printf("电脑成绩:%lf\n",b[i].computer); }

}

}

printf("\n");

for(i=0; ;i++)

{printf("查询信息按1,结束按0.\n"); /*实现多次查询*/ scanf("%d",&y);

if(y==0) break;

else{

printf("请输入您要查询学生的学号或者姓名,输入学号请按1,输入姓名请按2:\n"); {

scanf("%d", &p);

if(p==1)

{

printf("请输入您要查询学生的学号:\n");

scanf("%d", &m);

printf("您查询的学生信息如下:\n");

printf("排名:%d\n",b[m].paiming);

printf("学号:%d\n",b[m].number);

printf("姓名:%s\n",b[m].name);

printf("英语成绩:%lf\n",b[m].english);

printf("数学成绩:%lf\n",b[m].math);

printf("电脑成绩:%lf\n",b[m].computer);

printf("总分:%lf\n",b[m].sum);

printf("平均分:%lf\n",b[m].aver);

}

if(p==2)

{

printf("请输入您要查询学生的姓名:\n");

scanf("%s",xingming);

for(i=1; i<=s; i++)

{

if(strcmp(b[i].name, xingming)==0)

{printf("您查询的学生信息如下:\n");

printf("排名:%d\n",b[i].paiming);

printf("学号:%d\n",b[i].number);

printf("姓名:%s\n",b[i].name);

printf("英语成绩:%lf\n",b[i].english);

printf("数学成绩:%lf\n",b[i].math);

printf("电脑成绩:%lf\n",b[i].computer);

printf("总分:%lf\n",b[i].sum);

printf("平均分:%lf\n",b[i].aver);}

}

}

else {printf("按键错误!\n");}

}

}

}

return 0;

}

执行结果:

①输入学生的信息:

c语言程序设计报告

c语言程序设计报告

c语言程序设计报告

②按平均分输出学生的成绩排名和学生的具体信息:

c语言程序设计报告

③输出不及格学生信息:

c语言程序设计报告

④学生信息查询

c语言程序设计报告

c语言程序设计报告

c语言程序设计报告

 

第二篇:C语言程序设计报告——年里显示

C语言程序设计报告年里显示

计算机学院计算机科学与技术专业

《程序设计综合课程设计》报告

(2011/2012学年 第一学期)

学生姓名:学生班级: 计算机102001班

学生学号:指导教师:

C语言程序设计报告年里显示

20xx年 12月 30日

年历显 示

第一章 课程设计的目的和要求

1.1 课程设计的目的

本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计基础(C)》课程后进行的一次全面的综合设计。本课程设计的目的和任务

1. 巩固和加深学生对C语言课程的基本知识的理解和掌握。

2. 掌握C语言编程和程序调试的基本技能。

3. 利用C语言进行基本的软件设计。

4. 掌握书写程序设计说明文档的能力。

5. 提高运用C语言解决实际问题的能力。

此课程设计着眼于知识的运用,把平常学的知识运用到课程实践中来,本身就是考察我们知识运用能力。要求熟悉运用一些编程软件(如:Microsoft Visual C++ 6.0),对我们所学的理论知识进一步的深化。

1.2 课程设计实现的要求

《程序设计基础课程设计》是计算机科学与技术专业实践性环节之一,是学习完《程序设计基础》课程后进行的一次全面的综合练习。其目的是要达到理论与实际应用相结合,使学生能够使用所学的程序设计语言,根据具体案例的要求,组织数据,运用算法编写程序,以培养良好的程序设计技能。

1

第二章 课程设计任务内容

功能要求:

(1) 输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在

1940-20xx年之间。

(2) 输入年月,输出该月的日历。

(3) 输入年月日,输出距今天还有多少天,星期几。

2.1使用C语言中的多分支选择结构进行日期的运算

因为本程序中是年份、月份、星期的运算,它们都是有周期性的,每个一段时间就重复一次,从而用switch语句进行选择满足条件的数据,并且可以根据情况选择让switch依次执行每个case语句或者只是执行满足条件的case语句后跳出乡下的执行过程,这样大大减少了重复运算的工作量,对于有周期性的数据运算更加有用。

2.2界面设计

1.欢迎进入系统的语句;

2.对使用者查询的年月日的范围进行了划定;

3.对查询的的格式和方式进行提醒;

4.每一系查询完,程序都会询问是否继续使用本系统--------更加人性化;

2.3运行说明

此程序在使用时,只能查询19xx年到20xx年的年月日,否则会提示“输入错误,请重新输入”并且必须按程序提醒的格式输入要查询的年月日,否则会提示出错。在输入前请认真阅读输入前的都提示。

2

第三章 详细课程设计

3.1模块描述

系统的整体模块描述如图3-1所示:

C语言程序设计报告年里显示

3.2程序设计过程

3.2.1对年月日的输入和判断

因为本程要求输入的年月日是19xx年到20xx年,所以必须对所输入的年月日进行判断看是否满足要求,当输入不满足格式或输入的年份超出了以上的范围则程序提示出错。因为需要对输入的年要输出年历,对输入的月份要输出这个月的月历,对输入的日子要输出据今日有多少天和那天是星期几。所以我把上面三种情况在输入时输入三种格式——如:2010(查年历)、201003(查日历)、20100305(查日子)。然后用if条件句判断输入的数据是否正确并且对查年,查月,查日进行分类和算出具体要查的年月日。

if(n>=1940&&n<=2040) //对是否是差年历进行判断

}

else {cout<<"输入有错误,请重新输入:"<<endl;g=0; { year(n);//若是则调用year函数并令g=1 g=1; } else if(n>=194001&&n<=204012)//对是否是查月历进行判断 { m=n/100;j=n-m*100;//若是则把输入的n中的年和月分离 month(m,j);//调用函数month函数并令g=1 g=1; } else if(n>=19400101&&n<=20401231)//对是否是查日子进行判断 { m=n/10000; //若是则把年月日进行分离; j=n/100-m*100; k=n-m*10000-j*100; day(m,j,k);//调用函数day,并令g=1 g=1;

//若对以上的判断都不是则令g=0;

}

return g;//返回g的值

4

3.2.2对输入错误的数据进行处理

do{cout<<"请输入要查询的你月日(如查年:2001,查月200103,查日20010301):"<<endl;

do

{ cin>>n;

q=niu(n);//上节中返回的g的值赋给q

}while(q==0) ;//内嵌的while循环语句对输错的数据进行重新输入知道输对//后返回的值使q不等于0为止;

cout<<"是否继续使用(输入“Y”继续使用,输入其它则不继续使用)? ";

cin>>st;//执行完niu函数后程序询问是否继续使用,使用者输入字符

}while(st=='Y');//用while循环句对输入"Y"的继续循环使用,直到输入的字符不//为Y为止

cout<<"谢谢使用本系统( ^_^ )/~~拜拜。。。。。。"<<endl;//整个程序结束

}

3.2.3对给出的日子的星期的计算

本程序用蔡勒(Zeller)公式计算,具体算法如下: w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如20xx年1月1日要看作20xx年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)

算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。

具体的程序是:

if(j>2&&j<13)//对3到12月份中需要带入蔡勒(Zeller)公式的数据求解

{c=int(m/100);//得到世纪减一 y=m-c*100;//得到年数的最后两位数 p=int(y/4);//年数最后两位除以四取整 5

l=int(c/4);//c除以四取整 w=int(26*(j+1)/10); } else if(j==1||j==2)//对所求日子在一二月分的,需要带入蔡勒(Zeller)公式的数据求解

{ c=int((m-1)/100);//得到世纪减一 y=(m-1)-c*100;//得到年数的最后两位数 p=int(y/4);//年数最后两位除以四取整 l=int(c/4);//c除以四取整 w=int(26*(j+12+1)/10); } s=y+p+l-2*c+w+k-1;//把所得到的数据代入公式 g=s%7;//所得的余数为所求的星期数

3.2.4对求得的月份日子与星期数进行对应——月历的表示

cout<<j<<" 七 一 二 三 四 五 六"<<endl;//在第一行输出月份j和星期 //一 到七

while(m<=g)//g为计算星期的余数, m开始时取0,这个while循环用来计算并//输出每个月的第一天在月历的第一行对应的星期数,直到第一天对应好,在这 //之前一直输出空格直到找到第一天的位置即g>m为止

{

cout<<" "; m=m+1;}

for(i=1;i<=h;i++)//h是这个月的总天数,这个for循环的作用是输出这个月的每天 {

cout<<setiosflags(ios::right);//输出的每个数都进行右对齐 cout<<" "<<setw(3)<<i;//是输出的每个数都有三个字长,以便对齐 if((g+i)%7==0)cout<<endl<<" ";//每当g+i除以七的余数等于零时,进行换行 }//以便使每七天换一行,使月历中的每天与自己的星期对好}

3.2.5对单独日子距今天数的处理

对计算一天距今多少天分了三个部分:

6

1.计算从输入的那个日子到当年结束还有多少天;

2.计算从输入的日子的下一年到今天这一年的上一年有多少年,有多少闰年和平年,各自乘以366和365相加;

3.找今年除了今天已过了多少天;

以上三个部分相加即可得到随意一天,到今天有多少天;而那天的星期算法个上面所说的一样;

int a,b,c,d,h,e=0,p=0,v=0,sum=0;

cin>>a>>b>>c;//输入今天的年月日

for(d=m+1;d<a;a++)//对大于所求的年份到今年,统计润年数

if((d%4==0&&d%100!=0)||(d%400==0))

e=e+1;//没有一个闰年则e加一

bool red=false,green=false;//设两个布尔型数据并初始化为false

if((a%4==0&&a%100!=0)||(a%400==0))//判断今年是不是闰年

green=true;//若是则吧green赋值为true

if((m%4==0&&m%100!=0)||(m%400==0))//判断所求的年份是不是闰年

red=true;//若是则吧red赋值为true

switch(j+1)//从所求日子的下一个月对本年生于的日子进行累加

{

case 2:{if(red==true)p=p+29;else p=p+28;}//日月有几天判断所求//日子的年份的

case 3:p=p+ 31;

case 4:p=p+30;

case 5:p=p+31;

case 6:p=p+30;

case 7:p=p+31;

case 8:p=p+31;

case 9:p=p+30;

case 10:p=p+31;

case 11:p=p+30;

case 12:p=p+31;

7

case 13:p=p+0;

}

if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)

h=31-k;//求所求日子的那个月的剩余天数

else if(j==4||j==6||j==9||j==11)//求所求日子的那个月的剩余天数

h=30-k;

else

if(j==2&&red==true)

h=29-k;//求所求日子的那个月的剩余天数

else

if(j==2&&red==false)

h=28-k;

switch(b-1)//用switch语句对今年已过去的几个月的天数进行累加

{case 11:v=v+30;

case 10:v=v+31;

case 9:v=v+30;

case 8:v=v+31;

case 7:v=v+31;

case 6:v=v+30;

case 5:v=v+31;

case 4:v=v+30;

case 3:v=v+31;

case 2:{if(green)v=v+29;else v=v+28;}

case 1:v=v+31;

case 0:v=v+0;

}

sum=e*366+(a-m-e-1)*365+p+h+v+c;}//计算三部分的总天数即为所求//的

日子据今天有多少天

8

}

3.2.6年里显示主函数

void main()

{int q;char st;

cout<<" 欢迎使用我的万年历(*^__^*) 嘻嘻??"<<endl;

cout<<"备注:本系统只能查询公元19xx年至20xx年时间历表"<<endl; int niu(int);

do

{

cout<<"请输入要查询的你月日(如查年:2001,查月200103,查日20010301):"<<endl;

do

{cin>>n;

q=niu(n);

}while(q==0) ;

cout<<"是否继续使用(输入“Y”继续使用,输入其它则不继续使用)? "; cin>>st;

}while(st=='Y');

cout<<"谢谢使用本系统( ^_^ )/~~拜拜。。。。。。"<<endl;}

第四章 运行环境及需求

4.1编程工具和硬件要求

Microsoft Visual C++ 6.0 一般的PC

Windows Vista/2003/XP/7。

计算机及VisualC++6.0编程环境

4.2运行结果

欢迎界面如图4-1所示:

9

图4-1欢迎界面

查询年历如图4—2(a)(b)(c)所示:

C语言程序设计报告年里显示

图4——2(a)年历显示

10

C语言程序设计报告年里显示

图4——2(b)年历显示

C语言程序设计报告年里显示

图4——2(c)年历显示

C语言程序设计报告年里显示

11

显示月历为图4—3所示:

C语言程序设计报告年里显示

图4-3显示月历的查询结果

对日子的显示如图4-4所示:

C语言程序设计报告年里显示

图4-4对日子的查询显示

退出系统界面如图4-5所示:

C语言程序设计报告年里显示

图4-5退出程序界面

12

第五章 课程设计心得体会

课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说,掌握程序开发技术是十分重要的,而C/C++语言又是最常见,功能最强大的高级语言,因此做好C/C++语言课程设计是十分必要的。回顾起此次课程设计,我感慨颇多。的确,从拿到题目到完成整个系统的编程,从理论到实践,在整整三周的日子里,我学会了很多东西,在巩固了以前所学过的知识的同时,我还学到了很多在书本上所没有学到过的知识。

在这次课程设计中,我深刻的了解到:第一,C/C++语言是程序设计的重要工具。如果想有效的进行程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,而C/C++语言是最常见的,也是功能最强大的语言。在做好程序设计的前提下,必须掌握C/C++语言的基本语言要素和其控制结构等语法知识,且灵活运用。第二,进行程序设计必须有清晰的思路与方法,要合理的分配勾画系统的功能模块图、构建各个函数的流程图、编写程序以及上机实践的时间。这次的课程设通过课堂教学、与自我实践的紧密联系,使得我们对课程设计有了较为深的了解与认识,更好的完成了这次学习任务。第三,做好课程设计,要有顽强的意志与坚定的信心,永不言弃。要多看、多问、多想,遇到问题要想办法解决,否则事倍功半。

在这期间,我们有过山穷水尽的困惑,有过柳暗花明的惊喜,有过唇枪舌剑的辩论,有过相互鼓励的安慰。在这期间,我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。

经过这次课程设计,我在收获知识、提高能力的同时,我也学到了很多人生的哲理,学会了如何运用所学知识去解决实际问题,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。在此,感谢老师的辛勤教导!感谢对我予以帮助的同学们!

13

附录一:参考文献

[1]、《数据结构(C语言版)》严蔚敏 吴伟民 米宁 清华大学出版社

[2]、《C语言程序设计》(第三版)谭浩强 清华大学出版社

14

附录二: 程序清单

#include<iostream>

#include<iomanip>

#include<cmath>

#include<string>

using namespace std;

int n;

void main()

{int q;

char st; cout<<" 欢迎使用我的万年历(*^__^*) 嘻嘻……"<<endl; cout<<"备注:本系统只能查询公元19xx年至20xx年时间历表"<<endl;

int niu(int); do { cout<<"请输入要查询的你月日(如查年:2001,查月200103,查日20010301):"<<endl;

do { cin>>n; q=niu(n); 15

}while(q==0) ; cout<<"是否继续使用(输入“Y”继续使用,输入其它则不继续使用)? ";

cin>>st;

}while(st=='Y');

cout<<"谢谢使用本系统( ^_^ )/~~拜拜。。。。。。

}

int niu(int n)

{

int m,j,k,g;

void year(int);

void month(int,int);

void day(int,int,int);

if(n>=1940&&n<=2040)

{

year(n);

g=1;

}

else if(n>=194001&&n<=204012)

{

m=n/100;j=n-m*100;

month(m,j);

16 "<<endl;

} g=1; else if(n>=19400101&&n<=20401231) {

m=n/10000;

j=n/100-m*100;

k=n-m*10000-j*100;

day(m,j,k);

g=1;

}

else

{

cout<<"输入有错误,请重新输入: }

return g;

}

void year(int x)

{

void month (int,int);

int w;

for(w=1;w<13;w++)

month(x,w);

17 "<<endl;g=0;

}

void month(int m,int j) {

int h,g; int xingqi(int,int,int); g=xingqi(m,j,1);

bool leap=false; if((m%4==0&&m%100!=0)||(m%400==0)) leap=true; if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) h=31; else if(j==4||j==6||j==9||j==11) h=30; else if(j==2&&leap==true) h=29; else if(j==2&&leap==false) h=28; cout<<j<<" 七 一 二 三 四 五 六"<<endl; void slove(int,int); slove(g,h); cout<<endl; 18

}

int xingqi(int m,int j,int k) {int y,p,l,w;

int s,g;int c;

if(j>2&&j<13)

{

c=int(m/100); y=m-c*100;

p=int(y/4);

l=int(c/4);

w=int(26*(j+1)/10); }

else if(j==1||j==2) {

c=int((m-1)/100); y=(m-1)-c*100; p=int(y/4);

l=int(c/4);

w=int(26*(j+12+1)/10); }

s=y+p+l-2*c+w+k-1; g=s%7;

19

return g;

}

void slove(int g,int h)

{ int i,m=0;

while(m<=g)

{

cout<<" ";

m=m+1;

}

for(i=1;i<=h;i++)

{

cout<<setiosflags(ios::right);

cout<<" "<<setw(3)<<i;

if((g+i)%7==0)cout<<endl<<" ";

}

}

void day(int m,int j,int k)

{

cout<<"请输入今天的年月日:"<<endl;

cout<<"请按“年+空格+月+空格+日”的格式写如04"<<endl;

int a,b,c,d,h,e=0,p=0,v=0,sum=0;

20 03 2001

cin>>a>>b>>c;

for(d=m+1;d<a;a++)

if((d%4==0&&d%100!=0)||(d%400==0)) e=e+1;

bool red=false,green=false;

if((a%4==0&&a%100!=0)||(a%400==0)) green=true;

if((m%4==0&&m%100!=0)||(m%400==0)) red=true;

switch(j+1)

{ case 2:{if(red==true)p=p+29;else p=p+28;} case 3:p=p+31;

case 4:p=p+30;

case 5:p=p+31;

case 6:p=p+30;

case 7:p=p+31;

case 8:p=p+31;

case 9:p=p+30;

case 10:p=p+31;

case 11:p=p+30;

case 12:p=p+31;

21

case 13:p=p+0;

}

if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) h=31-k;

else

if(j==4||j==6||j==9||j==11) h=30-k;

else

if(j==2&&red==true) h=29-k;

else

if(j==2&&red==false) h=28-k;

switch(b-1)

{case 11:v=v+30;

case 10:v=v+31;

case 9:v=v+30;

case 8:v=v+31;

case 7:v=v+31;

case 6:v=v+30;

case 5:v=v+31;

case 4:v=v+30;

22

case 3:v=v+31;

case 2:{if(green)v=v+29;else v=v+28;}

case 1:v=v+31;

case 0:v=v+0;

}

sum=e*366+(a-m-e-1)*365+p+h+v+c;

int g; g=xingqi(m,j,k); switch(g) { case 6:{cout<<"那天是星期六";break;} case 5:{cout<<"那天是星期五";break;} case 4:{cout<<"那天是星期四";break;} case 3:{cout<<"那天是星期三";break;} case 2:{cout<<"那天是星期二";break;} case 1:{cout<<"那天是星期一";break;} case 0:{cout<<"那天是星期天";break;} } if(a<m)sum=0-sum;

cout<<"你输入的日子距今日有:"<<sum<<endl; }

23

24

相关推荐