8. P-uppgift: prototyp

Programmeringsteknik

(Skillnad mellan versioner)
Hoppa till: navigering, sök
Nuvarande version (5 april 2012 kl. 13.23) (redigera) (ogör)
(Ersätter sidans innehåll med 'Se Prototyp')
 
(20 mellanliggande versioner visas inte.)
Rad 1: Rad 1:
-
==Prototyp==
+
Se [[P-uppgift: Prototyp|Prototyp]]
-
 
+
-
<pre># -*- coding: iso8859-1 -*-
+
-
 
+
-
######################################################################
+
-
#
+
-
# Titel: Bibliotek (prototyp)
+
-
# Författare: Stefan Nilsson
+
-
# Datum: 2007-06-29
+
-
#
+
-
# Det här är ett program för hantering av enklare biblioteksrutiner.
+
-
#
+
-
# Programmet lagrar böckerna i en fil med namnet "bibliotek.txt"
+
-
# mellan körningarna. Varje rad innehåller en bok beskriven på
+
-
# följande format:
+
-
#
+
-
# <AUTHOR>/<TITLE>
+
-
#
+
-
# eller
+
-
#
+
-
# <AUTHOR>/<TITLE>/Utlånad
+
-
#
+
-
# om boken är utlånad. Exempel på datafil:
+
-
#
+
-
# Bälter/Programmeringsteknik med Python/Utlånad
+
-
# Bälter/Pythonvetaren
+
-
#
+
-
######################################################################
+
-
 
+
-
 
+
-
######################################################################
+
-
# En klass som beskriver en bok.
+
-
# author - namnet på författaren
+
-
# title - bokens titel
+
-
# isBorrowed - en variabel som är True om boken är utlånad.
+
-
######################################################################
+
-
class Book:
+
-
# Skapar en ny bok.
+
-
def __init__(self, author, title):
+
-
self.author = author
+
-
self.title = title
+
-
self.isBorrowed = False
+
-
 
+
-
# Returnerar en sträng som beskriver boken.
+
-
# Format: <author>: <title> (utlånad)
+
-
def string(self):
+
-
author_and_title = self.author + ': ' + self.title
+
-
if self.isBorrowed:
+
-
return author_and_title + ' (utlånad)'
+
-
else:
+
-
return author_and_title
+
-
 
+
-
 
+
-
######################################################################
+
-
# En klass som beskriver en bibliotekskatalog.
+
-
# books - en lista som innehåller samtliga böcker.
+
-
######################################################################
+
-
class Catalog:
+
-
# Skapar en bibliotekskatalog med de böcker som finns i filen.
+
-
def __init__(self, filename):
+
-
self.books = list()
+
-
file = open(filename, 'r')
+
-
line = file.readline()
+
-
while (line != ''):
+
-
parts = line.split('/')
+
-
if (len(parts) >= 2):
+
-
book = Book(parts[0], parts[1])
+
-
if len(parts) == 3:
+
-
book.isBorrowed = True
+
-
self.books.append(book)
+
-
line = file.readline()
+
-
 
+
-
# Sparar hela bibliotekskatalogen i en fil.
+
-
def save(self, filename):
+
-
file = open(filename, 'w')
+
-
for book in self.books:
+
-
file.write(book.author + '/' + book.title)
+
-
if book.isBorrowed:
+
-
file.write('/Utlånad')
+
-
file.write('\n')
+
-
 
+
-
# Returnerar boken om den finns, annars None.
+
-
# Skiljer inte på små och stora bokstäver.
+
-
def find_title(self, title):
+
-
for book in self.books:
+
-
if are_equal(title, book.title):
+
-
return book
+
-
return None
+
-
 
+
-
# Returnerar en lista på böcker av en viss författare.
+
-
# Return en tom lista om det inte finns några böcker.
+
-
# Skiljer inte på stora och små bokstäver.
+
-
def find_author(self, author):
+
-
book_list = list()
+
-
for book in self.books:
+
-
if are_equal(author, book.author):
+
-
book_list.append(book)
+
-
return book_list
+
-
 
+
-
 
+
-
######################################################################
+
-
# Hjälpfunktioner
+
-
######################################################################
+
-
+
-
# Returnerar True om s1 och s2 är lika.
+
-
# Skiljer inte på små och stora bokstäver och tar bort
+
-
# eventuella blanktecken i början och slutet av strängen.
+
-
def are_equal(s1, s2):
+
-
return s1.strip().upper() == s2.strip().upper()
+
-
 
+
-
 
+
-
######################################################################
+
-
# Funktioner för textgränssnitt
+
-
######################################################################
+
-
 
+
-
INDENT = ' ' # Tomma tecken i början av indragna rader
+
-
 
+
-
# Skriver ut valmenyn.
+
-
def print_menu():
+
-
print INDENT, 'T söka på Titel.'
+
-
print INDENT, 'F söka på Författare.'
+
-
print INDENT, 'L Låna bok.'
+
-
print INDENT, 'Å Återlämna bok.'
+
-
print INDENT, 'N lägga in Ny bok.'
+
-
print INDENT, 'B ta Bort bok.'
+
-
print INDENT, 'A lista Alla böcker.'
+
-
print INDENT, 'S Sluta.'
+
-
 
+
-
# Läser in och returnerar första bokstaven i användarens val.
+
-
# Omvandlar liten bokstav till stor.
+
-
def choose():
+
-
choice = raw_input('Vad vill du göra? ')
+
-
return choice[0].upper()
+
-
 
+
-
# Söker på titel.
+
-
def search_title(catalog):
+
-
title = raw_input('Vilken titel vill du söka efter? ')
+
-
book = catalog.find_title(title)
+
-
if (book == None):
+
-
print INDENT, 'Hittade ingen bok med den titeln.'
+
-
else:
+
-
print INDENT, book.string()
+
-
 
+
-
# Söker på författare.
+
-
def search_author(catalog):
+
-
author = raw_input('Vilken författare vill du söka efter? ')
+
-
book_list = catalog.find_author(author)
+
-
if len(book_list) == 0:
+
-
print INDENT, 'Hittade inga böcker av den författaren.'
+
-
else:
+
-
print INDENT, 'Hittade',
+
-
print len(book_list),
+
-
print 'böcker'
+
-
for book in book_list:
+
-
print INDENT, book.string()
+
-
 
+
-
# Lånar en bok.
+
-
def borrow_book(catalog):
+
-
return
+
-
 
+
-
# Återlämnar en bok.
+
-
def return_book(catalog):
+
-
return
+
-
 
+
-
# Lägger till en ny bok.
+
-
def add_book(catalog):
+
-
return
+
-
 
+
-
# Tar bort en bok.
+
-
def delete_book(catalog):
+
-
return
+
-
 
+
-
 
+
-
######################################################################
+
-
# Huvudprogram
+
-
######################################################################
+
-
 
+
-
print 'Välkommen till biblioteksprogrammet!'
+
-
 
+
-
FILENAME = 'bibliotek.txt'
+
-
catalog = Catalog(FILENAME)
+
-
 
+
-
# Testutskrift
+
-
print 'Antal böcker:', len(catalog.books)
+
-
for book in catalog.books:
+
-
print book.string()
+
-
 
+
-
print_menu()
+
-
 
+
-
choice = choose();
+
-
while choice != 'S':
+
-
if choice == 'T':
+
-
search_title(catalog)
+
-
if choice == 'F':
+
-
search_author(catalog)
+
-
choice = choose()
+
-
 
+
-
catalog.save(FILENAME)
+
-
 
+
-
print INDENT, 'Välkommen åter!'</pre>
+
-
 
+
-
 
+
-
==Inlämningsuppgift 5==
+
-
 
+
-
TODO
+

Nuvarande version

Se Prototyp