“Quanlykhachhang.txt”.
Dong thoi kiém tra makh nay citing dA c6 trong file “danhsachtim.txt” hay chua bang việc sử dụng lại hàm kiemtrakh(f,makh) với f la file “danhsachtim.txt” . Néu gia tri trả lại bằng False thì mã khách hàng với biển makh chưa có trong le
“danhsachtim.txt” còn nếu giá trị bằng True thì makh đã được tìm trong những makh đã nhập trước đó.
Nếu makh cú trong ủle “Quanlykhachhang.txf° và chưa tồn tai trong file
“danhsachtim.txt” thi mo file “danhsachtim.txt” 6 ché d6 ghi nối đuôi (a) và encoding=°utf-8° để ghi tiếng Việt. Sau do str dung write() dé viết thông tin của makh đó vào file “danhsachtim.tx£”.
Nếu không phải thì trả lại makh.
Trong đó makh được nhập từ ngoài hàm.
3.2.7 Ham timhoten(ho,ten)
Ham timhoten(ho,ten) c6 muc dich tim ra thông tin khách hàng thông qua họ vả tên khách hàng.
19
def timhoten(ho, ten):\
kckh = []
with open(‘danhsachtim.txt, 'w', encoding="'utf-8') as ds:
ds.write(\t'.join(ttkh) + \n')
with open(Quanlykhachhang.txf, r', encoding=utf-8') as f:
for ¡ in f.readlinesQ[1:]:
d = list((.replace(MI, "")).split(W)) if ho == d[3] and ten == d[4]:
ds.write(M'.join(d))
file = pd.read_ csv(danhsachtim.txf', dtype=str, sep=', usecols=(ftkh)) if file.size == 0:
kckh.append(f'{ho} {ten}') return kckh
Dau tién, tao m6t list rong gan vao bién kekh.
Mo file “danhsachtim.txt” ở chế độ ghi dé (w), encoding=utf-8 gan bang bién ds. Néu file không tồn tại sẽ tạo một file mới, còn nếu file có tồn tại sẽ xóa hết tat cả dữ liệu bên trong. Sử dụng lệnh write() đề viết dòng đầu tiên là tiêu để của các cột với tham số là ttkh: [Mãt, 'Phân loạt, 'Danh xưng', 'Họ', "Tên, Ngày sinh', 'Dia chi’, 'Số di déng', 'E- mail].
Mở file “Quanlykhachhang.tx£” ở chế độ doc (r) véi encoding la utf-8 gan bang bién f. Thực hiện dọc từng dòng trong file bằng phương thức readlines() và đọc từ dòng thứ 2 bằng [1:]. Chuyên type dòng từ str sang list được gán vào biến đ bằng cách thay thế
‘\n’ (xuéng dòng) thành "" băng phương thức replace() rồi chia thành các chuỗi nhỏ theo ký tự “W' (1 tab) bang split().
Kiểm tra xem biến ho có bằng giá trị thứ 4 của list d và ten có bằng giá trị thứ 5 của list d không. Nếu có, sử dụng write() đề viết list d vao file “danhsachtim.txt”.
Su dung read_csv ttr thu vién Pandas dé doc file “danhsachtim.txt” theo dang csv, với định dạng dữ liệu là str bằng dtype va su dung usecols đề chỉ định các cột là tham số list ttkh gán vào biến file.
20
Kiểm tra nếu file không có dữ liệu gì thì sẽ thêm vào cuối list kckh chuỗi gồm họ và
tên từ biền ho và ten, rồi trả lại list kckh.
Trong đó ho và ten là tham số nhập ở ngoài hàm.
3.2.8 Ham them(n)
Ham them(n) thém théng tin khach hang.
def them(n):
print()
for 1 in range(0, n):
makh = (input("Ma khach hang*: ")).stripQ)
while kiemtrakh('Quanlykhachhang.txt', makh)[0] == True:
pnnt( “Trùng mã khách hảng!", end="nWr) makh = Input("Mã khách hàng*: ") else:
ho = (input("Họ khách hàng*: ")).strip().title()
ten = (input("Tén va Tén dém khach hang*: ")).strip().titleQ c, b, a= map(int, input("Ngay sinh(dd/mm/yyyy)*: ").splitQ) sinhnhat = datetime.date(a, b, c)
ns = str(f"{c}-{b}-{aj")
te = today - datetime.date(today.year - 11, b, c) eb = today - datetime.date(today.year - 2, b, c) if te > (today - sinhnhat):
if (today - stnhnhat > eb):
pl ="Tré em"
21
else:
pl = "Em bé"
dx = ((mnput( "Danh xưng* (Master/MIss): ")).strip()).title() dc = "Không có"
sdd = input("S6 di déng: ").strip() mail = input("E-mail: ").stripQ else:
pl = "Người lớn"
dx = ((input("Danh xung* (Mr/Mrs/Ms): ")).stripQ).titleQ de = Ginput("Dia chi: ")).stripQ)
sdd = (input("S6 di déng*: ")).strip() mail = (input("E-mail*: ")).stripQ) d = [makh, pl, dx, ho, ten, ns, de, sdd, mail]
d = thayinrong(d)
with open('Quanlykhachhang. txt’, 'at+’, encoding='utf-8’) as f:
f.write(‘\t'.join(d) + '\n')
pmnt("Đã thêm khách hàng '", makh, ":", dx, "_", ho, "' thành công!", end=*®n)
Tạo ra vòng lặp với số vòng lặp bằng số khách hàng người dùng đã nhập vào.
Với từng khách hàng, người dùng lần lượt nhập các thông tin:
- Mã khách hàng: phần “while kiemtrakh(‘Quanlykhachhang.txt', makh)[0] ==
True:”: tạo vòng lặp để kiểm tra mã khách hàng nhập vào có trùng với mã khách hang san có chưa.
22
+ Nếu đúng thì thông báo “Trùng mã khách hàng” bằng hàm print() và yêu cầu nhập lại.
+ Nếu sai thì bắt đầu nhập thong tin.
e Nhập ho, ten và sử dụng hàm stripQ và tidle() để xóa các khoảng cách thừa (nếu có) và viết hoa các chữ cái đầu (nếu người dùng quên viết hoa).
e Nhập ngày sinh: sử dụng hàm map() và split() để gán ngày, tháng, năm vào các biến c, b, a. Dựa vào ngày sinh để phân loại :
©_ “Trẻ em” và “Em bé”: Nhập tiếp danh xưng, số điện thoại, email.
o_ “Người lớn”: Nhập tiếp danh xưng, địa chỉ, số điện thoại, email.
Chương trình gán các thông tin trên vào các biến makh, pl, dx, ho, ten, ns, de, sdd, mail.
Chương trình đưa các biến đó vào list đ và thay các biến rồng bằng “không có”.
Lưu thông tin khách hàng vào file txt.
- Phan “with open(Quanlykhachhang.tx£', 'a+', encoding='utf-8') as f:” là để mở file “Quanlykhachhang.txt” 6 ché dé mé dé ghi va doc (a+) voi encoding utf-8 (dé doc duoc tiéng Viét) va gan vao bién f.
- Phan “f.write(‘\t'.join(d) + '\n')”: ding ham join() cho list đ với “\t° để mỗi thông tin cua | khach hang dua vao cach nhau | dau tab, “\n” dé hét 1 khách hàng thì xuống dong.
Théng bao ra man hinh da thém khach hang thanh céng bang ham print().
3.2.9 Ham xoa(c)
Ham xoa(c) để xóa một số khách hàng hoặc toàn bộ danh sách khách hàng.
def xoa(c):
ifc==0:
xn = xacnhan() while xn = False:
23
break else:
f = open(‘Quanlykhachhang txt’, 'w', encoding='utf-8') f-write(\t' join(ttkh) + ®n')
f.close()
prmt("Đã xóa toàn bộ danh sách thông tin khách hàng!") else:
with open(danhsachtim.txf, 'w', encoding='utf-8') as ds:
ds.write(‘\t'.join(ttkh) + '\n’)
n =input("Mã những khách hàng muốn xóa: ").split() dskh = kiemtrakh(Quanlykhachhang.txt, 1)[1]
dsx = []
for makh in list(n):
while kiemtrakh('Quanlykhachhang.txt', makh)[0] == False:
prmt("Không có mã khách hàng", makh, "!")
makh = (input("Nhập lai mã khách hàng thay thế: ")).strip() else:
if kiemtrakh('danhsachtim.txt', makh)[0] = False:
dsx.append(kiemtrakh('Quanlykhachhang.txt', makh)[1]) with open(‘danhsachtim.txt’, 'a', encoding='utf-8') as ds:
ds.write(‘\t'.join(kiemtrakh('Quanlykhachhang.txt', makh)[1]) + '\n') print()
24
toanbo("danhsachtim.txt", []) xn = xacnhan()
while xn == False:
break else:
for 1 in list(dsx):
dskh.remove(1)
with open("Quanlykhachhang.txt", "w", encoding=lutf-8') as f:
†write(W'.Jom(ttkh) + ®n') for 1 in list(dskh):
fwrite(.Join(1) + 1#)
prmt("Đã xóa những khách hàng trên! ")