Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time

Your assessment consists of two components: Coursework (70%) and Exam (30%).

The Coursework consists of three elements:

  • Phase Test 1 in Teaching Week 5 (14% of module grade)
  • Phase Test 2 on Teaching Week 10 (14% of module grade)
  • Project (42% of module grade). Repeat students take this project instead of ALL.

This document is the specification of your project. (The phase tests are taken in class.)

The project has two parts:

  1. Writing a professional blog.
  2. Developing a phonebook program in Python.


You must create and maintain a personal professional blog, using the Coventry GitHub Pages -- see guidance later in this document.

Write posts on the following three topics:

  1. The study skills required for success at university. Identify 3 key study skills for success at university:
    • One skill should be one you already have. (Explain with evidence.)
    • Two skills should be ones you need to improve. (Make suggestions and give a concrete plan on how to improve.)
  2. Your objectives and ambitions.
    • Identify at least one type of job you are interested in after university.
    • Identify 3 objectives for your time at university. The objectives should be linked to the job. For each objective identify plans to achieve it.
  3. Reflection on the first half of semester. Reflect on how your first half semester has gone.
    • Identify at least one good outcome and one thing you would improve.
    • Note which phase tests (121COM and other modules) went best for you and which worst. Make at least one suggestion for what you will change to do better on the upcoming Phase Test 2.

Please title the posts clearly so we know which is which. You may also write additional posts if you like (but they will not be marked).


Write a phonebook program, in Python, to manage contacts, based on the starting code available from First, fork the repository, then work on the forked version.

You need to implement the basic functionaily needed to make run without errors, namely:

  • add_entry(): add a new entry with details to the phonebook.
  • remove_entry(): delete an entry (by name) from the phonebook.
  • find(): search the phonebook (by exact name -- only one match).
  • search(): search the phonebook (by partial name match -- may have multiple matches).
  • show_entry(): find an entry and show it to the user.
  • show_phonebook(): printout all the entries in the phonebook.
  • Raise an appropriate error if the entry does not exist.

The script uses one global variable phonebook, which is a dictionary that holds all the details. Try not to add other global variables, and if you do then justify their use.

Extra marks are available for various intermediate extensions:

  • Multiple contact details for the same contact, e.g. multiple phone numbers.
  • Store and load the phonebook data to/from a file. (Consider pickling.)
  • Raise and handle errors appropriately, including sanitising input from the user, e.g. "Is the entered text for the the phone number plausible, or is it an email address?".
  • Export the data in a standard format, e.g. vCard:

There are marks dedicated to professional coding: using functions, including docstrings, sensible variable and function names, version control (i.e. good use of GitHub), etc.

Professional code can achieve 80%. The final 20% are for advanced extensions. For example,

  • Support internationalisation (Allow interface to be translated).
  • Import from a standard format (used by e.g. your phone).
  • Graphical User Interface (GUI). Instead of using the terminal for IO, use e.g. Python Tkinter or add touch-screen interactivity.
  • Use Object Oriented Design/Programming.

Important notes

  • Only use standard Python functionality and modules from the Standard Library. No code from third party libraries is allowed.
  • Make use of functions and functional decomposition.
  • There is no requirement to use Object Oriented Design, but you can choose to use it (if you know it already) for extra marks.

Marking Scheme

You will be given a mark out of 100, according to the following mark-scheme.

Each topic will be marked on partial credit.


Marks Criteria
10 Appearance and Quality of English.
(Layout, style, title, ease of navigation, etc.)
(Good spelling, grammar, appropriate use of language, etc.)
20 Critical Reflection. 5 marks for each post.
To gain all marks you must address all points, show critical reflection and make concrete suggestions for improvement


Marks Criteria
10 Professional code style.
20 Basic phonebook functionality.
20 Intermediate extensions. 5 marks each.
20 Advanced extensions. 10 marks each.
You are encouraged to be creative and come up with other ideas. Please check with the module leader whether they would count for these marks.

Submission Instructions

The deadline is 6pm on Friday 14^th^ December 2017 (end of Semester 1).

Submission is online via Moodle: you only need to submit the URL to your Coventry GitHub repository.

I recommend submitting earlier to avoid computer/Internet glitches. You only need to submit the link -- the actual work resides in your Coventry GitHub repository.

Coventry GitHub -- guidance

  1. Visit

  2. Login with your university usersname and password.

  3. Find the 121COM-Retake-Assignment repository under the 121COM-1819OCTJAN organisation. Fork it (by clicking on the "Fork" button), but ensure you keep your forked copy under the 121COM-1819OCTJAN organisation, and make it private.

  4. You will have two branches:

    1. master: Use this to for the Phonebook programming (Python).
    2. gh-pages: Use this for blogging. You can use Markdown syntax to write the content, and customise the look of the pages as you like -- search online for help, or ask the module leader.


Note that late submissions receive a zero mark.

Plagiarism is very serious. Make sure you avoid it!

  • The following is not considered as plagiarism:
    • Discussing the project and possible strategies with other students.
    • Looking at online resources for examples of programming techniques.
  • However, the following is considered plagiarism:
    • Copying code, or parts of code, from other students.
    • Copying code, or parts of code, from Internet sites/videos.

If you need further guidance on what is or is not plagiarism then see the relevant slides on the 121COM Moodle page or ask a member of staff.

All submissions are automatically checked for similarity using Tunitin. Any student found to have plagiarised will receive zero marks, and will be reported to the Academic Conduct Office for a disciplinary procedure.

Sample terminal output

The test code:

phonebook = {} # Empty dictinary to hold the details

# Delete implementation details

if __name__=="__main__":
    # Create some entries then show the phonebook
    print("# Creating some entries...")
    add_entry('A A','0123456789','','Coventry, CV3 3AB')
    add_entry('A B','1234567890','')
    add_entry('C C','2345678901')
    add_entry('D D')
    print("# Showing the phonebook")
    # Test searching
    print("# Testing searching")
    show_entry('A A')
    print("## Searching for 'A' yields:")
    # Check errors
    print("# Checking error handling")
    print("## Remove non-existing 'B B'")
        remove_entry('B B')
    except Exception as e:
        print("Error:", e.__class__.__name__, e)
    print("## Showing non-existing 'B B'")
        show_entry('B B')
    except Exception as e:
        print("Error:", e.__class__.__name__, e)

gives the output:

# Creating some entries...
# Showing the phonebook
         Tel: 0123456789
     Address: Coventry, CV3 3AB
         Tel: 1234567890
         Tel: 2345678901
# Testing searching
         Tel: 0123456789
     Address: Coventry, CV3 3AB
## Searching for 'A' yields:
         Tel: 0123456789
     Address: Coventry, CV3 3AB
         Tel: 1234567890
# Checking error handling
## Remove non-existing 'B B'
Error: ValueError ('B B', 'not in the phonebook.')
## Showing non-existing 'B B'
Error: ValueError ('B B', 'not found!')