This is a small school project that I worked on. It is used to manage students, teachers, and classes. It operates by selecting an an option listed from the menu, and pressing enter to get to the next sub-menu.
----- Main Menu -----
1. Manage Teachers
2. Manage Students
3. Manage Classes
4. Exit Program
>
If the user inputs 2, they should see:
----- Student Options -----
1. Add Student
2. Remove Student
3. Review Student
4. View All
5. Register Class
6. Drop Class
7. Go Back
>
The entire project was moreso a test of my skill with data structures as the
entire project is actually just one large data structure, called menu-choice,
which is operated on by the function load-menu. This data structure contains
an anonymous function and a string. The string stores the name of the option
that will be displayed on the menu, and the anonymous function stores what that
option does when it is selected.
The advantage of designing the UI in this way is that it allows for highly
modular development, as every menu-choice separates its display logic from
its activation logic, allowing the menu to be fully implemented and having
features "hook in" to the GUI as they are completed and tested. This data
structure driven development also allows you to write a program to easily
generate new UI layouts, as it is simply a data structure which has code "hook
into" it.
- Steel Bank Common Lisp (SBCL)
- sqlite3 (Command-Line Utility)
Before running the program, make sure your system's shell has access to the
command sqlite3. Once you have verified that you have this program, simply
run these bash commands:
# this checks to see if you have sqlite3
which sqlite3
# this checks to see if you have sbcl
which sbcl
# this initializes the database
sqlite3 database.db "$(cat sql/init.sql)"
# this allows you to run the program
chmod +x main.lisp
# this runs the program
./main.lisp