├── .gitattributes ├── .gitignore ├── Admin.py ├── README.md ├── Report.pdf ├── Server.py ├── VotingPage.py ├── admFunc.py ├── database ├── cand_list.csv └── voterList.csv ├── dframe.py ├── homePage.py ├── img ├── aap.png ├── bjp.png ├── cong.jpg ├── nota.jpg └── ss.png ├── registerVoter.py └── voter.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.pyc 3 | -------------------------------------------------------------------------------- /Admin.py: -------------------------------------------------------------------------------- 1 | import subprocess as sb_p 2 | import tkinter as tk 3 | import registerVoter as regV 4 | import admFunc as adFunc 5 | from tkinter import * 6 | from registerVoter import * 7 | from admFunc import * 8 | 9 | 10 | def AdminHome(root,frame1,frame3): 11 | root.title("Admin") 12 | for widget in frame1.winfo_children(): 13 | widget.destroy() 14 | 15 | Button(frame3, text="Admin", command = lambda: AdminHome(root, frame1, frame3)).grid(row = 1, column = 0) 16 | frame3.pack(side=TOP) 17 | 18 | Label(frame1, text="Admin", font=('Helvetica', 25, 'bold')).grid(row = 0, column = 1) 19 | Label(frame1, text="").grid(row = 1,column = 0) 20 | 21 | #Admin Login 22 | runServer = Button(frame1, text="Run Server", width=15, command = lambda: sb_p.call('start python Server.py', shell=True)) 23 | 24 | #Voter Login 25 | registerVoter = Button(frame1, text="Register Voter", width=15, command = lambda: regV.Register(root, frame1)) 26 | 27 | #Show Votes 28 | showVotes = Button(frame1, text="Show Votes", width=15, command = lambda: adFunc.showVotes(root, frame1)) 29 | 30 | #Reset Data 31 | reset = Button(frame1, text="Reset All", width=15, command = lambda: adFunc.resetAll(root, frame1)) 32 | 33 | Label(frame1, text="").grid(row = 2,column = 0) 34 | Label(frame1, text="").grid(row = 4,column = 0) 35 | Label(frame1, text="").grid(row = 6,column = 0) 36 | Label(frame1, text="").grid(row = 8,column = 0) 37 | runServer.grid(row = 3, column = 1, columnspan = 2) 38 | registerVoter.grid(row = 5, column = 1, columnspan = 2) 39 | showVotes.grid(row = 7, column = 1, columnspan = 2) 40 | # reset.grid(row = 9, column = 1, columnspan = 2) 41 | 42 | frame1.pack() 43 | root.mainloop() 44 | 45 | 46 | def log_admin(root,frame1,admin_ID,password): 47 | 48 | if(admin_ID=="Admin" and password=="admin"): 49 | frame3 = root.winfo_children()[1] 50 | AdminHome(root, frame1, frame3) 51 | else: 52 | msg = Message(frame1, text="Either ID or Password is Incorrect", width=500) 53 | msg.grid(row = 6, column = 0, columnspan = 5) 54 | 55 | 56 | def AdmLogin(root,frame1): 57 | 58 | root.title("Admin Login") 59 | for widget in frame1.winfo_children(): 60 | widget.destroy() 61 | 62 | Label(frame1, text="Admin Login", font=('Helvetica', 18, 'bold')).grid(row = 0, column = 2, rowspan=1) 63 | Label(frame1, text="").grid(row = 1,column = 0) 64 | Label(frame1, text="Admin ID: ", anchor="e", justify=LEFT).grid(row = 2,column = 0) 65 | Label(frame1, text="Password: ", anchor="e", justify=LEFT).grid(row = 3,column = 0) 66 | 67 | admin_ID = tk.StringVar() 68 | password = tk.StringVar() 69 | 70 | e1 = Entry(frame1, textvariable = admin_ID) 71 | e1.grid(row = 2,column = 2) 72 | e2 = Entry(frame1, textvariable = password, show = '*') 73 | e2.grid(row = 3,column = 2) 74 | 75 | sub = Button(frame1, text="Login", width=10, command = lambda: log_admin(root, frame1, admin_ID.get(), password.get())) 76 | Label(frame1, text="").grid(row = 4,column = 0) 77 | sub.grid(row = 5, column = 3, columnspan = 2) 78 | 79 | frame1.pack() 80 | root.mainloop() 81 | 82 | 83 | # if __name__ == "__main__": 84 | # root = Tk() 85 | # root.geometry('500x500') 86 | # frame1 = Frame(root) 87 | # frame3 = Frame(root) 88 | # AdminHome(root,frame1,frame3) 89 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Online Voting System for Elections 2 | It is a desktop application made with socket programming in Python. It uses synchronous multithreading. 3 | 4 | For details on this project, please read the Report. 5 | -------------------------------------------------------------------------------- /Report.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/Report.pdf -------------------------------------------------------------------------------- /Server.py: -------------------------------------------------------------------------------- 1 | import socket 2 | import threading 3 | import dframe as df 4 | from threading import Thread 5 | from dframe import * 6 | 7 | lock = threading.Lock() 8 | 9 | def client_thread(connection): 10 | 11 | data = connection.recv(1024) #receiving voter details #2 12 | 13 | #verify voter details 14 | log = (data.decode()).split(' ') 15 | try: 16 | log[0] = int(log[0]) 17 | 18 | if(df.verify(log[0],log[1])): #3 Authenticate 19 | if(df.isEligible(log[0])): 20 | print('Voter Logged in... ID:'+str(log[0])) 21 | connection.send("Authenticate".encode()) 22 | else: 23 | print('Vote Already Cast by ID:'+str(log[0])) 24 | connection.send("VoteCasted".encode()) 25 | else: 26 | print('Invalid Voter') 27 | connection.send("InvalidVoter".encode()) 28 | return 29 | 30 | except: 31 | print('Invalid Credentials') 32 | connection.send("InvalidVoter".encode()) 33 | return 34 | 35 | 36 | data = connection.recv(1024) #4 Get Vote 37 | print("Vote Received from ID: "+str(log[0])+" Processing...") 38 | lock.acquire() 39 | #update Database 40 | if(df.vote_update(data.decode(),log[0])): 41 | print("Vote Casted Sucessfully by voter ID = "+str(log[0])) 42 | connection.send("Successful".encode()) 43 | else: 44 | print("Vote Update Failed by voter ID = "+str(log[0])) 45 | connection.send("Vote Update Failed".encode()) 46 | #5 47 | 48 | lock.release() 49 | connection.close() 50 | 51 | 52 | def voting_Server(): 53 | 54 | serversocket = socket.socket() 55 | host = socket.gethostname() 56 | port = 4001 57 | 58 | ThreadCount = 0 59 | 60 | try : 61 | serversocket.bind((host, port)) 62 | except socket.error as e : 63 | print(str(e)) 64 | print("Waiting for the connection") 65 | 66 | serversocket.listen(10) 67 | 68 | print( "Listening on " + str(host) + ":" + str(port)) 69 | 70 | while True : 71 | client, address = serversocket.accept() 72 | 73 | print('Connected to :', address) 74 | 75 | client.send("Connection Established".encode()) ### 1 76 | t = Thread(target = client_thread,args = (client,)) 77 | t.start() 78 | ThreadCount+=1 79 | # break 80 | 81 | serversocket.close() 82 | 83 | if __name__ == '__main__': 84 | voting_Server() 85 | -------------------------------------------------------------------------------- /VotingPage.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import socket 3 | from tkinter import * 4 | from PIL import ImageTk,Image 5 | 6 | def voteCast(root,frame1,vote,client_socket): 7 | 8 | for widget in frame1.winfo_children(): 9 | widget.destroy() 10 | 11 | client_socket.send(vote.encode()) #4 12 | 13 | message = client_socket.recv(1024) #Success message 14 | print(message.decode()) #5 15 | message = message.decode() 16 | if(message=="Successful"): 17 | Label(frame1, text="Vote Casted Successfully", font=('Helvetica', 18, 'bold')).grid(row = 1, column = 1) 18 | else: 19 | Label(frame1, text="Vote Cast Failed... \nTry again", font=('Helvetica', 18, 'bold')).grid(row = 1, column = 1) 20 | 21 | client_socket.close() 22 | 23 | 24 | 25 | def votingPg(root,frame1,client_socket): 26 | 27 | root.title("Cast Vote") 28 | for widget in frame1.winfo_children(): 29 | widget.destroy() 30 | 31 | Label(frame1, text="Cast Vote", font=('Helvetica', 18, 'bold')).grid(row = 0, column = 1, rowspan=1) 32 | Label(frame1, text="").grid(row = 1,column = 0) 33 | 34 | vote = StringVar(frame1,"-1") 35 | 36 | Radiobutton(frame1, text = "BJP\n\nNarendra Modi", variable = vote, value = "bjp", indicator = 0, height = 4, width=15, command = lambda: voteCast(root,frame1,"bjp",client_socket)).grid(row = 2,column = 1) 37 | bjpLogo = ImageTk.PhotoImage((Image.open("img/bjp.png")).resize((45,45),Image.LANCZOS)) 38 | bjpImg = Label(frame1, image=bjpLogo).grid(row = 2,column = 0) 39 | 40 | Radiobutton(frame1, text = "Congress\n\nRahul Gandhi", variable = vote, value = "cong", indicator = 0, height = 4, width=15, command = lambda: voteCast(root,frame1,"cong",client_socket)).grid(row = 3,column = 1) 41 | congLogo = ImageTk.PhotoImage((Image.open("img/cong.jpg")).resize((35,48),Image.LANCZOS)) 42 | congImg = Label(frame1, image=congLogo).grid(row = 3,column = 0) 43 | 44 | Radiobutton(frame1, text = "Aam Aadmi Party\n\nArvind Kejriwal", variable = vote, value = "aap", indicator = 0, height = 4, width=15, command = lambda: voteCast(root,frame1,"aap",client_socket) ).grid(row = 4,column = 1) 45 | aapLogo = ImageTk.PhotoImage((Image.open("img/aap.png")).resize((55,40),Image.LANCZOS)) 46 | aapImg = Label(frame1, image=aapLogo).grid(row = 4,column = 0) 47 | 48 | Radiobutton(frame1, text = "Shiv Sena\n\nUdhav Thakrey", variable = vote, value = "ss", indicator = 0, height = 4, width=15, command = lambda: voteCast(root,frame1,"ss",client_socket)).grid(row = 5,column = 1) 49 | ssLogo = ImageTk.PhotoImage((Image.open("img/ss.png")).resize((50,45),Image.LANCZOS)) 50 | ssImg = Label(frame1, image=ssLogo).grid(row = 5,column = 0) 51 | 52 | Radiobutton(frame1, text = "\nNOTA \n ", variable = vote, value = "nota", indicator = 0, height = 4, width=15, command = lambda: voteCast(root,frame1,"nota",client_socket)).grid(row = 6,column = 1) 53 | notaLogo = ImageTk.PhotoImage((Image.open("img/nota.jpg")).resize((45,35),Image.LANCZOS)) 54 | notaImg = Label(frame1, image=notaLogo).grid(row = 6,column = 0) 55 | 56 | frame1.pack() 57 | root.mainloop() 58 | 59 | 60 | # if __name__ == "__main__": 61 | # root = Tk() 62 | # root.geometry('500x500') 63 | # frame1 = Frame(root) 64 | # client_socket='Fail' 65 | # votingPg(root,frame1,client_socket) 66 | -------------------------------------------------------------------------------- /admFunc.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import dframe as df 3 | from tkinter import * 4 | from dframe import * 5 | from PIL import ImageTk,Image 6 | 7 | def resetAll(root,frame1): 8 | #df.count_reset() 9 | #df.reset_voter_list() 10 | #df.reset_cand_list() 11 | Label(frame1, text="").grid(row = 10,column = 0) 12 | msg = Message(frame1, text="Reset Complete", width=500) 13 | msg.grid(row = 11, column = 0, columnspan = 5) 14 | 15 | def showVotes(root,frame1): 16 | 17 | result = df.show_result() 18 | root.title("Votes") 19 | for widget in frame1.winfo_children(): 20 | widget.destroy() 21 | 22 | Label(frame1, text="Vote Count", font=('Helvetica', 18, 'bold')).grid(row = 0, column = 1, rowspan=1) 23 | Label(frame1, text="").grid(row = 1,column = 0) 24 | 25 | vote = StringVar(frame1,"-1") 26 | 27 | bjpLogo = ImageTk.PhotoImage((Image.open("img/bjp.png")).resize((35,35),Image.LANCZOS)) 28 | bjpImg = Label(frame1, image=bjpLogo).grid(row = 2,column = 0) 29 | 30 | congLogo = ImageTk.PhotoImage((Image.open("img/cong.jpg")).resize((25,38),Image.LANCZOS)) 31 | congImg = Label(frame1, image=congLogo).grid(row = 3,column = 0) 32 | 33 | aapLogo = ImageTk.PhotoImage((Image.open("img/aap.png")).resize((45,30),Image.LANCZOS)) 34 | aapImg = Label(frame1, image=aapLogo).grid(row = 4,column = 0) 35 | 36 | ssLogo = ImageTk.PhotoImage((Image.open("img/ss.png")).resize((40,35),Image.LANCZOS)) 37 | ssImg = Label(frame1, image=ssLogo).grid(row = 5,column = 0) 38 | 39 | notaLogo = ImageTk.PhotoImage((Image.open("img/nota.jpg")).resize((35,25),Image.LANCZOS)) 40 | notaImg = Label(frame1, image=notaLogo).grid(row = 6,column = 0) 41 | 42 | 43 | Label(frame1, text="BJP : ", font=('Helvetica', 12, 'bold')).grid(row = 2, column = 1) 44 | Label(frame1, text=result['bjp'], font=('Helvetica', 12, 'bold')).grid(row = 2, column = 2) 45 | 46 | Label(frame1, text=" Cong : ", font=('Helvetica', 12, 'bold')).grid(row = 3, column = 1) 47 | Label(frame1, text=result['cong'], font=('Helvetica', 12, 'bold')).grid(row = 3, column = 2) 48 | 49 | Label(frame1, text=" AAP : ", font=('Helvetica', 12, 'bold')).grid(row = 4, column = 1) 50 | Label(frame1, text=result['aap'], font=('Helvetica', 12, 'bold')).grid(row = 4, column = 2) 51 | 52 | Label(frame1, text=" Shiv Sena : ", font=('Helvetica', 12, 'bold')).grid(row = 5, column = 1) 53 | Label(frame1, text=result['ss'], font=('Helvetica', 12, 'bold')).grid(row = 5, column = 2) 54 | 55 | Label(frame1, text=" NOTA : ", font=('Helvetica', 12, 'bold')).grid(row = 6, column = 1) 56 | Label(frame1, text=result['nota'], font=('Helvetica', 12, 'bold')).grid(row = 6, column = 2) 57 | 58 | frame1.pack() 59 | root.mainloop() 60 | 61 | 62 | # if __name__ == "__main__": 63 | # root = Tk() 64 | # root.geometry('500x500') 65 | # frame1 = Frame(root) 66 | # showVotes(root,frame1) 67 | -------------------------------------------------------------------------------- /database/cand_list.csv: -------------------------------------------------------------------------------- 1 | ,Sign,Name,Vote Count 2 | 0,bjp,Narendra Modi,15 3 | 1,cong,Rahul Gandhi,0 4 | 2,aap,Arvind Kejriwal,3 5 | 3,ss,Udhav Thakrey,4 6 | 4,nota,NOTA,6 7 | -------------------------------------------------------------------------------- /database/voterList.csv: -------------------------------------------------------------------------------- 1 | ,voter_id,Name,Gender,Zone,City,Passw,hasVoted 2 | 0,10001,Deep,Male,West,Gandhinagar,abcd,0 3 | 1,10002,Prachi,Female,South,Surat,abcd,0 4 | 2,10003,Het,Male,East,Surat,abcd,0 5 | 3,10004,Shivanshi,Female,East,Gandhinagar,abcd,0 6 | 4,10005,Dev,Male,North,Ahmedabad,abcd,0 7 | -------------------------------------------------------------------------------- /dframe.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from pathlib import Path 3 | 4 | # path = Path("C:/Users/Desktop/Sem-5/CS301 CN/Project/Voting/database") 5 | path = Path("database") 6 | 7 | def count_reset(): 8 | df=pd.read_csv(path/'voterList.csv') 9 | df=df[['voter_id','Name','Gender','Zone','City','Passw','hasVoted']] 10 | for index, row in df.iterrows(): 11 | df['hasVoted'].iloc[index]=0 12 | df.to_csv(path/'voterList.csv') 13 | 14 | df=pd.read_csv(path/'cand_list.csv') 15 | df=df[['Sign','Name','Vote Count']] 16 | for index, row in df.iterrows(): 17 | df['Vote Count'].iloc[index]=0 18 | df.to_csv (path/'cand_list.csv') 19 | 20 | 21 | def reset_voter_list(): 22 | df = pd.DataFrame(columns=['voter_id','Name','Gender','Zone','City','Passw','hasVoted']) 23 | df=df[['voter_id','Name','Gender','Zone','City','Passw','hasVoted']] 24 | df.to_csv(path/'voterList.csv') 25 | 26 | def reset_cand_list(): 27 | df = pd.DataFrame(columns=['Sign','Name','Vote Count']) 28 | df=df[['Sign','Name','Vote Count']] 29 | df.to_csv(path/'cand_list.csv') 30 | 31 | 32 | def verify(vid,passw): 33 | df=pd.read_csv(path/'voterList.csv') 34 | df=df[['voter_id','Passw','hasVoted']] 35 | for index, row in df.iterrows(): 36 | if df['voter_id'].iloc[index]==vid and df['Passw'].iloc[index]==passw: 37 | return True 38 | return False 39 | 40 | 41 | def isEligible(vid): 42 | df=pd.read_csv(path/'voterList.csv') 43 | df=df[['voter_id','Name','Gender','Zone','City','Passw','hasVoted']] 44 | for index, row in df.iterrows(): 45 | if df['voter_id'].iloc[index]==vid and df['hasVoted'].iloc[index]==0: 46 | return True 47 | return False 48 | 49 | 50 | def vote_update(st,vid): 51 | if isEligible(vid): 52 | df=pd.read_csv (path/'cand_list.csv') 53 | df=df[['Sign','Name','Vote Count']] 54 | for index, row in df.iterrows(): 55 | if df['Sign'].iloc[index]==st: 56 | df['Vote Count'].iloc[index]+=1 57 | 58 | df.to_csv (path/'cand_list.csv') 59 | 60 | df=pd.read_csv(path/'voterList.csv') 61 | df=df[['voter_id','Name','Gender','Zone','City','Passw','hasVoted']] 62 | for index, row in df.iterrows(): 63 | if df['voter_id'].iloc[index]==vid: 64 | df['hasVoted'].iloc[index]=1 65 | 66 | df.to_csv(path/'voterList.csv') 67 | 68 | return True 69 | return False 70 | 71 | 72 | def show_result(): 73 | df=pd.read_csv (path/'cand_list.csv') 74 | df=df[['Sign','Name','Vote Count']] 75 | v_cnt = {} 76 | for index, row in df.iterrows(): 77 | v_cnt[df['Sign'].iloc[index]] = df['Vote Count'].iloc[index] 78 | # print(v_cnt) 79 | return v_cnt 80 | 81 | 82 | def taking_data_voter(name,gender,zone,city,passw): 83 | df=pd.read_csv(path/'voterList.csv') 84 | df=df[['voter_id','Name','Gender','Zone','City','Passw','hasVoted']] 85 | row,col=df.shape 86 | if row==0: 87 | vid = 10001 88 | df = pd.DataFrame({"voter_id":[vid], 89 | "Name":[name], 90 | "Gender":[gender], 91 | "Zone":[zone], 92 | "City":[city], 93 | "Passw":[passw], 94 | "hasVoted":[0]},) 95 | else: 96 | vid=df['voter_id'].iloc[-1]+1 97 | df1 = pd.DataFrame({"voter_id":[vid], 98 | "Name":[name], 99 | "Gender":[gender], 100 | "Zone":[zone], 101 | "City":[city], 102 | "Passw":[passw], 103 | "hasVoted":[0]},) 104 | 105 | df = pd.concat([df, df1],ignore_index=True) 106 | 107 | df.to_csv(path/'voterList.csv') 108 | 109 | return vid 110 | -------------------------------------------------------------------------------- /homePage.py: -------------------------------------------------------------------------------- 1 | import subprocess as sb_p 2 | import tkinter as tk 3 | from tkinter import * 4 | from Admin import AdmLogin 5 | from voter import voterLogin 6 | 7 | 8 | def Home(root, frame1, frame2): 9 | 10 | for frame in root.winfo_children(): 11 | for widget in frame.winfo_children(): 12 | widget.destroy() 13 | 14 | Button(frame2, text="Home", command = lambda: Home(root, frame1, frame2)).grid(row=0,column=0) 15 | Label(frame2, text=" ").grid(row = 0,column = 1) 16 | Label(frame2, text=" ").grid(row = 0,column = 2) 17 | Label(frame2, text=" ").grid(row = 1,column = 1) 18 | frame2.pack(side=TOP) 19 | 20 | root.title("Home") 21 | 22 | Label(frame1, text="Home", font=('Helvetica', 25, 'bold')).grid(row = 0, column = 1, rowspan=1) 23 | Label(frame1, text="").grid(row = 1,column = 0) 24 | #Admin Login 25 | admin = Button(frame1, text="Admin Login", width=15, command = lambda: AdmLogin(root, frame1)) 26 | 27 | #Voter Login 28 | voter = Button(frame1, text="Voter Login", width=15, command = lambda: voterLogin(root, frame1)) 29 | 30 | #New Tab 31 | newTab = Button(frame1, text="New Window", width=15, command = lambda: sb_p.call('start python homePage.py', shell=True)) 32 | 33 | Label(frame1, text="").grid(row = 2,column = 0) 34 | Label(frame1, text="").grid(row = 4,column = 0) 35 | Label(frame1, text="").grid(row = 6,column = 0) 36 | admin.grid(row = 3, column = 1, columnspan = 2) 37 | voter.grid(row = 5, column = 1, columnspan = 2) 38 | newTab.grid(row = 7, column = 1, columnspan = 2) 39 | 40 | frame1.pack() 41 | root.mainloop() 42 | 43 | 44 | def new_home(): 45 | root = Tk() 46 | root.geometry('500x500') 47 | frame1 = Frame(root) 48 | frame2 = Frame(root) 49 | Home(root, frame1, frame2) 50 | 51 | 52 | if __name__ == "__main__": 53 | new_home() 54 | -------------------------------------------------------------------------------- /img/aap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/img/aap.png -------------------------------------------------------------------------------- /img/bjp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/img/bjp.png -------------------------------------------------------------------------------- /img/cong.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/img/cong.jpg -------------------------------------------------------------------------------- /img/nota.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/img/nota.jpg -------------------------------------------------------------------------------- /img/ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shah-deep/Online-Voting-System/f4964ac970470e74e7c372fc35fc852c2a373090/img/ss.png -------------------------------------------------------------------------------- /registerVoter.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import dframe as df 3 | import Admin as adm 4 | from tkinter import ttk 5 | from Admin import * 6 | from tkinter import * 7 | from dframe import * 8 | 9 | def reg_server(root,frame1,name,sex,zone,city,passw): 10 | if(passw=='' or passw==' '): 11 | msg = Message(frame1, text="Error: Missing Fileds", width=500) 12 | msg.grid(row = 10, column = 0, columnspan = 5) 13 | return -1 14 | 15 | vid = df.taking_data_voter(name, sex, zone, city, passw) 16 | for widget in frame1.winfo_children(): 17 | widget.destroy() 18 | txt = "Registered Voter with\n\n VOTER I.D. = " + str(vid) 19 | Label(frame1, text=txt, font=('Helvetica', 18, 'bold')).grid(row = 2, column = 1, columnspan=2) 20 | 21 | 22 | def Register(root,frame1): 23 | 24 | root.title("Register Voter") 25 | for widget in frame1.winfo_children(): 26 | widget.destroy() 27 | 28 | Label(frame1, text="Register Voter", font=('Helvetica', 18, 'bold')).grid(row = 0, column = 2, rowspan=1) 29 | Label(frame1, text="").grid(row = 1,column = 0) 30 | #Label(frame1, text="Voter ID: ", anchor="e", justify=LEFT).grid(row = 2,column = 0) 31 | Label(frame1, text="Name: ", anchor="e", justify=LEFT).grid(row = 3,column = 0) 32 | Label(frame1, text="Sex: ", anchor="e", justify=LEFT).grid(row = 4,column = 0) 33 | Label(frame1, text="Zone: ", anchor="e", justify=LEFT).grid(row = 5,column = 0) 34 | Label(frame1, text="City: ", anchor="e", justify=LEFT).grid(row = 6,column = 0) 35 | Label(frame1, text="Password: ", anchor="e", justify=LEFT).grid(row = 7,column = 0) 36 | 37 | #voter_ID = tk.StringVar() 38 | name = tk.StringVar() 39 | sex = tk.StringVar() 40 | zone = tk.StringVar() 41 | city = tk.StringVar() 42 | password = tk.StringVar() 43 | 44 | #e1 = Entry(frame1, textvariable = voter_ID).grid(row = 2, column = 2) 45 | e2 = Entry(frame1, textvariable = name).grid(row = 3, column = 2) 46 | e5 = Entry(frame1, textvariable = zone).grid(row = 5, column = 2) 47 | e6 = Entry(frame1, textvariable = city).grid(row = 6, column = 2) 48 | e7 = Entry(frame1, textvariable = password).grid(row = 7, column = 2) 49 | 50 | e4 = ttk.Combobox(frame1, textvariable = sex, width=17) 51 | e4['values'] = ("Male","Female","Transgender") 52 | e4.grid(row = 4, column = 2) 53 | e4.current() 54 | 55 | reg = Button(frame1, text="Register", command = lambda: reg_server(root, frame1, name.get(), sex.get(), zone.get(), city.get(), password.get()), width=10) 56 | Label(frame1, text="").grid(row = 8,column = 0) 57 | reg.grid(row = 9, column = 3, columnspan = 2) 58 | 59 | frame1.pack() 60 | root.mainloop() 61 | 62 | 63 | # if __name__ == "__main__": 64 | # root = Tk() 65 | # root.geometry('500x500') 66 | # frame1 = Frame(root) 67 | # Register(root,frame1) 68 | -------------------------------------------------------------------------------- /voter.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import socket 3 | from tkinter import * 4 | from VotingPage import votingPg 5 | 6 | def establish_connection(): 7 | try: 8 | host = socket.gethostname() 9 | port = 4001 10 | client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 11 | client_socket.connect((host, port)) 12 | print(client_socket) 13 | message = client_socket.recv(1024) #connection establishment message #1 14 | if(message.decode()=="Connection Established"): 15 | return client_socket 16 | else: 17 | return 'Failed' 18 | except: 19 | print("Connection Failed, check if server is running...") 20 | return 'Failed' 21 | 22 | 23 | def failed_return(root,frame1,client_socket,message): 24 | for widget in frame1.winfo_children(): 25 | widget.destroy() 26 | message = message + "... \nTry again..." 27 | Label(frame1, text=message, font=('Helvetica', 12, 'bold')).grid(row = 1, column = 1) 28 | try: 29 | client_socket.close() 30 | except: 31 | return 32 | 33 | def log_server(root,frame1,client_socket,voter_ID,password): 34 | if(not (voter_ID and password)): 35 | voter_ID = "0" 36 | password = "x" 37 | 38 | message = voter_ID + " " + password 39 | client_socket.send(message.encode()) #2 40 | 41 | message = client_socket.recv(1024) #Authenticatication message 42 | message = message.decode() 43 | 44 | if(message=="Authenticate"): 45 | votingPg(root, frame1, client_socket) 46 | 47 | elif(message=="VoteCasted"): 48 | message = "Vote has Already been Cast" 49 | failed_return(root,frame1,client_socket,message) 50 | 51 | elif(message=="InvalidVoter"): 52 | message = "Invalid Voter" 53 | failed_return(root,frame1,client_socket,message) 54 | 55 | else: 56 | message = "Server Error" 57 | failed_return(root,frame1,client_socket,message) 58 | 59 | 60 | 61 | def voterLogin(root,frame1): 62 | 63 | client_socket = establish_connection() 64 | if(client_socket == 'Failed'): 65 | message = "Connection failed" 66 | failed_return(root,frame1,client_socket,message) 67 | return 68 | 69 | root.title("Voter Login") 70 | for widget in frame1.winfo_children(): 71 | widget.destroy() 72 | 73 | Label(frame1, text="Voter Login", font=('Helvetica', 18, 'bold')).grid(row = 0, column = 2, rowspan=1) 74 | Label(frame1, text="").grid(row = 1,column = 0) 75 | Label(frame1, text="Voter ID: ", anchor="e", justify=LEFT).grid(row = 2,column = 0) 76 | Label(frame1, text="Password: ", anchor="e", justify=LEFT).grid(row = 3,column = 0) 77 | 78 | voter_ID = tk.StringVar() 79 | # name = tk.StringVar() 80 | password = tk.StringVar() 81 | 82 | e1 = Entry(frame1, textvariable = voter_ID) 83 | e1.grid(row = 2,column = 2) 84 | e3 = Entry(frame1, textvariable = password, show = '*') 85 | e3.grid(row = 3,column = 2) 86 | 87 | sub = Button(frame1, text="Login", width=10, command = lambda: log_server(root, frame1, client_socket, voter_ID.get(), password.get())) 88 | Label(frame1, text="").grid(row = 4,column = 0) 89 | sub.grid(row = 5, column = 3, columnspan = 2) 90 | 91 | frame1.pack() 92 | root.mainloop() 93 | 94 | 95 | # if __name__ == "__main__": 96 | # root = Tk() 97 | # root.geometry('500x500') 98 | # frame1 = Frame(root) 99 | # voterLogin(root,frame1) 100 | --------------------------------------------------------------------------------