ソースコード「KDmain.py」更新日:2024/10/12
###################################################### # ファイル名:KDmain.py # バージョン:Ver1.0 # 機能:アプリの基幹制御 # 作成日:2024/10/12 # 更新日:2024/10/12 ###################################################### import os import json from KDpay import PayManager from KDui import UIManager file_path = 'KDjson.json' def main(): # 既存ファイルを確認 if not os.path.exists(file_path): # 無ければ作成 with open( file_path, mode='w', encoding="UTF-8" ) as open_json: initial_list = [{ "month" : 0 , #"月" "day" : 0 , #"日" "content" : "内訳", "amount" : 0 #"金額" } ] json.dump( initial_list, open_json, indent=4, ensure_ascii=False) # ペイ(収支)データ管理用クラスオブジェクト作成 pay_manager = PayManager() # ファイルの読み込み with open( file_path, mode='r', encoding="UTF-8") as open_json: json_load_list = json.load(open_json) # 読み込んだファイルをペイ(収支)データ管理用クラスオブジェクトに追加 for pay_data in json_load_list: pay_manager.add_pay(pay_data) # 入力画面管理用クラスオブジェクト作成 ui_manager = UIManager(pay_manager) # ファイル書き込み with open(file_path, mode='w',encoding="UTF-8") as open_json: updated_data_list=[] for pay in pay_manager.pay_data_list: updated_data_list.append({ "month": pay.month, "day": pay.day, "content": pay.content, "amount": pay.amount }) json.dump(updated_data_list, open_json ,indent=4,ensure_ascii=False) # プログラム開始宣言 if __name__ == '__main__': main() |
ソースコード「KDpay.py」更新日:2024/10/12
###################################################### # ファイル名:KDpay.py # バージョン:Ver1.0 # 機能:レコードを管理 # 作成日:2024/10/12 # 更新日:2024/10/12 ###################################################### class Pay: def __init__(self, pay_data): # ペイ(収支)データの初期化 self.month = pay_data["month"] self.day = pay_data["day"] self.content = pay_data["content"] self.amount = pay_data["amount"] class PayManager: def __init__(self): # ペイデータリストの初期化 self.pay_data_list = [] def add_pay(self, pay_data): # 新しいペイデータをペイデータリストに追加 new_pay_data = Pay(pay_data) self.pay_data_list.append(new_pay_data) def delete_pay(self, pay_data): # ペイデータをペイデータリストから削除 self.pay_data_list.pop(pay_data) |
ソースコード「KDui.py」更新日:2024/10/15
###################################################### # ファイル名:KDui.py # バージョン:Ver1.0 # 機能:CUIで入力画面を制御 # 作成日:2024/10/12 # 更新日:2024/10/15 # 更新内容: # pandas.json_normalize()で # 辞書のリストをDataFrameに変換 ###################################################### import pandas as pd class UIManager: def __init__(self, pay_manager): # UIの初期化 self.pay_manager = pay_manager # 入力画面呼び出し self.command_input() def command_input(self): # 入力画面の表示 while True: self.get_pay_amount() command = input("(1表示、2追加、3更新、4削除、5残高、0終了)どの操作を行いますか?番号: ") if command == "0": #'終了' break elif command == "1": #'表示' self.show_pays() elif command == "2": #'追加' self.add_pay() elif command == "3": #'更新' self.update_pay() elif command == "4": #'削除' self.delete_pay() elif command == "5": #'残高' self.get_pay_amount() else: print("0~4の番号を入力してください。") def show_pays(self): # リストを表示 """ cnt = 0 for pay_data in self.pay_manager.pay_data_list: print(f"ID:{cnt}{vars(self.pay_manager.pay_data_list[cnt])}") cnt += 1 """ get_pay_amount_list=[] for pay in self.pay_manager.pay_data_list: get_pay_amount_list.append({ "month": pay.month, "day": pay.day, "content": pay.content, "amount": pay.amount }) print(pd.json_normalize(get_pay_amount_list)) def add_pay(self): # レコード(辞書)を追加 try: month = int(input("月を入力(数値)してください: ")) day = int(input("日を入力(数値)してください: ")) content = input("内訳を入力してください: ") amount = int(input("金額を入力(数値)してください: ")) except ValueError: print("エラー:数値以外が入力されました") return self.add_pay() new_pay_dict = { "month" : month, "day" : day, "content": content, "amount" : amount } self.pay_manager.add_pay(new_pay_dict) def update_pay(self): #レコード(辞書)を更新 self.delete_pay() self.add_pay() def delete_pay(self): #レコード(辞書)を削除 delete_column = input("削除する行のID番号を入力してください: ") number = int(delete_column) self.pay_manager.delete_pay(number) def get_pay_amount(self): get_pay_amount_list=[] for pay in self.pay_manager.pay_data_list: get_pay_amount_list.append({ "month": pay.month, "day": pay.day, "content": pay.content, "amount": pay.amount }) get_pay_amount_total_list = [d.get("amount") for d in get_pay_amount_list] print(f"現在の残高は{sum(get_pay_amount_total_list)*-1}円です") |

0 件のコメント:
コメントを投稿