МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Тернопільський національний технічний університет ім. Івана Пулюя
Кафедра інформатики і математичного моделювання
Курсова робота
З дисципліни«Програмування»
на тему
«Календар»
Зміст
Вступ ………………………………...………………………………… 2
Аналіз завдання ………………………………………………………. . 4
Розробка алгоритму функціонування ………………………………... 5
Опис основних змінних та функцій …………………………………. 6
Тестування програми …………………………………………………. .8
Висновки ………………………………………………………………...14
Перелік використаної літератури ……………………………………...15
Лістинг програми …………………………………………………….....16
Вступ
Серед основних функції програмних засобів виділяють: збір, обробку, передачу, збереження інформації; автоматизацію проектно-конструкторських та інших управлінських робіт.
Сучасний спеціаліст, пов'язаний с комп’ютерною автоматизацією обов’язково повинен володіти основами програмування, так як раціональне і правильне використання цифрового апарату є дуже важливим аспектом багатьох сучасних систем автоматики.
Щоб реалізувати завдання даної курсової роботи, я повинен створити програму для перегляду календаря на будь-який, заданий користувачем річ, а також визначення дня тижня за введеними роком, місяцем та днем. Справитися з цією задачею мені допоможе об’єктна-орієнтоване програмування, або ООП.
На даний момент ООП являється домінуючим стилем при створення програм.
ООП являється третім великим етапом (після структурного і модульного програмування) в процесі розвитку структурного підходу. Створювані в середині 70-х років великі програмні системи продемонстрували, що в рамках процедурно-орієнтованого стилю використання структурного підходу не дає бажаного результату. Число помилок, пов’язаних з неправильним використанням процедур і некоректним врахуванням взаємозв’язків між компонентами, стало нелінійно рости. Терміни уводу в експлуатацію цих систем постійно зривались. Зменшити число подібних помилок і спростити їх знаходження могла дозволити алгоритмічна декомпозиція, що орієнтується на «природні» елементи (об’єкти) простору вирішуваної задачі. В цьому випадку спрощувалось зіставлення програмованих конструкцій з модельованими об’єктами. Основним поняттям ООП являється клас, який можна розглядувати з двох сторін: по-перше, з позиції предметної області: клас відповідає певному характерному об’єкту цієї області. По-друге, з позиції технології програмування, що реалізує дані зіставлення: «клас» в ООП – це певна програмна структура, яка володіє трьома важливими властивостями: інкапсуляція, спадкування, ізоморфізму. Не мало важливі і такі властивості ООП: об’єктна-орієнтований аналіз предметної області, створення і знищення об’єктів, принципи організації взаємодії об’єктів.
Аналіз завдання
Метою роботи являється розробка програми на мові Сі для обробки даних. Моя програма повинна коректно обробляти дані, представлені у вигляді таблиці:
Назва місяця
Нд Пн Вт Ср Чт Пт Сб
Розроблена програма повинна виконувати наступні задачі:
Створювати календар на будь-який рік, заданий користувачем.
Визначати день тижня
Завершувати роботу.
Розробка алгоритму функціонування
Для виконання даної курсової роботи знадобиться стандартна бібліотека мови програмування Сі – time.h. Щоб створити календар на заданий рік, потрібно використовувати арифметичний тип time_t для представлення часу, та структуру struct tm,що містить компоненти календарного часу:
Ім’я
Опис
int tm_sec;
Секунди від початку хвилини(0,59)
int tm_min;
Хвили від початку години(0,59)
int tm_hour;
Години до півночі(0,23)
int tm_mday;
Число місяця(1,31)
int tm_mon;
Місяці після січня(0,11)
int tm_year;
Роки із 1900(в Windows), с 1970(в Unix)
int tm_wday;
Дні з неділі(0,6)
int tm_yday;
Дні з першого січня(0,365)
int tm_isdst;
Ознака літнього часу
Опис основних змінних та функцій
В програмі використовуються наступні основні функції:
Назва функції
Параметри
Призначення
void main
( )
основна функція програми
void intro
( )
титульна сторінка
void calendar
( )
визначення дня неділі
void calendar_1
( )
створення календаря
В програмі використовуються наступні основні змінні:
Назва змінної
Тип
Призначення
К-сть символів
ch
char
зберігає поточний пункт меню
1
i
int
лічильник циклу або елемент масиву
1
j
int
лічильник циклу або елемент масиву
1
m
int
лічильник масиву
1
*month[ ]
char
масив, що містить місяці
12
*wday[]
char
масив, що містить дні тижня
8
tm*timeinfo
struct
структура компонентів часу
1
year
int
зберігає поточний рік
1
month
int
зберігає поточний місяць
1
day
int
зберігає поточний день
1
В програмі використовуються наступні стандартні бібліотеки мови Сі:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
#include <time.h>
iostream.h - заголовний файл з класами, функціями і змінними для організації вводу-виводу в мові програмування C + +.
stdio.h - містить визначення макросів, константи та оголошення функцій і типів, що використовуються для різних операцій стандартного вводу і виводу.
conio.h - заголовний файл для створення текстового інтерфейсу користувача.
stdlib.h - заголовний файл, який містить у собі функції, що займаються виділенням пам'яті, контроль процесу виконання програми, перетворення типів та інші.
time.h – заголовний файл, що містить типи і функції для роботи з датою і часом.
Тестування програми
Після запуску програми перед користувачем з’явиться екран з титульною сторінкою.
/
Для продовження роботи потрібно натиснути будь-яку клавішу. Після чого з’явиться головне меню програми:
/
Тепер подивимось, що відбудеться при натисненні користувачем кожного пункту меню.
Нумерація пунктів – є нумерацією клавіш на клавіатурі.
При натисненні клавіші 1, програма запросить ввести рік, який потрібно вивести на екран:
/
/
Після уведення року, програма помісячно буде виводити результат виконання на екран:
/
/
Якщо рік буде уведено некоректно, то програма видасть відповідне повідомлення і знову повернеться до пункту введення року:
/
Після успішного виведення останнього місяця календаря, виведеться повідомлення із пропозицією повернутися до головного меню , або повністю завершити роботу програми.
/
При натисненні клавіші 2, програма почергово буде запрошувати ввід року, місяця і дня для визначення дня тижня.
/
/
/
Після уведення всіх даних, програма виведене на екран, який день тижня випаде в той рік, місяць та день, які ввів користувач та запитає, чи продовжити роботу далі, чи завершити роботу:
/
Якщо дані були введені некоректно, то видасться відповідне повідомлення:
/
3 – вихід із програми. При натисненні на клавіатурі клавіші 3 буде здійснено вихід.
Висновки
В процесі виконання курсової роботи, розроблена програма на мові Сі для обробки даних типу структура. Обробка даних включає:
Створення календаря на будь-який рік
Визначення дня неділі за введеними роком, місяцем та днем
Вихід із програми
Також в програмі розроблено титульну сторінку, яка містить інформацію про курсову роботу.
При розробці програми використовувалися функції, масиви, вказівники.
Перелік використаної літератури
Гукин Д. Язык программирования Си для «чайников» — М.: Диалектика,2006. — С. 352
Кочан С. Программирование на языке Си — 3-е изд. — М.: Вильямс, 2006. — С. 496
Шилдт Г. Полный справочник по C — 4-е изд. — М.: Вильямс, 2004. — С. 704
Прата С. Язык программирования С: Лекции и упражнения — 1-е изд. — М.: Вильямс, 2006. — С. 960
Керниган Б., Ритчи Д. Язык программирования Си — 2-е изд. — М.: Вильямс, 2007. — С. 304
Лістинг програми
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#include <time.h>
#include <windows.h>
void kalendar()
{ clrscr();
struct tm time_check;
int year, month, day;
char ch;
char Su[20]; CharToOem("недiля ", Su);
char Mo[20]; CharToOem("понедiлок", Mo);
char Tu[20]; CharToOem("вiвторок", Tu);
char We[20]; CharToOem("середа", We);
char Th[20]; CharToOem("четвер", Th);
char Fr[20]; CharToOem("п'ятниця", Fr);
char Sa[20]; CharToOem("субота", Sa);
char error[100]; CharToOem("Неправильно введенi данi", error);
char *wday[] = {Su, Mo, Tu, We, Th, Fr, Sa, error};
char year_1[100]; CharToOem("1 - Рiк(1970-2037): ", year_1);
char month_1[100]; CharToOem("2 - Мiсяць: ", month_1);
char day_1[100]; CharToOem("3 - День: ", day_1);
char rez[100]; CharToOem("Цим днем є ", rez);
char back[100]; CharToOem("0 - повернутися до головного меню \\ 1 - вихiд iз програми ", back);
textbackground(1);
textcolor(15);
clrscr();
clrscr();
cprintf("\n\r");
cprintf(year_1);
cscanf("%d", &year);
cprintf("\n\r");
cprintf(month_1);
cscanf("%d", &month);
cprintf("\n\r");
cprintf(day_1);
cscanf("%d", &day);
cprintf("\n\r");
cprintf("\n\r");
time_check.tm_year = year - 1900;
time_check.tm_mon = month - 1;
time_check.tm_mday = day;
time_check.tm_hour = 0;
time_check.tm_min = 0;
time_check.tm_sec = 1;
time_check.tm_isdst = -1;
if (mktime(&time_check) == -1)
time_check.tm_wday = 7;
if (mktime(&time_check) == -1) {cprintf(error);cprintf("\n\r"); cprintf("\n\r");} else {
cprintf(rez);
cprintf(wday[time_check.tm_wday]); cprintf("\n\r");
cprintf("\n\r"); }
cprintf(back); do ch=getch();while((ch!='0')&&(ch!='1'));
if (ch=='0')/*kalendar()*/return; else exit(0);
getchar(); getchar();
}
void kalendar_1()
{ clrscr();
char ch, start, ph;
time_t now;
struct tm * timeinfo;
int year, m, i, j;
char wday[100]; CharToOem(" Нд Пн Вт Ср Чт Пт Сб \n", wday);
char January[20]; CharToOem("Сiчень", January);
char February[20]; CharToOem("Лютий", February);
char March[20]; CharToOem("Березень", March);
char April[20]; CharToOem("Квiтень", April);
char May[20]; CharToOem("Травень", May);
char June[20]; CharToOem("Червень", June);
char July[20]; CharToOem("Липень", July);
char August[20]; CharToOem("Серпень", August);
char September[20]; CharToOem("Вересень", September);
char October[20]; CharToOem("Жовтень", October);
char November[20]; CharToOem("Листопад", November);
char December[20]; CharToOem("Грудень", December);
char error[200]; CharToOem("Некоректно введенi данi!", error);
char* month[] = {January,February,March,April,May,June,July,August,September,October,November,December};
char back[100]; CharToOem("0 - повернутися до головного меню \\ 1 - вихiд iз програми ", back);
char enter_year[200]; CharToOem("Введiть рiк (1970-2037): ", enter_year);
char xt[100]; CharToOem("Для продовження натиснiть '+' ", xt);
char weit[100]; CharToOem(" ('+' - наступний мiсяць \\ '-' - попереднiй мiсяць)", weit);
textbackground(1);
textcolor(7);
do{
clrscr();
cprintf("\n\r");
cprintf (enter_year); cscanf ("%d",&year);
time (&now);
timeinfo = localtime (&now);
timeinfo->tm_year = year-1900;
timeinfo->tm_mon = 0;
if(mktime (timeinfo)==-1) { cprintf("\n\r"); cprintf(error); getch(); getch();}
} while(mktime (timeinfo)==-1);
cprintf("\n\r"); cprintf("\n\r"); cprintf (xt);
m =-1; cprintf("\n\r");
while(m<12)
{ for(i=1; i<33; i++)
{ timeinfo->tm_mday = i;
mktime (timeinfo);
if(timeinfo->tm_mon > m)
{ do start=getch();while((start!='+') && (start!='-')); if(start=='+') {
clrscr(); cprintf("\n\r"); cprintf(" %d", year); cprintf("\n\r"); cprintf("\n\r"); textcolor(8); cprintf(weit);
textcolor(7); cprintf("\n\r"); cprintf("\n %s\n",month[timeinfo->tm_mon]); cprintf("\n\r");
cprintf("_______________________________\n"); cprintf("\n\r");
textcolor(14); cprintf(wday); cprintf("\n\r");
textcolor(7); cprintf("_______________________________\n"); cprintf("\n\r");
for(j=0;j<(timeinfo->tm_wday);j++)
cprintf(" ");
m++;
break; }
//-----------------------------------------------------------------
if(start=='-' && timeinfo->tm_mon!=1 ) { timeinfo->tm_mon=m-1; mktime (timeinfo); clrscr(); cprintf("\n\r"); cprintf(" %d", year); cprintf("\n\r"); cprintf("\n\r"); textcolor(8); cprintf(weit); textcolor(7);
cprintf("\n\r"); cprintf("\n %s\n",month[timeinfo->tm_mon]); cprintf("\n\r");
cprintf("_______________________________\n"); cprintf("\n\r");
textcolor(14); cprintf(wday); cprintf("\n\r");
textcolor(7); cprintf("_______________________________\n"); cprintf("\n\r");
for(j=0;j<(timeinfo->tm_wday);j++)
cprintf(" ");
m--;
break;} else { do ph=getch();while(ph!='+');}
}
if (m==11 && timeinfo->tm_mon ==0) { m++;
break;
}
cprintf("%4d",timeinfo->tm_mday
if(timeinfo->tm_wday==6)
printf("\n");
}
} cprintf("\n\r"); cprintf("\n\r");
cprintf(back); do ch=getch();while((ch!='0')&&(ch!='1'));
if (ch=='0')/*kalendar()*/return; else exit(0);
getchar(); getchar();
}
void intro();
void main()
{ intro(); char ch; char ch1[100];
char ch2[100];
char ch3[100];
char ch4[100];
clrscr();
do{
clrscr();
_setcursortype(_NOCURSOR);
CharToOem("1 - Перегляд календаря\n", ch1);
CharToOem("2 - Визначення дня недiлi\n", ch2);
CharToOem("3 - Вихiд\n", ch3);
CharToOem(" Натиснiть клавiшу, вiдповiдно до обраної дiї: ", ch4);
textbackground(1);
textcolor(15);
clrscr();
cprintf("\n\r");
cprintf(ch1);
cprintf("\n\r");
cprintf(ch2);
cprintf("\n\r");
cprintf(ch3);
cprintf("\n\r");
cprintf(ch4);
do ch=getch();while((ch!='1')&&(ch!='2')&&(ch!='3'));
if (ch=='3') exit(0);
if (ch=='2') kalendar ();
if (ch=='1') kalendar_1();
} while(1);
}
void intro(){
char ch1[100]; CharToOem(" Мiнiстерство освiти i науки України", ch1);
char ch2[100]; CharToOem(" Тернопiльський нацiональний технiчний унiверситет iменi Iвана Пулюя", ch2);
char ch3[100]; CharToOem(" Факультет комютерно-iнформацiйних систем i програмної iнженерiї", ch3);
char ch4[100]; CharToOem(" Курсова робота", ch4);
char ch5[100]; CharToOem(" на тему:", ch5);
char ch6[100]; CharToOem(" \"Створення календаря\"", ch6);
char ch7[100]; CharToOem(" Виконав", ch7);
char ch8[100]; CharToOem(" студент групи СI-11", ch8);
char ch9[100]; CharToOem(" Зеньков В.Л.", ch9);
char ch10[100]; CharToOem(" Прийняв", ch10);
char ch11[100]; CharToOem(" Гладьо Ю.Б.", ch11);
char ch12[100]; CharToOem(" Тернопiль 2011", ch12);
_setcursortype(_NOCURSOR);
textbackground(1);
textcolor(3);
clrscr();
cprintf("\n\r");
cprintf(ch1); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch2); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch3); cprintf("\n\r"); cprintf("\n\r"); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch4); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch5); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch6); cprintf("\n\r"); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch7); cprintf("\n\r");
cprintf(ch8); cprintf("\n\r");
cprintf(ch9); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch10);
cprintf(ch11); cprintf("\n\r"); cprintf("\n\r"); cprintf("\n\r"); cprintf("\n\r");
cprintf(ch12);
getch();
}