C語言課程設計實現總結_第1頁
C語言課程設計實現總結_第2頁
C語言課程設計實現總結_第3頁
C語言課程設計實現總結_第4頁
C語言課程設計實現總結_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

學生信息管理程序

一、設計目的:

使用結構體數組結構實現簡單的學生信息管理功能,要

求具有數據輸入、數據輸出、數組排序、兀索插入、兀

素刪除、查詢信息等功能。程序最多容納60名學生的

記錄。

二、設計要求:

1、intInput(void);〃使用程序中一個空白結構體,輸入一名

學生的個人及學習信息信息。此功能區返回一個值記錄程序存

儲學生記錄的數量*/

2、voidChange_record(void);〃修改學生的記錄選項。

voidDeleterecord(void);〃刪除學生記錄選項。

4、voidSortjecord(void);〃根據學生某項信息排序學生記

錄選項。

5^voidQueryrecord(void);〃查詢學生記錄選項。

voidDisplay(void);〃顯示出當前程序存儲的所有學生信

息選項。

7、voidAdd_from_text(inte);〃從文本中提取學生記錄輸入

程序進行處理。

8、voidWritetotext(void);〃將當前程序中存儲的學生記

錄寫入一個文本文件中。

9、voidEnding(void);〃退出選項。

三、總體設計:

1、主函數模塊:

主函數設計較為簡單,主要是使用switch語句通

過選擇結構將整個程序能夠實現的功能提示用戶選擇。

主函數代碼:

intmain(void)〃對主函數的定case1:

義。Input(n);〃插入學

{生記錄函數。

n=0;for(i=0,n=0;i

for(i=0;i<N;i++)<N;i++)

((

strcpy(stu[i].name,if

(stu[i].num!=U)

stu[i].num=0;n++;

stu[i].score=0;)

)break;

for(;;)〃通過for語句實現case2:

使用戶自由決定是否重復使用此程ChangerecordO;//

序。修改學生的記錄函數。

(break;

switchcase3:

(\lenu_selectl())//使用switch語句Delete_record()://

調用用戶指定菜單項對應的函數。刪除學生記錄函數。

break;

case4:break;

Sortrecord。;〃排case7:

序函數。printf("請輸入文件

break;的路徑:〃);

case5:scanf("s”,nameO)

Query_rccord();//printf(〃請輸入此文

查詢函數。本中有多少名學生的記錄:〃);

break;scanf("%d",&j);

case6:

DispalyO;〃展示函

數。

Add_from_text(j,nameO);〃從文本中添加學生記錄的函數。

n+=j;

break;case9:〃結束程序使用

case8:界面選項。

printf(”請輸入文件Ending();

的路徑:〃);break;

scanfnameO);cefault:

Write_to_tpxt();//centinui?;〃菜單循

將學生記錄寫入文本的函數。環顯示。

break;)

system(〃c1s〃);序運行窗口閃退。

)return0;

system(^pause^);〃防止程)

2、菜單模塊:

菜單模塊包括主菜單和部分功能中要調用的附屬菜

單,作用是向用戶說明其輸入的選擇信息將使程序實現什么

3、功能模塊

功能模塊的設計就是通過編寫多個的函數對應程

序所要求實現的功能。函數在主函數中將被編號,使用戶向

程序輸入的編號就能調用相應的函數體現程序的功能。

四、詳細設計及源代碼:

#include<stdio.h>

#include<windows.h〉〃提供system();語句。

#include<slrii電.h>〃提供strleu()函數。

^defineN60〃定義全局常量N作為結構體數組stu口下標。

intb,c,numO,n,i=0,j=0;

charname0[40];/*將程序中多次定義的標識符設置為全局變量。*/

structstudent

{

charname[40];

intnum;

intscore;

}stu[N];

intMenuselectl(void);

intMenuselect2(void);

intMenu_select3(void);

intMenuselectd(void);

intMenuselect5(void);

intMenu_select6(void);

intMenuselect?(void);

intMenu_select8(void);

intMenu_select9(void);〃聲明程序中用到的多種菜單函數。

structstudent*pointl,*point2;〃全局定義程序中多次用到得結構體指針變

量。

int(*pot2)(void)=Menu_select2:

int(*pot4)(void)=Mcnu_select4;

int(*pot6)(void)=Menu_select6;

int(*pot8)(void)=Menu_select8;〃定義指向菜單pK數的指針。

intjudgement(void);

intjudgement_small(void);〃聲明程序要調用的兩個判斷特殊情況的函數。

FILE*fp;〃定義指向文件型數據的指針變量。

voidChangeservice(void);

voidQuery_service(void);

voidDelete_service(void):

void(*serl)(void)=Changeservice;

void(*ser2)(void)=Deleteservice;

void(*ser3)(void)=Query_scrvice;〃定義指向在有特定功能的函數內部使用

的函數的指針。

voidSortservicel(intpo);

voidSort_service2(intpo);〃聲明兩個在有排序功能的函數中腰使用的函數。

voidswap(structstudent*pol,structstudent*po2);〃對交換函數的聲明。

voidEnding(void);〃對有結束功能的函數的聲明。

voidfind(int(*p)(void),void(*q)(void));〃對一個形參是指向函數的指針

的函數的聲明。

voidInput(intn)〃對有插入學生記錄功能的函數的定義。

{

printf(〃請輸入學生姓名:〃);

scanf&stu[n].name);

printf(〃請輸入學生序號:〃);

stu[n].num=judgement();

printf(〃請輸入學生信息:〃);

scanf&stu[n].score);

system(〃cls〃);〃此語句執行后將清除運行窗口顯示的結果。

)

VOidChangp_rpcord(vcid)〃對■有修改學生記錄功能的函數的定義。

find(pot2,serl);〃在函數內部調用函數。

)

voidDelete_record(void)〃對有刪除學生記錄功能的函數的定義。

{

find(pot4,ser2);

(

voidSort_record(void)〃對有排序學生記錄功能的匣數的定義。

{

j=Menu_select8();〃通過菜單函數的返回值提供用戶的選擇信息來執行

用戶選定的功能

for(;judgement_smal1()>0;)〃for語句中的判斷用判斷函數處理后以

提示是否輸入錯誤。

(

if(j==1)

(

j=Menu_select9();

Sort_servicel(j);〃通過菜單函數的返回值作為另一個函數的實

參來執行用戶選定的功能,

break;

)

elseif(j==2)

j=Menu_select9();

Sort_service2(j);

break;

)

else

continue;

)

}

voidQucry_rccord(void)〃對有查詢學生記錄功能的函數的定義。

{

find(pot6,ser3);

)

voidDispaly(void)〃對有顯示全部學生記錄功能的函數的定義。

(

for(i=0;i<n;i++)〃for語句打印出當時的所有學生記錄。

(

printf("第%d位學生姓名為%s\n”,i+1,stu[i].name);

prinlf("班內序號為%d\n",stu[i].num);

printf("學習信息為%d\n'n”,stu[i].score);

)

system("pause");〃防止運行窗口閃退。

)

voidEnding(void)〃對有退出功能的函數的定義。

system(〃cls〃);

printff\n\t

亭亭5^C?jc?!c5|c?jc?jc?!c?jc?!c?jc?|c51c51c51c5}C51C5jC51c5j*55?5jc不5{C5fc*|C5!C?|C5|C?!C?jc\[)\n\\

);

printfC\n\t\t\t歡迎下次繼續使用,再見!\n\n");

printf(〃\n\n\n\t

exit(O);〃正常退出程序。

}

voidAddfromtext(inte,charch)〃對有可從文本文件中提取學生記錄的函

數的定義。

fp=fopen(nameO,"r");〃使指針指向文件。

if((fp=fopen(name。,"r〃))=NULL)〃判斷指針所指向的文件是否存

在,不存在退出此函數。

printf(〃無法找到路徑為%s的文本文件。\n〃,nameO);

system("pause");

return;

)

else〃存在則從此文件中提取學生記錄。

(

for(i=n;i<(n+e+1);i++)

(

fscanf(fp,&stu[i].name,&stu[i].num,

&stu[i].score);

)

prinlf("已提取出文本文件名稱為刎中的所有學生記錄!\n",nameO);

system("pause");

}

fclose(fp);〃關閉文本文件,即指針fp不再指向任何文件。

)

voidWrite_to_text(void)〃對可將程序中存儲并處理后的學生記錄輸出至一

個文本文件。

{

fp=fopen(nameO,〃w");〃使指針指向文件。

if((fp=foppn(namoO,,,w,/))==NULL)〃判斷指針所指向的文件是否存

在,不存在退出此函數。

printf("無法找到名為%d的文本文件。\n",nameO);

system("pause");

return;

)

else〃存在則將程序中儲存的學生記錄寫入該文件。

(

fprintf(fp,〃姓名\t\t\t\t\t*班內序號\t*學習信息*\n〃);

for(i=0;i<n;i++)

(

fprintf(fp,"%-40s*%T4d*%-5d*\n",stu[i].name,

stu[i].num,stu[i].score);

}

printf(〃已將學生記錄存儲入名稱為%s的文件中!\n”,nameO);

system("pause");

)

fclose(fp);〃關閉文本文件,即指針fp不再指向任何文件。

}

voidChange_service(void)〃對在有修改學生記錄功能的函數中要調用的函數

的定義。

chartempi[40];

inttomp2,temp3;

switch(Menu_select3())/*菜單函數的返回值用作switch語句的選擇信息

(選擇項較多用switch語句較少則用if語句)。*/

(

system("cis");

case1:

printf(〃此學生當前姓名為%s,請輸入要修改后的名字;〃,

(*pointl).name);/*由于此函數作為實參

在find()函數被調

用,在調用前已經將尋找到得項的地址付給了全局指針變量point1*/

scanf("%s〃,tempi);

strcpy(pointl->name,tempi);

break;

case2:

printf(〃此學生當前序號為刎,請輸入要修改后的序號二

(*pointl).num);

temp2=judgement();

(*pointl).num=temp2;

break:

case3:

prinlf(〃此學生當前信息為%d,請輸入要修改后的信息;。

(*pointl).score);

scanf(,,%d,,?&temp3);

(*pointl).score=temp3;

break;

default:

break;

)

}

voidQuory_servic。(void)〃對在有查詢學生記錄功能的函數中要調用的函數

的定義。

{

switch(Menu_select7())〃同上,選擇項較多用switch語句。

(

case1:

printf(〃此學生當前姓名為加,班級內序號為%d,學習信息為%d\n”,

pointl->name,pointl->num,

pointb>score);/*由于此函數作為實參在find()函數被調用,在其

內調用前已經將尋找到得項的地址付給了

全局指針變量point!*/

system("pause");

break;

case2:

printf(“此學生當前姓名為%乙\n",pointl->name);

system("pause");

break;

case3:

printf("此學生當前班內序號為%d。\n〃,pointl->num);

system("pause");

break;

case4:

prinlf(“此學生當前班內序號為%d。\n”,pointl->score);

system("pause");

default:

break;

}

)

voidDe1ete_service(void)〃對在有刪除學生記錄功能的函數中要調用的函數

的定義。

(

j=Meni.i_selec.t5():〃選擇項較少用if語句。

if(j==1)

charsure;

printf(“此學生當前姓名為%$,班級內序號為%d,學習信息為%d\n〃,

pointl->name,pointl->num,

pointl->score);/*由于此函數作為實參在find()函數被調用,在其

內調用前已經將尋找到得項的地址付給了

全局指針變量pointl*/

printf(〃請按回車鍵確認您的操作!\n〃);

for(;;)

(

if(getchar(sure)=='\n')

(

point2=&stu[n-1];

swap(pointi,point2);

n-;

break;

)

}

systein("cls〃);

printf("刪除記錄成功,感謝使用!〃):

system("pause");

}/*這里刪除一個學生的全部記錄的實現方法是:鎖定要刪除的學生記錄符

其地址賦給pointl,通過地址來

把此時存入得學生記錄中最后一位的信息存入該名學生信息存儲的位置,

然后清空最后一位學生的占用的結構體

數組元素并對程序中記錄存入學生記錄數量的全局變量n做減一處理*/

elseif(j=2)〃只刪除一名學生的信息的功能。

(

pointl->score=0;〃指定學生信息清零。

)

else

system("pause");

)

voidSort_servicel(intpo)〃對在有排序學生記錄功能的函數中要調用的第一

個函數的定義,即通過班內序號排序。

{

intm=judgementsinall();

if(po==1)〃成立做降序處理。

(

for(i=0;i<m;i++)

for(c=i+1;c<m+1;c++)

b=i;

if(stu[c].num>stu[b].num)

(

pointl=&stu[c];

point2=&stu[b];

b=c;

swap(pointl,point2);〃調用函數交換兩個結構體數組元

素內的所有信息。

}

)

}

printf(〃排序成功!感謝使用!\n〃);

system("pause");

}

else〃不成立則做升序處理。

(

for(i=0;i<m;i++)

(

for(c=i+l:c<m+l:c++)

(

b=i;

if(stu[c].num<stu[b].num)

pointl=&stu[c];

point2=&stu[b];

b=c;

swap(pointl,point2);

)

)

}

printf(〃排序成功!感謝使用!\n");

system("pause");

}

}

VOidSort_servicc2(charpo)〃對在有排序學生記錄功能的函數中要調用的第

二個函數的定義,即通過學習信息排序。

(

intm=judgementsinall();

if(po=D〃做升序處理

for(i=0;i<m;i++)

for(c=i+1;c<m+1;c++)

b=i;

if(stu[c].score>stu[b].score)

(

pointl=&stu[c];

point2=&stu[b];

b=c;

swap(pointl,point2);

}

)

}

printf("排序成功!感謝使用!\n");

system("pause");

return;

)

else〃做降序處理。

(

for(i=0:i<m:i++)

for(c=i+1;c<m+1;c++)

b=i;

if(stu[c].score<stu[b].score)

(

pointl=&stu[c];

point2=&stu[b];

b=c;

swap(pointl,point2);

}

)

}

printf(〃排序成功!感謝使用!\n〃);

system("pause");

return;

)

)

voidswap(structstudent*pol,structstudent*po2)/*對一個具有交換值

功能的函數的定義,具體功能是交換兩個結構體數組元素內的所有信息*/

{

structstudenttempO;

tempO=*pol;

pol=po2;

*po2=tempO;

}

voidfind(int(*p)(void),void(*q)(void))/*對一個形參是指向函數的指針的

函數的定義,此函數將在查詢、刪除、修改函數中被使用,即通過用戶輸入的一

名學生的名字或班內序號鎖定該名學生記錄的地址,保存在全局指針變量

point1中,然后用.service函數處理*/

{

for(;;)

(

j=p();〃通過函數的指針調用函數

if(j==1)

(

printf(〃請輸入學生的姓名:〃);

scanf('%s”,nameO);

nameO[str1en(nameO)+1]='\0';〃防止字符數組越界。

for(i=0;i<N;i++)

{

if(strcmp(nameO,stu[i].name)==0)〃比較兩個字符數組

pointl=&stu[i];〃全局變量存入鎖定的學生地址。

q();

return;〃退出函數。

}

)

if(i>n)〃對特殊情況的處理。

printf(〃經尋找后沒有發現姓名為%$的學生記錄存入程序!

nameO);

system("pause");

break;

)

elseif(j==2)

(

printf(“請輸入學生的序號:〃);

scanf(線d〃,&numO);

for(i=0;i<N;i++)

(

if(numO==stu[i].num)

(

pointl=&stu[i]:

q();

return;

)

)

if(i>n)

printf(〃經尋找后沒有發現序號為刎的學生記錄存入程序!\n

numO);

system("pause");

brecik;

}

else

conlinue;〃用戶在選擇出錯時可以重新輸入選擇。

}

)

intmain(void)〃對主函數的定義。

(

n=0;

for(i=0;i<N;i++)

(

strepy(stu[i].name,〃\0");

stu[i].num=0:

stu[i].score=0;

}

for(;;)〃通過for語句實現使用戶自由決定是否重發使用此程序。

switch(Menu一select]())〃使用switch語句調用用戶指定菜單項對應

的函數。

(

case1:

Input(n);〃插入學生記錄函數。

for(i=0,n=0;i<N;i++)

(

if(stu[i].num!=0)

n++;

}

break;

case2:

Chcinge_record();〃修改學生的記錄函數。

break;

case3:

Delete_record();〃刪除學生記錄函數。

brpak:

case4:

Sort_record();//排序函數。

break;

case5:

Queryrecord0;〃查詢函數。

break;

case6:

DispalyO;〃展示函數。

brecik;

case7:

printf(〃請輸入文件的路徑:〃);

scanf(飛s”,nameO);

printf(〃請輸入此文本中有多少名學生的記錄:〃);

scanf("機T,&j);

Add_fromtext(j,name。);〃從文本中添加學生記錄的函數。

n+=j;

break;

case8:

printf(“請輸入文件的路徑:〃);

scanf('%s”,nameO);

();〃將學生記錄寫入文本的函數。

break;

case9:〃結束程序使用界面選項。

Ending();

break;

default:

continue;〃菜單循環顯示。

system("cls");

system("pause");〃防止程序運行窗口閃退。

return0;

)

intMenu_selectl(void)〃對第一個菜單函數的定義。

printf(z,\t

\\>>>I?

rr?rrw*T*rfc*T?*7*rT?*T?*?**?*J?*J**J*#?rj**T?*T*\]1\I1

printfC\n\t\t\t***歡迎使用學生信息管理程序***\n\n〃);

printf("\t\t\t\t功能菜單\n\n\n");

printfC\t1、添加學生記錄信息選項\n〃);

printf("\t2、修改學生的記錄選項\n〃);

printf(",\t3、刪除學生記錄選項\n"):

printfCXt4、根據學生某項信息排序學生記錄\n〃);

printfC\t5、查詢學生信息選項\n〃);

printf(,?\t6、顯示出當前存儲的所有學生信息\n");

printfC\t7、從文本文檔中添加學生記錄\n〃);

printfC\t8、將當前存入的學生記錄寫入文本文檔\n〃);

printf(,z\t9、退出選項\n〃);

printfC\t

************************************************************\n\

printf("\t\t\t\t\t此時程序中存儲了%d個學生的信息\n\n”,n);

printf("請輸入您的選擇:");

scanf(〃%d〃,&i);〃將用戶指定的菜單項序號儲存在變量i中。

system("cis");

return(i);//將i作為函數返回值。

intMenuselect.2(void)〃對第二個菜單函數的定義。

system(〃cls");

printfC\tl,通過名字找出要修改的學生記錄\n\n〃);

printfC\t2.通過序號找出要修改的學生記錄\n\n〃);

printf("\t\t請輸入1或者2:;

scanf&i):

return(i);

intMcnu_selcct3(void)〃對第三個菜單函數的定義。

system("cis");

printf("\tl、修改學生的姓名\n\n");

printfr\t2.修改學生的序號\n\n〃);

printf("\t3、修改學生的信息\n\n");

printf(,z\t\t\t請輸入1或2或者3:");

scanf("%d",&i);

return(i);

}

intMcnu_select4(void)〃對第四個菜單函數的定義。

{

system("cis");

printfC\tl,通過名字找出要刪除的學生記錄\n\n〃);

printf(〃\t2、通過序號找出要刪除的學生記錄\n\n〃);

printf請輸入1或者2:;

scanf&i);

return(i);

intMenuselect5(void)〃對第五個菜單函數的定義。

system(〃cls");

printfC\tl,刪除此學生的所有信息\n\n〃);

printff\t3,刪除此學生的學習信息\n\n〃);

printf("\t\t\t請輸入1或者2:〃);

scanf&i);

return(i);

)

intMenuselect6(void)//對第六個菜單函數的定義。

(

system("cis");

printff\tl,通過名字找出要查詢的學生記錄\n\n〃);

printf(〃\t2、通過序號找出要查詢的學生記錄\n\n〃);

printf(*\t\t請輸入1或者2:;

scanf&i);

return(i);

)

intMenuselect7(void)〃對第七個菜單函數的定義。

(

system("cis"):

printfC\tl>查詢此學生的所有信息\n\n〃);

printfC\t2.查詢此學生的姓名\n\n〃);

printf(〃\t3、查詢此學生的班內序號\n\n");

printfC\t4>查詢此學生的學習信息\n\n〃);

printf(*\t\t\t請輸入1到4間的一個整數;

scanf&i);

return(i);

)

intMenu_select8(void)〃對第八個菜單函數的定義。

{

systcm(〃cls〃);

printfCAtl.根據學生的班內序號排序學生記錄\n\n");

printfC\t2,根據學生的學習信息排序學生記錄\n\n〃);

printf請輸入1或者2:");

scanf&i);

return(i);

)

intMenu_select9(void)〃對第九個菜單函數的定義。

{

system("cls");

printfC\tK按此組數據對?學生記錄進行降序排序\n\n〃):

printfC\t2>按此組數據對學生記錄進行升序排序\n\n〃);

printf請輸入1或者20;

scanf(,,%d,/,&i);

return(i);

}

intjudgement(void)〃對第一個判斷函數的定義,判斷班內序號是否大于60

或者有重復序號的情況。

(

inti,out,k,final;

scanf("%d”,&final);

for(out=1;out==1;)

(

if(final>N)

(

system(zzcls/x);

printf(〃序號為1到60之間的一個整數,請重新輸入:〃);

scanf(“/d",殳final);

}

if(final<=60)

(

for(i=0,k=0;i<N;i++)

if(final==stu[i].num)

k++;

break;

1

)

}

if(k==0)

break;

else

(

system(〃cIs");

printf(〃您輸入的序號已被使用請再次輸入不同的序號:〃);

scanf("%d”,殳final);

}

)

return(final);

)

intjudgement_small(void)〃對第二個判斷函數的定義,針對于排序函數中的

一類特殊情況設計。

intm=-1;

for(i=0;i<N;i++)

if(stu[i].num!=0)

m++;

}

if(m<=0)

printf(〃程序當前只存儲了%d位學生的信息,無法排序!\n",m+1);

system("pause");

)

returnm;}

五、程序調試:

運行程序:

顯示:

S1^si*5^si**1*

,1、,1、,廣,A、,.、,,、’1、,4、'I、,4、*j*,.、'I、,'、'I、,'、'I、,|、'I、?、,4、’1、,4、,I、,4、'I、。、'I、,,、*T*,,、'I、,|、’I、’1、,卜’[、,,、’1、,4、*T*,,、,1、,上、‘I、,‘、'I、,'、'I、‘1、’;、*T*';、*T*,4、,1、,「'I、,4、

***歡迎使用學生信息管理程序***

功能菜單

1、添加學生記錄信息選項

2、修改學生的記錄選項

3、刪除學生記錄選項

4、根據學生某項信息排序學生.記錄選項

5、查詢學生記錄選項

6、顯示當前存儲的所有學生記錄選項

7、從文本文件中提取學生記錄選項

8、將當前存入程序的學生記錄寫入文本文件

9、退出選項

si*sx*?£>sXzsL*^£xs^*^1/si^^£z^lz^£zxL*^£z

,:、,,、匕、,4、,;',.、']、f,[、^7*,[、,1、,[、,:、,j、,:、,[、(、J、,[、,《、,;、,A、,[、,]、,>、,[、,廣可、,[、,;、,卜,;、,,、,[、J、,j、,[、,.、,,、,;、,,、,]、,卜,;、,,、,[、,[、

此時程序中存儲了0個學生的記錄

請輸入您的選擇:

輸入:1回車

顯示:請輸入學生姓名:

輸入:a回車

顯示:請輸入學生序號:

輸入:1回車

顯示:請輸入學生信息:

輸入:78回車

(回到菜單,在菜單的下面一行中將變為“此時程序中存儲了1

溫馨提示

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

評論

0/150

提交評論