You are on page 1of 3

Đề 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:
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:
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()

You might also like