수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

만년달력 수정좀 부탁드려요..ㅜ

Sona

2023.04.01

/
질문 제목 : 만년달력프로그램 수정좀 부탁드려요..

질문 내용 : 만년달력실행후 방향키로 연도와 월을 이동좀 할수 있게좀 해주세요 ㅜㅜ
계속 해보는데 오류가 너무 많이 뜨네요.;;
기본 만년달력 소스와 이동가능한 소스 찾아서 올립니다..
기본소스에 이동좀 가능하게끔 소스 길게좀 추가해주세요 ㅜㅜ

#includestdio.h
#includestdlib.h

int detector(long);
long yyearcnter(long);
long dayadder(long,int);
void printcalender(long,int);

void main(){
long year;
int month;
printf(달력출력프로그램입니다^^.\n);
while(1){
printf(연도를 입력하세요.(종료,y0));scanf(%ld,&year);
printf(달을 입력하세요.(종료=0));scanf(%d,&month);
if(month==0||year0)
exit(1);
printcalender(year,month);
}
}

void printcalender(long year,int month){
long daycnter;
int day[6][7];
int i,j,num=-1;

daycnter=365*(year-1)+yyearcnter(year-1);
daycnter+=dayadder(year,month-1);
printf(======%d년 %d월======\n,year,month);
printf(일 월 화 수 목 금 토\n);

for(i=0;i6;i++){
for(j=0;j7;j++)
day[i][j]=num++;
}

for(i=0;i6;i++){
for(j=0;j7;j++)
day[i][j]-=(daycnter%7-1);
}

for(i=0;i6;i++){
for(j=0;j7;j++){
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if(day[i][j]31||day[i][j]1)
printf( \t);
else
printf(%d\t,day[i][j]);
}
else if(month!=2){
if(day[i][j]30||day[i][j]1)
printf( \t);
else
printf(%d\t,day[i][j]);
}
else{
if(detector(year)==0){
if(day[i][j]29||day[i][j]1)
printf( \t);
else
printf(%d\t,day[i][j]);
}
else{
if(day[i][j]28||day[i][j]1)
printf( \t);
else
printf(%d\t,day[i][j]);
}
}
}
printf(\n);
}
}

long yyearcnter(long year){
long yearcnt=0;
int i;

for(i=1;i=year;i++){
if(detector((long)i)==0)
yearcnt++;
}
return yearcnt;
}

long dayadder(long year,int month){
long daycnt=0;

switch(month){
case 1://1월
daycnt+=31;
break;
case 2://2월
if(detector(year)==0)
daycnt+=31+29;
else
daycnt+=31+28;
break;
case 3://3월
if(detector(year)==0)
daycnt+=31+29+31;
else
daycnt+=31+28+31;
break;
case 4://4월
if(detector(year)==0)
daycnt+=31+29+31+30;
else
daycnt+=31+28+31+30;
break;
case 5://5월
if(detector(year)==0)
daycnt+=31+29+31+30+31;
else
daycnt+=31+28+31+30+31;
break;
case 6://6월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30;
else
daycnt+=31+28+31+30+31+30;
break;
case 7://7월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31;
else
daycnt+=31+28+31+30+31+30+31;
break;
case 8://8월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31+31;
else
daycnt+=31+28+31+30+31+30+31+31;
break;
case 9://9월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31+31+30;
else
daycnt+=31+28+31+30+31+30+31+31+30;
break;
case 10://10월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31+31+30+31;
else
daycnt+=31+28+31+30+31+30+31+31+30+31;
break;
case 11://11월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31+31+30+31+30;
else
daycnt+=31+28+31+30+31+30+31+31+30+31+30;
break;
case 12://12월
if(detector(year)==0)
daycnt+=31+29+31+30+31+30+31+31+30+31+30+31;
else
daycnt+=31+28+31+30+31+30+31+31+30+31+30+31;
break;
}
return daycnt;
}

int detector(long year){
if(year%4==0){
if(year%100==0){
if(year%400==0)
return 0;
else return 1;
}
return 0;
}
else return 1;
}

이동가능한 소스

#include stdio.h
#include stdlib.h
#include windows.h
#include conio.h#define esc 27
#define up 72
#define down 80
#define left 75
#define right 77
#define page_up 73
#define page_down 81
enum {hide, show}; //커서 감추는함수와 컬러함수는 수다님 강좌 pushpush에서 카피해왔습니다.
enum {
black, /* 0 : 까망 */
dark_blue, /* 1 : 어두운 파랑 */
dark_green, /* 2 : 어두운 초록 */
dark_sky_blue, /* 3 : 어두운 하늘 */
dark_red, /* 4 : 어두운 빨강 */
dark_violet, /* 5 : 어두운 어두운 보라 */
dark_yellow, /* 6 : 어두운 노랑 */
gray, /* 7 : 회색 */
dark_gray, /* 8 : 어두운 회색 */
blue, /* 9 : 파랑 */
green, /* 10 : 초록 */
sky_blue, /* 11 : 하늘 */
red, /* 12 : 빨강 */
violet, /* 13 : 보라 */
yellow, /* 14 : 노랑 */
white, /* 15 : 하양 */
};bool isleapyear(word wyear); //윤년검사 함수
void drawcalendar(systemtime day); //달력을 출력하는 함수
void drawmenu(); //메뉴출력함수
bool changeday(systemtime &day); //키입력을 받아서 날짜를 변경해주는 함수
void mday(systemtime &day); //minus day 날짜를 하루씩 감소
void pday(systemtime &day); // plus day 날짜를 하루씩증가
void mmonth(systemtime &day); //월을 감소
void pmonth(systemtime &day); //월을 증가
void myear(systemtime &day); //년감소
void pyear(systemtime &day); //년증가
void setcolor(int color); //글씨의 컬러를 변경
void cursorview(char show); //커서보이고 감추기함수const char *week[] = {일, 월, 화, 수, 목, 금, 토};
word day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //앞의 0은 배열을 쉽게 사용하기 위해서입니다.int main()
{
systemtime st; cursorview(hide);
getlocaltime(&st); while(true)
{
system(cls);
drawcalendar(st);
drawmenu();
if(changeday(st)) break;
} cursorview(show);
return 0;
}bool isleapyear(word wyear)
{
if(wyear % 4 == 0 && wyear % 100 != 0 || wyear % 400 == 0) return true;
return false;
}void drawcalendar(systemtime day)
{
int i, j, y, d = 1;
word weekoffirstday;
word today; if(day.wmonth == 2)
{
if(isleapyear(day.wyear)) day[2] = 29;
else day[2] = 28;
} weekoffirstday = (7 + day.wdayofweek + ((1 - day.wday) % 7)) % 7;
y = (day[day.wmonth] + weekoffirstday + 1) / 7;
if((day[day.wmonth] + weekoffirstday + 1) % 7) y++;
today = day.wday;
printf( ===== %d년 %d월 =====\n\n, day.wyear, day.wmonth);
for(i = 0; i 7; i++)
{
if(i == 0) setcolor(red);
else if(i == 6) setcolor(sky_blue);
else setcolor(white);
printf( %s , week[i]);
}
puts();
for(i = 0; i y; i++)
{
for(j = 0; j 7; j++)
{
if(i == 0 && weekoffirstday j) printf( );
else
{
if(j == 0) setcolor(red);
else if(j == 6) setcolor(sky_blue);
else setcolor(white);
if(d == today) setcolor(green);
if(d day[day.wmonth]) break;
printf(%3d , d++);
}
}
puts();
}
setcolor(white);
}void drawmenu()
{
puts();
printf(left/right/down/up : 일월\n page_down/page_up : 연도\n);
}bool changeday(systemtime &day)
{
int ch ; ch = getch();
if(ch == esc) return true;
else if( ch == 0xe0 || ch == 0 )
{
ch = getch();
switch( ch )
{
case left :
mday(day);
return false;
case right :
pday(day);
return false;
case up :
pmonth(day);
return false;
case down :
mmonth(day);
return false;
case page_up :
pyear(day);
return false;
case page_down :
myear(day);
return false;
default : break;
}
}
return false;
}void mday(systemtime &day)
{
day.wday--;
if(day.wday == 0)
{
day.wmonth--;
if(day.wmonth == 0)
{
day.wyear--;
day.wmonth = 12;
}
else if(day.wmonth == 2)
{
if(isleapyear(day.wyear)) day[2] = 29;
else day[2] = 28;
}
day.wday = day[day.wmonth];
}
if(day.wdayofweek == 0) day.wdayofweek = 6;
else day.wdayofweek--;
}void pday(systemtime &day)
{
if(day.wmonth == 2)
{
if(isleapyear(day.wyear)) day[2] = 29;
else day[2] = 28;
}
day.wday++;
if(day.wday day[day.wmonth])
{
day.wmonth++;
if(day.wmonth == 13)
{
day.wyear++;
day.wmonth = 1;
}
day.wday = 1;
}
day.wdayofweek++;
if(day.wdayofweek == 7) day.wdayofweek = 0;
}void mmonth(systemtime &day)
{
if(isleapyear(day.wyear)) day[2] = 29;
else day[2] = 28;
day.wmonth--;
if(day.wmonth == 0)
{
day.wyear--;
day.wmonth = 12;
}
if(day[day.wmonth] day.wday)
{
day.wdayofweek = (7 + day.wdayofweek - ((day.wday) % 7)) % 7;
day.wday = day[day.wmonth];
}
else day.wdayofweek = (7 + day.wdayofweek - ((day[day.wmonth]) % 7)) % 7 ;
}void pmonth(systemtime &day)
{
if(isleapyear(day.wyear)) day[2] = 29;
else day[2] = 28;
day.wdayofweek = (day.wdayofweek + ((day[day.wmonth]) % 7)) % 7;
day.wmonth++;
if(day.wmonth == 13)
{
day.wyear++;
day.wmonth = 1;
}
if(day[day.wmonth] day.wday)
{
day.wdayofweek = (7 + day.wdayofweek - ((day.wday - day[day.wmonth]) % 7)) % 7;
day.wday = day[day.wmonth];
}
}void myear(systemtime &day)
{
word days;
word year;
word today; today = day.wday; if(day.wmonth 2) year = day.wyear;
else year = day.wyear - 1;
day.wyear--;
if(isleapyear(year))
{
day[2] = 29;
days = 366;
}
else
{
day[2] = 28;
days = 365;
}
day.wdayofweek = (7 + day.wdayofweek - ((days) % 7)) % 7 ;
if(day.wmonth == 2 && today == 29)
{
day.wday = 28;
day.wdayofweek = (7 + day.wdayofweek - ((days) % 7)) % 7 ;
}
}void pyear(systemtime &day)
{
word days;
word year;
word today; today = day.wday; if(day.wmonth = 2) year = day.wyear;
else year = day.wyear + 1;
day.wyear+y.wyear++;
if(isleapyear(year))
{
day[2] = 29;
days = 366;
}
else
{
day[2] = 28;
days = 365;
}
day.wdayofweek = (day.wdayofweek + ((days) % 7)) % 7 ;
if(day.wmonth == 2 && today == 29)
{
day.wday = 28;
day.wdayofweek = (7 + day.wdayofweek - ((days - 1) % 7)) % 7 ;
}
}void setcolor(int color)
{
setconsoletextattribute(getstdhandle(std_output_handle), color);
}void cursorview(char show)
{
handle hconsole;
console_cursor_info consolecursor; hconsole = getstdhandle(std_output_handle); consolecursor.bvisible = show;
consolecursor.dwsize = 1; setconsolecursorinfo(hconsole , &consolecursor);
}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2700510 c언어를 어케하면 잘할수 있을까요.. 연연두 2025-07-05
2700484 두 개가 차이가 뭔지 알려주세요...(소수 찾는 프로그램) (2) 날위해 2025-07-05
2700426 인터넷 창 띄우는 질문이요 (1) 정훈 2025-07-04
2700400 원넓이를 계산이요 ㅜㅜ 천칭자리 2025-07-04
2700368 if에 관해서 질문이요... Orange 2025-07-04
2700339 이거 결과값이 왜이런건지.. (4) 그댸와나 2025-07-04
2700313 파일 읽어서 저장하는데 빈파일일 경우 문재가 발생하네요.. (2) 크나 2025-07-03
2700287 구조체 동적할당 연습을 하는데 오류가 뜹니다...(해결) (3) 아련나래 2025-07-03
2700264 문자와 숫자 동시에 입력??? 글고운 2025-07-03
2700236 txt파일로만 쓰고 읽게 하려면 어떻게 해야 하나요..?? (8) 미국녀 2025-07-03
2700211 전위 연산자 (2) 어른처럼 2025-07-02
2700183 C에서 파일이름을 받고, 그 파일의 사이즈를 출력해줘야하는데 내용이 출력이 안되네요 ;ㅅ; 피스케스 2025-07-02
2700150 꼭좀 도와주세요ㅠㅠㅠ 호습다 2025-07-02
2700095 연산문제...질문... 오빤테앵겨 2025-07-01
2700070 while문 , 3의배수 출력하는 프로그램좀 짜주세욤. 횃불 2025-07-01
2700041 초보인데요 ㅎ 배열안에 배열을 집어넣을수 있나요?? 헛장사 2025-07-01
2700012 배열// (1) 전갈자리 2025-07-01
2699895 무한루프에 빠집니다.!! 해결좀부탁드려요 (10) 선아 2025-06-30
2699842 질문을 너무 많이 하네여.....죄송.... (2) 해님꽃 2025-06-29
2699816 오류 질문입니다.. (1) 해비치 2025-06-29
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com