Skip to content

Commit 371ccb8

Browse files
committed
Add crud_operation
1 parent 9d3c59a commit 371ccb8

File tree

12 files changed

+580
-0
lines changed

12 files changed

+580
-0
lines changed

crud_operation/.gitignore

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[codz]
4+
*$py.class
5+
6+
test
7+
8+
# C extensions
9+
*.so
10+
11+
# Distribution / packaging
12+
.Python
13+
build/
14+
develop-eggs/
15+
dist/
16+
downloads/
17+
eggs/
18+
.eggs/
19+
lib/
20+
lib64/
21+
parts/
22+
sdist/
23+
var/
24+
wheels/
25+
share/python-wheels/
26+
*.egg-info/
27+
.installed.cfg
28+
*.egg
29+
MANIFEST
30+
31+
# PyInstaller
32+
# Usually these files are written by a python script from a template
33+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
34+
*.manifest
35+
*.spec
36+
37+
# Installer logs
38+
pip-log.txt
39+
pip-delete-this-directory.txt
40+
41+
# Unit test / coverage reports
42+
htmlcov/
43+
.tox/
44+
.nox/
45+
.coverage
46+
.coverage.*
47+
.cache
48+
nosetests.xml
49+
coverage.xml
50+
*.cover
51+
*.py.cover
52+
.hypothesis/
53+
.pytest_cache/
54+
cover/
55+
56+
# Translations
57+
*.mo
58+
*.pot
59+
60+
# Django stuff:
61+
*.log
62+
local_settings.py
63+
db.sqlite3
64+
db.sqlite3-journal
65+
66+
# Flask stuff:
67+
instance/
68+
.webassets-cache
69+
70+
# Scrapy stuff:
71+
.scrapy
72+
73+
# Sphinx documentation
74+
docs/_build/
75+
76+
# PyBuilder
77+
.pybuilder/
78+
target/
79+
80+
# Jupyter Notebook
81+
.ipynb_checkpoints
82+
83+
# IPython
84+
profile_default/
85+
ipython_config.py
86+
87+
# pyenv
88+
# For a library or package, you might want to ignore these files since the code is
89+
# intended to run in multiple environments; otherwise, check them in:
90+
# .python-version
91+
92+
# pipenv
93+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
95+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
96+
# install all needed dependencies.
97+
#Pipfile.lock
98+
99+
# UV
100+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
101+
# This is especially recommended for binary packages to ensure reproducibility, and is more
102+
# commonly ignored for libraries.
103+
#uv.lock
104+
105+
# poetry
106+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
107+
# This is especially recommended for binary packages to ensure reproducibility, and is more
108+
# commonly ignored for libraries.
109+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
110+
#poetry.lock
111+
#poetry.toml
112+
113+
# pdm
114+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
115+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
116+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
117+
#pdm.lock
118+
#pdm.toml
119+
.pdm-python
120+
.pdm-build/
121+
122+
# pixi
123+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
124+
#pixi.lock
125+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
126+
# in the .venv directory. It is recommended not to include this directory in version control.
127+
.pixi
128+
129+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
130+
__pypackages__/
131+
132+
# Celery stuff
133+
celerybeat-schedule
134+
celerybeat.pid
135+
136+
# SageMath parsed files
137+
*.sage.py
138+
139+
# Environments
140+
.env
141+
.envrc
142+
.venv
143+
env/
144+
venv/
145+
ENV/
146+
env.bak/
147+
venv.bak/
148+
149+
# Spyder project settings
150+
.spyderproject
151+
.spyproject
152+
153+
# Rope project settings
154+
.ropeproject
155+
156+
# mkdocs documentation
157+
/site
158+
159+
# mypy
160+
.mypy_cache/
161+
.dmypy.json
162+
dmypy.json
163+
164+
# Pyre type checker
165+
.pyre/
166+
167+
# pytype static type analyzer
168+
.pytype/
169+
170+
# Cython debug symbols
171+
cython_debug/
172+
173+
# PyCharm
174+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
175+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
176+
# and can be added to the global gitignore or merged into this file. For a more nuclear
177+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
178+
#.idea/
179+
180+
# Abstra
181+
# Abstra is an AI-powered process automation framework.
182+
# Ignore directories containing user credentials, local state, and settings.
183+
# Learn more at https://abstra.io/docs
184+
.abstra/
185+
186+
# Visual Studio Code
187+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
188+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
189+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
190+
# you could uncomment the following to ignore the entire vscode folder
191+
# .vscode/
192+
193+
# Ruff stuff:
194+
.ruff_cache/
195+
196+
# PyPI configuration file
197+
.pypirc
198+
199+
# Cursor
200+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
201+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
202+
# refer to https://docs.cursor.com/context/ignore-files
203+
.cursorignore
204+
.cursorindexingignore
205+
206+
# Marimo
207+
marimo/_static/
208+
marimo/_lsp/
209+
__marimo__/

crud_operation/LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Luckson
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

crud_operation/README.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# User Management System (CLI)
2+
3+
A lightweight **Command Line Interface (CLI)** application built with Python to manage user records using **CRUD** (Create, Read, Update, Delete) operations. This project features a dynamic typewriter effect with ANSI color support for enhanced user experience.
4+
5+
---
6+
7+
## 🚀 Features
8+
9+
* **Full CRUD Operations:** View, Add, Update, and Delete users.
10+
* **Dynamic UI:** Includes a "typewriter" animation effect for console output.
11+
* **Color-Coded Feedback:**
12+
* 🟢 **Green:** Success messages.
13+
* 🔴 **Red:** Error messages and exit alerts.
14+
* **Input Validation:** Ensures only numeric inputs are processed for actions.
15+
* **Error Handling:** Robust `try-except` blocks to prevent crashes during runtime.
16+
17+
---
18+
19+
## 🛠️ Project Structure
20+
21+
```text
22+
├── main.py # Entry point of the application
23+
├── crud/
24+
│ └── views.py # User model and view logic
25+
└── services/
26+
└── action.py # Logic mapping inputs to CRUD functions
27+
28+
```
29+
30+
---
31+
32+
## 💻 Installation & Usage
33+
34+
1. **Clone the repository:**
35+
```bash
36+
git clone [https://github.com/yourusername/user-management-python.git](https://github.com/yourusername/user-management-python.git)
37+
cd user-management-python
38+
39+
```
40+
41+
42+
2. **Run the application:**
43+
```bash
44+
python main.py
45+
46+
```
47+
48+
## 📖 Menu Options
49+
50+
Upon launching, select an option by typing the corresponding number:
51+
52+
| Option | Action | Description |
53+
| --- | --- | --- |
54+
| **1** | **Show users list** | Displays all registered users. |
55+
| **2** | **Add user** | Opens a prompt to create a new user profile. |
56+
| **3** | **Update user** | Modifies existing user details. |
57+
| **4** | **Delete user** | Removes a user from the system. |
58+
| **5** | **Quit** | Safely closes the application. |
59+
60+
---
61+
62+
## ⚙️ Technical Highlights
63+
64+
### Visual Effects
65+
66+
The system uses the `sys.stdout` buffer to print characters one by one for a typewriter effect, combined with **ANSI escape codes** for coloring:
67+
68+
* **Green (`\033[92m`)**: Used for successful operations.
69+
* **Red (`\033[91m`)**: Used for errors and exit messages.
70+
71+
### Logic Flow
72+
73+
The program verifies that the input is a digit before processing, preventing common input errors.
74+
75+
```python
76+
if action.isdigit():
77+
actions(action, User)
78+
else:
79+
print("Enter the action number.")
80+
81+
```
82+
83+
---
84+
85+
## 📝 License
86+
87+
This project is open-source and available under the **MIT License**.

crud_operation/crud/__init__.py

Whitespace-only changes.

crud_operation/crud/db.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import sqlite3
2+
3+
def db_connection():
4+
con = sqlite3.connect("db/users.db")
5+
cursor = con.cursor()
6+
7+
return con, cursor

crud_operation/crud/models.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from crud.db import db_connection
2+
3+
class Model:
4+
def user(self):
5+
con, cursor = db_connection()
6+
7+
cursor.execute(
8+
"""
9+
CREATE TABLE IF NOT EXISTS Users(
10+
id INTEGER PRIMARY KEY AUTOINCREMENT,
11+
first_name TEXT NOT NULL,
12+
last_name TEXT NOT NULL,
13+
age INTEGER NOT NULL,
14+
email TEXT NOT NULL,
15+
UNIQUE(email)
16+
)
17+
"""
18+
)
19+
20+
con.commit()

0 commit comments

Comments
 (0)