diff --git a/代码项目程序/主程序.py b/代码项目程序/主程序.py new file mode 100644 index 0000000..d14de89 --- /dev/null +++ b/代码项目程序/主程序.py @@ -0,0 +1,447 @@ +from PySide2.QtWidgets import QApplication,QMessageBox,QLineEdit,QTableWidgetItem +from PySide2.QtWidgets import QFileDialog +from PySide2.QtUiTools import QUiLoader +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib +import sys +import os + +class Login():#登录界面窗口 + + def __init__(self): + self.ui = QUiLoader().load('login.ui') + self.ui.Btn_Login.clicked.connect(self.open_main) + self.worrycount=0#错误计数 + self.df=pd.read_excel('社区信息表 .xlsx',dtype=object) + self.pw=self.df[['电话','密码']] + + def open_main(self):#登录 + ID=self.ui.Login_User_Input.text() + PassWord=self.ui.Login_Pa_Input.text() + if ID in self.pw.values: + if ID=='admin' and PassWord==self.pw[self.pw['电话']==ID].iloc[0,1]: + self.w2= windowgly()#管理员登录 + self.w2.ui.show() + self.ui.close() + elif PassWord==self.pw[self.pw['电话']==ID].iloc[0,1]: + row=list(self.df[self.df['电话']==ID].index) + self.w2= windowjm(ID,row[0])#居民登录 + self.w2.ui.myself.insertRow(0) + self.w2.ui.myself.setItem(0,0, QTableWidgetItem(self.df.loc[row[0],'姓名'])) + self.w2.ui.myself.setItem(0,1, QTableWidgetItem(self.df.loc[row[0],'单元'])) + self.w2.ui.myself.setItem(0,2, QTableWidgetItem(self.df.loc[row[0],'楼栋'])) + self.w2.ui.myself.setItem(0,3, QTableWidgetItem(str(self.df.loc[row[0],'房间']))) + self.w2.ui.show() + self.ui.close() + QMessageBox.information(self.ui,'公告',self.df.loc[0,'单元']) + # 11714584364 + else: + #密码错误重试判断 + if self.worrycount<3: + self.worrycount+=1 + self.ui.Login_Pa_Input.clear() + self.ui.wgt.setText('密码错误,您还有{}次重试机会'.format(3-self.worrycount)) + print('>>>密码错误\n>>>您还有{}次重试机会'.format(3-self.worrycount)) + #重复的登录判断 + #self.open_main() + else: + print('>>>密码错误次数过多\n>>>请联系系统管理员\n>>>终端关闭') + a=self.df[(self.df['电话']==ID)].index + self.df.loc[a,'0还是1']=1 + self.df.to_excel('社区信息表 .xlsx',index=None) + QMessageBox.warning(self.ui,'密码错误次数过多','请联系系统管理员,终端关闭') + self.ui.close() + else: + print('>>>系统中没有此账号\n>>>请联系管理员') + self.ui.wgt.setText('系统中没有此账号,请联系管理员') + +class windowgly():#管理员窗口 + def __init__(self): + self.ui= QUiLoader().load('windowgly.ui') + self.row=0 + self.Things=pd.read_excel('社区物资表 .xlsx',dtype=object) + self.df=pd.read_excel('社区信息表 .xlsx',dtype=object) + self.xsj=pd.read_excel('打卡表.xlsx',dtype=object) + self.ui.Wang_GTgg.append(self.df.loc[0,'单元']) + self.ui.changekey.clicked.connect(self.changekey) + self.ui.Zhou_SJ1.clicked.connect(self.show_frozenusers) + self.ui.rechangekey.clicked.connect(self.rechangekey) + self.ui.newgg.clicked.connect(self.newgg) + self.ui.lookthings.clicked.connect(self.lookthings) + self.ui.changethings.clicked.connect(self.changethings) + self.ui.things.cellChanged.connect(self.newthings) + self.ui.Yang_XT1.clicked.connect(self.lookyang) + self.ui.Yang_XT2.clicked.connect(self.lookmj) + self.ui.Tu.clicked.connect(self.bar_show) + self.ui.daka1.clicked.connect(self.daka) + self.ui.nodaka1.clicked.connect(self.nodaka) + self.ui.in_information.clicked.connect(self.in_information) + self.ui.out_information.clicked.connect(self.out_information) + self.ui.changeuser.clicked.connect(self.changeuser) + self.ui.close1.clicked.connect(self.close) + + def changekey(self):#修改管理员密码 + Newkey1=self.ui.newkey1.text() + Newkey2=self.ui.newkey2.text() + if(Newkey1!=Newkey2): + QMessageBox.warning(self.ui,'两次输入不一致','请重新输入') + else: + self.df.loc[0,'密码']=Newkey1 + self.df.to_excel('社区信息表 .xlsx',index=None) + QMessageBox.information(self.ui,'修改成功','请重新登录') + self.w2=Login() + self.w2.ui.show() + self.ui.close() + + def show_frozenusers(self):#查看冻结账号 + for i in range(0,len(self.df)): + if self.df.loc[i,'0还是1']==1: + print('第%d个'%self.row) + self.ui.frozenu_sers.insertRow(self.row) + self.ui.frozenu_sers.setItem(self.row,0, QTableWidgetItem(self.df.loc[i,'姓名'])) + self.ui.frozenu_sers.setItem(self.row,1, QTableWidgetItem(self.df.loc[i,'电话'])) + self.row+=1 + self.ui.rechangekey.setEnabled(True) + self.ui.Zhou_SJ1.setEnabled(False) + + def rechangekey(self):#重置冻结账号密码 + for i in range(0,len(self.df)): + if self.df.loc[i,'0还是1']==1: + self.df.loc[i,'0还是1']=0 + self.df.loc[i,'密码']='123456' + self.ui.frozenu_sers.removeRow(0) + self.df.to_excel('社区信息表 .xlsx',index=None) + QMessageBox.information(self.ui,'重置成功','请继续下一步操作') + self.row=0 + self.ui.Zhou_SJ1.setEnabled(True) + self.ui.rechangekey.setEnabled(False) + + def newgg(self):#发布新的公告 + text=self.ui.Wang_GTnew.toPlainText() + self.ui.Wang_GTgg.clear() + self.ui.Wang_GTgg.append(text) + QMessageBox.information(self.ui,'修改成功','请继续下一步操作') + self.df.loc[0,'单元']=text + self.df.to_excel('社区信息表 .xlsx',index=None) + + def lookthings(self):#查看物资情况 + for i in range(0,len(self.Things)): + self.ui.things.insertRow(self.row) + self.ui.things.setItem(self.row,0, QTableWidgetItem(self.Things.loc[i,'大类'])) + self.ui.things.setItem(self.row,1, QTableWidgetItem(self.Things.loc[i,'类型'])) + self.ui.things.setItem(self.row,2, QTableWidgetItem(self.Things.loc[i,'具体'])) + self.ui.things.setItem(self.row,3, QTableWidgetItem(str(self.Things.loc[i,'数量']))) + self.ui.things.setItem(self.row,4, QTableWidgetItem(self.Things.loc[i,'单位'])) + self.row+=1 + self.row=0 + self.ui.lookthings.setEnabled(False) + + def newthings(self,x,y):#修改物资情况 + newthings=self.ui.things.item(x,y).text() + self.Things.iloc[x,y]=newthings + + def changethings(self):#确认修改物资情况 + self.Things.to_excel('社区物资表 .xlsx',index=None) + QMessageBox.information(self.ui,'修改成功','请继续下一步操作') + self.ui.lookthings.setEnabled(True) + + def lookyang(self):#查看阳性名单 + for i in list(self.df[self.df['核酸']=='阳'].index): + self.ui.Yangtable.insertRow(self.row) + yxt=self.df.loc[i,'单元']+self.df.loc[i,'楼栋']+str(self.df.loc[i,'房间']) + self.ui.Yangtable.setItem(self.row,0, QTableWidgetItem(self.df.loc[i,'姓名'])) + self.ui.Yangtable.setItem(self.row,1, QTableWidgetItem(yxt)) + self.ui.Yangtable.setItem(self.row,2, QTableWidgetItem(self.df.loc[i,'电话'])) + self.row+=1 + self.row=0 + print(1) + self.ui.Yang_XT1.setEnabled(False) + + def lookmj(self):#查看密接人员 + yxt=self.df[['姓名','单元','楼栋','房间','核酸','电话']] + str_value_list=[] + for row_index,row in yxt.iterrows(): + str1=str(row['单元']) + str2=str(row['楼栋']) + str3=str(row['房间']) + str_value=str1[0]+str2[0]+str3 + str_value_list.append(str_value) + yxt['编码']=str_value_list + yxt=yxt.set_index('编码') + yx=yxt[yxt['核酸']=='阳'] + list1=[i for i in yx.index] + yx=yx.set_index('姓名') + for i in list1: + for row_index,row in yxt.iterrows(): + if row_index[0:2]==i[0:2]: + self.ui.mjtable.insertRow(self.row) + yxtt=row['单元']+row['楼栋']+str(row['房间']) + self.ui.mjtable.setItem(self.row,0, QTableWidgetItem(row['姓名'])) + self.ui.mjtable.setItem(self.row,1, QTableWidgetItem(yxtt)) + self.ui.mjtable.setItem(self.row,2, QTableWidgetItem(row['电话'])) + self.row+=1 + self.row=0 + self.ui.Yang_XT2.setEnabled(False) + + def bar_show(self):#查看统计图 + yx=self.df[self.df['核酸']=='阳'] + list1=[i for i in yx.index] + yx=yx.set_index('姓名') + list2=[] + for i in list1: + for row_index,row in self.df.iterrows(): + if str(row_index)[0:2]==str(i)[0:2]: + list2.append(row) + df_mj=pd.DataFrame(list2) + matplotlib.rcParams['font.family']='simHei' + matplotlib.rcParams['axes.unicode_minus'] =False + dy_list=self.df['单元'].unique() + y1=[] + y2=[] + for i in dy_list: + y1.append(len(yx[yx['单元']==i])) + for i in dy_list: + y2.append(len(df_mj[df_mj['单元']==i])) + x = range((len(dy_list))) + p1=plt.bar(x, y1, width=0.2,color='red',label='阳性') + p2=plt.bar([i + 0.2 for i in x], y2, width=0.2, color='orange',label='密接') + plt.xticks([i + 0.1 for i in x], dy_list) + plt.bar_label(p1,label_type='edge') + plt.bar_label(p2,label_type='edge') + plt.ylabel('人数') + plt.xlabel('单元') + plt.title('小区阳性及密接统计') + plt.legend() + plt.show() + + def daka(self):#查看打卡情况 + for i in range(0,len(self.xsj)): + self.ui.daka2.insertRow(self.row) + self.ui.daka2.setItem(self.row,0, QTableWidgetItem(self.xsj.loc[i,'姓名'])) + self.ui.daka2.setItem(self.row,1, QTableWidgetItem(self.xsj.loc[i,'打卡情况'])) + self.ui.daka2.setItem(self.row,2, QTableWidgetItem(self.xsj.loc[i,'今日所在地'])) + self.ui.daka2.setItem(self.row,3, QTableWidgetItem(self.xsj.loc[i,'健康码状态'])) + self.ui.daka2.setItem(self.row,4, QTableWidgetItem(self.xsj.loc[i,'是否核酸'])) + self.ui.daka2.setItem(self.row,5, QTableWidgetItem(self.xsj.loc[i,'是否隔离'])) + self.row+=1 + self.row=0 + + def nodaka(self):#查看未打卡名单 + for i in range(0,len(self.xsj)): + if(self.xsj.loc[i,'打卡情况']=='无'): + self.ui.nodaka2.insertRow(self.row) + self.ui.nodaka2.setItem(self.row,0, QTableWidgetItem(self.xsj.loc[i,'姓名'])) + self.row+=1 + self.row=0 + + def in_information(self):#导入居民信息 + filePath, _ = QFileDialog.getOpenFileName( + self.ui,"选择你导入的文件", r"d:", "类型 (*.xlsx *.xls )") + in1=pd.read_excel(filePath,dtype=object) + #in1即为想要导入的文件,将它拼接上去再写入即可 + print(in1) + print(filePath) + QMessageBox.information(self.ui,'','导入成功') + + def out_information(self):#导出居民信息 + filePath, _ = QFileDialog.getSaveFileName( + self.ui,"导出居民信息",r"d:","类型 (*.xlsx)" ) + print(filePath) + self.df.to_excel(filePath) + QMessageBox.information(self.ui,'','导出成功') + + def changeuser(self):#切换账号 + choice = QMessageBox.question( + self.ui, + '确认', + '确定要切换账号吗?') + if choice == QMessageBox.Yes: + self.w2= Login() + self.w2.ui.show() + self.ui.close() + if choice == QMessageBox.No: + print('你选择了no') + + def close(self):#退出 + choice = QMessageBox.question( + self.ui, + '确认', + '真的要离开吗qaq?') + if choice == QMessageBox.Yes: + self.ui.close() + if choice == QMessageBox.No: + print('你选择了no') + +class windowjm():#居民端窗口 + def __init__(self,ID,index): + self.ui= QUiLoader().load('windowjm.ui') + self.id=ID + self.index=index + self.row=0 + self.Things=pd.read_excel('社区物资表 .xlsx',dtype=object) + self.df=pd.read_excel('社区信息表 .xlsx',dtype=object) + self.xsj=pd.read_excel('打卡表.xlsx',dtype=object) + self.applything=pd.read_excel('物资申请表.xlsx',dtype=object) + self.ui.changekey.clicked.connect(self.changekey) + self.ui.lookthings.clicked.connect(self.lookthings) + self.ui.addthings.clicked.connect(self.addthings) + self.ui.myself.cellChanged.connect(self.newmyself) + self.ui.changemyself.clicked.connect(self.changemyself) + self.ui.checkYXT.clicked.connect(self.checkYXT) + self.ui.delete2.clicked.connect(self.delete) + self.ui.sign.clicked.connect(self.sign) + self.ui.lookhistory.clicked.connect(self.history) + self.ui.changeuser.clicked.connect(self.changeuser) + self.ui.close1.clicked.connect(self.close) + self.ui.Wang_GTgg.append(self.df.loc[0,'单元']) + self.ui.province.setText('湖南') + self.ui.city.setText('长沙') + self.ui.area.setText('岳麓') + + def changekey(self):#修改密码 + Newkey1=self.ui.newkey1.text() + Newkey2=self.ui.newkey2.text() + row=self.index + if(Newkey1!=Newkey2): + QMessageBox.warning(self.ui,'两次输入不一致','请重新输入') + else: + self.df.loc[row,'密码']=Newkey1 + self.df.to_excel('社区信息表 .xlsx',index=None) + QMessageBox.information(self.ui,'修改成功','请重新登录') + self.w2=Login() + self.w2.ui.show() + self.ui.close() + + def lookthings(self):#查看物资情况 + for i in range(0,len(self.Things)): + self.ui.things.insertRow(self.row) + self.ui.things.setItem(self.row,0, QTableWidgetItem(self.Things.loc[i,'大类'])) + self.ui.things.setItem(self.row,1, QTableWidgetItem(self.Things.loc[i,'类型'])) + self.ui.things.setItem(self.row,2, QTableWidgetItem(self.Things.loc[i,'具体'])) + self.ui.things.setItem(self.row,3, QTableWidgetItem(str(self.Things.loc[i,'数量']))) + self.ui.things.setItem(self.row,4, QTableWidgetItem(self.Things.loc[i,'单位'])) + self.row+=1 + self.row=0 + print('lalal') + #self.ui.lookthings.setEnabled(False) + + def addthings(self):#增加申领物资 + self.ui.thingsadd.insertRow(self.row) + self.row+=1 + print(self.row) + + def delete(self):#删除申领物资 + row=self.ui.deleterow.text() + row=int(row)-1 + self.ui.thingsadd.removeRow(row) + self.row-=1 + print(row) + + def checkYXT(self):#确认申领取物资ID(电话号码/账号),df(社区物资表),df1(物资申请表),yxt(社区信息表) + yxt_dict={}; ID=self.id; df=self.Things + df1=self.applything; yxt=self.df + row=self.ui.thingsadd.rowCount() + for x in range(row): + key=self.ui.thingsadd.item(x,0).text() + value=self.ui.thingsadd.item(x,1).text() + yxt_dict[key]=value + print(yxt_dict) + list1=[] + dict2={} + for key,value in yxt_dict.items(): + for row_index, row in df.iterrows(): + if row['具体']==key: + dict1=dict(row) + df.loc[row_index,'数量']=int(df.loc[row_index,'数量'])-int(value) + dict1['数量']=value + dict1['电话']=ID + list1.append(dict1) + break + df2=pd.DataFrame(list1) + df=df.set_index('大类') + df.to_excel('社区物资表 .xlsx') + df1=df1.append(df2,ignore_index=True) + for row_index,row in yxt.iterrows(): + dict2[row['姓名']]=row['电话'] + for i in df1.index: + for key,value in dict2.items(): + if value==str(df1.loc[i,'电话']): + df1.loc[i,'姓名']=key + df1=df1.set_index('姓名') + df1.to_excel('物资申请表.xlsx') + yxt_dict.clear() + print(yxt_dict) + QMessageBox.about(self.ui,'申请成功','请等待管理员审核') + + def history(self):#df1(物资申请表) + ID=self.id; df1=self.applything + for row_index ,row in df1.iterrows(): + if row['电话']==ID: + self.ui.thingshistory.insertRow(self.row) + self.ui.thingshistory.setItem(self.row,0, QTableWidgetItem(row['具体'])) + self.ui.thingshistory.setItem(self.row,1, QTableWidgetItem(str(row['数量']))) + self.row+=1 + print(row['具体'],row['数量']) # + self.row=0 + + def newmyself(self,x,y):#读取修改的个人信息 + newmyself=self.ui.myself.item(x,y).text() + if(y==0): + self.df.loc[self.index,'姓名']=newmyself + elif(y==1): + self.df.loc[self.index,'单元']=newmyself + elif(y==2): + self.df.loc[self.index,'楼栋']=newmyself + else: + self.df.loc[self.index,'房间']=int(newmyself) + print(newmyself) + + def changemyself(self):#确认修改个人信息 + self.df.to_excel('社区信息表 .xlsx',index=None) + QMessageBox.information(self.ui,'修改成功','请继续下一步操作') + + def sign(self):#打卡 + adress=self.ui.province.text()+'省'+self.ui.city.text()+'市'+self.ui.area.text()+'区' + adress=adress+self.ui.detail.text() + jkm=self.ui.jkm.checkedButton().text() + hs=self.ui.hs.checkedButton().text() + gl=self.ui.geli.checkedButton().text() + self.xsj.loc[self.index-1,'打卡情况']='Yes' + self.xsj.loc[self.index-1,'今日所在地']=adress + self.xsj.loc[self.index-1,'健康码状态']=jkm + self.xsj.loc[self.index-1,'是否核酸']=hs + self.xsj.loc[self.index-1,'是否隔离']=gl + print(adress,jkm,hs,gl) + self.xsj.to_excel('打卡表.xlsx',index=None) + QMessageBox.about(self.ui,'','您已完成今日打卡') + + def changeuser(self):#切换账号 + choice = QMessageBox.question( + self.ui, + '确认', + '确定要切换账号吗?') + if choice == QMessageBox.Yes: + self.w2= Login() + self.w2.ui.show() + self.ui.close() + if choice == QMessageBox.No: + print('你选择了no') + + def close(self):#退出 + choice = QMessageBox.question( + self.ui, + '确认', + '真的要离开吗qaq?') + if choice == QMessageBox.Yes: + self.ui.close() + if choice == QMessageBox.No: + print('你选择了no') + +if __name__ == '__main__': + app = QApplication.instance() + if app is None: + app = QApplication(sys.argv) + zp = Login() + zp.ui.show() + sys.exit(app.exec_())