01/10/2018, 16:31

Hỏi về cách tính trên thời gian

Em xin chào mọi người và vẫn là em những câu hỏi ngu và cực ngu .

Em muốn làm cái tính lương nhân viên như thế này nhưng chưa làm được , mọi người chỉ hướng em đi với ạ.
Cách tính như sau :

-từ 5h sáng ->16 h chiều : lương 200K ( 5,6,7,8,9,10,11,12,13,14,15,16)
-từ 16h chiều -> 5h sáng hôm sau : 500K (16,17,18,19,20,21,22,23,0,1,2,3,4,5)

-Vấn đề đặt ra : phát sinh trường hợp, vấn đề là lúc giao thoa 2 mốc thời gian thì phải xuất ra như thế này

Bạn làm từ lúc 15h chiều tới 6 sáng với thông tin chi tiết như sau :
-Từ 15h ->16h : 1 tiếng x 14.000 = 14.0000
-Từ 16h ->6h : 15 tiếng x 35.000 = 525.000
=>Tổng tiền hôm nay : 539.000

(Đã chỉnh sửa )

Songtotnhe viết 18:43 ngày 01/10/2018

6h sáng tới 16h chiều là 200k

20k/h phải không?

16h chiều tới 6h sáng là 500k( ca đêm)

Bao nhiêu k/h?

tăng ca từ 5h chiều tới 16h sáng

Ý bạn là “tăng ca từ 15h đến 6h sáng” phải không?

Nguyễn Văn Vương viết 18:39 ngày 01/10/2018

Vâng đúng rồi bác xin lõi bác em ghi thiếu cho tiết quá

Songtotnhe viết 18:46 ngày 01/10/2018

Ý là trong khoảng 5h tới 16h thì có 1 tiếng là 5h tới 6h

Bạn xem lại kỹ comment trước khi submit, có cái lỗi 5h (15h), 6h (16h) mà mắc hoài gây khó chịu.
Ca đêm 500k (14h) tính ra được 35.7142857143/h, một con số vô cùng lẻ (có vẻ vô lý),
con số 500k đó là bạn lấy ở đâu ra? trong yêu cầu hay là bạn tự đặt?

Nguyễn Văn Vương viết 18:46 ngày 01/10/2018

ôi ngu mắt nhắm mắt mở không chịu coi kỹ cảm ơn bác đã nhắc nhở ạ :
-từ 5h sáng ->16 h chiều : lương 200K
-từ 16h chiều -> 5h sáng hôm sau : 500K
-Vấn đề đặt ra : phát sinh trường hợp
Nếu trong khoảng thời gian giao thoa giữa 2 mốc trên : ví dụ từ 15h chiều tới 4h sáng : phải tính 15h chiều tới 16h là lương ca sáng ( 14 nghìn/tiếng - làm tròn xuống ) và từ 16h tối tới 4h sáng tính lương ca đêm ( 35 nghìn / tiếng ).
Cái này là đề như thế chứ em cũng thua , nói chung là tiền lương là cứ làm tròn xuống ạ .

Songtotnhe viết 18:37 ngày 01/10/2018

Dùng while nha bạn
http://rextester.com/KPP44133

Nguyễn Văn Vương viết 18:46 ngày 01/10/2018

Em làm được rồi , em cảm ơn bác rất nhiều , bác nhiệt tình quá , vừa nhắc nhỉ vừa chỉ code demo cho em quá chi tiết , thật sự rất rất cảm ơn bác

Nguyễn Văn Vương viết 18:45 ngày 01/10/2018

Nếu được phép em xin nhờ bác xuất ra chi tiết hơn được không ạ , cái thời điểm giao thoa ấy , ví dụ là làm từ 15h chiều tới 6h sáng chẳng hạn thì đẩy ra là :

Bạn làm từ lúc 15h chiều tới 5h sáng với thông tin chi tiết như sau :
-Từ 15h ->16h : 1 tiếng x 14.000 = 14.0000
-Từ 16h ->5h : 15 tiếng x 35.000 = 504.000
=>Tổng tiền hôm nay : 504.000

(Đã chỉnh sửa)

Nguyễn Đình Anh viết 18:36 ngày 01/10/2018

n : thời gian bắt đầu làm
m : thời gian kết thúc

Nếu n <= 16 ==> Số tiền làm ca sáng = (16 - n)*14
Còn n > 16 ==> Số tiền làm ca sáng = (n -16) *14

Nếu m < 16 ==> Số tiền làm ca đêm = (8 + m) *35
Còn m >= 16 ==> Số tiền làm ca đêm = (m - 16) * 35
Suy nghĩ đơn giản hóa đi bạn

Nguyễn Văn Vương viết 18:45 ngày 01/10/2018

Nếu ví dụ làm từ 1h sáng --> chiếu theo cách này thì nó hơi sai sai phải không ạ, cũng tại em không nói rõ vì đề không nói là bắt buốc phải làm từ mấy giờ tới mấy giờ mà chỉ quy định mốc tính tiền , nên mình phải đưa ra tất cả trường hợp ạ.
Em nói có gì sai sót mong bác bỏ qua.

n : thời gian bắt đầu làm
Nếu n <= 16 ==> Số tiền làm ca sáng = (16 - n)*14

Nguyễn Đình Anh viết 18:42 ngày 01/10/2018

Nếu ví dụ làm từ 1h sáng --> chiếu

Là làm từ 1h --> 16h đúng không bạn ?
Vậy thì = 15 * 14 vẫn đúng mà bạn @@

Songtotnhe viết 18:32 ngày 01/10/2018

Bạn làm từ lúc 15h chiều tới 6 sáng với thông tin chi tiết như sau :
-Từ 15h ->16h : 1 tiếng x 14.000 = 14.0000
-Từ 16h ->6h : 15 tiếng x 35.000 = 525.000
=>Tổng tiền hôm nay : 539.000

Ví dụ của bạn sai đề rồi nha, 15h->16h là 1 tiếng, 16h-> 5h sáng hôm sau là 13 tiếng, nếu làm tiếp đến 6h thì khoảng 5h - 6h đó là của ca sáng chứ không được cộng vào ca đêm.

Bạn muốn hàm tính lương trả về nhiều thông tin hơn thì thay vì trả về float ta có thể trả về 1 object:
http://rextester.com/OXSRU67997

Mình chỉ làm đơn giản vậy thôi, bạn muốn in ra thêm nữa thì tự custom thêm, mình lười rồi

Nguyễn Văn Vương viết 18:37 ngày 01/10/2018

sao máy em nó đơ đơ hay sao mà em gửi lên toàn bị gì gì ấy nhỉ .
Dạ vâng đúng đó bác nhưng trong khoảng 1h sáng tới 5h sáng vẫn được tính tiền ca đêm ,từ 5h sáng tới 16h chiều thì tính ca ngày ạ.

Nguyễn Đình Anh viết 18:36 ngày 01/10/2018

Tức là từ 5h --> 16h là ca sáng
Còn từ 16h --> 5h được tính là ca đêm ??

Nguyễn Văn Vương viết 18:32 ngày 01/10/2018

vâng em có ghi rõ ràng ở trên mà bác , tại đề nó yêu cầu thế ạ

Nguyễn Đình Anh viết 18:31 ngày 01/10/2018

Vậy thì sr bạn, mình hiểu nhầm. Thế thì sửa lại một chút thôi:
Nếu 5 <= n <= 16 ==> Tiền làm ca sáng = (16 - n) * 14


Nếu m >= 16 ==> Tiền làm ca đêm = (m - 16) * 35
Nếu m <= 5 ==> Tiền làm ca đêm = (8 + m) * 35
Nếu 5 < m < 16 ==> Tiền làm = (3 + m) * 14 + 385


Như vậy thì VD trên của bạn bị sai nhé:

Bạn làm từ lúc 15h chiều tới 6 sáng với thông tin chi tiết như sau :
-Từ 15h ->16h : 1 tiếng x 14.000 = 14.0000
-Từ 16h ->6h : 15 tiếng x 35.000 = 525.000
=>Tổng tiền hôm nay : 539.000

Từ từ 15h --> 6h phải chia ra là

  • 15h --> 16h là ca sáng
  • 16h --> 5h là ca đêm
  • 5h --> 6h là ca sáng
Nguyễn Văn Vương viết 18:39 ngày 01/10/2018

Dạ em cảm ơn bác rất nhiều , không trách bác được vì tại em trình bày như *** mà còn phải cảm ơn bác vì đã chỉ em hướng đi và chỉ ra cho em sự sai sót của mình ạ.
Chân thành cảm ơn bác rất rất nhiều

Nguyễn Văn Vương viết 18:47 ngày 01/10/2018

Em cảm ơn bác rất rất nhiều ạ , bác nhiệt tình quá .

Nguyễn Văn Vương viết 18:43 ngày 01/10/2018

Haiz lại còn yêu cầu cả phút mới chán chứ , nó còn phải tính cả phút nữa bác ơi không phải chỉ giờ :(( chán đời

Songtotnhe viết 18:41 ngày 01/10/2018

Tìm hiểu về TimeSpan và áp dụng tương tự nhé.
Chấp cả giờ phút giây : ))

Nguyễn Văn Vương viết 18:34 ngày 01/10/2018

em có tìm hiểu nhưng làm ứ dược gì cả , trong đầu em giờ k nghĩ ra gì nữa rồi
bài này tương tự nhưng yêu cầu có thời gian , bài kia nhờ bác code em làm rồi còn đúng bài này nữa mà em chưa làm được :((

decimal TienPhong = 0;
DateTime TimeStart = OrderSelected.TimeStart;
DateTime TimeEnd = DateTime.Now;

        DateTime sMoc = new DateTime(TimeStart.Year, TimeStart.Month, TimeStart.Day, Moc, 0, 0, 0);
        var Truoc = sMoc - TimeStart;
        var Sau = TimeEnd - sMoc;

        int PhutTruoc = 0, phutSau = 0;

        if (TimeStart <= sMoc && TimeEnd >= sMoc)
        {
            PhutTruoc = Truoc.Hours * 60 + Truoc.Minutes;
            phutSau = Sau.Hours * 60 + Sau.Minutes;
            decimal TongTienTruoc = listPrice[0].GiaTruocMoc / 60 * PhutTruoc;
            decimal TongTienSau = listPrice[0].GiaSauMoc / 60 * phutSau;
            this.richTextBox_GhiChu.Text = "";
            this.richTextBox_GhiChu.Text = "Mốc : " + Moc + " giờ\nPhòng này vô trước mốc " + PhutTruoc / 60 + " giờ " + (int)PhutTruoc % 60 + " x " + listPrice[0].GiaTruocMoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + " = " + TongTienTruoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + "";
            this.richTextBox_GhiChu.Text += "\nThời sau mốc " + phutSau / 60 + " giờ " + (int)phutSau % 60 + " x " + listPrice[0].GiaSauMoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + " = " + TongTienSau.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + "\n";
            TienPhong = TongTienTruoc + TongTienSau;
        }
        else if (TimeStart <= sMoc && TimeEnd <= sMoc && (TimeEnd.Hour != 1 && TimeEnd.Hour != 2 && TimeEnd.Hour != 3 && TimeEnd.Hour != 4 && TimeEnd.Hour != 5 && TimeEnd.Hour != 0))
        {
            var s = TimeEnd - TimeStart;
            PhutTruoc = s.Hours * 60 + s.Minutes;
            decimal TongTienTruoc = listPrice[0].GiaTruocMoc / 60 * PhutTruoc;
            decimal TongTienSau = listPrice[0].GiaSauMoc / 60 * phutSau;
            this.richTextBox_GhiChu.Text = "";
            this.richTextBox_GhiChu.Text = PhutTruoc / 60 + " giờ " + (int)PhutTruoc % 60 + " phút x " + listPrice[0].GiaTruocMoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + " = " + TongTienTruoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + "\n";
            TienPhong = TongTienTruoc + TongTienSau;
        }
        else if (TimeStart >= sMoc && TimeEnd >= sMoc)
        {
            var s = TimeEnd - TimeStart;
            phutSau = s.Hours * 60 + s.Minutes;
            decimal TongTienTruoc = listPrice[0].GiaTruocMoc / 60 * PhutTruoc;
            decimal TongTienSau = listPrice[0].GiaSauMoc / 60 * phutSau;
            this.richTextBox_GhiChu.Text = "";
            this.richTextBox_GhiChu.Text += phutSau / 60 + " giờ " + (int)phutSau % 60 + " phút x " + listPrice[0].GiaSauMoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + " = " + TongTienSau.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + "\n";
            TienPhong = TongTienTruoc + TongTienSau;
        }
        else if (TimeStart <= sMoc && TimeEnd <= sMoc)
        {

            var s = TimeEnd - TimeStart;
            phutSau = s.Hours * 60 + s.Minutes;
            decimal TongTienTruoc = listPrice[0].GiaTruocMoc / 60 * PhutTruoc;
            decimal TongTienSau = listPrice[0].GiaSauMoc / 60 * phutSau;
            this.richTextBox_GhiChu.Text = "";
            this.richTextBox_GhiChu.Text += phutSau / 60 + " giờ " + (int)phutSau % 60 + " phút x " + listPrice[0].GiaSauMoc.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + " = " + TongTienSau.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture) + " VND" + "\n";
            TienPhong = TongTienTruoc + TongTienSau;

        }
        var sx = DateTime.Now - OrderSelected.TimeStart;
        this.lb_ThoiGianDaDung.Text = sx.Hours + " giờ " + sx.Minutes + " phút " + sx.Seconds + " giây";
        try
        {
            tempPrice = decimal.Parse(txt_GiaTien.Text);
        }
        catch (Exception)
        {
        }

        lb_TienPhong.Text = TienPhong.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture);
        lb_TongTien.Text = (TienPhong + TienDoAn).ToString("0,0", System.Globalization.CultureInfo.InvariantCulture);
        this.lb_TienGiam.Text = SoTienMuonGiam.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture);
        decimal ThanhTien = TienPhong + TienDoAn - SoTienMuonGiam;
        this.lb_ThanhTien.Text = ThanhTien.ToString("0,0", System.Globalization.CultureInfo.InvariantCulture);
Bài liên quan
0