python课后练习题 9-12(用户管理系统)

自己根据《python核心第二版》9-12的要求写的用户管理系统,比较简陋,大牛勿笑。

程序介绍:

1.用户数据保存为文本

2.用户密码加密(base64)

3.显示上次登陆时间

 

程序可以实现的功能:

注册、添加用户、删除用户、更改密码、登陆和注销等功能。

代码如下:

#!/usr/bin/env python

-- coding:utf-8 --

author: netcat

date : 2012-02-27

#########添加文件密码加密和time

import time,os,base64

def menu(): ########主菜单
print ‘\n\n’
print ‘###########################’
print ‘# 1. Registration #’
print ‘# 2. Login #’
print ‘# 3. Quit #’
print ‘###########################’
print ‘\n\n’
ans=raw_input(‘enter your select number :’)
if not ans.isdigit():
print ‘enter must be a number’
return menu()
else:
return ans

def menu2(): #######登陆后的菜单
print ‘\n’
print ‘###########################’
print ‘# 1. List user #’
print ‘# 2. Add user #’
print ‘# 3. Del user #’
print ‘# 4. Change password #’
print ‘# 5. Logout #’
print ‘###########################’
print ‘\n’
ans2=raw_input(‘enter your select number :’)
if not ans2.isdigit():
print ‘enter must be a number’
return menu2()
else:
return ans2

def reg(): #########注册函数
user=raw_input(‘enter your username:’) #########输入用户名
if user.strip()==’’: ###########判断输入是否为空
print ‘username cannot be blank’
return reg()
else:
try:
f=open(‘user.data’,’r’)
except IOError:
all=[]
else:
all=f.readlines()
f.close()
userlist=[]
for line in all:
userlist.append(line.split(‘:’)[0])
if user not in userlist:
while True: #######判断两次密码是否相同
pass1=raw_input(‘enter password for %s:’%user)
pass2=raw_input(‘enter password for %s again:’%user)
if pass1==pass2:
f=open(‘user.data’,’a’)
f.write(user+’:’+base64.encodestring(pass1).strip()+’:’+’’)
f.write(‘\n’)
f.close()
break
else:
print ‘two password not same’
else:
print ‘user %s is exists!’%user

def login(): ##########登陆函数
user=raw_input(‘enter your username:’)
if user.strip()==’’:
print ‘username cannot be blank’
return menu()
else:
try:
f=open(‘user.data’)
except IOError:
print ‘now have no users,please reg first’
return 0
all=f.readlines()
f.close()
if len(all)>0:
userlist=[]
for line in all:
userlist.append(line.split(‘:’)[0])
if user in userlist:
for line in all:
if line.split(‘:’)[0]==user:
password=raw_input(‘enter password for %s:’%user)
if password==base64.decodestring(line.split(‘:’)[1]):
logintime=time.ctime()
all[all.index(line)]=user+’:’+base64.encodestring(password).strip()+’:’+logintime+’\n’
f=open(‘user.data’,’w’)
f.writelines(all)
f.close()
id=1
return id
else:
print ‘password error’
break
else:
print ‘user %s is not exists!’%user
else:
print ‘user %s is not exists!’%user

def add(): #########添加用户函数
user=raw_input(‘enter the username you want to add :’)
if user.strip()==’’:
print ‘username cannot be blank’
return add()
else:
f=open(‘user.data’)
all=f.readlines()
f.close()
userlist=[]
for line in all:
userlist.append(line.split(‘:’)[0])
if user not in userlist:
while True:
pass1=raw_input(‘enter password for %s:’%user)
pass2=raw_input(‘enter password for %s again:’%user)
if pass1==pass2:
all.append(user+’:’+base64.encodestring(pass1).strip()+’:’+’:’+’\n’)
f=open(‘user.data’,’w’)
f.writelines(all)
f.close()
break
else:
print ‘two password not same’
else:
print ‘user %s is exists!’%user

def delete(): #########添加用户函数
user=raw_input(‘enter the username you want to delete :’)
if user.strip()==’’:
print ‘username cannot be blank’
return delete()
else:
f=open(‘user.data’)
all=f.readlines()
f.close()
userlist=[]
for line in all:
userlist.append(line.split(‘:’)[0])
if user not in userlist:
print ‘username %s is not exists’%user
else:
for line in all:
if user==line.split(‘:’)[0]:
all.remove(line)
f=open(‘user.data’,’w’)
f.writelines(all)
f.close()

def chp():
user=raw_input(‘enter the username you want to change password :’)
if user.strip()==’’:
print ‘username cannot be blank’
return chp()
else:
f=open(‘user.data’)
all=f.readlines()
f.close()
userlist=[]
for line in all:
userlist.append(line.split(‘:’)[0])
if user not in userlist:
print ‘username %s is not exists’%user
else:
for line in all:
if line.split(‘:’)[0]==user:
password=base64.decodestring(line.split(‘:’)[1])
old=raw_input(‘enter the old password for %s :’%user)
if old==password:
while True:
pass1=raw_input(‘enter new password for %s:’%user)
pass2=raw_input(‘enter new password for %s again:’%user)
if pass1==pass2:
for line in all:
if line.split(‘:’)[0]==user:
all[all.index(line)]=user+’:’+base64.encodestring(pass1).strip()+’:’+’\n’
f=open(‘user.data’,’w’)
f.writelines(all)
f.close()
break
else:
print ‘two password not same’
else:
print ‘old password error’

id=0
while True:
m=menu()
if m==’1’:
reg()
elif m==’2’:
id=login()
if id==1:
while True:
m2=menu2()
if m2==’1’:
f=open(‘user.data’)
all=f.readlines()
f.close()
for line in all:
print line.split(‘:’)[0]
elif m2==’2’:
add()
elif m2==’3’:
delete()
elif m2==’4’:
chp()
elif m2==’5’:
break
else:
print ‘enter error’
elif m==’3’:
break
else:
print ‘unknown number’