{"id":427,"date":"2024-04-20T18:33:07","date_gmt":"2024-04-20T18:33:07","guid":{"rendered":"https:\/\/sites.wp.odu.edu\/jchris82\/?p=427"},"modified":"2024-04-20T18:33:07","modified_gmt":"2024-04-20T18:33:07","slug":"final-project","status":"publish","type":"post","link":"https:\/\/sites.wp.odu.edu\/jchris82\/2024\/04\/20\/final-project\/","title":{"rendered":"Final-Project"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Justin Christopherson<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">CYSE &#8211; 250<\/h1>\n\n\n\n<h1 class=\"wp-block-heading\">This program will prompt the user to enter the details for a comic book and then add them to a database on my datastax.com server.<\/h1>\n\n\n\n<p>from astrapy import DataAPIClient<br>import datetime<\/p>\n\n\n\n<p>def add_comic(collection):<br>print(&#8220;Add a new comic to your collection:&#8221;)<br>title = input(&#8220;Title: &#8220;)<br>issue_number = input(&#8220;Issue Number: &#8220;)<br>publisher = input(&#8220;Publisher: &#8220;)<br>publication_date = input(&#8220;Publication Date (YYYY-MM-DD): &#8220;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Validate publication date format\ntry:\n    publication_date = datetime.datetime.strptime(publication_date, '%Y-%m-%d').date()\nexcept ValueError:\n    print(\"Invalid date format. Please use YYYY-MM-DD.\")\n    return\n\ncomic = {\n    \"title\": title,\n    \"issue_number\": issue_number,\n    \"publisher\": publisher,\n    \"publication_date\": publication_date.strftime('%Y-%m-%d')\n}\n\n# Save comic to AstraDB\ndb.comics.insert_one(comic)\n\ncollection.append(comic)\nprint(\"Comic added successfully!\\n\")<\/code><\/pre>\n\n\n\n<p>def edit_comic(collection):<br>if not collection:<br>print(&#8220;No comics in collection. Add comics first.&#8221;)<br>return<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(\"\\nEdit a comic in your collection:\")\nview_collection(collection)\ncomic_index = int(input(\"Enter the index of the comic you want to edit: \")) - 1\n\nif comic_index &lt; 0 or comic_index &gt;= len(collection):\n    print(\"Invalid comic index.\")\n    return\n\ncomic = collection&#091;comic_index]\nprint(\"Enter new details (leave blank to keep existing):\")\ntitle = input(f\"Title ({comic&#091;'title']}): \") or comic&#091;'title']\nissue_number = input(f\"Issue Number ({comic&#091;'issue_number']}): \") or comic&#091;'issue_number']\npublisher = input(f\"Publisher ({comic&#091;'publisher']}): \") or comic&#091;'publisher']\npublication_date = input(f\"Publication Date ({comic&#091;'publication_date']}): \") or comic&#091;'publication_date']\n\n# Validate publication date format\ntry:\n    publication_date = datetime.datetime.strptime(publication_date, '%Y-%m-%d').date()\nexcept ValueError:\n    print(\"Invalid date format. Please use YYYY-MM-DD.\")\n    return\n\nupdated_comic = {\n    \"title\": title,\n    \"issue_number\": issue_number,\n    \"publisher\": publisher,\n    \"publication_date\": publication_date.strftime('%Y-%m-%d')\n}\n\n# Update comic in AstraDB\ndb.comics.update_one({\"_id\": comic&#091;\"_id\"]}, {\"$set\": updated_comic})\n\ncollection&#091;comic_index] = updated_comic\nprint(\"Comic edited successfully!\\n\")<\/code><\/pre>\n\n\n\n<p>def delete_comic(collection):<br>if not collection:<br>print(&#8220;No comics in collection. Add comics first.&#8221;)<br>return<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(\"\\nDelete a comic from your collection:\")\nview_collection(collection)\ncomic_index = int(input(\"Enter the index of the comic you want to delete: \")) - 1\n\nif comic_index &lt; 0 or comic_index &gt;= len(collection):\n    print(\"Invalid comic index.\")\n    return\n\ndeleted_comic = collection.pop(comic_index)\n\n# Delete comic from AstraDB\ndb.comics.delete_one({\"_id\": deleted_comic&#091;\"_id\"]})\n\nprint(f\"Deleted comic: {deleted_comic.get('title', 'N\/A')} - Issue #{deleted_comic.get('issue_number', 'N\/A')}\")\nprint(\"Comic deleted successfully!\\n\")<\/code><\/pre>\n\n\n\n<p>def view_collection(collection):<br>comics = db.comics.find({})<br>print(&#8220;\\nYour Comic Collection:&#8221;)<br>for index, comic in enumerate(comics, start=1):<br>title = comic.get(&#8216;title&#8217;, &#8216;N\/A&#8217;)<br>issue_number = comic.get(&#8216;issue_number&#8217;, &#8216;N\/A&#8217;)<br>publisher = comic.get(&#8216;publisher&#8217;, &#8216;N\/A&#8217;)<br>publication_date = comic.get(&#8216;publication_date&#8217;, &#8216;N\/A&#8217;)<br>print(f&#8221;{index}. {title} &#8211; Issue #{issue_number} ({publisher}, {publication_date})&#8221;)<br>print()<\/p>\n\n\n\n<p>def search_comic(collection):<br>search_query = input(&#8220;Enter the title, issue number, or publisher of the comic you want to search for: &#8220;)<br>found_comics = []<br>for comic in collection:<br>if search_query.lower() in comic.get(&#8216;title&#8217;, &#8221;).lower() or \\<br>search_query.lower() in str(comic.get(&#8216;issue_number&#8217;, &#8221;)).lower() or \\<br>search_query.lower() in comic.get(&#8216;publisher&#8217;, &#8221;).lower():<br>found_comics.append(comic)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if found_comics:\n    print(f\"\\nFound {len(found_comics)} matching comic(s):\")\n    for index, comic in enumerate(found_comics, start=1):\n        title = comic.get('title', 'N\/A')\n        issue_number = comic.get('issue_number', 'N\/A')\n        publisher = comic.get('publisher', 'N\/A')\n        publication_date = comic.get('publication_date', 'N\/A')\n        print(f\"{index}. {title} - Issue #{issue_number} ({publisher}, {publication_date})\")\nelse:\n    print(\"No matching comics found.\")<\/code><\/pre>\n\n\n\n<p>def load_collection_from_astrapy():<br># Initialize the DataAPIClient with your token<br>client = DataAPIClient(&#8220;AstraCS:BZNarYEaGJmjqzFztwRotkgj:5472c1a0b3c6d1e6c11f6651b0a7c8a0f183b278535c6766f69d48203b3b7599&#8221;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Get the database by API endpoint\ndb = client.get_database_by_api_endpoint(\"https:\/\/b3b75450-24a9-4865-8f6b-22c18fca27e5-us-east1.apps.astra.datastax.com\")\n\nprint(f\"Connected to Astra DB: {db.list_collection_names()}\")\n\nreturn db<\/code><\/pre>\n\n\n\n<p>def main():<br>global db<br>db = load_collection_from_astrapy()<br>comic_collection = []<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>while True:\n    print(\"1. Add a new comic\")\n    print(\"2. View comic collection\")\n    print(\"3. Search for a comic\")\n    print(\"4. Edit a comic\")\n    print(\"5. Delete a comic\")\n    print(\"6. Exit\")\n    choice = input(\"Enter your choice: \")\n\n    if choice == '1':\n        add_comic(comic_collection)\n    elif choice == '2':\n        view_collection(comic_collection)\n    elif choice == '3':\n        search_comic(comic_collection)\n    elif choice == '4':\n        edit_comic(comic_collection)\n    elif choice == '5':\n        delete_comic(comic_collection)\n    elif choice == '6':\n        print(\"Exiting...\")\n        break\n    else:\n        print(\"Invalid choice. Please try again.\\n\")<\/code><\/pre>\n\n\n\n<p>if <strong>name<\/strong> == &#8220;<strong>main<\/strong>&#8220;:<br>main()<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Justin Christopherson CYSE &#8211; 250 This program will prompt the user to enter the details for a comic book and then add them to a database on my datastax.com server. from astrapy import DataAPIClientimport datetime def add_comic(collection):print(&#8220;Add a new comic to your collection:&#8221;)title = input(&#8220;Title: &#8220;)issue_number = input(&#8220;Issue Number: &#8220;)publisher = input(&#8220;Publisher: &#8220;)publication_date = input(&#8220;Publication &hellip; <a href=\"https:\/\/sites.wp.odu.edu\/jchris82\/2024\/04\/20\/final-project\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Final-Project<\/span><\/a><\/p>\n","protected":false},"author":26825,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","wds_primary_category":0},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/posts\/427"}],"collection":[{"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/users\/26825"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/comments?post=427"}],"version-history":[{"count":1,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/posts\/427\/revisions"}],"predecessor-version":[{"id":428,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/posts\/427\/revisions\/428"}],"wp:attachment":[{"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/media?parent=427"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/categories?post=427"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/jchris82\/wp-json\/wp\/v2\/tags?post=427"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}