Разработка программы электронного календаря

Автор работы: Пользователь скрыл имя, 02 Декабря 2012 в 15:43, курсовая работа

Описание работы

Цель работы: цель данной курсовой работы - это закрепление и демонстрация данных, полученных при изучении курса «Информатика».
Выполнение работы требует творческого подхода и всестороннего изучения поставленной задачи.
Тема курсовой работы: Разработка программы электронного календаря.
Основные этапы курсовой работы:
- анализ поставленной задачи;
- выбор, обоснование и изложение метода решения поставленной задачи;
- построение алгоритма решения задачи;
- создание и отладка программы;

Содержание работы

Введение…………………………………………………………………………………………….3
Постановка задачи………………………………………………………………………………...4
Математические методы и средства решения задачи………………………………………...5
Описание данных………………………………………………………………………………....12
Алгоритмы и блок-схемы……………………………………………………………………….13
Программы на языке Pascal или Си с комментариями……………………………………..19
Текстовый пример……………………………………………………………………………….22
Руководство пользователя для работы программы………………………………………....24
Заключение………………………………………………………………………………………..26

Файлы: 1 файл

Курсач по инфе.doc

— 531.50 Кб (Скачать файл)
  • Удобная среда разработки, включающая функциональный отладчик, доступный в любой момент.
  • Контекстная справочная система, по которой можно изучать язык без обращения к сторонним источникам.
  • Высокая скорость компиляции, высокая скорость выполнения откомпилированных программ.
  • Встроенная возможность использовать вставки на языке ассемблера.

 

 

 

 

 

Недостатки

  • Компилятор рассчитан на реальный режим DOS, применение которого сходит на нет. Однако в последних версиях компилятора и среды введена поддержка защищенного  режима вместе с соответствующим наладчиком (TD).
  • В модуле CRT имеется ошибка (некорректный подсчёт количества циклов для функции delay, не рассчитанный на быстрые процессоры, процессоры с переменной частотой и многозадачные среды), из-за которой при запуске программы на компьютерах с тактовой частотой более 200 МГц сразу происходило аварийное завершение с сообщением « Runtime error 200 at…». Существуют разные варианты исправления модуля CRT. В варианте Клауса Хартнегга ошибка 200 не возникает, но длительность Delay на быстрых компьютерах меньше желаемой, и эта проблема по незнанию иногда тоже считается недостатком Turbo Pascal.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание данных.

 

Наименование

Тип

Назначение

a

word

Переменная  для дня

b

word

Переменная  для месяца

с

word

Переменная  для года

сh

char

Переменная  для вводимого символа

days

word

Счетчик номера дня в году

i

word

Cчетчик месяца


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Алгоритмы и  Блок-схемы.

Блок-схема программы

 

Блок-схема функции LeapYear

Блок-схема процедуры ReadDate

 

 

 

 

 

 

Блок-схема функции CheckDate

 

 

 

 

 

 

 

 

 

Псевдокод

Функция: LeapYear

 Назначение: Проверяет, является ли год високосным

 Параметры: y:word (год)

 Тип возвращаемого  значения: boolean

 Локальные  переменные: нет

 

  1. Начало

  2. Если ((y mod 4=0)и(y mod 100<>0))или(y mod 400=0), то LeapYear:=true, переход к п.4

  3. LeapYear:=false

  4. Возврат

 

 Функция: CheckDate

 Назначение: Проверяет, является ли дата  корректной

 Параметры: d,m,y:word (день, месяц, год)

 Тип возвращаемого  значения: boolean

 Локальные  переменные: нет

 

  1. Начало

  2. CheckDate:=true

  3. Если (d<1)или(m<1)или(y<1), то CheckDate:=false, переход к п.10

  4. Если m не принадлежит (1,3,5,7,8,10,12), то переход к п.6

  5. Если d>31, то CheckDate:=false, переход к п.10

  6. Если m не принадлежит (2), то переход к п.8

  7. Если (LeapYear(y)и(d>29))или(не LeapYear(y)и(d>28)), то CheckDate:=false, переход к п.10

  8. Если m не принадлежит (4,6,9,11), то CheckDate:=false, переход к п.10

  9. Если d>30, то CheckDate:=false, переход к п.10

  10. Возврат

 

 Процедура: ReadDate

 Назначение: Выполняте ввод и проверку  даты

 Параметры: нет

 Тип возвращаемого  значения: нет

 Локальные  переменные:

    days:word (счетчик количества дней)

    i:word (счетчик месяца)

 

  1. Начало

  2. Вывод  "День a="

  3. Ввод a

  4. Вывод"Месяц b="

  5. Ввод b

  6. Вывод"Год c="

  7. Ввод c

  8. Если не CheckDate(a,b,c), то переход к п.25

  9. Вывод  "Дата корректна"

  10. days:=0

  11. i:=1

  12. Если i>=b, то переход к п.20

  13. Если i принадлежит (1,3,5,7,8,10,12), то days:=days+31, переход к п.19

  14. Если i не принадлежит (2), то переход к п.18

  16. Если LeapYear(c), то days:=days+29, переход к п.19

  17. days:=days+28, переход к п.19

  18. Если i принадлежит (4,6,9,11), то days:=days+30

  19. i:=i+1, переход к п.12

  20. days:=days+a

  21. Вывод  "Номер дня в году:", days

  22. Если LeapYear(c), то переход к п.24

  23. Вывод  "Дней до конца года: ", 365-days, переход к   п.26

  24. Вывод  "Дней до конца года: ", 366-days, переход к п.26

  25. Вывод  "Дата некорректна"

  26. Вывод  "Нажмите любую клавишу"

  27. readkey

  28. Возврат

 

 

 

Программа: curs.pas

Назначение: Ввод даты, проверка ее корректности, вывод номера дня и количества дней до конца года

Параметры: нет

Тип возвращаемого  значения: нет

 Переменные:

  a,b,c:word (день, месяц, год)

  ch:char (символ)

 

 

  1. Начало

  2. clrscr

  3. Вывод  "--------МЕНЮ--------"

  4. Вывод  "1. Справка"

  5. Вывод  "2. Запуск программы"

  6. Вывод  "3. Выход"

  7. ch:=readkey

  8. Если ch≠'1', то переход к п.12

  9. Вывод  "Справка: Программа для проверки  корректности введенной даты"

  10. Вывод  "Нажмите любую клавишу";

  11. readkey, переход к п.14

  12. Если ch≠'2', то переход к п.14

  13. ReadDate

  14. Если ch≠'3', то переход к п.2

  15. Выход

 

 

Данные для  проверки

 

Год является високосным в следующих случаях:

- год кратен 4 и не кратен 100;

- год кратен 400;

Год не является високосным в следующих случаях:

- год не кратен 4;

- год кратен 100 и не кратен 400;

 

Високосные  года:    1600, 1996, 2000, 2004, 2008, 2012

Не високосные года: 1700, 1800, 1900, 2001, 2010, 2100

 

Корректные  даты:

29.02.1600

29.02.1996

29.02.2000

29.02.2004

29.02.2008

29.02.2012

Не корректные даты:

29.02.1700

29.02.1800

29.02.1900

29.02.2001

29.02.2010

29.02.2100

 

 

 

 

 

 

Текст программы с комментариями (curscomm.pas)

 

program curs;

uses crt; {Подключаемый модуль содержит процедуру clrscr (очистка экрана) и функцию readkey (считывание символа)}

var

  a,b,c:word; {переменные для дня, месяца и года}

  ch:char; {переменная для вводимого символа} 

 

  function LeapYear(y:word):boolean; {функция для проверки високосности года, возвращает true, если год високосные и false, если нет}

  begin

    if ((y mod 4=0)and(y mod 100<>0))or(y mod 400=0) then LeapYear:=true {Год является високосным в следующих случаях: (год кратен 4 и не кратен 100) или (год кратен 400)}

    else LeapYear:=false; {иначе год не високосный}

  end; {конец функции LeapYear} 

 

  function CheckDate(d,m,y:word):boolean; {функция для проверки корректности даты, возвражает true, если дата корректна и false, если нет}

  {параметры функции: d-день, m-месяц, y-год}

  begin

    CheckDate:=true; {изначально предполагаем, что дата корректна, далее проверяем условия, когда она некорректна}

    if (d<1)or(m<1)or(y<1) then CheckDate:=false {если день, месяц или год меньше 1, то дата некорректна}

    else {иначе проверяем месяц}

      case m of

        1,3,5,7,8,10,12: if d>31 then CheckDate:=false; {для месяцев, в которых 31 день: если введенный день больше 31, то дата некорректна}

        2: if (LeapYear(y) and (d>29)) or (not LeapYear(y) and (d>28)) then CheckDate:=false; {для февраля: (если високосный год и день больше 29)или(не високосный и день больше 28), то дата некорректна}

        4,6,9,11: if d>30 then CheckDate:=false; {для месяцев, в которых 30 дней: если день больше 30, то дата некорректна}

        else {при всех других значениях месяца дата некорректна}

          CheckDate:=false;

      end; {конец оператора case}

  end; {конец функции CheckDate} 

 

  procedure ReadDate; {процедура ввода и проверки даты}

  var

    days,i:word; {days - счетчик номера дня в году, i - счетчик месяца}

  begin

    write('День a=');

    readln(a); {читаем день}

    write('Месяц b=');

    readln(b); {читаем месяц}

    write('Год c=');

    readln(c); {читаем год}

    if CheckDate(a,b,c) then {проверяем введенные данные, передавая a, b и c в качестве параметров d,m и y}

      begin {если Функция CheckDate вернула значение true, то введенная дата корректна}

      writeln('Дата  корректна');

      days:=0; {инициализируем счетчик количества дней}

      i:=1; {инициализируем счетчик месяцев}

      while i<b do {для каждого полного месяца, прошедшего с начала года до введенной даты посчитаем количество дней}

        begin

        case i of

          1,3,5,7,8,10,12: days:=days+31; {в случае если месяц из 31 дня, то добавляем к счетчику дней 31}

          2: if LeapYear(c) then days:=days+29 else days:=days+28; {если февраль: если год високосный, то добавим 29, иначе добавим 28}

          4,6,9,11: days:=days+30; {для остальных месяцев добавим 30}

        end; {конец оператора case}

        i:=i+1; {переходим к следующему месяцу}

       end; {конец цикла while}

      days:=days+a; {добавим к счетчику количество дней, прошедших в текущем месяце}

      writeln('Номер  дня в году: ',days); {выводим номер дня}

      if LeapYear(c) then writeln('Дней до конца года: ',366-days) {выводим количество дней до конца месяца, для високосного года на день 1 больше}

      else writeln('Дней до конца года: ',365-days);

      end {конец условия CheckDate=true оператора if}

    else

      writeln('Дата  некорректна'); {если функция CheckDate вернула значение false, то дата некорректна}

    writeln('Нажмите  любую клавишу');

    readkey; {ждем нажатия клавиши}

  end; {конец процедуры ReadDate} 

 

begin

  repeat

    clrscr; {очищаем экран и выводим меню}

    writeln('--------МЕНЮ--------');

    writeln('1. Справка');

    writeln('2. Запуск  программы');

    writeln('3. Выход');

    ch:=readkey; {ждем выбора пункта меню - нажатия клавиши}

    if ch='1' then {если нажали '1'}

      begin

      writeln('Справка:  Программа для проверки корректности  введенной даты'); {выводим справку}

      writeln('Нажмите  любую клавишу');

      readkey; {ждем нажатия клавиши}

      end

    else if ch='2' then {если нажали '2'}

      ReadDate; {вызываем процещуру ввода и проверки даты}

  until ch='3'; {повторяем работу в меню, пока не нажали '3'}

end. {конец программы}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Текстовые примеры:

 

 

 

 

 

 

Проверка на некорректность даты:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Руководство пользователя для работы с данной программой:

 

  1. Откройте программу в Паскале.

 

2) Запустите программу, нажав Run на панели меню.

  1. В открывшемся окне введите с клавиатуры числа а- день, b- месяц, с- год.

 

4) Нажмите Enter для получения результата

 

 

6) Нажатием любой клавиши,  очистите окно. Введите любые  другие значения a, b, c.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

Мною разработана программа  электронного календаря. Решая данную задачу, я закрепила навыки работы на языке программирования Паскаль. Созданная мною программа обеспечивает выполнение поставленной задачи в  данной курсовой работе. Представлены блок-схемы программы, псевдокод, а также продемонстрирована работа программы. Поставленная задача выполнена.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список литературы:

1) Могилев А. В., Пак  Н. И., Хенер Е. К. Информатика:  учебное пособие для студентов ВУЗов./ Москва.: издательский центр «Академия», 2005. – 816 стр.

2) Абрамов В.Г., Трифонов Н.П. Введение в язык Паскаль. – М. :Наука,

1988.-320 с.

3) Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов.-М.:Наука, 1989.-160с.




Информация о работе Разработка программы электронного календаря