#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
struct student{ //结构体定义
char name[20]; //姓名
int num; //学号
int no; //排名
float score[6]; //各科成绩
float ave; //平均成绩
float tot; //总成绩
struct student *next;
};
struct student *head; //定义全局变量 链表头
int i; //定义全局变量 科目总数
void key1(); //用户界面1
void key2(); //用户界面2
void fileinput(void); //文件录入函数
void maninput(void); //手动录入函数
void avetotal(); //求学生平均分总分函数
void number(); //求学生排名函数
void deorder(); //总分由高到低排序
void asorder(); //总分由低到高排序
void numorder(); //学号由小到大排序
void dictionary(); //按字典顺序排序
void output(); //输出函数
void save(); //保存函数
void senum(); //学号查找函数
void senam(); //名字查找函数
void modify(); //学生信息修改函数
void del(); //删除学生信息函数
void add(); //增加学生信息函数
void analy(); //统计各科各类别人数
void ansave(int a[6][5],float b[6][5]); //统计结果保存函数
void caculate(); //统计各科平均分及总分
void key1(){ //用户界面1
int j;
printf("\n\n\t\\****************欢迎来到学生管理系统*******************\\\n");
printf("\tRead a file\n");
printf("\t1.文件录入\n");
printf("\t1.Record from file\n");
printf("\t2.手动录入\n");
printf("\t2.Append record manually\n");
printf("\t0.exit\n");
printf("\t请输入你选择的录入方式:");
scanf("%d",&j);
switch(j)
{
case 1:fileinput();break; //调用文件录入函数
case 2:maninput();break; //调用手动输入函数
case 0:exit(0);break; //退出
default:{
printf("\n\t请重新选择");
key1();}
}
}
void fileinput(void) //文件录入函数
{
FILE *fp;
struct student *p1=NULL,*p2=NULL;
int j,k,l;
char filename[20];
printf("\n\n\t请输入文件路径:"); //键盘输入文件名
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n\t对不起,文件错误,打开文件失败");
exit(0);
}
printf("\n\t文件打开成功.....");
printf("\n\t请输入科目总数:");
scanf("%d",&i);
printf("\n\t请输入录入人数:");
scanf("%d",&j);
head=p1=(struct student*)malloc(sizeof(struct student));
for(l=1;l<=j;l++)
{
fscanf(fp,"%s",p1->name);
fscanf(fp,"%d",&p1->num);
for(k=0;k<i;k++)
fscanf(fp,"%f",&p1->score[k]);
p1->next=(struct student*)malloc(sizeof(struct student));
p2=p1;
p1=p1->next;
}
p1->next=NULL;
p2->next=NULL;
fclose(fp);
printf("\n\t文件录入成功.....");
}
void maninput(void){ //手动录入函数
struct student *p1=NULL,*p2=NULL;
int j;
char ch;
printf("\n\t请输入录入科目总数:");
scanf("%d",&i);
head=p1=(struct student*)malloc(sizeof(struct student));
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf("\n\t");
scanf("%s%d",p1->name,&p1->num);
for(j=0;j<i;j++)
scanf("%f",&p1->score[j]);
printf("\n\t是否继续输入(y/n):");
getchar();
ch=getchar();
printf("\n\t");
while(ch=='y')
{
p2=(struct student*)malloc(sizeof(struct student));
scanf("%s%d",p2->name,&p2->num);
for(j=0;j<i;j++)
scanf("%f",&p2->score[j]);
printf("\n\t是否继续输入(y/n):");
getchar();
ch=getchar();
printf("\n\t");
p1->next=p2;
p1=p2;
};
p1->next=NULL;
printf("\n\t手动录入成功......");
printf("\n\t进入功能菜单");
}
void avetotal(){ //求学生平均分总分
struct student *p1=NULL,*p2=NULL;
int k;
p1=head;
while(p1!=NULL)
{
p1->tot=0;
for(k=0;k<i;k++)
p1->tot=p1->tot+p1->score[k];
p1->ave=p1->tot/i;
p2=p1;
p1=p1->next;
}
}
void number(){ //求学生排名函数
struct student *p1=NULL,*p2=NULL,*p3=NULL;
bool flag;
int j=1;
p3=p1=head;
p2=p1->next;
do{
if(p2==NULL)
{
p1->no=1;
break;
}
flag=false;
if((p1->tot)<(p2->tot))
{
p1->next=p2->next;
p2->next=p1;
head=p2;
p2=p1->next;
p3=head;
flag=true;
}
else{
p2=p2->next;
p1=p1->next;
};
while(p2!=NULL)
{
if((p1->tot)<(p2->tot))
{
p1->next=p2->next;
p3->next=p2;
p2->next=p1;
p3=p2;
p2=p1->next; //调用交换函数
flag=true;
}
else
{
p2=p2->next;
p1=p1->next;
p3=p3->next;
};
};
p3=p1=head;
p2=p1->next;
}while(flag);
while(p1!=NULL)
{
p1->no=j;
j++;
p1=p1->next;
}
}
void key2(){ //用户界面2
int j;
char ch;
printf("\n\n\n\n\n\t");
printf("\n\t***********************主菜单*****************************");
printf("\n\n\t");
printf("\n\t*********************排序区域(Sort)***********************");
printf("\n\t1. Sort in descending order by total score of every student");
printf("\n\t2. Sort in ascending order by total score of every student");
printf("\n\t3. Sort in ascending order by number");
printf("\n\t4. Sort in dictionary order by name");
printf("\n");
printf("\n\t*********************查询区域(Search)********************");
printf("\n\t5. Search by number");
printf("\n\t6. Search by name");
printf("\n\t");
printf("\n\t*********************修改区域(Modify)**********************");
printf("\n\t7. Modify information of student");
printf("\n\t8. Delete student");
printf("\n\t9. Add student");
printf("\n\t");
printf("\n\t*********************课程操作区域(Course)******************");
printf("\n\t10. Statistic analysis for every course");
printf("\n\t11.Calculate total and average score of every course");
printf("\n\t*********************保存文件区域(Save)********************");
printf("\n\t12.Write to a file");
printf("\n\t0.exit");
printf("\n\t请输入你的选择:");
scanf("%d",&j);
switch(j)
{
case(1):deorder();break; //调用升序函数
case(2):asorder();break; //调用降序函数
case(3):numorder();break; //调用学号排序函数
case(4):dictionary();break; //调用字典排序函数
case(5):senum();break; //调用学号查询函数
case(6):senam();break; //调用名字查找函数
case(7):modify();break; //调用修改学生信息函数
case(8):del();break; //调用删除学生信息函数
case(9):add();break; //调用增加学生信息函数
case(10):analy();break; //调用各科各类别统计函数
case(11):caculate();break; //调用统计各科总分及平均分函数
case(12):save(); //调用保存函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
case(0):exit(0); //停止运行
default:{
printf("\n\t请重新选择");
key2();}
}
}
void deorder(){ //总分由高到低排序
struct student *p1=NULL,*p2=NULL,*p3=NULL;
bool flag;
char ch;
p3=p1=head;
p2=p1->next;
do{
if(p2==NULL)
break;
flag=false;
if((p1->tot)<(p2->tot))
{
p1->next=p2->next;
p2->next=p1;
head=p2;
p2=p1->next;
p3=head;
flag=true;
}
else{
p2=p2->next;
p1=p1->next;
};
while(p2!=NULL)
{
if((p1->tot)<(p2->tot))
{
p1->next=p2->next;
p3->next=p2;
p2->next=p1;
p3=p2;
p2=p1->next; //调用交换函数
flag=true;
}
else
{
p2=p2->next;
p1=p1->next;
p3=p3->next;
};
};
p3=p1=head;
p2=p1->next;
}while(flag);
output(); //调用输出函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
else
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void asorder(){ //总分由低到高排序
struct student *p1=NULL,*p2=NULL,*p3=NULL;
bool flag;
char ch;
p3=p1=head;
p2=p1->next;
do{
if(p2==NULL)
break;
flag=false;
if((p1->tot)>(p2->tot))
{
p1->next=p2->next;
p2->next=p1;
head=p2;
p2=p1->next;
p3=head;
flag=true;
}
else{
p2=p2->next;
p1=p1->next;
};
while(p2!=NULL)
{
if((p1->tot)>(p2->tot))
{
p1->next=p2->next;
p3->next=p2;
p2->next=p1;
p3=p2;
p2=p1->next;
flag=true;
}
else
{
p2=p2->next;
p1=p1->next;
p3=p3->next;
};
};
p3=p1=head;
p2=p1->next;
}while(flag);
output(); //调用输出函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
else
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void output(){ //输出函数
struct student *p1=NULL;
int j;
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
p1=head;
while(p1!=NULL)
{
printf("%-13s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
printf("\n\t");
p1=p1->next;
}
}
void numorder(){ //学号排序
struct student *p1=NULL,*p2=NULL,*p3=NULL;
bool flag;
char ch;
p3=p1=head;
p2=p1->next;
do{
if(p2==NULL)
break;
flag=false;
if((p1->num)>(p2->num))
{
p1->next=p2->next;
p2->next=p1;
head=p2;
p2=p1->next;
p3=head;
flag=true;
}
else{
p2=p2->next;
p1=p1->next;
};
while(p2!=NULL)
{
if((p1->num)>(p2->num))
{
p1->next=p2->next;
p3->next=p2;
p2->next=p1;
p3=p2;
p2=p1->next;
flag=true;
}
else
{
p2=p2->next;
p1=p1->next;
p3=p3->next;
};
};
p3=p1=head;
p2=p1->next;
}while(flag);
output(); //调用输出函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
else
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void dictionary(){ //字典排序
struct student *p1=NULL,*p2=NULL,*p3=NULL;
bool flag;
char ch;
p3=p1=head;
p2=p1->next;
do{
if(p2==NULL)
break;
flag=false;
if(strcmp(p1->name,p2->name)>0)
{
p1->next=p2->next;
p2->next=p1;
head=p2;
p2=p1->next;
p3=head;
flag=true;
}
else{
p2=p2->next;
p1=p1->next;
};
while(p2!=NULL)
{
if(strcmp(p1->name,p2->name)>0)
{
p1->next=p2->next;
p3->next=p2;
p2->next=p1;
p3=p2;
p2=p1->next;
flag=true;
}
else
{
p2=p2->next;
p1=p1->next;
p3=p3->next;
};
};
p3=p1=head;
p2=p1->next;
}while(flag);
output(); //调用输出函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
else
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void save(){ //保存函数
char filename[20];
FILE *fp;
struct student *p1=NULL;
int k;
p1=head;
printf("\n\t请输入你要保存到的目标文件:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n\t对不起,文件打开失败!!!");
save();
exit(0);
}
while(p1!=NULL)
{
fprintf(fp,"%20s%6d",p1->name,p1->num);
for(k=0;k<i;k++)
fprintf(fp,"%6.1f",p1->score[k]);
fprintf(fp,"%6.1f%7.1f%4d\n",p1->ave,p1->tot,p1->no);
p1=p1->next;
}
fclose(fp);
printf("\n\t保存成功.....");
}
void senum(){ //学号查询函数
int n,j;
char ch;
bool flag;
struct student *p1;
do
{
flag=true;
printf("\n\t请输入该学生学号:");
scanf("%d",&n);
p1=head;
while(p1!=NULL)
{
if(p1->num==n)
{
flag=false;
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
printf("%-10s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
break;
}
p1=p1->next;
}
if(flag)
printf("\n\t对不起,该学号不存在!!!!");
printf("\n\t是否继续查找(y/n):");
getchar();
ch=getchar();
}while(ch=='y');
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void senam(){ //名字查询函数
int j;
bool flag;
char ch,na[20];
struct student *p1;
do
{
printf("\n\t请输入该学生姓名:");
scanf("%s",na);
p1=head;
flag=true;
while(p1!=NULL)
{
if(strcmp(p1->name,na)==0)
{
flag=false;
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
printf("%-10s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
}
p1=p1->next;
}
if(flag)
printf("\n\t对不起,该学生不存在!!!");
printf("\n\t是否继续查找(y/n):");
getchar();
ch=getchar();
}while(ch=='y');
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void modify(){ //修改学生信息函数
int n,j;
char ch;
bool flag;
struct student *p1=NULL;
do{
flag=true;
p1=head;
printf("\n\t请输入修改学生的学号:");
scanf("%d",&n);
while(p1!=NULL)
{
if(p1->num==n)
{
flag=false;
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
printf("%-13s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
printf("\n\t是否修改(y/n):");
getchar();
ch=getchar();
if(ch=='n')break;
printf("\n\t请重新输入该学生信息..");
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf("\n\t");
scanf("%s%d",p1->name,&p1->num);
for(j=0;j<i;j++)
scanf("%f",&p1->score[j]);
printf("\n\t修改成功....");
break;
}
p1=p1->next;
}
if(flag)
printf("\n\t对不起,该学号不存在!!!!");
printf("\n\t是否继续修改(y/n):");
getchar();
ch=getchar();
}while(ch=='y');
avetotal(); //调用求总分平均分函数
number(); //调用求排名函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void del(){ //删除学生信息函数
struct student *p1=NULL,*p2=NULL;
int n,j;
bool flag;
char ch;
do{
flag=true;
printf("\n\t请输入删除学生的学号:");
scanf("%d",&n);
p1=head;
p2=p1->next;
if(p1->num==n)
{ flag=false;
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
printf("%-13s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
printf("\n\t是否修改(y/n):");
getchar();
ch=getchar();
if(ch=='n')break;
free(p1);
head=p1=p2;
p2=p1->next;
printf("\n\t删除成功....");
}
while(p2!=NULL)
{
if(p2->num==n)
{
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf(" 平均分 总分 排名");
printf("\n\t");
printf("%-13s%-6d",p1->name,p1->num);
for(j=0;j<i;j++)
printf("%-7.1f",p1->score[j]);
printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
printf("\n\t是否修改(y/n):");
getchar();
ch=getchar();
if(ch=='n')break;
flag=false;
p1->next=p2->next;
free(p2);
printf("\n\t删除成功....");
break;
}
p1=p2;
p2=p1->next;
}
if(flag)
printf("\n\t对不起,该学号不存在!!!!");
printf("\n\t是否继续删除(y/n):");
getchar();
ch=getchar();
}while(ch=='y');
number(); //调用求排名函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void add(){ //增加学生信息函数
struct student *p1;
int j;
char ch;
do{
p1=(struct student*)malloc(sizeof(struct student));
printf("\n\t姓名 学号");
for(j=1;j<=i;j++)
printf(" 成绩%d",j);
printf("\n\t");
scanf("%s%d",p1->name,&p1->num);
for(j=0;j<i;j++)
scanf("%f",&p1->score[j]);
p1->next=head;
head=p1;
printf("\n\t添加成功....");
printf("\n\t是否继续添加(y/n):");
getchar();
ch=getchar();
}while(ch=='y');
avetotal(); //调用求总分平均分函数
number(); //调用求排名函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void analy(){ //统计各科各类别人数函数
struct student *p1;
int cou[6][5];
float per[6][5];
int j,k,l=0;
char ch;
for(j=0;j<i;j++)
for(k=0;k<5;k++)
cou[j][k]=0; //计数器清零
p1=head;
while(p1!=NULL)
{ l++;
for(j=0;j<i;j++)
{
if(p1->score[j]>=90)
cou[j][0]++;
else if(p1->score[j]>=80)
cou[j][1]++;
else if(p1->score[j]>=70)
cou[j][2]++;
else if(p1->score[j]>=60)
cou[j][3]++;
else
cou[j][4]++;
}
p1=p1->next;
}
printf("\n\t");
for(j=1;j<=i;j++) //输出统计结果
printf("科目%d ",j);
printf("\n100-90");
for(j=0;j<i;j++)
{
per[j][0]=cou[j][0]*1.0/l;
printf("%2d(%3.2f)",cou[j][0],per[j][0]);
}
printf("\n89-80 ");
for(j=0;j<i;j++)
{
per[j][1]=cou[j][1]*1.0/l;
printf("%2d(%3.2f)",cou[j][1],per[j][1]);
}
printf("\n79-70 ");
for(j=0;j<i;j++)
{
per[j][2]=cou[j][2]*1.0/l;
printf("%2d(%3.2f)",cou[j][2],per[j][2]);
}
printf("\n69-60 ");
for(j=0;j<i;j++)
{
per[j][3]=cou[j][3]*1.0/l;
printf("%2d(%3.2f)",cou[j][3],per[j][3]);
}
printf("\n59-0 ");
for(j=0;j<i;j++)
{
per[j][4]=cou[j][4]*1.0/l;
printf("%2d(%3.2f)",cou[j][4],per[j][4]);
}
printf("\n\t是否保存统计结果到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
ansave(cou,per); //调用统计结果保存函数
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存学生信息到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void ansave(int a[6][5],float b[6][5]){ //统计结果保存函数
FILE *fp;
int j;
char filename[20];
printf("\n\t请输入保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n\t对不起,文件打开失败!!!!");
key2();
}
for(j=1;j<=i;j++)
fprintf(fp,"科目%d ",j);
fprintf(fp,"\n100-90");
for(j=0;j<i;j++)
fprintf(fp,"%2d(%3.2f)",a[j][0],b[j][0]);
fprintf(fp,"\n89-80 ");
for(j=0;j<i;j++)
fprintf(fp,"%2d(%3.2f)",a[j][1],b[j][1]);
fprintf(fp,"\n79-70 ");
for(j=0;j<i;j++)
fprintf(fp,"%2d(%3.2f)",a[j][2],b[j][2]);
fprintf(fp,"\n69-60 ");
for(j=0;j<i;j++)
fprintf(fp,"%2d(%3.2f)",a[j][3],b[j][3]);
fprintf(fp,"\n59-0 ");
for(j=0;j<i;j++)
fprintf(fp,"%2d(%3.2f)",a[j][4],b[j][4]);
fclose(fp);
printf("\n\t保存成功......");
}
void caculate(){ //统计各科总分平均分函数
struct student *p1=NULL;
float to[6],av[6];
int j,l=0;
char ch;
for(j=0;j<6;j++)
to[j]=0;
p1=head;
while(p1!=NULL)
{
l++;
for(j=0;j<i;j++)
to[j]=to[j]+p1->score[j];
p1=p1->next;
}
for(j=0;j<i;j++)
av[j]=to[j]*1.0/l;
printf("\n\t");
for(j=1;j<=i;j++) //输出统计结果
printf("科目%d ",j);
printf("\n总分 ");
for(j=0;j<i;j++)
printf("%8.1f",to[j]);
printf("\n平均分");
for(j=0;j<i;j++)
printf("%8.1f",av[j]);
printf("\n\t是否返回主菜单(y/n):");
getchar();
ch=getchar();
if(ch=='y')
key2(); //调用用户界面2
printf("\n\t是否保存学生信息到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
exit(0);
}
void main(){
char ch;
key1();
avetotal();
number();
key2();
printf("\n\t是否保存修改到文件(y/n):");
getchar();
ch=getchar();
if(ch=='y')
save(); //调用保存函数
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。