《C#語言程序設(shè)計(jì)項(xiàng)目教程》第11章 綜合項(xiàng)目-小賬本寫字字帖_第1頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第11章 綜合項(xiàng)目-小賬本寫字字帖_第2頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第11章 綜合項(xiàng)目-小賬本寫字字帖_第3頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第11章 綜合項(xiàng)目-小賬本寫字字帖_第4頁
《C#語言程序設(shè)計(jì)項(xiàng)目教程》第11章 綜合項(xiàng)目-小賬本寫字字帖_第5頁
已閱讀5頁,還剩130頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第11章綜合項(xiàng)目——小賬本本章導(dǎo)讀:本章的主要內(nèi)容是學(xué)習(xí)簡單WinForm窗體應(yīng)用程序的開發(fā)。通過項(xiàng)目“小賬本”為導(dǎo)向,按照應(yīng)用程序開發(fā)的工程流程為驅(qū)動(dòng),利用C#語言和.Net開發(fā)平臺完成系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、公共代碼設(shè)計(jì)、各窗體功能模塊和Windows安裝項(xiàng)目的創(chuàng)建,本項(xiàng)目的完成使得學(xué)生對應(yīng)用程序的開發(fā)有一定的認(rèn)識,同時(shí)對C#各知識點(diǎn)的綜合應(yīng)用起到鞏固。第11章綜合項(xiàng)目——小賬本

——任務(wù)一系統(tǒng)分析一、教學(xué)目標(biāo)了解小賬本系統(tǒng)的應(yīng)用現(xiàn)狀掌握小賬本的基本功能需求二、現(xiàn)狀分析:隨著軟件技術(shù)的快速發(fā)展,電子記賬本在生活中得到了越來越廣泛的應(yīng)用,已經(jīng)成為人們?nèi)粘I钪凶畛R姷囊环N功能服務(wù)。它可以幫您輕松記錄每天的收入、支出,并進(jìn)行分析,匯總,讓您更容易對收入和支出進(jìn)行預(yù)算!使用電子記賬本,錢來錢往一目了然,讓您輕松理財(cái)不再難!小賬本后臺數(shù)據(jù)庫采用MicrosoftSQLServer2008,該數(shù)據(jù)庫系統(tǒng)在安全性、準(zhǔn)確性和運(yùn)行速度方面有絕對的優(yōu)勢。前臺采用Microsoft公司的VisualStudio2010作為開發(fā)工具,可以實(shí)現(xiàn)與SQLServer2008數(shù)據(jù)庫無縫連接。三、需求分析小賬本需求分析如下:1、要求具有良好的人機(jī)交互界面。2、用戶需要經(jīng)過身份驗(yàn)證后才可登錄系統(tǒng)。3、能夠滿足用戶的日常記賬功能需求,能夠?qū)γ宽?xiàng)帳目進(jìn)行修改和刪除。4、用戶能夠?qū)γ咳盏南M(fèi)情況進(jìn)行查詢。5、用戶能夠?qū)γ吭碌南M(fèi)情況進(jìn)行查詢。6、該系統(tǒng)最大限度的實(shí)現(xiàn)易維護(hù)性和易操作性。7、該系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。第11章綜合項(xiàng)目——小賬本

——任務(wù)二系統(tǒng)設(shè)計(jì)一、教學(xué)目標(biāo) 了解小賬本的架構(gòu); 初步掌握系統(tǒng)的設(shè)計(jì)方法。二、架構(gòu)設(shè)計(jì)(1)界面設(shè)計(jì)美觀友好;(2)數(shù)據(jù)存儲安全可靠;(3)提供帳目登記、刪除和修改功能;(4)系統(tǒng)最大限度地實(shí)現(xiàn)易維護(hù)性和易操作性;(5)系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。1、設(shè)計(jì)目標(biāo)二、架構(gòu)設(shè)計(jì)(1)系統(tǒng)開發(fā)平臺:MicrosoftVisualStudio2010;(2)系統(tǒng)開發(fā)語言:C#;(3)系統(tǒng)后臺數(shù)據(jù)庫:MicrosoftSQLServer2008;(4)運(yùn)行平臺:WindowsXP/Windows7及以上;(5)運(yùn)行環(huán)境:Microsoft.NETFrameworkSDKV4.0(6)分辨率:最佳效果為1366×768像素。2、開發(fā)及運(yùn)行環(huán)境三、功能設(shè)計(jì)密碼管理帳目管理每日清單每月清單主界面用戶登錄小賬本實(shí)現(xiàn)用戶登錄驗(yàn)證。用戶必須先注冊,然后通過用戶名和密碼進(jìn)行登錄,登錄成功后才能進(jìn)行主界面。在主界面可以對用戶的密碼進(jìn)行修改。同時(shí)可以完成對每筆消費(fèi)的記賬、刪除和修改,可以對每日消費(fèi)進(jìn)行查詢,可以對每月消費(fèi)進(jìn)行查詢。該系統(tǒng)暫時(shí)沒有設(shè)計(jì)管理員用戶。四、數(shù)據(jù)庫設(shè)計(jì)小賬本采用SQLServer2008數(shù)據(jù)庫。數(shù)據(jù)庫系統(tǒng)中創(chuàng)建了一個(gè)名為db_JSPde的數(shù)據(jù)庫,在數(shù)據(jù)庫中創(chuàng)建2個(gè)數(shù)據(jù)表,分別是:tb_Bill和tb_UserMsg。創(chuàng)建消費(fèi)信息表tb_Bill,用于保存用戶的消費(fèi)信息,表結(jié)構(gòu)設(shè)計(jì)如下表所示。消費(fèi)信息表(tb_Bill)結(jié)構(gòu)字段類型長度是否可為空說明ConIdint4否主鍵,從1自動(dòng)編號,每次增加1。消費(fèi)記錄標(biāo)識ConItemvarchar50否消費(fèi)項(xiàng)目ConTypeint4否消費(fèi)類別ConMoneymoney

否消費(fèi)金額ConDatesmalldatetime8否消費(fèi)日期四、數(shù)據(jù)庫設(shè)計(jì)小賬本采用SQLServer2008數(shù)據(jù)庫。數(shù)據(jù)庫系統(tǒng)中創(chuàng)建了一個(gè)名為db_JSPde的數(shù)據(jù)庫,在數(shù)據(jù)庫中創(chuàng)建2個(gè)數(shù)據(jù)表,分別是:tb_Bill和tb_UserMsg。創(chuàng)建用戶信息表tb_UserMsg,用于保存用戶基本信息,表結(jié)構(gòu)設(shè)計(jì)如下表所示。用戶信息表(tb_UserMsg)結(jié)構(gòu)字段類型長度是否可為空說明usernamevarchar20否用戶名passwordvarchar20否用戶密碼agevarchar5是年齡五、文件結(jié)構(gòu)設(shè)計(jì)DBHelper.cs:該文件是類文件,用于存放開發(fā)小賬本所要用到的公共代碼。frmMain.cs:該文件為小賬本的主窗體,提供“密碼管理”、“記賬”、“每日清單”、“月統(tǒng)計(jì)”和“關(guān)于”窗口的鏈接。frmLogin.cs:該文件為小賬本窗體應(yīng)用程序的登錄窗體,也是該應(yīng)用程序運(yùn)行時(shí)看到的第一個(gè)窗體。用于系統(tǒng)用戶登錄時(shí)的身份驗(yàn)證,成功后進(jìn)入主窗體。同時(shí)該窗體上提供“用戶注冊”和“忘記密碼”的窗口鏈接。frmRegister.cs:該文件為用戶注冊窗體,用于注冊新的系統(tǒng)用戶。frmModifyPsd.cs:該文件為密碼管理窗體,用于登錄用戶進(jìn)行密碼修改。frmRegisterBill.cs:該文件為登記帳目窗體,用于用戶的實(shí)時(shí)記賬。frmDayBill.cs:該文件為每日清單窗體,用于查看用戶的每日消費(fèi)情況。frmMonthBill.cs:該文件為每月統(tǒng)計(jì)窗體,用于統(tǒng)計(jì)用戶的每月消費(fèi)情況。frmAbout.cs:該文件為小賬本的說明窗體,用于對小賬本進(jìn)行說明。第11章綜合項(xiàng)目——小賬本

——任務(wù)三公共代碼設(shè)計(jì)模塊

一、教學(xué)目標(biāo):掌握ADO.NET的組成及各個(gè)對象的作用及相互關(guān)系;掌握公共類的設(shè)計(jì)思路;二、任務(wù)描述:本任務(wù)的主要目的是為小賬本中所要用到的公共代碼進(jìn)行設(shè)計(jì)。在項(xiàng)目開發(fā)過程中以類的形式來組織、封裝一些常用的方法和事件,將會(huì)在編程過程中起到事半功倍的效果。良好的類設(shè)計(jì),使得系統(tǒng)結(jié)構(gòu)更加清晰,同時(shí)可以加強(qiáng)代碼的重用性和易維護(hù)性。本系統(tǒng)創(chuàng)建了公共類DBHelper,用來執(zhí)行各種數(shù)據(jù)庫操作。系統(tǒng)公共類設(shè)計(jì)包括以下主要功能:(1)查詢單個(gè)值(ExecuteScalar),返回該值;(2)執(zhí)行SQL語句:插入、刪除、修改、添加,只返回true或者false;(3)執(zhí)行SQL語句(ExecuteNonQuery),只返回執(zhí)行結(jié)果true或者false;(4)將批量數(shù)據(jù)一次性的從數(shù)據(jù)集提交回?cái)?shù)據(jù)庫;(5)將批量數(shù)據(jù)從數(shù)據(jù)庫填充到數(shù)據(jù)集。三、任務(wù)分析:如上文所述,采用類的封裝更符合面向?qū)ο蟮木幊趟枷搿?chuàng)建DBHelper.cs公共類文件,主要包括四個(gè)方法:1、QueryLots()方法:用來將批量數(shù)據(jù)從數(shù)據(jù)庫填充到數(shù)據(jù)集;2、ExcuseSql()方法:用來執(zhí)行SQL語句:包括插入、刪除、修改和添加,結(jié)果只返回true或者false;3、ExecuteNonSql()方法:直接對數(shù)據(jù)庫執(zhí)行反向操作;4、QuerySingle()方法:用于查詢單個(gè)值。四、任務(wù)實(shí)施:1、為項(xiàng)目“MyJSP”項(xiàng)目添加類“DBHelper”。右鍵單擊解決方案中的項(xiàng)目名稱->選擇【Add】|【Class】,在【Name】后輸入類名“DBHelper”,如圖所示。四、任務(wù)實(shí)施:2、定義SQLServer數(shù)據(jù)庫連接_conn。privatestaticSqlConnection_conn=newSqlConnection("DataSource=.;InitialCatalog=db_JSP;IntegratedSecurity=True");3、為類DBHepler添加方法ExcuseSql。該方法的功能是執(zhí)行SQL語句(插入、刪除、修改和添加),該方法返回true或者false。publicstaticboolExcuseSql(stringsql){_conn.Open();SqlCommandcmd=newSqlCommand();cmd.Connection=_conn;cmd.CommandText=sql;cmd.CommandType=CommandType.Text;intnum=cmd.ExecuteNonQuery();_conn.Close();returnnum>0;}四、任務(wù)實(shí)施:4、為類DBHepler添加方法QuerySingle。該方法的功能是查詢單個(gè)值,該方法返回一個(gè)對象類型。調(diào)用該方法時(shí),可以將結(jié)果強(qiáng)制轉(zhuǎn)換為int類型,通過判斷其數(shù)是否為0來判斷是否有查詢結(jié)果。publicstaticobjectQuerySingle(Stringsql){_conn.Open();SqlCommandcomm=newSqlCommand(sql,_conn);objecto=comm.ExecuteScalar();_conn.Close();returno;}四、任務(wù)實(shí)施:5、為類DBHepler添加方法QueryLots。該方法的功能是查詢批量數(shù)據(jù),將批量數(shù)據(jù)從數(shù)據(jù)庫填充到數(shù)據(jù)集,該結(jié)果返回一個(gè)數(shù)據(jù)集。publicstaticDataSetQueryLots(Stringsql,StringtableName){

SqlCommandcmd=newSqlCommand(sql,_conn);SqlDataAdaptersda=newSqlDataAdapter();sda.SelectCommand=cmd;DataSetds=newDataSet();sda.Fill(ds,tableName);returnds;}五、任務(wù)小結(jié):若要?jiǎng)?chuàng)建SqlDataReader,不能直接實(shí)例化,必須調(diào)用SqlCommand對象的ExecuteReader方法。在使用SqlDataReader時(shí),關(guān)聯(lián)的SqlConnection正忙于為SqlDataReader服務(wù),對SqlConnection無法執(zhí)行任何其他操作,只能將其關(guān)閉。調(diào)用SqlDataReader的Close方法,否則會(huì)一直處于打開狀態(tài)。第11章選擇流程控制語句

——任務(wù)四制作主窗體

一、教學(xué)目標(biāo):掌握窗體的創(chuàng)建及應(yīng)用方法;掌握MenuStrip控件、StatusStrip控件、Timer控件和NotifyIcon控件的使用;學(xué)會(huì)主界面的制作。二、任務(wù)描述:當(dāng)用戶登錄成功后,進(jìn)入小賬本的主窗體,如圖所示。在本任務(wù),主要完成主窗體的制作和主菜單中“關(guān)于”子窗體的制作。主窗體主要包括上方的菜單控件和下方的狀態(tài)欄控件構(gòu)成,如圖所示。三、任務(wù)分析:主界面的主要功能是顯示小賬本的主要操作菜單,以方便用戶選擇操作,所以在界面的上方添加一個(gè)菜單控件,添加“密碼管理”、“記賬”、“每日清單”、“月統(tǒng)計(jì)”和“關(guān)于”菜單選擇項(xiàng)。同時(shí)在界面的下方添加狀態(tài)欄,顯示登錄用戶名,以及當(dāng)前時(shí)間。四、任務(wù)實(shí)施:1、添加一個(gè)名為frmMain的窗體,設(shè)置窗體的屬性如下表所示:frmMain窗體屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmMain

Size:800*550;窗體大小

StartPosition:CenterScreen窗體啟動(dòng)時(shí)的顯示位置為屏幕居中

Text:我的小賬本V1.0窗體的標(biāo)題,表明該類型為版本1.0

BackgroundImage:bcg.png設(shè)置窗體的背景圖片

Icon:ico.ico設(shè)置項(xiàng)目運(yùn)行時(shí)的顯示圖標(biāo)四、任務(wù)實(shí)施:2、在主窗體上方添加一個(gè)MenuStrip控件。設(shè)置該菜單控件的菜單項(xiàng)為:密碼管理、記賬、每日清單、月統(tǒng)計(jì)和關(guān)于。如圖所示。3、在主窗體的下方添加一個(gè)StatusStrip控件。設(shè)置該狀態(tài)欄控件添加兩個(gè)StatusLable,分別用來顯示登錄用戶的姓名和當(dāng)前的時(shí)間,并且時(shí)間是動(dòng)態(tài)變化的。四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。雙擊frmMain窗體,為窗體添加Load事件,添加代碼如下:privatevoidfrmMain_Load(objectsender,EventArgse){toolStripStatusLabel1.Text=mainvalue+"歡迎您!";toolStripStatusLabel2.Text=DateTime.Now.ToString();timer1.Enabled=true;}四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。frmMainfrmmain=newfrmMain(username);frmmain.Show();其中mainvalue表示成功登錄用戶的用戶名,該用戶名應(yīng)該從登錄窗體(frmLogin窗體)傳入。其方法如下:(1)登錄窗體設(shè)置(詳見任務(wù)五)。在判斷用戶登錄成功,轉(zhuǎn)向顯示主窗體時(shí),添加如下代碼:在對主窗體進(jìn)行實(shí)例化時(shí),給主窗體添加一個(gè)參數(shù),該參數(shù)即為登錄用戶名。通過frmmain.Show()方法將該用戶名傳遞給主窗體。四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。privatestringmainvalue;publicstringGetMainvalue{get{returnmainvalue;}set{mainvalue=value;}}(2)主窗體設(shè)置。在主窗體中添加mainvalue變量來存放從登錄窗體傳來的用戶名,并設(shè)置其屬性:publicfrmMain(stringmainusername){InitializeComponent();mainvalue=mainusername;}修改主窗體的初始化方法,添加參數(shù)mainusername來接受從登錄窗體傳來的用戶名:四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。privatevoidtimer1_Tick(objectsender,EventArgse){toolStripStatusLabel2.Text=DateTime.Now.ToString();//獲取當(dāng)前時(shí)間

}為了得到動(dòng)態(tài)的時(shí)間,為主窗體添加一個(gè)Timer控件。雙擊Timer控件,添加方法如下:四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。

//記賬功能privatevoid記賬ToolStripMenuItem_Click(objectsender,EventArgse){frmRegisterBillfrmregisterbill=newfrmRegisterBill();//設(shè)定窗體間的所屬關(guān)系

frmregisterbill.Owner=this;frmregisterbill.Show();}(3)主窗體菜單設(shè)置,當(dāng)單擊菜單各項(xiàng)時(shí),應(yīng)該相應(yīng)彈出對象窗體,代碼如下:

//每日清單功能privatevoid每日清單ToolStripMenuItem_Click(objectsender,EventArgse){frmDayBillfrmdaybill=newfrmDayBill();frmdaybill.MdiParent=this;frmdaybill.Show();}

四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。//修改密碼privatevoid修改密碼ToolStripMenuItem_Click(objectsender,EventArgse){frmModifyPsdfrmmodifypsd=newfrmModifyPsd();frmmodifypsd.MdiParent=this;frmmodifypsd.Show();}(3)主窗體菜單設(shè)置,當(dāng)單擊菜單各項(xiàng)時(shí),應(yīng)該相應(yīng)彈出對象窗體,代碼如下:

//月統(tǒng)計(jì)功能privatevoid月統(tǒng)計(jì)ToolStripMenuItem_Click(objectsender,EventArgse){frmMonthBillfrmmonthbill=newfrmMonthBill();frmmonthbill.MdiParent=this;frmmonthbill.Show();}四、任務(wù)實(shí)施:3、在主窗體的下方添加一個(gè)StatusStrip控件。

//關(guān)于功能

privatevoid關(guān)于ToolStripMenuItem_Click(objectsender,EventArgse){frmAboutfrmabout=newfrmAbout();frmabout.MdiParent=this;frmabout.Show();}(3)主窗體菜單設(shè)置,當(dāng)單擊菜單各項(xiàng)時(shí),應(yīng)該相應(yīng)彈出對象窗體,代碼如下第11章綜合項(xiàng)目——小賬本

——任務(wù)五用戶管理功能一、任務(wù)描述:用戶管理功能模塊包括用戶注冊(如左圖所示)、用戶登錄(如右上圖所示)和密碼修改(如右下圖所示)三大功能。二、任務(wù)實(shí)施:1、添加用戶注冊窗體(frmRegister),按照左圖進(jìn)行窗體布局。設(shè)置窗體及各控件屬性如下表所示:窗體frmRegister屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmRegister窗體名稱TextBox1Name:txt_UserName輸入用戶名TextBox2Name:txt_PassWordPasswordChar:*輸入密碼,設(shè)置密碼顯示為*TextBox3Name:txt_RePassWordPasswordChar:*密碼確認(rèn),設(shè)置密碼顯示為*TextBox4Name:txt_Age輸入年齡Button1Name:btn_RegisterText:注冊單擊按鈕注冊新用戶Button2Name:btn_CancleText:取消單擊按鈕取消注冊新用戶二、任務(wù)實(shí)施:1、添加用戶注冊窗體(frmRegister)雙擊按鈕btn_Register,為“注冊”按鈕添加Click單擊事件。當(dāng)新注冊用戶不存在時(shí),在數(shù)據(jù)庫表tb_UserMsg中添加一條新信息,并彈出消息框;當(dāng)新注冊用戶存在時(shí),則彈出消息框提示“注冊失敗”。代碼如下:privatevoidbtn_Register_Click(objectsender,EventArgse){stringusername=txt_UserName.Text;stringpassword=txt_PassWord.Text;stringage=txt_age.Text;stringstrSql=String.Format("insertintotb_UserMsg(username,password,age)values('{0}','{1}','{2}')",username,password,age);二、任務(wù)實(shí)施:1、添加用戶注冊窗體(frmRegister)

//判斷是否注冊成功

if(DBHelper.ExcuseSql(strSql))//調(diào)用公共代碼

{MessageBox.Show(username+"恭喜你,注冊成功!");frmLoginfrmlogin=newfrmLogin();frmlogin.Show();//顯示登錄窗體

this.Hide();//隱藏當(dāng)前窗體

}else{MessageBox.Show("注冊失?。?);}}二、任務(wù)實(shí)施:1、添加用戶注冊窗體(frmRegister)當(dāng)注冊成功時(shí),顯示如圖所示消息框:二、任務(wù)實(shí)施:1、添加用戶注冊窗體(frmRegister)雙擊按鈕btn_Cancle,為“取消”按鈕添加Click單擊事件,其功能是關(guān)閉注冊窗口,回到登錄窗口。代碼如下:privatevoidbtn_Cancle_Click(objectsender,EventArgse){this.Close();//關(guān)閉當(dāng)前窗體

frmLoginfrmlogin=newfrmLogin();frmlogin.Show();//顯示登錄窗體

}二、任務(wù)實(shí)施:2、添加用戶登錄窗體(frmLogin),按照左圖進(jìn)行窗體布局。設(shè)置窗體及各控件屬性如下表所示:窗體frmLogin屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmLogin窗體名稱TextBox1Name:txt_UserName輸入用戶名TextBox2Name:txt_PassWordPasswordChar:*輸入密碼,設(shè)置密碼顯示為*LinkButton1Name:link_RegisterText:注冊跳轉(zhuǎn)到注冊窗口LinkButton2Name:link_ForgetpsdText:忘記密碼跳轉(zhuǎn)到忘記密碼窗口Button1Name:btn_LoginText:登錄單擊按鈕登錄Button2Name:btn_CancleText:取消單擊按鈕取消登錄二、任務(wù)實(shí)施:2、添加用戶登錄窗體(frmLogin)設(shè)置光標(biāo)出現(xiàn)在輸入用戶名文本框:privatevoidfrmLogin_Load(objectsender,EventArgse){this.txt_UserName.Focus();}二、任務(wù)實(shí)施:2、添加用戶登錄窗體(frmLogin)雙擊按鈕btn_Login,為“登錄”按鈕添加Click單擊事件。當(dāng)用戶名和密碼輸入正確時(shí)登錄成功,進(jìn)入主界面;當(dāng)?shù)卿浭r(shí),則彈出消息框提示“用戶名不存在”或者“密碼錯(cuò)誤”。代碼如下:privatevoidbtn_Login_Click(objectsender,EventArgse){stringusername=txt_UserName.Text;stringpassword=txt_PassWord.Text;stringstrSql="selectcount(*)fromtb_UserMsgwhereusername='"+username+"'andpassword='"+password+"'";intnum=(int)DBHelper.QuerySingle(strSql);if(num>0)//判斷是否登錄成功

{二、任務(wù)實(shí)施:2、添加用戶登錄窗體(frmLogin)MessageBox.Show(username+"歡迎登錄您的個(gè)人財(cái)務(wù)軟件!");frmMainfrmmain=newfrmMain(username);frmmain.Show();this.Hide();}else{strSql="selectcount(*)fromtb_UserMsgwhereusername='"+username+"'";num=(int)DBHelper.QuerySingle(strSql);if(num!=0){MessageBox.Show("密碼錯(cuò)誤");}else{MessageBox.Show("用戶名不存在!");}}}二、任務(wù)實(shí)施:2、添加用戶登錄窗體(frmLogin)雙擊按鈕btn_Cancle,為“取消”按鈕添加Click單擊事件,其功能是關(guān)閉登錄窗口。代碼如下:privatevoidbtn_Cancle_Click(objectsender,EventArgse){this.Close();}二、任務(wù)實(shí)施:3、添加用戶修改密碼窗體(frmModifyPsd),按照左圖進(jìn)行窗體布局。設(shè)置窗體及各控件屬性如右表所示:窗體frmModifyPsd屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmModifyPsd窗體名稱TextBox1Name:txt_UserName輸入用戶名TextBox2Name:txt_OldPassWordPasswordChar:*輸入舊密碼,設(shè)置密碼顯示為*TextBox3Name:txt_NewPassWordPasswordChar:*輸入新密碼,設(shè)置密碼顯示為*TextBox4Name:txt_NewRePassWordPasswordChar:*確認(rèn)新密碼,設(shè)置密碼顯示為*Button1Name:btn_SureText:確認(rèn)修改單擊按鈕確認(rèn)密碼修改Button2Name:btn_CancleText:取消單擊按鈕取消密碼修改二、任務(wù)實(shí)施:打開主窗體(frmMain),添加“密碼管理”的下級菜單“修改密碼”,如圖所示。3、添加用戶修改密碼窗體(frmModifyPsd)二、任務(wù)實(shí)施:雙擊【修改密碼】菜單,為該菜單按鈕添加Click事件,使得跳轉(zhuǎn)到修改密碼窗體(frmModifyPsd),代碼如下:3、添加用戶修改密碼窗體(frmModifyPsd)privatevoid修改密碼ToolStripMenuItem_Click(objectsender,EventArgse){frmModifyPsdfrmmodifypsd=newfrmModifyPsd();frmmodifypsd.MdiParent=this;frmmodifypsd.Show();}二、任務(wù)實(shí)施:打開修改密碼窗體(frmModifyPsd),雙擊【確認(rèn)修改】按鈕,為該按鈕添加Click事件,當(dāng)修改密碼成功時(shí),彈出圖所示消息框。3、添加用戶修改密碼窗體(frmModifyPsd)二、任務(wù)實(shí)施:當(dāng)輸入舊密碼錯(cuò)誤時(shí),彈出左圖所示消息框;當(dāng)輸入的新密碼兩次不一致時(shí),彈出右圖所示消息框。代碼如下:3、添加用戶修改密碼窗體(frmModifyPsd)二、任務(wù)實(shí)施:代碼如下:3、添加用戶修改密碼窗體(frmModifyPsd)privatevoidbtn_Sure_Click(objectsender,EventArgse){StringstrOld=this.txt_OldPassWord.Text.Trim();StringstrNew=this.txt_newpassword.Text.Trim();StringstrConfirm=this.txt_NewRePassword.Text.Trim();Stringsql=String.Format("selectcount(*)fromtb_UserMsgwherepassword='{0}'",strOld);intnum=(int)DBHelper.QuerySingle(sql);if(num<=0){MessageBox.Show("輸入的舊密碼錯(cuò)誤,請重新輸入!");return;}if(strNew.Length<6||strConfirm.Length<6){二、任務(wù)實(shí)施:代碼如下:3、添加用戶修改密碼窗體(frmModifyPsd)MessageBox.Show("輸入新密碼的長度小于6,請重新輸入!");return;}if(strNew!=strConfirm){MessageBox.Show("兩次密碼輸入不相同,請重新輸入!");return;}sql=String.Format("Updatetb_UserMsgsetpassword='{0}'",strNew);if(DBHelper.ExecuteNonSql(sql)){MessageBox.Show("修改密碼成功!");}else{MessageBox.Show("修改密碼失??!");}}二、任務(wù)實(shí)施:雙擊【取消】按鈕,為該按鈕添加Click事件,關(guān)閉密碼修改窗口,代碼如下:3、添加用戶修改密碼窗體(frmModifyPsd)privatevoidbtn_Cancle_Click(objectsender,EventArgse){this.Close();}五、任務(wù)小結(jié):登錄成功跳轉(zhuǎn)到主界面時(shí),要將用戶名窗體給主窗體,所采用的方法是對主窗體的構(gòu)造函數(shù)添加參數(shù)。第11章綜合項(xiàng)目——小賬本

——任務(wù)六記賬功能一、教學(xué)目標(biāo): 掌握DataGirdView控件的使用; 掌握DataGirdView控件的CellEndEdit事件;二、任務(wù)描述:1、加入帳目:選擇消費(fèi)日期、填寫消費(fèi)項(xiàng)目、在下拉菜單中選擇消費(fèi)類型、填入消費(fèi)金額后,單擊【加入帳目】按鈕,彈出”插入數(shù)據(jù)成功”對話框,單擊【確定】后,可以看到在下方表格中看到新添加的消費(fèi)項(xiàng)目,如下圖所示。用戶記賬功能模塊包括加入帳目、刪除帳目和修改帳目這三塊。二、任務(wù)描述:2、刪除帳目:在表格中選中要?jiǎng)h除的消費(fèi)項(xiàng)目,單擊【刪除】按鈕,彈出”刪除數(shù)據(jù)成功”對話框,單擊【確定】后,可以看到在下方表格中看到被選擇的消費(fèi)項(xiàng)目已經(jīng)被刪除,如圖所示。用戶記賬功能模塊包括加入帳目、刪除帳目和修改帳目這三塊。二、任務(wù)描述:3、修改帳目:在表格中選中要修改消費(fèi)項(xiàng)目,雙擊該條消費(fèi)項(xiàng)目中某一項(xiàng),直接鍵入新值,按下回車鍵,彈出”修改數(shù)據(jù)成功”對話框,單擊【確定】后,可以看到在下方表格中看到消費(fèi)項(xiàng)目已經(jīng)被更改,如圖所示。用戶記賬功能模塊包括加入帳目、刪除帳目和修改帳目這三塊。三、任務(wù)實(shí)施:1、添加登記帳目窗體(frmRegisterBill),按照左圖進(jìn)行窗體布局。設(shè)置窗體及部分控件屬性如右表所示:窗體frmRegisterBill屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmRegisterBill窗體名稱Lable1Name:lb_UserName顯示登錄用戶名DateTimePickerName:dateTimePicker1用戶選擇消費(fèi)時(shí)間TextBox1Name:txt_BillItem輸入消費(fèi)項(xiàng)目Combox1Name:cb_BillType輸入消費(fèi)類型TextBox2Name:txt_ItemPrice輸入消費(fèi)金額Button1Name:btn_AddBillText:加入項(xiàng)目單擊按鈕添加一條消費(fèi)記錄DataGridView1Name:dataGridView1SelectionMode:FullRowSelec顯示選定日期的所有消費(fèi)記錄。設(shè)置選擇模式為整行選中。Button2Name:btn_delText:刪除單擊按鈕刪除選中的一條消費(fèi)記錄TextBox3Name:txt_Count顯示選定日期的消費(fèi)記錄條數(shù)TextBox4Name:txt_Amount顯示選定日期的消費(fèi)總金額三、任務(wù)實(shí)施:1、添加登記帳目窗體(frmRegisterBill)設(shè)置DataGridView顯示列。單擊DataGridView控件右上角的智能標(biāo)簽,選擇“EditColumns”,如圖所示。三、任務(wù)實(shí)施:1、添加登記帳目窗體(frmRegisterBill)打開編輯列窗口,如圖所示。三、任務(wù)實(shí)施:1、添加登記帳目窗體(frmRegisterBill)設(shè)置DataGridView列如下表所示:DataGridView列設(shè)置HeaderTextDataPropertyNameVisible說明序號ConIdFalse(不可見)消費(fèi)記錄序號列,不顯示在DataGridView控件中。消費(fèi)項(xiàng)目ConItemTrue顯示消費(fèi)項(xiàng)目消費(fèi)類型ConTypeTrue顯示消費(fèi)類型消費(fèi)金額ConMoneyTrue顯示消費(fèi)金額消費(fèi)時(shí)間ConDateTrue顯示消費(fèi)日期三、任務(wù)實(shí)施:1、添加登記帳目窗體(frmRegisterBill)定義公用對象及變量:frmMainmainform;//聲明主窗體

stringusername;//保存登錄用戶名

stringstrsql;//執(zhí)行的SQL語句三、任務(wù)實(shí)施:2、為窗體添加Load事件。雙擊按frmRegisterBill窗體空白處,為“登記帳目”窗體添加Load事件。代碼如下:privatevoidfrmRegisterBill_Load(objectsender,EventArgse){mainform=(frmMain)this.Owner;username=mainform.GetMainvalue;//獲取主窗體傳來的值

label10.Text=username;//顯示主窗體傳來的值

dateTimePicker1.Value=DateTime.Now;//顯示當(dāng)前日期的消費(fèi)情況

stringstrDate=dateTimePicker1.Value.ToShortDateString();

//要執(zhí)行的SQL語句

stringstrsql=String.Format("select*fromtb_BillwhereconDate='{0}'",strDate);ds=DBHelper.QueryLots(strsql,"Bill");this.dataGridView1.DataSource=ds.Tables["Bill"];GetCount();//顯示消費(fèi)記錄總條數(shù)

GetAmount();//顯示消費(fèi)總金額

}三、任務(wù)實(shí)施:2、為窗體添加Load事件。添加方法GetCount,用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總條數(shù),并顯示在名為txt_Count的文本框中。代碼如下://統(tǒng)計(jì)消費(fèi)項(xiàng)目的數(shù)量

publicvoidGetCount(){intcount=0;foreach(DataRowdrinds.Tables["Bill"].Rows){if(dr.RowState.ToString()!="Deleted"){count+=1;}}this.txt_Count.Text=count.ToString();}三、任務(wù)實(shí)施:2、為窗體添加Load事件。添加方法GetAmount,用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總金額,并顯示在名為txt_Amount的文本框中。代碼如下://統(tǒng)計(jì)消費(fèi)項(xiàng)目的金額

publicvoidGetAmount(){floatamount=0.0f;foreach(DataRowdrinds.Tables["Bill"].Rows){if(dr.RowState.ToString()!="Deleted"){amount+=float.Parse(dr["conMoney"].ToString());}}this.txt_Amount.Text=amount.ToString();}三、任務(wù)實(shí)施:3、插入消費(fèi)記錄。雙擊按鈕【插入項(xiàng)目】,為其添加Click事件,當(dāng)插入消費(fèi)記錄成功時(shí),彈出如圖所示的對話框。三、任務(wù)實(shí)施:3、插入消費(fèi)記錄。單擊對話框中的【確定】按鈕,在DataGridView控件中添加一條新的消費(fèi)記錄。代碼如下://加入賬目

privatevoidbtn_AddBill_Click(objectsender,EventArgse){//消費(fèi)項(xiàng)目

StringstrItemName=this.txt_BillItem.Text.Trim();//消費(fèi)類型

intitemType=this.cb_BillType.SelectedIndex;//消費(fèi)金額

floatitemAmount=float.Parse(this.txt_ItemPrice.Text.Trim());三、任務(wù)實(shí)施:3、插入消費(fèi)記錄。單擊對話框中的【確定】按鈕,在DataGridView控件中添加一條新的消費(fèi)記錄。代碼如下:

//消費(fèi)時(shí)間

DateTimeitemDate=this.dateTimePicker1.Value;strsql=String.Format("insertintotb_Bill(ConItem,ConType,ConMoney,ConDate)values('{0}','{1}','{2}','{3}')",strItemName,itemType,itemAmount,itemDate.ToShortDateString());if(DBHelper.ExcuseSql(strsql)){MessageBox.Show("插入數(shù)據(jù)成功!");}三、任務(wù)實(shí)施:3、插入消費(fèi)記錄。單擊對話框中的【確定】按鈕,在DataGridView控件中添加一條新的消費(fèi)記錄。代碼如下:else{MessageBox.Show("插入數(shù)據(jù)失敗!");}//將數(shù)據(jù)庫中的信息顯示在dataGridView中

stringstrDate=dateTimePicker1.Value.ToShortDateString();//要執(zhí)行的SQL語句

strsql=String.Format("select*fromtb_BillwhereconDate='{0}'",strDate);ds=DBHelper.QueryLots(strsql,"Bill");this.dataGridView1.DataSource=ds.Tables["Bill"];}//更新統(tǒng)計(jì)數(shù)據(jù)GetCount();GetAmount();三、任務(wù)實(shí)施:4、刪除消費(fèi)記錄。雙擊按鈕【刪除】,為其添加Click事件,當(dāng)刪除消費(fèi)記錄成功時(shí),彈出如圖所示的對話框。三、任務(wù)實(shí)施:4、刪除消費(fèi)記錄。單擊對話框中的【確定】按鈕,在DataGridView控件中刪除被選中的消費(fèi)記錄。代碼如下://刪除行

privatevoidbtn_del_Click(objectsender,EventArgse){boolresult;//刪除數(shù)據(jù)庫中的行

for(inti=0;i<dataGridView1.Rows.Count;i++){if((bool)dataGridView1.Rows[i].Selected==true){result=DBHelper.ExcuseSql(String.Format("deletefromtb_BillwhereConId='{0}'",dataGridView1.Rows[i].Cells["ConId"].Value.ToString()));三、任務(wù)實(shí)施:4、刪除消費(fèi)記錄。單擊對話框中的【確定】按鈕,在DataGridView控件中刪除被選中的消費(fèi)記錄。代碼如下:

if(result)

{MessageBox.Show("刪除數(shù)據(jù)成功!");}else

{MessageBox.Show("刪除數(shù)據(jù)失敗!");}}}//將數(shù)據(jù)庫中的信息顯示在dataGridView中

stringstrDate=dateTimePicker1.Value.ToShortDateString();//要執(zhí)行的SQL語句strsql=String.Format("select*fromtb_BillwhereconDate='{0}'",strDate);ds=DBHelper.QueryLots(strsql,"Bill");this.dataGridView1.DataSource=ds.Tables["Bill"];//更新統(tǒng)計(jì)數(shù)據(jù)GetCount();GetAmount();}三、任務(wù)實(shí)施:5、修改消費(fèi)記錄。為DataGridView添加CellEndEdit事件,當(dāng)修改完DataGridView中的單元格數(shù)據(jù)后,回車保存修改數(shù)據(jù)。單擊選中窗體中的DataGridView控件,找到屬性窗口的CellEndEdit事件,將光標(biāo)移動(dòng)到后方空白處,單擊回車,即為DataGridView添加CellEndEdit事件,如圖所示。三、任務(wù)實(shí)施:5、修改消費(fèi)記錄。代碼如下://修改完一個(gè)數(shù)據(jù)回車,保存回?cái)?shù)據(jù)庫

privatevoiddataGridView1_CellEndEdit(objectsender,DataGridViewCellEventArgse){if(e.RowIndex>=0)//如果選中一個(gè)單元格

{switch(e.ColumnIndex){case1://修改消費(fèi)項(xiàng)目

strsql=String.Format("updatetb_BillsetconItem='{0}'whereconId='{1}'",dataGridView1.Rows[e.RowIndex].Cells["ConItem"].Value.ToString(),dataGridView1.Rows[e.RowIndex].Cells["ConId"].Value.ToString());break;三、任務(wù)實(shí)施:5、修改消費(fèi)記錄。代碼如下:case2://修改消費(fèi)類型

strsql=String.Format("updatetb_BillsetconType='{0}'whereconId='{1}'",dataGridView1.Rows[e.RowIndex].Cells["ConType"].Value.ToString(),dataGridView1.Rows[e.RowIndex].Cells["ConId"].Value.ToString());break;

case3://修改消費(fèi)金額

strsql=String.Format("updatetb_BillsetconMoney='{0}'whereconId='{1}'",dataGridView1.Rows[e.RowIndex].Cells["conMoney"].Value.ToString(),dataGridView1.Rows[e.RowIndex].Cells["ConId"].Value.ToString());break;三、任務(wù)實(shí)施:5、修改消費(fèi)記錄。代碼如下:case4://修改消費(fèi)時(shí)間

strsql=String.Format("updatetb_BillsetconDate='{0}'whereconId='{1}'",dataGridView1.Rows[e.RowIndex].Cells["conDate"].Value.ToString(),dataGridView1.Rows[e.RowIndex].Cells["ConId"].Value.ToString());break;}}if(DBHelper.ExcuseSql(strsql)){MessageBox.Show("修改數(shù)據(jù)成功!");}else{MessageBox.Show("修改數(shù)據(jù)失??!");}}}五、任務(wù)小結(jié):在DataGridView控件中進(jìn)行數(shù)據(jù)的顯示、刪除和修改,需要結(jié)合DBHelper.cs類中的方法。第11章綜合項(xiàng)目——小賬本

——任務(wù)七每日清單一、教學(xué)目標(biāo): 掌握DataGridView控件列設(shè)置方法; 掌握DateTimePicker控件的應(yīng)用。二、任務(wù)描述:每日清單功能模塊主要功能是根據(jù)選擇的日期,查詢當(dāng)天的消費(fèi)明細(xì),同時(shí)統(tǒng)計(jì)消費(fèi)總體情況,并對每類消費(fèi)進(jìn)行總計(jì)。讓用戶清楚的明白生活的各項(xiàng)開支情況。運(yùn)行如圖所示。三、任務(wù)分析:該窗體的數(shù)據(jù)由4部分構(gòu)成:當(dāng)日消費(fèi)詳細(xì)情況、當(dāng)日分類消費(fèi)情況、當(dāng)日消費(fèi)總記錄條數(shù)和當(dāng)日消費(fèi)總額,為了在選擇不同日期時(shí)對數(shù)據(jù)進(jìn)行刷新,把這4部分?jǐn)?shù)據(jù)的查詢顯示分別寫到4個(gè)方法中。QueryDetail方法:用于顯示按日查詢消費(fèi)詳細(xì)信息。QueryClass方法:用于顯示當(dāng)前日期下,按消費(fèi)類型分類的消費(fèi)總金額。GetItemCount方法:用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總條數(shù)。GetItemsAmount方法:用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總金額。四、任務(wù)實(shí)施:1、添加每日清單窗體(frmDayBill),按照左圖進(jìn)行窗體布局。設(shè)置窗體及部分控件屬性如右表所示:窗體frmDayBill屬性設(shè)置對象屬性設(shè)置功能Form1Name:frmDayBill窗體名稱DateTimePicker1Name:dateTimePicker1用戶選擇消費(fèi)日統(tǒng)計(jì)時(shí)間DataGridView1Name:dgv_Detail顯示選定日期的所有消費(fèi)記錄。Button2Name:btn_delText:刪除單擊按鈕刪除選中的一條消費(fèi)記錄TextBox1Name:txt_Count顯示選定日期的消費(fèi)記錄總條數(shù)TextBox2Name:txt_Amount顯示選定日期的消費(fèi)總金額DataGridView2Name:dgv_Amount顯示選定日期消費(fèi)分類統(tǒng)計(jì)四、任務(wù)實(shí)施:1、添加每日清單窗體(frmDayBill)設(shè)置DataGridView1顯示列。單擊DataGridView1控件右上角的智能標(biāo)簽,選擇“EditColumns”,對DataGridView進(jìn)行列設(shè)置,與任務(wù)11.6中的設(shè)置一致。設(shè)置DataGridView列如下表所示:設(shè)置DataGridView1控件顯示列HeaderTextDataPropertyNameVisible說明序號ConIdFalse(不可見)消費(fèi)記錄序號列,不顯示在DataGridView控件中。消費(fèi)項(xiàng)目ConItemTrue顯示消費(fèi)項(xiàng)目消費(fèi)類型ConTypeTrue顯示消費(fèi)類型消費(fèi)金額ConMoneyTrue顯示消費(fèi)金額消費(fèi)時(shí)間ConDateTrue顯示消費(fèi)日期四、任務(wù)實(shí)施:1、添加每日清單窗體(frmDayBill)設(shè)置DataGridView2顯示列,如下表所示:設(shè)置DataGridView2控件顯示列HeaderTextDataPropertyNameVisible說明消費(fèi)類型ConTypeTrue顯示消費(fèi)類型消費(fèi)金額ConMoneyTrue顯示分類消費(fèi)類型的總金額四、任務(wù)實(shí)施:2、定義方法。定義方法QueryDetail顯示按日查詢消費(fèi)詳細(xì)信息。在文件frmDayBill.cs中定義方法QueryDetail,代碼如下:publicvoidQueryDetail(){//顯示當(dāng)前日期的消費(fèi)情況

stringstrDate=dateTimePicker1.Value.ToShortDateString();//要執(zhí)行的SQL語句

stringstrsql=String.Format("select*fromtb_BillwhereConDate='{0}'",strDate);ds=DBHelper.QueryLots(strsql,"Bill");this.dgv_Detail.DataSource=ds.Tables["Bill"];}四、任務(wù)實(shí)施:2、定義方法。定義方法QueryClass顯示當(dāng)前日期下,按消費(fèi)類型分類的消費(fèi)總金額。在文件frmDayBill.cs中定義方法QueryClass,代碼如下:

//按消費(fèi)類型分類,按日查詢分類金額

publicvoidQueryClass(){StringstrDate=dateTimePicker1.Value.ToShortDateString();Stringsql=String.Format("selectConType,sum(ConMoney)asConMoneyfromtb_BillwhereConDate='{0}'groupbyConType",strDate);DataSetds=DBHelper.QueryLots(sql,"Class");this.dgv_Amount.AutoGenerateColumns=false;this.dgv_Amount.DataSource=ds.Tables["Class"].DefaultView;}四、任務(wù)實(shí)施:2、定義方法。定義方法GetItemCount,用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總條數(shù),并顯示在名為txt_Count的文本框中。代碼如下:

//統(tǒng)計(jì)日明細(xì)信息中記錄的條數(shù)

publicvoidGetItemCount(){StringstrDate=this.dateTimePicker1.Value.ToShortDateString();Stringsql=String.Format("Selectcount(*)fromtb_BillwhereConDate='{0}'",strDate);intnum=(int)DBHelper.QuerySingle(sql);this.txt_Count.Text=num.ToString();}四、任務(wù)實(shí)施:2、定義方法。定義方法GetItemsAmount,用于統(tǒng)計(jì)當(dāng)前日期的消費(fèi)總金額,并顯示在名為txt_Amount的文本框中。代碼如下:

//統(tǒng)計(jì)日明細(xì)信息中的總金額

publicvoidGetItemsAmount(){StringstrDate=this.dateTimePicker1.Value.ToShortDateString();Stringsql=String.Format("Selectsum(ConMoney)fromtb_BillwhereConDate='{0}'",strDate);objecto=DBHelper.QuerySingle(sql);if(o.ToString()==""){this.txt_Amount.Text="0.0";}else{this.txt_Amount.Text=(float.Parse(o.ToString())).ToString();}}四、任務(wù)實(shí)施:3、為窗體添加Load事件。雙擊窗體,為其添加Load事件,在Load方法中添加步驟2中所定義的方法。代碼如下:privatevoidfrmDayBill_Load(objectsender,EventArgse){QueryDetail();QueryClass();GetItemCount();GetItemsAmount();}四、任務(wù)實(shí)施:4、為日期控件DateTimePicker1添加ValueChanged事件,當(dāng)選擇不同日期時(shí)顯示相應(yīng)的消費(fèi)情況,代碼如下:privatevoiddateTimePicker1_ValueChanged(objectsender,EventArgse){QueryDetail();QueryClass();GetItemCount();GetItemsAmount();}五、任務(wù)小結(jié):把數(shù)據(jù)查詢分為QueryDetail()、QueryClass()、GetItemCount()和GetItemsAmount()四個(gè)方法。每次選擇新的日期后應(yīng)該更新查詢結(jié)果,所以添加了DateTimePicker控件的ValueChanged方法。第11章綜合項(xiàng)目——小賬本

——任務(wù)八每月帳目總匯一、教學(xué)目標(biāo): 掌握NumericUpDown和ComboBox控件的使用; 掌握窗體Load事件和窗體構(gòu)造函數(shù)的作用。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論