Permalink
Cannot retrieve contributors at this time
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?
121COM-Retake-Assignment/README.md
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
227 lines (172 sloc)
9.3 KB
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
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!') | |
``` |