Created
May 16, 2014 20:38
-
-
Save LordAro/8ffddeefcd27d08a35b9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python2 | |
import cPickle as pickle | |
class Member: | |
def __init__(self, firstname, surname, postcode, owned_items): | |
self.firstname = firstname | |
self.surname = surname | |
self.postcode = postcode | |
self.owned_items = owned_items | |
self.ident = firstname + surname + postcode.replace(" ", "") | |
def __repr__(self): | |
return '<%s: %s : %s %s, %s, %s>' % ( | |
self.__class__.__name__, self.ident, self.firstname, | |
self.surname, self.postcode, self.owned_items) | |
def to_JSON(self): | |
return json.dumps(self, default=lambda o: o.__dict__, sort_keys=True, indent=4) | |
class Item: | |
def __init__(self, title, author, media, uid, member_id): | |
self.title = title | |
self.author = author | |
self.media = media | |
self.available = (member_id == None) | |
self.uid = uid | |
self.member_id = member_id | |
def __repr__(self): | |
return '<%s: %s : %s %s, %s, %s, %s>' % ( | |
self.__class__.__name__, self.uid, self.title, | |
self.author, self.media, self.available, self.member_id) | |
def SaveDict(filename, savedict): | |
with open(filename, 'wb') as f: | |
pickle.dump(savedict, f) | |
def LoadDict(filename): | |
opened_dict = dict() | |
try: | |
with open(filename, 'rb') as f: | |
opened_dict = pickle.load(f) | |
finally: | |
return opened_dict | |
def AddItem(memberid=None): | |
if memberid != None and memberid not in member_list: | |
print "Error: Unknown member ID" | |
print "Please try again" | |
return | |
itemname = raw_input("What is the item's name? ") | |
itemauthor = raw_input("Who wrote/produced the item? ") | |
itemmedia = raw_input("What is the media type of the item? ") | |
# Generate UID | |
itemid = "" | |
for i in xrange(500): # Arbitary limit | |
itemid = itemname.replace(" ", "") + itemauthor.replace(" ", "") + str(i) | |
if itemid not in item_list: | |
break | |
item = Item(itemname, itemauthor, itemmedia, itemid, memberid) | |
item_list[itemid] = item | |
print "Added item: " + str(item) | |
return itemid | |
def AddMember(): | |
membername = raw_input("What is the member's name? (\"firstname surname\") ") | |
names = membername.split() | |
if len(names) > 2: | |
print "Error: Invalid name" | |
print "Please try again" | |
return | |
memberpost = raw_input("What is the member's postcode? ") | |
if len(memberpost) > 8: | |
print "Error: Invalid postcode" | |
print "Please try again" | |
return | |
memberid = membername.replace(" ", "") + memberpost.replace(" ", "") | |
if memberid in member_list: | |
print "Error: Duplicate user" | |
print "Please try again" | |
return | |
# In case there is no surname | |
if len(names) == 2: | |
surname = names[1] | |
else: | |
surname = "" | |
member = Member(names[0], surname, memberpost, []) | |
member_list[memberid] = member | |
print "Added member: " + str(member) | |
num_items = raw_input("How many items does the user own? ") | |
user_item_list = [] | |
i = 0 | |
while i < num_items: | |
itemid = raw_input("Enter UID for item no. " + str(i + 1) + " ") | |
if itemid not in item_list: | |
new_item = raw_input("Warning: Item not in database. (create/retry) ") | |
if new_item == "create": | |
itemid = AddItem(memberid) | |
if itemid != None: | |
user_item_list.append(itemid) | |
else: | |
# Error entering item, try again | |
i -= 1 | |
continue | |
else: | |
# Error entering item, try again | |
i -= 1 | |
continue | |
elif not item_list[itemid].available: | |
print "Error: Item is unavailable" | |
else: | |
item_list[itemid].available = False | |
user_item_list.append(itemid) | |
i += 1 | |
member_list[memberid].owned_items = user_item_list | |
return memberid | |
def DeleteMember(): | |
memberid = raw_input("Enter the member ID to delete: ") | |
if memberid not in member_list: | |
print "Error: Cannot delete a member that doesn't exist!" | |
return | |
del member_list[memberid] | |
# Remove all references of the member | |
for key, value in item_list: | |
if value.member_id == memberid: | |
value.member_id = None | |
def DeleteItem(): | |
itemid = raw_input("Enter the item ID to delete: ") | |
if itemid not in item_list: | |
print "Error: Cannot delete an item that doesn't exist!" | |
return | |
del item_list[itemid] | |
# Remove all references of the item | |
for key, value in member_list: | |
if itemid in value.owned_items: | |
value.owned_items.remove(itemid) | |
def BorrowItem(): | |
memberid = raw_input("Enter ID of member: ") | |
if memberid not in member_list: | |
print "Error: Unrecognised member ID" | |
return | |
itemid = raw_input("Enter ID of item to borrow: ") | |
if itemid not in item_list: | |
print "Error: Unrecognised item ID" | |
return | |
if not item_list[itemid].available: | |
print "Error: Item is unavailable" | |
return | |
member_list[memberid].owned_items.append(itemid) | |
item_list[itemid].available = False | |
item_list[itemid].member_id = memberid | |
def ReturnItem(): | |
itemid = raw_input("Enter ID of item to return: ") | |
if itemid not in item_list: | |
print "Error: Unrecognised item ID" | |
return | |
elif item_list[itemid].available: | |
print "Error: Item has not been borrowed" | |
return | |
for key, value in member_list: | |
if itemid in value.owned_items: | |
value.owned_items.remove(itemid) | |
item_list[itemid].member_id = None | |
def ListBorrowedItems(): | |
memberid = raw_input("Enter ID of member: ") | |
if memberid not in member_list: | |
print "Error: Unrecognised member ID" | |
return | |
member = member_list[memberid] | |
print "Member \"" + member.firstname + " " + member.surname + "\" has borrowed:" | |
print str(member.owned_items) | |
member_list = LoadDict("members") | |
item_list = LoadDict("items") | |
print "Initial member list:\n" + str(member_list) + "\n\n" | |
print "Initial item list:\n" + str(item_list) + "\n" | |
# Dispatch dictionary | |
main_dict = {"addmember":AddMember, "additem":AddItem, "delmember":DeleteMember, | |
"delitem":DeleteItem, "borrowitem":BorrowItem, "returnitem":ReturnItem, | |
"listitem":ListBorrowedItems} | |
# Main loop | |
while(True): | |
userin = raw_input("What would you like to do?\n\ | |
*addmember* - Add a member to the database\n\ | |
*additem* - Add an item to the database\n\ | |
*delmember* - Delete a member from the database\n\ | |
*delitem* - Delete an item from the database\n\ | |
*borrowitem* - Borrow an item\n\ | |
*returnitem* - Return an item\n\ | |
*listitem* - List the items borrowed by a member\n\ | |
*exit* - Exit program\n\ | |
") | |
func_call = main_dict.get(userin) | |
if func_call == None: | |
break | |
func_call() | |
print "Final member list:\n" + str(member_list) + "\n\n" | |
print "Final item list:\n" + str(item_list) + "\n" | |
SaveDict("members", member_list) | |
SaveDict("items", item_list) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment