From fa191daaa6106026c5ba431ad5b19ce99925b849 Mon Sep 17 00:00:00 2001 From: kun <13098278+w52020031129@user.noreply.gitee.com> Date: Fri, 31 May 2024 11:31:10 +0800 Subject: [PATCH] 5-31 --- BookDouban250.csv | 275 +++++----------------------------------------- book_data.xlsx | Bin 17931 -> 8692 bytes main.py | 10 +- sql.py | 27 +++++ visualization.py | 152 +++++++++++++++++++++++++ 5 files changed, 211 insertions(+), 253 deletions(-) create mode 100644 visualization.py diff --git a/BookDouban250.csv b/BookDouban250.csv index 15130a7..58dff19 100644 --- a/BookDouban250.csv +++ b/BookDouban250.csv @@ -1,301 +1,76 @@ 书名,豆瓣链接,作者,译者,出版社,出版日期,价格,评分,评分人数,一句话评价 红楼梦,https://book.douban.com/subject/1007305/,[清] 曹雪芹 著 ,, 人民文学出版社 , 1996-12 , 59.70元,9.6,"( - 424747人评价 + 424772人评价 )",都云作者痴,谁解其中味? 活着,https://book.douban.com/subject/4913064/,余华 ,, 作家出版社 , 2012-8 , 20.00元,9.4,"( - 835235人评价 + 835290人评价 )",生的苦难与伟大 1984,https://book.douban.com/subject/4820710/,[英] 乔治·奥威尔 , 刘绍铭 , 北京十月文艺出版社 , 2010-4-1 , 28.00,9.4,"( - 285065人评价 + 285090人评价 )",栗树荫下,我出卖你,你出卖我 哈利·波特,https://book.douban.com/subject/24531956/,J.K.罗琳 (J.K.Rowling) , 苏农 , 人民文学出版社 , 2008-12-1 , 498.00元,9.7,"( - 107700人评价 + 107716人评价 )",从9¾站台开始的旅程 三体全集,https://book.douban.com/subject/6518605/,刘慈欣 ,, 重庆出版社 , 2012-1 , 168.00元,9.5,"( - 188163人评价 + 188181人评价 )",地球往事三部曲 百年孤独,https://book.douban.com/subject/6082808/,[哥伦比亚] 加西亚·马尔克斯 , 范晔 , 南海出版公司 , 2011-6 , 39.50元,9.3,"( - 426471人评价 + 426504人评价 )",魔幻现实主义文学代表作 飘,https://book.douban.com/subject/1068920/,[美国] 玛格丽特·米切尔 , 李美华 , 译林出版社 , 2000-9 , 40.00元,9.3,"( - 212787人评价 + 212799人评价 )",革命时期的爱情,随风而逝 动物农场,https://book.douban.com/subject/2035179/,[英] 乔治·奥威尔 , 荣如德 , 上海译文出版社 , 2007-3 , 10.00元,9.3,"( - 160375人评价 + 160394人评价 )",太阳底下并无新事 房思琪的初恋乐园,https://book.douban.com/subject/27614904/,林奕含 ,, 北京联合出版公司 , 2018-2 , 45.00元,9.2,"( - 380457人评价 + 380487人评价 )",向死而生的文学绝唱 三国演义(全二册),https://book.douban.com/subject/1019568/,[明] 罗贯中 ,, 人民文学出版社 , 1998-05 , 39.50元,9.3,"( - 168777人评价 + 168784人评价 )",是非成败转头空 福尔摩斯探案全集(上中下),https://book.douban.com/subject/1040211/,[英] 阿·柯南道尔 , 丁钟华 等 , 群众出版社 , 1981-8 , 53.00元/68.00元,9.3,"( - 133793人评价 + 133801人评价 )",名侦探的代名词 白夜行,https://book.douban.com/subject/10554308/,[日] 东野圭吾 , 刘姿君 , 南海出版公司 , 2013-1-1 , 39.50元,9.2,"( - 476221人评价 + 476254人评价 )",一宗离奇命案牵出跨度近20年步步惊心的故事 小王子,https://book.douban.com/subject/1084336/,[法] 圣埃克苏佩里 , 马振骋 , 人民文学出版社 , 2003-8 , 22.00元,9.1,"( - 757106人评价 + 757129人评价 )",献给长成了大人的孩子们 安徒生童话故事集,https://book.douban.com/subject/1046209/,(丹麦)安徒生 , 叶君健 , 人民文学出版社 , 1997-08 , 25.00元,9.3,"( - 132939人评价 + 132945人评价 )",为了争取未来的一代 天龙八部,https://book.douban.com/subject/1255625/,金庸 ,, 生活·读书·新知三联书店 , 1994-5 , 96.00元,9.2,"( - 133112人评价 + 133122人评价 )",有情皆孽,无人不冤 呐喊,https://book.douban.com/subject/1449351/,鲁迅 ,, 人民文学出版社 , 1973-3 , 0.36元,9.2,"( - 160766人评价 + 160786人评价 )",新文学的第一声呐喊 撒哈拉的故事,https://book.douban.com/subject/1060068/,三毛 ,, 哈尔滨出版社 , 2003-8 , 15.80元,9.2,"( - 175392人评价 + 175407人评价 )",游荡的自由灵魂 悉达多,https://book.douban.com/subject/26980487/,[德] 赫尔曼·黑塞 , 姜乙 , 天津人民出版社 , 2017-1 , 32.00元,9.3,"( - 106479人评价 + 106539人评价 )", 邓小平时代,https://book.douban.com/subject/20424526/,【美】傅高义 (Ezra.F.Vogel) , 冯克利 , 生活·读书·新知三联书店 , 2013-1-18 , 88.00元,9.3,"( - 71069人评价 + 71079人评价 )",个人命运背后的历史变局 杀死一只知更鸟,https://book.douban.com/subject/6781808/,[美] 哈珀·李 , 高红梅 , 译林出版社 , 2012-9 , 32.00元,9.2,"( - 147149人评价 + 147155人评价 )",有一种东西不能遵循从众原则,那就是——人的良心 明朝那些事儿(1-9),https://book.douban.com/subject/3674537/,当年明月 ,, 中国海关出版社 , 2009-4 , 358.20元,9.2,"( - 175420人评价 + 175445人评价 )",不拘一格的历史书写 失踪的孩子,https://book.douban.com/subject/30172069/,[意] 埃莱娜·费兰特 , 陈英 , 人民文学出版社 , 2018-7 , 62.00元,9.2,"( - 81842人评价 + 81858人评价 )",我的整个生命,只是一场为了提升社会地位的低俗斗争。 新名字的故事,https://book.douban.com/subject/26986954/,[意] 埃莱娜·费兰特 , 陈英 , 人民文学出版社 , 2017-4 , 59.00元,9.2,"( - 92415人评价 + 92431人评价 )",探索青年时代的激情、困惑、挣扎、背叛和失去 野草,https://book.douban.com/subject/1915958/,鲁迅 ,, 人民文学出版社 , 1973-3 , 0.20元,9.5,"( - 47588人评价 + 47595人评价 )",我以这一丛野草,在明与暗,生与死,过去与未来之际,献于友与仇,人与兽,爱者与不爱者之前作证。 沉默的大多数,https://book.douban.com/subject/1054685/,王小波 ,, 中国青年出版社 , 1997-10 , 27.00元,9.1,"( - 151713人评价 + 151721人评价 )",沉默是沉默者的通行证 -中国历代政治得失,https://book.douban.com/subject/1003479/,钱穆 ,, 生活·读书·新知三联书店 , 2001 , 12.00元,9.2,"( - 73092人评价 - )",一部简明的“中国政治制度史” -局外人,https://book.douban.com/subject/4908885/,[法] 阿尔贝·加缪 , 柳鸣九 , 上海译文出版社 , 2010-8 , 22.00元,9.1,"( - 240904人评价 - )",人生在世,永远也不该演戏作假 -卡拉马佐夫兄弟,https://book.douban.com/subject/25887924/,[俄] 费奥多尔·陀思妥耶夫斯基 , 荣如德 , 上海译文出版社 , 2015-2-1 , CNY 78.00,9.6,"( - 34533人评价 - )", -白鹿原,https://book.douban.com/subject/10564071/,陈忠实 ,, 人民文学出版社 , 2012-9 , 39.00元,9.2,"( - 108324人评价 - )",一轴关于我们民族灵魂的现实主义画卷 -乡土中国,https://book.douban.com/subject/1795079/,费孝通 ,, 上海人民出版社 , 2006-04-01 , 38.00,9.2,"( - 90918人评价 - )",中国乡土社会传统文化和社会结构理论研究代表作 -人类简史,https://book.douban.com/subject/25985021/,[以色列] 尤瓦尔·赫拉利 , 林俊宏 , 中信出版社 , 2014-11 , 68.00元,9.1,"( - 200052人评价 - )",跟着人类一同走过十万年 -彷徨,https://book.douban.com/subject/1449348/,鲁迅 ,, 人民文学出版社 , 1973-3 , 0.37元,9.3,"( - 65792人评价 - )",路漫漫其修远兮,吾将上下而求索 -围城,https://book.douban.com/subject/1008145/,钱锺书 ,, 人民文学出版社 , 1991-2 , 19.00,9.0,"( - 447516人评价 - )",幽默的语言和对生活深刻的观察 -平凡的世界(全三部),https://book.douban.com/subject/1200840/,路遥 ,, 人民文学出版社 , 2005-1 , 64.00元,9.0,"( - 324693人评价 - )",中国当代城乡生活全景 -许三观卖血记,https://book.douban.com/subject/4760224/,余华 ,, 作家出版社 , 2012-9 , 24.00元,9.2,"( - 164647人评价 - )", -罗杰疑案,https://book.douban.com/subject/21371175/,[英] 阿加莎·克里斯蒂 , 常禾 , 新星出版社 , 2013-3 , 28.00元,9.2,"( - 75083人评价 - )", -笑傲江湖(全四册),https://book.douban.com/subject/1002299/,金庸 ,, 生活·读书·新知三联书店 , 1994-5 , 76.80元,9.1,"( - 111981人评价 - )",欲练此功,必先自宫 -我与地坛,https://book.douban.com/subject/1209899/,史铁生 ,, 春风文艺出版社 , 2002-5 , 25.00元,9.2,"( - 109207人评价 - )",这是你的罪孽与福祉 -献给阿尔吉侬的花束,https://book.douban.com/subject/26362836/,[美] 丹尼尔·凯斯 , 陈澄和 , 广西师范大学出版社 , 2015-4 , 36.00元,9.1,"( - 109577人评价 - )",当声称能改造智能的科学实验选中心智障碍主角 -东方快车谋杀案,https://book.douban.com/subject/1827374/,[英] 阿加莎·克里斯蒂 , 陈尧光 , 人民文学出版社 , 2006-5 , 18.00元,9.1,"( - 139928人评价 - )",谋杀诡计惊人,波洛的抉择耐人寻味 -肖申克的救赎,https://book.douban.com/subject/1829226/,[美] 斯蒂芬·金 , 施寄青 , 人民文学出版社 , 2006-7 , 29.90元,9.1,"( - 121711人评价 - )",豆瓣电影Top1原著 -基督山伯爵,https://book.douban.com/subject/1085860/,[法国] 大仲马 , 周克希 , 上海译文出版社 , 1991-12-1 , 43.90元,9.1,"( - 129625人评价 - )",一个报恩复仇的故事,以法国波旁王朝和七月王朝为背景 -江城,https://book.douban.com/subject/7060185/,[美] 彼得·海斯勒 , 李雪顺 , 上海译文出版社 , 2012-1 , 36.00元,9.1,"( - 63156人评价 - )",外国人眼中的涪陵 -城南旧事,https://book.douban.com/subject/1254588/,林海音 文 ,, 中国青年出版社 , 2003-7 , 16.00元,9.1,"( - 157559人评价 - )",长亭外,古道边,芳草碧连天 -故事新编,https://book.douban.com/subject/2046909/,鲁迅 ,, 人民文学出版社 , 1973-12-01 , 0.31 元,9.4,"( - 43530人评价 - )",拾取古代传说,取一点因由,随意点染 -霍乱时期的爱情,https://book.douban.com/subject/10594787/,[哥伦比亚] 加西亚·马尔克斯 , 杨玲 , 南海出版公司 , 2012-9-1 , 39.50元,9.0,"( - 286400人评价 - )",义无反顾地直达爱情的核心 -艺术的故事,https://book.douban.com/subject/3162991/,[英] 贡布里希 (Sir E.H.Gombrich) , 范景中 , 广西美术出版社 , 2008-04 , 280.00,9.6,"( - 26420人评价 - )",从最早的洞窟绘画到当今的实验艺术 -万历十五年,https://book.douban.com/subject/1041482/,[美] 黄仁宇 ,, 生活·读书·新知三联书店 , 1997-5 , 18.00元,9.0,"( - 202421人评价 - )",见微知著,历史观的颠覆 -朝花夕拾,https://book.douban.com/subject/1449352/,鲁迅 ,, 人民文学出版社 , 1973-4 , 0.25元,9.1,"( - 155351人评价 - )",在纷扰中寻出一点闲静 -月亮和六便士,https://book.douban.com/subject/1858513/,[英] 毛姆 , 傅惟慈 , 上海译文出版社 , 2006-8 , 15.00元,9.0,"( - 209986人评价 - )",有多少人会经历顿悟,就有更少的人甘愿自我放逐 -厌女,https://book.douban.com/subject/25836270/,上野千鹤子 , 王兰 , 上海三联书店 , 2015-1 , 28.00,9.1,"( - 82293人评价 - )", -秋园,https://book.douban.com/subject/34998019/,杨本芬 ,, 北京联合出版公司 , 2020-6 , 38.00元,9.0,"( - 109169人评价 - )", -射雕英雄传,https://book.douban.com/subject/1044547/,金庸 ,, 生活·读书·新知三联书店 , 1999-04 , 47.00元,9.1,"( - 85869人评价 - )",侠之大者,为国为民 -置身事内,https://book.douban.com/subject/35546622/,兰小欢 ,, 上海人民出版社 , 2021-8 , 65.00元,9.1,"( - 80571人评价 - )", -追风筝的人,https://book.douban.com/subject/1770782/,[美] 卡勒德·胡赛尼 , 李继宏 , 上海人民出版社 , 2006-5 , 29.00元,8.9,"( - 795653人评价 - )",为你,千千万万遍 -寻路中国,https://book.douban.com/subject/5414391/,[美] 彼得·海斯勒 , 李雪顺 , 上海译文出版社 , 2011-1 , 33.00元,9.0,"( - 57071人评价 - )",《纽约客》驻北京记者驾车漫游中国大陆的经历 -树上的男爵,https://book.douban.com/subject/6789605/,[意大利]伊塔洛·卡尔维诺 , 吴正仪 , 译林出版社 , 2012-4-1 , 30.00元,9.1,"( - 60629人评价 - )",是不是真的只有先与人疏离,才能最终与他们在一起? -刀锋,https://book.douban.com/subject/2035162/,[英]毛姆 , 周煦良 , 上海译文出版社 , 2007-3 , 18.00元,9.0,"( - 92183人评价 - )",一把刀的锋刃不容易越过;因此智者说得救之道是困难的 -格林童话全集,https://book.douban.com/subject/1043008/,[德国]格林兄弟 , 魏以新 , 人民文学出版社 , 1994-11 , 21.45元,9.1,"( - 95675人评价 - )",一本有教育意义的书 -无人生还,https://book.douban.com/subject/3006581/,[英] 阿加莎・克里斯蒂 , 祁阿红 , 人民文学出版社 , 2008-3 , 19.00,9.0,"( - 150683人评价 - )",童谣杀人案 -中国少年儿童百科全书(全四册),https://book.douban.com/subject/1028409/,林崇德 主编 ,, 浙江教育出版社 , 1991-4 , 168.00元,9.4,"( - 18725人评价 - )", -西游记(全二册),https://book.douban.com/subject/1029553/,吴承恩 , 黄肃秋 注释 , 人民文学出版社 , 2004-8 , 47.20元,9.1,"( - 89136人评价 - )",神魔皆有人情,精魅亦通世故 -鼠疫,https://book.douban.com/subject/24257229/,[法] 阿尔贝·加缪 , 刘方 , 上海译文出版社 , 2013-8 , 34.00元,9.1,"( - 79680人评价 - )",用别样的监禁生活再现某种监禁生活,与用不存在的事表现真事同等合理 -嫌疑人X的献身,https://book.douban.com/subject/3211779/,[日] 东野圭吾 , 刘子倩 , 南海出版公司 , 2008-9 , 28.00,8.9,"( - 524826人评价 - )",数学好是一种极致的浪漫 -黄金时代,https://book.douban.com/subject/1089243/,王小波 ,, 花城出版社 , 1999-3 , 19.00元,8.9,"( - 166995人评价 - )",我想爱,想吃,还想在一瞬间变成天上半明半暗的云 -傲慢与偏见,https://book.douban.com/subject/1083428/,[英] 奥斯丁 , 张玲 , 人民文学出版社 , 1993-7 , 13.00元,8.9,"( - 233507人评价 - )",所有现代言情小说的母体 -史记(全十册),https://book.douban.com/subject/1077847/,司马迁 , (索隐)司马贞,(正义)张守节 , 中华书局 , 1982-11 , 125.00,9.5,"( - 24996人评价 - )",史家之绝唱,无韵之离骚 -可能性的艺术,https://book.douban.com/subject/35819419/,刘瑜 ,, 广西师范大学出版社 , 2022-4 , 82.00元,9.2,"( - 41073人评价 - )", -悲惨世界(上中下),https://book.douban.com/subject/1205054/,[法] 雨果 , 李丹 , 人民文学出版社 , 1992-6 , 66.00元,9.1,"( - 63956人评价 - )",现实主义与浪漫主义的至高杰作 -始于极限,https://book.douban.com/subject/35966120/,[日] 上野千鹤子 , 曹逸冰 , 新星出版社 , 2022-9-20 , 59,9.0,"( - 71812人评价 - )", -台北人,https://book.douban.com/subject/5337248/,白先勇 ,, 广西师范大学出版社 , 2010-10 , 38.00元,9.0,"( - 74009人评价 - )",白先勇短篇小说集 -永恒的终结,https://book.douban.com/subject/25829693/,[美] 艾萨克·阿西莫夫 , 崔正男 , 江苏凤凰文艺出版社 , 2014-9 , 32.00元,9.1,"( - 47603人评价 - )",关于时间旅行的终极奥秘和恢宏构想 -诗经,https://book.douban.com/subject/1883245/,孔丘 编订 ,, 北京出版社 , 2006-7 , 19.90元,9.5,"( - 28876人评价 - )",思无邪 -刘擎西方现代思想讲义,https://book.douban.com/subject/35313227/,刘擎 ,, 新星出版社 , 2021-1 , 79.00元,9.2,"( - 36670人评价 - )", -孽子,https://book.douban.com/subject/5337254/,白先勇 ,, 广西师范大学出版社 , 2010.10 , 46.00元,9.2,"( - 47872人评价 - )",写给那一群, 在最深最深的黑夜里, 独自彷徨街头, 无所依归的孩子们 -太白金星有点烦,https://book.douban.com/subject/36328704/,马伯庸 ,, 湖南文艺出版社 , 2023-6 , 45.00,9.0,"( - 87402人评价 - )", -历史深处的忧虑,https://book.douban.com/subject/1027191/,林达 ,, 生活·读书·新知三联书店 , 1997-5 , 19.00元,9.0,"( - 45944人评价 - )",窥见美国社会的一扇窗 -神雕侠侣,https://book.douban.com/subject/1255624/,金庸 , 有1996年11月北平第4次印本 , 生活·读书·新知三联书店 , 1994-5 , 76.80元,8.9,"( - 101402人评价 - )",至情至性,情大于武 -上帝掷骰子吗,https://book.douban.com/subject/1467022/,曹天元 ,, 辽宁教育出版社 , 2006-1 , 32.00元,9.2,"( - 34886人评价 - )",量子物理史话 -美丽新世界,https://book.douban.com/subject/27002046/,【英】奥尔德斯·赫胥黎 , 陈超 , 上海译文出版社 , 2017-6 , 45.00元,9.2,"( - 57350人评价 - )", -一个叫欧维的男人决定去死,https://book.douban.com/subject/26672693/,[瑞典] 弗雷德里克·巴克曼 , 宁蒙 , 四川文艺出版社 , 2015-12 , 35.00元,9.1,"( - 68955人评价 - )",这个发生在瑞典的故事,如生命庆典般绚丽斑斓 -哭泣的骆驼,https://book.douban.com/subject/1029111/,三毛 ,, 哈尔滨出版社 , 2003-6 , 15.80元,9.0,"( - 57621人评价 - )",沙漠中寻常的生与死 -灿烂千阳,https://book.douban.com/subject/2143732/,[美] 卡勒德·胡赛尼 , 李继宏 , 上海人民出版社 , 2007-9 , 28.00元,8.9,"( - 122774人评价 - )",唯有希望与爱可以驱散阴霾 -唐诗三百首,https://book.douban.com/subject/1013267/,蘅塘退士 ,, 中华书局 , 1984-07-01 , 0.65,9.4,"( - 27247人评价 - )",熟读唐诗三百首,不会吟诗也会吟 -文学回忆录,https://book.douban.com/subject/20440644/,木心 口述 ,, 广西师范大学出版社 , 2013-1-10 , 98.00元,9.1,"( - 44550人评价 - )",木心留给世界的礼物 -四世同堂,https://book.douban.com/subject/3183775/,老舍 ,, 北京十月文艺出版社 , 2008-07 , 36.00元,9.4,"( - 40323人评价 - )",北平沦陷时代广大平民的悲惨遭遇 -美的历程,https://book.douban.com/subject/3410718/,李泽厚 ,, 生活·读书·新知三联书店 , 2009-7 , 43.00元,9.2,"( - 32363人评价 - )",中国美学经典之作 -窗边的小豆豆,https://book.douban.com/subject/1007914/,[日] 黑柳彻子 著 , 赵玉皎 , 南海出版公司 , 2003-1 , 20.00元,8.8,"( - 212049人评价 - )",真正懂孩子的教育经 -最好的告别,https://book.douban.com/subject/26576861/,[美] 阿图·葛文德(Atul Gawande) , 王一方 主编 , 浙江人民出版社 , 2015-7-31 , 54.90元,9.0,"( - 51157人评价 - )",关于衰老与死亡,你必须知道的常识 -人间词话,https://book.douban.com/subject/1203426/,王国维 ,, 上海古籍出版社 , 1998-12 , 9.80元,9.0,"( - 55412人评价 - )",以新眼光评旧文学 -绝叫,https://book.douban.com/subject/35031587/,[日] 叶真中显 , 林佩瑾 , 北京联合出版公司 , 2020-7 , 58.00元,8.9,"( - 104780人评价 - )", -呼兰河传,https://book.douban.com/subject/1060852/,萧红 ,, 百花文艺出版社 , 2005-01 , 19.00,9.0,"( - 84322人评价 - )",萧红的童年往事 -罪与罚,https://book.douban.com/subject/1858568/,[俄] 陀思妥耶夫斯基 , 岳麟 , 上海译文出版社 , 2006-8 , 23.00元,9.3,"( - 35657人评价 - )",描绘人内心的全部深度 -冬牧场,https://book.douban.com/subject/10522856/,李娟 ,, 新星出版社 , 2012-6 , 29.80元,9.1,"( - 39973人评价 - )",阿勒泰的精灵 -道德经,https://book.douban.com/subject/1059258/,黄元吉 ,, 陕西人民出版社 , 1996-10 , 4.50元,9.5,"( - 20549人评价 - )",中国历史上首部完整的哲学著作 -棋王·树王·孩子王,https://book.douban.com/subject/26734559/,阿城 ,, 江苏凤凰文艺出版社 , 2016-3-1 , 58.00,9.3,"( - 28834人评价 - )", -看见,https://book.douban.com/subject/20427187/,柴静 ,, 广西师范大学出版社 , 2013-1-1 , 39.80元,8.8,"( - 338320人评价 - )",在这里看见中国 -也许你该找个人聊聊,https://book.douban.com/subject/35481512/,[美]洛莉·戈特利布 , 张含笑 , 上海文化出版社 , 2021-7-28 , 68.00元,9.0,"( - 49878人评价 - )", -离开的,留下的,https://book.douban.com/subject/27104959/,[意] 埃莱娜·费兰特 , 陈英 , 人民文学出版社 , 2017-10 , 62.00元,8.9,"( - 75451人评价 - )",探索中年的虚无、困惑、野心和近乎残暴的爱 -浪潮之巅,https://book.douban.com/subject/6709783/,吴军 ,, 电子工业出版社 , 2011-8 , 55.00元,9.0,"( - 33731人评价 - )",了解IT领域的入门读物 diff --git a/book_data.xlsx b/book_data.xlsx index 114e8ce4ce8d2ae0473771a93905dd5467bde815..7942f4b4c0f6883c13bf77d30365fd047f4a4c78 100644 GIT binary patch delta 4790 zcmZ9QXEYq_)`n+@-Wfu4Vsz0$v{6T*4n{;D5khoECkD}pHi#Z|bfSle_F{CRM(-tw z5-qyqK#cGRWyHsF-gHn znmwY_kqD@VE3b2v%Gd1zUju4$y-(pb-qN!-oJ_CI_nmiL z?v4{3re`49F9|V|`dX-Qa$av@9$@e@%K_#>Mh{iqA9BNn;2FB-vIwWlNsU4v7%47Z_k=S<7uS# zT9qcZDPz~(60|u9!`_ZH|7c$59za#s zxVXH}X;)-{1p0Y)YPRrM~Xzt&y|q+kySQ-QAI29b?VUu&^=RHP4H_6_J%T#Z6SUh5YRY zzvkQL0TJV zh`s9D%IdzhD>*vd968(H-k4r<#lluxb}3riLlCZ%S+OP8OC{*n?c=c}H7D%02gmo_ zPPcS|v=v#-F7|nJeLngg69wie=WNikgq@Vw5t$qOI@t3{Jq*+cbtgf^grzieRYY5P z{o2dc6pls+*9-)YC3_NMc-D5e9){ca(^?AEa6%CWn%Fu9J#f?gwiL|?OX#y|@Wc0G z(nGXI&h#XZ`Lr-s_QODHKRbcqZHrqIFejpG?sx|6s(It0!BuoKR2eN5cGF{Fcn}DI zx9`3fuq*vhII*k$?IEhe$vIz}Hbr3QCubRE9w}be+X_Xe)^-HdUtc&N>x0^`5bW*6 zcLeb-2_+?_tx?mMvHoG);m`tA)|Uml68n9Z=4(V#$=%;Q)6m0%n-X+^5F6>oPXoJB zxOHjX%LK-WOAWI7=XP0Bh=yeJ+%Cnkoc{=a&0}Ub0!1cLg|cl+(aCAFCTQjP#+-5g z-Hh^9s`|7f$%==oeAR0*&PBHhebmp>e*Y`2{;#Eu0OBwa(H$RQZcF;2n>o3_!!RbZ zsXK}#;*bePcuWu#n*oz6z~5M$JB{2mLgl!DxFjnPHG1n!qAC@lzbqxz)9=*b>2K}1 zqkb)=d!Uu=hT_WHxA9k=pXKNYcM_N)Zi~?|enL?7^e)4qmbT+UD1o&6%N#>mV^2w{ z*OaevYs-yQpQ%vOSqwgtyr++LdRCble|0dzT83qvUJ^&E#8fT39({{2JSu$(m^O4* z2k(Lp&mJab=|%NgV~*T+i1gX$mLX6UbrbPp~nm+S(A=xLmU6Wtwpg5#L0xp9kJiSEgop0Dts z8JqC9=7>)EiQyglp4==&lxRd?{I~<8I;dT``lcOUS2}d^C^lT_h^5_Aft#wU~o zcH#o+U}g#%6F48qDqnF}rslRQ;h00Rgg-e? zY%U-%TI@4nihXqN3mG{0Os3D-U#P5~#RJ5mUaW&3ITxW1dY-|L7{mptDtvEUk$Wf0J$qa5oS58rXzPL z%{Pd@%$k5idr1$ZhX@oCIG@U)U)UUHut0tt+c%s=Tcw+4I<%dBo?x7ace``iTJ-sj z5u}?=xXh5Ps+hb+4#hG0k86Qo`l}`GXuNPUZFAC( zvQ=L76~k|(X{H69P)|?3ax1FuN`+jm)*dub91v!!!*@(xfPI=JP~=ri9R&-Y!R|ci zL*CQ(6k~nHy9`<|M!Mn!yE}SW{L=EP1WR%ldZvdE2 z0?o_|R#?R$a;E~GK-4mAk=wzdwJHA>^$hJPYnQ%u7o2nLMpqv-G^nC*`Ql1zG~}q5 zTT+>yGmkdq(Zq$)x7_%M+*_4K0x%wtr|CLCwD^(Vyi$CHAzLnJo`&8h@L0lA-@-#> ziE)2w=AyEyEC1jqg*ujsalRDop@NyE<0e$x_40*z&6;kAq9FR$5eW*mNO;)SZ>fUJ z7<17M(9VMG`@8EJdiQ^xr(iVhFs6BEafvE;=HIt_8Gr0l>pkc|OJwgN-@aR_Ha$sM z7lmj1T}WdjQL=T&G=T}XHE`wPVVwk686G2;%9Kn649sTZNdYg6AtZc}GD2|Kts?Im zOYq^XnlGOe3jF1KV2a5Oi7U%_=6Rp_#FSE6*@t%DuswtY75!+mtc_7;17BEO z+ASDn@#=BOqA&9&Z}EUtk=+Ey-z7p)GE6KC0kQCJZ)2;PS>AcJ7N{=^!Am{ zl1#pQyy|IVOrawcUH#(xP?)B0nGO?U!yVj>>W_SM-x$Rxe@MjC8!N1rJ=_;f-kuX!hmYKfeUw!~KuSFIFaUFxjij}qPt2XnD& zeE`Otigmu?Ht7E_Ad);dGvD;^csHV-$*^cKvn!dx>2#jjYbt@MNt!}Ne0ucl@vHvJ z*i>eRhVGYqSwArpyqpPO9;|h_nz+WmgZyZ_&4xmYwB#4$_Tz*Rx%UE8p?Y$A#-a^! zDDnr5#F_E)%w7}bhzk9h)&*jD^+~k}U~X)%V9A+`+UR?Qv^4a94^C{Fm1cl)tTBKn!fk6n8g--iAM!Y%xVhD^(QUq zHb#yP*!PKLVhlxjyug6xL|+@X|$ zo*6UY(GipT$sD|?Ke;kKctPA*Pf&IfqA)PWkayW<&A5HNr(CGj{(hX4z80) zRe5)8qS@AzN=2A6GnJBuemTQ=)~+IEloonP!h4GuSSsAemuHWF8(cJtvKIqwU;St$ z8}K}$-^ax8lbaX3NKWI7H{OO#8xRoiwvVOH&?Q07WpC3|rUy$ha;B(vWKqfI@QZb0 zC;R5la~cfikTBxKWg^|LctckuexS(U&k{>xDLYcR#pJ17HgQC-i%uE!mc71{l5k|| zYp63`quxXTx6RYAXob0>VD~IKdIBtUo;WV=iZCyQ7f0!~#3PX+9LG6dbkrF4Tu^*y zw2hap1?Xh!Tsk4crtu~J0QFWh*Lq&Fsf*ee_6|FO|DyDr+S_)v1K#qt2h@0^T@{Og zq$kjPsdO>k;V+4V-?ilHgxW&$VeD<6~N8xN{J6*wrh&pXrLQ2P_KJhW+s}~ttEmmy&f~Z5EDSshh*_bnR zAEV~k50+lUeujG|mZv=d<2kBAo|W=4=nG0KI+cX2E=Eal#-XMF*X$|XT&D2|{omPF z+aIkb9O8)AK~@F(<*hnXM|ECh6yp4EdRJ*<+Jq`UHkqZqUpu}Wm8GqJu`bY1%a7i? zyHuIT+#TQdaTrP?E{94ieXKDYli=l3b}v3X_9esJgpoJ*q9`pr$}{f4lL8hekkuZ? zIwaX&Dbk>Hsa~^BDx>@*#8$OOUN|phmY3rfdA*rA*QJwdBBx7IKi6F@EnW*rv>Ucq zzEaUiqyLqtnF6bBBYK0r$}%Mu8`}mltov+!A>I+8=f?#M-EToP*l_v==`5&x*l2vn z74JZG51*Gl-#839UoARjdk<@A|!&twZn;gtTprU6 z5@*Zn%a)u++gx>`qHL+ z8a6^un!NlNql38p+>wm#wD{fMZcD78R{^qByz1j_Y|1V3#$zfYi4Mx&oV=~PArvT4nnEbid1}1>*bS;Nn>=F# z0DPSuAU*w@Y>^_q&Q5w-Ks*rOKa9xuT@03`^G`qBA2>wz|8oGrKtW~z0O4WlgnS_K z_y0eQXb6-U55$5tgR=f(7Vsx^XGNz&`8fXG!8Xw^nF$C0jN$+94n}O~RVWW(9{b;B F{{oyR1it_P delta 14094 zcmY*=V{o8B(`~S^H}=N1v%$u8Hs;2*@x-=m+qUhEZQH#2zPG+x_nSXm)6=J?YHFsc z=ggdYq3{S$1bHd&Z)hMOAkZKmVO_BZmB2rvcAE{2boI|k0|o+u^3NLD7|7e(*g7y6 z*w`DI?=^|9!sUNo(d*o4q)NSS~wc??ATUra*hYgvm3INKlInK~* zM;zNR2?_;zU>J5p%quu_j)EdYnb)EW&(EoC*v71S!HB#@C1bED8RSEIGmW;O(u{rk zw=STQf*Iw&pCiN?CHoO)i3cy;$H@#_my+#|mlG$Q<{G~ETbyCt6Ue=Sq}DkvW$(tj38 z;*DmIiWLL|Ngp(x0vaEf^s;i$=7`(W)u;MhHVUQa3Sh5PX+*Q_r7jc|IkTr1G`;&a znQ3B=-b>zdr|V`zwt;3iFyI7xiDt1ese0(6exFD&1Jzb;| zZUL|7!NI}V-e0?eZ#Ld79v*L>ho8mmggX>l8{PkUAX{B;pTOW-_U6Whw_QXOtxYeNx4ZOUpzZ5m{O4=9C(y%S zO=!*kw!iVgpn5f?`?^B0l>jVso{52$>wc;66$9P89sb!}K^Fvk9-q3~sF9~+o_}?Q zle0TqeZ;8wJ#G*rp5Mj&9@JG~xNzZgt>&f@t~yoS$ZwE_rwyGb-Qu)t7y{(o6YMoNkZXRq*D$kj?WjyX=xo zp5lX@(1f}BIT!Z9m^+e-O7G`n^AkVd^|m+3@noah@%3`{1-=dBg37DBVAlIjkI**n zTy1?hzD;fvPj9z*08f`&S6N<<)z^*^0MyrQdAYlqU)45j6Hjv^qPP9;&)7fSZfxMA zFV=g{;aU6UckTwz1iB9N(*_lVOZ@)h=e3`dYi$`}7FNb_pQQ2ocQVQc67gv|FuL|O zJX-LmQY6?37iU&RaaqXZoepmFSW8LB-=`U4|s`%OJ%VhYM3NQ6ZS}p!GKSMrgfaEz&B=DK(UctTbKsb zDGXtXxaH60F&_Bx-P*LSW;pjSPNTNiR(551cQ;7!)%N{+|7pl0UWemPL~rTZPn#wa z%^#jzp<>r;h^(fM`eC}F$M4eb2Z!AoXz#Ad%h;B|$*SEnUvS<8;?JMmvcA--`KzJy zxn!}ocyHAO#Mv|C304TrfEHMKj6i{O()h`*FFUbs6QkIytp^%|A-KF4Y2ou#tQluo zHEMseoaytA5>BD6pv}maTs9X-U9-B%WDsanLg4W2^be{;c;r=Pd+lYQrYi+x7f}}d zmZ%sB&`IJOAtki2lW*EWrUqKcd6Iczh*ukZ7{I#Dnl!@TS5*E|0~!5-7(G#TBj zRrjMsGYeqoH3pEll-x#U_Qq;n!ee=9fDJ=1+ruMZqv)@A?qMV_mT-;Gan%#{^ifZ5 zGh;^$HtY1TIkglG3Yn3s^?pp*^)UEIus!W#rFKx5fO)eH0Ra(=6MWHX4Bn=#=?(Z% zI1Tg!rr&6;c0vhCMF}#6kfI495ehou!mJhCV=C&U>BgG;kYu!vsNjwK))i_3ehS0G zw;l{W$>d?}?hX{IX*=Zm=f0tR9HaruYQZZxlD1fy=S+k9_&P6bK~t5zCbhQb$ts4I zwi9sOGEl2Lz`v5|K=F#5d8auxWJKIui*R(H-YB~D2Z z%sWb}27_Re_GCgNxs^pSC^xI(>jaoNvFm+AByc%vt_*ct5&a|xFlpw8dFiPoxfSeA zgnG1#P}|?38JrCrWeV*+*(xM370(x)MONUVcJ>WsfCo*FkpTa&Q%(h{IVJx`1iuN# zPhrY+r9p;t!G!oRcXyfM6to$R$Ecfo@;nZ=KeJu&HHB<2Hqg%*Ci-Jy%NczpKAH0m zJO<VMel|2Ns*s{960(Q6gdf*j?I*RB8h%L*m~p6MZ!rS> zlfN7E!gVx27+-&rZE!-Zz0l*m>}hun$7J(Vyn|wr3(`l2@n=WKjm@6rJ;JoA#dtC#UJ=4XEc&H@C&VRvZBLb48mb{E;h?E2(c5ZZOIO%@477= z>_=9@Rh}CBL^oGPi*&u5&H`7H1_02)<2FJ1>21{F6n^4H(H0jw|0;BUJtCPSM)v_F zi$i0^@k-yb6=M`X)qR}6AuXXYVsG4E5a6|lXWD*nYwr?EXMd%2h@59E?!zWxj>Rdq zp4rfA6FV41_6xt^A|!b;I`|<_BnTNQ#9}qETYD3Cr-ZEk5*e#B<4`xq2b2UC4ETx? zIoJrX4USX-*F8Vo#~ZP%XoBny)+csI_hf6YSi!{bt$3KTuu;H8wQp}PJb7N_VA`bN{HQQeRH*!&ORGBsh2Y23iLGL zMcqKD<$+!P-LoyDFzj%j0fevTh)smJ35t-cX&#xT7G%rEwbkmwz-QsIKtVR^KtT}3 zLt}-buH3p7ON6M*=gjgSn?vZJBn{tCxFJOd1kdvP?0G(piIn+fUY9|zNAlg4&xaFy zI1^?p#1%VTOA0=1CtF6?+J~fQuwlA9FgJd(kNVqA7R{0*xx`y~1E5026KNEMW!)LI zy)mXdx?4i--$>5B?DY_R6M`35r4;5G;J~#?6969+rbBwHy^t{7Lo-XtTU=Blh{&=< zL~)>)AtW#+DSYJ=R*lR-X6~kHvR`*cD3Ng*r5w z5%qIyWq?iaxJEGAOnckZl?4gLUQwM+5n7W0YN^&Unu2y4JqFxJP!jU%)TR1!t9>n< zfAf9(X922vB}Iyf~6$#hNnJUZV~o~OA?7v+mTZ!0gH^UF_umjFk~v1?iNx?d}d9T zMKJRamE;vE34^fC;hJC|s|rYARekG$;nh(kc}N4;SSuQOsIqkwXr*IghMj^ zB#d`u@YAiA1B>XBFbjeb!C^7H#1R*xRZDu!T-eO2$UTgrKVMbOaI%iE^~&PR^x-UG z+0DQMned3}RW5l6_aQGr8gtDLTjHxo{)#U9u+zm_^?YOB8#lY{(U>69&$9`96KG_D z6Z}Qy`j?+?_(G`HtY(9PR@cCKA@yES_Xs^aXyfV_765r$bNksG%au#}bAgLBLUYLR zy)ahjvo15NBO8`&|9HJ8$yZKiq!Hs1;pdSBM{u3=cPvB><4B{dBj#b|afi@NY=xWi zUA3o~JTZ&vau(`Z{YG;ZH)V}Gor&$v6cJRo_z(&cmTb@r!DB^&h(IYw%N4iF$oRHv z7Swh96o7xYgNuhL%e)49j*)TaGOs>z;YOp46)H8M_ssh7ICokJt_)y}PBXVk!X ziX;Bfa)JbGu(`@er2dk>_MtFJ7CLE3;sE)x_}{{^#uO=M1I(v=Q0zPzsi>6F#(;G% z$!U+>{WWvW9o!0}NaaNp@roFC7A)JOcQvuXQXmZN2VXP$VMY4#r!kf=PW@?zK<;X+qTX!);RfY}t*_HUIBa&4S%Qyn1DU7W*juRP ztat1?x>RM(EN3amAT_Oi>)cSxns6F>j0C6!4J87MxQJf}QBi*QsLdB4t;~BFja|XV z7jWGZN>v2TOe&Gu|Fzb5zKp7Ju5L6L zS^CLRvP|%#9&IWF!a$IUYMG$wtWu8ln6%%pOz6D+TozycL;<=bJ2&Jzk?}lh0oytl zVX%_@?ICZjacri2=mb)gtP<@T%vvDyQx$@GDr>F$9FdkA`GS^69llq_7%&!k-RASl z!GASVa?z=_&xKCapdjwtutb`el_s%_4|$}L1yt>2jeSqlty}b5Pd@c`JmH!A?>N*A z$!s*p?eO1{XfE#rmT&V`FteB}6+P%-D~xt@O#PCHo8BWec_Y8ip6B5${5Z{8gj%q)DFI{MfBJvao)>q34NTAilZ|a?W3TGc%!Tj**ApBXN=toX6DBCNW={IK4}RYu#* zcHnQjSku*fP;!6=12l%9#3NmJXp9FnijivnjKyrr|Rb3DCGZct!xmrxceeUw`xt7h|{m@_oB?W!K9SNRNvXmfqT`R zC{Rzj%V0RItUV^m?%3ck8Yp)m(R%JokIvSBnWH=AH+QMQ0?Z_ba-To;6Oa!D8!jcY zH|e0=sr!JfgYEMzoX8ygz$Vp=#)jooD#_7=9D3|hUs&U#W5IN0Q8E_*wG*ziHA?D5 zOUHBpr4CH9&U)Do@cwn^Kx_{l87(gP{jzh!6PBzL7dQFW4wr9uOF1^}lC0*fhWzlmg}22;5+_oL}b>x^S5U1_LYfd&r&F;*Ly>{p|~ zP&GVp`tI>9IS;iNM|70EAksYYXbH+n_TGusJ)|6AY#+%wu1<&XYJC`)ohXIeMr!33 zOZ#RkbaOYfL^ufy4skb+oTNXMzm}U^WF=1VkUKnX7GM}9&E;kK*R?a=0B7z#F53bM zYM7o9snS*Epk|{8LcQ04buB2aa(4eD0VNA|+S+@)MksOe5E{+ib@jto2r+|P)6UiK zjhE?mz#*Rpl^IPE_HyKKPlCtcoBdfh9NF1*3-?^Hw=RvpX{+UYkxCrDYgor(DQC(9 zkH}9oY9ML)zJF_OM2Ph!8ALjMr$?<{0=y>bW}e=tlrzRO#Sw%e!Kjqy&%kk5Ch^)8 zc<{e6S1t@j3YH9?Sai87NE>ODWaRLQ*~SFOgHj)$7u{@N^6n*@LrFEJWR^)+(+`e? z)D8w`F-~zLSa4I_$%<+sLM(E=ictGW#CL^F1GKcaMkJoASC#FuVWH1SWBygOPmNUE z`kBB_z`PqPSJ6(I;E1J$Y%j6=Fk4PK&*We}L%`%esgF5t)?h>SNB~tY<|#1B%3;1m zO2~>-#cv)rZT$-UHRN-c4lcEve28)}Lr%;Ar9JWdY-Og>ccj@Mgen=flM{^a_S#y4 z3#|2vCiCqOJJP1$&T^5y%rqn)Q%d?6sJSonH0rFw&Lm91``q29E?Fi*UB4s{wc8!8(PzXWHjc$1t?! z0@{`E#@6a-%@k4lXzrX0`6?%p4PYzCA7n%6k#r%W&&vcqUQ+cUbAu8r0rOO)mCzc8 zDLE&`N8(Y?lJ09&ZQ#I8EI0sc>h+{##VU&|gJ!MnPF=WvtZpZ7b0$X;1ga+W} zHQ~k+LAr{at6X^pp5Ftjm$`8`aIuv;%ovep(an*W9$P#zBFAh#T7X> zn2_}S8V(=nx!Qa>Ji);#B%^?$V=y(l?h@vv`F728ak)nHW6bD7PU<+_isW7+jt~~> zUS?BTKXz?oG?}wFVDNZrJd|dFj!4+Ug#9KP|u(zhQld7P0|Nh>tY+^ zFRPAt-Be5b{xDiwc{5hWkboP3-FzHrmzU=OiNwmYr=~Lo#87oCPDGgP1$cvKx)a;` zlX3|ip5XDDeI=QOgN`Mj!xWa{mRBd4?y9p`hml)%)^CR4RM5*&O}d(+&O`HL8ZVB8 zdYZ$Jb!cxPEDPsP|H?;B7qyBn$f=&`E4PB=ID`B0fN2sqw1Z=ogRSJIRzNZqQDVKd z7Djw6^M`v zGkD{3Rm|xH(lf$LipNvU_i&Jo-cQX-S5-P2o^E%=Z_T>h9v_oPcLHQ}P%W$ba^=mN z5ldWpgQP|A8CL1Tb2>@FUg5!(g%*RPW`TKef5uprQ3vi5^p^UMh|a>gK!mfUk!hWT zRNn*uTfOT)UOy(w*%wrsF=uGBI5-dN#^*Vu<}N{6`tI~txw6RT#*sbdor#V5=L0W= zWNti}>S5?PlPB<|=aQI7V81as7bG&R8{?O2tCCWzki0)G2<+Vb9SV_-Ql>m%6dOa$ zJ%mlv)GhMFQWrH62)HGehYUP~*cOXkiLXQlItevr%BZp8T;6FbksC z@d{8frPE1uGJLSN)%2s&8@QqHDDJ_v=0Zn&=~ukv&f;L7s_0L&3Ss_L7}AQiJ^EX; zsB8L57FPmKQa<(ExeNFRtQZ=!w%0CJ@VMAMn?0p(X7M7Yy3~dN=z5U6Bh_Lsu^iHX zj(z(TDtR9|HkYm9;Uy`}dkU?*D~2;-&bXNXr(+|JU9QelEh)v`w_R(IybGg2L-K*T zY(^HM_4YZi!%VoqxOc##h`@2(BZ=l4eVaG&QxJmM_BC&#)B3E2FMpp zgwH9_BKBtAwBvu0yWB^GLh~ip%uDY9f14i_vr>47D%;hc1>kSPr&z9^Sy|Yp%axaP zy@kbuaHTUGkT^>-*eyd$FV?~zB07^oV=Pu$)#@tCQYB8dxX%ruOiL$}gmv|zV4o@s zH{CqNs6#FA2MG{l)9uetwI=dzt3nGLK;UJgbRDN>l!a|zq4Z&W!h_YhT9OlhEE7u3 zQqSAyzNqa;#ICjXp6b`Ok;lr~(O6f-HPrIXtlvpI#41#tL30XM+!Jzj(s8`@70WJ@ zC!|RX`E^M$+D4nJpW;Y5p}K}kbhX2%2oP1y@{^)JF4~Pbio`x{qiCjlBf0rc=AvkZ z(L+&V(^2UUQ{J2OA$IQ2>-aE%Yt%4%u{(_Ar)llu^;bdegv`%DJIJ*paU$Vl!6|** zYDP6ZRw1i<_<^f({`R^ANV5Tk@7GSyUQ8YDqn5J+tW$=8_|%A3+CCeHwsCc$t0Q%M zc>{JbKmM`RHF0qwSv3wtwpaEOoD`zVq6agfC~+do4-zkw;S>|Pi=T!7(o~SHBNvQ# zx@BX&o_g_zynwYgD9wEfo27DWsI-G1VZWTE*E$>9Sy|=4TO=YTFT$M^Ynz$_c|ywc ztZP_Ky*&Gxqay7al`rW_g8{8;@_@>Z zLkp?PhU&n;#tf-#sNQ~nL2&`?`Hb!pF`ccxFADi2GYIwP^oPA505?=)X@hN`_Am9G z{hzL&!wxqh&3*zRg^@+QC6AUpBWf!qkdgrF8}CXE9?!vEG~1meu<1GE!mbMy4wv1= zMMUj>(*P%|q5Qa|S)TbBz1VnB!^vZ5>txo=U{F;b!UCl35j!AwyF?5msC|_^?C`k` zU9e(?WIH&;Uj9xIRF+b1+g!L=1ylKr8~Cl;HYh=@TqpMsV^xQIa>4F0qWAN1*PqD& z-7s3k3j97yN(hw)dp+|`lD2&dyz}9H?+WzBkjUYpCH)uqcv*h>ujSkzZ9-*6W*1wC zSU$n_Sc2H)igmy{$C|KJ#@EGMxgNVff(;55kURUxk*j95!v@TU!$d@GBe`iY#}uVL=j z%*As505b$~^}jQ#I2``-M7W44{oe)HH-MKUBg$k6mkzL)XyRPut-L_M-f&z<|6U zYzKn;_3y8h>Z%1Va+e?TzvSxp->wTV`l$6^&{?5a$SX!bh0*!3ZPYY;CP@q{YWlHk zbAiHE{wbJ`7)Y+5k-1w8uDasZvX-7?q3J(x4~anUv6y8n$$I9T=z8!DR6RMsu#_OleVN;8lxAC?8M+dCHaZUV(}}o^0Vg>M<|l8jC&bJvnqg zyr9IOUDZ74={<+xLGLRytyL7vX3HV^r8Bn8H1%u>pPx}cXOLxE&|!IngQw{3*qlLf zN759Aa;e?^z%qi?6vl;P+na@tn7aN7J(X5+YGb$GJD3+yo~J`cWbHPOp~DqGEro_A`zAWxCDyr^Slw9E)no5d_HFrYElu%nen*?n(Pa;`sR=I5+leyuf+5vPDEyusv z6~sj~RK{EnR4ozh)80|4X4;7(v<2)ym^(8KdCz=VbX)X>pv+88%hl&l=NzP!Y>Ky= znC>OO_jEE~G@O)CHuZ<9ZwglP(lTwH65*x?;yY1+!I~I6RrPq_|28NF>oc z#5pVK5p1_b#vzj{5Ie<=%73;_3R??ZuC*xHyRUU_-4^8E1W~NbWjPhB7}(k7^!aVi zu7NSmmTq$HF>*V-_*7z{Doypl9ONq@PX0cX`CT`sn4+4H@EgM5bAg5u$b!_ecr1L z3wIeOYVTRB+*)H{)d-xn2!(VdtbKDynu;nN+%LF|A-_VlL@yGw`d5sjGi{wL;i8aw zVsJ(UNwtoUk~tKx2F`aaKiHaxsMk4s-a1q8A=1lfA)tk!aa`{ApO{`+Kh71Zbxlic z3|YU1*tzJuyzJx49_R0N_!>hbVoWJXj}+LHymMYzlsWG+X9H84XqO0A3yek+f)YC= zflMBpDdP0)dleTOojg9~TcTgK@3J<9^FK62TmWWg`xAHO;f&Cs zmMG|3_{f`!w$la-EGfB)MB~B6;5t17RKiMXm1l(BsKobR`3C-gcR1TCxqt%2We7RHtQO zf3Kr;n4?9p;)D`QLp#GGlbm;;f*$D@o_d`Z#$H-&5%3s*Kb6sn@D7V@nZhz%Ux;=q z!{x(GmxgXj_+zlmFhVqK@RhM3mf(oNfDrtLyxpo!Mr1K^VTF5dwM0Wi&5)7ea8!-> zRB0KkeDAPLlr~+>@>(_SbsDQgWg+?Ows)-0gsL!HdQp~gl%Q4P9DDCv#JV#)r%WV7 z`4oH|2g7-d>OF8snK^JdsAKl^J&FZU^}@vviP4OaOduga zs(*?H?H`Z8g0$i?9ssfOVC$Mc0j_ClrX_E+382_x{#}tz`j8;Ri*FgJYqm`pj%D3g zHQNi6yM_H=qEuA_`zZS9s#Ku0DKVThu)`BKEx`-__P5(1D&jX3{y%E{_(^Mq$%KFk zQ!-4<&E`>?S)bRr6M-m9&3IybCHq-mJ0zU8)k)L^%H91B1DU0AcQD*E3=Hn~ZWEE^ z7~tZK=8bm_kzHfM);n4{;b%nKO@7oNMLNC{no@$>V>u!_RV=ojNEJ%HS!Rm9ARbk( zO@1f_zNRPhc-8*gjD9NdBp7E-j9UvGj zxo4|4|L&6=zK&`YW&eI{|K`FA87xj7TI zMxvs$L$AiEOUG5QpRneP;FRi$2zx&S1_l!nRLq4p+{8ST(o>+f2k(H0r(VWYp%FJ% zVO5>fk@6w|wp$%@?CQno;pb2cOu%+IckMKpP$B1$gf- zb#khp^oAg2mt(9k;&z?nnkea7x*j2}Ek2KGfbib>R4|{GT`YeP*#KLnp~n`dA*#Vr z%-0d2xCDLzS5m|Px>h}}?fnaWzT$chMQHnhxzd*_w~urX4jXyj$PUx8eL!r1R~7=zRq5FvE;<4>m8 zsN-D-X;z(4IA>X_eOP~SkN`3JL~QGX^WK`Oq*Jp7aa@#BB@L0QrfVg#q zVe3adyPEyQH`7kaPtI6J#PZ&5aZl#<^rEm5#nsrqyEU3}XW4G6d<{rUW6M;%+;ZK~ zk1{-j+ETV1uCVgZv$pD{veeU7V<^1JiQC`)`0IzitfJN2p%T?{FaoPa#RB?oA9|*^ zoWfzF1O*cnbYqrL;fRx1WH`Eza`eV+WE@7Cnb&PTBC>GD7!*=r$lB8qY=3XzRmf$Pm(KLccq=zV zR+=LouOcBoA$GRG5dt`QzyG%1ft9TeKsx!zd*E5@hcQBDebHJrazxz!%SpQ8&88_M zoK^G^KdDF>=234eAe~Ekft11bn8+Cgp9Hs$O%bH5NZpS-lMtNq3!EAo1tgz`h z@!bfQUidOUM{#D=Joeq9U%5x}%alDe!tU=naCz#lW%1jsQ*Sdw82m$ zM7D5;Pg27>MFB7{sUc41mv|{Ouc4M-qGDS{= z?VG|igTl+|cvBVMZz5*b6_W^)0=6b(2pC4R3I*3LY78RTEm$`bP9 z!zX9o1+Wn9~z1o|7PqzoC1S&r_y4`@=H01M_eWZgNza!tk>qext7O=`&oCe@#}WV zIZct(NNf-T-f^{nlLQ60v66zRb+boy}JJJUUnncPv zP^j2unuM0>tWjrWfw8{5Hr|!`nsrh|lJxOShCI+?k&$d~Sb_{+KlZ4ofC{7af$aOC zFo0e}!`d)aRhb%Bypl_Czc1sbC+41l9(M676^etbdI$};~#U{+t?jS1>+;xCNWnnaCq)|_<) z-O&l$!U|F(78eGylquc2Jf;S=O`Wfr%{FZB{{EAJ>Y>WfUxM%*mz}|gaXUAeH~a3# z#=gi=+#|Mpt|dyilk-sqf#7GMA+9#gbSl?U5UTsKP7^Lm-~i+BWrl=++ME2U)W7{t zR1}9YrxW0j>_0%Z5}0=@U>@x?h&Q9Q8tzipL~<72mO7^bvV&_TbWnNi(>v#NZwHYe zkUtuZ2G|52O{Hvni;yy7&>L01nCC(5k?;!e)i`In*VV*zy9Mz(bY~iOE?;S5&yJ?t zvRz|(H*Yg6@T7EL6PR zXcb#H)PyzWB2H zE3rE`$PGMpjZQ3~P(wHpbV;bm*taM{BD4eRcN}D%;XkWRVcIqc$%BKK6!(_4R}#&> zn}tbOvf3hQCRC+_E*E@`1?};1T5M!@@0_KHP?#hP-`9LCb1*Io*Nt;@RNB9IFL)FI zZiuZyPXttAPBiaLpyl7!0d5iA9Gye3358~2%aO-7r*#Q;`Fp>ved6{Bp0XnKH!|Jv$xNoE zKSFo|gnJSkCT0FXEHX}sz9*M79sw5#Opy<~DjtIiN?}IXh3*=^Wm|(Z`2(wfux4{a^9o3M>ok*?(6jEOP(y_+zbqTnAetY zTvn-djEbldYpv4`#Ym8(tiox2)=Nl6Uf%yDcs~_h29T=iF>M+=X{SLfu@OS_dc60p zqzPDVpf~0s{s>~W-o|;J{Ce6ULYuX?s28|9Wlw@AEhR7*>OEhzGq_n2yfZK4XznFe zUq9-5R*Bjde`0Ka)LBJ21%J+AnoP&2QGDs@?K)s?eJp25)np87_oobeZRIMGRX=@A z%|wgX1yl&qLL;O^Uh;=P-{Fk!@xI`i3MdTKv~F=~gs3RX-fySBw5WcCeD`;IlhIn= zRVE^aVmD^fRJ+~%uhvI*op0Uyaa68(YwKh0qWwzu>-qC^a>M1C^|Z*5%lql|jqsHN z>4_h7Bum@N>+9O~tLgJDxP8s$YBLey`tFMG@``YkgW=aF!_(EL&eQYx7x@1cE*WCY zf`R`NF2!@=9{$JH6X9uq{@3A+zx!W@0fEH-byO4ng!zxe>AzaA_&Y-O|Ax{2zy+O( z7ym&__@A-=PyPgg^-m}EKds3ZDL(WE#gG5QY+uTYmHyL_VZecaApB3jKkEZ(%@aTK z1NXmaFMr^I3G&Co5n*fp2ZPgwTh0gy0z&c+hxETNG`~PVTrC+~Z0s%m*w|S7M~fye z1qy}+^8Yk!YNQ0|d6oY_&;JtO{4a2bK)f#z<$ouvAi@Q+5{w@uB70: + return True + else: + return False + self.connection.commit() + self.close() + + + def initialize_table(self): diff --git a/visualization.py b/visualization.py new file mode 100644 index 0000000..3259f3b --- /dev/null +++ b/visualization.py @@ -0,0 +1,152 @@ +import tkinter as tk +import sql +from tkinter import messagebox +from tkinter import ttk + +db = sql.BookDatabase(host='localhost', user='root', password='123456', database='xiaosuo', table_name='user') +db.initialize_table() + +db_data = sql.BookDatabase(host='localhost', user='root', password='123456', database='xiaosuo', table_name='books') +db_data.initialize_table() + +book_collection=[] +search="" + + +def on_login_button_click(): + username = username_entry.get() + password = password_entry.get() + if db.login(username, password): + print("登录成功!") + app.destroy() + # search_window = tk.Toplevel() + # search_window.title("搜索页面") + # + # # 创建搜索框 + # search_label = tk.Label(search_window, text="搜索:") + # search_label.pack(pady=(20, 0)) + # search_entry = tk.Entry(search_window, width=30) + # search_entry.pack() + # + # # 显示书籍集合数据 + # book_collection = db.get_book_list() + # show_book_collection(search_window, book_collection) + # # 运行新窗口 + show = tk.Tk() + show.title("数据显示页面") + show.geometry("600x400+200+100") + + # 创建搜索框 + # search_label = tk.Label(show, text="搜索:", pady=10) + # search_label.pack() + def serch_book(): + book_collection = db_data.get_book_list(search) + print("我搜索了:") + # 清空当前 Treeview + tree.delete(*tree.get_children()) + book_id = 1 + for book in book_collection: + print(type(book)) + tree.insert("", "end", text=book_id, values=( + book["name"], book["url"], book["star"], book["star_people"], book["author"], book["translater"], + book["publisher"], book["pub_year"], book["price"], book["comment"])) + book_id = book_id + 1 + search_button = tk.Button(show, text="搜索", command=serch_book, width=30, font=15) + search_button.pack() + search_entry = tk.Entry(show, width=30) + search=search_entry.get() + search_entry.pack() + + # 显示书籍集合数据 + book_collection = db_data.get_book_list() + tree = ttk.Treeview(show, columns=("name", "url", "star", "star_people","author", "translater","publisher","pub_year","price","comment")) + tree.heading("#0", text="序号") + tree.heading("name", text="书名") + tree.heading("url", text="链接地址") + tree.heading("star", text="评分") + tree.heading("star_people", text="评分人数") + tree.heading("author", text="作者") + tree.heading("translater", text="译者") + tree.heading("publisher", text="出版社") + tree.heading("pub_year", text="出版年份") + tree.heading("price", text="价格") + tree.heading("comment", text="评论") + + tree.column("#0", width=10) # 序号列 + tree.column("name", width=30) # 书名列 + tree.column("url", width=30) # 链接地址列 + tree.column("author", width=20) # 作者列 + tree.column("publisher", width=30) # 出版社列 + tree.column("pub_year", width=30) + tree.column("price", width=5) # 价格列 + tree.column("comment", width=30) + tree.column("star", width=30) # 评分列 + tree.column("star_people", width=30) # 评分人数列 + tree.column("translater", width=20) + + book_id=1 + for book in book_collection: + print(type(book)) + tree.insert("", "end", text=book_id, values=(book["name"], book["url"], book["star"], book["star_people"], book["author"], book["translater"], book["publisher"], book["pub_year"], book["price"], book["comment"])) + book_id=book_id+1 + # #布局管理器 + #tree.grid(row=1, column=0, columnspan=2) + # 使用水平滚动条 + tree.pack(fill="x") + + # 运行应用程序 + show.mainloop() + else: + messagebox.showinfo("登录失败", "用户名或密码错误") + +# 创建 Tkinter 应用程序 +app = tk.Tk() +app.title("登录界面") +app.geometry("500x450+400+100") + +# 创建用户名和密码输入框 +username_label = tk.Label(app, text="用户名",font=16) +username_label.pack(pady=(120,0)) +username_entry = tk.Entry(app,width=30) +username_entry.pack() + +password_label = tk.Label(app, text="密码",font=16) +password_label.pack() +password_entry = tk.Entry(app, show="*",width=30) +password_entry.pack() + +login_button = tk.Button(app, text="登录", command=on_login_button_click,width=15,font=15) +login_button.pack() + +# 运行应用程序 +app.mainloop() +# 数据显示页面 +def show_data(): + search_window = tk.Toplevel() + search_window.title("搜索页面") + + # 创建搜索框 + search_label = tk.Label(search_window, text="搜索:") + search_label.pack(pady=(20, 0)) + search_entry = tk.Entry(search_window, width=30) + search_entry.pack() + + # 显示书籍集合数据 + book_collection = db.get_book_list() + show_book_collection(search_window, book_collection) + # 运行新窗口 + search_window.mainloop() +def show_book_collection(window, book_collection): + tree = ttk.Treeview(window) + tree["columns"] = ("name", "author", "publisher", "price") + tree.heading("#0", text="ID") + tree.heading("name", text="书名") + tree.heading("author", text="作者") + tree.heading("publisher", text="出版社") + tree.heading("price", text="价格") + for book in book_collection: + tree.insert("", "end", text=book.id, values=(book.name, book.author, book.publisher, book.price)) + tree.pack() + window.mainloop() + +