C语言学生成绩管理系统课程设计报告.docx

上传人:叶*** 文档编号:50256324 上传时间:2022-10-14 格式:DOCX 页数:34 大小:627.36KB
返回 下载 相关 举报
C语言学生成绩管理系统课程设计报告.docx_第1页
第1页 / 共34页
C语言学生成绩管理系统课程设计报告.docx_第2页
第2页 / 共34页
点击查看更多>>
资源描述

《C语言学生成绩管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统课程设计报告.docx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1设计一个学生成绩管理系统,对上学期的本班的学习成绩进行管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件。A、设计内容1、每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。2、输入功能:可以一次完成若干条记录的输入。3、显示功能:完成全部学生记录的显示。4、查找功能:完成按姓名或学号查找学生记录,并显示。5、排序功能:按学生平均成绩进行排序。6、插入功能:按学号顺序插入一条学生记录。7、将学生记录存在文件student.dat中。8、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!B、设计要求一、已知有存储本

2、班学生记录(包括学号、姓名、科目成绩、性别、)的文件 student.dat,所有学生以学号从小到大排序(该文件自行建立)。要求编程序实现查询、排序、插入、删除诸功能。具体要求如下:A要求显示如下界面*21-查询2-排序3-插入4-删除*通过选择 1-4 来确定要做哪一个操作。B若选 1,则出现如下界面*1.1-按学号查询1.2-按姓名查询1.3-按成绩查询*通过选择 1.1-1.3 来确定要做哪一个操作,其中:按姓名查询用顺序法实现;按成绩查询实现查询成绩小于 m 分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。C若选 2,则按成绩从大到小排序,姓名,学号顺序也随之调整。D

3、若选 3,将一个新学生记录按学号顺序插入,并把结果保存到文件 student.dat 中。E 若选 4,删除指定学生的记录,并把结果保存到文件 student.dat中。G不同的模块都要有出错处理,并能给出出错提示。如输入数3据错误,文件操作错误等等F以上各个功能均编写成子函数,由主函数调用实现。G利用结构体数组实现学生成绩的数据结构设计;模块:查询模块排序模块显示模块保存模块删除模块插入模块结束显示返回插入返回选择返回保存返回按学号查询按学号选择删除按姓名选择删除返回主菜单按姓名查询按成绩查询排序返回数学平均分英语C语言健康教育返回计算机历史学生成绩管理系统学生成绩管理系统4程序结构图:ma

4、in:int flag=1;struct student*head=NULL;head=load();Doswitch(menu()case 0:flag=0;break;case 1:search(head);break;case 2:sort(head);break;case 3:head=NULL?head=insert(head):insert(head);save(head);break;case 4:head=delete(head);save(head);break;case 5:save(head);printf(Its saved!);getch();break;case 6

5、:clrscr();formhead();print(head);break;while(flag)frees(head);int menu();char ch;textmode(C80);textbackground(BLUE);textcolor(YELLOW);clrscr();gotoxy(20,3);cprintf(Students performance management system);gotoxy(20,6);cprintf(*);gotoxy(30,8);cprintf(1-Search;);gotoxy(30,10);cprintf(2-Sort;);gotoxy(30

6、,12);cprintf(3-Insert;);gotoxy(30,14);cprintf(4-Delete;);gotoxy(30,16);cprintf(5-Save in file;);gotoxy(30,18);cprintf(6-Display;);gotoxy(30,20);cprintf(0-Exit;);gotoxy(20,22);cprintf(*);gotoxy(1,25);cprintf(please press the number you choose:);ch=getchar();return ch;5int menu2();char ch;textmode(C80

7、);textbackground(BLUE);textcolor(YELLOW);clrscr();gotoxy(34,5);cprintf(Query menu);gotoxy(20,8);cprintf(*);gotoxy(25,10);cprintf(1-search by ID number;);gotoxy(25,12);cprintf(2-search by name;);gotoxy(25,14);cprintf(3-search by score;);gotoxy(25,16);cprintf(0-Return to main menu;);gotoxy(20,20);cpri

8、ntf(*);gotoxy(1,25);cprintf(please press the number you choose:);ch=getchar();return ch;int menu3();char ch;textmode(C80);textbackground(BLUE);textcolor(YELLOW);clrscr();clrscr();gotoxy(20,3);cprintf(Enter the number of subjects to check);gotoxy(20,6);cprintf(*);gotoxy(25,8);cprintf(1-Math;);gotoxy(

9、25,9);cprintf(2-English;);gotoxy(25,10);cprintf(3-C Program;);gotoxy(25,11);cprintf(4-Computer;);gotoxy(25,12);cprintf(5-Health Education;);gotoxy(25,13);cprintf(6-History;);gotoxy(25,14);cprintf(7-average;);gotoxy(25,15);cprintf(0-Return to previous menu;);gotoxy(20,18);cprintf(*);gotoxy(1,25);cpri

10、ntf(please press the number you choose:);ch=getchar();return ch;6void search(struct student*head);int flag=1;while(flag)switch(menu2()case 49:search1(head);break;case 50:search2(head);break;case 51:search3(head);break;case 48:flag=0;break;void search1(struct student*);struct student*p;int none=1;cha

11、r number11;p=head;clrscr();printf(please in put a students number:);scanf(%s,number);直到确认printf(Search results:n);formhead();while(p!=0)(strcmp(p-num,number)=0?putout(p);none=0;p=p-next;None=0?printf(ncan not find the data!)printf(npress any key to return.);getch();void search2(struct student*);int

12、none=1;char name11;struct student*p;p=head;clrscr();printf(please in put a students name:);scanf(%s,name);直到确认clrscr();printf(Search results:n);formhead();while(p!=NULL)strcmp(p-name,name)=0?putout(p);none=0;p=p-next;NYNYNY7none=0?printf(ncan not find the data!);printf(npress any key to return.);get

13、ch();void search3(struct student*);p1=head;m=menu3()直到0=mmath-highnext;None=0?printf(ncan not find thedata!)printf(npress any key to return.);getch();break;2与1同理3与1同理4与1同理5与1同理6与1同理7与1同理NYYNNY8struct student*sort(struct student*);struct student*p1,*p2,*t,*temp;temp=head-next;head-next=NULL;while(tem

14、p!=NULL)t=temp;temp=temp-next;p1=head;p2=head;while(t-averaver&p1!=NULL)p2=p1;p1=p1-next;p1=p2?t-next=p1;t-next=p1;p2-next=t;head=t;p1=head;while(p1!=NULL)p1=p1-next;clrscr();formhead();print(head);return(head);struct student*insert(struct student*);struct student*p,*q,*hed;hed=head;p=creat();/*建链表*

15、/q=findw(head);/*找出传进来链表的表尾*/q=NULL?q-next=p;return hed=NULL?p:hed;void input(struct student*);float temp;char c;clrscr();printf(input the students number:);scanf(%s,p-num);直到确认printf(ninput the students name:);scanf(%s,p-name);while(!sure();直到确认c=getchar();p-sex=ca?c-32:c;直到(p-sex=M|p-sex=W)printf(

16、input the students Math score:scanf(%f,&temp);直到确认p-math=temp;下面成绩同理NYNY9void putout(struct student*);printf(n|%-10s|%-10s|%c|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|%-6.1f|,p-num,p-name,p-sex,p-math,p-english,p-cp,p-computer,p-hthy,p-history,p-aver);printf(n+-+-+-+-+-+-+-+-+-+-+);void print(struc

17、t student*);struct student*p;p=head;p!=NULLputout(p);p=p-next;printf(Itsaemptylist!n);直到 p 为空getch();int sure();har c;getchar();printf(Press any key if you are sure but Esc:);c=getch();c=27return 1;return 0;void frees(struct student*);struct student*p;p=head;while(p!=0)free(p);p=p-next;head=NULL;str

18、uct student*creat(void);char c;struct student*p1,*p2,*head;int n=0,flag=1;p1=p2=(struct student*)malloc(LEN);head=NULL;input(p1);while(flag)n=n+1;n=1?head=p1:p2-next=p1;p2=p1;if(flag=1)printf(ncontinue or not?(Y/N):);if(flag=2)printf(npress Y(y)or N(n)only:);c=getch();(c=N|c=n|c=Y|c=y)?flag=2;NYNYNY

19、10c=Y|c=y?flag=0;p1=(structstudent*)malloc(sizeof(structstudent);input(p1);flag=1;p2-next=NULL;return(head);struct student*load(void);struct student*p1,*p2,*head=NULL;FILE*fp;fp=fopen(student.dat,rb)=NULLprintf(fail to open the file!n);return(0);printf(loading.n);p1=(struct student*)malloc(LEN);!p1?

20、printf(out of memory!ngetch();return(0);head=p1while(!feof(fp)fread(p1,LEN,1,fp)!=1?break;p1-next=(struct student*)malloc(LEN);!p1-next/printf(Out of memory!n);return(head);p2=p1;p1=p1-next;p2-next=NULL;fclose(fp);return(head);void save(struct student*);FILE*fp;struct student*p;fp=fopen(student.dat,

21、wb)=NULL?Yprintf(fail to open the file!n);getch();return;p=head;while(p!=NULL)fwrite(p,LEN,1,fp);p=p-next;fclose(fp);NYNYNYYNNYN11struct student*findw(struct student*);struct student*p;p=head;p=NULL?Yreturn p;while(p-next!=NULL)p=p-next;return(p);struct student*delete(struct student*);char del11;cha

22、r x;int none=1;struct student*p1,*_del;p1=_del=head;p1=NULL?Yclrscr();printf(there is no data!press any key to back.);getch();return 0;clrscr();printf(nnnnnnnnnnnn1-ByStudent Number to delete;);printf(nn2-By Student Name todelete;);printf(nn0-cancel;n);printf(nnnnnnnnnPlease enter you choice:);x=get

23、char();直到输入正确if(x=0)return head;if(x=1)clrscr();printf(enternumber gonna Del:);scanf(%s,del);直到确认while(_del=p1&_del!=NULL)(strcmp(_del-num,del)=0)Yelse _del=p1-next;none=0;clrscr();printf(delete this data?Cancel by Esc:)formhead();putout(_del);getch()=27Yp1=_del-next;_del=p1-next;free(_del);del=p1;N

24、NNN12printf(nDeletesuccessfully!);getch();head=p1;while(_del!=0)strcmp(_del-num,del)=0Yp1=p1-next;_del=_del-next;none=0;clrscr();printf(ndelete this data?Cancel byEsc:);formhead();putout(_del);getch()=27?Yp1-next=_del-next;p1=p1-next;free(_del);_del=_del-next;_del=p1-next;printf(nDeletesuccessfully!

25、);getch();!none?Yprintf(Can not find the data.);printf(nNo more data.);getch();getch();if(x=2)同 x=1程序代码:#include stdio.h/*标准输入输出函数库*/#include stdlib.h/*标准函数库*/#include string.h/*字符串函数库*/#include conio.h/*屏幕操作函数库*/#define HEADER1-学生-n#define HEADER2|学号|姓名|C 语言|数学|英语|总分|平均分|排名|n#define HEADER3|-|-|-|-

26、|-|-|-|-|#define FORMAT|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|n#defineDATAp-data.num,p-data.name,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#defineENDNNN13-nint saveflag=0;/*是否需要存盘的标志变量*/*定义与学生有关的数据结构*/typedef struct student/*标记为 student*/char num10;/*学号*/char name

27、15;/*姓名*/int cgrade;/*C 语言成绩*/int mgrade;/*数学成绩*/int egrade;/*英语成绩*/int total;/*总分*/float ave;/*平均分*/int mingci;/*名次*/;/*定义每条记录或结点的数据结构,标记为:node*/typedef struct nodestruct student data;/*数据域*/struct node*next;/*指针域*/Node,*Link;/*Node 为 node 类型的结构变量,*Link 为 node 类型的指针变量*/void menu()/*主菜单*/system(cls)

28、;/*调用 DOS 命令,清屏.与 clrscr()功能相同*/textcolor(10);/*在文本模式中选择新的字符颜色*/gotoxy(10,5);/*在文本窗口中设置光标*/printf(学生成绩管理系统 n);/gotoxy(10,8);printf(*Menu*n);/gotoxy(10,9);printf(*1输 入 数 据2删 除 数 据*n);/gotoxy(10,10);printf(*3查 询 数 据4修 改 数 据*n);/gotoxy(10,11);printf(*5插 入 数 据6统 计 数 据*n);/gotoxy(10,12);14printf(*7数 据 排

29、序8保 存 数 据*n);/gotoxy(10,13);printf(*9显 示 数 据0退 出 系 统*n);/gotoxy(10,14);printf(*n);/*cprintf()送格式化输出至文本窗口屏幕中*/void printheader()/*格式化输出表头*/printf(HEADER1);printf(HEADER2);printf(HEADER3);void printdata(Node*pp)/*格式化输出表中数据*/Node*p;p=pp;printf(FORMAT,DATA);void Wrong()/*输出按键错误信息*/printf(nnnnn*错误:输入有错!按

30、任意键继续*n);getchar();void Nofind()/*输出未查找此学生的信息*/printf(n=没找到该学生!n);void Disp(Link l)/*显示单链表 l 中存储的学生记录,内容为 student 结构中定义的内容*/Node*p;p=l-next;/*l 存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/if(!p)/*p=NULL,NUll 在 stdlib 中定义为 0*/15printf(n=没该学生记录!n);getchar();return;printf(nn);printheader();/*输出表格头部*/

31、while(p)/*逐条输出链表中存储的学生信息*/printdata(p);p=p-next;/*移动直下一个结点*/printf(HEADER3);getchar();/*作用:用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess保存要查找的具体内容;nameornum保存按什么查找;在单链表 l 中查找;*/Node*Locate(Link l,char findmess,char nameornum)Node*r;if(strcmp(nameornum,num)=0)/*按学号查询*/r=l-next;while(r)if(strcmp(r-data.num,fi

32、ndmess)=0)/*若找到 findmess 值的学号*/return r;r=r-next;else if(strcmp(nameornum,name)=0)/*按姓名查询*/r=l-next;while(r)if(strcmp(r-data.name,findmess)=0)/*若找到 findmess 值的学生姓名*/return r;r=r-next;16return 0;/*若未找到,返回一个空指针*/*输入字符串,并进行长度验证(长度lens)printf(n 超过这必需的长度!n);/*进行长度校验,超过lens 值重新输入*/while(strlen(n)lens);str

33、cpy(t,n);/*将输入的字符串拷贝到字符串 t 中*/*输入分数,0分数100|t100|tnext;system(cls);Disp(l);/*先打印出已有的学生信息*/while(r-next!=NULL)r=r-next;/*将指针移至于链表最末尾,准备添加记录*/while(1)/*一次可输入多条记录,直至输入学号为 0 的记录结点添加操作*/17while(1)/*输入学号,保证该学号没有被使用,若输入学号为 0,则退出添加记录操作*/stringinput(num,10,输入学号(按 0 返回主菜单):);/*格式化输入学号并检验*/flag=0;if(strcmp(num,

34、0)=0)/*输入为 0,则退出添加操作,返回主界面*/return;s=l-next;while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/if(strcmp(s-data.num,num)=0)flag=1;break;s=s-next;if(flag=1)/*提示用户是否重新输入*/getchar();printf(=这学号%s 是目前的,在试一次?(y/n):,num);scanf(%c,&ch);if(ch=y|ch=Y)continue;elsereturn;elsebreak;p=(Node*)malloc(sizeof(Node);/*申请内存空

35、间*/if(!p)printf(n 分配内存失败);/*如没有申请到,打印提示信息*/return;/*返回主界面*/strcpy(p-data.num,num);/*将字符串 num 拷贝到 p-data.num 中*/stringinput(p-data.name,15,姓名:);p-data.cgrade=numberinput(C 语言分数0-100:);/*输入并检验分数,分数必18须在 0100 之间*/p-data.mgrade=numberinput(数学分数0-100:);/*输入并检验分数,分数必须在 0100 之间*/p-data.egrade=numberinput(英

36、语分数0-100:);/*输入并检验分数,分数必须在 0100 之间*/p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade;/*计算总分*/p-data.ave=(float)(p-data.total/3);/*计算平均分*/p-data.mingci=0;p-next=NULL;/*表明这是链表的尾部结点*/r-next=p;/*将新建的结点加入链表尾部中*/r=p;saveflag=1;return;void Qur(Link l)/*按学号或姓名,查询学生记录*/int select;/*1:按学号查,2:按姓名查,其他:返回主

37、界面(菜单)*/char searchinput20;/*保存用户输入的查询内容*/Node*p;if(!l-next)/*若链表为空*/system(cls);printf(n=没有学生记录!n);getchar();return;system(cls);printf(n=1 通过学号查询=2 通过姓名查询n);printf(请选择1,2:);scanf(%d,&select);if(select=1)/*按学号查询*/stringinput(searchinput,10,输入目前的学生学号:);p=Locate(l,searchinput,num);/*在 l 中查找学号为 searchi

38、nput 值的节点,并返回节点的指针*/if(p)/*若 p!=NULL*/printheader();printdata(p);19printf(END);printf(按任意键返回);getchar();elseNofind();getchar();else if(select=2)/*按姓名查询*/stringinput(searchinput,15,输入目前的学生姓名:);p=Locate(l,searchinput,name);if(p)printheader();printdata(p);printf(END);printf(按任意键返回);getchar();elseNofind

39、();getchar();elseWrong();getchar();/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/void Del(Link l)int sel;Node*p,*r;char findmess20;if(!l-next)system(cls);printf(n=没学生记录!n);getchar();return;system(cls);Disp(l);20printf(n=1 通过学号删除=2 通过姓名删除n);printf(请选择1,2:);scanf(%d,&sel);if(sel=1)stringinput(findmess,10,输入目前的学生学号:

40、);p=Locate(l,findmess,num);if(p)/*p!=NULL*/r=l;while(r-next!=p)r=r-next;r-next=p-next;/*将 p 所指节点从链表中去除*/free(p);/*释放内存空间*/printf(n=删除成功!n);getchar();saveflag=1;elseNofind();getchar();else if(sel=2)/*先按姓名查询到该记录所在的节点*/stringinput(findmess,15,输入目前的学生姓名);p=Locate(l,findmess,name);if(p)r=l;while(r-next!=

41、p)r=r-next;r-next=p-next;free(p);printf(n=删除成功!n);getchar();saveflag=1;elseNofind();getchar();elseWrong();21getchar();/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/void Modify(Link l)Node*p;char findmess20;if(!l-next)system(cls);printf(n=没学生记录!n);getchar();return;system(cls);printf(修改学生记录);Disp(l);s

42、tringinput(findmess,10,输入目前的学生学号:);/*输入并检验该学号*/p=Locate(l,findmess,num);/*查询到该节点*/if(p)/*若 p!=NULL,表明已经找到该节点*/printf(学号:%s,n,p-data.num);printf(姓名:%s,p-data.name);stringinput(p-data.name,15,输入新的姓名:);printf(英语分数:%d,p-data.cgrade);p-data.cgrade=numberinput(英语分数0-100:);printf(数学分数:%d,p-data.mgrade);p-d

43、ata.mgrade=numberinput(数学分数0-100:);printf(C 语言分数:%d,p-data.egrade);p-data.egrade=numberinput(C 语言分数0-100:);p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade;p-data.ave=(float)(p-data.total/3);p-data.mingci=0;printf(n=删除成功!n);Disp(l);saveflag=1;22elseNofind();getchar();/*插入记录:按学号查询到要插入的节点的位置,然后在

44、该学号之后插入一个新节点。*/void Insert(Link l)Link p,v,newinfo;/*p 指向插入位置,newinfo 指新插入记录*/char ch,num10,s10;/*s保存插入点位置之前的学号,num保存输入的新记录的学号*/int flag=0;v=l-next;system(cls);Disp(l);while(1)stringinput(s,10,在学号后请输入插入的位置:);flag=0;v=l-next;while(v)/*查询该学号是否存在,flag=1 表示该学号存在*/if(strcmp(v-data.num,s)=0)flag=1;break;v

45、=v-next;if(flag=1)break;/*若学号存在,则进行插入之前的新记录的输入操作*/elsegetchar();printf(n=这%s 不是目前的,在试一次?(y/n):,s);scanf(%c,&ch);if(ch=y|ch=Y)continue;elsereturn;/*以下新记录的输入操作与 Add()相同*/stringinput(num,10,输入新学生的学号:);v=l-next;while(v)23if(strcmp(v-data.num,num)=0)printf(=对不起,这新学号:%s 是目前的!n,num);printheader();printdata

46、(v);printf(n);getchar();return;v=v-next;newinfo=(Node*)malloc(sizeof(Node);if(!newinfo)printf(n 分配内存失败);/*如没有申请到,打印提示信息*/return;/*返回主界面*/strcpy(newinfo-data.num,num);stringinput(newinfo-data.name,15,姓名:);newinfo-data.cgrade=numberinput(C 语言分数0-100:);newinfo-data.mgrade=numberinput(数学分数0-100:);newinf

47、o-data.egrade=numberinput(语言分数0-100:);newinfo-data.total=newinfo-data.egrade+newinfo-data.cgrade+newinfo-data.mgrade;newinfo-data.ave=(float)(newinfo-data.total/3);newinfo-data.mingci=0;newinfo-next=NULL;saveflag=1;/*在 main()有对该全局变量的判断,若为 1,则进行存盘操作*/*将指针赋值给 p,因为 l 中的头节点的下一个节点才实际保存着学生的记录*/p=l-next;wh

48、ile(1)if(strcmp(p-data.num,s)=0)/*在链表中插入一个节点*/newinfo-next=p-next;p-next=newinfo;break;p=p-next;24Disp(l);printf(nn);getchar();/*统计该班的总分第一名和单科第一,和各科不及格人数*/void Tongji(Link l)Node*pm,*pe,*pc,*pt;/*用于指向分数最高的节点*/Node*r=l-next;int countc=0,countm=0,counte=0;/*保存三门成绩中不及格的人数*/if(!r)system(cls);printf(n=没学

49、生记录!n);getchar();return;system(cls);Disp(l);pm=pe=pc=pt=r;while(r)if(r-data.cgradedata.mgradedata.egradedata.cgrade=pc-data.cgrade)pc=r;if(r-data.mgrade=pm-data.mgrade)pm=r;if(r-data.egrade=pe-data.egrade)pe=r;if(r-data.total=pt-data.total)pt=r;r=r-next;printf(n-统计结果-n);printf(C 语言60:%d(人)n,countc);

50、printf(数学60:%d(人)n,countm);printf(英语data.name,pt-data.total);printf(英语分数最高的学生:%s 总分:%dn,pe-data.name,pe-data.egrade);printf(数学分数最高的学生:%s 总分:%dn,pm-data.name,pm-data.mgrade);printf(C 语言分数最高的学生:%s 总分:%dn,pc-data.name,pc-data.cgrade);printf(nn 按任意键返回);25getchar();/*利用插入排序法实现单链表的按总分字段的降序排序,从高到低*/void So

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁