




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1第5章流程控制語句與函數5.1控制程序流程5.2使用選擇語句5.3使用循環語句5.4使用goto語句5.5嵌套使用流程控制語句5.6函數5.7常用內部函數5.8小結25.1控制程序流程控制程序流程的方法很多,主要有如下3種:選擇語句:如同考試中的單選題目,選擇執行了某條語句,另一條就不會再執行。循環語句:在需要將一個表達式進行多次重復運算時,可以使用循環語句,指定其循環次數或者界定其退出循環的條件。goto語句:即標記語句,使程序自動跳到標記語句處執行,標記語句執行完畢又直接回到調用標記語句處。需要注意的是,在程序中最好不使用goto語句,因為該語句會使得程序代碼可讀性很差。35.2使用選擇語句5.2.1if語句用if語句實現單分支選擇結構:if(表達式)語句;語句中的表達式通常用于表示條件,應為關系表達式或邏輯表達式。語句只是一條語句,如果在條件滿足時需要執行多條語句,應使用花括號({})括起來,使之成為語句塊。“(表達式)”中的括號不能省略。45.2.1if語句示例:staticvoidMain(string[]args){doublescore;score=Convert.ToDouble(Console.ReadLine());if(score>=60)Console.WriteLine("恭喜你,通過了這次考試!");Console.Read();}55.2.1if語句用if語句實現雙分支選擇結構:
if(表達式)
語句1;else
語句2;65.2.1if語句用if語句實現多分支選擇結構If(表達式1)語句1;elseif(表達式2)語句2;elseif(表達式3)語句3;……else語句n;75.2.2switch語句在C#語言中,除使用if語句實現多分支外,也可以使用switch語句。switch(表達式){case常量表達式1:
語句1;
break;case常量表達式2:
語句2;
break;……case常量表達式n:
語句n;
break;default:
語句n+1;
break;}85.2.2switch語句switch表達式的類型為sbyte、byte、short、ushort、int、uint、long、ulong、char、string、枚舉或用戶自定義類型。每個case分支中的常量表達式必須能隱式轉換為switch表達式的類型,且常量表達式的值不能相同,從而保證分支選擇的唯一性。如果某個分支有多條語句,可以用花括號括起來,也可以不加花括號。default分支可有可無,但是每個switch語句最多只能有一個default分支。當default語句缺省時,如果switch后面的表達式值與任意常量表達式值不相等,將不執行任何語句,直接退出switch語句。各分支語句中的break不可省略,否則將會出現錯誤,這一點跟Java和C++不同。使用switch語句時一定要注意,case后面必須是常量表達式,以冒號結束而不是分號。95.2.2switch語句示例:staticvoidMain(string[]args){doublescore;charclass1;inti;Console.WriteLine("請輸入你的成績:");score=Convert.ToDouble(Console.ReadLine());i=(int)score/10;switch(i){case10:case9:class1='A';break;case8:class1='B';break;case7:class1='C';break;case6:class1='D';break;default:class1='E';break;}Console.WriteLine("你的成績等級為:{0}",class1);}105.2.3switch語句的控制類型switch語句的控制可以按case語句的排列先后順序進行,也可以通過跳轉語句來實現。示例:實現switch語句的跳轉語句。
staticvoidMain(string[]args){intdays=0;intmonth=3;switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case2:days=28;break;case4:case6:case9:case11:days=30;break;default:days=0;break;}Console.WriteLine("thismonthhas{0}days",days);}115.3使用循循環語語句語句while語句是是用來來實現現循環環的語語句,,該類類循環環先測測試循循環條條件再再執行行循環環體,,按照照不同同條件件執行行循環環體部部分零零次或或多次次。它它的語語法形形式如如下。。while(表達式式)循環體體部分分;12語句注意::循環體體如果果包含含一條條以上上的語語句,,應以以花括括號括括起來來作為為復合合語句句。在循環環體中中,通通常應應包含含改變變循環環條件件表達達式值值的語語句,,否則則便會會造成成無限限循環環。由于先先判斷斷條件件,可可能出出現第第一次次測試試條件件時,,表達達式的的值就就為false。此種種情況況下循循環體體將一一次也也不執執行,,又稱稱“允允許0次循環環”。。13語句示例::classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;while(number<=10){sum+=number;number++;}Console.WriteLine("thesumis{0}",sum);Console.Read();}}執行上上述代代碼,,運行行結果果為::thesumis55。14語句do循環語語句實實現的的是直直到型型循環環,該該類循循環先先執行行循環環體再再測試試循環環條件件。do循環體體語句句while(表達式式);15語句示例::classTestWhile{staticvoidMain(string[]args){intnumber=1,sum=0;do{sum+=number;number++;}while(number<=10);Console.WriteLine("thesumis{0}",sum);Console.Read();}}執行行上上述述代代碼碼,,運運行行結結果果為為::thesumis55。16語句句for(表達達式式1;表達達式式2;表達達式式3)語句句;17語句句表達達式式1、2、3都可可以以省省略略,,分分號號不不能能省省略略。。如如果果表表達達式式1、2、3都省省略略,,則則將將無無終終止止地地執執行行循循環環體體。。表達達式式2是循循環環控控制制條條件件,,如如果果省省略略,,循循環環將將無無終終止止地地進進行行下下去去。。表達達式式1一般般用用于于為為循循環環控控制制條條件件賦賦初初值值,,也也可可以以是是與與循循環環變變量量無無關關的的其其他他表表達達式式。。如如果果表表達達式式1省略略或或者者是是與與循循環環條條件件無無關關的的其其他他表表達達式式,,則則應應該該在在for語句句之之前前給給循循環環控控制制條條件件賦賦初初值值。。表達式3一般用于于改變循循環控制制條件的的值。如如果表達達式3省略或者者是其他他與循環環條件無無關的表表達式,,則應該該在循環環體中另另有語句句改變循循環條件件,以保保證循環環能正常常結束。。18語句foreach(類型標標識符符in表達式)嵌入語句句;示例:staticvoidMain(string[]args){int[]list={10,20,30,40,50,60};foreach(intiinlist)Console.Write("{0,-5}",i);Console.Read();}19語句和continue語句break語句用于于跳出包包含它的的switch、while、do、for、foreach語句。如果break不是在switch、while、do、for、foreach語句塊中中,將發發生編譯譯錯誤。。當switch、while、do、for、foreach語句相互互嵌套時時,break語句只是是跳出直直接包含含它的語語句塊。。20語句和continue語句classTestBreak{staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")break;Console.WriteLine("youentered:{0}",s);}Console.Read();}}215.3.5break語句和continue語句continue語句類似于于break語句,也必必須用于while、dowhile、for、foreach語句,它只只從循環的的當前迭代代中退出,,然后在循循環的下一一次迭代開開始重新執執行,而不不是退出循循環。需要注意如如下事項:continue語句的目標標地址為直直接包含它它的while、dowhile、for或者foreach語句的嵌套套語句結尾尾。假如continue語句不能被被while、dowhile、for或者foreach語句包含,,將發生編編譯錯誤。。當有while、dowhile、for或者foreach語句相互嵌嵌套時,continue語句只適用用于直接包包含它的語語句塊。225.3.5break語句和continue語句示例staticvoidMain(string[]args){for(inti=0;i<10;i++){Console.Write("enteraword:");strings=Console.ReadLine();if(s=="end")continue;Console.WriteLine("youentered:{0}",s);}Console.Read();}235.4使用goto語句goto語句是除選選擇語句、、循環語句句之外的控控制程序流流程的語句句,常用于于將程序流流程轉移出出嵌套范圍圍。goto語句的常見見用法為gotolable語句。其中中,lable為一個標簽簽,其語語法形式為為:標簽1:245.4使用goto語句示例:staticvoidMain(string[]args){intn=1,sum=0;lable:if(n<=5){sum=sum+n;n++;gotolable;}Console.WriteLine("sum={0}",sum);Console.Read();}255.5嵌套使用流流程控制語語句選擇結構的的嵌套::if(表達式1)if(表達式2)語句1else語句2elseif(表達式3)語句3else語句4265.5嵌套使用流流程控制語語句循環結構的的嵌套示例:staticvoidMain(string[]args){inti=1,a=0;for(;i<=5;i++){do{i++;a++;}while(i<3);i++;}Console.WriteLine("a的值為{0},i的值為{1}",a,i);Console.ReadLine();}275.6函數函數的定義義與使用函數在使用用之前必須須先定義,,函數定義義的形式如如下。函數修飾符符數據類型標標識符函函數名名(形式參數說說明列表){變量、數組組的定義語語句;其他可執行行部分}函數的返回回值是需要要返回給主主調函數的的處理結果果,由return語句給出。。對于無返回回值的函數數,其類型型標識符為為void,不需要return語句28函數的定義義與使用示例:編寫寫一個函數數,用于求求任意兩個個整數之間間所有數的的平方和。。classProgram{privatestaticintpfh(intx,inty){inti,sum=0;for(i=x;i<=y;i++)sum=sum+i*i;return(sum);}}29函數的定義義與使用函數的使用用:在類中的某某個函數中中,調用本本類中由“函數名”指定的函數數,其語法法形式如下下:函數名([實際參數列表表])調用另一個類類的非靜態函函數,其語法法形式如下::對象名.方法名([實際參數列表表])調用另一個類類的靜態函數數,其語法形形式如下:類名.方法名([實際參數列表表])30函數的參數傳傳遞參數傳遞中的的類型轉化示例:classProgram{staticfloatSqr(floatk){return(k*k);}staticvoidMain(string[]args){inty;floatyy;y=6;yy=Sqr(y);Console.WriteLine("{0}的平方是{1}",y,yy);Console.ReadLine();}}31函數的參數傳傳遞參數傳遞的類類型:值傳遞時參數的語法法形式如下::參數類型參參數名引用傳遞時參數的語法法形式如下::ref參數類型參參數名輸出傳遞時參數的語法法形式如下::out參數類型參參數名參數數組:使用params關鍵字聲明參參數,參數個個數為不確定定。32函數的參數傳傳遞值傳遞參數示例:classProgram{staticvoidswap(inta,intb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("請輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());swap(x,y);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}33函數的參數傳傳遞引用傳遞參數示例:classProgram{staticvoidswap(refinta,refintb){inti;i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;Console.WriteLine("請輸入x和y的值:");x=Convert.ToInt32(Console.ReadLine());y=Convert.ToInt32(Console.ReadLine());swap(refx,refy);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}34函數的參數傳傳遞輸出傳遞參數示例:classProgram{staticvoidswap(outinta,outintb){inti;a=Convert.ToInt32(Console.ReadLine());b=Convert.ToInt32(Console.ReadLine());i=a;a=b;b=i;}staticvoidMain(string[]args){intx,y;swap(outx,outy);Console.WriteLine("轉換后x和y的值為:{0},{1}",x,y);Console.ReadLine();}}35Ref與out的區別:out關鍵字會導致致參數通過引引用來傳遞,,這與ref關鍵字類似。。不同之處在于于:(1)ref傳進去的參數數必須在調用用前初始化,,而out不必,因為out的函數會先清清空變量,即即使變量已經經賦值。inti;SomeMethod(refi);//語法錯錯誤SomeMethod(outi);//通過36Ref與out的區別別:(2)ref傳進去去的參參數在在函數數內部部可以以直接接使用用,而而out不可。。publicvoidSomeMethod(refinti){intj=i;//通過//...}publicvoidSomeMethod(outinti){intj=i;//語法錯錯誤}(3)ref傳進去去的參參數在在函數數內部部可以以不被被修改改,但但out必須在在離開開函數數體前前進行行賦值值。37usingsystem;classtestapp{staticvoidouttest(outintx,outinty){//離開這這個函函數前前,必必須對對x和y賦值,,否則則會報報錯。。//y=x;//上面這這行會會報錯錯,因因為使使用了了out后,x和y都清空空了,,需要要重新新賦值值,即即使調調用函函數前前賦過過值也也不行行x=1;y=2;}staticvoidreftest(refintx,refinty){y=x;}38publicstaticvoidmain(){inta,b;//out使用前前,變變量可可以不不賦值值outtest(outa,outb);console.writeline("a={0};b={1}",a,b);intc=11,d=22;outtest(outc,outd);console.writeline("c={0};d={1}",c,d);intm,n;//reftest(refm,refn);//上面這這行會會出錯錯,ref使用前前,變變量必必須賦賦值into=11,p=22;reftest(refo,refp);console.writeline("o={0};p={1}",o,p);}39(4)ref:當需要要通過過調用用某函函數來來改變變實參參變量量的值值時,,使用用ref。out:主要是是為了了一個個方法法能返返回兩兩個以以上的的結果果。Ref與out的區別別:當一個個方法法需要要多個個返回回值時時,靠靠方法法返回回值((return)就不不能勝勝任,,幸好好.Net有out和ref關鍵字字。比如::登錄錄方法法,登登錄結結果有有成功功和失失敗,,但是是如果果失敗敗還要要知道道原因因。僅僅靠返返回值值就不不行了了,這這個就就可以以用out。boolLogin(stringname,stringpassword,outstringerrMsg){………}out方法參數數傳遞前前可以不不賦值,,但是方方法中必必須先賦賦值后使使用;ref方法參數數傳遞前前必須賦賦值,方方法中可可以直接接使用。。out側重輸出出(方法法傳遞前前,不知知道值,,調用方方法后獲獲得值)),ref側重更改改(調用用方法前前就有明明確的值值,方法法中發生生更改))。那么剛才才登陸的的例子到到底用ref還是out呢?這樣樣分析::如果成成功是不不需要errMsg的,如果果失敗調調用前errMsg的實參是是不需要要賦值的的,所以以應該側側重于輸輸出,使使用out比較合適適。40注:※對于值型變量量作為方法法參數時時,可以有如如上所述述三種情情況:1.沒有ref和out修飾(直接傳值值,不能改變變實參)2.使用ref修飾(引用傳遞遞,輸入,可以改變變實參)3.使用out修飾(引用傳遞遞,輸出,可以改變變實參)※對于引用類型型的變量的的三種情情況:1.沒有ref和out修飾(引用傳遞遞,可以改變變實參)2.使用ref修飾(與1類似。但但如果在在被調用用函數里里面把傳傳過來的的類=null,我們就可可以看出出區別了了)3.使用out修飾(引用傳遞遞,可以以改變實實參)Ref與out的區別::41函數的參參數傳遞遞參數數組組有時需要要傳遞的的參數個個數不確確定,例例如求幾幾個數的的平均值值。可以以使用params關鍵字聲聲明參數數的個數數為不確確定。42函數的參參數傳遞遞參數數組組示例:classProgram{publicstaticfloatAverage(paramslong[]array){longtotal=0,i;for(i=0;i<array.Length;i++){total=total+array[i];}return((float)total/array.Length);}staticvoidMain(string[]args){floatx=Average(1,2,3,5);Console.WriteLine("1、2、3、5的平均值值為{0}",x);x=Average(10,20,35,52);Console.WriteLine("10、20、35、52的平均值值為{0}",x);Console.ReadLine();}}43內聯函數數對于一些些功能簡簡單、規規模較小小又使用用頻繁的的函數,,CLR會做出是是否使用用內聯函函數的判判斷。內內聯函數數不在調調用時發發生控制制轉移,,而是在在編譯時時將函數數體嵌入入在每一一個調用用處,這這樣就節節省了參參數傳遞遞、控制制轉移等等消耗。。注意:在在何處內內聯代碼碼完全由由CLR判斷得出出,無法法使用諸諸如C++中inline的關鍵字字來控制制哪些方方法是內內聯的。。44函數重載載函數重載載允許一一個類中中有同名名的函數數存在,,即一個個類中可可以存在在兩個以以上的函函數名稱稱相同。。重載函數數的形參參必須不不同,可可以個數數不同或或者類型型不同。。示例:intadd(intx,inty);intadd(inta,intb);//錯誤!編編譯器不不以形參參名來區區分函數數intadd(intx,inty);voidadd(intx,inty);//錯誤!編譯譯器不以返返回值來區區分函數45函數重載示例:classProgram{publicstaticintAdd(inti,intj){returni+j;}publicstaticstringAdd(strings1,strings2){returns1+s2;}publicstaticlongAdd(longx){returnx+5;}staticvoidMain(string[]args){Console.WriteLine(Add(1,2));Console.WriteLine(Add("1","2"));Console.WriteLine(Add(10));Console.ReadLine();}}465.7常用內部函函數隨機函數介介紹在C#中要生成隨隨機數需要要使用Random類。該類類的主要方方法是Next方法,它生生成一個介介于兩個整數之間的隨機機數,其語語法形式如如下:publicvirtualintNext([intminValue,intmaxValue]);47隨機函數介介紹示例:classProgram{staticvoidMain(string[]args){Randomop1=newRandom(10);Randomop2=newRandom();intresult;result=op1.Next(10,99)+op2.Next(0,9);Console.WriteLine(result);Console.Read();}}由于結果是是隨機值,,所以這里里不再描述述運行結果果,48格式化函數數介紹.NET為處理數字字、日期以以及字符串串的格式化化提供了WriteLine方法、Format方法和ToString方法。通過過WriteLine方法和Format方法可對多多個變量進進行格式化化,ToString方法只能對對一個變量量進行格式式化。對于使用WriteLine方法和Format方法格式化化字符串,,規定格式式的一般語語法形式如如下。{N,[M][:格式碼精精度]}49格式化函數數介紹{N,[M][:格式碼精精度]}[]:表示其中中的內容為為可選項。。N:表示要格格式化的參參數的索引引。M:可選參數數,表示格格式化后的的參數所占占的寬度。。如果M是負數,那那么格式化化后的值就就是左對齊齊的;如果果M是正數,那那么格式化化后的值是是右對齊的的;如果未未指定M,則默認為為零。格式碼:可可選的格式式化代碼字字符串。精度:格式式化輸出的的有效位數數或小數位位數。50//部分數值格格式輸出方方式的例子子usingSystem;classFormating{publicstaticvoidMain(){Console.WriteLine("在寬度為的的空間里靠靠左對齊:{0,-10}",99);Console.WriteLine("在寬度為的的空間里靠靠右對齊:{0,10}",99);Console.WriteLine("在寬度為的的空間里靠靠左對齊:{0,-10}","LLL");Console.WriteLine("在寬度為的的空間里靠靠右對齊:{0,10}","RRR");Console.WriteLine("貨幣-{0:C}{1:C4}",88.8,-888.8);Console.WriteLine("10進制整數-{0:D5}",88);Console.WriteLine("科學計數-{0:E}",888.8);Console.WriteLine("固定小數點點-{0:F3}",888.8888);Console.WriteLine("浮點數-{0:G}",888.8888);Console.WriteLine("數字格式-{0:N}",8888888.8);Console.WriteLine("16進制格式-{0:X4}",88);Console.ReadLine();}}intval1=0;Intval2=123;stringval3="一個占位符符例子";Console.WriteLine("Values:{0},{1},這是{2}",val1,val2,val3);{N,[M][:格式碼精精度]}51日期函數介介紹用于處理時時間和日期期的對象為為DateTime結構和TimeSpan類。DateTime結構用于表表示日期和和時間,表表示范圍在在0001年1月1日午夜00:00:00到9999年12月31日晚上11:59:59之間間的的日日期期和和時時間間,,最最小小時時間間單單位位等等于于100納秒秒。。TimeSpan類可可以以表表示示一一個個時時間間間間隔隔,,表表示示范范圍圍可可以以在在Int64.MinValue到Int64.MaxValue之間間。。52日期期函函數數介介紹紹DateTime結構構的的常常用用方法法如下下::AddYears、AddMonths、AddDays、AddHours、AddMinutes、AddSeconds方法法,,用用于于將將指指定定的的年年、、月月、、日日、、時時、、分分、、秒秒加加到到DateTime上。。Substract方法法::日日期期相相減減。。IsLeapYear方法法::判判斷斷是是否否為為閏閏年年。。true為閏閏年年,,false為非非閏閏年年。。ToLongDateString和ToLongTimeString方法法::把把DateTime轉換換為為字字符符串串,,且且以以長長格格式式表表示示日日期期或或時時間間。。ToShortDateString和ToShortTimeString方法法::把把DateTime轉換換為為字字符符串串,,且且以以短短格格式式表表示示日日期期或或時時間間。。==、!=、<、>、>=、<=運算算符符::用用于于比比較較日日期期。。+、-運算算符符::用用于于日日期期的的加加、、減減。。53數學學運運算算函函數數介介紹紹Math類屬屬于于命命名名空空間間System,包包含含很很多多數數學學函函數數。。常用用方方法法如如下下::Abs方法法::返返回回值值指指定定數數字字的的絕絕對對值值。。例例如如,,代代碼碼Math.Abs(-3.5),結結果果為為3.5。Sqrt方法法::返返回回指指定定數數字字的的平平方方根根。。例例如如,,代代碼碼Math.Sqrt(9),結結果果為為3。Pow方法法::返返回回指指定定數數字字的的指指定定次次冪冪。。例例如如,,代代碼碼Math.Pow(2,3),結結果果為為8。Log方法法::返返回回指指定定數數字字的的對對數數。。例例如如,,代代碼碼Math.Log(8,2),結結果果為為3。Log10方法法::返返回回指指定定數數字字以以10為底底的的對對數數。。例例如如,,代代碼碼Math.Log10(100),結結果果為為2。54數學學運運算算函函數數介介紹紹Sin、Cos、Tan、Asin、Acos、Atan方法法::返返回回指指定定弧弧度度的的正正弦弦值值、、余余弦弦值值、、正正切切值值、、反反正正弦弦值值、、反反余余弦弦值值、、反反正正切切值值。。例例如如,,代代碼碼Math.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全測試面試題目及答案
- 教育與科技的結合醫療行業的數字化轉型
- 2025年現代缸項目市場調查研究報告
- 辦公效率提升的利器在線教育平臺的營銷與市場定位
- 教育平臺的數字化升級與PDCA循環管理
- 教育機構如何通過團隊建設推動數字化轉型
- 教育信息化建設的策略與實踐研究
- 教育科技的飛躍數字化工具在數學中的應用
- 教育創新實踐報告干細胞教學在辦公培訓中的應用
- 小學英語課堂教學中情感目標達成路徑探索-基于多維度視角的實踐研究
- 2025年高考數學二輪熱點題型歸納與演練(上海專用)專題02函數(九大題型)(原卷版+解析)
- 2024年浙江省中考社會試卷真題(含標準答案及評分標準)
- 第五版-FMEA培訓教材-新版
- NB-T32036-2017光伏發電工程達標投產驗收規程
- 食品安全與日常飲食智慧樹知到期末考試答案章節答案2024年中國農業大學
- PE袋化學品安全技術說明書MSDS(聚乙烯塑膠袋)
- 100以內進退位加減法口算題每天60道
- 醫院檢驗科實驗室生物安全管理手冊
- 七人學生小品《如此課堂》劇本臺詞手稿
- 分子的立體構型
- 英文版簡易-電商送貨單-產品隨行單模板
評論
0/150
提交評論