数据结构实训之学生信息管理系统

来源:互联网 发布:傲剑金蛇数据 编辑:程序博客网 时间:2024/06/13 00:29


 
 在CODE上查看代码片派生到我的代码片
  1. /*   
  2. Copyright (c)2016,烟台大学计算机与控制工程学院   
  3. * All rights reserved.   
  4. * 文件名称:项目1.cpp   
  5. * 作    者:泮春宇
  6. * 完成日期:2016年1月1日   
  7. * 版 本 号:v1.0    *问题描述:学生信息管理系统 *输入描述:无   *程序输出:测试数据   

 我的学生信息管理系统包括基于管理员的操作和基于学生的操作。管理员的操作应包括录入学生信息,查询信息,修改信息,删除信息等;学生的操作只有查询信息。

以顺序表SeqList存储集合,在此基础上完成对集合的操作。

类包括俩个一个为student类:其中包括学生的学号,姓名,年龄,以及各科的成绩,总成绩及平均成绩等。

第二个类为SeqList:其中包括一个student类的数组和一个数组大小的size;以及对顺序表的插入和删除操作。

管理员账号为:boss

管理员密码为:10086


系统的功能结构,用文字描述系统要完成的功能,用结构框图表示各个功能之间的关系

 


 

ADT  SeqList{

数据对象D:D是具有数值的常量C和没有数值的变量V;

数据关系:R={<(V或者C)P(V或者C)>|V,C∈D, <(V或者C)P(V或者C)>表示由运算符P结合起来的表达式E}

基本操作:

Void chang(int  n)

初始条件:list类型的数组存在;

操作结果:修改list中的数据

void  del(int n)

初始条件:list类型的数组存在;

操作结果:删除一个list数组中的元素。

Void erfeng(datatype a[],int key,int n)

初始条件:list类型的数组存在;

操作结果:对datatype类型的数组进行排序。

void Find(datatype& item)

初始条件:list类型的数组存在;

操作结果:将datatype类型的数组显示在显示器上。

void kecheng(int n)

初始条件:list类型的数组存在;

操作结果:对list类型的数组查找其课程数据项。

void luru(int n)

初始条件:list类型的数组存在;

操作结果:将数据写入list类型的数组

void paixu1(datatype array[],int k,int length)

初始条件:list类型的数组存在;

操作结果:datatype类型的数组array中的数据进行排序。

 

 

void xianshi(int n)

初始条件:list类型的数组存在;

操作结果:将liste类型的数组中的数据进行显示。

} ADT

 

                 只有一个工程如图4.1


 

 


共有俩个类,一个为SeqList如图4.2.1;另一个为student,如图4.2.2

              

                            

 函数调用;

                      

                            

class student

{

private:

       int num;     //学号

       int grade[5];     //成绩数组

       float sum;     //总成绩

       float ping;    //平均成绩

       char name[20];   //姓名

       int age;        //年龄

public:

       student(){}

       void setnum(int nu){num=nu;}         建立学号

       int getnum(){int n;n=num;return n;}       得到学号

       void setgrade(int a,int b){grade[b]=a;}     建立成绩

       int getgrade(int n){inta;a=grade[n];return a;}   得到成绩

       void setname(char *na){strcpy(name,na);}     建立姓名

       char *getname(){char *na;na=name;returnna;}   得到姓名

       void setage(int a){age=a;}              建立年龄

       int getage(){int a;a=age;return a;}      得到年龄

       friend class SeqList;        

       float getping();                     获得平均成绩

       int getsum();                         获得总成绩

       student (student &s);

};


 

 删除函数模块设计

void SeqList::del(int n)

{

      system("cls");

      int i,j;

      int c;

      printf("\n输入你要删除的学生学号 :\n");

      printf("num:");

    cin>>c;

      for(i=0;i<list.size;i++)

            if(list.data[i].getnum()==c) break;

            for(j=i;j<list.size;j++)

                  list.data[j]=list.data[j+1];

            printf("\t\t你已经删除 %d的信息\n",c);

            list.size--;

            duoyu2();

}

 

 

 

 

 

 


输入模块设计

voidSeqList::luru(int n)         //luru函数

{    

       system("cls");

   int j,num,age,grade[5],k=0;                  //输入5科成绩

       char ch[20];

       do

       {  k=0;

              system("cls");

              printf("\n输入学生信息:\n");

              printf("\n学号: ");

              scanf("%d",&num);

              for(inti=0;i<=list.size;i++)

                     if(list.data[i].getnum()==num)

            k=1;

           if(k==0)

          {

                           

                            list.data[size].setnum(num);

                            printf("\n姓名: ");

                            cin>>ch;

                            list.data[size].setname(ch);

                            printf("\n年龄: ");

                            cin>>age;

                            list.data[size].setage(age);

                            printf("注:(成绩1为数学,成绩2为计算机,成绩3为英语,成绩4为语文,成绩5为思修 \n");

                            for(j=0;j<5;j++)              //输出5科成绩

                            {                

                                   printf("\n成绩%d: ",j+1);

                                   cin>>grade[j];

                                   list.data[size].setgrade(grade[j],j);

                            }

                            list.size++;

                     }

                      else if(k==1)

                             printf("此学号已存在,请查实后再输入!!");

                     printf("\n如要继续输入学生信息,请选择(y/n): ");

                     scanf("%s",ch);       //判断是否要继续

                    

       }

       while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);

       paixun(list.data,list.size);

       guanliyuan(n);

}

 

修改函数模块设计

voidSeqList::change(int a)

{

       int n,i,j;

       int k=0;

       int num,grade[5];

       char name[20],ch[5];

       printf("请输入要修改的学生学号:");

       cin>>n;

       for(i=0;i<list.size;i++)

       {

              if(list.data[i].getnum()==n)

              {

                    

                     printf("\n你确定要修改学号吗?(y/n): ");

                     scanf("%s",ch);

                     if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)    //判断是否要继续

                     {

                            printf("\n学号:");

                            cin>>num;

                            list.data[i].setnum(num);

                            k=1;

                     }

                     printf("\n你确定要修改学生姓名吗?(y/n): ");

                     cin>>ch;

                     if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)     //判断是否要继续

                     {

                            printf("\n名字:");

                            cin>>name;

                            list.data[i].setname(name);

                            k=1;

                     }

                     printf("\n你确定要修改学生成绩吗?(y/n): ");

                     scanf("%s",ch);

                     printf("\n");

                     if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)   //判断是否要继续

                     {

                            printf("注:(成绩1为数学,成绩2为计算机,成绩3为英语,成绩4为语文,成绩5为思修 \n");

                            for(j=0;j<5;j++)

                            { 

                                   printf("成绩%d:",j+1);

                                   cin>>grade[j];

                                   list.data[size].setgrade(grade[j],j);

                                   printf("\n");

                                   k=1;

源代码

#include<iostream.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<stdio.h>const MaxListSize=100;class student{private:int num;      //姓名int grade[5];//学号float sum;//总分float ping;//平均char name[20];//成绩int age;//年龄public:student(){}//学生void setnum(int nu){num=nu;}//建立名字int getnum(){int n;n=num;return n;}//得到名字void setgrade(int a,int b){grade[b]=a;}//建立学号int getgrade(int n){int a;a=grade[n];return a;}//输入学号void setname(char *na){strcpy(name,na);}//建立名字char *getname(){char *na;na=name;return na;}void setage(int a){age=a;}//年龄int getage(){int a;a=age;return a;}//得到年龄friend class SeqList;//班级成绩float getping();//平均int getsum();//总成绩student (student &s);//学生个人成绩};int student::getsum(){int sum=0;for(int i=0;i<5;i++)sum=sum+grade[i];return sum;}float student::getping(){float sum=0;for(int i=0;i<5;i++)sum=sum+grade[i];sum=sum/5;return sum;}student::student (student &s){num=s.num;age=s.age;strcpy(name,s.name);for(int i=0;i<5;i++)grade[i]=s.grade[i];}typedef student datatype;class SeqList {private:datatype data[MaxListSize];public:int size;int ListSize(){return size;};//建立数组void Find(datatype& item);//找到void Find3(datatype& item);//找到void Insert(datatype& item,int pos);//删除void ClearList();void luru(int n);//录入成绩void xianshi(int n); //学号void xinming(int n);//姓名查询    void xuehao(int a);//学号    void kecheng(int n);//void change(int a);//修改成绩void del(int n);//删除成绩void paixu1(datatype array[],int k,int length);//void Find1(datatype& item,int j);返回管理员datatype erfeng(datatype a[],int key,int n);void duoyu1();//返回目录void Find2(datatype& item);//返回目录2void zong(int n);//总目录};void SeqList::Find1(datatype& item,int j){    printf("学号:%d",item.getnum());    printf(" 姓名:%s",item.getname());printf(" 年龄:%d",item.getage());printf(" 成绩%d:%d",j,item.getgrade(j));printf("\n");}void SeqList::Find2(datatype& item){    printf("学号:%d",item.getnum());    printf(" 姓名:%s",item.getname());printf(" 年龄:%d",item.getage());printf(" 总成绩:%d",item.getsum());printf(" 平均成绩:%.2f",item.getping());printf("\n");}void paixun(datatype array[],int length)  //希尔排序  >快速排序 《插入排序 简单{    int d = length/2;   //设置希尔排序的增量int i ;int j;student temp,t;while(d>=1){for(i=d;i<length;i++){temp=array[i];//分组j=i-d;while(j>=0 && array[j].getnum()>temp.getnum())//排序{t=array[j];array[j+d]=t;j=j-d;}array[j+d]=temp;}d= d/2;    //缩小增量}}void SeqList::Find(datatype& item){    printf("学号:%d",item.getnum());    printf(" 姓名:%s",item.getname());printf(" 年龄:%d",item.getage());for(int j=0;j<5;j++)printf(" 成绩:%d",item.getgrade(j));printf(" 总成绩:%d",item.getsum());printf(" 平均成绩:%.2f",item.getping());}void SeqList::Find3(datatype& item){    printf("学号:%d",item.getnum());    printf(" 姓名:%s",item.getname());printf(" 年龄:%d",item.getage());for(int j=0;j<5;j++)printf(" 成绩:%d",item.getgrade(j));printf(" 总成绩:%d",item.getsum());printf(" 平均成绩:%.2f",item.getping());}void SeqList::ClearList (){size =0;}SeqList list;void guanliyuan(int n);void guanliyuanmain(int n);void guanliyuan_denglu(int n);void duoyu1();void xianshi1(int n);void duoyu2();void paixun(datatype array[],int length);void studentmain(int n);void zhu();void main(){int a;do                              {system("cls");list.ClearList();printf("\n\n\n");printf("\t\t\t    欢迎使用学生信息查询系统       \n ");printf("\t\t\t******************************\n");printf("\t\t\t*                            *\n");printf("\t\t\t*    1.管理员登陆            *\n");printf("\t\t\t*    2.学员登录              *\n");printf("\t\t\t*    3.退出                  *\n");printf("\t\t\t*                            *\n");printf("\t\t\t******************************\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>3)               printf("您输入的有误,请重新输入!!!");switch(a){case 1:guanliyuan_denglu(0);break;   case 2:studentmain(1);break;            case 3:exit(0);break;               }  }while(a!=0);             }void zhu(){int a;do                              {system("cls");printf("\n\n\n");printf("\t\t\t    欢迎使用学生信息查询系统       \n ");printf("\t\t\t******************************\n");printf("\t\t\t*                            *\n");printf("\t\t\t*    1.管理员登陆            *\n");printf("\t\t\t*    2.学员登录              *\n");printf("\t\t\t*    3.退出                  *\n");printf("\t\t\t*                            *\n");printf("\t\t\t******************************\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>3)              printf("您输入的有误,请重新输入!!!");switch(a){case 1:guanliyuan_denglu(0);break;   case 2:studentmain(1);break;             case 3:exit(0);break;               }  }while(a!=0); //0 3 退出}void guanliyuan_denglu(int n){system("cls");//清屏char z[10],sun[10]={'\0'},c;int i=0;printf("\t\t\n\n\n\n");printf("\t\t\t    欢迎使用学生信息查询系统       \n ");printf("\t*************************************************************\n\n\n");printf("\t\t\t     请输入管理员账号:");scanf("%s",&z);printf("\t\t\t     请输入管理员密码:");while(1){c=getch();if(c != '\r'){printf("*");sun[i]=c;i++;}else break;}if(strcmp("boss",z)==0&&strcmp("10086",sun)==0)guanliyuan(n);else {printf("\t\t\t您输入的有误!!!");}}void guanliyuan(int n)             {int a;                do{system("cls");printf("\n\n\n");printf("\t\t\t        欢迎使用学生信息查询系统       \n ");printf("\t\t\t**************************************\n");printf("\t\t\t*                                    *\n");printf("\t\t\t*          1.录入系统                *\n");printf("\t\t\t*          2.查询系统                *\n");//有序 折半查找算法        printf("\t\t\t*          3.修改系统                *\n");printf("\t\t\t*          4.删除系统                *\n");printf("\t\t\t*          5.返回主菜单              *\n");printf("\t\t\t*          6. 退出                   *\n");printf("\t\t\t*                                    *\n");printf("\t\t\t**************************************\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>6)               printf("您输入的有误,请重新输入!!!");switch(a){case 1:list.luru(n);break;   case 2:guanliyuanmain(n);break;case 3:list.change( n);break;case 4:list.del(n);break;case 5:zhu();break;case 6:exit(0);break;            }}while(a!=0);                      system("cls"); }void guanliyuanmain(int n) //学生                    {   int a;                    do   {   system("cls");   printf("\n\n\n");   printf("\t\t\t       欢迎使用学生信息查询系统       \n ");      printf("\t\t\t*************************************\n");    printf("\t\t\t*                                   *\n");   printf("\t\t\t*        1.查询全班信息             *\n");   printf("\t\t\t*        2.查询个人信息             *\n");   printf("\t\t\t*        3.返回上一级菜单           *\n");   printf("\t\t\t*        4.返回主菜单               *\n");   printf("\t\t\t*        5.退出                     *\n");   printf("\t\t\t*                                   *\n");      printf("\t\t\t*************************************\n\n");   printf("\t\t\t请输入你要操作的序号:\n");   printf("\t\t\t你要输入的序号是:");   scanf("%d",&a);   if(a<0||a>4)               printf("您输入的有误,请重新输入!!!");   switch(a)   {      case 1:list.xianshi(n);break;   case 2:xianshi1(n);break;   case 3:guanliyuan(n);break;   case 4:zhu();break;               case 5:exit(0);break;                 }   }   while(a!=0);                           }void SeqList::luru(int n)        {system("cls");int j,num,age,grade[5],k=0;                 char ch[20];do{   k=0;system("cls");printf("\n输入学生信息:\n");printf("\n学号: ");scanf("%d",&num);for(int i=0;i<=list.size;i++)if(list.data[i].getnum()==num)k=1;if(k==0){list.data[size].setnum(num);printf("\n姓名: ");cin>>ch;list.data[size].setname(ch);printf("\n年龄: ");cin>>age;list.data[size].setage(age);printf("注:(成绩1为高数,成绩2为计算机,成绩3为英语,成绩4为数据结构,成绩5为思修 \n");for(j=0;j<5;j++)             { printf("\n成绩%d: ",j+1);cin>>grade[j]; list.data[size].setgrade(grade[j],j);}list.size++;}else if(k==1)printf("此学号已存在,请查实后再输入!!");printf("\n如要继续输入学生信息,请选择(y/n): ");scanf("%s",ch);       }while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);paixun(list.data,list.size);guanliyuan(n);}void SeqList::xianshi(int n){system("cls");int i;for(i=0;i<list.size;i++){Find(list.data[i]);printf("\n");}if(n==1)duoyu1();else if(n==0)duoyu2();}void xianshi1(int n){int a;do{system("cls");printf("\n\n\n");printf("\t\t\t      欢迎使用学生信息查询系统       \n ");printf("\t\t\t**************************************\n");printf("\t\t\t*                                    *\n");printf("\t\t\t*          1.按姓名查找              *\n");printf("\t\t\t*          2.按学号查找              *\n");printf("\t\t\t*          3.按课程名查找            *\n");printf("\t\t\t*          4.按总成绩查找            *\n");printf("\t\t\t*          5.返回主菜单              *\n");printf("\t\t\t*          6. 退出                   *\n");printf("\t\t\t*                                    *\n");printf("\t\t\t**************************************\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>6)               printf("您输入的有误,请重新输入!!!");switch(a){case 1:list.xinming(n);break;   case 2:list.xuehao(n);break;case 3:list.kecheng(n);break;case 4:list.zong(n);break;case 5:zhu();break;case 6:exit(0);break;}}while(a!=0);}void SeqList::xinming(int n){system("cls");char key[20];printf("请输入姓名:");scanf("%s",key);for(int i=0;i<list.size;i++){if(i>list.size)printf("无该人,请确认后在输入!");else if(strcmp(list.data[i].getname(),key)==0)Find(list.data[i]);}if(n==1)duoyu1();else if(n==0)duoyu2();}datatype SeqList::erfeng(datatype a[],int key,int n)  //二分法{int low=0,high=n-1;int mid;while(low<=high){mid=(low+high)/2;if(a[mid].getnum()==key)return a[mid];else if(a[mid].getnum()<key)low=mid+1;else high=mid-1;}guanliyuanmain(0);printf("无该学生!!");}void SeqList::xuehao(int a){    system("cls");int n;student stu;printf("请输入学号:");cin>>n;stu=erfeng(list.data,n,list.size);Find(stu);getch();if(n==1)duoyu1();else if(n==0)duoyu2();}void SeqList::kecheng(int n){   system("cls");int key,j;student stu[100];printf("请输入课程代号:");printf("(1为高数,2为计算机,3为英语,4为数据结构,5为思修) \n");cin>>key;if(key>5||key<1)printf("输入错误!!");else for(j=0;j<list.size;j++){stu[j]=list.data[j];}paixu1(stu,key,list.size);if(n==1)duoyu1();else if(n==0)duoyu2();}void SeqList::zong(int n){system("cls");int j;student stu[100];for(j=0;j<list.size ;j++)        stu[j]=list.data[j];paixu1(stu,9,list.size);getch();if(n==1)duoyu1();else if(n==0)duoyu2();}void SeqList::change(int a){int n,i,j;int k=0,l=0;int num,grade[5];char name[20],ch[5];printf("请输入要修改的学生学号:");cin>>n;for(i=0;i<list.size;i++){if(list.data[i].getnum()==n){printf("\n你确定要修改学号吗?(y/n): ");scanf("%s",ch);if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)    {printf("\n学号:");cin>>num;for(j=i;j<list.size;j++)if(list.data[j].getnum()==num)l=1;if(l==0){list.data[i].setnum(num);k=1;}else {k=8;printf("学生输入异常!");getch();break;duoyu2();}}printf("\n你确定要修改学生姓名吗?(y/n): ");cin>>ch;if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)     { printf("\n名字:"); cin>>name;list.data[i].setname(name);k=1;}printf("\n你确定要修改学生年龄吗?(y/n): ");cin>>ch;if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)     { int age;printf("\n年龄:"); cin>>age;list.data[i].setage(age);k=1;}printf("\n你确定要修改学生成绩吗?(y/n): ");scanf("%s",ch);printf("\n");if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)   {printf("注:(成绩1为高数,成绩2为计算机,成绩3为英语,成绩4为数据结构,成绩5为思修 )\n");for(j=0;j<5;j++){  printf("成绩%d:",j+1); cin>>grade[j];list.data[i].setgrade(grade[j],j);printf("\n"); k=1;}}}break;}system("cls");if(k==1)Find(list.data[i]);else if(k==0)printf("无该学生,或您没执行操作!!!");paixun(list.data,list.size);duoyu2();}void SeqList::del(int n){system("cls");int i,j;int c;int k=0;printf("\n输入你要删除的学生学号 :\n");printf("num:");    cin>>c;for(i=0;i<list.size;i++)if(list.data[i].getnum()==c)  {k=1;break;}if(k==1){for(j=i;j<list.size;j++)list.data[j]=list.data[j+1];printf("\t\t你已经删除 %d的信息\n",c);list.size--;}else if(k==0)printf("无该学生,请确认后再输入!!!");duoyu2();}void SeqList::paixu1(datatype array[],int k,int length){    int d = length/2;   //设置希尔排序的增量int i ;int j;student temp,t;if(k==9){while(d>=1){for(i=d;i<length;i++){temp=array[i];j=i-d;while(j>=0 && array[j].getsum()<temp.getsum()){t=array[j];array[j+d]=t;j=j-d;}array[j+d]=temp;}d= d/2;    //缩小增量}for(i=0;i<list.size;i++)Find2(array[i]);}else if(k!=9){while(d>=1){for(i=d;i<length;i++){temp=array[i];j=i-d;while(j>=0 && array[j].getgrade(k)<temp.getgrade(k)){t=array[j];array[j+d]=t;j=j-d;}array[j+d]=temp;}d= d/2;    //缩小增量}for(i=0;i<list.size;i++)Find1(array[i],k);}}void studentmain(int n){    int a;                    do   {   system("cls");   printf("\n\n\n");   printf("\t\t\t       欢迎使用学生信息查询系统       \n ");      printf("\t\t\t*************************************\n");    printf("\t\t\t*                                   *\n");   printf("\t\t\t*        1.查询全班信息             *\n");   printf("\t\t\t*        2.查询个人信息             *\n");   printf("\t\t\t*        3.返回上一级菜单           *\n");   printf("\t\t\t*        4.退出                     *\n");   printf("\t\t\t*                                   *\n");      printf("\t\t\t*************************************\n\n");   printf("\t\t\t请输入你要操作的序号:\n");   printf("\t\t\t你要输入的序号是:");   scanf("%d",&a);   if(a<0||a>4)            //判断输入的是否大于4或小于0   printf("您输入的有误,请重新输入!!!");   switch(a)   {   //调用geren函数   case 1:list.xianshi(1);break;   case 2:xianshi1(1);break;   case 3:zhu();break;                case 4:exit(0);break;                }   }   while(a!=0);                          }void SeqList::duoyu1(){int a;do{printf("\n\n\n");printf("\t\t\t      欢迎使用学生信息查询系统       \n ");printf("\t\t\t**********************************\n");printf("\t\t\t*                                *\n");printf("\t\t\t*     1.返回学生菜单             *\n");printf("\t\t\t*     2.返回主菜单               *\n");printf("\t\t\t*     3.退出                     *\n");printf("\t\t\t*                                *\n");printf("\t\t\t**********************************\n\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>3)                                         printf("您输入的有误,请重新输入!!!");switch(a){case 1:studentmain(1);break;case 2:zhu();break;case 3:exit(0);break;}}while(a!=0);system("cls");}void duoyu2(){int a;do{printf("\n\n\n");printf("\t\t\t      欢迎使用学生信息查询系统       \n ");printf("\t\t\t**********************************\n");printf("\t\t\t*                                *\n");printf("\t\t\t*     1.返回管理员菜单             *\n");printf("\t\t\t*     2.返回主菜单               *\n");printf("\t\t\t*     3.退出                     *\n");printf("\t\t\t*                                *\n");printf("\t\t\t**********************************\n\n\n");printf("\t\t\t请输入你要操作的序号:\n");printf("\t\t\t你要输入的序号是:");scanf("%d",&a);if(a<0||a>3)                                         printf("您输入的有误,请重新输入!!!");switch(a){case 1:guanliyuan(0);break;case 2:zhu();break;case 3:exit(0);break;}`}while(a!=0);system("cls");}

0 0
原创粉丝点击