數(shù)據(jù)庫課程設(shè)計報告_第1頁
數(shù)據(jù)庫課程設(shè)計報告_第2頁
數(shù)據(jù)庫課程設(shè)計報告_第3頁
數(shù)據(jù)庫課程設(shè)計報告_第4頁
數(shù)據(jù)庫課程設(shè)計報告_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

數(shù)據(jù)庫課程設(shè)計報告系院):計算機(jī)科學(xué)學(xué)院專業(yè)班級:計算機(jī)科學(xué)與技術(shù)姓名:學(xué)號:指導(dǎo)教師:設(shè)計時間:2023.12.12-2023.12.23設(shè)計地點:目錄一、課程設(shè)計目的 3二、設(shè)計任務(wù)及規(guī)定 3三、需求分析 4四、總體設(shè)計 4五、具體設(shè)計與實現(xiàn) 51、數(shù)據(jù)庫操作公共類: 52、登陸界面及代碼實現(xiàn) 103、系統(tǒng)管理員 124、圖書管理員 145、讀者管理員 205、讀者 27六、課程設(shè)計小結(jié) 28指導(dǎo)老師意見: 30一、課程設(shè)計目的通過對圖書管理信息系統(tǒng)的系統(tǒng)分析、系統(tǒng)設(shè)計、編碼和調(diào)試等工作的實踐,了解管理信息系統(tǒng)的一般設(shè)計方法和實現(xiàn)思緒,進(jìn)一步了解數(shù)據(jù)庫設(shè)計的基本理論及方法。二、設(shè)計任務(wù)及規(guī)定規(guī)定完畢一個具有一定實用價值的圖書管理信息系統(tǒng),重要任務(wù)涉及:?在SQLServer2023或SQLServer2023環(huán)境下建立圖書管理信息系統(tǒng)所使用的數(shù)據(jù)庫,運用公司管理器或查詢分析器建立各種數(shù)據(jù)庫對象,涉及:數(shù)據(jù)表、視圖、約束、存儲過程和觸發(fā)器等;?了解數(shù)據(jù)庫引擎技術(shù),并掌握使用ADO.NET連接數(shù)據(jù)庫服務(wù)器和客戶端應(yīng)用程序;?掌握使用C#或其他語言開發(fā)一個數(shù)據(jù)庫系統(tǒng)的基本方法和環(huán)節(jié),應(yīng)用程序的功能涉及:數(shù)據(jù)的輸入、修改和刪除;數(shù)據(jù)的瀏覽和查詢;數(shù)據(jù)的圖形化、報表以及打印輸出;系統(tǒng)的用戶登錄和權(quán)限管理;?了解多層C/S或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫系統(tǒng)的開發(fā)過程:需求分析、系統(tǒng)設(shè)計、系統(tǒng)實現(xiàn)及文檔的收集和整理。三、需求分析在做這個課程設(shè)計,重要涉及到的是我們以前學(xué)習(xí)過的C#的相關(guān)技術(shù)和數(shù)據(jù)庫的一些知識,就感覺上來講,這兩部分比重應(yīng)當(dāng)都差不多。要做出圖書管理系統(tǒng),一方面要對數(shù)據(jù)庫的建立、修改和維護(hù)可以比較熟悉的掌握,此外就是數(shù)據(jù)庫與VS之間的連接,是直接的綁定到VS里面還是通過查詢語句讓表的內(nèi)容在DataGridView控件中顯示出來,以及這兩種之間的優(yōu)點和壞處,在開始做這個課設(shè)之前,我們心里都要有數(shù),此外,考慮到的就是提高訪問的速度以及可維護(hù)性了。至于其他的功能的實現(xiàn),就各憑本領(lǐng)了。四、總體設(shè)計該系統(tǒng)重要由五大功能模塊組成:圖書管理、讀者管理、借閱管理、數(shù)據(jù)記錄和系統(tǒng)管理。各大功能模塊又由一些子功能模塊構(gòu)成,其總體的設(shè)計框架如下。五、具體設(shè)計與實現(xiàn)1、數(shù)據(jù)庫操作公共類:classSQLhelper{privatestaticSqlConnectionconn=newSqlConnection(@"DataSource=.\SQLEXPRESS;AttachDbFilename=D:\計算機(jī)的學(xué)習(xí)\數(shù)據(jù)庫\數(shù)據(jù)庫課程設(shè)計\汪剛\數(shù)據(jù)庫課程設(shè)計\數(shù)據(jù)庫課程設(shè)計\MSI_KS.mdf;IntegratedSecurity=True;ConnectTimeout=30;UserInstance=True");//Decrypt(System.Configuration.ConfigurationManager.AppSettings["connectionString"]));//打開數(shù)據(jù)庫鏈接publicstaticvoidOpenConn(){try{if(conn.State==ConnectionState.Closed)conn.Open();}catch{thrownewException("數(shù)據(jù)庫連接失敗!");}}//關(guān)閉數(shù)據(jù)庫連接privatestaticvoidCloseConn(){if(conn!=null){if(conn.State==ConnectionState.Open){conn.Close();}}}publicstaticintExecuteNonQuery(stringsql){introws=0;try{OpenConn();SqlCommandcmd=newSqlCommand(sql,conn);rows=cmd.ExecuteNonQuery();}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returnrows;}publicstaticintExecuteNonQuery(stringsql,SqlParameter[]parameters){introws=0;try{OpenConn();SqlCommandcmd=newSqlCommand(sql,conn);if(parameters!=null){foreach(SqlParameterparameterinparameters){cmd.Parameters.Add(parameter);}}rows=cmd.ExecuteNonQuery();}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returnrows;}publicstaticintExecuteStoredProc(stringstoredProcName,SqlParameter[]parameters){introws=0;try{OpenConn();SqlCommandcmd=newSqlCommand();cmd.CommandType=CommandType.StoredProcedure;cmd.CommandText=storedProcName;cmd.Connection=conn;if(parameters!=null){foreach(SqlParameterparameterinparameters){cmd.Parameters.Add(parameter);}}rows=cmd.ExecuteNonQuery();}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returnrows;}///<summary>///執(zhí)行簡樸的SQL語句,返回結(jié)果集中的首行首列///</summary>///<paramname="sql">要執(zhí)行的SQL查詢語句</param>///<returns></returns>publicstaticobjectExecuteScalar(stringsql){objectobj=null;try{OpenConn();SqlCommandcmd=newSqlCommand(sql,conn);obj=cmd.ExecuteScalar();}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returnobj;}///<summary>///執(zhí)行簡樸的SQL語句,返回結(jié)果集中的首行首列///</summary>///<paramname="sql">要執(zhí)行的SQL查詢語句</param>///<paramname="parameters"></param>///<returns></returns>publicstaticobjectExecuteScalar(stringsql,SqlParameter[]parameters){objectobj=null;try{OpenConn();SqlCommandcmd=newSqlCommand(sql,conn);if(parameters!=null){foreach(SqlParameterparameterinparameters){cmd.Parameters.Add(parameter);}}obj=cmd.ExecuteScalar();}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returnobj;}///<summary>///執(zhí)行一條帶參數(shù)的SQL語句,返回DataTable對象///</summary>///<paramname="sql">SQL查詢語句</param>///<paramname="parameters"></param>///<paramname="TableName">DataSet中的表名</param>///<returns></returns>publicstaticDataTableGetDataTable(stringsql,SqlParameter[]parameters,stringTableName){DataTabledt=null;{OpenConn();SqlCommandcmd=newSqlCommand(sql,conn);if(parameters!=null){foreach(SqlParameterparameterinparameters){cmd.Parameters.Add(parameter);}}SqlDataAdaptersda=newSqlDataAdapter(cmd);DataSetds=newDataSet();sda.Fill(ds,TableName);dt=ds.Tables[0];}returndt;}///<summary>///執(zhí)行存儲過程,返回DataTable對象///</summary>///<paramname="storedProcName">存儲過程名</param>///<paramname="parameters"></param>///<paramname="TableName">Data中的表名</param>///<returns></returns>publicstaticDataTableExecuteStoredProc(stringstoredProcName,SqlParameter[]parameters,stringTableName){DataTabledt=null;try{OpenConn();SqlCommandcmd=newSqlCommand();cmd.CommandType=CommandType.StoredProcedure;cmd.CommandText=storedProcName;cmd.Connection=conn;if(parameters!=null){foreach(SqlParameterparameterinparameters){cmd.Parameters.Add(parameter);}}SqlDataAdaptersda=newSqlDataAdapter(cmd);DataSetds=newDataSet();sda.Fill(ds,TableName);dt=ds.Tables[0];}catch(SqlExceptionex){thrownewException(ex.Message);}finally{CloseConn();}returndt;}2、登陸界面及代碼實現(xiàn)代碼實現(xiàn):(重要是驗證用戶名和密碼)stringname=User_Name.Text;stringcode=User_Code.Text;stringsql=string.Format("select*fromReader_sortwherereader_name='{0}'",name);DataTabletemp=SQLhelper.GetDataTable(sql,null,"Reader_sort");if(temp.Rows.Count!=0){if(temp.Rows[0][3].ToString()==name){if(temp.Rows[0][2].ToString()==code){stringtemp_sort=temp.Rows[0][1].ToString();if(User_Sort.Text==temp_sort){switch(temp_sort){case"系統(tǒng)管理員":stringname_temp=User_Name.Text;System_administratorSystem_admin_temp=newSystem_administrator(name_temp);System_admin_temp.Show();this.Hide();break;case"圖書管理員":stringname_temp1=User_Name.Text;Book_administratorbook_admin_temp=newBook_administrator(name_temp1);book_admin_temp.Show();this.Hide();break;case"讀者管理員":stringname_temp2=User_Name.Text;Reader_administratorReader_admin_temp=newReader_administrator(name_temp2);Reader_admin_temp.Show();this.Hide();break;case"讀者":stringname_temp3=User_Name.Text;Common_Readerreader_temp=newCommon_Reader(name_temp3);reader_temp.Show();this.Hide();break;}}elseMessageBox.Show("權(quán)限錯誤!");}else{MessageBox.Show("密碼不對的,請重新輸入!");User_Code.Text=null;}}elseMessageBox.Show("用戶名不存在!");}else{MessageBox.Show("用戶不存在!");}圖形界面:3、系統(tǒng)管理員代碼實現(xiàn):(一些重要功能)添加:System_administratoradmin_temp=newSystem_administrator(null);stringsql_update=string.Format("select*fromReader_sort");admin_temp.dataGridView1.DataSource=SQLhelper.GetDataTable(sql_update,null,"Reader_sort");inti=admin_temp.dataGridView1.NewRowIndex;//獲取新行的行號i=i+1;stringreader_name=add_reader_name.Text;intcode=int.Parse(add_code.Text);stringitem_sort=add_sort.Text;stringsql=string.Format("insertintoReader_sortvalues('{0}','{1}','{2}','{3}')",i,item_sort,code,reader_name);introws=SQLhelper.ExecuteNonQuery(sql);if(rows<=0){MessageBox.Show("添加失?。?);}修改:update_index=update_index+1;stringreader_name=modify_reader_name.Text;intcode=int.Parse(modify_code.Text);stringitem_sort=modify_sort.Text;stringsql=string.Format("updateReader_sortsetsort_name='{0}',sort_code='{1}',reader_name='{2}'wheresort_ID='{3}'",item_sort,code,reader_name,update_index);introws=SQLhelper.ExecuteNonQuery(sql);if(rows<=0){MessageBox.Show("修改失?。?);}刪除:DialogResulttemp=MessageBox.Show(this,"是否刪除該選中行","擬定刪除",MessageBoxButtons.YesNo,MessageBoxIcon.Question);if(temp==DialogResult.Yes){stringdelete_currentcell=dataGridView1.CurrentRow.Cells[0].Value.ToString();stringsql=string.Format("deleteReader_sortwheresort_ID='{0}'",delete_currentcell);introws=SQLhelper.ExecuteNonQuery(sql);if(rows<=0){MessageBox.Show("刪除失敗");}else{dataGridView1.Rows.Remove(dataGridView1.CurrentRow);//刪除選中行}}圖形界面:4、圖書管理員關(guān)于添加、修改、刪除的操作與系統(tǒng)管理員類似,這里不再贅述,圖書管理員中,重要用到的技術(shù)有:C/S或B/S模式:業(yè)務(wù)實體類:publicclassBook_entiry{#region私有字段privateintBook_id;privatestringbook_code;privatestringbook_name;privatestringbook_author;privatestringbook_press;privatestringbook_datapress;privatestringbook_isbn;privatestringbook_catalog;privatestringbook_languague;privateintbook_pages;privatestringbook_price;privatestringbook_datain;privatestringbook_brief;privatestringbook_cover;privatestringbook_sum;#endregion#region公有屬性publicintbkID{get{returnBook_id;}set{Book_id=value;}}publicstringbkCode{get{returnbook_code;}set{book_code=value;}}publicstringbkName{get{returnbook_name;}set{book_name=value;}}publicstringbkAuthor{get{returnbook_author;}set{book_author=value;}}publicstringbkPress{get{returnbook_press;}set{book_press=value;}}publicstringbkDatePress{get{returnbook_datapress;}set{book_datapress=value;}}publicstringbkISBN{get{returnbook_isbn;}set{book_isbn=value;}}publicstringbkCatalog{get{returnbook_catalog;}set{book_catalog=value;}}publicstringbkLanguage{get{returnbook_languague;}set{book_languague=value;}}publicintbkPages{get{returnbook_pages;}set{book_pages=value;}}publicstringbkPrice{get{returnbook_price;}set{book_price=value;}}publicstringbkDateIn{get{returnbook_datain;}set{book_datain=value;}}publicstringbkBrief{get{returnbook_brief;}set{book_brief=value;}}publicstringbkCover{get{returnbook_cover;}set{book_cover=value;}}publicstringbkIsInlab{get{returnbook_sum;}set{book_sum=value;}}#endregion}數(shù)據(jù)訪問層:classBookTypeDAL{publicDataTableGetAllReader(){stringsql="select*fromBook";returnSQLhelper.GetDataTable(sql,null,"Book");}publicvoidAddBook(數(shù)據(jù)庫課程設(shè)計.Book_entirybook){};try{SQLhelper.ExecuteStoredProc("add_book",parameters);}catch(SqlExceptionex){thrownewException(ex.Message);}}}業(yè)務(wù)邏輯層:classBookBLL{BookTypeDALBDAL=newBookTypeDAL();//得到所有的讀者publicDataTableGetAllReader(){returnBDAL.GetAllReader();}//添加讀者publicvoidAddBook(數(shù)據(jù)庫課程設(shè)計.Book_entirybook){try{BDAL.AddBook(book);MessageBox.Show("添加成功!");}catch(Exceptionex){MessageBox.Show("添加失敗!");thrownewException(ex.Message);}}}表達(dá)層:數(shù)據(jù)庫課程設(shè)計.Book_entirybook=newBook_entiry();//引用存儲過程book.bkID=Convert.ToInt32(Book_add_bkID.Text);book.bkCode=Book_add_bkcode.Text;book.bkName=Book_add_bkName.Text;book.bkLanguage=Book_add_bkLanguage.Text;book.bkPages=Convert.ToInt32(Book_addpages.Text);book.bkPrice=Book_add_bkPrice.Text;book.bkDateIn=Book_add_bkDateIn.Text;book.bkBrief=Book_add_bkBrief.Text;book.bkCover=picture_address.Text;book.bkIsInlab=Book_add_bkIsInlab.Text;數(shù)據(jù)庫課程設(shè)計.Book_book.BookBLLbook_temp=new數(shù)據(jù)庫課程設(shè)計.Book_book.BookBLL();book_temp.AddBook(book);圖形界面:讀者信息管理頁面:代碼實現(xiàn):鼠標(biāo)點擊首記錄:introw=this.dataGridView1.CurrentRow.Index+1;if(row>this.dataGridView1.RowCount-2)row=0;this.dataGridView1.CurrentCell=this.dataGridView1[0,row];鼠標(biāo)點擊下一記錄:introw=this.dataGridView1.CurrentRow.Index-1;if(row<0)row=this.dataGridView1.RowCount-2;this.dataGridView1.CurrentCell=this.dataGridView1[0,row];5、讀者管理員代碼實現(xiàn):這里也用到了三層模式,添加、修改、刪除也大體與前面類似。借書:stringsql_find_sort=string.Format("select*fromReaderTypewhererdTypeName='{0}'",lend_rdTypeName.Text);DataTablefind_Type=SQLhelper.GetDataTable(sql_find_sort,null,"ReaderType");stringfind_CanlendQty=find_Type.Rows[0][2].ToString();intfind_CanLendDay=int.Parse(find_Type.Rows[0][3].ToString());if(int.Parse(find_CanlendQty)>int.Parse(lend_rdBorrowQty.Text)){if(this.dataGridView2.CurrentRow==null){MessageBox.Show("請選中要借閱的書籍所在的行!");}else{stringbkID_temp=this.dataGridView2.CurrentRow.Cells[0].Value.ToString();//獲得借閱書的bkIDstringbkName_temp=this.dataGridView2.CurrentRow.Cells[2].Value.ToString();//獲得借閱書的名稱intsum=int.Parse(this.dataGridView2.CurrentRow.Cells[14].Value.ToString());//獲得bkisinlab的值(現(xiàn)存量)stringadd_rows_temp=lend_rdName.Text;//獲得讀者名稱intbkID_have_lended=int.Parse(lend_rdID.Text);//獲得讀者的rdIDintsum_have_lended=int.Parse(lend_rdBorrowQty.Text);//獲得已借書總量if(sum==0){MessageBox.Show("這本書現(xiàn)存量為0,請等待該書歸還后再借,謝謝!");}else{stringsql_confrim_lend=string.Format("insertinto{0}select*fromBookwherebkID='{1}'",add_rows_temp,bkID_temp);//將借閱書籍插入到個人借閱信息表中sum_have_lended=sum_have_lended+1;stringsql_update0=string.Format("updateReadersetrdBorrowQty='{0}'whererdID='{1}'",sum_have_lended,bkID_have_lended);introw=SQLhelper.ExecuteNonQuery(sql_confrim_lend);introw0=SQLhelper.ExecuteNonQuery(sql_update0);if(row<=0||row0<=0){MessageBox.Show("借書失敗,請重新執(zhí)行操作!");}else{sum=sum-1;DateTimetime_lend=System.DateTime.Today;//借書的時間stringsql_update1=string.Format("updateBooksetbkIsInLab='{0}'wherebkID='{1}'",sum,bkID_temp);//圖書存量的變化stringsql_update2=string.Format("update{0}setbkIsInLab='{1}'wherebkID='{2}'",add_rows_temp,sum,bkID_temp);//個人借閱信息表中圖書存量的變化stringsql_update3=string.Format("insertintoBorrowvalues('{0}','{1}','1','{2}','{3}','','','','','false','{4}','')",lend_rdID.Text,bkID_temp,time_lend,time_lend.AddDays(+find_CanLendDay),operate_person.Text);//借閱表Borrow中的變化stringsql_update4=string.Format("insertintoBorrow_informationvalues('{0}','{1}','{2}','{3}','{4}','{5}','{6}','','{7}','')",lend_rdID.Text,lend_rdName.Text,lend_rdTypeName.Text,lend_rdDept.Text,bkID_temp,bkName_temp,time_lend,time_lend.AddDays(+find_CanLendDay));//借閱信息表Borrow_information的變化introws1=SQLhelper.ExecuteNonQuery(sql_update1);introws2=SQLhelper.ExecuteNonQuery(sql_update2);introws3=SQLhelper.ExecuteNonQuery(sql_update3);introws4=SQLhelper.ExecuteNonQuery(sql_update4);if(rows1>0&&rows2>0&&rows3>0&&rows4>0){MessageBox.Show("借書成功!");stringupdate_link1=string.Format("select*from{0}",lend_rdName.Text);//重新綁定數(shù)據(jù)dataGridView1.DataSource=SQLhelper.GetDataTable(update_link1,null,lend_rdName.Text);stringupdate_link2="select*fromBook";dataGridView2.DataSource=SQLhelper.GetDataTable(update_link2,null,"Book");lend_rdBorrowQty.Text=sum_have_lended.ToString();}else{MessageBox.Show("借書失敗!請檢查更新錯誤的數(shù)據(jù)文獻(xiàn)!");}}}}}else{MessageBox.Show("超過了你所能借的書的數(shù)量!");}借書過程中,重要是要實現(xiàn)三個表中數(shù)據(jù)的變化,這三個表中的變化相應(yīng)改變好了,就沒有問題了,關(guān)于續(xù)借和還書,只要借書回了,舉一反三,關(guān)于其他的自己也就可以實現(xiàn)了,圖形界面:查詢借閱信息:查找實現(xiàn)的具體過程stringrdID_temp=search_rdID.Text;stringrdName_temp=search_rdName.Text;stringrdType_temp=search_rdType.Text;stringrdDept_temp=search_rdDept.Text;stringbkCode_temp=search_bkCode.Text;stringbkName_temp=search_bkName.Text;stringldDateOut_temp=search_ldDateOut.Text;stringldDateRetAct_temp=search_ldDateRetAct.Text;stringsql=string.Format("select*fromBorrow_informationwhererdID='{0}'orrdName='{1}'orrdType='{2}'orrdDept='{3}'orbkID='{4}'orbkName='{5}'orldDateOut='{6}'orldDateRetPlan='{7}'",rdID_temp,rdName_temp,rdType_temp,rdDept_temp,bkCode_temp,bkName_temp,ldDateOut_temp,ldDateRetAct_temp);this.dataGridView1.DataSource=SQLhelper.GetDataTable(sql,null,"Borrow_information");里面有打印預(yù)覽功能:PrintPreviewDialogppd=newPrintPreviewDialog();PrintDocumentpd=newPrintDocument();pd.PrintPage+=newPrintPageEventHandler(pd_PrintPage);DrawLine(newPoint(start_point_x+width,start_point_y),newPoint(start_point_x+width,height),e.Graphics);//得最右邊的線for(inti=0;i<line_sum;i++)//畫每一列的線{DrawLine(newPoint(start_point_x+line_temp,start_point_y),newPoint(start_point_x+line_temp,height),e.Graphics);e.Graphics.DrawString(dataGridView1.Columns[i].HeaderText,show_font,alertBrush,start_point_x+line_temp,start_point_y+row_height/2);for(introw=0;row<row_sum-1;row++){e.Graphics.DrawString(dataGridView1.Rows[row].Cells[i].Value.ToString(),show_font,alertBrush,start_point_x+line_temp,start_point_y+row_height/2+row_height*(row+1));}line_temp=line_temp+line_width;}效果圖:輸出到excel的功能:SaveFileDialogexcel_data=newSaveFileDialog();excel_data.Filter="Excelfiles(*.xls)|*.xls";

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論