学生选修课程系统设计_第1页
学生选修课程系统设计_第2页
学生选修课程系统设计_第3页
学生选修课程系统设计_第4页
学生选修课程系统设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 摘 要 C 语言一共只有32 个关键字,9 种控制语句,程序书写形式自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 运算符丰富,C 语言的运算符包含的范围很广泛,共有34 种运算符。C 语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C 语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 数据结构丰富,C 语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结

2、构的运算。并引入了指针概念,使程序效率更高。另外C 语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 C 语言的三种程序结构:顺序结构、选择结构、循环结构、结构体和数组等。 学号C语言是学习单片机的重要前提,许多的控制系统都需要C语言来编程,所以学号C语言是必须的。关键词:学生选修课程系统;C语言课程设计;模块化程序设计;信息录入;浏览信息;查询;选课AbstractC language a total of only 32 key, 9 kinds of control statements, and program written form freedom,

3、mainly use lowercase letter said. It is the basic structure of the high-level language and statement and low-level language practical combined. C language can be like assembly language registration, byte and address for operation, and these three are the most basic computer.The unit of work.Operator

4、 is rich, C language operator contains range is very wide, a total of 34 kinds of operator. C language brackets, assignment, forced type conversion, etc as operator processing. So that the C language arithmetic class.Type is extremely rich expression type diversification. Agile use all sorts of oper

5、ator can realize in other high-level languages.To realize in the operation.Data structure is rich, C language data types are: integer, real, character type, array type, pointer type, structure, type, Shared body type, etc. Can be used to realize all kinds of complicated data structure of the operati

6、on.And introduced the pointer concept, make the process more efficient. Another C language has powerful graphics functions, supportA variety of display and drive. And the calculating function, logic powerful.C language three program structure: sequence structure, choice structure, circulation struct

7、ure, structure, and array, etc.Student id C language learning is an important prerequisite for single chip microcomputer, many control system need C language programming,So student id C language is a must.Key words:Student elective system; C language curriculum design; Modularized program design; In

8、formation recorded; Browse information; Query; elective目 录引言 11 C 语言课程设计的目的 12 课程设计题目 12.1 要求 12.2 分析 22.3 总体设计 22.4 详细设计 32.4.1主函数,头文件及结构体声明32.4.2 管理员功能模块32.4.3学生功能菜单42.4.4创建链表模块 42.4.5浏览模块52.4.6查询模块62.4.7插入链表模块72.4.8添加模块72.4.9删除模块82.4.10选修课程模块92.4.11读取文件模块9保存文件模块102.5 运行结果 11结论16谢辞17参考文献18附录19 引言

9、C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一。它由美国贝尔研究所的D.M.Ritchie 于1972 年推出。1978后,C语言已先后被移植到大、中、小及微型机上。 C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如DBASE都是由C 语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优PC-DOSWORDSTAR等就是用这种方法编写的。在初学C语言时,可能会遇到有些问题理解不透,或者表达方式与以往数学学习中不同(如运算符等),这就要求不气馁,不明白的地方多问多想,鼓足勇气进行学

10、习,待学完后面的章节知识,前面的问题也就迎刃而解了,这一方面我感觉是我们同学最欠缺。大多学不好的就是因为一开始遇到困难就放弃,曾经和好多同学谈他的问题回答是听不懂、不想听、放弃这样三个过程,我反问,这节课你听过课吗?回答又是没有,根本就没听过课,怎么说自己听不懂呢?相应的根本就没学习,又谈何学得好? 学习C 语言始终要记住“曙光在前头”和“千金难买回头看”,“千金难买回头看”是学习知识的重要方法,就是说,学习后面的知识,不要忘了回头弄清遗留下的问题和加深理解前面的知识,这是我们学生最不易做到的,然而却又是最重要的。学习C 语言就是要经过几个反复,才能前后贯穿学好。学好C 语言的运算符和运算顺序

11、,这是学好C 程序设计的基础,C 语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。在学习中,只要我们对此合理进行分类,找出它们与我们在数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,而有些可暂时放弃不记,等用到时再记不迟。1 C 语言课程设计的目的

12、高级语言课程设计是学习完高级语言程序设计课程后进行的一次全面的综合性上机实验。其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。2 课程设计题目 学生选修课程系统设计2.1 要求:假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验或商机学时、血粉、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一个选修课程系统,使之能提供以下功能:(1) 系统以菜单方式工作。(2) 课程信息和学生选课信息输入功能(课程信息用文件保存)输入。(3) 课

13、程信息浏览功能输出。(4) 查询功能(至少一种查询方式)算法。(5) 按学分查询。(6) 某门课程学生选修情况(可选项)。2.2 分析:数据结构可用结构体,课程结构体包括课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期。题目要求课程信息用文件保存,应写入文件中,提供文件的输入输出等操作;在过程中需有浏览、插入、修改、查找、删除学生选课信息等操作,顾应分别建立个功能模块;另外还应提供键盘式选择菜单实现程序运行。2.3 总体设计2.4 详细设计2.4.1主函数,头文件及结构体声明主函数main()函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两

14、个大的功能模块:进入选课系统选择序号进行选课进入下一层2.4.2 管理员功能模块管理员Mangers()函数的功能一共有四个功能:录入,浏览,查询,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用:管理员登录菜单输入密码进行码匹对验证进入管理员界面i=3i>0按任意键退出是否否是2.4.3学生功能菜单学生功Students()函数能菜单包括六个功能:浏览课程,查询课程,选修课程,浏览我所选修的课程,添加选修课程,删除错选的课程,也是用到switch语句来调用函数:学生登录菜单按1-6数字键进入各选项1、浏览所有课程2、查询课程信息3、选择选修课程4、浏览我

15、选修的课程5、删除错选课程6、返回主菜单进入所选目标2.4.4创建链表模块 创建链表模块create_form()函数,用于录入课程信息:创建链表输入选修课程信息(num,name,kind,stime,ttime,etime,score,term)Num!=0p=(SUB *)malloc(size);p->num=num;strcpy(p->name,name);strcpy(p->kind,kind);p->stime=stime;p->ttime=ttime;p->etime=etime;p->score=score;p->term=te

16、rm;Head=NULLHead=pTail->next=p;Tail=p;Tail->next=NULL;Return head;创建完成Scanf(num,name,kind,&stime,&ttime,&etime,&score,&term);是是否否2.4.5浏览模块浏览模块主要用管理员中的“浏览课程”prin()函数和学生功能中的“浏览所有所有课程”prin1()函数,将所有的课程信息输出,即将all_sub.txt文件里面的内容全部输出:浏览所有课程SUB *ptr;head=NULL;readfile();Head=NULLPr

17、intf(NO RECORDS);Return;输出课程信息是否2.4.6查询模块查询模块search() 函数主要用于管理员功能中的“查询课程”和学生功能模块中的“查询所有课程”,查询模块共分为三个查询方法:按课程名称查找,按课程性质查找和按学分查找switch语句中,每一个case语句就是一中查询方法:课程信息查询按1-3数字键进入各选项1、按课程性质查找2、按学分查找3、退出查找进入所选目标2.4.7插入链表模块 插入链表myInsert(SUB *subj)函数操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用:插入链表模块SUB *p1,*p2;p1=subj

18、;head=NULLhead=p1;head->next=NULL;p2=head;p2;p2=p2->nextp2->next=NULLp2->next=subj;subj->next=NULL;break;eturn head;是否否否是是2.4.8添加模块添加模块insert() 函数主要用于增加课程信息,采用链表的操作:插入课程信息SUB *ptr,*subj;int size=sizeof(SUB);char ch,ch1;ch!='0'输入(课程信息、课程编号、课程名称、课程性质、总学分、授课学分、实践或上机学时)ch1=getchar

19、();ch=getchar();Return head;myInsert(subj);printf("nn继续插入请按回车 C语言课程设计报告n");printf("n结束添加课程按 0 ")是否2.4.9删除模块 删除模块del()函数主要用于管理员删除课程信息和学生删除自己的选课,全部采用删除链表中的某一个节点的操作:删除选修课程SUB *p1,*p2;char ch,ch1;int numprintf(输入想要删除的课程编号);scanf("%d",&num);进行编号查找并删除printf("n继续删除请按回

20、车n");printf("n结束删除课程按 0: ");2.4.10选修课程模块 选修课程模块choose()函数用于学生选择选修课程,采用插入链表的操作:选新课程printf("输入要选修的课程的编号n");printf("如果确认输入完要选修的课程的编号,请输入0");程序对输入的信息进行查找判断printf(“选修成功! n")printf("n以上信息全部保存在'my_sub.txt'中n")2.4.11读取文件模块读取文件模块readfile()函数是用来读出文件内容,

21、并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_sub.txt时,就是浏览学生选修的课程信息:读取文件printf("请输入课程信息所在的文件名称:");!feof(fp)c=fgetc(fp)='n'!feof(fp)newSub=(SUB*)malloc(sizeof(SUB);fscanf(fp,&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->t

22、time,&newSub->etime,&newSub->score,&newSub->term);myInsert(newSub);fclose(fp);保存文件模块保存文件模块savefile()函数共分为两个子程序,分别是将修改的信息保存到all_sub.txt和my_sub.txt文件中:保存文件系统进行检测所要保存的文件fprintf(fp,"课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n");p=head;p;p=p->nextfprintf(fp,"%5d%12s%9s

23、%9d%9d%11d%11d%7dn",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("创建后的信息已放入'all_sub.txt'文件中n");system("pause");2.5 运行结果开始运行 管理员菜单按1进人录入课程模块输完课程信息后: 按2进人管理员浏览模块按3进人管理员查询模块 按课程性质查询按学分查询按4进行管理员删除模块学生菜单按1学生

24、浏览所有课程按2学生查询课程信息按课程性质查询按学分查询按3进人选修课程模块按4进人浏览我选修的课程按5进人删除错选课程模块结论经过测试,这个系统已经达到了题目中的全部要求。这个程序有很多优点有一个是界面简明,简洁明了的程序菜单;一个是智能化的模块设计,减少了许多人工操作,如功能模块操作结束后,均会返回主菜单进行下一模板的运行,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了学生选课的效率还有就是提示语言既简洁又明确,层次分明等等;当然也有缺点如程序仍然存在不合理的地方,例如程序某些部分输入错误不能立刻返回改正;信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。 编

25、程过程结构体有float型数据时系统提示有错误,用int或char型代替然后定义可解决。在调试没运行完自动跳出主界面:主要可能遇到float型数据时系统错误。有些字母输入错误,仔细查找就可解决;插入链表阅读和输出文件不熟悉;不熟悉如何使形参与实参一一对应。经过查询资料和老师同学们的帮忙基本解决了。通过这一周的的C 语言课程设计,不仅巩固了自己之前掌握的C 程序的设计基础,还学弥补了在上课期间没有学会的知识。经过这次课设,我充分认识到了C 语言的用途是非常广的,功能也非常强大,是学计算机不可缺少的语言。更重要的是,在这次编程中熟悉了编写一个比较复杂程序的流程,以及发现问题、解决问题的能力,为下一

26、步计算机语言的学习做了准备。之前感觉遥不可及的功能,现在可以实现了,非常感谢老师和同学的热心帮助,这是我得以及时完成这个程序的重要因素。谢 辞 参考文献1 谭浩强,C程序设计题解与上机指导(第二版),北京,清华大学出版社,2000年9月。2 甘玲,解析C程序设计,北京,清华大学出版社,2007年3月。3 郭翠英,C语言课程设计案例精编,中国水利水电出版社,2005年。4黄明,梁旭,万洪莉,C语言课程设计,电子工业出版社,2006年。5 王成端 魏先民等,C语言程序设计实训题解、实验、课程设计与样题,中国水利水电出版社,2005年。6盛夕清,赵阳等编著,C语言程序设计学习指导、实验指导与课程设计

27、,中国水利水电出版社,2006年。 附 录源程序代码:#include "stdio.h"#include "string.h"#include "stdlib.h"#include "malloc.h"void prin1();void choose();typedef struct subjectsint num; /课程编号char name20; /课程名称char kind10; /课程性质int stime; /总学时int ttime; /授课学时int etime; /实验或上机学时int scor

28、e; /学分int term; /开课学期struct subjects *next;SUB;SUB *head=NULL;SUB *create_form() /创建链表 SUB *head,*tail,*p;int num,stime,ttime;int etime,score,term;char name20,kind10;int size=sizeof(SUB);head=tail=NULL;printf("输入选修课程信息:n");scanf("%d%s%s%d%d%d%d%d",&num,name,kind, &stime,&

29、amp;ttime,&etime,&score,&term);while(num!=0)p=(SUB *)malloc(size);p->num=num;strcpy(p->name,name);strcpy(p->kind,kind);p->stime=stime;p->ttime=ttime;p->etime=etime;p->score=score;p->term=term;if(head=NULL) head=p;elsetail->next=p;tail=p;scanf("%d%s%s%d%d%d

30、%d%d",&num,name, kind,&stime,&ttime,&etime,&score,&term);tail->next=NULL;return head;void savefile() /保存文件 SUB *p;FILE *fp;fp=fopen("2.txt","w");if(fp=NULL)exit(0);printf("课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期n");for(p=head;p;p=p->ne

31、xt)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7dn", p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("创建后的信息已放入'2.txt'文件中n");system("pause");void savefile1() /保存文件 SUB *p;FILE *fp;fp=fopen("3.txt",

32、"w");if(fp=NULL)exit(0);for(p=head;p;p=p->next)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7dn", p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);fclose(fp);printf("创建后的信息已放入'3.txt'文件中n");system("pause"); void rea

33、dfile() /阅读文件 void *myInsert(SUB*);SUB *newSub; /新课程int num,stime,ttime,etime;int score,term;char cname20,kind10,fname20;FILE *fp;fp=fopen("2.txt","r");while(!feof(fp)newSub=(SUB*)malloc(sizeof(SUB);fscanf(fp,"%d%s%s%d%d%d%d%dn",&newSub->num,newSub->name,newSu

34、b->kind, &newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);myInsert(newSub);fclose(fp);void prin() /浏览所有课程SUB *ptr;head=NULL;readfile();if(head=NULL)printf("nnt*NO RECORDS!*n");return;printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学

35、时 学分 开课学期n");for(ptr=head;ptr;ptr=ptr->next)printf("%5d%12s%9s%9d%9d%11d%11d%7dn",ptr->num,ptr->name, ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);system("pause");void prin1() /浏览所有选修课程SUB *ptr;FILE *fp;if(fp=fopen("3.txt&q

36、uot;,"r")=NULL)printf("Cannot open file.n");choose();printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n");while(!feof(fp)ptr=(SUB*)malloc(sizeof(SUB);fscanf(fp,"%d%s%s%d%d%d%d%dn",&ptr->num,ptr->name,ptr->kind, &ptr->stime,&ptr->ttime,

37、&ptr->etime,&ptr->score,&ptr->term);printf("%5d%12s%9s%9d%9d%11d%11d%7dn",ptr->num,ptr->name, ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);fclose(fp);system("pause");void *myInsert(SUB *subj) /链表插入操作 SUB *ptr,*ptr2;

38、ptr=subj;if(head=NULL)head=ptr;head->next=NULL;elsefor(ptr2=head;ptr2;ptr2=ptr2->next)if(ptr2->next=NULL)ptr2->next=subj;subj->next=NULL;break;return head;void *insert()/插入课程信息 SUB *ptr,*subj;int size=sizeof(SUB);char ch,ch1;while(ch!='0')subj=(SUB *)malloc(size);ptr=subj;prin

39、tf("输入要插入的课程信息:n");printf("ntt请输入课程编号:");scanf("%d",&subj->num); printf("ntt请输入课程名称:");scanf("%s",&subj->name); printf("ntt请输入课程性质:");scanf("%s",&subj->kind); printf("ntt请输入总学时:");scanf("%d"

40、;,&subj->stime);printf("ntt请输入授课学时:");scanf("%d",&subj->ttime);printf("ntt请输入实践或上机学时:");scanf("%d",&subj->etime);printf("ntt请输入学分:");scanf("%d",&subj->score);printf("ntt请输入开课学期:");scanf("%d",&

41、amp;subj->term);myInsert(subj);printf("n添加完毕,新信息存入文件中n");printf("n继续插入请按回车n");printf("n结束添加课程按 0: bb");ch1=getchar(); /将回车键赋给CH1, 否则subj->term输完后输入的回车键会赋给CH,因此用CH1填补。ch=getchar();return head;void *del() /删除课程SUB *p1,*p2;char ch,ch1;int num;while(ch!='0')pr

42、intf("输入想要删除的课程编号: bbbbb");scanf("%d",&num);if(head->num=num)p2=head;head=head->next;free(p2);if(head=NULL)return NULL;p1=head;p2=head->next;while(p2)if(p2->num=num)p1->next=p2->next;free(p2);else p1=p2;p2=p1->next;printf("n继续删除请按回车n");printf(&q

43、uot;n结束删除课程按 0: bb");ch1=getchar(); /将回车键赋给CH1, 否则num输完后再输入的回车键会赋给CH,因此用CH1填补。ch=getchar();printf("n删除完毕,新信息存入文件中n");system("pause"); return head;system("pause");void choose()/选新课程-学生选课函数SUB *p,*q;int a5;int num,total=0,i=0,j;printf("输入要选修的课程的编号,编号之间以空格分开n&quo

44、t;);scanf("%d",&num);printf("如果确认输入完要选修的课程的编号,请输入0: bb");while(num!=0)for(p=head;p;p=p->next)if(p->num=num)total=total+p->score;ai=num;i+;scanf("%d",&num);if(total<60) printf("选修总学分为%d,未达到60,选修失败!n",total);system("pause");elseFILE

45、 *fp;fp=fopen("3.txt","w");for(j=0;j<i;j+)for(q=head;q;q=q->next)if(q->num=aj)fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7dn",q->num, q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);fclose(fp);printf("ttn*选修成功!*n");print

46、f("n您选修的课程总学分为%d,课程分别为:n",total);printf("n课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n");for(j=0;j<i;j+)for(q=head;q;q=q->next)if(q->num=aj)printf("%5d%12s%9s%9d%9d%11d%11d%7dn", q->num,q->name,q->kind,q->stime,q->ttime,q->etime,q->score,q->

47、term);printf("n以上信息全部保存在'3.txt'中n");system("pause");void search() /课程信息查询int a,num;int t=1;char type10;SUB *ptr; L1:system("cls"); printf("nntt*请选择查询方式*n"); printf("nttt1-按课程性质查找n"); printf("nttt2-按学分查找n"); printf("nttt3-退出查找n&

48、quot;); printf("nntt*n"); printf("nnChiose your number(1-3): bb"); scanf("%d",&a); switch(a) case 1:printf("请输入要查找的课程的性质:"); scanf("%s",type); printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n"); for(ptr=head;ptr;ptr=ptr->next) if(str

49、cmp(type,ptr->kind)=0) printf("%5d%12s%9s%9d%9d%11d%11d%7dn",ptr->num, ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; if(t) printf("tn未找到!n"); t=1; system("pause"); goto L1; case 2:printf("输入要查找的课程的学分:&qu

50、ot;); scanf("%d",&num); printf("课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期n"); for(ptr=head;ptr;ptr=ptr->next) if(ptr->score=num) printf("%5d%12s%9s%9d%9d%11d%11d%7dn",ptr->num,ptr->name, ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term); t=0; if(t) printf("nt未找到!n"); t=1; system("pause"); goto L1; case 3:break; void Mangers()int n,w=1,flag=0,i=3;char s8;char passw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论