c++課程設計--字符串類的設計與實現_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  課 程 設 計 任 務 書</p><p><b>  目 錄</b></p><p>  1 需求分析- 1 -</p><p>  2 算法基本原理- 1 -</p><p>  3 類設計- 2 -</p><p>  4 詳細設計- 3 -</p>

2、<p>  4.1 類的接口設計- 3 -</p><p>  4.2 類的實現- 5 -</p><p>  4.3 主函數設計- 10 -</p><p>  5 DOS界面程序運行結果及分析- 11 -</p><p>  5.1 程序運行結果- 11 -</p><p>  5.2運行結

3、果分析- 12 -</p><p>  6 基于MFC的圖形界面程序開發(fā)- 13 -</p><p>  6.1 基于MFC的圖形界面程序設計- 13 -</p><p>  6.2 程序測試- 17 -</p><p>  6.3 MFC程序編寫總結- 19 -</p><p>  7 參考文獻- 19

4、-</p><p><b>  1 需求分析</b></p><p>  (1) 計算機處理的對象分為數值數據和非數值數據,字符串是最基本的非數值數據。其應用非常廣泛,它是許多軟件系統(tǒng)(如字符編輯、情報檢索、詞法分析、符號處理、自然語言翻譯等系統(tǒng))的操作對象。其重要性不言而喻。</p><p>  (2)字符串是字符的有限集合,可記作a=’a1

5、 …an’。其中a是字符串的名,單括號里的字符序列是字符串的值,單引號不是字符串的成分,其作用是為了避免變量名與常量混淆。ai(0<i<n+1)稱為字符串的元素,是構成字符串的基本單位。N表示字符串的長度,且n=>0,如果等于0,則稱a為空串,記作:a=’’。 </p><p><b>  2 算法基本原理</b></p><p>  (1)字符串從

6、結構上看是一種以字符為數據元素的線性表,從存儲結構的不同可分為順序表和鏈式存儲結構,它們都適用于字符串,但由于要求的操作不同,為了提高運算效率所選用的存儲結構也是不同的。對于字符串改動較頻繁的一般用鏈式存儲結構,而順序存儲結構能夠高效的讀取。所以各有優(yōu)點。本程序由于需要大量改動數據,理所當然的選擇鏈式存儲結構,其算法結構為:</p><p>  Typedef struct</p><p>

7、;<b>  {</b></p><p>  Char *ch; /*若字符串為空,則按長度分配存儲區(qū),否則為NULL */</p><p>  Int length; /*字符串的長度*、</p><p><b>  }</b></p><p> ?。?)本題字符串要求用堆來分

8、配字符串的存儲空間,采用堆分配函數malloc,它的格式為T->ch=(char *)malloc(sizeof(char)*len,就會為字符串分配內存。</p><p> ?。?)函數是有字符串類進行調用的,通過在主函數中定義字符串類的對象,作為函數的參數,對于需要改寫對象的需要進行址傳遞,我們可以通過函數在主函數中的反映來觀察他的執(zhí)行狀態(tài)。</p><p><b> 

9、 3 類設計</b></p><p><b>  4 詳細設計</b></p><p>  整個程序分為三個獨立的文檔,Linequ.h文件中包括矩陣類Matrix和線性方程組類Linequ的聲明,Linequ.cpp文件中包括這兩個類的成員函數實現文件;main.cpp文件包括程序的主函數,主函數中定義了一個類Linequ的對象,通過這個對象求解一個四元

10、線性方程組。</p><p>  4.1 類的接口設計</p><p>  //Linequ.h文件,實現類的聲明</p><p>  #include <iostream></p><p>  #include <cmath></p><p>  using namespace std;<

11、;/p><p>  class Matrix//基類Matrix聲明</p><p><b>  {</b></p><p>  public://外部接口</p><p>  Matrix(int dims=2);//構造函數</p><p>  ~Matrix();//析構

12、函數</p><p>  void SetMatrix(double *rmax);//矩陣賦初值</p><p>  void PrintM();//顯示矩陣</p><p>  protected:</p><p>  int index;//方陣的行數</p><p>  double* MatrixA

13、;//矩陣存放數組首地址</p><p><b>  };</b></p><p>  class Linequ:public Matrix//公有派生類Linequ聲明</p><p><b>  {</b></p><p>  public://外部接口</p>&

14、lt;p>  Linequ(int dims=2);//構造函數</p><p>  ~Linequ();//析構函數</p><p>  void SetLinequ(double *a, double *b);//方程賦值</p><p>  void PrintL();//顯示方程</p><p>  int

15、Solve();//全選主元高斯消去法求解方程</p><p>  void ShowX();//顯示方程的解</p><p>  private://私有數據</p><p>  double *sums;//方程右端項</p><p>  double *solu;//方程的解</p>&l

16、t;p><b>  };</b></p><p>  經過公有派生,Linequ類獲得了除構造函數、析構函數之外的Matrix類的全部成員,由于基類的成員是公有和保護類型,因此在派生類中的成員函數中,基類繼承來的成員全部可以訪問,而對于建立Linequ類對象的外部模塊來講,基類的保護成員是無法訪問的。通過保護訪問類型和公有的繼承方式,實現了基類Matrix的數據的有效共享和可靠保護。在

17、程序中,方程的系數矩陣、解以及右端項全部采用了動態(tài)內存分配技術,這些工作都是在基類、派生類的構造函數中完成,它們的清理工作在析構函數中完成。</p><p><b>  4.2 類的實現</b></p><p><b>  4.3 主函數設計</b></p><p>  int main()</p><

18、p><b>  {</b></p><p>  int a=1,p,len;</p><p>  MyString S;</p><p>  MyString st1;</p><p>  MyString st2;</p><p>  MyString sub;</p>&l

19、t;p>  MyString T;</p><p>  char ch1[20];</p><p><b>  char cl;</b></p><p>  cout<<"****************************歡迎進入字符串操作程序****************************"

20、<<endl;</p><p>  while (a!=0)</p><p>  { cout<<"-------------------------------------------------------------------------------"<<endl;</p><p>  cout&l

21、t;<"請選擇功能操作:"<<endl;</p><p>  cout<<"\n1.字符串的賦值\n2.字符串的長度\n3.字符串的比較\n4.字符串的連接\n5.求字符串的子串\n6.清空字符串\n0.退出"<<endl;</p><p><b>  cin >>a;</b>

22、;</p><p><b>  switch(a)</b></p><p><b>  {</b></p><p>  case 0:cout<<"******************************謝謝使用!祝您工作順利!*****************************"

23、;<<endl;break;</p><p>  case 1: cout<<"請輸入用于賦值新字符串"<<endl;</p><p><b>  cin>>ch1;</b></p><p>  InitString(&st1); </p><p

24、>  StrAssign(&st1,ch1);</p><p>  cout<<"字符串被賦的值為:";</p><p>  PrintString(st1);break ;</p><p>  case 2: cout<<"請輸入新字符串S"<<endl;</p>

25、<p><b>  cin>>ch1;</b></p><p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"長度為:"<<StrLength(st1)<<e

26、ndl;break;</p><p>  case 3:{ cout<<"請輸入要比較的兩個字符串S pk T"<<endl;</p><p>  cout<<"請輸入第一個字符串st1(長度<20:)";</p><p><b>  cin>>ch1;</

27、b></p><p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"請輸入第二個字符串st2(長度<20):";</p><p><b>  cin>>ch1;</b

28、></p><p>  InitString(&st2);</p><p>  StrAssign(&st2,ch1);</p><p>  StrCompare(st1,st2);</p><p>  int flag=StrCompare(st1,st2);</p><p>  if(flag

29、==0)</p><p><b>  {</b></p><p>  cout<<"字符串st1與st2相等"<<endl;</p><p><b>  }</b></p><p>  else if(flag>0)</p><p

30、><b>  {</b></p><p>  cout<<"字符串st1比st2大"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&

31、lt;/b></p><p>  cout<<"字符串st1比st2小"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break ;</b></

32、p><p>  case 4:cout<<"請輸入要連接的兩個字符串S1 & S2"<<endl;</p><p>  cout<<"請輸入第一個字符串(長度<20):";</p><p><b>  cin>>ch1;</b></p>

33、<p>  InitString(&st1);</p><p>  StrAssign(&st1,ch1);</p><p>  cout<<"請輸入第二個字符串(長度<20):";</p><p><b>  cin>>ch1;</b></p>&l

34、t;p>  InitString(&st2);</p><p>  StrAssign(&st2,ch1);</p><p>  InitString(&T);</p><p>  Concat(&T,st1,st2);</p><p>  cout<<"連接后的新字符串:"

35、;<<endl;</p><p>  PrintString(T);</p><p><b>  break;</b></p><p><b>  case 5:</b></p><p>  cout<<"請輸入主串S(長度<20):"<<

36、;endl;</p><p><b>  cin>>ch1;</b></p><p>  InitString(&S);</p><p>  StrAssign(&S,ch1);</p><p>  InitString(&sub);</p><p>  cou

37、t<<"請輸入起始位置p:"<<endl;</p><p><b>  cin>>p;</b></p><p>  cout<<"請輸入子串的長度len(請考慮主串的長度)"<<endl;</p><p><b>  cin>&g

38、t;len;</b></p><p>  cout<<"所求子串為:"<<endl;</p><p>  SubString(&sub,S,p,len);</p><p>  PrintString(sub);</p><p><b>  break;</b>

39、;</p><p>  case 6:cout<<"確定要清空的字符串(Y/N)"<<endl;</p><p><b>  cin>>cl;</b></p><p>  if(cl=='y'||cl=='Y')</p><p>&l

40、t;b>  {</b></p><p>  ClearString(&st1);</p><p>  ClearString(&st2);</p><p>  ClearString(&sub);</p><p>  ClearString(&T);</p><p>&

41、lt;b>  };</b></p><p>  cout<<"字符串操作清除成功!"<<endl;</p><p><b>  break;</b></p><p>  default:cout<<"操作錯誤!請輸入正確序號!"<<endl

42、;</p><p><b>  } </b></p><p><b>  };</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  主函數的設計思路是

43、通過定義mystring類的對象,然后通過生成的對象去調用相應的函數從而達到調試所編寫的函數功能的目的。此主函數有著演示函數的要求,為了使它能夠更靈活的進行函數的調用,首先設計了一個循環(huán)體,由整型變量a控制,當a=0時就結束循環(huán)。而在循環(huán)體中又由switch(a)函數來控制,通過輸入不同的a的值來控制不同的操作,即函數的演示。</p><p><b>  。</b></p>&

44、lt;p>  5 DOS界面程序運行結果及分析</p><p>  從它運行的界面可以看出,當進入函數調試狀態(tài)時我們可也通過輸入相應的操作序號來選擇不同的操作。例如選擇輸入1將進入字符串的賦值操作。下面就來看一下相應的函數。</p><p>  輸入1點回車鍵就被要求輸入要賦得值,函數原型為StrAssign(&T, chars),執(zhí)行后就把字符串chars賦給對象T了。&l

45、t;/p><p>  輸入2則進入字符串的長度函數,我們要測試它的功能只要輸入一個字符串就可以加以驗證。例如上圖所示輸入字符串為:sfdffgffh,則串長為9.</p><p>  選擇4則進行字符串的比較功能,這個函數需要讀取相比較的兩個字符串,通過對字符串的每個字符的逐個的比較有一個返回值返給調用函數。</p><p>  選擇4則進行字符串的連接功能,把一個字符

46、串連在另一個字符串的后面,如上圖所示:第一個字符串為dfghgh,另一個字符串為fgghf,則連接的字符串為dfghghfgghf。</p><p>  輸入5則選擇求字符串子串的功能,這個函數需要輸入一個主串,起始位置p和子串長度len,輸入好參數后就可輸出所求的子串了。</p><p>  因為上述字符串操作中都給字符串賦了值,所以需要字符串,回到初始狀態(tài)。</p>&l

47、t;p>  選擇0則結束函數演示。</p><p>  5.1 程序運行結果</p><p><b>  圖2 程序運行結果</b></p><p>  從圖2中可以看出,程序能夠實現全選主元高斯消去法對于線性方程組的求解,但是,對于求解結果的正確性問題卻無法獲知,為了能夠驗證求解結果的正確性,考慮將求解結果x帶入原方程Ax=b中,如果滿

48、足原方程,即說明求解結果是正確的,否則,說明求解存在問題,需對程序進行進一步調試分析。</p><p>  為此,考慮在Linequ類中增加測試函數Test,用以驗證求解結果的正確性。</p><p>  void Linequ::test()//求解結果驗證函數</p><p><b>  {</b></p><p&g

49、t;  double *b2;</p><p>  b2=new double[index];</p><p>  for (int i=0;i<index;i++)//將解solu帶入原方程求出新的右端項b2</p><p><b>  {</b></p><p><b>  b2[i]=0;<

50、/b></p><p>  for (int j=0;j<index;j++)</p><p>  b2[i]=b2[i]+MatrixA[i*index+j]*solu[j];</p><p><b>  }</b></p><p>  for (i=0;i<index;i++)//輸出新的右端項&

51、lt;/p><p><b>  {</b></p><p>  cout<<b2[i]<<" ";</p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  

52、}</b></p><p>  在主函數main中增加語句:</p><p>  equ1.test();//驗證求解結果</p><p>  經過驗證的程序運行結果如圖3所示。</p><p>  圖3 程序運行結果的驗證</p><p>  從圖3中可以看出,方程組求解驗證的右端項結果與原右端項結果完

53、全一致,這說明了方程組求解的正確性。</p><p><b>  5.2運行結果分析</b></p><p>  整個程序中的矩陣存儲采用的是一維數組和動態(tài)內存分配方式。</p><p>  基類是專門處理矩陣的類,公有派生類Linequ是針對線性方程組而設計的,除了繼承基類的基本特征之外,結合問題的實際需要,增加了很多線性方程組所特有的成員,

54、使基類Matrix進一步具體化、特殊化,達到對問題的有效描述和處理。</p><p>  程序的訪問控制也是根據問題的需要而設計的。基類的數據成員的存儲、維護著矩陣數據,這正是派生類方程組的系數矩陣,使派生類解方程成員函數必須訪問的。利用保護成員特征,將基類數據成員的訪問控制屬性設置為保護型,在公有派生類Linequ中就可以訪問到基類繼承下來的保護成員;而對于類外的其余模塊,這些數據無法訪問。這樣,就在數據的共享

55、與隱藏之間尋找到一個比較恰當的結合點。</p><p>  在派生過程中,基類的構造函數和析構函數無法繼承下來,因此在派生類中需要添加構造函數、析構函數來完成派生類的初始化和最后清理工作。派生類的構造函數通過調用基類的構造函數來對基類數據進行初始化,本設計中,派生類Linequ的構造函數調用了基類Matrix的構造函數并傳遞必須的初始化參數。派生類的析構函數調用基類的構造函數,共同完成清理任務。</p>

56、;<p>  6 基于MFC的圖形界面程序開發(fā)</p><p>  MFC的圖形界面程序設計可在上述類設計的基礎上進行改造,MFC的圖形界面程序與DOS界面程序的主要不同點是:MFC圖形界面程序與DOS界面程序的輸入輸出方式不同,DOS界面程序采用字符交互式實現數據輸入輸出,主要通過cin,cout等I/O流實現,而MFC的圖形程序界面采用標準Windows窗口和控件實現輸入輸出,因此必須在MFC類

57、的框架下加入上面所設計的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。</p><p>  6.1 基于MFC的圖形界面程序設計</p><p><b> ?。?)界面設計</b></p><p>  首先在VC中建立MFC AppWizard(exe)工程,名稱為GuassLineGUI,并在向導的Step1中選擇Dialog base

58、d,即建立基于對話框的應用程序,如下圖4~5所示。</p><p>  圖4 建立MFC AppWizard(exe)工程</p><p>  圖5 建立基于對話框的應用程序</p><p>  將對話框資源中的默認對話框利用工具箱改造成如下界面,如圖6所示。</p><p>  圖6 方程組求解程序界面設計</p><p

59、>  圖6所示的界面中包含了3個Static Text控件,3個Button控件,和24個Edit Box控件,控件的基本信息列表如下表1所示。</p><p><b>  表1 控件基本信息</b></p><p><b> ?。?)代碼設計</b></p><p>  為了能夠將對話框界面上的控件能夠與代碼聯系起

60、來,需要為24個Edit Box控件建立Member Variables,按Ctrl+w鍵進入MFC ClassWizard界面,選擇Member Variables選項卡,可顯示成員變量設置界面,如圖7所示。</p><p>  圖7 成員變量設置界面</p><p>  通過該界面設置與24個Edit Box控件對應的成員變量,具體如表2所示。</p><p>

61、<b>  表2 控件基本信息</b></p><p>  下面是編寫代碼的重要階段,可以借鑒在設計基于DOS界面的控制臺應用程序的代碼,并將其作必要的改寫,具體改寫的步驟與內容如下。</p><p> ?、賹inequ.h文件和Linequ.cpp文件合并成一個文件,重新命名為Linequ.h,并將其加入MFC工程。</p><p> ?、?/p>

62、修改Linequ.h文件具體包括:</p><p>  將顯示矩陣PrintM()函數和顯示方程PrintL()函數注釋掉,因為在圖形界面的程序上已經不需要連個函數承擔輸出功能了;</p><p>  將輸出方程組的解ShowX()函數加入參數double x[]變成ShowX(double x[]),以實現將所求的解輸出至參數x中,并最終完成在對話框界面上的顯示;</p>

63、<p>  將全選主元高斯法求解函數Solve()中的兩處cout語句去掉,因為不需要也不能夠使用cout流實現輸出。</p><p> ?、墼趯υ捒蝾惖膶崿F文件GuassLineGUIDlg.cpp中加入#include "Linequ.h",以實現在該文件中可使用Linequ類。</p><p> ?、茉贕uassLineGUIDlg.cpp文件中加入

64、以下全局變量的定義,以實現GuassLineGUIDlg類和Linequ類之間的通信,具體代碼如下:</p><p>  double a[]=//系數矩陣</p><p><b>  {</b></p><p>  0.2368,0.2471,0.2568,1.2671,</p><p>  0.1968,0.2

65、071,1.2168,0.2271,</p><p>  0.1581,1.1675,0.1768,0.1871,</p><p>  1.1161,0.1254,0.1397,0.1490</p><p><b>  };</b></p><p>  double b[4]={ 1.8471,1.7471,1.6471

66、,1.5471};//方程右端項</p><p>  double *X;//存放方程組的解</p><p> ?、菥帉懽x入數據按鈕的消息處理函數,實現將矩陣和右端項的數據刷新到界面上,具體代碼如下:</p><p>  void CGuassLineGUIDlg::OnBUTTONRead() </p><p><b>  

67、{</b></p><p>  // TODO: Add your control notification handler code here</p><p>  m_A00=a[0]; m_A01=a[1]; m_A02=a[2]; m_A03=a[3];</p><p>  m_A10=a[5]; m_A11=a[6]; m_A12=a[7]; m

68、_A13=a[8];</p><p>  m_A20=a[9]; m_A21=a[10]; m_A22=a[11]; m_A23=a[12];</p><p>  m_A30=a[13]; m_A31=a[14]; m_A32=a[15]; m_A33=a[16];</p><p>  m_b0=b[0]; m_b1=b[1]; m_b2=b[2]; m_b3=b[

69、3];</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p> ?、蘧帉懹嬎闱蠼獍粹o的消息處理函數,實現將方程求解,具體代碼如下:</p><p>  void CGuassLineGUIDlg::OnButtonCalc() </p><p

70、><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  Linequ equ1(4);//定義一個四元方程組對象</p><p>  equ1.SetLinequ(a,b);//設置方程組</p>

71、<p>  X=new double[4];</p><p>  if(equ1.Solve())//求解方程組</p><p><b>  {</b></p><p>  equ1.ShowX(X);//輸出方程組的解</p><p>  m_X0=X[0];</p><p>  

72、m_X1=X[1];</p><p>  m_X2=X[2];</p><p>  m_X3=X[3];</p><p>  UpdateData(FALSE);</p><p><b>  }</b></p><p><b>  else</b></p>&l

73、t;p>  MessageBox("求解失敗");//求解失敗</p><p><b>  }</b></p><p>  ⑦退出按鈕比較簡單,代碼如下:</p><p>  void CGuassLineGUIDlg::OnBUTTONExit() </p><p><b>  

74、{</b></p><p>  // TODO: Add your control notification handler code here</p><p><b>  OnOK();</b></p><p><b>  }</b></p><p><b>  6.2 程序

75、測試</b></p><p>  運行程序后,首先出現的界面如圖8所示。</p><p>  圖8 程序初始運行界面</p><p>  單擊讀入數據按鈕后,可將系數矩陣A和方程組右端項b的數據在界面上顯示出來,如圖9所示。</p><p>  圖9 讀入數據后的界面</p><p>  單擊計算求解按鈕,

76、實現求解并將解顯示出來,如圖10所示。</p><p>  圖10 求解方程組后的界面</p><p>  單擊退出按鈕后,程序能夠正常實現退出。</p><p>  6.3 MFC程序編寫總結</p><p>  MFC程序與DOS界面程序編寫的最大不同是程序員需要將編程精力放在圖形界面設計、圖形界面輸入輸出以及界面元素和代碼對應轉換等問題

77、上,而這些問題在DOS界面程序中是不存在的,因此,初學MFC的編程者會對此感到困難,然而,當你編寫出一個基于Windows界面的程序時,所獲得的滿足程度遠遠大于簡單的DOS界面程序,況且基于Windows的圖形界面的程序設計已成為主流,作為程序員而言,是非學會不可的。</p><p>  本次課程設計作為編寫Windows程序的初步嘗試,能夠實現程序的主要功能,可以說是取得了成功,然而好的程序絕不僅僅是只有功能性

78、這一個指標,本此編寫的MFC程序雖然能實現所需功能,但從面向對象程序設計理念和圖形界面設計要求來說,尚存在不足,主要包括以下幾個方面。</p><p> ?。?)使用全局變量存儲矩陣系數、方程組右端向量和解向量本身有悖面向對象程序設計理念,需要將其改進,利用局部變量和其它方式實現存儲,作者認為最理想的方式是使用文件。</p><p> ?。?)將類的定義與實現放在同一個頭文件Linequ.

79、h中也違背了面向對象程序設計理念,需要將二者分開成定義文件和實現文件。</p><p> ?。?)圖10所示的界面中對解的顯示沒有格式化,導致界面看起來不夠規(guī)范,需要對解的輸出進行小數點固定位數顯示。</p><p><b>  7 參考文獻</b></p><p>  [1]徐士良. C常用算法程序集. 北京:清華大學出版社,1995<

80、/p><p>  [2]鄭莉,董淵,張瑞豐. C++語言程序設計(第3版). 北京:清華大學出版社,2007</p><p>  [3]錢能. C++程序設計教程(第二版). 北京:清華大學出版社,2007</p><p>  [4]陳志泊,王春玲. 面向對象的程序設計語言—C++. 北京:人民郵電出版社,2002</p><p>  [5]李慶

溫馨提示

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

評論

0/150

提交評論