Q&A

  • 밑에 100%로 초보인데요 요금계산을..
저 어제도 말한 완전초보인데요

주차요금을 계산할려고 하는데요

시간을 타임컴포로 받아서 그걸 10분단위로 1000원씩 계산할려면 어떻게 해야합니까....

전혀 지식이 없는관계로 대놓고 물어보네요 많이 부끄럽고 죄송스럽지만 꼭알고싶어서요...
허접한 소스 올려봅니다 수정좀......

<!--codes-->

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls;


type

TForm1 = class(TForm)
    Edit1: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label1: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button1: TButton;
    Button2: TButton;
    Timer1timer: TTimer;
    edit2: TEdit;
    Button3: TButton;
    Edit6: TEdit;
    procedure Button3Click(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    //procedure TForm1.Timer1Timer(Sender: TObject);

  private
    { Private declarations }
    EditTime1 : TDateTime;
    EditTime2 : TDateTime;
    EditTime3 : TDateTime;
    EditTime4 : TDateTime;
    editmoney : integer;


  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function DayBetween(Date1, Date2: TDateTime): integer;

var
   Day1, Day2 : TDateTime;

begin
   //Day1 := StrToDate( `2009-12-31` );
   //Day2 := StrToDate( `2009-11-30` );

   Day1 := StrToDate( FormatDateTime('YYYY-MM-DD', Date1) );
   Day2 := StrToDate( FormatDateTime('YYYY-MM-DD', Date2) );

   Result := integer( Trunc( Day1 - Day2 ));

   end;


procedure TForm1.Button1Click(Sender: TObject);

begin
     EditTime1  := Now;
  Edit1.Text := FormatDateTime('YYYY-MM-DD  HH:NN:SS', EditTime1);

end;
//begin

  // 들어온 시간
//  EditTime2  := EditTime1;
  //Edit2.Text := Edit1.Text;
//end;

procedure TForm1.Edit3Change(Sender: TObject);
begin

      edittime2 := edittime1;
      edit2.Text := edit1.text;

end;

procedure TForm1.Button2Click(Sender: TObject);

   begin

   if (edit2.Text) ='' then
     begin
   showmessage('들어온 시간을 입력해주세요')  ;
   edit2.SetFocus;
   exit;
  end
else

// 나간 시간

  EditTime3  := now;
  Edit3.Text := FormatDateTime('yyyy-mm-dd HH:NN:SS', EditTime3);

// 주차한 시간

  EditTime4  := EditTime3 - EditTime2;
  Edit4.Text := FormatDateTime('HH:NN:SS', EditTime4);

// 날짜 차이

  Edit5.Text := IntToStr( DayBetween(EditTime3, EditTime2) );

end;



procedure TForm1.Button3Click(Sender: TObject);


// 여기서 계산을 하고싶은데요 뭐를 어찌해야할지 전혀 모르겠네요


//begin
//  editmoney :=(EditTime4)*1000 ;
  // edit6.Text := editmoney ;

//end;

end.
<!--CodeE-->
4  COMMENTS
  • Profile
    김병윤 2009.08.12 21:28
    10분에 천원이면...한시간에 6천원...하루에 14만4천원? 뜨억 @.@;; ㅋㅋ
    설마 이렇게 많이 받지는 않겠죠? ㅎㅎ

    보시기 편하시라 일,시,분 으로 나눠서 계산했습니다~.

    var
    li_DayMoney: Integer; // 일별 요금
    li_HHMoney: Integer; // 시간당 요금
    li_NNMoney: Integer; // 분당 요금
    lf_TotMoney: Double; // 최종합계 ... 요금 같은 경우는 대부분 실수(Double)형으로 사용하시는 게 좋습니다. ^^
    begin
    li_DayMoney := StrToIntDef(Edit5.Text, 0) * 144000; // 일별 요금계산
    li_HHMoney := StrToIntDef(Copy(Edit4.Text,1,2), 0) * 6000; // 시간당 요금계산
    li_NNMoney := (StrToIntDef(Copy(Edit4.Text,4,2), 0) div 10) * 1000; // 분당 요금계산(10분에 천원)

    lf_TotMoney := li_DayMoney + li_HHMoney + li_NNMoney;
    Edit6.Text := Format('%.0n',[lf_TotMoney]); // 천단위 컴마표기된 최종합계금액
    end;


    참고하시고 좋은 결과 있으시길 ㅡ_ㅡv 그럼 급히 주린 배를 채우러 전 이만 ~~
  • Profile
    오델로 2009.08.12 22:54
    아 완전 깔끔한 한방이네요 ㅠ.ㅠ 완전 감솨*10000000000000000000

    소중하게 보겠습니다...

    Edit6.Text := Format('%.0n',[lf_TotMoney]); <- 요부분만 쫌만 더 설명해주면 안될까요 아주 큰도움이 될것같습니다.
  • Profile
    김병윤 2009.08.13 01:46
    Format에 관해서 따로 알아두시는게 좋으실텐데
    여기다 다 설명드리기는 좀 그렇고 대략...설명하자면

    Format 문법
    function Format(const Format: string; const Args: array of const): string;

    %[인덱스:][-][폭][.정밀도]타입

    [-]옵션
    - 좌측정렬이라고 보면 편함
    예1. 정수 12를 %5d로 표기하면 00012로 표기됨
    예2. 정수 12를 %-5d로 표기하면 12000로 표기됨

    [폭]옵션
    폭을 지정하면 지정된 폭의 자리수만큼 표기
    예1. 정수 12를 %d로 표기하면 12로 표기됨
    예2. 정수 12를 %0d로 표기하면 12로 표기됨..%d와 동일
    예3. 정수 12를 %5d로 표기하면 00012로 표기됨

    [.정밀도]옵션
    정밀도는 소수 몇째자리까지 표기하느냐 하는 것입니다.
    예1. 실수 12.34를 %f로 표기하면 12.34로 표기됨
    예2. 실수 12.34를 %.0f로 표기하면 12로 표기됨
    예3. 실수 12.34를 %.1f로 표기하면 12.3으로 표기됨

    타입
    d 정수값 하나에 대응됨
    e 실수값을 공학적으로 표기(부동 소수점 형식으로 변환)
    f 실수값을 부동 소수점 형식으로 변환
    g 실수값과 대응하되 고정 소수점 형식과 부동 소수점 형식 중 길이가 짧은 쪽으로 변환됨
    n 실수값에 대응되며 천단위로 콤마를 삽입
    m 실수값에 대응되며 화폐 형태의 문자열로 변환한다.
    p 포인터 값에 대응된다. SSSS:OOOO 형태의 세그먼트, 오프셋 형태를 띠며 이때 세그먼트, 오프셋은 모두 네 자리의 16진수를 사용
    s 문자열 변수, 문자변수에 대응된다.
    x 정수에 대응되며 16진수 형태의 문자열로 반환된다.

    Format('%.0n',[lf_TotMoney]); 에서
    1. % 는 인자표기(무조건 들어감)
    2. .0 정밀도(소수부분은 표기하지 않는다는 뜻 [참고].1 정밀도는 소수 첫째짜리까지 표기한다는 의미)
    3. n 타입이며 위에 설명한데로 실수값에 대응되며 천단위로 콤마를 삽입

    이렇게 하고 n타입을 사용했으므로 [lf_TotMoney]실수값을 넣은 것입니다.

    대략적으로 설명드린건데 더 다양한 예제를 보시면서 익혀두시는게 좋으실 꺼에요.
  • Profile
    오델로 2009.08.19 18:24
    이제서야 답변봤네요^^ 유용한 답변 감사합니다...^^ 복사해서 따로 저장후에 써야겠네요 ㅋ즐거운 하루되세요
    • 이성찬
    • 2009.08.24 03:47
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.24 18:34
      안녕하세요.. 코드는 문제 없어보이는데.. 개발하시는 PC 의 OS 가 비스타가 아닌지요? 비스타의 경우...
    • 이성찬
      2009.08.26 06:22
      KDDG_MIN//답변 감사합니다. 하지만 윈도 xp sp3인걸요ㅠ
    • 구창민
      2009.08.26 22:19
      안녕하세요.. 제가 TurboDelphi 가 없어서 테스를 못해보았는데.. 정품으로 테스트시 Vista, XP 에서 ...
    • 이성찬
      2009.08.27 02:47
      KDDG_MIN//아, 여기서도 작동 잘 됩니다 ^^ 감사합니다. 아직 배우는중이라 이런면에서 좀 부족한듯 하네...
    • 박진수
    • 2009.08.21 23:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2009.08.23 09:22
      폴더에 대한 옵션이 많아서 그런가 봅니다. 비스타에선 기본적으로 폴더를 생성하면 [고급특성]에서 '...
    • 치꼬
      2009.08.22 02:51
      배우는 단계에서는 그닥 차이점은 중요하지 않을듯합니다.
    • 윤영훈
    • 2009.08.20 04:14
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2009.08.20 20:31
      ShowMessage대신에 MessageBox나 MessageDlg함수를 쓰세요...
    • 장성호
      2009.08.21 00:49
      //다음과 같이 만들어서.. procedure ShowMessageEx(const sTitle:String;const sMsg:String); b...
    • 성더기
      2009.08.22 02:32
      위에 방법도 있구요 델파이 메뉴의 프로젝트 > 프로젝트 옵션 > 프로그램 타이틀을 다른 바꾸시면...
    • 장성호
      2009.08.22 10:00
      Application 타이틀을 바꿔서도 가능하네요 다음과 같이 Application.Title을 변경해서도 구현이 가능...
    • 윤영훈
      2009.08.25 20:13
      감사합니다~ 한번씩 다 확인해고 제일 맞는 걸로 사용해야겠네요. 도움 주신 분들 정말정말 감사해요~
    • 최용일
      2009.08.18 18:43
      상용이구요... 아래 홈페이지에서 구매하실 수 있습니다. http://www.devart.com/dac.html
    • 조상은
      2009.08.18 19:25
      최용일님 정말 감사합니다. 알려주신 사이트 들어가서 보니 SQL에 직접 붙일 때 사용하는 컴포넌트이...
    • 조상은
      2009.08.18 20:12
      위의 글을 작성하다보니 install package에서 runtime packages 에 정의된 목록이 의심이 가서 다른 정상...
    • 문병구
    • 2009.08.15 00:11
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2009.08.15 09:16
      흠...보통 스캐너에서 바코드번호와 엔터값이 넘어옵니다. 따로 자릿수 처리를 할 필요가 없을껀데요.....
    • 아르스
      2009.08.18 00:15
      백록화 님의 말씀 처럼 OnKeyPress 나 OnKeyDown 이벤트에 if Key = #13 then begin ..... end; 또는 i...
    • 문병구
      2009.08.18 01:21
      맞네요..제가 착각을 했네요... 바코드 값이 읽어지는 것은 마치 키보드에 값을 넣고 모두 넣은 다음 엔...
    • 김동원
    • 2009.08.14 18:55
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.15 02:41
      안녕하세요.. 우선 그 네개의 TMemo 콘트롤의 크기가 동일하다는 가정하에 아래 예제를 따라해보세요....
    • 김동원
      2009.08.15 22:27
      초보가 이해하긴 대단히 어려운 내용같습니다.. 하여간, 좋은 답변주신데 대해 , 저의 감사의 마음을 ...
    • 구창민
      2009.08.17 19:09
      조금 설명을 달아 보겠습니다.. 음.. FOldMemoWndProc 는 함수포인터라고 하는건데.. 일종의 변수라고...
    • 김동원
      2009.08.19 02:08
      어렴풋이 이해할수있게되었습니다. 정말 감사합니다.그런데 실제로 코드를 입력해보니 아래와 같은 오류...
    • 구창민
      2009.08.19 18:25
      동원님.. 위에러만 봐서는 상황을 알 수 없고요... 에러나는 부분의 함수부분만이라도 떼서 올려보세요....
    • 김동원
      2009.08.21 01:03
      님께서 올려주신대로 새로 코드를 써서 만들었더니 잘 됩니다. 그런데 문제는 다른데 있었던것 같습니다. ...
    • cdrd
    • 2009.08.13 20:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김동원
      2009.08.14 18:24
      위 질문중 1번에서 ADO,BDE 두가지만 말씀드릴수 있습니다. 제가 경험한 것이 이것 뿐이라서요.(저는 초...
    • 현실환
      2009.08.18 21:16
      Antialiased Drawing을 할려면 GDI가 아닌 GDI+ 함수를 이용해야 합니다. 컴포넌트 자체는 TImage를 그...
    • 오델로
    • 2009.08.12 19:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2009.08.12 21:28
      10분에 천원이면...한시간에 6천원...하루에 14만4천원? 뜨억 @.@;; ㅋㅋ 설마 이렇게 많이 받지는 않겠죠...
    • 오델로
      2009.08.12 22:54
      아 완전 깔끔한 한방이네요 ㅠ.ㅠ 완전 감솨*10000000000000000000 소중하게 보겠습니다... Edit6....
    • 김병윤
      2009.08.13 01:46
      Format에 관해서 따로 알아두시는게 좋으실텐데 여기다 다 설명드리기는 좀 그렇고 대략...설명하자면 ...
    • 오델로
      2009.08.19 18:24
      이제서야 답변봤네요^^ 유용한 답변 감사합니다...^^ 복사해서 따로 저장후에 써야겠네요 ㅋ즐거운 하루...
    • 이훈
    • 2009.08.12 08:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2009.08.12 18:45
      코드를 올려보세요..
    • 김병윤
      2009.08.12 21:37
      폼.Hide 때문입니다. 번쩍하고 사라지지 않습니까? 폼.Show; 로 폼을 호출하면 그 아래 코드까지 일사...
    • 구창민
      2009.08.12 20:49
      아래 코드 한줄을 추가해 보세요.. Application.ProcessMessages; fmInfoProgress.Show; 즐거운 ...
    • 김병윤
      2009.08.12 22:15
      Application.ProcessMessages; 요놈이 루프 안에 있어야 원하시는 결과를 얻으실 수 있을 듯 합니다. ^^
    • Hyphen
      2009.08.12 22:56
      fmInfoProgress.Show; Application.ProcessMessages; 순서를 이렇게 하니까 보이는 군요.. 대단히 ...
    • 치꼬
      2009.08.12 06:21
      내용은 정확히 파악은 잘 안되지만요. 위의 문장이 안되는건.. 말그대로 edit2.text 가 '' 것이 아니라...
    • 구창민
      2009.08.12 19:15
      안녕하세요.. 아래와 같은 문자열을 날짜로 치환하는 문장으로 해결하실수 있을거 같네요.. if Str...
    • 오델로
      2009.08.12 19:38
      답변 무한감사드립니다^^;; 아직 완전 백지상태라서 무작정 삽들고 파대기 시작하는중이라 답답합니다...
    • 백록화
      2009.08.11 21:32
      리더기가 시리얼통신을 사용한다면 관련 시리얼통신 콤포넌트에 데이터읽기 이벤트에서 제어를 해주심돼...
    • KDDG_Apine
      2009.08.12 04:12
      밑에 같이 id 컴포넌트를 사용하면 됩니다. ^^ 제가 사용했던부분인데.. 될겁니다. var nDate,...
    • 김지호
      2009.08.24 18:27
      답변 감사합니다 ^^