From b833fb54552c41f97b6b14b45ac23f8ce307fe8e Mon Sep 17 00:00:00 2001 From: CoderChirag Date: Thu, 30 Sep 2021 23:59:55 +0530 Subject: [PATCH] Made a student Record Manager using Python --- projects/RecordManagment/.gitignore | 1 + projects/RecordManagment/README.md | 7 + .../RecordManagment/RecordManager-icon.ico | Bin 0 -> 240830 bytes projects/RecordManagment/RecordsManager.py | 593 ++++++++++++++++++ projects/RecordManagment/database.py | 60 ++ projects/RecordManagment/marks.json | 64 ++ projects/RecordManagment/student.json | 26 + projects/RecordManagment/subject.json | 22 + 8 files changed, 773 insertions(+) create mode 100644 projects/RecordManagment/.gitignore create mode 100644 projects/RecordManagment/README.md create mode 100644 projects/RecordManagment/RecordManager-icon.ico create mode 100644 projects/RecordManagment/RecordsManager.py create mode 100644 projects/RecordManagment/database.py create mode 100644 projects/RecordManagment/marks.json create mode 100644 projects/RecordManagment/student.json create mode 100644 projects/RecordManagment/subject.json diff --git a/projects/RecordManagment/.gitignore b/projects/RecordManagment/.gitignore new file mode 100644 index 0000000..763624e --- /dev/null +++ b/projects/RecordManagment/.gitignore @@ -0,0 +1 @@ +__pycache__/* \ No newline at end of file diff --git a/projects/RecordManagment/README.md b/projects/RecordManagment/README.md new file mode 100644 index 0000000..2bcfede --- /dev/null +++ b/projects/RecordManagment/README.md @@ -0,0 +1,7 @@ +# Records Manager ![icon](https://github.com/CoderChirag/images/blob/master/RecordManager-icon.ico) + +Made a Utility Based Software using Python. + +This is a software which creates a database in which we can maintain our record very easily. + +![Finished App](https://github.com/CoderChirag/images/blob/master/RecordManager.gif) diff --git a/projects/RecordManagment/RecordManager-icon.ico b/projects/RecordManagment/RecordManager-icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae9290a4e80eed4d56f8a5a3a7302afbe19faa44 GIT binary patch literal 240830 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 literal 0 HcmV?d00001 diff --git a/projects/RecordManagment/RecordsManager.py b/projects/RecordManagment/RecordsManager.py new file mode 100644 index 0000000..69d2bcb --- /dev/null +++ b/projects/RecordManagment/RecordsManager.py @@ -0,0 +1,593 @@ +from tkinter import * +from tkinter.ttk import * +from tkinter import ttk +import tkinter.messagebox as ms +import os + +import database + + +class RecordManagement(Frame): + # Constructor Function + def __init__(self, root): + root.maxsize(560,500) + root.minsize(560,500) + root.wm_iconbitmap('RecordManager-icon.ico') + # Initializing Master Frame and Tab notebook + + Frame.__init__(self) + self.grid() + self.master.title('Record Management') + tabControl = ttk.Notebook(self) + tabControl.configure(width=550, height=500) + + # Initializing Tab 1 --- "Student Registration Tab" + self.tab1 = ttk.Frame(tabControl) + tabControl.add(self.tab1, text="Student Registration") + tabControl.grid() + self.tab1.configure(style='TFrame') + + # Initializing Tab 2 --- "Subject Allocation Tab" + self.tab2 = ttk.Frame(tabControl) + tabControl.add(self.tab2, text="Subject Allocation") + tabControl.grid() + + # Initializing Tab 3 --- "Marks Allocation Tab" + self.tab3 = ttk.Frame(tabControl) + tabControl.add(self.tab3, text="Marks Allocation") + tabControl.grid() + + self.searchTab = ttk.Frame(tabControl) + tabControl.add(self.searchTab, text="Search Database") + tabControl.grid() + + # Initializing Top LabelFrame + self.label_frame() + # Constructing the GUI of 3 tabs + self.tab_construct() + + self.mainloop() + + # Label Frame Construction + def label_frame(self): + # Initializing the LabelFrame for both 3 tabs + self.labelFrame_tab1 = LabelFrame(self.tab1, text="Records Manager - Chitkara University", width=530, height=500) + self.labelFrame_tab1.grid(row=0, column=0) + self.labelFrame_tab1.grid_propagate(0) + + self.labelFrame_tab2 = LabelFrame(self.tab2, text="Records Manager - Chitkara University", width=580, height=500) + self.labelFrame_tab2.grid(row=0, column=0) + self.labelFrame_tab2.grid_propagate(0) + + self.labelFrame_tab3 = LabelFrame(self.tab3, text="Records Manager - Chitkara University", width=580, height=500) + self.labelFrame_tab3.grid(row=0, column=0) + self.labelFrame_tab3.grid_propagate(0) + + self.labelFrame_searchTab = LabelFrame(self.searchTab, text="Records Manager - Chitkara University", width=580, height=500) + self.labelFrame_searchTab.grid(row=0, column=0) + self.labelFrame_searchTab.grid_propagate(0) + + def top_label(self, labeltext, tab, topHeadingColumn=2, sticky="", columnspan=3): + margin = Label(tab, width=2).grid(row=1, column=0) + self.topLabel = Label(tab, text=labeltext,foreground='red', font="Helvetica 18 bold") + self.topLabel.grid(row=0, column=topHeadingColumn, columnspan=columnspan, sticky=sticky) + enter1 = Label(tab).grid(row=1, column=1) + enter2 = Label(tab).grid(row=2, column=1) + + def bottom_label(self, tab, buttonText, startRow, entryList, optionCheck): + enter1 = Label(tab).grid(row=startRow, column=1) + enter2 = Label(tab).grid(row=startRow+1, column=1) + submitButton = Button(tab, text=buttonText, command= lambda entryList=entryList, optionCheck=optionCheck: self.show_msg(entryList, optionCheck)).grid(row=startRow+2, column=2, columnspan=3) + + + + # 3 Tabs main GUI Construction + def tab_construct(self): +# ------------------------------------------------------- TAB 1 ------------------------------------------------------------------ + + self.top_label("New Student Registration", self.labelFrame_tab1) + + nameLabel = Label(self.labelFrame_tab1, text="Name:", font="comicsansms 14").grid(row = 3, column=1, sticky="w") + self.nameEntry = Entry(self.labelFrame_tab1, width=45) + self.nameEntry.grid(row = 3, column=3, columnspan=3) + self.nameEntry.insert(0, "Student Name") + self.nameEntry.bind('', lambda event, entry=self.nameEntry, text="Student Name": self.on_click(event, entry, text)) + self.nameEntry.bind('', lambda event, entry=self.nameEntry, text="Student Name": self.of_click(event, entry, text)) + self.nameEntry.configure(foreground='grey') + + RollNoLabel = Label(self.labelFrame_tab1, text="Roll No.:", font="comicsansms 14").grid(row = 4, column=1, sticky="w") + self.RollNoEntry = Entry(self.labelFrame_tab1, width=45) + self.RollNoEntry.grid(row=4, column=3, columnspan=3) + self.RollNoEntry.insert(0, "Student Roll No.") + self.RollNoEntry.bind('', lambda event, entry=self.RollNoEntry, text="Student Roll No.": self.on_click(event, entry, text)) + self.RollNoEntry.bind('', lambda event, entry=self.RollNoEntry, text="Student Roll No.": self.of_click(event, entry, text)) + self.RollNoEntry.configure(foreground='grey') + + FatherLabel = Label(self.labelFrame_tab1, text="Father's Name:", font="comicsansms 14").grid(row = 5, column=1, sticky="w") + self.fatherEntry = Entry(self.labelFrame_tab1, width=45) + self.fatherEntry.grid(row=5, column=3, columnspan=3) + self.fatherEntry.insert(0, "Father's Name") + self.fatherEntry.bind('', lambda event, entry=self.fatherEntry, text="Father's Name": self.on_click(event, entry, text)) + self.fatherEntry.bind('', lambda event, entry=self.fatherEntry, text="Father's Name": self.of_click(event, entry, text)) + self.fatherEntry.configure(foreground='grey') + + motherLabel = Label(self.labelFrame_tab1, text="Mother's Name:", font="comicsansms 14").grid(row = 6, column=1, sticky="w") + self.motherEntry = Entry(self.labelFrame_tab1, width=45) + self.motherEntry.grid(row=6, column=3, columnspan=3) + self.motherEntry.insert(0, "Mother's Name") + self.motherEntry.bind('', lambda event, entry=self.motherEntry, text="Mother's Name": self.on_click(event, entry, text)) + self.motherEntry.bind('', lambda event, entry=self.motherEntry, text="Mother's Name": self.of_click(event, entry, text)) + self.motherEntry.configure(foreground='grey') + + + mobileLabel = Label(self.labelFrame_tab1, text="Mobile No.:", font="comicsansms 14").grid(row = 7, column=1, sticky="w") + self.mobileEntry = Entry(self.labelFrame_tab1, width=45) + self.mobileEntry.grid(row=7, column=3, columnspan=3) + self.mobileEntry.insert(0, "Mobile No.") + self.mobileEntry.bind('', lambda event, entry=self.mobileEntry, text="Mobile No.": self.on_click(event, entry, text)) + self.mobileEntry.bind('', lambda event, entry=self.mobileEntry, text="Mobile No.": self.of_click(event, entry, text)) + self.mobileEntry.configure(foreground='grey') + + courseLabel = Label(self.labelFrame_tab1, text="Course Interested: ", font="comicsansms 14").grid(row = 8, column=1, sticky="w") + self.option = StringVar() + self.options = ("Select Course","Computer Science Engineering", "Electronics and Communcation Engineering", "Mechanical Engineering", "Civil Engineering", "Electrical Engineering", "Mechatronics") + self.option.set("Select Course") + self.optionMenu = OptionMenu(self.labelFrame_tab1, self.option, *self.options, command=self.func_tab1) + self.optionMenu.grid(row=8, column=3, columnspan=3, sticky="ew") + + adressLabel = Label(self.labelFrame_tab1, text="Address:", font="comicsansms 14").grid(row = 9, column=1, sticky="w") + self.addressEntry1 = Entry(self.labelFrame_tab1, width=45) + self.addressEntry1.grid(row=9, column=3, columnspan=3, sticky="w") + self.addressEntry1.insert(0, "House No.\\Street Name\\Locality") + self.addressEntry1.bind('', lambda event, entry=self.addressEntry1, text="House No.\\Street Name\\Locality": self.on_click(event, entry, text)) + self.addressEntry1.bind('', lambda event, entry=self.addressEntry1, text="House No.\\Street Name\\Locality": self.of_click(event, entry, text)) + self.addressEntry1.configure(foreground='grey') + + self.addressEntry2 = Entry(self.labelFrame_tab1, width=45) + self.addressEntry2.grid(row=10, column=3, columnspan=3, sticky="w") + self.addressEntry2.insert(0, "Colony\\Village\\Town") + self.addressEntry2.bind('', lambda event, entry=self.addressEntry2, text="Colony\\Village\\Town": self.on_click(event, entry, text)) + self.addressEntry2.bind('', lambda event, entry=self.addressEntry2, text="Colony\\Village\\Town": self.of_click(event, entry, text)) + self.addressEntry2.configure(foreground='grey') + + self.addressEntry3 = Entry(self.labelFrame_tab1, width=45) + self.addressEntry3.grid(row=11, column=3, columnspan=3, sticky="w") + self.addressEntry3.insert(0, "City\\District") + self.addressEntry3.bind('', lambda event, entry=self.addressEntry3, text="City\\District": self.on_click(event, entry, text)) + self.addressEntry3.bind('', lambda event, entry=self.addressEntry3, text="City\\District": self.of_click(event, entry, text)) + self.addressEntry3.configure(foreground='grey') + + self.entryList_tab1 = [self.RollNoEntry, self.nameEntry, self.fatherEntry, self.motherEntry, self.mobileEntry, self.addressEntry1, self.addressEntry2, self.addressEntry3] + + self.bottom_label(self.labelFrame_tab1, "Register Student", 12, self.entryList_tab1, True) + +# -------------------------------------------------------------- TAB 2 ------------------------------------------------------------------ + + self.top_label("Subject Allocation", self.labelFrame_tab2) + + RollNoLabel_tab2 = Label(self.labelFrame_tab2, text="Roll No.: ", font="comicsansms 14").grid(row = 3, column=1, sticky="w") + self.RollNoEntry_tab2 = Entry(self.labelFrame_tab2, width=45) + self.RollNoEntry_tab2.grid(row=3, column=3, columnspan=3) + self.RollNoEntry_tab2.insert(0, "Student Roll No.") + self.RollNoEntry_tab2.bind('', lambda event, entry=self.RollNoEntry_tab2, text="Student Roll No.": self.on_click(event, entry, text)) + self.RollNoEntry_tab2.bind('', lambda event, entry=self.RollNoEntry_tab2, text="Student Roll No.": self.of_click(event, entry, text)) + self.RollNoEntry_tab2.configure(foreground='grey') + + subjectID = Label(self.labelFrame_tab2, text="Subject Id: ", font="comicsansms 14").grid(row = 4, column=1, sticky="w") + self.subjectId_entry = Entry(self.labelFrame_tab2, width=45) + self.subjectId_entry.grid(row=4, column=3, columnspan=3) + self.subjectId_entry.insert(0, "Subject ID") + self.subjectId_entry.bind('', lambda event, entry=self.subjectId_entry, text="Subject ID": self.on_click(event, entry, text)) + self.subjectId_entry.bind('', lambda event, entry=self.subjectId_entry, text="Subject ID": self.of_click(event, entry, text)) + self.subjectId_entry.configure(foreground='grey') + + subject_name = Label(self.labelFrame_tab2, text="Subject Name: ", font="comicsansms 14").grid(row = 5, column=1, sticky="w") + self.subject_name_entry = Entry(self.labelFrame_tab2, width=45) + self.subject_name_entry.grid(row=5, column=3, columnspan=3) + self.subject_name_entry.insert(0, "Subject Name") + self.subject_name_entry.bind('', lambda event, entry=self.subject_name_entry, text="Subject Name": self.on_click(event, entry, text)) + self.subject_name_entry.bind('', lambda event, entry=self.subject_name_entry, text="Subject Name": self.of_click(event, entry, text)) + self.subject_name_entry.configure(foreground='grey') + + credits = Label(self.labelFrame_tab2, text="Credits: ", font="comicsansms 14").grid(row = 6, column=1, sticky="w") + self.credits_entry = Entry(self.labelFrame_tab2, width=45) + self.credits_entry.grid(row=6, column=3, columnspan=3) + self.credits_entry.configure(foreground='grey') + self.credits_entry.insert(0, "No. of Credits") + self.credits_entry.bind('', lambda event, entry=self.credits_entry, text="No. of Credits": self.on_click(event, entry, text)) + self.credits_entry.bind('', lambda event, entry=self.credits_entry, text="No. of Credits": self.of_click(event, entry, text)) + + self.entryList_tab2 = [self.RollNoEntry_tab2, self.subjectId_entry, self.subject_name_entry, self.credits_entry] + + self.bottom_label(self.labelFrame_tab2, "Allocate Subject", 7, self.entryList_tab2, False) + +# ------------------------------------------------------------- TAB 3 ---------------------------------------------------------------- + + self.top_label("Marks Allocation", self.labelFrame_tab3) + + RollNoLabel_tab3 = Label(self.labelFrame_tab3, text="Roll No.: ", font="comicsansms 14").grid(row = 3, column=1, sticky="w") + self.RollNoEntry_tab3 = Entry(self.labelFrame_tab3, width=45) + self.RollNoEntry_tab3.grid(row=3, column=3, columnspan=3) + self.RollNoEntry_tab3.insert(0, "Student Roll No.") + self.RollNoEntry_tab3.bind('', lambda event, entry=self.RollNoEntry_tab3, text="Student Roll No.": self.on_click(event, entry, text)) + self.RollNoEntry_tab3.bind('', lambda event, entry=self.RollNoEntry_tab3, text="Student Roll No.": self.of_click(event, entry, text)) + self.RollNoEntry_tab3.configure(foreground='grey') + + subjectID = Label(self.labelFrame_tab3, text="Subject Id: ", font="comicsansms 14").grid(row = 4, column=1, sticky="w") + self.subjectId_entry_tab3 = Entry(self.labelFrame_tab3, width=45) + self.subjectId_entry_tab3.grid(row=4, column=3, columnspan=3) + self.subjectId_entry_tab3.insert(0, "Subject ID") + self.subjectId_entry_tab3.bind('', lambda event, entry=self.subjectId_entry_tab3, text="Subject ID": self.on_click(event, entry, text)) + self.subjectId_entry_tab3.bind('', lambda event, entry=self.subjectId_entry_tab3, text="Subject ID": self.of_click(event, entry, text)) + self.subjectId_entry_tab3.configure(foreground='grey') + + subject_name_tab3 = Label(self.labelFrame_tab3, text="Subject Name: ", font="comicsansms 14").grid(row = 5, column=1, sticky="w") + self.subject_name_entry_tab3 = Entry(self.labelFrame_tab3, width=45) + self.subject_name_entry_tab3.grid(row=5, column=3, columnspan=3) + self.subject_name_entry_tab3.insert(0, "Subject Name") + self.subject_name_entry_tab3.bind('', lambda event, entry=self.subject_name_entry_tab3, text="Subject Name": self.on_click(event, entry, text)) + self.subject_name_entry_tab3.bind('', lambda event, entry=self.subject_name_entry_tab3, text="Subject Name": self.of_click(event, entry, text)) + self.subject_name_entry_tab3.configure(foreground='grey') + + testTypeLabel = Label(self.labelFrame_tab3, text="Test Type: ", font="comicsansms 14").grid(row = 6, column=1, sticky="w") + self.option_tab3 = StringVar() + self.options_tab3 = ("Select Test Type","FA", "ST", "End Term", "Project Based") + self.option_tab3.set("Select Test Type") + self.optionMenu_tab3 = OptionMenu(self.labelFrame_tab3, self.option_tab3, *self.options_tab3, command=self.func_tab3) + self.optionMenu_tab3.grid(row=6, column=3, columnspan=3, sticky="w") + + maxMarks = Label(self.labelFrame_tab3, text="Max Marks: ", font="comicsansms 14").grid(row = 7, column=1, sticky="w") + self.maxMarks_entry = Entry(self.labelFrame_tab3, width=45) + self.maxMarks_entry.grid(row=7, column=3, columnspan=3) + self.maxMarks_entry.insert(0, "Maximum Marks") + self.maxMarks_entry.bind('', lambda event, entry=self.maxMarks_entry, text="Maximum Marks": self.on_click(event, entry, text)) + self.maxMarks_entry.bind('', lambda event, entry=self.maxMarks_entry, text="Maximum Marks": self.of_click(event, entry, text)) + self.maxMarks_entry.configure(foreground='grey') + + obtMarks = Label(self.labelFrame_tab3, text="Obtained Marks: ", font="comicsansms 14").grid(row = 8, column=1, sticky="w") + self.obtMarks_entry = Entry(self.labelFrame_tab3, width=45) + self.obtMarks_entry.grid(row=8, column=3, columnspan=3) + self.obtMarks_entry.insert(0, "Marks Obtained") + self.obtMarks_entry.bind('', lambda event, entry=self.obtMarks_entry, text="Marks Obtained": self.on_click(event, entry, text)) + self.obtMarks_entry.bind('', lambda event, entry=self.obtMarks_entry, text="Marks Obtained": self.of_click(event, entry, text)) + self.obtMarks_entry.configure(foreground='grey') + + self.entryList_tab3 = [self.RollNoEntry_tab3, self.subjectId_entry_tab3, self.subject_name_entry_tab3, self.maxMarks_entry, self.obtMarks_entry] + + self.bottom_label(self.labelFrame_tab3, "Assign Marks", 9, self.entryList_tab3, True) +# ---------------------------------------------------------- SERACH TAB ------------------------------------------------------------------ + + self.top_label("Search in Database", self.labelFrame_searchTab, 4) + + searchLabel = Label(self.labelFrame_searchTab, text="Roll No.: ", font="comicsansms 14").grid(row=1, column=1, sticky='w') + + space = Label(self.labelFrame_searchTab, width=15).grid(row=1, column=2) + + self.searchBar = Entry(self.labelFrame_searchTab, width=55) + self.searchBar.grid(row=1, column=4, columnspan=5, sticky='e') + self.searchBar.insert(0, "Enter the roll no of the student to get the data") + self.searchBar.bind('', lambda event, entry=self.searchBar, text="Enter the roll no of the student to get the data": self.on_click(event, entry, text)) + self.searchBar.bind('', lambda event, entry=self.searchBar, text="Enter the roll no of the student to get the data": self.of_click(event, entry, text)) + self.searchBar.configure(foreground='grey') + + lineBreak = Label(self.labelFrame_searchTab).grid(row=2) + + self.radioVar = IntVar() + radio1 = Radiobutton(self.labelFrame_searchTab, text="Personal Data", variable=self.radioVar , value=0).grid(row=3, column=2, columnspan=3,sticky='w') + radio2 = Radiobutton(self.labelFrame_searchTab, text="Subject Data", variable=self.radioVar , value=1).grid(row=3, column=5, columnspan=2, sticky='w') + radio3 = Radiobutton(self.labelFrame_searchTab, text="Marks Data", variable=self.radioVar , value=2).grid(row=3, column=7, columnspan=2, sticky='e') + + lineBreak = Label(self.labelFrame_searchTab).grid(row=4) + + searchButton = Button(self.labelFrame_searchTab, text='Search', command=self.search).grid(row=5, column=3, sticky='e', columnspan=2) + + lineBreak = Label(self.labelFrame_searchTab).grid(row=6) + + self.searchResult = Text(self.labelFrame_searchTab,state='disabled', wrap='none',height=17, width=62) + # self.searchResult.grid(row=7, column=2, columnspan=4) + + + self.scrollb = ttk.Scrollbar(self.labelFrame_searchTab, command=self.searchResult.yview) + self.searchResult['yscrollcommand'] = self.scrollb.set + + self.scrollbh = ttk.Scrollbar(self.labelFrame_searchTab, orient='horizontal', command=self.searchResult.xview) + self.searchResult['xscrollcommand'] = self.scrollbh.set + # scrollbh.grid(row=8, column=1, sticky='nsew') + + + + + +# --------------------------------------------------------------------------------------------------------------------------------------- + # For getting the current value of option boxes present in 1st and 3rd tab + def func_tab1(self, value): + self.currentOption_tab1 = value + + def func_tab3(self, value): + self.currentOption_tab3 = value + + # Event Binding Functions + def on_click(self, event, entry, text): + if entry.get() == text: + entry.delete(0, "end") + entry.configure(foreground='black') + + def of_click(self, event, entry, text): + if entry.get() == "": + entry.insert(0, text) + entry.configure(foreground='grey') + + + def check_empty(self, entryList, optionCheck): + filled, rollnumber, mobileNo = True, True, True + # Checking if there is any unfilled information present + for i in range(len(entryList)): + if str(entryList[i].cget('foreground')) == "grey": + filled = False + break + # Checking if Option menu is filled or not + if optionCheck: + # For tab 1 + if len(entryList) == 8: + try: + if str(self.currentOption_tab1) == "Select Course": + filled = False + except Exception as e: + filled = False + # For tab 2 + else: + try: + if str(self.currentOption_tab3) == "Select Test Type": + filled = False + except Exception as e: + filled = False + # Checking if Roll No. given is in correct format or not + # For tab 1 + if len(entryList) == 8: + if (len(self.RollNoEntry.get()) != 10) or (not self.RollNoEntry.get().isdigit()): + rollnumber = False + # For tab 2 + elif len(entryList) == 4: + if (len(self.RollNoEntry_tab2.get()) != 10) or (not self.RollNoEntry_tab2.get().isdigit()): + rollnumber = False + # for tab 3 + else: + if (len(self.RollNoEntry_tab3.get()) != 10) or (not self.RollNoEntry_tab3.get().isdigit()): + rollnumber = False + + # Checking if Mobile no. is given in correct format or not + # For tab 1 + if len(entryList) == 8: + if (len(self.mobileEntry.get()) != 10) or (not self.mobileEntry.get().isdigit()): + mobileNo = False + + print(filled, rollnumber, mobileNo) + return filled, rollnumber, mobileNo + + def checkCredits(self): + if self.credits_entry.get().isdigit(): + return True + else: + return False + def checkMarks(self): + self.error = "" + if self.maxMarks_entry.get().isdigit(): + if self.obtMarks_entry.get().isdigit(): + if int(self.maxMarks_entry.get())>=int(self.obtMarks_entry.get()): + return True + else: + self.error = "Marks obtained cannot be greater than the Total marks" + return False + else: + self.error = "Please enter Obtained Marks correctly" + return False + else: + self.error = "Please enter Max Marks correctly" + return False + + def show_msg(self, entryList, optionCheck): + filled, rollnumber, mobileNo = self.check_empty(entryList, optionCheck) + if not filled: + ms.showinfo('Information not filled ', 'Please fill up all the information', icon='error') + else: + Proceed = True + if len(entryList) == 4: + if not self.checkCredits(): + ms.showinfo('Wrong Entry', 'Credits can only be number', icon='error') + Proceed = False + elif len(entryList) == 5: + if not self.checkMarks(): + ms.showinfo('Wrong Entry', f"{self.error}", icon='error') + Proceed = False + if Proceed: + if not rollnumber: + ms.showinfo('Incorrect RollNo.', 'Please fill up the RollNo. correctly', icon='error') + else: + if not mobileNo: + ms.showinfo('MobileNo. not correct', 'Please fill up the MobileNo. correctly', icon='error') + else: + msgbox = ms.askyesno('Do you want to add the data', 'Are you sure you want to add data into the database?', default='yes') + if msgbox: + isSuccess = self.update_data_to_backend(entryList) + if isSuccess == 'True': + ms.showinfo('Data added successfully', 'Your data has been successfully uploaded') + elif isSuccess == 'False_tab1': + ms.showinfo('User already exists', 'The user with this RollNo. already exists. If you want to edit the data for that user, you can go to the editing tab.', icon='error') + elif isSuccess == 'False_tab2': + ms.showinfo('Subject already exists', 'This subject already exists with the user you specified. If you want to edit the data, you can go to the editing tab.', icon='error') + elif isSuccess == 'False_tab3': + ms.showinfo('Marks already exists', f'The marks for the {self.currentOption_tab3} already exists for the given student. If you want to edit the data, you can go to the editing tab.', icon='error') + elif isSuccess == 'False_userNotFound': + ms.showinfo('User not found', 'Sorry, the Student with the given RollNo. not found', icon='error') + elif isSuccess == 'False_subjectNotFound': + ms.showinfo('Subject not found', 'Sorry, the Subject with given SubjectId not found', icon='error') + + def update_data_to_backend(self, entryList): + get_data = database.Get_Data() + write_data = database.Write_Data() + + # Initializing an empty dictionary for storing the data + data_dict = {} + # Updating data of student file + if len(entryList) == 8: + if get_data.personal_data() == -1: + data_dict = {str(self.RollNoEntry.get()): {'Name': self.nameEntry.get(), 'Father\'s Name': self.fatherEntry.get(), 'Mother\'s Name': self.motherEntry.get(), 'Mobile no.': self.mobileEntry.get(), 'Course Interested': self.currentOption_tab1, 'Address': {'Line 1': self.addressEntry1.get(), 'Line 2': self.addressEntry2.get(), 'Line 3': self.addressEntry3.get()}}} + + write_data.personal_data(data_dict) + print(data_dict) + return 'True' + else: + data_dict = get_data.personal_data() + if str(self.RollNoEntry.get()) in data_dict: + return 'False_tab1' + else: + new_student_info = {str(self.RollNoEntry.get()): {'Name': self.nameEntry.get(), 'Father\'s Name': self.fatherEntry.get(), 'Mother\'s Name': self.motherEntry.get(), 'Mobile no.': self.mobileEntry.get(), 'Course Interested': self.currentOption_tab1, 'Address': {'Line 1': self.addressEntry1.get(), 'Line 2': self.addressEntry2.get(), 'Line 3': self.addressEntry3.get()}}} + + data_dict.update(new_student_info) + write_data.personal_data(data_dict) + return 'True' + # For updating the data of subject.json file + elif len(entryList) == 4: + if not self.check_user_exist(self.RollNoEntry_tab2.get()): + return 'False_userNotFound' + if get_data.subject_data() == -1: + data_dict = {str(self.RollNoEntry_tab2.get()): {self.subjectId_entry.get(): {'Subject Name': self.subject_name_entry.get(), 'Credits': self.credits_entry.get()}}} + + write_data.subject_data(data_dict) + return 'True' + else: + data_dict = get_data.subject_data() + if str(self.RollNoEntry_tab2.get()) in data_dict: + if self.subjectId_entry.get() not in data_dict[self.RollNoEntry_tab2.get()]: + new_subject = {str(self.subjectId_entry.get()): {'Subject Name': self.subject_name_entry.get(), 'Credits': self.credits_entry.get()}} + + data_dict[self.RollNoEntry_tab2.get()].update(new_subject) + write_data.subject_data(data_dict) + return 'True' + else: + return 'False_tab2' + else: + new_subject_info = {str(self.RollNoEntry_tab2.get()): {self.subjectId_entry.get(): {'Subject Name': self.subject_name_entry.get(), 'Credits': self.credits_entry.get()}}} + + data_dict.update(new_subject_info) + write_data.subject_data(data_dict) + return 'True' + # For updating the data of marks.json file + else: + if not self.check_user_exist(self.RollNoEntry_tab3.get()): + return 'False_userNotFound' + if not self.check_subject_exist(self.RollNoEntry_tab3.get(), self.subjectId_entry_tab3.get()): + return 'False_subjectNotFound' + if get_data.marks_data() == -1: + data_dict = {str(self.RollNoEntry_tab3.get()): {self.subjectId_entry_tab3.get(): {self.currentOption_tab3: {'Subject Name': self.subject_name_entry_tab3.get(), 'Max Marks': self.maxMarks_entry.get(), 'Marks Obtained': self.obtMarks_entry.get()}}}} + + write_data.marks_data(data_dict) + return 'True' + else: + data_dict = get_data.marks_data() + if str(self.RollNoEntry_tab3.get()) in data_dict: + if self.subjectId_entry_tab3.get() in data_dict[self.RollNoEntry_tab3.get()]: + if self.currentOption_tab3 not in data_dict[self.RollNoEntry_tab3.get()][self.subjectId_entry_tab3.get()]: + new_fa_st = {self.currentOption_tab3: {'Subject Name': self.subject_name_entry_tab3.get(), 'Max Marks': self.maxMarks_entry.get(), 'Marks Obtained': self.obtMarks_entry.get()}} + + data_dict[self.RollNoEntry_tab3.get()][self.subjectId_entry_tab3.get()].update(new_fa_st) + write_data.marks_data(data_dict) + return 'True' + else: + return 'False_tab3' + else: + new_subject_id = {self.subjectId_entry_tab3.get(): {self.currentOption_tab3: {'Subject Name': self.subject_name_entry_tab3.get(), 'Max Marks': self.maxMarks_entry.get(), 'Marks Obtained': self.obtMarks_entry.get()}}} + + data_dict[self.RollNoEntry_tab3.get()].update(new_subject_id) + write_data.marks_data(data_dict) + return 'True' + + else: + print(False) + new_subject_marks_info = {str(self.RollNoEntry_tab3.get()): {self.subjectId_entry_tab3.get(): {self.currentOption_tab3: {'Subject Name': self.subject_name_entry_tab3.get(), 'Max Marks': self.maxMarks_entry.get(), 'Marks Obtained': self.obtMarks_entry.get()}}}} + + data_dict.update(new_subject_marks_info) + write_data.marks_data(data_dict) + return 'True' + + def check_user_exist(self, rollNo): + get_data = database.Get_Data() + student_data = get_data.personal_data() + if student_data == -1: + return False + else: + if rollNo in student_data: + return True + else: + return False + + + def check_subject_exist(self, rollNo, subjectId): + get_data = database.Get_Data() + subject_data = get_data.subject_data() + if subject_data == -1: + return False + else: + if subjectId in subject_data[rollNo]: + return True + else: + return False + +# ----------------------------- For Searching in the Database ------------------------------------------ + def search(self): + search_data = database.Search_Data() + get_data = database.Get_Data() + def showError(): + ms.showinfo('Record not found', 'Sorry, the requested record not found', icon='error') + + def showData(filename): + # Firstly Clearing all the previous data + self.searchResult.delete('1.0', END) + self.searchResult.grid_forget() + self.scrollb.grid_forget() + self.scrollbh.grid_forget() + # Now writing the data found + if search_data.searchAndWrite(filename, self.searchBar.get()) != -1: + self.searchResult.grid(row=7, column=1, columnspan=9) + self.scrollb.grid(row=7, column=9, sticky='nsew') + self.scrollbh.grid(row=8, column=1, sticky='nsew', columnspan=9) + self.searchResult.configure(state='normal') + self.searchResult.delete('1.0', END) + with open('f.json', 'r') as f: + self.searchResult.insert(INSERT, f.read()) + self.searchResult.configure(state='disabled') + os.remove('f.json') + else: + showError() + + if self.radioVar.get() == 0: # Searching the data in the Student File + showData(get_data.personal_data()) + elif self.radioVar.get() == 1: + showData(get_data.subject_data()) + elif self.radioVar.get() == 2: + showData(get_data.marks_data()) + + + + + + + + + + + + + + + + + + + +if __name__ == '__main__': + RecordManagement(Tk()) + + + + diff --git a/projects/RecordManagment/database.py b/projects/RecordManagment/database.py new file mode 100644 index 0000000..4b6725d --- /dev/null +++ b/projects/RecordManagment/database.py @@ -0,0 +1,60 @@ +import json + +class Get_Data: + def personal_data(self): + try: + with open('student.json', 'r') as f: + # Getting data from the student file and returning it + data = json.load(f) + return data + except Exception as e: + return -1 + + def subject_data(self): + try: + with open('subject.json', 'r') as f: + # Getting data from the subject file and returning it + data = json.load(f) + return data + except Exception as e: + return -1 + + def marks_data(self): + try: + with open('marks.json', 'r') as f: + # Getting data from the marks file and returning it + data = json.load(f) + return data + except Exception as e: + return -1 + +class Write_Data: + def personal_data(self, dict): + with open('student.json', 'w') as f: + # Writing Json data to the student file + json.dump(dict, f, indent=3) + + def subject_data(self, dict): + with open('subject.json', 'w') as f: + # Writing Json data to the subject file + json.dump(dict, f, indent=3) + + def marks_data(self, dict): + with open('marks.json', 'w') as f: + # Writing Json data to the marks file + json.dump(dict, f, indent=3) + +class Search_Data: + def searchAndWrite(self, filename, rollno): + get_data = Get_Data() + if filename != -1: + data_dict = filename + if rollno in data_dict: + with open('f.json', 'w') as f: + json.dump(data_dict[rollno], f, indent=3) + + return 1 + else: + return -1 + else: + return -1 diff --git a/projects/RecordManagment/marks.json b/projects/RecordManagment/marks.json new file mode 100644 index 0000000..c1c992a --- /dev/null +++ b/projects/RecordManagment/marks.json @@ -0,0 +1,64 @@ +{ + "2010990174": { + "CS104": { + "FA": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "20", + "Marks Obtained": "20" + }, + "ST": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "50", + "Marks Obtained": "50" + }, + "End Term": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "100", + "Marks Obtained": "100" + }, + "Project Based": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "200", + "Marks Obtained": "200" + } + }, + "GE104": { + "FA": { + "Subject Name": "Introduction to Emerging Technologies", + "Max Marks": "20", + "Marks Obtained": "20" + } + } + }, + "2010990175": { + "CS104": { + "FA": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "20", + "Marks Obtained": "10" + }, + "ST": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "50", + "Marks Obtained": "35" + }, + "End Term": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "100", + "Marks Obtained": "75" + }, + "Project Based": { + "Subject Name": "Problem Solving eith Python Programming", + "Max Marks": "200", + "Marks Obtained": "30" + } + }, + "GE104": { + "FA": { + "Subject Name": "Introduction to Emerging Technologies", + "Max Marks": "100", + "Marks Obtained": "50" + } + } + } +} \ No newline at end of file diff --git a/projects/RecordManagment/student.json b/projects/RecordManagment/student.json new file mode 100644 index 0000000..025270c --- /dev/null +++ b/projects/RecordManagment/student.json @@ -0,0 +1,26 @@ +{ + "2010990174": { + "Name": "Chirag Jain", + "Father's Name": "Amit Jain", + "Mother's Name": "Reena Jain", + "Mobile no.": "8901789079", + "Course Interested": "Computer Science Engineering", + "Address": { + "Line 1": "51-A", + "Line 2": "Shankar Colony, Jandli", + "Line 3": "Ambala City" + } + }, + "2010990175": { + "Name": "Test User", + "Father's Name": "Father", + "Mother's Name": "Mother", + "Mobile no.": "1234567890", + "Course Interested": "Computer Science Engineering", + "Address": { + "Line 1": "51-A", + "Line 2": "Shankar Colony, Jandli", + "Line 3": "Ambala City" + } + } +} \ No newline at end of file diff --git a/projects/RecordManagment/subject.json b/projects/RecordManagment/subject.json new file mode 100644 index 0000000..4cc9b0b --- /dev/null +++ b/projects/RecordManagment/subject.json @@ -0,0 +1,22 @@ +{ + "2010990174": { + "GE104": { + "Subject Name": "Introduction to Emerging Technologies", + "Credits": "2" + }, + "CS104": { + "Subject Name": "Introduction to python programming", + "Credits": "5" + } + }, + "2010990175": { + "GE104": { + "Subject Name": "Introduction to Emerging Technologies", + "Credits": "2" + }, + "CS104": { + "Subject Name": "Problem Solving with Python", + "Credits": "5" + } + } +} \ No newline at end of file