Programming Assignment #2 — Display a Calendar

Due: Tuesday, March 31, 2009 at 11:59pm

Abstract

Write a C program that displays a one-year calendar. Prompt the user for the day of the week on which January 1 falls, and whether or not the year is a leap year.

Outcomes

After successfully completing this assignment, you should be able to:–

·        Develop a C program on a Unix platform

·        Design a program that contains nested selection and iteration constructs

·        Use advanced formatting strings and conversion specifiers to do I/O in a C program

Before Starting

Re-read Chapters 1 and 2 and read §§3.1-3.5 of The C Programming Language, 2nd edition, by Kernighan and Ritchie.

Details about scanf() and printf() can be found in Appendix B, §§B1.2-B1.3, or by executing in a Linux command shell any of the commands:–

man printf
man scanf
info printf
info scanf

The Assignment

Write a C program called Calendar.c that displays a one-year calendar. The program should prompt the user for the day of the week on which January 1 falls, and then it should prompt whether or not the year is a leap year. The day that January 1 falls on should be coded as:–

·        0 – Sunday

·        1 – Monday

·        2 – Tuesday

·        3 – Wednesday

·        4 – Thursday

·        5 – Friday

·        6 – Saturday

The calendar should be formatted as shown in the sample execution below. Note that numbers are right-justified under the names of the days, and that two spaces separate the names of the days.

Include files

·        <stdio.h> provides printf and scanf

Assumptions and Restrictions

You may assume that the user enters valid data; that is, your program does not have to check for valid responses. You should not define any functions in the solution for this program other than the main() function.

Sample Execution

                        MONTHLY CALENDAR
 
This program displays a calendar.  You need to provide the day of the week
on which January 1 falls, and indicate whether or not the year is a leap year.
 
Enter the code number for the day of the week on which January 1 falls:
0- Sun    1- Mon    2- Tue    3- Wed    4- Thu    5- Fri    6- Sat
 
Enter day code now (0 - 6):  4
 
Is the calendar for a leap year? (type 1 for yes, 0 for no): 0
 
 
 
     ***    CALENDAR   ***
 
January
 
Sun  Mon  Tue  Wed  Thu  Fri  Sat
                      1    2    3
  4    5    6    7    8    9   10
 11   12   13   14   15   16   17
 18   19   20   21   22   23   24
 25   26   27   28   29   30   31
 
February
 
Sun  Mon  Tue  Wed  Thu  Fri  Sat
  1    2    3    4    5    6    7
  8    9   10   11   12   13   14
                 .
                 .
                 .

(output continues for all 12 months)

Implementation Notes

Since we have not yet studied arrays of strings, you should design your algorithm to use if-else or switch statements to print the month names and to set other variables.

Deliverables

Write a short file called README summarizing your program, how to run it, and detailing any problems that you had. From your CCC Linux account, submit your C source code file using the following turnin command:–

/cs/bin/turnin submit cs2301 PA2 Calendar.c README

Programs submitted after 11:59pm on due date (March 31) will be tagged as late, and will be subject to the late homework policy.

Grading

This assignment is worth twenty (20) points. Your program must compile without errors in order to receive any credit. It is suggested that before your submit your program, compile it again on a CCC system to be sure that it does not blow up or contain surprising warnings.

·        Correct compilation without warnings – 2 points

·        Satisfactory README file – 3 points

·        Correct execution with graders’ test cases – 5 points

·        Correct usage of scanf() to get inputs from user – 1 point

·        Correct usage of print() to print the various lines of the calendar – 3 points

·        Correct usage of conditional and loop statements – 6 points