The Student Room Group

Computer science nea ideas??

I'm doing OCR computer science and I have till Tuesday to decide what I'm going to do for my NEA. Currently thinking of either an app which shows stock graphs and latest news on company shares, or an app which allows students to make and organise notes aswell as allocating a timetable based on their routine. Any suggestions as to what I should do or any ideas that you think will allow me to get a good grade? Looking for something that can be made on a python based module
Both of those ideas sound good - remember that the report will be the main factor which determines what grade you get at the end, as long as the project itself is complex enough for A-Level standard.

Make sure you spent a lot of time on the parts of the report related to your analysis, objectives, requirements, functional test planning, UI mockups etc. These are all things which you should do before starting to write the code because they all help you define what it is that you're going to be building, and what the project actually needs to do from a user point of view. Maybe you could look at other existing similar apps online to get some ideas from those - e.g. what data to use, what the UI workflow could look like, what features to include, etc.

As for using Python modules, you could put Matplotlib charts onto a TKInter UI. Alternatively, you could use Flask to build a Python web app and use ChartJS to draw graphs on a webpage.

In terms of meeting complexity requirements, a few things you could look at:

Apply some common "OO" patterns to your app to split everything up into logically separate classes - e.g. here's a simple TKInter app example using a common OO pattern used for GUIs called Model-View-Controller: https://gist.github.com/ReddyKilowatt/5d0bfedbe9a92a8f50cd948ab51683ee

Build your app around a SQL database containing non-trivial relationships between tables, and use complex SQL queries to retrieve the data you need for your graphs/tables/etc. (If you use a database, then the OO 'repository' pattern might be a useful way to separate that out from your UI code).

Get some data from someone else's free web API using HTTP - e.g. you could get some news headlines from https://newsapi.org/

Build a user authentication (identity/login) system using various common security features - e.g. password complexity, maximum retries, password reset, maybe some hand-rolled encrytion and/or hashing algorithm to store the password securely in your database, etc.

Reply 2
Original post by winterscoming
Both of those ideas sound good - remember that the report will be the main factor which determines what grade you get at the end, as long as the project itself is complex enough for A-Level standard.

Make sure you spent a lot of time on the parts of the report related to your analysis, objectives, requirements, functional test planning, UI mockups etc. These are all things which you should do before starting to write the code because they all help you define what it is that you're going to be building, and what the project actually needs to do from a user point of view. Maybe you could look at other existing similar apps online to get some ideas from those - e.g. what data to use, what the UI workflow could look like, what features to include, etc.

As for using Python modules, you could put Matplotlib charts onto a TKInter UI. Alternatively, you could use Flask to build a Python web app and use ChartJS to draw graphs on a webpage.

In terms of meeting complexity requirements, a few things you could look at:

Apply some common "OO" patterns to your app to split everything up into logically separate classes - e.g. here's a simple TKInter app example using a common OO pattern used for GUIs called Model-View-Controller: https://gist.github.com/ReddyKilowatt/5d0bfedbe9a92a8f50cd948ab51683ee

Build your app around a SQL database containing non-trivial relationships between tables, and use complex SQL queries to retrieve the data you need for your graphs/tables/etc. (If you use a database, then the OO 'repository' pattern might be a useful way to separate that out from your UI code).

Get some data from someone else's free web API using HTTP - e.g. you could get some news headlines from https://newsapi.org/

Build a user authentication (identity/login) system using various common security features - e.g. password complexity, maximum retries, password reset, maybe some hand-rolled encrytion and/or hashing algorithm to store the password securely in your database, etc.


Hi thanks alot I'll look into it. I've decided to go with a developed version of my second idea as my teacher said it would be more feasible and I think it would be more relevant to me- an app which students can create an account on to make and organise notes aswell as share notes with other users. They can also decide whether to make their notes private or public so that other students can view them. What would be the best way to implement the sharing of notes on python? Could I save the data on an online database and then retrieve it on the recipients account?
Reply 3
Also, is kivy a good module to use for app creation?
Original post by Fufuyo
Hi thanks alot I'll look into it. I've decided to go with a developed version of my second idea as my teacher said it would be more feasible and I think it would be more relevant to me- an app which students can create an account on to make and organise notes aswell as share notes with other users. They can also decide whether to make their notes private or public so that other students can view them. What would be the best way to implement the sharing of notes on python? Could I save the data on an online database and then retrieve it on the recipients account?

That sounds like a pretty sensible choice :smile: You could certainly store the notes in a database, that seems like a good approach to me. You could try using a MySQL database:
The free version of MySQL is the Community Edition -- you'd need to install the MySQL Server (which is the database itself). Also the 'Workbench' app is really useful because it gives you a UI to look at your database(s) - e.g. their tables, run queries, look at their joins/relations, export the schema, etc.
https://dev.mysql.com/downloads/mysql/

You can get a Python package to connect to it: https://www.w3schools.com/python/python_mysql_getstarted.asp


How to share the notes would really be down to design choices you make in your database and your code, but one option could be to have a separate table which stores a record of which notes are shared with which user(s) -- in SQL terms that's a type of database design usually known as a 'joining table' or 'join table' or 'link table' -- i.e. creating a table whose purpose is to remember links/joins between other tables (pairs of keys). Another description for this type of table is a Many-to-Many relationship (Which should be covered elsewhere on the course if you haven't touched databases yet..)



Original post by Fufuyo
Also, is kivy a good module to use for app creation?

I haven't used Kivy, but it looks more a lot more complicated than TKinter to get started with and a steeper learning curve. It looks like you'd need to figure out how to use the Kivy design language as well. So while it seems like a good framework for writing apps, it could end up taking you alot longer, so keep in mind the amount of time and that there won't be additional marks for the time you'll have spent.

TKInter might seem old, although there's nothing really wrong with it, at least not for an A-Level project anyway. From an A-Level project point of view, the main thing about TKinter is just that it's easier/simpler to use and learn the basics - there's no separate design language, everything is just in Python.


But by all means, it could be an interesting exercise to learn how to use Kivy (especially if you plan to do more with Python in the future), just be mindful of time and that the important thing is having a complete report and having a functional app at the end. Even if the UI for your app doesn't look the best, you're not being graded on having a cool/sleek UI design.
Reply 5
Original post by winterscoming
That sounds like a pretty sensible choice :smile: You could certainly store the notes in a database, that seems like a good approach to me. You could try using a MySQL database:
The free version of MySQL is the Community Edition -- you'd need to install the MySQL Server (which is the database itself). Also the 'Workbench' app is really useful because it gives you a UI to look at your database(s) - e.g. their tables, run queries, look at their joins/relations, export the schema, etc.
https://dev.mysql.com/downloads/mysql/

You can get a Python package to connect to it: https://www.w3schools.com/python/python_mysql_getstarted.asp


How to share the notes would really be down to design choices you make in your database and your code, but one option could be to have a separate table which stores a record of which notes are shared with which user(s) -- in SQL terms that's a type of database design usually known as a 'joining table' or 'join table' or 'link table' -- i.e. creating a table whose purpose is to remember links/joins between other tables (pairs of keys). Another description for this type of table is a Many-to-Many relationship (Which should be covered elsewhere on the course if you haven't touched databases yet..)




I haven't used Kivy, but it looks more a lot more complicated than TKinter to get started with and a steeper learning curve. It looks like you'd need to figure out how to use the Kivy design language as well. So while it seems like a good framework for writing apps, it could end up taking you alot longer, so keep in mind the amount of time and that there won't be additional marks for the time you'll have spent.

TKInter might seem old, although there's nothing really wrong with it, at least not for an A-Level project anyway. From an A-Level project point of view, the main thing about TKinter is just that it's easier/simpler to use and learn the basics - there's no separate design language, everything is just in Python.


But by all means, it could be an interesting exercise to learn how to use Kivy (especially if you plan to do more with Python in the future), just be mindful of time and that the important thing is having a complete report and having a functional app at the end. Even if the UI for your app doesn't look the best, you're not being graded on having a cool/sleek UI design.

Thanks for clarifying, I'm already familiar with sqlite as I used it for my GCSE nea so using a mysql database would be more convenient for me to learn.
I think I will go with your advise of using tkinter as in the end my aim is just to make a functioning app that can get me a good grade and I don't really have the time to learn a new language- especially as im doing 4 subjects. However, will a tkinter app work on Android? Ik that kivy is cross platform but I was wondering whether tkinter is too. If not then I guess it doesn't matter but it would be nice if the app could work on mobile aswell. Also, do they not mark you at all for an aesthetic UI?
Original post by Fufuyo
Thanks for clarifying, I'm already familiar with sqlite as I used it for my GCSE nea so using a mysql database would be more convenient for me to learn.
I think I will go with your advise of using tkinter as in the end my aim is just to make a functioning app that can get me a good grade and I don't really have the time to learn a new language- especially as im doing 4 subjects. However, will a tkinter app work on Android? Ik that kivy is cross platform but I was wondering whether tkinter is too. If not then I guess it doesn't matter but it would be nice if the app could work on mobile aswell. Also, do they not mark you at all for an aesthetic UI?

Android would be a problem for TKinter unfortunately! TKinter is cross-platform for Windows, Linux/Unix and MacOS, but it predates Android and IOS so it's never really had proper support for those, but having it running on mobile wouldn't actually get any extra marks anyway, so I wouldn't worry too much about that.

I don't remember there being any marks for aesthetics in the mark scheme, but double check just in case. There's a some marks for usability but that's more about functionality rather than whether it looks good - i.e. stuff like having user-friendly error messages, user input validation, sensible labels on buttons/menus, users having a workflow through the UI navigation which lets them do what they need.

Otherwise most of the marks for the implementation will be down to how well you're able to actually implement the app, and have evidence that you're following methodical processes - e.g. prototyping, testing, showing that you were able to debug and fix problems you found during testing, maybe also reworking bits of it after feedback from the users, writing 'good' well-structured code, and having enough complexity in your own code with things like queries, algorithms, OO structures, etc.

I wouldn't say that TKinter necessarily has to look 'bad' anyway, it just looks old and dated, but the way it looks is no worse than the UI toolkit that people use in Java or VB/C# though really. (Obviously still at least try to make it look reasonable with things like sensible spacing, size, alignment, layout, etc.)


Also on a slightly different topic, which IDE or code editor are you using? If you're still using IDLE then i'd recommend giving the free PyCharm (Community edition) a try because it's a lot more programmer-friendly than IDLE; stuff like autocomplete, popup help, mouseover tooltips, better syntax highlighting and error highlighting/hints saves a lot of time and makes things easier. Also the biggest improvement with PyCharm being its Debugger which is a lot better at showing everything that the code is doing when you set breakpoints in your code (red dots along the side of the editor). It's really useful for finding bugs and seeing what the code is really doing!
(edited 4 years ago)
Reply 7
Original post by winterscoming
Android would be a problem for TKinter unfortunately! TKinter is cross-platform for Windows, Linux/Unix and MacOS, but it predates Android and IOS so it's never really had proper support for those, but having it running on mobile wouldn't actually get any extra marks anyway, so I wouldn't worry too much about that.

I don't remember there being any marks for aesthetics in the mark scheme, but double check just in case. There's a some marks for usability but that's more about functionality rather than whether it looks good - i.e. stuff like having user-friendly error messages, user input validation, sensible labels on buttons/menus, users having a workflow through the UI navigation which lets them do what they need.

Otherwise most of the marks for the implementation will be down to how well you're able to actually implement the app, and have evidence that you're following methodical processes - e.g. prototyping, testing, showing that you were able to debug and fix problems you found during testing, maybe also reworking bits of it after feedback from the users, writing 'good' well-structured code, and having enough complexity in your own code with things like queries, algorithms, OO structures, etc.

I wouldn't say that TKinter necessarily has to look 'bad' anyway, it just looks old and dated, but the way it looks is no worse than the UI toolkit that people use in Java or VB/C# though really. (Obviously still at least try to make it look reasonable with things like sensible spacing, size, alignment, layout, etc.)


Also on a slightly different topic, which IDE or code editor are you using? If you're still using IDLE then i'd recommend giving the free PyCharm (Community edition) a try because it's a lot more programmer-friendly than IDLE; stuff like autocomplete, popup help, mouseover tooltips, better syntax highlighting and error highlighting/hints saves a lot of time and makes things easier. Also the biggest improvement with PyCharm being its Debugger which is a lot better at showing everything that the code is doing when you set breakpoints in your code (red dots along the side of the editor). It's really useful for finding bugs and seeing what the code is really doing!

I understand I'll browse through the mark scheme again. And yes I was using IDLE up until now but I'm happy to try out pycharm, a few of my friends have switched to pycharm aswell but I think that's just cause of the black background lol. Thanks alot for your help I'll start watching vids on tkinter right away!

Quick Reply

Latest

Trending

Trending