Skip to content
Permalink
8df4466ac9
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
227 lines (172 sloc) 9.3 KB
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.
# Blog
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).
# Phonebook
Write a *phonebook* program, in Python, to manage contacts, based on the starting code available from
<https://github.coventry.ac.uk/121COM-1819OCTJAN/121COM-Retake-Assignment>: First, **fork the repository**, then work on the forked version.
You need to implement the **basic functionaily** needed to make `Phonebook.py` 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: <https://en.wikipedia.org/wiki/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.
## Blog
| 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 |
## Phonebook
| 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 <https://github.coventry.ac.uk/>
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**.
![](img/fork1.png)
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.
![](img/branches.png)
# Warnings
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:
```python
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','abc@def.com','Coventry, CV3 3AB')
add_entry('A B','1234567890','xyz@abc.com')
add_entry('C C','2345678901')
add_entry('D D')
print("# Showing the phonebook")
show_phonebook()
# Test searching
print("# Testing searching")
show_entry('A A')
print("## Searching for 'A' yields:")
search('A')
# Check errors
print("# Checking error handling")
print("## Remove non-existing 'B B'")
try:
remove_entry('B B')
except Exception as e:
print("Error:", e.__class__.__name__, e)
print("## Showing non-existing 'B B'")
try:
show_entry('B B')
except Exception as e:
print("Error:", e.__class__.__name__, e)
```
gives the output:
```text
# Creating some entries...
# Showing the phonebook
A A
Tel: 0123456789
Email: abc@def.com
Address: Coventry, CV3 3AB
A B
Tel: 1234567890
Email: xyz@abc.com
Address:
C C
Tel: 2345678901
Email:
Address:
D D
Tel:
Email:
Address:
# Testing searching
A A
Tel: 0123456789
Email: abc@def.com
Address: Coventry, CV3 3AB
## Searching for 'A' yields:
A A
Tel: 0123456789
Email: abc@def.com
Address: Coventry, CV3 3AB
A B
Tel: 1234567890
Email: xyz@abc.com
Address:
# 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!')
```