⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnl.c

📁 这是我的课程设计 由于时间有限
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
/*getch()所得值宏命名*/
#define CESC 1
#define CBACK 8
#define CSPACE 32
#define CENTER 13
#define CTAB 9
#define CSHIFT_P 80 /*shift+p之值*/
#define X " Sun Mon Tue Wed Thu Fri Sat"/*将星期输出,每一个包括空格占四个位置,以便格式化输出于屏幕*/
#define P printf
#define B break
#define FP fprintf
char gstr[50];/*用以存放getstr()函数所获得的数据的外部变量,以便交流数据*/
char *intos(int num){
	char ax[50];
	if(num==0){
		ax[0]='\0';return ax;
	}
	return itoa(num,ax,10);

}
int getstr(int amax,int px,int py,char *p,int allow){
/*------从键盘获得数据并进行相应处理,不允许输入空格,可以勉强有效控制用户乱输入数据,因时间有限,可能有缺陷-------*/
/*---amax表示允许的最大字符数-------*/
/*---allow表示允许的输入的数据类型,如果其值为1表示整型,2表示字符串-------*/
/*---p给出初始数据-------*/
/*---px,py表示准备输入时之光标横纵坐标-------*/
/*---ny(返回值)表示输入完毕后光标纵坐标的的移动。其值为正负一-------*/
	char ch;
	int ny,i,minpx;
	minpx=px;
	for(i=px;i<px+amax;i++)cprintf(" ");/*----首先将px到px+amax位置全部用空格占掉-----*/
	gotoxy(px,py);
	strcpy(gstr,p);
	for(i=0;gstr[i];i++){
		cprintf("%c",gstr[i]);px++;
	}
	for(i=0;i<50;){
		ch=getch();
		if(allow==1&&ch>='0'&&ch<='9'&&i+1<=amax){
			/*当输入整型数时*/
			cprintf("%c",ch);
			px++;
			gstr[i]=ch;
			i++;
		}
		if(ch==CBACK&&px>minpx){
			/*当按下back space键时*/
			px--;
			gotoxy(px,py);
			cprintf(" ");
			gotoxy(px,py);
			gstr[i-1]='\0';
			i--;continue;
		}
		if(ch==CSPACE){
			/*当按下空格键时*/
			continue;
		}
		if(ch==CTAB){
			/*当按下tab键时*/
			ny=1;
			return ny;
		}
		if(ch==CSHIFT_P||ch==CSHIFT_P+32){
			/*当按下shift+p键时,执行shift+tab类似功能*/
			ny=-1;
			return ny;
		}
		if(ch==CENTER){
			/*当按下回车时,初步提交数据*/
			ny=0;
			return ny;
		}
		if(allow==2&&i+1<=amax){
			/*当输入字符串时*/
			cprintf("%c",ch);
			px++;
			gstr[i]=ch;
			i++;
		}
	}
}
void print(int n){     /*输出N个空格*/
	int i;
 	for(i=0;i<n;i++) printf(" ");
}
int day(int year){ /*求得本年第一天是星期几*/
	 long a,b;
	 if(year<=2000){
 		 a=2000-year;b=6-(a+a/4-a/100+a/400)%7; return b;
	 }
	 else {
	  	a=year-2000; b=(a+1+(a-1)/4-(a-1)/100+(a-1)/400)%7+6; return b%7;
	 }
}	
void main(){
 	int i,j,k,m,n,f1,f2,year,d;
	int isf=0;/*标记,是否存盘*/
 	int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /*将a[0]空出,以便按习惯处理,每个月的天数*/
 	char fname[]="c:\\clendary.txt"; /*存放文件名*/
	char gch;
	FILE *fw;
	clrscr();
/*全屏背景设计初始为蓝色*/
	textbackground(1);
	for(i=0;i<25;i++)insline();
/*全屏背景设计初始为蓝色结束*/
	textcolor(14);
	clrscr();/*清屏,随后输出的字符均将以黄色输出*/
 	gotoxy(25,5);
 	textcolor(14);
	 P("03级计算机课程设计系列之-------万年历系统:");
	gotoxy(30,6);P("学生:陈欢");
	gotoxy(30,7);P("班级:03级计算机6班");
	gotoxy(28,8);P("请按<回车>进入本系统");
	while(1){
		gch=getch();
		if(gch==13)break;
		
	}
	gotoxy(10,10);
	 P(" 请输入年份:"); 
	gotoxy(13,11); P("[       ]"); 
	while(!gstr[0])getstr(5,14,11,"",1);
	 year=atoi(gstr);
	P("\n\n 是否将%d年的年厉存盘y/n[ ]:\b\b\b",year); 
	while(1){
		gch=getch();
		if(gch=='Y'||gch=='y'){isf=1;break;}
		if(gch=='N'||gch=='n'){isf=0;break;}
	}
	if(isf==1){
 		fw=fopen(fname,"w+"); /*打开文件*/
 		if(fw==NULL){
  			P(" can not open file."); return;
 		}
	}
	clrscr();
	gotoxy(18,24); P("学生:陈欢  班级:03级计算机6班 类型:课程设计");
	gotoxy(25,2); P("03级计算机课程设计系列之-------万年历系统:");
	gotoxy(35,4);P("%d的年历\n",year);
 	if(isf==1)FP(fw," %d的年历\n",year);
 	d=day(year);/*算得本年第一天是星期几*/
 	if(year%4==0&&year%100||year%400==0) a[2]++; /*如果是闫年,二月的天数加一*/
 	for(i=1;i<=12;i+=2){
  		m=0; n=0; f1=0; f2=0;
  		switch(i){
  			case 1:P(" Januray 1   "); if(isf==1)FP(fw," Januray 1   "); B;
 			case 3:P(" March 3     "); if(isf==1)FP(fw," March 3     "); B;
 			case 5:P(" May 5       "); if(isf==1)FP(fw," May 5       "); B;
  			case 7:P(" July 7     ");  if(isf==1)FP(fw," July 7      "); B;
 			case 9:P(" September 9 "); if(isf==1) FP(fw," September 9 "); B;
			case 11:P(" Nevember 11 "); if(isf==1)FP(fw," Nevember 11 "); B;
 	 	}
  		print(21); /*输出21个空格*/
  		if(isf==1)for(k=0;k<21;k++) fprintf(fw," ");
  		switch(i+1){
 			 case 2:P(" February 2  ");if(isf==1) FP(fw," February 2  ");B;
  			case 4:P(" April 4    ");if(isf==1) FP(fw," April 4     ");B;
  			case 6:P(" June 6      ");if(isf==1) FP(fw," June 6       ");B;
  			case 8:P(" August 8   "); if(isf==1) FP(fw," August 8   "); B;
 			 case 10:P(" October 10  ");if(isf==1) FP(fw," October 10  ");B;
  			case 12:P(" December 12");if(isf==1) FP(fw," December 12");B;
 		 }
  		P("\n"); 
 		if(isf==1) fprintf(fw,"\n");
  		P(X);if(isf==1) fprintf(fw,X); print(6);
 		 if(isf==1)fprintf(fw,"      "); P(X); if(isf==1)fprintf(fw,X);
 		if(isf==1) fprintf(fw,"\n"); P("\n");
	/*处理本个月的天数格式分布并输出*/
 		 for(j=0;j<6;j++){/*j表示对本个月天数分六行处理,其中第一行要特别注意他的星期数与第一日对齐*/
  			 if(j==0){
  		 		 print(d*4); for(k=0;k<d*4;k++)if(isf==1) fprintf(fw," ");/*分别对屏幕和文件输出4*d个空格*/
    				 for(k=0;k<7-d;k++){
    					 P("%4d",++m);if(isf==1) fprintf(fw,"%4d",m);
    				 }
   				 print(6); if(isf==1)fprintf(fw,"      ");
   				 d+=a[i]%7; d%=7; /*已知本月一日是星期几,求得下一个月一日是星期几*/
   				 print(d*4); for(k=0;k<d*4;k++)if(isf==1) fprintf(fw," ");
   				 for(k=0;k<7-d;k++) {
    					 P("%4d",++n);if(isf==1) fprintf(fw,"%4d",n);
  				 }
   				 P("\n");if(isf==1) fprintf(fw,"\n");
   			 }
  			 else{
  				  for(k=0;k<7;k++){
     				  if(m<a[i]){
     				 	 P("%4d",++m); if(isf==1)fprintf(fw,"%4d",m);
				  }
     			 	  else{
    				  	print(4);  if(isf==1) fprintf(fw,"    ");
			  	  }
     			 if(m==a[i]) f1=1;    /*如果已达最后一天,f1=1*/
      		  	 }
    			 print(6);if(isf==1) fprintf(fw,"      ");
    			 for(k=0;k<7;k++){
   			  	if(n<a[i+1]){
      					P("%4d",++n);if(isf==1)fprintf(fw,"%4d",n);
			  	}
    			 	else{
      					 print(4);  if(isf==1)fprintf(fw,"    ");
				}
    			 	if(n==a[i+1]) f2=1; /*如果已达最后一天,f2=1*/
    			}
    			P("\n"); if(isf==1)fprintf(fw,"\n");
   			 if(f1&&f2) B; /*如果两个都达到最后一天,退出循环*/
  	 	}
 	 }
  d+=a[i+1]%7; d%=7; /*计算下一个月的第一天是星期几*/
  P(" "); if(isf==1) fprintf(fw," ");
  for(k=0;k<27;k++) {P("="); if(isf==1)fprintf(fw,"=");}
  print(6);if(isf==1)fprintf(fw,"      ");    P(" "); if(isf==1) fprintf(fw," ");
  for(k=0;k<27;k++) {P("=");if(isf==1)fprintf(fw,"=");}
  P("\n"); if(isf==1)fprintf(fw,"\n");
  if(i==3||i==7){
  	 printf("   因屏幕显示范围有限,本页只显示4个月.查看下一页请按[Y]\b\b");
	 while(1){
		gch=getch();
		if(gch=='Y'||gch=='y')break;
	 }
  	 clrscr();
	gotoxy(18,24); P("学生:陈欢  班级:03级计算机6班 类型:课程设计");
	gotoxy(25,2);
	 P("03级计算机课程设计系列之-------万年历系统");
	gotoxy(35,4);
	P(" %d的年历\n",year);
  }
 }
 if(isf==1) fclose(fw);
if(isf==1) printf("    %d年的年历已经以文本形式成功保存存在%s",year,fname);
		printf("  要退出请按[Y]\b\b");
 while(1){
		
		gch=getch();
		if(gch=='Y'||gch=='y')break;
	
 }
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -