Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Аналоговые часы с будильником

Читайте также:
  1. Аналоговые запоминающие осциллографы
  2. Аппаратная база: аналоговые матрицы
  3. Электронные аналоговые вольтметры

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Им. Н.Э. БАУМАНА

Кафедра ИУ-7

Программное обеспечение ЭВМ

И информационные технологии.

Отчёт

по проекту «Органайзер»

Студент группы Э3-22: Пятин Иван

Преподаватель: Неземский Валентин Иванович

Москва 2013 г.

Цель проекта.

Закрепление полученных компетенций (знаний, умений и навыков) в первом семестре и приобретении новых знаний по визуальному объектно-ориентированному программированию

Содержания проекта:

 

Проект содержит следующие приложения:

1. Календарь………………………………………………………………………….… 3стр.

2. Аналоговые и электронные часы с будильником…………………………….... 9стр.

3. Научный калькулятор………………………………………………………………13стр.

4. Обработка массивов…………………………………………………………………21стр.

5. Записная книжка…………………………………………………………………….25стр.

6. Типовой расчет №1 по Мат. Анализу……………………………………………..28стр.

7. Забавная игра…………………………………………………………………………34стр.

8. Динамическая картинка…………………………………………………………….38стр.

9. Обработка строк………………………………………………………………………44стр.

10. Построение графиков………………………………………………………………..46стр.

 

Литература, используемая в ходе работы над проектом:

М.Фленов Библия Delphi 2011

C Бобровский Delphi 7 2006

А.Я. Архангельский Программирование в Delphi 6

 

 

Календарь

 

Интерфейс:

 

Код программы

 

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, ExtCtrls, DateUtils, StdCtrls;

 

type

TForm1 = class(TForm)

Timer1: TTimer;

StringGrid1: TStringGrid;

Panel1: TPanel;

Button1: TButton;

Button2: TButton;

Edit1: TEdit;1

Label1: TLabel;

Button3: TButton;

Button4: TButton;

procedure Button4Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

var

year,month,day:word;

date:TdateTime;

b:boolean;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var

firstday:TDateTime;

fd,i,j:integer;

st:string;

begin

b:=false;

if month=12 then

begin

month:=1;

year:=year+1;

end

else

month:=month+1;

date:=encodedate(year,month,day);

panel1.caption:=LongMonthNames[MonthOfTheYear(date)]+' '+inttostr(year);

firstday:=incday(date,(-1)*day+1);

fd:=DayOfTheWeek(firstday);

for i:=0 to stringgrid1.ColCount-1 do

for j:=1 to stringgrid1.rowcount-1 do

begin

if ((7*(j-1)+i-fd+2)>0) and (j<(stringgrid1.rowcount-2)) then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (j=(stringgrid1.rowcount-2)) or (j=(stringgrid1.rowcount-1)) then

begin

if (month=1) or (month=3) or (month=5) or (month=7) or (month=8) or (month=10) or (month=12) then

begin

if (7*(j-1)+i-fd+2)<=31 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>31 then

stringgrid1.cells[i,j]:='';

end;

if (month=4) or (month=6) or (month=9) or (month=11) then

begin

if (7*(j-1)+i-fd+2)<=30 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>30 then

stringgrid1.cells[i,j]:='';

end;

if (month=2) then

begin

if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then

begin

if (7*(j-1)+i-fd+2)<=29 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>29 then

stringgrid1.cells[i,j]:='';

end

else

begin

if (7*(j-1)+i-fd+2)<=28 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>28 then

stringgrid1.cells[i,j]:='';

end;

end;

end;

end; // for

for i:=0 to fd-2 do

stringgrid1.Cells[i,1]:='';

end;

 

procedure TForm1.Button2Click(Sender: TObject);

var

firstday:TDateTime;

fd,i,j:integer;

st:string;

begin

b:=false;

if month=1 then

begin

month:=12;

year:=year-1;

end

else

month:=month-1;

date:=encodedate(year,month,day);

panel1.caption:=LongMonthNames[MonthOfTheYear(date)]+' '+inttostr(year);

firstday:=incday(date,(-1)*day+1);

fd:=DayOfTheWeek(firstday);

for i:=0 to stringgrid1.ColCount-1 do

for j:=1 to stringgrid1.rowcount-1 do

begin

if ((7*(j-1)+i-fd+2)>0) and (j<(stringgrid1.rowcount-2)) then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (j=(stringgrid1.rowcount-2)) or (j=(stringgrid1.rowcount-1)) then

begin

if (month=1) or (month=3) or (month=5) or (month=7) or (month=8) or (month=10) or (month=12) then

begin

if (7*(j-1)+i-fd+2)<=31 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>31 then

stringgrid1.cells[i,j]:='';

end;

if (month=4) or (month=6) or (month=9) or (month=11) then

begin

if (7*(j-1)+i-fd+2)<=30 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>30 then

stringgrid1.cells[i,j]:='';

end;

if (month=2) then

begin

if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then

begin

if (7*(j-1)+i-fd+2)<=29 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>29 then

stringgrid1.cells[i,j]:='';

end

else

begin

if (7*(j-1)+i-fd+2)<=28 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>28 then

stringgrid1.cells[i,j]:='';

end;

end;

end;

end; // for

for i:=0 to fd-2 do

stringgrid1.Cells[i,1]:='';

end;

 

procedure TForm1.Button3Click(Sender: TObject);

var

date1:TDateTime;

firstday:TDateTime;

fd,i,j:integer;

st:string;

begin

b:=true;

try

date1:=strtodate(edit1.Text);

decodedate(date1,year,month,day);

date:=encodedate(year,month,day);

panel1.caption:=LongMonthNames[MonthOfTheYear(date)]+' '+inttostr(year);

firstday:=incday(date,(-1)*day+1);

fd:=DayOfTheWeek(firstday);

for i:=0 to stringgrid1.ColCount-1 do

for j:=1 to stringgrid1.rowcount-1 do

begin

if ((7*(j-1)+i-fd+2)>0) and (j<(stringgrid1.rowcount-2)) then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (j=(stringgrid1.rowcount-2)) or (j=(stringgrid1.rowcount-1)) then

begin

if (month=1) or (month=3) or (month=5) or (month=7) or (month=8) or (month=10) or (month=12) then

begin

if (7*(j-1)+i-fd+2)<=31 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>31 then

stringgrid1.cells[i,j]:='';

end;

if (month=4) or (month=6) or (month=9) or (month=11) then

begin

if (7*(j-1)+i-fd+2)<=30 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>30 then

stringgrid1.cells[i,j]:='';

end;

if (month=2) then

begin

if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then

begin

if (7*(j-1)+i-fd+2)<=29 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>29 then

stringgrid1.cells[i,j]:='';

end

else

begin

if (7*(j-1)+i-fd+2)<=28 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>28 then

stringgrid1.cells[i,j]:='';

end;

end;

end;

end; // for

for i:=0 to fd-2 do

stringgrid1.Cells[i,1]:='';

Except

showmessage('Неверный ввод');

end;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

var

date1:TDateTime;

firstday:TDateTime;

fd,i,j:integer;

begin

decodedate(now,year,month,day);

date:=encodedate(year,month,day);

panel1.caption:=LongMonthNames[MonthOfTheYear(date)]+' '+inttostr(year);

firstday:=incday(date,(-1)*day+1);

fd:=DayOfTheWeek(firstday);

for i:=0 to stringgrid1.ColCount-1 do

for j:=1 to stringgrid1.rowcount-1 do

begin

if ((7*(j-1)+i-fd+2)>0) and (j<(stringgrid1.rowcount-2)) then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (j=(stringgrid1.rowcount-2)) or (j=(stringgrid1.rowcount-1)) then

begin

if (month=1) or (month=3) or (month=5) or (month=7) or (month=8) or (month=10) or (month=12) then

begin

if (7*(j-1)+i-fd+2)<=31 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>31 then

stringgrid1.cells[i,j]:='';

end;

if (month=4) or (month=6) or (month=9) or (month=11) then

begin

if (7*(j-1)+i-fd+2)<=30 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>30 then

stringgrid1.cells[i,j]:='';

end;

if (month=2) then

begin

if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then

begin

if (7*(j-1)+i-fd+2)<=29 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>29 then

stringgrid1.cells[i,j]:='';

end

else

begin

if (7*(j-1)+i-fd+2)<=28 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>28 then

stringgrid1.cells[i,j]:='';

end;

end;

end;

end; // for

for i:=0 to fd-2 do

stringgrid1.Cells[i,1]:='';

end;

 

procedure TForm1.FormCreate(Sender: TObject);

var

firstday:TDateTime;

fd,i,j:integer;

st:string;

begin

with stringgrid1 do

begin

cells[0,0]:='Пн';

cells[1,0]:='Вт';

cells[2,0]:='Ср';

cells[3,0]:='Чт';

cells[4,0]:='Пт';

cells[5,0]:='Сб';

cells[6,0]:='Вс';

end;

decodedate(now,year,month,day);

date:=encodedate(year,month,day);

panel1.caption:=LongMonthNames[MonthOfTheYear(date)]+' '+inttostr(year);

firstday:=incday(date,(-1)*day+1);

fd:=DayOfTheWeek(firstday);

for i:=0 to stringgrid1.ColCount-1 do

for j:=1 to stringgrid1.rowcount-1 do

begin

if ((7*(j-1)+i-fd+2)>0) and (j<(stringgrid1.rowcount-2)) then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (j=(stringgrid1.rowcount-2)) or (j=(stringgrid1.rowcount-1)) then

begin

if (month=1) or (month=3) or (month=5) or (month=7) or (month=8) or (month=10) or (month=12) then

begin

if (7*(j-1)+i-fd+2)<=31 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>31 then

stringgrid1.cells[i,j]:='';

end;

if (month=4) or (month=6) or (month=9) or (month=11) then

begin

if (7*(j-1)+i-fd+2)<=30 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>30 then

stringgrid1.cells[i,j]:='';

end;

if (month=2) then

begin

if ((year mod 4=0) and (year mod 100<>0)) or (year mod 400=0) then

begin

if (7*(j-1)+i-fd+2)<=29 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>29 then

stringgrid1.cells[i,j]:='';

end

else

begin

if (7*(j-1)+i-fd+2)<=28 then

stringgrid1.cells[i,j]:=inttostr(7*(j-1)+i-fd+2);

if (7*(j-1)+i-fd+2)>28 then

stringgrid1.cells[i,j]:='';

end;

end;

end; // for

for i:=0 to fd-2 do

stringgrid1.Cells[i,1]:='';

end;

 

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

var

year1,month1,day1:word;

begin

with stringgrid1.Canvas do

begin

brush.color:=clred;

if ACol=6 then

begin

FillRect(Rect);

TextOut(Rect.Left+2, Rect.Top+2, Stringgrid1.Cells[ACol, ARow]);

end;

brush.color:=claqua;

pen.Color:=clblack;

pen.Width:=4;

decodedate(now,year1,month1,day1);

if ((year1=year) and (month1=month)) or (b=true) then

if stringgrid1.Cells[ACol,ARow]=inttostr(day) then

begin

rectangle(rect.Left-2,rect.Top,rect.Right,rect.Bottom);

TextOut(Rect.Left+2, Rect.Top+2, Stringgrid1.Cells[ACol, ARow]);

End; end.

 

 

Аналоговые часы с будильником

 

Интерфейс:

 

Код программы:

unit unit2_;

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, ComCtrls, Menus;

 

type

TForm2 = class(TForm)

Timer1: TTimer;

Label1: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

procedure FormCreate(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

// эти объявления вставлены вручную

procedure Vector(x0,y0,a,l: integer);

procedure DrawClock;

procedure N2Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

a:string;

Form2: TForm2;

 

implementation

 

uses

DateUtils; // для доступа к SecondOf,

// MinuteOf и HourOf

 

const

R = 85; // радиус циферблата часов

var

x0,y0: integer; // центр циферблата

ahr,amin,asec: integer; // положение стрелок (угол)

// инициализация формы

procedure TForm2.FormCreate(Sender: TObject);

var

t: TDateTime;

begin

// зададим размер формы

// в соответствии с размером циферблата

x0:= R+10;

y0:= R+10;

t:= Now();

 

// положение стрелок

ahr:= 90 - HourOf(t)*30-(MinuteOf(Today)div 12)*6;

amin:= 90 - MinuteOf(t)*6;

asec:= 90 - SecondOf(Today)*6;

Timer1.Interval:= 1000; // период сигнал от таймера 1 сек

Timer1.Enabled:= True; // пуск таймера

end;

// вычерчивает вектор заданной длины из точки (x0,y0)

procedure TForm2.Vector(x0,y0: integer; a, l: integer);

// x0,y0 - начало вектора

// a - угол между осью x и вектором

// l - длина вектора

const

GRAD = 0.0174532; // коэффициент пересчета угла из градусов в радианы

var

x,y: integer; // координаты конца вектора

begin

Canvas.MoveTo(x0,y0);

x:= Round(x0 + l*cos(a*GRAD));

y:= Round(y0 - l*sin(a*GRAD));

Canvas.LineTo(x,y);

end;

// рисует стрелки

procedure TForm2.DrawClock;

 

var

t: TDateTime;

begin

// шаг секундной и минутной стрелок 6 градусов,

// часовой - 30.

// стереть изображение стрелок

Canvas.Pen.Color:= clLime;

Canvas.Pen.Width:=3;

// часовую

Vector(x0,y0, ahr, R-30);

// минутную

Vector(x0,y0, amin, R-15);

// секундную

Vector(x0,y0, asec, R-7);

t:= Now();

 

// новое положение стрелок

ahr:= 90 - HourOf(t)*30-(MinuteOf(t)div 12)*6;

amin:= 90 - MinuteOf(t)*6;

asec:= 90 - SecondOf(t)*6;

// нарисовать стрелки

// часовая стрелка

Canvas.Pen.Width:= 3;

Canvas.Pen.Color:= clWhite;

Vector(x0,y0, ahr, R-25);

// минутная стрелка

Canvas.Pen.Width:= 2;

Canvas.Pen.Color:= clWhite;

Vector(x0,y0, amin, R-10);

// секундная стрелка

Canvas.Pen.Width:= 1;

Canvas.Pen.Color:= clGreen;

Vector(x0,y0, asec, R-18);

end;

// прорисовка циферблата и начальных стрелок

procedure TForm2.FormPaint(Sender: TObject);

var

x,y: integer; // координаты маркера на циферблате

a: integer; // угол между OX и прямой (x0,yo) (x,y)

pc: TColor; // цвет карандаша

pw: integer; // ширина карандаша

s1,s2,s3,s4:string; //цифры циферблата

begin

pc:= Canvas.Pen.Color;

pw:= Canvas.Pen.Width;

 

Canvas.Pen.Width:= 1;

Canvas.Pen.Color:= clWhite;

 

a:=0; // метки ставим от 3-х часов, против

// часовой стрелки

// циферблат

while a < 360 do

begin

x:=x0+Round(R * cos(a*2*pi/360));

y:=x0-Round(R * sin(a*2*pi/360));

Form2.Canvas.MoveTo(x,y);

if (a mod 30) = 0

then Canvas.Ellipse(x-2,y-2,x+3,y+3)

else Canvas.Ellipse(x-1,y-1,x+1,y+1);

a:=a+6; // 1 минута - 6 градусов

begin

s1:='12';

Canvas.Font.Color:=clwhite;

Form2.Canvas.TextOut(86, 18, s1);

s2:='3';

Canvas.Font.Color:=clwhite;

Form2.Canvas.TextOut(165, 85, s2);

s3:='6';

Canvas.Font.Color:=clwhite;

Form2.Canvas.TextOut(89, 157, s3);

s4:='9';

Canvas.Font.Color:=clwhite;

Form2.Canvas.TextOut(15, 85, s4);

end;

end;

// восстановить карандаш кисть

Canvas.Pen.Width:= pw;

Canvas.Pen.Color:= pc;

END;

 

procedure TForm2.N2Click(Sender: TObject);

begin

end;

 

// прорисовка текущих положений стрелок часов

procedure TForm2.Timer1Timer(Sender: TObject);

 

begin

DrawClock;

form2.ClientHeight:=3*R;

form2.ClientWidth:=2*R+20;

label1.Caption:=timetostr (time); //цифровые часы

end;

end.

 

unit Unit3;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

 

type

TForm4 = class(TForm)

Edit1..2: TEdit;

Timer1..2: TTimer;

Button1..2: TButton;

Panel1: TPanel;

Label1..3: TLabel;

procedure Timer1Timer(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

 

var

st:systemtime;

Form4: TForm4;

 

implementation

//считываем время

procedure TForm4.Button1Click(Sender: TObject);

begin

Timer2.Enabled:=true;

end;

//сбрасываем время

procedure TForm4.Button2Click(Sender: TObject);

begin

Timer2.Enabled:=false;

end;

//Информируется текущем времени с Windows и вставляет в цифровые час

procedure TForm4.Timer1Timer(Sender: TObject);

begin

getlocaltime(ST);

Panel1.Caption:=IntToStr(ST.wHour)+':'+IntToStr(ST.wMinute)+

':'+IntToStr(ST.wSecond);

end;

//Сравнивает, если совпадает то дает сигнал

procedure TForm4.Timer2Timer(Sender: TObject);

begin

getlocaltime(ST);

if (ST.Whour=StrToInt(Edit1.Text))and (ST.WMinute=StrToInt(Edit2.Text)) then beep;

end;

end.

 


Дата добавления: 2015-10-23; просмотров: 517 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Метод измерения и описание аппаратуры| Научный калькулятор

mybiblioteka.su - 2015-2024 год. (0.075 сек.)