computer project class 12
computer project class 12
import csv
import random
import string
import os
def generate_rr_number():
def first_page():
root = tk.Tk()
root.geometry("600x400")
root.configure(bg="light pink")
title_label = tk.Label(root, text="Electricity Bill Generator", font=("Times New Roman", 24, "bold"),
bg="light pink")
title_label.pack(pady=20)
register_button.pack(pady=10)
login_button.pack(pady=10)
rate_button = tk.Button(root, text="CURRENT ELECTRICITY RATE", font=("Times New Roman", 24),
bg="white", command=check_rate_page)
rate_button.pack(pady=10)
admin_button.pack(pady=10)
close_button.pack(pady=25)
root.mainloop()
def check_rate_page():
rate_window = tk.Toplevel()
rate_window.geometry("600x400")
rate_window.configure(bg="light pink")
table_data = [
rate_window.grid_columnconfigure(col, weight=1)
# Register Page
def register_page():
register_window = tk.Toplevel()
register_window.title("REGISTER")
register_window.geometry("600x600")
register_window.configure(bg="light pink")
entries = {}
entries[label_text] = entry
connection_type = tk.StringVar(register_window)
def registration_success_popup():
popup = tk.Toplevel()
popup.title("Registration Successful")
popup.geometry("400x200")
popup.configure(bg="light pink")
success_label.pack(pady=20)
def go_to_login():
popup.destroy()
first_page()
def submit_registration():
if not entry.get():
return
return
rr_number = generate_rr_number()
user_data = [
entries["Full Name"].get(),
entries["Date of Birth"].get(),
entries["Mobile Number"].get(),
entries["Email Address"].get(),
entries["Username"].get(),
entries["Password"].get(),
entries["Area/Street"].get(),
entries["Country"].get(),
entries["State"].get(),
entries["Pin Code"].get(),
connection_type.get(),
tariff_type.get(),
rr_number
writer = csv.writer(file)
writer.writerow(user_data)
registration_success_popup()
def login_page():
login_window = tk.Toplevel()
login_window.title("Login Page")
login_window.geometry("600x400")
login_window.configure(bg="light pink")
title_label.pack(pady=20)
username_label.pack(pady=5)
username_entry.pack(pady=5)
password_entry.pack(pady=5)
login_button.pack(pady=20)
login_window.mainloop()
reader = csv.reader(file)
user_full_name = row[0]
login_window.destroy()
return
user_window = tk.Toplevel()
user_window.title("User Page")
user_window.geometry("600x400")
user_window.configure(bg="light pink")
welcome_label = tk.Label(user_window, text=f"WELCOME, {user_full_name}", font=("Times New
Roman", 25), bg="light pink")
welcome_label.pack(pady=25)
view_bills_button.pack(pady=25)
view_profile_button.pack(pady=25)
edit_button.pack(pady=25)
change_password_button.pack(pady=25)
delete_account_button.pack(pady=25)
logout_button.pack(pady=25)
user_window.mainloop()
profile_window = tk.Toplevel()
profile_window.title("View Profile")
profile_window.geometry("600x600")
profile_window.configure(bg="light pink")
# Profile Title
title_label.pack(pady=20)
try:
reader = csv.reader(file)
profile_data = {
"Username": row[4],
"Password": row[5],
"Area/Street": row[7],
"Country": row[8],
"State": row[9],
break
else:
profile_window.destroy()
return
except FileNotFoundError:
profile_window.destroy()
return
label_key.pack(side="left", fill="x")
label_value.pack(side="left", fill="x")
back_button.pack(pady=20)
def edit_account_details(username):
# Open the CSV file and find the user's data
user_data = None
rows = []
reader = csv.reader(file)
rows.append(row)
user_data = row
if not user_data:
return
edit_window = tk.Toplevel()
edit_window.geometry("600x600")
edit_window.configure(bg="light pink")
title_label.pack(pady=20)
fields_to_edit = {
"Full Name": 0,
"Mobile Number": 2,
"Email Address": 3,
"Area/Street": 7,
"Country": 8,
"State": 9,
entries = {}
label.pack(pady=5)
entry.pack(pady=5)
entries[label_text] = entry
def save_changes():
updated_data = user_data.copy()
updated_data[fields_to_edit[field]] = entry.get()
writer = csv.writer(file)
if row[4] == username:
else:
writer.writerow(row)
messagebox.showinfo("Success", "Account details updated successfully!")
edit_window.destroy()
save_button.pack(pady=20)
def close_edit_window():
edit_window.destroy()
close_button.pack(pady=10)
def change_password_page():
change_password_window = tk.Toplevel()
change_password_window.title("Change Password")
change_password_window.geometry("600x400")
change_password_window.configure(bg="light pink")
title_label.pack(pady=20)
# Username
username_label.pack(pady=5)
username_entry = tk.Entry(change_password_window, font=("Times New Roman", 16))
username_entry.pack(pady=5)
# New Password
new_password_label.pack(pady=5)
new_password_entry.pack(pady=5)
confirm_password_label.pack(pady=5)
confirm_password_entry.pack(pady=5)
def save_new_password():
username = username_entry.get()
new_password = new_password_entry.get()
confirm_password = confirm_password_entry.get()
return
if new_password != confirm_password:
return
user_found = False
rows = []
reader = csv.reader(file)
user_found = True
rows.append(row)
if user_found:
writer = csv.writer(file)
writer.writerows(rows)
change_password_window.destroy()
else:
save_button.pack(pady=20)
def close_change_password_window():
change_password_window.destroy()
cancel_button = tk.Button(change_password_window, text="CANCEL", font=("Times New Roman",
16), bg="white", command=close_change_password_window)
cancel_button.pack(pady=10)
def delete_account_page(username):
delete_window = tk.Toplevel()
delete_window.title("Delete Account")
delete_window.geometry("600x300")
delete_window.configure(bg="light pink")
# Confirmation message
confirm_label.pack(pady=50)
def delete_account():
user_data = []
account_deleted = False
reader = csv.reader(file)
user_data.append(row)
else:
account_deleted = True
writer = csv.writer(file)
writer.writerows(user_data)
if account_deleted:
delete_window.destroy()
else:
# YES Button
yes_button.pack(pady=30)
# NO Button
no_button.pack(pady=30)
delete_window.mainloop()
def admin_login_page():
admin_window = tk.Toplevel()
admin_window.title("Admin Login")
admin_window.geometry("600x400")
admin_window.configure(bg="light pink")
title_label.pack(pady=30)
# Admin ID
admin_id_label.pack(pady=5)
admin_id_entry.pack(pady=5)
# Security Code
security_code_label.pack(pady=5)
security_code_entry.pack(pady=5)
def validate_admin_login():
admin_id = admin_id_entry.get()
security_code = security_code_entry.get()
admin_window.destroy()
admin_dashboard_page()
else:
# Login button
login_button = tk.Button(admin_window, text="Login", font=("Times New Roman", 18),
bg="white", command=validate_admin_login)
login_button.pack(pady=30)
admin_window.mainloop()
def admin_dashboard_page():
admin_dashboard_window = tk.Toplevel()
admin_dashboard_window.title("Admin Dashboard")
admin_dashboard_window.geometry("600x400")
admin_dashboard_window.configure(bg="light pink")
# Title
title_label.pack(pady=50)
delete_user_button.pack(pady=35)
generate_bill_button.pack(pady=35)
admin_logout_button.pack(pady=35)
admin_dashboard_window.mainloop()
def delete_user_account():
delete_user_window = tk.Toplevel()
delete_user_window.geometry("600x400")
delete_user_window.configure(bg="light pink")
# Title
title_label.pack(pady=50)
username_label.pack(pady=10)
username_entry.pack(pady=10)
def delete_user():
try:
lines = file.readlines()
# Write back all lines except the one with the username to be deleted
user_deleted = False
if line.split(',')[4].strip() != username_to_delete:
file.write(line)
else:
user_deleted = True
if user_deleted:
else:
except FileNotFoundError:
delete_button.pack(pady=25)
delete_user_window.mainloop()
def generate_bill():
generate_bill_window = tk.Toplevel()
generate_bill_window.geometry("600x500")
generate_bill_window.configure(bg="light pink")
# Title
# Username
# Month
# Year
def submit_bill():
username = username_entry.get().strip()
month = month_entry.get().strip()
year = year_entry.get().strip()
previous_date = previous_date_entry.get().strip()
present_date = present_date_entry.get().strip()
previous_meter = previous_meter_entry.get().strip()
present_meter = present_meter_entry.get().strip()
return
file_name = f"{username}.csv"
# If the file doesn't exist, create a new one and write the headers
if not os.path.exists(file_name):
writer = csv.writer(file)
writer = csv.writer(file)
generate_bill_window.destroy()
# Submit button
generate_bill_window.mainloop()
import tkinter as tk
import csv
import os
def view_bills():
view_bill_window = tk.Toplevel()
view_bill_window.geometry("600x500")
view_bill_window.configure(bg="light pink")
# Title
# Username
# Month
# Year
year_label = tk.Label(view_bill_window, text="Enter Year:", font=("Times New Roman", 20),
bg="light pink")
# Function to search for the bill details and show the bill in a separate window
def show_bill():
username = username_entry.get().strip()
month = month_entry.get().strip()
year = year_entry.get().strip()
return
file_name = f"{username}.csv"
if not os.path.exists(file_name):
return
reader = csv.reader(file)
found = False
found = True
previous_date = row[3]
present_date = row[4]
previous_meter = float(row[5])
present_meter = float(row[6])
fixed_charges = 90
rate_per_kwh = 4.30
# Calculate last date to pay (add 14 days to the day part of the present date)
day, month, year = map(int, present_date.split('/')) # Splitting the date into day, month,
and year
# If day exceeds the number of days in the month, adjust month and year
# For simplicity, we assume all months have 30 days in this example (you can expand this
logic for exact month lengths)
day -= 30
month += 1
month = 1
year += 1
last_date_to_pay = f"{day:02d}/{month:02d}/{year}"
# Create a new window to display the bill
bill_popup = tk.Toplevel(view_bill_window)
bill_popup.title("ELECTRICITY BILL")
bill_popup.geometry("600x500")
bill_popup.configure(bg="light pink")
bill_content = f"""
ELECTRICITY BILL
MONTH: {month}
YEAR: {year}
Fixed charges: 90 Rs
TAXES: {taxes} Rs
"""
bill_label.pack(pady=25)
# Back button to close the bill popup
back_button.pack(pady=10)
break
if not found:
messagebox.showerror("Error", "No bill found for the given month and year.")
view_bill_window.mainloop()
first_page()