![數(shù)據(jù)庫(kù)工資管理系統(tǒng)報(bào)告和代碼大全樣本_第1頁(yè)](http://file4.renrendoc.com/view11/M00/03/2A/wKhkGWX7f1OAT-DmAACNFBofB5k756.jpg)
![數(shù)據(jù)庫(kù)工資管理系統(tǒng)報(bào)告和代碼大全樣本_第2頁(yè)](http://file4.renrendoc.com/view11/M00/03/2A/wKhkGWX7f1OAT-DmAACNFBofB5k7562.jpg)
![數(shù)據(jù)庫(kù)工資管理系統(tǒng)報(bào)告和代碼大全樣本_第3頁(yè)](http://file4.renrendoc.com/view11/M00/03/2A/wKhkGWX7f1OAT-DmAACNFBofB5k7563.jpg)
![數(shù)據(jù)庫(kù)工資管理系統(tǒng)報(bào)告和代碼大全樣本_第4頁(yè)](http://file4.renrendoc.com/view11/M00/03/2A/wKhkGWX7f1OAT-DmAACNFBofB5k7564.jpg)
![數(shù)據(jù)庫(kù)工資管理系統(tǒng)報(bào)告和代碼大全樣本_第5頁(yè)](http://file4.renrendoc.com/view11/M00/03/2A/wKhkGWX7f1OAT-DmAACNFBofB5k7565.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)原理及應(yīng)用課程設(shè)計(jì)報(bào)告題目:工資管理系統(tǒng)所在學(xué)院:信息工程學(xué)院班級(jí):學(xué)號(hào):姓名:指引教師:1月2日目錄概述二、需求分析三、概念設(shè)計(jì)四、邏輯設(shè)計(jì)五、系統(tǒng)實(shí)現(xiàn)六、小結(jié)一、概述在工資管理中,需要從公司管理方式以及實(shí)際狀況中提取有關(guān)信息,以反映工資管理狀況。老式手工操作方式,易發(fā)生數(shù)據(jù)丟失,記錄錯(cuò)誤,勞動(dòng)強(qiáng)度高,且速度慢。使用計(jì)算機(jī)可以高速,快捷地完畢以上工作。避免重復(fù)勞動(dòng),規(guī)范工資管理行為,從而提高了管理效率和水平。讓人們效率大大提高.不難想象,正是資訊迅速發(fā)展使得人們從過(guò)去繁復(fù)手工勞作中得以解脫,從而使這種服務(wù)在當(dāng)前才也許迅速普及。同步,編寫(xiě)一套完整工資管理系統(tǒng)任務(wù)就顯得尤為重要。本課程設(shè)計(jì)共分為四大模塊:1.系統(tǒng)數(shù)據(jù)初始化2.工基本信息數(shù)據(jù)輸入、修改、刪除;3.員工個(gè)人信息及工資表查詢(xún);4,員工工資計(jì)算;二、需求分析本系統(tǒng)重要用于員工基本信息管理,對(duì)員工以及其她信息添加、修改、刪除、查詢(xún)等基本操作。對(duì)于數(shù)據(jù)庫(kù)保護(hù)有數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)功能。針對(duì)這些規(guī)定,設(shè)計(jì)本月工資信息管理系統(tǒng)。該系統(tǒng)重要涉及職工信息、工資級(jí)別和工資金額、公司福利表等。=1\*GB1⒈員工基本狀況涉及員工號(hào)、員工姓名、性別、所在部門(mén)、工資級(jí)別、工資級(jí)別等。2.工資級(jí)別和工資金額涉及工資級(jí)別、工資額。3.公司部門(mén)及工作崗位信息涉及部門(mén)名稱(chēng)、工作崗位名稱(chēng)、工作崗位工資等。4.工齡和工資金額涉及工齡及相應(yīng)工資額。5.公司福利表涉及福利名稱(chēng)、福利值。本系統(tǒng)概念設(shè)計(jì)思想:1.對(duì)公司軟硬件調(diào)查,從實(shí)際環(huán)境出發(fā),以便充分運(yùn)用公司當(dāng)前資源,提高系統(tǒng)開(kāi)發(fā)水平和應(yīng)用效果。2.理解公司需要及有關(guān)方面規(guī)定,依照需要做出符合規(guī)定軟件,并達(dá)到操作過(guò)程中直觀(guān)、以便、實(shí)用、安全等規(guī)定。3.將系統(tǒng)按模塊分工到人,提高效率,且模塊化設(shè)計(jì)便于系統(tǒng)功能各種組合和修改及日后維護(hù)。4.系統(tǒng)應(yīng)具備數(shù)據(jù)庫(kù)維護(hù)功能,及時(shí)依照顧客需求進(jìn)行數(shù)據(jù)添加、刪除、修改等操作。工資管理系統(tǒng)工資管理系統(tǒng)員工管理模塊考勤管理模塊津貼管理模塊工資生成模塊系統(tǒng)模塊員工管理模塊考勤管理模塊津貼管理模塊工資生成模塊系統(tǒng)模塊圖1.1系統(tǒng)功能模塊圖數(shù)據(jù)庫(kù)操作數(shù)據(jù)庫(kù)操作操作數(shù)據(jù)系統(tǒng)操作工資信息考勤信息進(jìn)入基本界面職工信息津貼管理圖2.1第一層數(shù)據(jù)流圖修改職工信息修改職工信息刪除職工記錄輸入職工基本信息職工表添加操作修改操作刪除操作顧客查詢(xún)操作職工號(hào)修改工資信息修改工資信息刪除工資信息輸入工資基本信息工資表添加操作修改操作刪除操作查詢(xún)操作圖2.3工資信息載入修改考勤信息修改考勤信息刪除考勤信息輸入考勤基本信息考勤表添加操作修改操作刪除操作查詢(xún)操作顧客圖2.4考勤信息載入修改津貼信息修改津貼信息刪除津貼信息輸入津貼基本信息津貼表添加操作修改操作刪除操作查詢(xún)操作顧客圖2.5津貼信息載入職工管理員進(jìn)入系統(tǒng)職工管理員進(jìn)入系統(tǒng) 進(jìn)入員工(工資,考勤,津貼)表進(jìn)入員工(工資,考勤,津貼)表津貼表職工表津貼表職工表考勤表工資表考勤表工資表進(jìn)行錄入,修改,刪除,查詢(xún)操作進(jìn)行錄入,修改,刪除,查詢(xún)操作圖2.6信息查詢(xún)及管理流程圖三、概念設(shè)計(jì)分析前面系統(tǒng)功能規(guī)定,需要一種表來(lái)存儲(chǔ)和管理員工信息,使系統(tǒng)可以接受員工原始各項(xiàng)數(shù)據(jù),以實(shí)現(xiàn)數(shù)據(jù)錄入、查詢(xún)或記錄員工信息等功能。員工是本系統(tǒng)第一種實(shí)體。為了能實(shí)現(xiàn)查詢(xún)和記錄部門(mén)內(nèi)員工狀況等功能,必要有一種表來(lái)存儲(chǔ)和管理所有部門(mén)信息。部門(mén)是本系統(tǒng)第二個(gè)實(shí)體。工資是以員工工作狀況來(lái)制定。需要建立一種表來(lái)記錄各種工資、津貼、扣款信息。它重要為各種查詢(xún)和記錄功能提供工資數(shù)據(jù)。工資是第3個(gè)實(shí)體。據(jù)此可以繪出工資管理系統(tǒng)數(shù)據(jù)庫(kù)E-R圖如下:部門(mén)部門(mén)1工作工作N獲得工資員工MM1獲得工資員工實(shí)體屬性列表如下:實(shí)體屬性員工工號(hào)姓名性別年齡籍貫身份證號(hào)婚姻狀況學(xué)歷部門(mén)名稱(chēng)工種工齡職務(wù)級(jí)別部門(mén)部門(mén)名稱(chēng)部門(mén)負(fù)責(zé)人部門(mén)人數(shù)工資工號(hào)工資年月崗位工資崗位補(bǔ)貼出勤天數(shù)加班工時(shí)加班天數(shù)加班類(lèi)別加班工資病假扣款事假扣款其她扣款應(yīng)發(fā)工資實(shí)發(fā)工資四、邏輯設(shè)計(jì)將數(shù)據(jù)庫(kù)概念模型轉(zhuǎn)換為關(guān)系模型:實(shí)體轉(zhuǎn)換成關(guān)系模式有:?jiǎn)T工(工號(hào),姓名,性別,年齡,籍貫,身份證號(hào),婚姻狀況,學(xué)歷,部門(mén)名稱(chēng),工種,工齡,職務(wù)級(jí)別)部門(mén)(部門(mén)編號(hào),部門(mén)名稱(chēng),部門(mén)負(fù)責(zé)人,部門(mén)人數(shù))獲得(工號(hào),姓名)工資(工號(hào),工資年月,崗位工資,崗位補(bǔ)貼,出勤天數(shù),加班工時(shí),加班工資,加班天數(shù),加班類(lèi)別,病假扣除,事假扣除,其他扣除,應(yīng)發(fā)工資,實(shí)發(fā)工資)由于,員工與工資是1:N關(guān)系,因此各關(guān)系模式為:?jiǎn)T工(工號(hào),姓名,性別,年齡,籍貫,身份證號(hào),婚姻狀況,學(xué)歷,部門(mén)名稱(chēng),工種,工齡,職務(wù)級(jí)別)部門(mén)(部門(mén)名稱(chēng),部門(mén)負(fù)責(zé)人,部門(mén)人數(shù))工資(工號(hào),工資年月,崗位工資,崗位補(bǔ)貼,出勤天數(shù),加班工時(shí),加班工資,加班天數(shù),加班類(lèi)別,病假扣除,事假扣除,其他扣除,應(yīng)發(fā)工資,實(shí)發(fā)工資)帶下劃線(xiàn)屬性為各關(guān)系模式外碼,字體為粗體屬性為各關(guān)系模式主碼。關(guān)系規(guī)范式:工資管理系統(tǒng)∈1NF每個(gè)屬性均不可再分 系統(tǒng)實(shí)現(xiàn)5界面截圖5.1主界面5.2登錄界面5.3管理員管理工資界面5.4信息錄入,修改,刪除,查詢(xún)界面5.5職工信息查詢(xún)界面5.6職工密碼修改界面小結(jié)通過(guò)這次課程設(shè)計(jì)實(shí)驗(yàn),我發(fā)現(xiàn)自己對(duì)數(shù)據(jù)庫(kù)課程興趣有了很大提高,并且對(duì)課本知識(shí)更加理解并有了一定掌握,通過(guò)實(shí)驗(yàn)我懂得了如何創(chuàng)立索引、視圖、存儲(chǔ)過(guò)程以及觸發(fā)器。此前不懂為什么要?jiǎng)?chuàng)立觸發(fā)器、視圖等,當(dāng)前終于懂得它們長(zhǎng)處了。在自己沒(méi)做數(shù)據(jù)庫(kù)課程設(shè)計(jì)此前,總是覺(jué)得自己什么都不懂什么都不會(huì),但是當(dāng)前做出來(lái)了,因此我覺(jué)得自己還是有能力做某些實(shí)際操作方面東西。我相信后來(lái)通過(guò)自己自學(xué)其他課程,我一定會(huì)做出一種更好數(shù)據(jù)庫(kù)通過(guò)課程設(shè)計(jì)讓我有機(jī)會(huì)把知識(shí)學(xué)以至用,而不單是停留在理論基本上,為后來(lái)學(xué)習(xí)和工作提供了寶貴經(jīng)驗(yàn),打下了堅(jiān)實(shí)基本,雖然課程設(shè)計(jì)時(shí)間短暫,但對(duì)我來(lái)說(shuō)過(guò)很充實(shí),更重要是學(xué)到了諸多課本上沒(méi)有東西,提高了自己動(dòng)手能力.在此過(guò)程中又學(xué)到了許多未知代碼,大大充實(shí)了自己知識(shí).數(shù)據(jù)庫(kù)代碼CREATEDATABASE工資管理庫(kù)ONPRIMARY(NAME=工資管理庫(kù),FILENAME='D:\工資管理庫(kù)_data.mdf',SIZE=4MB,MAXSIZE=6MB,FILEGROWTH=2MB)LOGON(NAME='工資管理庫(kù)_log',F(xiàn)ILENAME='D:\工資管理庫(kù).ldf',SIZE=1MB,MAXSIZE=25MB,FILEGROWTH=10%)createtable部門(mén)( 部門(mén)名稱(chēng)CHAR(50)NOTNULLprimarykey, 部門(mén)負(fù)責(zé)人CHAR(50)NOTNULL,部門(mén)人數(shù)CHAR(50));createtable員工(工號(hào)CHAR(50)NOTNULLprimarykey,姓名CHAR(50)NOTNULL,性別CHAR(2)DEFAULT'男'CHECK(性別IN('男','女')),年齡CHAR(10)NOTNULL,籍貫VARCHAR(50)NOTNULL,身份證號(hào)CHAR(50)UNIQUENOTNULL,婚姻狀況CHAR(50),學(xué)歷CHAR(50),部門(mén)名稱(chēng)CHAR(50)NOTNULL,工種CHAR(50),工齡CHAR(4)NOTNULL,職務(wù)級(jí)別CHAR(50));CREATETABLE工資(工號(hào)char(50)notnullprimarykey,工資年月char(50)notnull,崗位工資decimalnotnull,崗位補(bǔ)貼decimal,出勤天數(shù)decimalnotnull,加班工時(shí)decimal,加班工資decimal,加班天數(shù)decimal,加班類(lèi)別char(50),病假扣款decimal,事假扣款decimal,其她扣款decimal,應(yīng)發(fā)工資decimal,實(shí)發(fā)工資decimalnotnull,foreignkey(工號(hào))references員工(工號(hào)));altertable工資addconstraintCK_gonghocheck(工號(hào)>0);createtable系統(tǒng)顧客(顧客名char(50)primarykey,顧客權(quán)限char(50),顧客密碼char(10),)createtable工齡工資(工齡char(4)primarykey,工齡工資float(8)notnull);createtable員工登陸密碼(工號(hào)CHAR(50)primarykey,密碼char(6),foreignkey(工號(hào))references員工(工號(hào)));altertable員工登陸密碼addconstraintCK_gonghcheck(工號(hào)>0);(三)視圖(1)查詢(xún)員工工資狀況建立一種視圖,反映員工姓名及工資狀況。CREATEVIEW員工_工資ASSELECT員工.姓名,工資.*FROM員工,工資WHERE員工.工號(hào)=工資.工號(hào)(四)存儲(chǔ)過(guò)程(1)指定員工工資狀況查詢(xún)定義一種名為stsffCost存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程以以工資年月(@staffgongzi)、出勤天數(shù)(@staffchuqin)、加班工資(@staffjiaban)、應(yīng)發(fā)工資(@staffying)、實(shí)發(fā)工資(@staffshi)為輸入?yún)?shù)返回指定員工工資信息存儲(chǔ)過(guò)程。stsffCost代碼如下:CREATEPROCEDUREstaffCost@staffgongzidecimal,@staffchuqindecimal,@staffjiabandecimal,@staffyingdecimal,@staffshidecimalASSELECT*FROM工資WHERE工資年月=@staffgongziAND出勤天數(shù)=@staffchuqinAND加班工資=@staffjiabanAND應(yīng)發(fā)工資=@staffyingAND實(shí)發(fā)工資=@staffshiGO(2)指定范疇員工信息查詢(xún)。以員工工號(hào)、部門(mén)編號(hào)為輸入?yún)?shù)返回指定員工基本信息存儲(chǔ)過(guò)程,規(guī)定輸入某些員工信息查詢(xún)員工所有信息。定義一種名為stsffInfo存儲(chǔ)過(guò)程,該存儲(chǔ)過(guò)程以員工工號(hào)(@staffNum)、部門(mén)編號(hào)(@bmNum)作為輸入?yún)?shù),存儲(chǔ)過(guò)程返回查詢(xún)到成果集。satffInfo定義代碼如下:CREATEPROCEDUREstaffInfo@staffNumVARCHAR(50)='%',@bmNumVARCHAR(50)='%'ASSELECT*FROM員工,部門(mén)WHERE員工.部門(mén)名稱(chēng)=部門(mén).部門(mén)名稱(chēng)AND((員工.工號(hào)LIKE@staffNumVARCHAR(50)+'%')AND(部門(mén)編號(hào)LIKE@bmNumVARCHAR(50)+'%'))GO(3)記錄指定年份各部門(mén)每月份工資總額。以年份為輸入?yún)?shù),以總工資金額為輸出參數(shù),產(chǎn)生該年度12個(gè)月份每部門(mén)工資記錄存儲(chǔ)過(guò)程。定義該存儲(chǔ)過(guò)程名為bmMonhSum,輸入?yún)?shù)為@ThisYear,實(shí)當(dāng)代碼如下:CREATEPROCEDUREbmMonthSum@ThisYearCHAR(10)ASSELECTDATEPART(MM,工資年月)AS員工工資月份,SUM(實(shí)發(fā)工資)AS部門(mén)人數(shù)FROM員工,工資,部門(mén)WHERE員工.工號(hào)=工資.工號(hào)AND員工.部門(mén)名稱(chēng)=部門(mén).部門(mén)名稱(chēng)ANDDATEPART(YYYY,工資年月)=@ThisYearGROUPBYDATEPART(MM,工資年月)GO(五)觸發(fā)器(1)核心操作,在工資表里添加一條新記錄,實(shí)發(fā)工資會(huì)自動(dòng)更新新數(shù)據(jù)。定義這個(gè)觸發(fā)器名稱(chēng)為insert_工資。代碼如下:createtriggerinsert_工資on工資forinsertasdeclare@ichar(20)declare@bbintset@i=casewhen@bb=0001then'實(shí)發(fā)工資'when@bb=0002then'實(shí)發(fā)工資'endprint@i(2)員工新調(diào)入進(jìn)行員工新調(diào)入操作是在員工信息表中添加一條新記錄,可覺(jué)得員工信息表設(shè)計(jì)一種Insert觸發(fā)器,當(dāng)員工信息表執(zhí)行Insert操作后自動(dòng)更改出部門(mén)信息表相應(yīng)記錄數(shù)據(jù)。定義這個(gè)觸發(fā)器名稱(chēng)為staff_insert。其代碼如下:CREATETRIGGERstaff_insertON員工FORINSERTASIF(SELECTCOUNT(*)FROM部門(mén),inserted,工資WHERE部門(mén).部門(mén)人數(shù)=inserted.部門(mén)人數(shù)AND工資.工號(hào)=inserted.工號(hào))=0ROLLBACKTRANSACTIONGO(3)員工調(diào)出進(jìn)行員工調(diào)出操作是在員工信息表中刪除該員工記錄,可覺(jué)得員工信息表設(shè)計(jì)一種Delete觸發(fā)器,當(dāng)員工信息表執(zhí)行Delete操作后,工資表、部門(mén)表中記錄也將所有刪除。定義這個(gè)觸發(fā)器名稱(chēng)為staff_delete。其實(shí)當(dāng)代碼如下:CREATETRIGGERstaff_deleteON員工FORDELETEASSELECTCOUNT(*)FROM部門(mén),工資,deletedWHERE部門(mén).部門(mén)人數(shù)=deleted.部門(mén)人數(shù)AND工資.工號(hào)=deleted.工號(hào)GO(4)員工內(nèi)部調(diào)動(dòng)為員工表設(shè)計(jì)一種名為staff_updateUPDATE觸發(fā)器,當(dāng)系統(tǒng)對(duì)員工表進(jìn)行UPDATE操作后,將會(huì)自動(dòng)觸發(fā)它。該觸發(fā)器將相應(yīng)記錄部門(mén)人數(shù)、部門(mén)名稱(chēng)、工資更新。下面是client_update觸發(fā)器定義代碼;CREATETRIGGERstaff_updateON員工FORUPDATEASSELECTCOUNT(*)FROMupdated,部門(mén)WHERE部門(mén).部門(mén)名稱(chēng)=updated.部門(mén)名稱(chēng)GO(六)索引為提高檢索性能,為表創(chuàng)立符合索引,其索引項(xiàng)為工號(hào)、姓名。CREATEINDEX工號(hào)_姓名_indON員工(工號(hào),姓名)GOJava代碼insertinto部門(mén)values('財(cái)務(wù)部','王玲','20')insertinto部門(mén)values('生產(chǎn)部','麗麗','400')insertinto部門(mén)values('董事會(huì)','李四','10')insertinto部門(mén)values('后勤部','二子','40')insertinto部門(mén)values('公關(guān)部','小麗','15')insertinto部門(mén)values('行政部','琪琪','20')insertinto部門(mén)values('企劃部','小新','15')insertinto部門(mén)values('銷(xiāo)售部','小海','10')insertinto部門(mén)values('人力資源部','麗子','5')insertinto員工values('1001','李民','男','25','天津','','已婚','專(zhuān)科','銷(xiāo)售部','內(nèi)銷(xiāo)','4','職工')insertinto員工values('1002','李四','男','50','上海','','已婚','本科','董事長(zhǎng)','null','30','董事長(zhǎng)')insertinto員工values('1003','麗麗','女','25','北京','','未婚','本科','生產(chǎn)部','電工','8','生產(chǎn)部部長(zhǎng)')insertinto員工values('1004','王玲','男','35','東京','','已婚','研究生','財(cái)務(wù)部','預(yù)算','6','財(cái)務(wù)部部長(zhǎng)')insertinto員工values('1005','二子','女','30','江西','','未婚','本科','后勤部','車(chē)工','7','后勤部部長(zhǎng)')insertinto員工values('1006','小麗','女','26','蘇州','','已婚','本科','公關(guān)部','null','3','公關(guān)部部長(zhǎng)')insertinto員工values('1007','小新','男','27','揚(yáng)州','','已婚','研究生','企劃部','主管','2','企劃部部長(zhǎng)')insertinto員工values('1008','琪琪','女','24','安徽','','未婚','本科','行政部','null','8','行政部部長(zhǎng)')insertinto員工values('1009','小海','男','23','南京','','已婚','專(zhuān)科','銷(xiāo)售部','主管','4','銷(xiāo)售部部長(zhǎng)')insertinto員工values('1010','麗子','女','22','江西','','未婚','本科','人力資源部','null','4','人力資源部部長(zhǎng)')insertinto員工values('1011','小美','女','26','海南','','已婚','本科','公關(guān)部','前臺(tái)','5','職工')insertinto員工values('1012','小韓','男','20','山東','','離異','本科','財(cái)務(wù)部','融資','5','出納')insertinto工資values('1001','-12','2500','500','25','2','15','4','加急','50','50','100','3500','3400')insertinto工資values('1002','-12','10000','600','100','5','25','2','null','0','0','0','15000','0')insertinto工資values('1003','-12','4000','500','30','2','30','4','核對(duì)','50','50','100','5000','4800')insertinto工資values('1004','-12','3500','500','30','2','30','4','加急','50','50','100','5000','4800')insertinto工資values('1005','-12','4000','500','30','2','30','4','加急','50','50','100','5000','4800')insertinto工資values('1006','-12','4000','500','30','2','30','4','加急','50','50','100','5000','4800')insertinto工資values('1007','-12','3500','500','30','2','30','4','審核','50','50','100','5200','5000')insertinto工資values('1008','-12','3500','500','30','2','30','4','加急','50','50','100','5400','5200')insertinto工資values('1009','-12','3500','500','30','2','30','4','審核','50','50','100','5000','4800')insertinto工資values('1010','-12','3500','500','30','2','30','4','加急','50','50','100','4800','4300')insertinto工資values('1011','-12','2500','500','25','2','15','4','加急','50','50','100','3500','3400')insertinto工資values('1012','-12','2500','500','25','2','15','4','加急','50','50','100','3500','3400')insertinto員工登陸密碼values('1001','1101')insertinto員工登陸密碼values('1002','1102')insertinto員工登陸密碼values('1003','1103')insertinto員工登陸密碼values('1004','1104')insertinto員工登陸密碼values('1005','1105')insertinto員工登陸密碼values('1006','1106')insertinto員工登陸密碼values('1007','1107')insertinto員工登陸密碼values('1008','1108')insertinto員工登陸密碼values('1009','1109')insertinto員工登陸密碼values('1010','1110')insertinto員工登陸密碼values('1011','1111')insertinto員工登陸密碼values('1012','1112')insertinto工齡工資values('1','3000')insertinto工齡工資values('2','4000')insertinto工齡工資values('3','5000')insertinto工齡工資values('4','6000')insertinto工齡工資values('5','7000')insertinto工齡工資values('6','8000')insertinto工齡工資values('7','10000')insertinto工齡工資values('8','1')insertinto工齡工資values('9','15000')insertinto工齡工資values('10','0')insertinto工齡工資values('11','40000')packageWageMangement;
importjava.sql.*;
importjavax.swing.JOptionPane;
publicclassDBHelper{
privatestaticStringurl="jdbc:odbc:cc";
privatestaticStringuser="sa",password="3213388s";
privatestaticConnectioncon=null;
static{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exceptionex){
ex.printStackTrace();
}
}
publicstaticResultSetexecuteQuery(Stringsql){
ResultSetrs=null;
try{
con=DriverManager.getConnection(url,user,password);
Statementcmd=con.createStatement();
rs=cmd.executeQuery(sql);
}catch(Exceptionex){ex.printStackTrace();}
returnrs;
}
publicstaticvoidexecuteUpdate(Stringsql){
try{
con=DriverManager.getConnection(url,user,password);
Statementcmd=con.createStatement();
cmd.executeUpdate(sql);
}catch(Exceptionex){
ex.printStackTrace();
}
finally{
conclose();
}
}
publicstaticvoidconclose(){
try{
if(con!=null&&!con.isClosed()){
con.close();
}
}catch(Exceptionex){
ex.printStackTrace();
}
}
}
/*主界面類(lèi)*/packageWageMangement;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassWageMainextendsJFrameimplementsActionListener{
privateJButtonbtn_quit=newJButton("注銷(xiāo)登錄");
privateJTextFieldch1798=newJTextField("\t@歡迎使用工資管理系統(tǒng)!);
/*創(chuàng)立菜單欄*/
privateJMenuBarmainMune=newJMenuBar();
/*創(chuàng)立部門(mén)菜單項(xiàng)*/
privateJMenumenudept=newJMenu("部門(mén)信息管理");
privateJMenuItemdept_insert=newJMenuItem("添加新部門(mén)信息");
privateJMenuItemdept_update=newJMenuItem("更新部門(mén)信息");
privateJMenuItemdept_del=newJMenuItem("撤銷(xiāo)部門(mén)");
/*創(chuàng)立員工菜單項(xiàng)*/
privateJMenumenuemp=newJMenu("員工基本信息管理");
privateJMenuItememp_insert=newJMenuItem("添加新員工信息");
privateJMenuItememp_update=newJMenuItem("更新員工信息");
privateJMenuItememp_del=newJMenuItem("刪除員工");
/*創(chuàng)立工資菜單項(xiàng)*/
privateJMenumenuwage=newJMenu("員工工資信息管理");
privateJMenuItemwage_insert=newJMenuItem("添加新工資信息");
privateJMenuItemwage_update=newJMenuItem("更新工資信息");
privateJMenuItemwage_del=newJMenuItem("刪除員工工資信息");
/*創(chuàng)立記錄菜單項(xiàng)*/
privateJMenumenustat=newJMenu("查詢(xún)匯總——部門(mén)、員工、員工工資信息");
privateJMenuItemmerge=newJMenuItem("匯總部門(mén)年份工資總額信息及人數(shù)");
privateJMenuItemsearch=newJMenuItem("查詢(xún)部門(mén)和員工基本信息及工資明細(xì)");
WageMain(){
JPaneljp=(JPanel)this.getContentPane();
jp.setLayout(newBorderLayout());
JPaneljp1=newJPanel(newFlowLayout());
jp.add(ch1798);ch1798.setEditable(false);
jp1.add(btn_quit);
jp.add(jp1,BorderLayout.SOUTH);
menudept.add(dept_insert);
menudept.add(dept_update);
menudept.add(dept_del);
menuemp.add(emp_insert);
menuemp.add(emp_update);
menuemp.add(emp_del);
menuwage.add(wage_insert);
menuwage.add(wage_update);
menuwage.add(wage_del);
menustat.add(merge);
menustat.add(search);
mainMune.add(menudept);
mainMune.add(menuemp);
mainMune.add(menuwage);
mainMune.add(menustat);
this.setJMenuBar(mainMune);
dept_insert.addActionListener(this);
dept_update.addActionListener(this);
dept_del.addActionListener(this);
emp_insert.addActionListener(this);
emp_update.addActionListener(this);
emp_del.addActionListener(this);
wage_insert.addActionListener(this);
wage_update.addActionListener(this);
wage_del.addActionListener(this);
merge.addActionListener(this);
search.addActionListener(this);
btn_quit.addActionListener(this);
this.setSize(570,300);
this.setVisible(true);
this.setLocation(350,220);
this.setTitle("工資管理系統(tǒng)");
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==dept_insert){
DeptInsertdeptinsert=newDeptInsert();this.dispose();
}elseif(e.getSource()==dept_update){
DeptUpdatedeptipdate=newDeptUpdate();this.dispose();
}elseif(e.getSource()==dept_del){
DeptDeldeptdel=newDeptDel();this.dispose();
}elseif(e.getSource()==emp_insert){
EmpInsertempinsert=newEmpInsert();this.dispose();
}elseif(e.getSource()==emp_update){
EmpUpdateempupdate=newEmpUpdate();this.dispose();
}elseif(e.getSource()==emp_del){
EmpDelempdel=newEmpDel();this.dispose();
}elseif(e.getSource()==wage_insert){
WageInsertwageinsert=newWageInsert();this.dispose();
}elseif(e.getSource()==wage_update){
WageUpdatewageupdate=newWageUpdate();this.dispose();
}elseif(e.getSource()==wage_del){
WageDelwagedel=newWageDel();this.dispose();
}elseif(e.getSource()==merge){
Mergemerge=newMerge();this.dispose();
}elseif(e.getSource()==search){
Searchsearch=newSearch();this.dispose();
}elseif(e.getSource()==btn_quit){
LandFramelandfrm=newLandFrame();this.dispose();
}
}
}
/*部門(mén)添加界面類(lèi)*/packageWageMangement;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassDeptInsertextendsJFrameimplementsActionListener{
privateJLabellbl_dno=newJLabel("新增部門(mén)編號(hào)(7位數(shù)字)");
privateJLabellbl_dname=newJLabel("新增部門(mén)名稱(chēng)(至多20字符)");
privateJLabellbl_principal=newJLabel("新增部門(mén)負(fù)責(zé)人(至多10字符)");
privateJTextFieldtxt_dno=newJTextField();
privateJTextFieldtxt_dname=newJTextField();
privateJTextFieldtxt_principal=newJTextField();
privateJButtonbtn_insert=newJButton("確認(rèn)添加");
privateJButtonbtn_back=newJButton("返回");
privateWageDaowagedao=newWageDao();
DeptInsert(){
JPaneljp=(JPanel)this.getContentPane();
jp.setLayout(newBorderLayout());
JPaneljp1=newJPanel(newGridLayout(3,2,5,8));
jp1.setBorder(BorderFactory.createTitledBorder("添加部門(mén)"));
jp1.add(lbl_dno);jp1.add(txt_dno);
jp1.add(lbl_dname);jp1.add(txt_dname);
jp1.add(lbl_principal);jp1.add(txt_principal);
JPaneljp2=newJPanel(newGridLayout(1,2,10,10));
jp2.setBorder(BorderFactory.createTitledBorder("作者:杜舒靜學(xué)號(hào):1798"));
jp2.add(btn_insert);jp2.add(btn_back);
jp.add(jp1,BorderLayout.NORTH);
jp.add(jp2,BorderLayout.SOUTH);
this.setSize(343,190);
this.setVisible(true);
this.setLocation(500,280);
this.setTitle("工資管理系統(tǒng)");
this.setResizable(false);
btn_insert.addActionListener(this);
btn_back.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==btn_insert){
System.out.println("insert");
wagedao.deptInsert(this,
txt_dno.getText().trim(),
txt_dname.getText().trim(),
txt_principal.getText().trim()
);
}elseif(e.getSource()==btn_back){
WageMainwageMain=newWageMain();this.dispose();
}
}
}
/*部門(mén)信息修改類(lèi)*/packageWageMangement;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassDeptUpdateextendsJFrameimplementsActionListener{
privateJComboBoxtxt_dept=newJComboBox();
privateJLabelempty=newJLabel();
privateJLabelinput=newJLabel("需更新部門(mén):");
privateJLabelempty_2=newJLabel("原部門(mén)信息");
privateJLabelempty_3=newJLabel("新部門(mén)信息");
privateJLabellbl_dno=newJLabel("部門(mén)編號(hào)");
privateJLabellbl_dname=newJLabel("部門(mén)名稱(chēng)");
privateJLabellbl_principal=newJLabel("部門(mén)負(fù)責(zé)人");
privateJTextFieldtxt_old_dno=newJTextField();
privateJTextFieldtxt_old_dname=newJTextField();
privateJTextFieldtxt_old_principal=newJTextField();
privateJTextFieldtxt_new_dno=newJTextField();
privateJTextFieldtxt_new_dname=newJTextField();
privateJTextFieldtxt_new_principal=newJTextField();
privateJButtonbtn_query=newJButton("查詢(xún)");
privateJButtonbtn_update=newJButton("更新");
privateJButtonbtn_back=newJButton("返回");
privateWageDaodao=newWageDao();
publicvoidwriteOldTxt(Stringone,Stringtwo,Stringthree){
txt_old_dno.setText(one);
txt_old_dname.setText(two);
txt_old_principal.setText(three);
}
publicvoidsetItem(){
dao.getDeptItem(txt_dept);
}
DeptUpdate(){
JPaneljp=(JPanel)this.getContentPane();
jp.setLayout(newBorderLayout());
jp.setBorder(BorderFactory.createTitledBorder("更新部門(mén)"));
this.setItem();
JPaneljp1=newJPanel(newBorderLayout());
JPaneljp2=newJPanel(newGridLayout(5,2,5,5));
JPaneljp3=newJPanel(newGridLayout(5,1,3,5));
JPaneljp4=newJPanel(newBorderLayout());
jp4.setBorder(BorderFactory.createTitledBorder("1798"));
JPaneljp5=newJPanel(newGridLayout(1,2,8,8));
txt_old_dno.setEditable(false);
txt_old_dname.setEditable(false);
txt_old_principal.setEditable(false);
txt_new_dno.setEditable(false);
jp2.add(input);jp2.add(txt_dept);
jp2.add(empty);jp2.add(empty_2);
jp2.add(lbl_dno);jp2.add(txt_old_dno);
jp2.add(lbl_dname);jp2.add(txt_old_dname);
jp2.add(lbl_principal);jp2.add(txt_old_principal);
jp3.add(btn_query);
jp3.add(empty_3);
jp3.add(txt_new_dno);
jp3.add(txt_new_dname);
jp3.add(txt_new_principal);
jp5.add(btn_update);jp5.add(btn_back);
jp4.add(jp5);
jp1.add(jp2,BorderLayout.WEST);
jp1.add(jp3,BorderLayout.EAST);
jp.add(jp1,BorderLayout.NORTH);
jp.add(jp4,BorderLayout.SOUTH);
this.setSize(460,270);
this.setVisible(true);
this.setLocation(400,280);
this.setTitle("工資管理系統(tǒng)");
this.setResizable(false);
btn_query.addActionListener(this);
btn_update.addActionListener(this);
btn_back.addActionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==btn_query){
dao.individual_querty_dept(this,(String)txt_dept.getSelectedItem());
}elseif(e.getSource()==btn_update){
Stringdept=(String)txt_dept.getSelectedItem();
booleanz=false;
if(dept.length()>0){
Stringx=txt_new_dname.getText().trim();
if(x.length()>1&&x.length()<10){
if(dao.dQuery(txt_new_dname.getText().trim())==null){
dao.deptUpdate("dname",x,txt_old_dno.getText().trim());
}else{
JOptionPane.showMessageDialog(this,"@部門(mén)已存在@");
}
z=true;
}
Stringy=txt_new_principal.getText().trim();
if(y.length()>0&&y.length()<10){
dao.deptUpdate("principal",y,txt_old_dno.getText().trim());
z=true;
}
if(z){
txt_dept.removeAllItems();
this.setItem();
dao.individual_querty_dept(this,txt_new_dname.getText().trim());
dao.individual_querty_dept(this,txt_new_principal.getText().trim());
txt_new_principal.setText(null);
txt_new_dname.setText(null);
}
}
}elseif(e.getSource()==btn_back){
WageMainwageMain=newWageMain();
this.dispose();
}
}
}/*部門(mén)信息刪除類(lèi)*/packageWageMangement;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassDeptDelextendsJFrameimplementsActionListener{
privateJLabellbl_dno_or_dname=newJLabel("需撤銷(xiāo)部門(mén)名稱(chēng)或編號(hào)");
privateJButtondel=newJButton("撤銷(xiāo)部門(mén)");
privateJButtonback=newJButton("返回");
privateJTextFieldtxt_dno_or_dname=newJTextField();
privateWageDaodao=newWageDao();
DeptDel(){
JPaneljp=(JPanel)this.getContentPane();
jp.setBorder(BorderFactory.createTitledBorder("部門(mén)撤銷(xiāo)"));
jp.setLayout(newBorderLayout());
JPaneljp1=newJPanel(newGridLayout(1,3,5,5));
jp1.add(lbl_dno_or_dname);jp1.add(txt_dno_or_dname);jp1.add(del);
JPaneljp2=newJPanel(newFlowLayout());
jp2.add(back);
jp.add(jp1,BorderLayout.NORTH);
jp.add(jp2);
del.addActionListener(this);
back.addActionListener(this);
this.setSize(500,130);
this.setVisible(true);
this.setLocation(420,280);
this.setTitle("工資管理系統(tǒng)");
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==del){
dao.deptDel(this,txt_dno_or_dname.getText().trim());
}elseif(e.getSource()==back){
WageMainwageMain=newWageMain();
this.dispose();
}
}
}
/*員工信息添加界面類(lèi)*/packageWageMangement;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassEmpInsertextendsJFrameimplementsActionListener{
privateWageDaodao=newWageDao();
privateJLabellbl_eno=newJLabel("員工編號(hào)");
privateJLabellbl_name=newJLabel("姓名");
privateJLabellbl_sex=newJLabel("性別");
privateJLabellbl_birth=newJLabel("生日");
privateJLabellbl_attendtime=newJLabel("參加工作時(shí)間");
privateJLabellbl_dept=newJLabel("部門(mén)");
privateJLabellbl_post=newJLabel("職務(wù)");
privateJLabellbl_TechnicalTitle=newJLabel("職稱(chēng)");
privateJLabellbl_politicalstatus=newJLabel("政治面貌");
privateJLabellbl_wedlock=newJLabel("婚姻狀況");
privateJTextFieldtxt_eno=newJTextField();
privateJTextFieldtxt_name=newJTextField();
privateString[]str_sex={"男","女"};
privateJComboBoxcmbsex=newJComboBox(str_sex);
privateJComboBoxtxt_birth_year;
privateJComboBoxtxt_birth_month;
privateJComboBoxtxt_birth_day;
privateJComboBoxtxt_attendtime_year;
privateJComboBoxtxt_attendtime_month;
privateJComboBoxtxt_attendtime_day;
privateJComboBoxtxt_dept=newJComboBox();
privateJTextFieldtxt_post=newJTextField();
privateJTextFieldtxt_TechnicalTitle=newJTextField();
privateString[]str_pol={"群眾","團(tuán)員","黨員"};
privateJComboBoxcmbpol=newJComboBox(str_pol);
privateString[]str_wedlock={"未婚","已婚"};
privateJComboBoxcmbwedlock=newJComboBox(str_wedlock);
privateJLabellbl_empty=newJLabel();
privateJLabellbl_empty_1=newJLabel();
privateJButtonbtn_insert=newJButton("添加");
privateJButtonbtn_back=newJButton("返回");
privateString[]day=newString[32];
privateString[]month=newString[13];
privateString[]birth_year=newString[32];
privateString[]attendtime_year=newString[32];
privateString[]day_28=newString[29];
privateString[]day_29=newString[30];
privateString[]day_30=newString[31];
privateintc_year=0;privateintC_year=0;
publicvoidsetItem(){
dao.getDeptItem(txt_dept);
day[0]="";
month[0]="";
birth_year[0]="";
attendtime_year[0]="";
for(inti=1;i<32;i++){
day[i]=""+i;
}
for(inti=1;i<13;i++){
month[i]=""+i;
}
for(inti=1;i<32;i++){
intx=1980+i;birth_year[i]=""+x;
}
for(inti=1;i<32;i++){
intx=1996+i;attendtime_year[i]=""+x;
}
txt_birth_year=newJComboBox(birth_year);
txt_birth_month=newJComboBox(month);
txt_birth_day=newJComboBox(day);
txt_attendtime_year=newJComboBox(attendtime_year);
txt_attendtime_month=newJComboBox(month);
txt_attendtime_day=newJComboBox(day);
}
EmpInsert(){
JPaneljp=(JPanel)this.getContentPane();
jp.setLayout(newBorderLayout());
jp.setBorder(BorderFactory.createTitledBorder("員工信息添加"));
this.setItem();
JPaneljp1=newJPanel(newGridLayout(6,4,3,3));
JPaneljp2=newJPanel(newGridLayout(1,2,50,20));
JPaneljp3=newJPanel(newGridLayout(1,3,2,2));
JPaneljp4=newJPanel(newGridLayout(1,3,2,2));
jp4.add(txt_birth_year);jp4.add(txt_birth_month);jp4.add(txt_birth_day);
jp3.add(txt_attendtime_year);jp3.add(txt_attendtime_month);jp3.add(txt_attendtime_day);
jp2.add(btn_insert);jp2.add(btn_back);
jp1.add(lbl_eno);jp1.add(txt_eno);jp1.add(lbl_name);jp1.add(txt_name);
jp1.add(lbl_birth);jp1.add(jp4);jp1.add(lbl_attendtime);jp1.add(jp3);
jp1.add(lbl_sex);jp1.add(cmbsex);jp1.add(lbl_dept);jp1.add(txt_dept);
jp1.add(lbl_post);jp1.add(txt_post);jp1.add(lbl_TechnicalTitle);jp1.add(txt_TechnicalTitle);
jp1.add(lbl_politicalstatus);jp1.add(cmbpol);jp1.add(lbl_wedlock);jp1.add(cmbwedlock);
jp.add(jp1,BorderLayout.NORTH);
jp.add(jp2,BorderLayout.SOUTH);
btn_insert.addActionListener(this);
btn_back.addActionListener(this);
txt_birth_year.addActionListener(this);
txt_birth_month.addActionListener(this);
txt_attendtime_year.addActionListener(this);
txt_attendtime_month.addActionListener(this);
this.setSize(680,260);
this.setVisible(true);
this.setLocation(370,200);
this.setTitle("工資管理系統(tǒng)");
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
day_28[0]="";
day_29[0]="";
day_30[0]="";
for(inti=1;i<29;i++){
day_28[i]=""+i;
}
for(inti=1;i<30;i++){
day_29[i]=""+i;
}
for(inti=1;i<31;i++){
day_30[i]=""+i;
}
}
publicvoidactionPerformed(ActionEvente){
//1為閏年,0為平年
if(e.getSource()==btn_back){
WageMainwageMain=newWageMain();
this.dispose();
}elseif(e.getSource()==txt_birth_year){
StringCY=(String)txt_birth_year.getSelectedItem();
intyear=Integer.parseInt(CY);
intg=year;
if(g%4==0||g%400==0){
c_year=1;
}else{
c_year=0;
}
}elseif(e.getSource()==txt_birth_month){
StringCM=(String)txt_birth_month.getSelectedItem();
intmonth=Integer.parseInt(CM);
if(month==2){
if(c_year==1){
txt_birth_day.removeAllItems();
for(inti=0;i<day_29.length;i++){
txt_birth_day.addItem(day_29[i]);
}
}elseif(c_year==0){
txt_birth_day.removeAllItems();
for(inti=0;i<day_28.length;i++){
txt_birth_day.addItem(day_28[i]);}
}
}elseif(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
txt_birth_day.removeAllItems();
for(inti=0;i<day.length;i++){
txt_birth_day.addItem(day[i]);}
}else{
txt_birth_day.removeAllItems();
for(inti=0;i<day_30.length;i++){
txt_birth_day.addItem(day_30[i]);}
}
/**/
}elseif(e.getSource()==txt_attendtime_year){
StringCY=(String)txt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年主持人聘合同(2篇)
- 2025年九年級(jí)語(yǔ)文教學(xué)年終總結(jié)(2篇)
- 2025年云南省鮮花訂購(gòu)合同(三篇)
- 2025年二年級(jí)語(yǔ)文教學(xué)工作心得體會(huì)模版(3篇)
- 書(shū)店裝修小型合同樣本
- 醫(yī)療設(shè)施土方清運(yùn)合同
- 清真寺裝修合同樣本
- 金華日式屋頂花園施工方案
- 度假別墅裝修合同協(xié)議
- 醫(yī)療藥品冷鏈運(yùn)輸協(xié)議
- 商標(biāo)法基礎(chǔ)知識(shí)
- 2025年高考物理一輪復(fù)習(xí)之機(jī)械振動(dòng)
- 《道路交通安全法》課件完整版
- 初中2025教學(xué)工作計(jì)劃
- 2024年度市政工程項(xiàng)目三方合作協(xié)議3篇
- 【大學(xué)課件】機(jī)電設(shè)備管理技術(shù)概論
- (2024)甘肅省公務(wù)員考試《行測(cè)》真題及答案解析
- 《STP營(yíng)銷(xiāo)戰(zhàn)略概述》課件
- 醫(yī)院醫(yī)務(wù)人員醫(yī)德考評(píng)標(biāo)準(zhǔn)
- 急性胸痛患者的急救護(hù)理
- 小紅書(shū)種草營(yíng)銷(xiāo)師(初級(jí))認(rèn)證考試真題試題庫(kù)(含答案)
評(píng)論
0/150
提交評(píng)論