Your SlideShare is downloading. ×

Ví dụ Python: Tính lương

1,411

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,411
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Ví dụ Python: Tính lương"

  1. 1. Đề bài: Viết chương trình tính lương và thưởng cho nhân viên như sau: • Công ty có 2 loại nhân viên: nhiên viên quản lý và công nhân. • Mỗi nhân viên có 1 mã số nhân viên,họ tên, ngày sinh, ngày vào làm. • Lương nhân viên quản lý tính bằng số ngày công làm việc * 300.000 • Lương công nhân tính bằng số sản phẩm làm ra * 10.000 • Thưởng nhân viên quản lý bằng lương tháng * thâm niên • Thưởng công nhân bằng 2 tháng lương. Phân tích: Ta sẽ tạo 1 lớp đối tượng Staff đại diện cho bất cứ nhân viên nào. Mỗi đối tượng có các thuộc tính (properties): • code (mã số nhân viên) • name (tên) • birthday (ngày sinh) • entrance_day (ngày vào làm) • grade (cấp bậc: quản lý hay công nhân) • workingdays (số ngày công làm việc, dùng để tính lương cho quản lý) • products (số sản phẩm làm được, dùng tính lương cho công nhân) Hàm sơ khởi đối tượng như sau: def __init__(self, personal, grade=0): self.code = personal['code'] self.name = personal['name'] self.birthday = personal['birthday'] self.entrance_day = time.strptime(personal['entrance_day'], "%d %m %Y") # personal['entrance_day'] is like "27 01 2006" self.grade = grade #grade: 0-worker, 1-manager self.workingdays = 0 #number of working days this month self.products = 0 #quantity of products the worker has made this Hai thuộc tính workingdays, products sẽ không được cho trước khi tạo đối tượng mà sẽ được đặt thêm sau đó (bởi kế toán :-)). Để tính lương & thưởng, đối tượng sẽ có thêm các method salary() và bonus() Thâm niên được tính bằng cách lấy năm hiện tại (hoặc năm nào khác mà ta đặt) trừ đi năm vào làm. Chú ý do có tính toán với thời gian nên chương trình của ta phải import module time. Ngày tháng được nhập vào dưới dạng chuỗi, ta sẽ lưu lại dưới dạng dãy 9 phần tử (tm_year, tm_mon, tm_mday, tm_hour, ...) của Python bằng hàm strptime() để thuận tiện thao tác, tính toán def salary(self): #salary this month if self.grade == 0: return self.products*10000 else: return self.workingdays*300000 def bonus(self, day=None): if self.grade == 0: return 2*self.salary() else: if day != None:
  2. 2. try: today = time.strptime(day, "%d %m %Y") except ValueError: print "Please give day in format: dd mm yyyy" return else: today = time.localtime() return (today[0] - self.entrance_day[0])*self.salary() Biến today cũng như entrance_day có dạng dãy, trong đó phần tử thứ nhất là năm. Cuối cùng, script hoàn chỉnh (lưu vào file Tinhluong.py) sẽ như thế này:
  3. 3. 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import time 5 6 class Staff: 7 def __init__(self, personal, grade=0): 8 self.code = personal['code'] 9 self.name = personal['name'] 10 self.birthday = personal['birthday'] 11 self.entrance_day = time.strptime(personal['entrance_day'], "%d %m %Y") 12 # personal['entrance_day'] is like "27 01 2006" 13 self.grade = grade #grade: 0-worker, 1-manager 14 self.workingdays = 0 #number of working days this month 15 self.products = 0 #quantity of products the worker has made this month 16 17 def salary(self): #salary this month 18 if self.grade == 0: 19 return self.products*10000 20 else: 21 return self.workingdays*300000 22 23 def bonus(self, day=None): 24 if self.grade == 0: 25 return 2*self.salary() 26 else: 27 if day != None: 28 try: 29 today = time.strptime(day, "%d %m %Y") 30 except ValueError: 31 print "Please give day in format: dd mm yyyy" 32 return 33 else: 34 today = time.localtime() 35 return (today[0] - self.entrance_day[0])*self.salary() 36 37 38 ###------- Example ----------### 39 40 p = { 41 'code': 20402050, 42 'name': 'Nguy n H ng Quân'ễ ồ , 43 'birthday': '27 01 1987', 44 'entrance_day': '31 01 2001' 45 } 46 nv = Staff(p, 1) 47 nv.workingdays = 20 48 print 'The salary of ', nv.name, 'is ', nv.salary() 49 print 'The bonus is ', nv.bonus()

×