帮我写一个记账软件代码,具体要求: 使用类实现数据封装,使用tkinter实现界面UI设计,使用文件保存数据,要有两个文件,一个文件是用户登陆注册功能,另一个文件是实现数据的增加、修改、删除和查询,退出操作。
时间: 2024-03-20 20:39:46 浏览: 20
好的,我可以为您提供一个大致的代码框架,您可以根据自己的实际需求进行修改和完善。
首先,我们需要创建一个类来实现数据的封装。这个类包含账目的日期、类型、金额、备注等信息。代码如下:
```
class Account:
def __init__(self, date, category, amount, note):
self.date = date
self.category = category
self.amount = amount
self.note = note
```
接下来,我们需要使用tkinter来实现界面UI设计。我们可以创建一个登陆、注册界面和一个主界面,主界面上包含账目的增加、修改、删除和查询等功能。代码如下:
```
import tkinter as tk
from tkinter import messagebox
class LoginFrame:
def __init__(self, master):
self.master = master
self.master.title("登陆")
self.master.geometry("300x200")
self.label_username = tk.Label(self.master, text="用户名")
self.label_username.pack()
self.entry_username = tk.Entry(self.master)
self.entry_username.pack()
self.label_password = tk.Label(self.master, text="密码")
self.label_password.pack()
self.entry_password = tk.Entry(self.master, show="*")
self.entry_password.pack()
self.button_login = tk.Button(self.master, text="登陆", command=self._login_btn_clicked)
self.button_login.pack()
self.button_register = tk.Button(self.master, text="注册", command=self._register_btn_clicked)
self.button_register.pack()
def _login_btn_clicked(self):
pass
def _register_btn_clicked(self):
pass
class MainFrame:
def __init__(self, master):
self.master = master
self.master.title("记账软件")
self.master.geometry("800x600")
self.label_date = tk.Label(self.master, text="日期")
self.label_date.pack()
self.entry_date = tk.Entry(self.master)
self.entry_date.pack()
self.label_category = tk.Label(self.master, text="类型")
self.label_category.pack()
self.entry_category = tk.Entry(self.master)
self.entry_category.pack()
self.label_amount = tk.Label(self.master, text="金额")
self.label_amount.pack()
self.entry_amount = tk.Entry(self.master)
self.entry_amount.pack()
self.label_note = tk.Label(self.master, text="备注")
self.label_note.pack()
self.entry_note = tk.Entry(self.master)
self.entry_note.pack()
self.button_add = tk.Button(self.master, text="添加", command=self._add_account)
self.button_add.pack()
self.button_modify = tk.Button(self.master, text="修改", command=self._modify_account)
self.button_modify.pack()
self.button_delete = tk.Button(self.master, text="删除", command=self._delete_account)
self.button_delete.pack()
self.button_query = tk.Button(self.master, text="查询", command=self._query_account)
self.button_query.pack()
self.button_exit = tk.Button(self.master, text="退出", command=self._exit)
self.button_exit.pack()
def _add_account(self):
pass
def _modify_account(self):
pass
def _delete_account(self):
pass
def _query_account(self):
pass
def _exit(self):
pass
if __name__ == '__main__':
root = tk.Tk()
app = LoginFrame(root)
root.mainloop()
```
接下来,我们需要使用文件保存数据。我们可以创建两个文件,一个用来保存用户的登陆信息,另一个用来保存账目信息。代码如下:
```
import json
class UserDB:
def __init__(self, filename):
self.filename = filename
self._users = {}
self._load()
def _load(self):
try:
with open(self.filename, 'r') as f:
self._users = json.load(f)
except FileNotFoundError:
pass
def _save(self):
with open(self.filename, 'w') as f:
json.dump(self._users, f)
def get(self, username):
return self._users.get(username)
def add(self, username, password):
if username in self._users:
raise ValueError("用户名已存在")
self._users[username] = password
self._save()
class AccountDB:
def __init__(self, filename):
self.filename = filename
self._accounts = []
self._load()
def _load(self):
try:
with open(self.filename, 'r') as f:
self._accounts = json.load(f)
except FileNotFoundError:
pass
def _save(self):
with open(self.filename, 'w') as f:
json.dump(self._accounts, f)
def add(self, account):
self._accounts.append(account)
self._save()
def modify(self, index, account):
self._accounts[index] = account
self._save()
def delete(self, index):
del self._accounts[index]
self._save()
def query(self, start_date, end_date):
return [account for account in self._accounts if start_date <= account.date <= end_date]
```
最后,我们需要在登陆、注册界面和主界面中添加相应的功能代码。代码如下:
```
class LoginFrame:
def __init__(self, master):
self.master = master
self.master.title("登陆")
self.master.geometry("300x200")
self.label_username = tk.Label(self.master, text="用户名")
self.label_username.pack()
self.entry_username = tk.Entry(self.master)
self.entry_username.pack()
self.label_password = tk.Label(self.master, text="密码")
self.label_password.pack()
self.entry_password = tk.Entry(self.master, show="*")
self.entry_password.pack()
self.button_login = tk.Button(self.master, text="登陆", command=self._login_btn_clicked)
self.button_login.pack()
self.button_register = tk.Button(self.master, text="注册", command=self._register_btn_clicked)
self.button_register.pack()
self.user_db = UserDB("users.json")
def _login_btn_clicked(self):
username = self.entry_username.get()
password = self.entry_password.get()
if self.user_db.get(username) == password:
self.master.destroy()
root = tk.Tk()
app = MainFrame(root)
root.mainloop()
else:
messagebox.showwarning("警告", "用户名或密码错误")
def _register_btn_clicked(self):
username = self.entry_username.get()
password = self.entry_password.get()
try:
self.user_db.add(username, password)
messagebox.showinfo("提示", "注册成功")
except ValueError:
messagebox.showwarning("警告", "用户名已存在")
class MainFrame:
def __init__(self, master):
self.master = master
self.master.title("记账软件")
self.master.geometry("800x600")
self.label_date = tk.Label(self.master, text="日期")
self.label_date.pack()
self.entry_date = tk.Entry(self.master)
self.entry_date.pack()
self.label_category = tk.Label(self.master, text="类型")
self.label_category.pack()
self.entry_category = tk.Entry(self.master)
self.entry_category.pack()
self.label_amount = tk.Label(self.master, text="金额")
self.label_amount.pack()
self.entry_amount = tk.Entry(self.master)
self.entry_amount.pack()
self.label_note = tk.Label(self.master, text="备注")
self.label_note.pack()
self.entry_note = tk.Entry(self.master)
self.entry_note.pack()
self.button_add = tk.Button(self.master, text="添加", command=self._add_account)
self.button_add.pack()
self.button_modify = tk.Button(self.master, text="修改", command=self._modify_account)
self.button_modify.pack()
self.button_delete = tk.Button(self.master, text="删除", command=self._delete_account)
self.button_delete.pack()
self.button_query = tk.Button(self.master, text="查询", command=self._query_account)
self.button_query.pack()
self.button_exit = tk.Button(self.master, text="退出", command=self._exit)
self.button_exit.pack()
self.account_db = AccountDB("accounts.json")
def _add_account(self):
date = self.entry_date.get()
category = self.entry_category.get()
amount = self.entry_amount.get()
note = self.entry_note.get()
account = Account(date, category, amount, note)
self.account_db.add(account)
messagebox.showinfo("提示", "添加成功")
def _modify_account(self):
pass
def _delete_account(self):
pass
def _query_account(self):
start_date = self.entry_date.get()
end_date = self.entry_category.get()
accounts = self.account_db.query(start_date, end_date)
messagebox.showinfo("查询结果", accounts)
def _exit(self):
self.master.destroy()
```
这就是一个基本的记账软件代码框架,您可以根据自己的实际需求进行修改和完善。