合工大.net程序设计与系统开发实验报告_第1页
合工大.net程序设计与系统开发实验报告_第2页
合工大.net程序设计与系统开发实验报告_第3页
合工大.net程序设计与系统开发实验报告_第4页
合工大.net程序设计与系统开发实验报告_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、.NET程序设计与系统开发课程实验报告姓名(学号)分工成绩实验时间 2016实验地点专业电子商务13-01班所在学院管理学院指导老师一、实验目的实验一:C#语法基础实验配合课程教学,通过实际上机练习,熟练掌握和运用C#基本语法,能运用它进行控制台应用程序设计;熟悉VISUAL STUDIO.NET开发平台;熟悉控制台应用程序的调试经验和技巧。实验二:C#语法高级实验进一步熟悉和掌握C#语言,增强程序调试经验和技巧;锻炼综合运用所学知识能力,能设计和解决适当问题。二、实验要求实验一:C#语法基础实验实现实验内容提要中规定的各项需求;独立(或合作或在别人协助下或老师指导下)创造性地完成实验,严禁抄

2、袭;实验结束,提交实验报告。基于VISUAL STUDIO.NET平台开展实验,学会如何建立控制台应用的项目工程。掌握以下语法知识:(1)数据类型;(2)运算符、表达式、语句;(3)数组、字符串、迭代器;(4)异常处理与预处理指令;(5)类与接口;(6)事件与委托。实验二:C#语法高级实验实现实验内容提要中规定的各项需求;独立(或合作或在别人协助下或老师指导下)创造性地完成实验,严禁抄袭;实验结束,提交实验报告。所建工程类型可以为:控制台应用、windows窗体应用、ASP.NET web应用。三、实验内容实验一:C#语法基础实验任务1 判断每个输入的数是否可被3,5和7整除,并将整除状态输出

3、。要求:(1) 掌握VISUAL C#.NET的基本调试技巧。演示调试情况,会跟踪变量的值,会设置和取消断点,会跟踪如何进入函数内部(2) 对每个输入数,分别输出对3,5和7的整除状态;(3) 能实现多次输入输出,最好能有一些输入提示;(4) 亦可同时输入和处理多个数,并输出多个数的整除状态。(5) 考虑使用switch 或if。任务2 练习使用for、while、do while、foreach in等循环语句。输出背靠背字符三角形W WWW WWWWW WWWWWWW WWWWB BBB BBBBB BBB输出字符三角形AAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBB输

4、出交替字符倒三角形STSTSSTSSSTSTSTSTSTSTSTSTSTSSTSTSTSTSTSTSTSTSSTSTSTSTSTSTSTSSTSTSTSTSTSTSSTSTSTSTSTSSTSTSTSTSSTSTSTSSTSTSSTSS输出字符菱形AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBB要求:(1) 上述循环语句至少使用1次;(2) 至少有1题采用了string类实现;(3) 至少有1题采用了集合类实现;任务3 绘图输出y=a*sin(c*x + b)要求:(1) 系数a, b和c是可以变化的,可考虑是从键盘输入的,或通过Ma

5、in方法参数传递的;(2) x的取值范围在04之间,x,y值采用四舍五入;提示:根据输入参数,先生成一组数据(x, y),可考虑循环生成,四舍五入;在相应位置输出*或#。 * * * * * * * * * * * * * * * * # # # # # # # #任务4 练习使用文件操作(选做)要求:(1)采用程序生成杨辉三角,在屏幕上显示;(2)创建目录,并将文件存入硬盘;(3)读取文件并在屏幕上显示;(4)复制文件、获取文件属性和其所在驱动器信息,并在屏幕上显示;(5)创建目录列表,并在屏幕上显示;提示:(1) 使用.NET框架中的相关操作类。实验二:C#语法高级实验任务1实验结果分析。

6、遗传算法(genetic algorithm)是模仿生物进化的智能算法,广泛用于组合优化等各类优化问题。其过程包括编码(coding)、初始化(initialization)、选择selection/reproduction、交叉(crossover)、变异(mutation)、解码(decoding)、评估(evaluation)等过程,其中交叉算子、选择方式和适应度值的定标处理对算法的性能有很大影响。通常,针对不同问题选择不同组合,才能更好地解决问题。常用的交叉算子、选择方式和定标处理方法如表13所示。下面文件(scheme48.dat)是为了测试某一组合优化问题的最佳参数组合得到,参数组

7、合的个数为4*6*5=120,每个组合运行10次,得到该文件,示例如下:50612.9(最小值)OnePointCrossover,GARouletteWheelSelector,GANoScaling(参数组合)run no.genvalue(第几次运行最佳个体首次出现代适应度值)075750626.9153750612.9272050612.9361550626.9472250612.9573850626.9667250626.9777050612.9850550612.9970450626.9OnePointCrossover,GARouletteWheelSelector,GALine

8、arScalingrun no.genvalue074650612.9163650612.9试进行以下分析:l统计每个组合的10次运行中,达到最小值的次数;l每个组合的10次运行中,最佳个体首次出现代的最大、最小、平均值及方差;要求:(6)掌握VISUAL C#.NET的基本调试技巧。演示调试情况,会跟踪变量的值,会设置和取消断点,会跟踪如何进入函数内部(7)为简化输出,根据表13中的简写,简写每个参数组合,如:OnePointCrossover,GARouletteWheelSelector,GANoScaling的简写是cO,rW,sN(8)输出格式要求如下:The minimal is

9、50612.9.num min max mean fdevcO,rW,sN: 5 505 770 650 120.704cO,rW,sL: 7 570 800 697 81.8199cO,rW,sP: 9 475 792 658 108.15cO,rW,sT: 7 419 749 557 130.321cO,rW,sS: 6 445 780 625 119.749cO,rT,sN: 8 451 764 640 125.493cO,rT,sL: 8 290 800 610 191.336cO,rT,sP: 8 174 795 481 277.053cO,rT,sT: 10 63 784 425

10、228.205cO,rT,sS: 7 293 700 509 172.407数字为右对齐num min max mean fdev分别表示10次运行中达最小值的次数、最小代、最大代、达最小值代的平均值以及方差。(9)将结果存入文件,输入和输出文件名均采用键盘输入方式,即使用main函数的参数实现;(10)程序要通用,可处理类似问题。提示:(1)需采用循环读入方式,如for;(2)每读完12行做1次处理,第一次是读13行,可通过增加1循环状态变量实现;(3)使用System.IO.File类/StreamWriter/ StreamReader进行文件操作(4)采用集合类,如List, Arra

11、yList等;(5)使用字符串函数IndexOf、LastIndexOf、StartsWith、EndsWith、substr;(6)使用数学函数:幂函数Pow(x,y)、平方根Sqrt(x);(7)输出方式控制WriteLine,(8)集合类中的Equals和CompareTo方法实现比较和排序(9)标准方差和均值的计算公式如下:表1交叉算子一览表交叉算子英文简称单点OnePointCrossovercO两点TwoPointCrossovercT均匀UniformCrossovercU奇偶EvenOddCrossovercE表2选择方式一览表选择方式英文简称赌轮GARouletteWheel

12、SelectorrW联赛GATournamentSelectorrT排序GARankSelectorrR均匀GAUniformSelectorrU确定性采样GADSSelector, deterministic sampling selectorrD随机余数采样GASRSSelector, stochastic remainder sampling selectorrS表3适应度值定标处理方法一览表定标处理方法英文简称无定标GANoScalingsN线性GALinearScalingsL幂函数GAPowerLawScalingsP截断GASigmaTruncationScalingsT适应值共

13、享GASharing fitness sharingsS任务2 日期处理类的设计、实现与测试基本描述有许多日期处理的工作需要做。1)统计天数旅游公司要统计每个人出差在外的总天数,手头上有每个人出差在外的起始和回来的考勤时间,给定一堆日期区间,将其所有的天数统计出来。2)推排日期旅游公司要估计某个导游何时可以接受下一次任务,并开列了一张当前导游们还需要几天才能将手头工作做完的清单,请按接受任务的早晚列出导游名字和可以接受任务的日期。3)确定天数某月某日是个重要的旅游旺日,为了准备迎接这个日子,须知道该日子离现在还有几天,以便倒计时。4)星期几某个日子是星期几,这是首先应该知道的,甚至是几年以后的

14、某一天也不例外。5)安排会议会议议程横跨某个时间区间,但是已经有一些日子安排了其他工作,需要在没有被安排的时间段中,找出最适合开会的时间。为了使开会时间最大程度地避开其他占用的时间,会议安排应选择尽可能长的未安排时间区段,并且从中间划出开会区段。如果最长的未安排区段有多个,则应尽量早安排会议,所以如果两边间隔不对称,则也应取靠前安排。这就是所谓的最适合开会的时间。请编程将这几个功能串在一起,用一个菜单驱动。输入描述:1)统计天数输入中含有若干组数据,每组数据包括名字、日期和出去(out)的回来(back)的标记。名字长度在1,10之间,日期为合法的yyyy-mm-dd格式的日期。对于某个人来说

15、,出去与回来的日期成对出现,先出去后回来,出去与回来的日期区间也不交叉。示例:days.txtZhangsan 2005-10-23 outLisi 2005-08-09 outZhangsan 2005-12-01 backLisi 2005-08-15 back2)推排日期第一行是当前日期(yyyy-mm-dd),以后是每个导游的名字(名字长度在1,10之间)以及完成当前工作的所需要的天数n(0n1000)。示例:date.txt2006-10-22Zhangsan 12Lisi 33)确定天数第一行是当前日期(yyyy-mm-dd),后面是若干行日期,分别表示各个节日名称(没有空格隔开的

16、字串)和日期(yyyy-mm-dd)。示例:future.txt2006-12-22LabourDay 2008-05-01NewYear 2008-01-01NationalDay 2008-10-01BeijingOlympiad 2008-08-084)星期几输入有若干个日期,日期之间以空格或回车隔开。示例:week.txt2008-02-222006-11-202008-03-085)安排会议第一行是两个日期和一个整数,表示会议只能是这个日期区段中的某个子集,整数表示会议需要的天数。接着若干行中每行用2个日期表示时间区段,那是已经有了其他安排的日期,如果每行中只有一个日期,说明该时间区

17、段只包含1天。示例:meeting.txt2006-10-23 2006-12-24 52006-10-27 2006-11-022006-11-06 2006-11-072006-11-14 2006-11-192006-11-212006-11-29 2006-12-092006-12-14 2006-12-20输出描述1)统计天数按名字的字母顺序输出,输出其名字和合计天数,每个人的数据占一行。名字按10位的宽度并且左对齐,而合计天数按5位宽度并且右对齐。在开始输出前,首先输出一行“统计天数:”。输出至文件days.out或屏幕2)推排日期按完成工作的先后顺序排列,如果完成工作日期相同,则

18、按名字字母顺序排列。每人信息占一行,名字将按宽度11个字符左对齐。开始输出前,输出一行“推排日期:”。输出至文件date.out或屏幕3)确定天数按节日离当前日期的远近排列,近者靠前。若2个日期一样,则按字母顺序排列。每个节日名称与天数列一行,节日名称与天数之间空一行。开始输出前,首先输出一行“确定天数:”。输出至文件future.out或屏幕4)星期几输出每个日期所对应的星期几,星期几以三位英文缩写字母表示,每个日期占一行。开始输出前。输出“星期几:”。输出至文件week.out或屏幕5)安排会议要从未被安排的日期区段中寻找最适合开会的时间,输出该日期。在开始输出前,输出“安排会议:”。输出

19、至文件meeting.out或屏幕要求:(1)考虑自定义拷贝构造函数、构造函数默认参数、字符串参数、c串参数、整数参数;(2)使用抽象类做基类,考虑使用虚函数;(3)数据成员为私有;(4)考虑内联函数;体现成员函数重载;(5)考虑异常处理;(6)考虑使用委托;(7)能检查日期的合法性,不合法给出提示;(8)有日期输出功能;日期输出时注意格式的设定,可根据枚举型值决定输出格式;(9)可更改日期值;(10)可直接进行日期对象赋值操作;(11)可根据日期判定是否闰年;(12)能实现绝对天数与年月日间的相互转换;(13)借助new可创建类对象;(14)体现操作符重载,如+,+, <<,&g

20、t;>,-,=,+=,!=,<,-,-=;(15)实现菜单操作。提示:(1)需使用using system,用于清屏和获取屏幕输入ReadKey(),ReaLline();(2)将每个功能作为一个函数,它们是同类型的,为了调用方便,可将它们做成函数指针数组,调用起来比较方便。(3)老师可先讲解主程序结构,即菜单实现,可指导学生一块一块实现;(4)可考虑采用日期的天数版四、实验步骤实验一:C#语法基础实验实验方法:在VISUAL STUDIO.NET平台编程完成相应任务,并测试通过。实验步骤:1、组长确定组员任务分工;2、分别熟悉实验任务,熟悉实验环境;3、各组员开发和测试各自的任务

21、;4、各组员撰写各自任务的实验报告,形成自己的实验报告;5、组长将组员的报告合并,包括整体工作,形成本组报告,封面写上所有组员名字,内部在相应部分标示组员工作。设备或工具使用说明硬件平台:计算机、服务器、集线器、交换机;系统平台:Windows开发语言: Visual C#.NET开发平台:VISUAL STUDIO.NET实验二:C#语法高级实验实验方法:在VISUAL STUDIO.NET平台编程完成相应任务,并测试通过。实验步骤:1、组长确定组员任务分工;2、分别熟悉实验任务,熟悉实验环境;3、各组员开发和测试各自的任务;4、各组员撰写各自任务的实验报告,形成自己的实验报告;5、组长将组

22、员的报告合并,包括整体工作,形成本组报告,封面写上所有组员名字,内部在相应部分标示组员工作。设备或工具使用说明硬件平台:计算机、服务器、集线器、交换机;系统平台:Windows开发语言: Visual C#.NET开发平台:VISUAL STUDIO.NET五、实验结果系统的运行及测试情况。测试情况:实验一:任务一:任务二:任务三:任务四:实验二:任务一:任务二:六、实验体会及思考题讨论(1)梳理和总结自己的收获,积累经验;(2)对有关思考题的讨论。实验一思考题:1、如何添加和移除文件的访问控制列表?要在文件中添加或从文件中移除访问控制列表 (ACL) 项,必须从文件或目录中获得 FileSe

23、curity 或 DirectorySecurity 对象,对其进行修改,然后重新应用回相应的文件或目录。在文件中添加或移除 ACL 项 调用 GetAccessControl 方法以获取包含文件的当前 ACL 项的 FileSecurity 对象。 在从步骤 1 返回的 FileSecurity 对象中添加或移除 ACL 项。 将 FileSecurity 对象传递到 SetAccessControl 方法以应用更改。在目录中添加或移除 ACL 项 调用 GetAccessControl 方法以获取包含目录的当前 ACL 项的 DirectorySecurity 对象。 在从步骤 1 返回的

24、 DirectorySecurity 对象中添加或移除 ACL 项。 将 DirectorySecurity 对象传递到 SetAccessControl 方法以应用更改。示例using System;using System.IO;usingSystem.Security.AccessControl;namespaceFileSystemExampleclassFileExample public static void Main() try stringfileName = "test.xml"Console.WriteLine("Adding access

25、control entry for " + fileName); / Add the access control entry to the file.AddFileSecurity(fileName,"DomainNameAccountName",FileSystemRights.ReadData, AccessControlType.Allow);Console.WriteLine("Removing access control entry from " + fileName); / Remove the access control e

26、ntry from the file.RemoveFileSecurity(fileName, "DomainNameAccountName", FileSystemRights.ReadData, AccessControlType.Allow);Console.WriteLine("Done.");catch (Exception e) Console.WriteLine(e); / Adds an ACL entry on the specified file for the specified account.public static void

27、 AddFileSecurity(string fileName, string account, FileSystemRights rights, AccessControlTypecontrolType) / Get a FileSecurity object that represents the / current security settings.FileSecurityfSecurity = File.GetAccessControl(fileName); / Add the FileSystemAccessRule to the security settings. fSecu

28、rity.AddAccessRule(new FileSystemAccessRule(account,rights, controlType);/ Set the new access settings.File.SetAccessControl(fileName, fSecurity); / Removes an ACL entry on the specified file for the specified account.public static void RemoveFileSecurity(string fileName, string account, FileSystemR

29、ights rights,AccessControlTypecontrolType) / Get a FileSecurity object that represents the / current security settings.FileSecurityfSecurity = File.GetAccessControl(fileName); / Add the FileSystemAccessRule to the security settings. fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,rights,

30、controlType); / Set the new access settings.File.SetAccessControl(fileName, fSecurity); 编译代码您必须提供有效的用户或组帐户才能运行此示例。此示例使用 File 对象;不过,对于 FileInfo、Directory 和 DirectoryInfo 类使用同一过程。2、控制台应用程序的主菜单实现?控制台菜单选项的实现(1)使用if else入门      程序清单 1   用if else

31、作分支处理(V0.1) void CmdRunning()      int iCmdNum;     do                    printf("请选择:0. 退出;1. 新建文件;2. 打开文件;3.

32、保存文件n");                   scanf("%d",& iCmdNum);                   if (0 =&

33、#160;iCmdNum)                           printf("谢谢使用,再见!n");                

34、;                      else if (1 = iCmdNum)                     

35、      CreateFile();                                      else if (2

36、60;= iCmdNum)                           OpenFile();                  &

37、#160;                   else if (3 = iCmdNum)                       &#

38、160;   SaveFile();                                    else        

39、;                   printf("对不起,你选择的数字不存在,请重新选择!n");                        

40、;   while(iCmdNum!=0);      细心的同学可能会发现,这段程序存在一个很严重的Bug,比如,运行程序后输入字符a(非数字),回车,死循环出现了。为什么会出现这种情况呢?原因是scanf只能将缓冲区中的数字(使用了%d)读入iCmdNum,并清空缓冲区,而我们输入的是非数字,那么scanf读入失败,失败了它也就不会去清空缓冲区,这样造成的结果就是,我们不需要再输入其它字符,scanf每次都会去读缓冲区。(2)入口检查  “scanf("%d",

41、&iCmdNum);”语句是V0.1版本出现死循环的关键,那么我们不妨先从这里入手。其实只要将“%d“改为“%c”,即可解决死循环问题。比如:     scanf("%c", &chCmd);                          

42、              / chCmd是一个字符变量     iCmdNum = atoi(&chCmd);                     

43、0;                                                 

44、0;              / 将chCmd转换为整型数值    这样做就能够解决死循环问题(3)用switch简化逻辑      由于使用if else处理多分支选项显得更加繁琐且效率低下,它必须一个一个分支的判断,而处理多分支比较容易想到的就是switch 语句了。为了避免出现V0.1中的死循环,我们后面的例子将使用另外

45、一个输入函数,代码详见程序清单3。                           程序清单 3  用switch语句做分支处理(V0.3)   1voidCmdRunning()  2     

46、  3  int iCmdNum = 0;1 4 5         do  6 printf("请选择:0. 退出;1. 新建文件;2. 打开文件;3. 保存文件n"); 7            

47、            iCmdNum = getchar();                                 

48、     / 获得一个字符 8                        fflush(stdin);               &#

49、160;                                                 &#

50、160;                                     / 清空缓冲区 9         &

51、#160;              switch(iCmdNum)  10                             case

52、0;'0': 11                                            printf("谢

53、谢使用,再见!n"); 12                                            break; 

54、13                            case '1': 14                

55、0;                          CreateFile(); 15                    &

56、#160;                      break; 16                         

57、;   case '2': 17                                          

58、; OpenFile(); 18                                           break; 19&#

59、160;                           case '3': 20                 &#

60、160;                         SaveFile(); 21                     &

61、#160;                     break; 22                          

62、;     default: 23                                          &

63、#160;printf("对不起,你选择的数字不存在,请重新选择!n"); 24                          25              

64、60;while('0' != iCmdNum); 26        实验二思考题:1、如何实现数据的比较和排序?见实例对DATETABLE的比较排序:protected void Page_Load(object sender, EventArgs e) DataTabledt = new DataTable();dt.Columns.Add("Name");dt.Columns.Add("Age");/因为是字符串,所以排序

65、不对dt.Rows.Add("小明", "21");dt.Rows.Add("小张", "10");dt.Rows.Add("小红", "9");dt.Rows.Add("小伟", "7");dt.Rows.Add("小美", "3");dt.DefaultView.Sort = "Age ASC"dt = dt.DefaultView.ToTable();foreach (D

66、ataRow s in dt.Rows) Response.Write(s"Age".ToString() + "-" + s"Name".ToString() + "<br/>"); Response.Write("-1-<br/>"); #region 方法1:将年龄补齐为2位,然后再进行排序,但是实际不应该有0(仅作参考)for (int i = 0; i <dt.Rows.Count; i+) dt.Rowsi"Age" = dt.Row

67、si"Age".ToString().PadLeft(2, '0'); dt.DefaultView.Sort = "Age ASC"dt = dt.DefaultView.ToTable();foreach (DataRow s in dt.Rows) Response.Write(s"Age".ToString() + "-" + s"Name".ToString() + "<br/>"); #endregionResponse.Write(&

68、quot;-2-<br/>"); #region 方法2:创建新的DataTable,将Age类型变更为int类型DataTabledtNew = dt.Clone();dtNew.Columns"Age".DataType = typeof(int);/指定Age为Int类型foreach (DataRow s in dt.Rows) dtNew.ImportRow(s);/导入旧数据 dtNew.DefaultView.Sort = "Age ASC"dtNew = dtNew.DefaultView.ToTable();for

69、each (DataRow s in dtNew.Rows) Response.Write(s"Age".ToString() + "-" + s"Name".ToString() + "<br/>"); #endregionResponse.Write("-3-<br/>"); #region 方法3:添加一列,主要用于排序dt.Columns.Add("AgeLength", typeof(int), "len(Age)");/

70、添加该列时,DataTable列数据即生成dt.DefaultView.Sort = "AgeLength,Age ASC"dt = dt.DefaultView.ToTable();foreach (DataRow s in dt.Rows) Response.Write(s"Age".ToString() + "-" + s"Name".ToString() + "<br/>"); #endregionResponse.Write("-4-<br/>&quo

71、t;); #region 方法4:运用LinQ,将DataTable转换为集合,再调用集合自带的排序方法进行排序foreach (DataRow s in dt.Rows.Cast<DataRow>().OrderBy(r =>int.Parse(r"Age".ToString() Response.Write(s"Age".ToString() + "-" + s"Name".ToString() + "<br/>"); #endregion 2、如何事件与委托模

72、式?事件是对象发送信号的行动发生的消息。该操作可能引起的用户交互,例如鼠标单击,或可能会引起一些其他的程序逻辑。该事件引发(触发器)的对象称为事件发送方。捕获事件,并对其作出响应的对象称为事件接收器。在事件通讯中,发件人的事件类不知道哪个对象或方法将接收(句柄)它引发的事件。我们需要的是中介人(或类似于指针机制)源和接收方之间。.NET 框架定义了一种特殊类型(委托)所提供的功能的函数指针。委托是一类可以包含对方法的引用。与其他类不同,委托类具有一个签名,按住它可以只对匹配其签名的方法的引用。七、附件1、程序流程图2、关键核心代码实验一:任务一:using System;usingSystem

73、.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespace Mission_1class Program static void Main(string args) int a;string x;string y;string z;stringfff; Boolean w; w = true;for (int b = 1; w = true; b+) Console.WriteLine("n请输入第" + b + "轮数字(数字之间使用空格)");stringsss = Console.ReadL

温馨提示

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

评论

0/150

提交评论