教材代码

00181
广告学(一)
00182
公共关系学
00186
国际商务谈判
00187
旅游经济学
00188
旅游心理学
00189
旅游与饭店会计
00190
中国旅游地理
00196
专业英语
00198
旅游企业投资与管理
00200
客源国概况
00207
高级财务管理
00208
国际财务管理
00223
中国法制史
00227
公司法
00228
物流管理概论
07033
物流设备应用
07035
国际物流
07039
物流技术
07175
节目主持人文案写作
07176
即兴口语表达
07178
普通话语音与发声
07184
形象造型与形体
07191
视觉文化与传播
07221
美术设计与创意
07222
数字录音制作
07223
数字影像制作技术
07225
电脑艺术设计
07231
数字影视合成
课程代码
课程名称
00009
政治经济学(财)
00020
高等数学(一)
00022
高等数学(工专)
00023
高等数学(工本)
00043
经济法概论(财)
00048
财政与金融
00051
管理系统中计算机应用
00055
企业会计学
00065
国民经济统计概论
00066
货币银行学
00067
财务管理学
00071
社会保障概论
环境与资源保护法学
00229
证据法学
00230
合同法
00242
民法学
00243
民事诉讼法学
00244
经济法概论
00257
票据法
00261
行政法学
00262
法律文书写作
00263
外国法制史
00272
社会工作概论
00273
社会工作实务
00279
团体社会工作
00280
西方社会学理论
00281
社区社会工作
00283
02342
非线性电子电路
02348
电子测量
02353
办公自动化设备
02358
单片机原理及应用
02379
计算机网络管理
02382
管理信息系统
02384
计算机原理
02387
工程测量
02396
混凝土及砌体结构
02398
土力学及地基基础
02400
建筑施工(一)
02404
工程地质及土力学
02405
道路勘测设计
02194
工程经济
02195
数控技术及应用
02198
线性代数
02269
电工原理
02277
微型计算机原理及应用
02300
电力系统基础
02301
发电厂电气主系统
02306
自动控制理论(二)
02310
电力系统分析
02311
发电厂动力部分
02312
电力系统远动及调度自动化
02331
数据结构
02333
软件工程
中小学教育管理
00464
中外教育简史
00466
发展与教育心理学
00469
教育学原理
00485
运动解剖学
00487
体育心理学
00494
中学体育教学法
00509
机关管理
00510
秘书实务(实践)
00514
外国秘书工作概况
00524
文书学(实践)
00526
秘书参谋职能概论
00529
文学概论(一)
00531
02407
路基路面工程
02409
桥梁工程
02428
园林植物栽培管理
02440
混凝土结构设计
02447
建筑经济与企业管理
02448
建筑结构试验
02493
印刷色彩学
02535
有机化学(三)
02576
汽车构造
02614
控制电机
02625
现代企业管理(一)
02635
经贸英语
02641
技术监督法律法规
02658
外科护理学(二)
03266
食品分析技术
03283
食品安全与质量控制
03284
食品原料学
03291
人际关系学
03295
国际公共关系
03299
广告运作策略
03300
现代媒体总论
03312
劳动和社会保障概论
03320
劳动和社会保险统计与计算机应用
03321
劳动和社会保险业务案例分析
03322
劳动和社会保障法
09284
小学音乐教育
09289
有效教学的理论与方法
09291
初中语文课程与教学
09292
初中语文教学实践与反思
09294
初中数学课程与教学
09295
初中数学教学实践与反思
09297
初中英语课程与教学
09298
初中英语教学实践与反思
06011
旅游学概论
06042
日语写作
06050
人际关系心理学
06052
青少年心理学
06054
心理咨询与辅导
06057
生理心理学
06059
心理学研究方法
06060
个性心理学
06061
心理治疗
06062
交通运输总论
06076
结构设计原理
06078
交通工程
06081
隧道工程
06089
劳动关系与劳动法
06092
00142
计量经济学
00143
经济思想史
00147
人力资源管理(一)
00149
国际贸易理论与实务
00156
成本会计
00159
高级财务会计
00161
财务报表分析(一)
00162
会计制度设计
00166
企业劳动工资管理
00169
房地产法
00170
建筑工程定额与预算
00172
房地产经营管理
00176
物业管理
00921
商法原理与实务
00922
经济法原理与实务
00924
婚姻家庭法原理与实务
00925
公证与基层法律服务实务
00972
房地产项目评估
00978
烹饪工艺学(二)
00986
中国饮食文化
00987
餐饮美学
00989
国外饮食文化
00993
法院与检察院组织制度
00995
商法(二)
00997
电子商务安全导论
01104
初级韩国语
01105
中级韩国语(一)
01158
漫画与插图
01170
电视画面编辑基础
01171
电视摄影造型基础
01179
非线性编辑
01181
电视节目导播
01184
电视艺术片创作
01263
visual basic 数据库应用
01509
包装企业管理
01513
文书与档案管理
01612
机电产品质检技术
大学语文
04735
数据库系统原理
04737
C++程序设计
04747
JAVA语言程序设计(一)
04749
网络工程
04754
电子商务与电子政务
04757
信息系统开发与管理
04844
工业设计史
04869
大众传播学
04946
汽车发动机原理与汽车理论
04979
食品质量管理学
04997
现代食品检测技术
05087
中国当代文学作品选
00533
中国古代文学作品选 (二)
00534
外国文学作品选
00536
古代汉语
00539
中国古代文学史(二)
00540
外国文学史
00541
语言学概论
00593
听力(实践)
00594
口语(实践)
00596
英语阅读(二)
00597
英语写作基础
00600
高级英语
00602
口译与听力
00603
01616
食品科学导论
01618
机械工程基础
01620
模具材料与热处理
01628
模具数控加工
01630
级进模与自动模
01642
可编程控制器(西门子)
01644
单片机原理与接口技术
01649
电器控制与PLC
01651
仪器分析、检验仪器原理及维护
01652
卫生检验
01656
病原生物学及检验
01658
免疫学及免疫学检验(二)
00075
证券投资与管理
00076
国际金融
00077
金融市场学
00088
基础英语
00090
国际贸易实务(一)
合集下载

教材里面的附录 一维黎曼问题的求解编程代码 - 副本

教材里面的附录 一维黎曼问题的求解编程代码 - 副本
-A.5-
E[2]=(U[2]+p)*u; } /*------------------------------------------------------一维 MacCormack 差分格式求解器 入口: U, 上一时刻的 U 矢量,Uf、Ef,临时变量, dx,网格宽度,dt, 时间步长; 出口: U, 计算得到的当前时刻 U 矢量。 ---------------------------------------------------------*/ void MacCormack_1DSolver(double U[J+2][3],double Uf[J+2][3],double Ef[J+2][3],double dx,double dt) { int i,k; double r,nu,q; r=dt/dx; nu=0.25; for(i=1;i<=J;i++) { q=fabs(fabs(U[i+1][0]-U[i][0])-fabs(U[i][0]-U[i-1][0])) /(fabs(U[i+1][0]-U[i][0])+fabs(U[i][0]-U[i-1][0])+1e-100); //开关函数 for(k=0;k<3;k++) Ef[i][k]=U[i][k]+0.5*nu*q*(U[i+1][k]-2*U[i][k]+U[i-1][k]);//人工黏性项 } for(k=0;k<3;k++) for(i=1;i<=J;i++)U[i][k]=Ef[i][k]; for(i=0;i<=J+1;i++)U2E(U[i],Ef[i]); for(i=0;i<=J;i++) for(k=0;k<3;k++) Uf[i][k]=U[i][k]-r*(Ef[i+1][k]-Ef[i][k]); //U(n+1/2)(i+1/2) for(i=0;i<=J;i++)U2E(Uf[i],Ef[i]); //E(n+1/2)(i+1/2) for(i=1;i<=J;i++) for(k=0;k<3;k++) U[i][k]=0.5*(U[i][k]+Uf[i][k])-0.5*r*(Ef[i][k]-Ef[i-1][k]); //U(n+1)(i) } /*------------------------------------------------------输出结果, 用 Origin 数据格式画图

(自考教材课程代码00054)管理学原理(2014年版)课程教案白瑷峥

(自考教材课程代码00054)管理学原理(2014年版)课程教案白瑷峥

管理学原理—2014年版第一章管理与管理学管理活动具有必要性和重要性。

管理是组织不可缺少的要素。

有组织就需要管理,管理与组织如影随行。

管理的产生:1.管理产生于欲望无限和资源有限性之间矛盾的协调;2.管理是人类群体活动的产物,人类活动分为两类即作业活动和管理活动。

管理的必要性:1.从整个社会的发展来看,管理是社会进步与发展的物质力量;2.管理是任何组织生存发展的重要条件;3.管理活动具有的普通性。

管理的概念:管理是对组织的管理,组织是管理的载体;管理是一项有目的的活动,管理的目地是为了实现组织目标;管理是由一系列活动构成;管理是一个追求有效的过程;管理的实质是协调。

科学管理之父泰勒:管理就是确切地知道你要别人去干什么,并使他用最好的方法去干。

管理的特性:1.管理活动不同于作业活动(作业活动是人类为实现自身目的而进行的活动,管理活动是产生于作业活动并为作业活动服务的一种活动,是为了确保作业活动有效进行的手段;两者之间既有密切联关,又有明显区别,管理活动的范围更广,它不仅贯穿于作业活动的始终,而且包括作业活动之前的调研、作业活动之后的经验教训总结等,管理活动比作业活动承担更多责任,管理人员的本职工作是管理活动而非作业活动)。

2.管理工作既具有科学性又具有艺术性;3.管理的核心是以人为本。

管理的基本职能:计划、组织、指挥、协调和控制。

管理的职能:是管理者在管理过程中从事的活动。

1.计划是对组织未来活动进行的预先筹划和安排,2.组织是为了完成计划而对分工协作关系所做的整体安排,3.领导是指挥和影响下属为现实组织目标而努力工作的过程,4.控制是为了保证组织按预定要求运作而进行的一系列监督检查工作。

管理有效性是由效率和效果来衡量的。

效率是指投入与产出的比值。

效果是指目标达成度,涉及活动的结果。

效果的具体衡量指标有销售收入、利润额、销售利润率、成本利润率、资金利润率等。

管理者作为组织中行使管理职能的人,在组织中承担不同角色,需要具备不同的技能。

指令代码培训教材

指令代码培训教材

一.指令代码培训教材1.M00、M01、M02、M30之差别均为程式停止指令,但M01必须在机台OSP功能开关开启方有效,M00、M01生效后机台程式暂停履行,按STAR键可连续向后履行,M30则为程式停止履行后程式将回到开端。

2.M98/M99/G65/G66/G67●副程式呼叫指令格局:G66/G67应用格局:G65/G66Pn; (调用n号副程式)……(调用肇端坐标,指定多个时可加工出多个雷同的特点)G67; (调用停止)而用M98/M99 时则为:.M98 P n H_ L m;(直截了当调用n号副程式m次后由副程式中的M99停止调用后直截了当履行主程式的下一单节,加工不合部位雷同特点时要在不合部位分别调用.)L:副程式重複執行次數(當L 省略時視同L1 副程式執行一次)。

H:指定副程式中,開始執行的单节號碼(當H 省略時,副程式從最前頭的單節開始執行)。

P:指定副程式的程式號碼(當P 省略時,指定程式本身,且只於記憶運轉或MDI 運轉模式時)。

●M89 为副程式调用指令,显现于主程式中,后接PXXXX指明调用XXXX号副程式●M99 位于副程式尾,履行后停止副程式回主程式运行所对应之M89后各单节指令直截了当调用副程式履行完M99时,机台将回到副程式头轮回履行该副程式●主程式中M99;应用時,程式執行M99 後,回至主程式的開頭。

(MDI 亦同)●下述的敕令動作雷同,各G 碼對應的敕令可由參數設定。

a︰M98 P△△△△;b︰G65 P△△△△△<引數>;c︰G66 P△△△△△<引數>;G66呼叫后必须用G67撤消;●M98 指令與G65 指令的相異處1)G65 指令能够指定引數,然则M98 弗成以指定引數。

2)M98 能够指定順序號,然则G65, G66, G66.1 弗成以指定順序號。

3)M98 指令在M98 單節中,執行M, P, H, L 以外的指令後執行副程式,但G65 不執行任何指令而轉向副程式。

广数凯恩帝FANUCiO+宏变量代码教学教材

广数凯恩帝FANUCiO+宏变量代码教学教材

广数凯恩帝F A N U C i O+宏变量代码广数控218加工中心:M 代码功能。

M30 程序结束并返回程序头,加工件数加1 M02 程序结束并返回程序头,加工件数加1 M98 调用子程序M99 子程序结束返回/重复执行M00 程序暂停M01 程序选择暂停M03 主轴正转M04 主轴反转M05 主轴停转M06 换刀M08 冷却开M09 冷却关M10 A 轴松开M11 A 轴夹紧M16 刀具控制松刀M17 刀具控制夹刀M19 主轴定向M20 主轴空档指令M21 还刀时的寻刀代码M22 抓新刀时的寻刀代码M23 刀库摆到主轴位代码M24 刀库摆回原位代码M26 启动冲屑水阀M27 关闭冲屑水阀M28 取消刚性攻丝M29 刚性攻丝M32 润滑开M33 润滑关M35 启动螺旋排屑传输器M36 关闭螺旋排屑传输器M44 主轴吹气开启M45 主轴吹气关闭M50 自动换刀开始M51 自动换刀结束M53 判断换刀后刀具是否正确M55 判断主轴是否有刀凯恩帝1000G00 定位(快速移动)G01 直线插补(切削进给)G02 圆弧插补CW(顺时针)G03 圆弧插补CCW(逆时针)G04 暂停, 准停G10 偏移值设定G17 XY平面选择G18 ZX平面选择G19 02 YZ平面选择G20 英制数据输入G21 公制数据输入G27 返回参考点检查G28 返回参考点G29 从参考点返回G31 测量功能G39 拐角偏移圆弧插补*G40 刀具半径补偿注消G41 左侧刀具半径补偿G42 右侧刀具半径补偿G43 正方向刀具长度偏移G44 负方向刀具长度偏移G49 刀具长度偏移注消G54 工件坐标系1G55 工件坐标系2G56 工件坐标系3G57 工件坐标系4G58 工件坐标系5G59 工件坐标系6G65 宏程序命令G73 钻深孔循环G74 左旋攻丝循环G76 精镗循环G80 固定循环注销G81 钻孔循环(点钻循环)G82 钻孔循环(镗阶梯孔循环) G83 深孔钻循环G84 攻丝循环G85 镗孔循环G86 钻孔循环G87 反镗孔循环G88 镗孔循环G89 镗孔循环G93 攻丝固定循环G90 绝对值编程G91 增量值编程G92 坐标系设定G94 每分进给G95 每转进给G98 在固定循环中返回初始平面G99 返回到R点(在固定循环中)FANUC io指令大全G 代码分为下面两类:非模态G 代码 G 代码只在指令它的程序段中有效。

Python编程入门培训教材PPT(35张)

Python编程入门培训教材PPT(35张)
Python语言的33个保留字或者操作符可以产生符合语法的表达式。
四、常用基础知识
表达式
常用操作符
算术操作符:+, -, *, /, //, **, %分别表示加法或者取正
、减法或者取负、乘法、除法、整除、乘方、求余。
比较操作符:>, <, ==, !=, <=, >=用于比较两个表达式的
值,分别表示大于、小于、等于、不等于、小于等于
中自由的使用单引号和双引号。(''' ''') 注:使用引号一定是成对的
练习3:单行字符串练习3:多行字符串来自四、常用基础知识 字符串
转义符 ‘\’, “\n”转义构成换行符
(注:使用r可以让反斜杠不发生转义。 如 r"this is a line with \n" 则\n会显示,并不是换行)
练习4:请直接在Python的IDLE界面输入 print(“happy day\n and sunny day”) ——回车 print(r‘happy day\n and sunny day ’)——回车
也可以自己创建函数,这被叫做用户自定义函数 (Def函数)。
Def函数:def所定义的函数在程序中未经调用不能 直接执行,需要通过函数名调用才能够执行。
四、常用基础知识
O:Output 输出
程序的输出 (屏幕显示输出、 文件输出、网络输 出、操作系统内部 变量输出等),输 出是一个程序展示 运算结果的方式。
用户输入:input()获得输入 运算部分:根据算法实现
结果输出:print()输出结果
三、程序编写的步骤
分析 分析问题的计算部分 问题
1
2 确定

教材代码-5

教材代码-5
中小学教育管理
00464
中外教育简史
00466
发展与教育心理学
00469
教育学原理
00485
运动解剖学
00487
体育心理学
00494
中学体育教学法
00509
机关管理
00510
秘书实务(实践)
00514
外国秘书工作概况
00524
文书学(实践)
00526
秘书参谋职能概论
00529
文学概论(一)
00531
00921
商法原理与实务
00922
经济法原理与实务
00924
婚姻家庭法原理与实务
00925
公证与基层法律服务实务
00972
房地产项目评估
00978
烹饪工艺学(二)
00986
中国饮食文化
00987
餐饮美学
00989
国外饮食文化
00993
法院与检察院组织制度
00995
商法(二)
00997
电子商务安全导论
00075
证券投资与管理
00076
国际金融
00077
金融市场学
00088
基础英语
00090
国际贸易实务(一)
00092
中国对外贸易
00094
外贸函电(实践)
00098
国际市场营销学
00100
国际运输与保险
00101
外经贸经营与管理
00102
世界市场行情
00137
农业经济学(一)
00138
中国近现代经济史
06011
旅游学概论
06042
日语写作

onnx代码编写教材

onnx代码编写教材Open Neural Network Exchange (ONNX) is a widely-used open-source format for representing deep learning models. It enables seamless interoperability between different machine learning frameworks, allowing developers to easily share and deploy models across platforms and tools. In this article, we will provide a comprehensive guide on writing ONNX code, exploring the essential components and techniques involved.1. Introduction to ONNXONNX provides a standardized way to serialize deep learning models, making them portable and interoperable across various frameworks. It allows users to train models using their preferred framework and then convert them into ONNX format for deployment or inference using different frameworks. This flexibility makes ONNX a valuable tool for developers seeking to leverage the power of multiple frameworks in their machine learning projects.2. Installing ONNXTo begin coding with ONNX, you need to install the necessary libraries and tools. First, ensure that you have a Python distribution installed on your system. Then, use the package manager pip to install the ONNX library by running the following command:```pythonpip install onnx```Besides the ONNX package, you may also need to install additional packages depending on your specific use case, such as frameworks for model training, inference, or visualization.3. Creating an ONNX ModelCreating an ONNX model involves defining the neural network architecture and setting up the necessary parameters. ONNX supports a wide range of popular frameworks, including PyTorch, TensorFlow, and MXNet. To demonstrate the process, let's consider a simple example using PyTorch.First, import the necessary libraries:```pythonimport torchimport torch.nn as nnimport torch.nn.functional as F```Next, define a custom neural network architecture as a subclass of`nn.Module`:```pythonclass SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(10, 20)self.fc2 = nn.Linear(20, 2)def forward(self, x):x = F.relu(self.fc1(x))x = self.fc2(x)return x```In this example, `SimpleNet` is a basic feedforward neural network with two fully connected layers. The `forward` method describes the forward pass of the network.4. Converting a PyTorch Model to ONNXTo convert a PyTorch model to the ONNX format, you can use the`torch.onnx.export` function. Here is an example:```pythonmodel = SimpleNet()dummy_input = torch.randn(1, 10)onnx_path = "model.onnx"# Export the model to ONNXtorch.onnx.export(model, dummy_input, onnx_path)```In this code snippet, we create an instance of the `SimpleNet` model and generate a dummy input tensor. We then export the model to the specified ONNX file using `torch.onnx.export`. The resulting ONNX model can be used for inference or further conversion.5. Loading and Running an ONNX ModelOnce you have an ONNX model, you can load and run it using frameworks that support ONNX inference, such as ONNX Runtime or TensorFlow. Here is an example using ONNX Runtime:```pythonimport onnxruntime# Load the ONNX modelonnx_model = onnxruntime.InferenceSession(onnx_path)# Prepare input datainput_data = {"input": dummy_input.numpy()}# Run inferenceoutput = onnx_model.run(None, input_data)```In this code snippet, we import the `onnxruntime` package and create an `InferenceSession` object, which represents the loaded ONNX model. We then prepare the input data as a dictionary, placing the dummy input tensor under the key `"input"`. Finally, we run the inference using`onnx_model.run` and obtain the output.6. Advanced ONNX TechniquesWriting ONNX code involves various advanced techniques, including handling dynamic shapes, incorporating custom operations, and optimizing models for performance. While a comprehensive discussion of these techniques is beyond the scope of this article, it is worth mentioning that the ONNX documentation provides detailed guidance and examples on each of these topics.ConclusionIn this article, we have explored the fundamentals of writing ONNX code. We started with an introduction to ONNX and its importance in enabling interoperability between different deep learning frameworks. We then covered the installation process, creating an ONNX model using PyTorch, converting a PyTorch model to ONNX format, and loading and running an ONNX model using frameworks like ONNX Runtime. Additionally, we highlighted that ONNX supports advanced techniques for handling dynamic shapes, custom operations, and model optimization. Mastering the art of writing ONNX code will empower you to harness the full potential of deep learning models across various platforms and tools.。

OScodecpp操作系统教程(第3版)教材对应的C++伪代码伪代码

/*------------------------------------------------------------------File: OScode.cpp《操作系统教程》(第3版)教材对应的C++伪代码Contents: OS description code for 《操作系统教程》(第三版)Written by: 李贤 Jan. 2004Modified by: 沈志鹏 Jan. 2004Copyright: Dept. Computer Science, Nanjing University------------------------------------------------------------------*//*------------------------------------------------------------------本代码写作的出发点为:方便用C++作为编程语言的同学学习操作系统,使得阅读代码更加容易,理解内容更加方便;同时,本代码并不完全遵循一切C++风格,编写的主旨主要为提高代码的可读性,根据最容易阅读和理解来写出伪代码;最后,代码中的变量名和操作函数名等与原书代码中所取的相同,因此本代码能与书本的相关上下文流畅地衔接。

------------------------------------------------------------------*//*----------------------Chapter 3 并发进程----------------------*///--------------------------------------------// Page 212 例1: (结果不唯一)购买飞机票问题//--------------------------------------------process Ti {i = 1,2}{{按旅客订票要求找到Aj};int Xi = Aj;if (Xi >= 1){Xi--;Aj = Xi;{输出一张票};}else{输出信息"票已售完"};}//------例1运行情况------T1: X1 = Aj; X1 = m (m > 0) T2: X2 = Aj; X2 = mT2: X2--; Aj = X2; 输出一张票; Aj = m - 1T1: X1--; Aj = X1; 输出一张票; Aj = m - 1//--------------------------------------------// Page 213 例2: (永远等待)内存管理问题//--------------------------------------------procedure borrow(int B){if (B > x){申请进程进入等待队列等主存资源};x = x - B;{修改主存分配表,申请进程获得主存资源};}procedure return(int B){x = x + B;{修改主存分配表};{释放等主存资源的进程};}cobegin{int x = Memory; // Memory为初始内存容量repeat borrow(B);repeat return(B);}coend//--------------------------------------------// Page 215 3.2.1 互斥和临界区//--------------------------------------------// 进程T1的临界区为:X1 = Aj;if (X1 >= 1){X1--;Aj = X1;}// 进程T2的临界区为:X2 = Aj;if (X2 >= 1){X2--;Aj = X2;}//--------------------------------------------// Page 216 重写的售票管理进程//--------------------------------------------shared Ajprocess Ti {i = 1, 2}{int Xi;{按旅客订票要求找到Aj};region Aj do{Xi = Aj;if (Xi >= 1){Xi--;Aj = Xi;{输出一张票};}else{输出票已售完};}}//--------------------------------------------// Page 217 3.2.2 临界区管理的尝试//--------------------------------------------// 尝试1bool inside1 = false; // P1不在其临界区内bool inside2 = false; // P2不在其临界区内cobegin{process P1{while (inside2); // 等待inside1 = true;临界区;inside1 = false;}process P2{while (inside1); // 等待inside2 = true;临界区;inside2 = false;}}coend// 尝试2bool inside1 = false; // P1不在其临界区内bool inside2 = false; // P2不在其临界区内cobegin{process P1{inside1 = true;while (inside2); // 等待临界区;inside1 = false;}process P2{inside2 = true;while (inside1); // 等待临界区;inside2 = false;}}coend//--------------------------------------------// Page 218 3.2.3 实现临界区管理的软件方法//--------------------------------------------// Dekker 算法bool inside[2] = {false, false};int turn = 1 or 2;cobegin{process P1{inside[1] = true;while (inside[2]){if (turn == 2){inside[1] = false;while (turn == 2);inside[1] = true;}}临界区;turn = 2;inside[1] = false;}process P2{inside[2] = true;while (inside[1]){if (turn == 1){inside[2] = false;while (turn == 1);inside[2] = true;}}临界区;turn = 1;inside[2] = false;}}coend//---------- Page 220 Peterson 算法---------bool inside[2] = {false, false};int turn = 1 or 2;cobegin{process P1{inside[1] = true;turn = 2;while (inside[2] && turn == 2); // 等待临界区;inside[1] = false;}process P2{inside[2] = true;turn = 1;while (inside[1] && turn == 1); // 等待临界区;inside[2] = false;}}coend//--------------------------------------------// Page 222 3.2.4 实现临界区管理的硬件设施//--------------------------------------------//-------2.测试并建立指令-------//// Page 221 TS指令的处理过程bool TS(bool x){if (x){x = false;return true;}elsereturn false;}// Page 222 TS指令实现互斥程序bool s = true;process Pi {i = 1, 2, ..., n}{bool pi;do{pi = TS(s);}while (!pi); // 上锁临界区;s = true; // 开锁}//-------3.对换指令-------//// Page 222 对换指令的处理过程void Swap(bool &a, bool &b){bool temp = a;a = b;b = temp;return;}// Page 222 对换指令实现互斥程序bool lock = false;process Pi {i = 1, 2, ..., n}{bool pi = true;do{Swap(lock, pi);}while (pi); // 上锁临界区;lock = false; // 开锁}//--------------------------------------------// Page 223 3.3.1 信号量与PV操作//--------------------------------------------// 生产者-消费者问题int k;typedef item any; // item类型item buffer[k];int in = 0, out = 0;int counter = 0;process producer{while (true) // 无限循环{{produce an item in nextp}; // 生产一个商品if (counter == k) // 缓冲满时,生产者睡眠sleep(producer);buffer[in] = nextp; // 将一个产品放入缓冲区in = (in + 1) % k; // 指针推进counter++; // 缓冲内产品数加1if (counter == 1) // 缓冲为空了,加进一件产品并唤醒消费者wakeup(consumer);}}process consumer{while (true) // 无限循环{if (counter == 0) // 缓冲区空,消费者睡眠sleep(consumer);nextc = buffer[out]; // 取一个产品到nextcout = (out + 1) % k; // 指针推进counter--; // 取走一个产品,计数减1if (counter == k - 1) // 缓冲满了,取走一件产品并唤醒生产者wakeup(producer);{consume the item in nextc}; // 消耗产品}}//--------------------------------------------// Page 225 3.3.2 记录型信号量与PV操作//--------------------------------------------// 1.整型信号量P(s){while (s <= 0);s--;}V(s){s++;}// 2.记录型信号量 Page 226typedef struct // semaphore结构类型定义{int value;list<process> queue;}semaphore;procedure P(semaphore s){s.value--; // 把信号量减去1if (s.value < 0) // 若信号量小于0,则执行P(s)的进程调用W(s.queue)进行W(s.queue); // 自我封锁,被置成等待信号量s的状态,进入信号量队列queue}procedure V(semaphore s){s.value++; // 把信号量加1if (s.value <= 0) // 若信号量小于等于0,则调用R(s.queue)从信号量s队列R(s.queue); // queue中释放一个等待信号量s的进程并置成就绪态}// 3.二元信号量 Page 227typedef struct{int value; // 0 or 1list<process> queue;}semaphore;procedure BP(semaphore s){if (s.value == 1)s.value = 0;elseW(s.queue);}procedure BV(semaphore s){if (s.queue is empty)s.value = 1;elseR(s.queue);}//--------------------------------------------// Page 227 3.3.3 用记录型信号量实现互斥//--------------------------------------------// 一般形式semaphore mutex;mutex.value = 1;cobegin{...process Pi{...P(mutex);临界区;V(mutex);...}...}coend// 记录型信号量和PV操作解决飞机票问题(程序1)int A[m];semaphore mutex;mutex.value = 1;cobegin{process Pi{int Xi;L1: {按旅客订票要求找到A[j]};P(mutex);Xi = A[j];if (Xi >= 1){Xi--;A[j] = Xi;V(mutex);{输出一张票};}else{V(mutex);{输出"票已售完"};}goto L1;}}coend// 程序2int A[m];semaphore s[m];for (int j = 0; j < m; j++)s[j].value = 1;cobegin{process Pi{int Xi;L1: {按旅客订票要求找到A[j]};P(s[j]);Xi = A[j];if (Xi >= 1){Xi--;A[j] = Xi;V(s[j]);{输出一张票};}else{V(s[j]);{输出"票已售完"};}goto L1;}}coend//--------------------------------------------// Page 229 哲学家吃通心面问题//--------------------------------------------semaphore fork[5];for (int i = 0; i < 5; i++)fork[i] = 1;cobegin{process Pi // i = 0, 1, 2, 3, 4{L1: {思考};P(fork[i]);P(fork[i + 1] % 5);{吃通心面};V(fork[i]);V(fork[i + 1] % 5);goto L1;}}coend//----------------------------------------------------// Page 230 3.3.4 记录型信号量解决生产者-消费者问题//----------------------------------------------------// 单生产者-单消费者int B;semaphore empty; // 可以使用的空缓冲区数semaphore full; // 缓冲区内可以使用的产品数empty.value = 1; // 缓冲区内允许放入一件产品full.value = 0; // 缓冲区内没有产品cobegin{process producer{L1: {Produce a product};P(empty);B = product;V(full);goto L1;}process consumer{L2: P(full);Product = B;V(empty);{Consume a product};goto L2;}}coend// m个生产者和n个消费者共享k件产品的缓冲器item B[k];semaphore empty; empty.value = k; // 可以使用的空缓冲区数semaphore full; full.value = 0; // 缓冲区内可以使用的产品数semaphore mutex; mutex.value = 1; // 互斥信号量int in = 0; // 放入缓冲区指针int out = 0; // 取出缓冲区指针cobegin{process producer_i{L1: {Produce a product};P(empty);P(mutex);B[in] = product;in = (in + 1) % k;V(mutex);V(full);goto L1;}process consumer_j{L2: P(full);P(mutex);Product = B[out];out = (out + 1) % k;V(mutex);V(empty);{Consume a product};goto L2;}}coend//--------------------------------------------// Page 232 父母子女苹果桔子消费问题//--------------------------------------------int plate;semaphore sp; // 盘子里可以放几个水果semaphore sg1; // 盘子里有桔子semaphore sg2; // 盘子里有苹果sp.value = 1; // 盘子里允许放入一个水果sg1.value = 0; // 盘子里没有桔子sg2.value = 0; // 盘子里没有苹果cobegin{process father{L1: {削一个苹果};P(sp);{把苹果放入plate};V(sg2);goto L1;}process mother{L2: {剥一个桔子};P(sp);{把桔子放入plate};V(sg1);goto L2;}process son{L3: P(sg1);{从plate中取桔子};V(sp);{吃桔子};goto L3;}process daughter{L4: P(sg2);{从plate中取苹果};V(sp);{吃苹果};goto L4;}}coend//-----------------------------------------------// Page 234 3.3.5 记录型信号量解决读者-写者问题//-----------------------------------------------int rc = 0; // 读进程计数semaphore W, mutex;W.value = 1;mutex.value = 1;procedure read{P(mutex);rc++;if (rc == 1)P(W);V(mutex);读文件;P(mutex);rc--;if (rc == 0)V(W);V(mutex);}procedure write{P(W);写文件;V(W);}process reader_i{read;}process writer_j{write;}cobegin{process reader_i;process writer_j;}coend//--------------------------------------------// Page 235 3.3.6 记录型信号量解决理发师问题//--------------------------------------------int waiting = 0; // 等候理发的顾客数int CHAIRS; // 为顾客准备的椅子数semaphore customers, barbers, mutex;customers.value = 0;barbers.value = 0;mutex.value = 0;procedure barber{while (true){P(customers); // 理完一人,还有顾客吗?若无顾客,理发师睡眠P(mutex); // 进程互斥waiting--; // 等候顾客数少一个V(barbers); // 理发师去为一个顾客理发V(mutex); // 开放临界区cut_hair(); // 正在理发}}procedure customer{P(mutex); // 进程互斥if (waiting < CHAIRS) // 看看有没有空椅子{waiting++; // 等候顾客数加1V(customers); // 必要的话唤醒理发师V(mutex); // 开放临界区P(barbers); // 理发师忙,顾客坐下等待get_haircut(); // 一个顾客坐下理发}elseV(mutex); // 人满了,走吧!}process Barber // 只有一位理发师{barber;}process Customer_i // 顾客{customer;}cobegin{process Barber;process Customer_i;}coend//--------------------------------------------// Page 237 3.4 管程//--------------------------------------------// 管程形式MONITOR <管程名><管程变量说明>define <(能被其他模块引用的)过程名列表>use <(要引用的模块外定义的)过程名列表>procedure <过程名>(<形式参数表>){<过程体>;}...procedure <过程名>(<形式参数表>){<过程体>;}init{<管程的局部数据初始化语句>;}// Page 239 管程MONITOR SSUbool busy;condition nobusy;define require, return;use wait, signal;procedure require{if (busy) // 调用进程加入等待队列wait(nobusy);busy = true;}procedure return{busy = false;signal(nobusy); // 从等待队列中释放进程}init{busy = false;}//--------------------------------------------// Page 241 3.4.2 Hoare方法实现管程//--------------------------------------------// Page 241 数据结构和操作过程typedef struct{semaphore mutex; // 进程调用管程过程前使用的互斥信号量semaphore next; // 发出signal的进程挂起自己的信号量int next_count; // 在next上等待的进程数}interf;procedure wait(semaphore x_sem, int x_count, interf IM){x_count++;if (IM.next_count > 0)V(IM.next);elseV(IM.mutex);P(x_sem);x_count--;}procedure signal(semahpore x_sem, int x_count, interf IM){if (x_count > 0){IM.next_count++;V(x_sem);P(IM.next);IM.next_count--;}}// Page 242 调用管程中过程的外部过程组成形式P(IM.mutex);<过程体>;if (IM.next_count > 0)V(IM.next);elseV(IM.mutex);// Page 242 霍尔方法实现哲学家问题// 以下两行为P242的两行说明代码enum {thinking, hungry, eating} state[5];semaphore self[5];MONITOR dining_philosophersenum {thinking, hungry, eating} state[5];semaphore self[5];int s_count[5];define pickup, putdown;use wait, signal;procedure test(int k) // k = 0, 1, ..., 4{if ((state[(k - 1) % 5] != eating) && (state[k] == hungry) && (state[(k + 1) % 5] != eating)){state[k] = eating;signal(self[k], s_count[k], IM);}}procedure pickup(int i) // i = 0, 1, ..., 4{state[i] = hungry;test(i);if (state[i] != eating)wait(self[i], s_count[i], IM);}procedure putdown(int i) // i = 0, 1, ..., 4 {state[i] = thinking;test((i - 1) % 5);test((i + 1) % 5);}init{for (int i = 0; i < 5; i++)state[i] = thinking;}cobegin{process philosopher_i{...P(IM.mutex);dining_philosophers.pickup(i);if (IM.next_count > 0)V(IM.next);elseV(IM.mutex);{吃通心面};...P(IM.mutex);dining_philosophers.putdown(i);if (IM.next_count > 0)V(IM.next);elseV(IM.mutex);...}}coend//--------------------------------------------// Page 244 3.4.3 Hanson方法实现管程//--------------------------------------------typedef struct{condition intsem; // 开放和关闭管程的条件变量int count1; // 等待调用的进程个数int count2; // 调用了管程过程中的过程且不处于等待状态的进程个数}interf;procedure wait(condition s, interf IM){s++;IM.count2--;if (IM.count1 > 0){IM.count1--;IM.count2++;R(IM.intsem);}W(s);}procedure signal(condition s, interf IM){if (s > 0){s--;IM.count2++;R(s);}}procedure check(interf IM){if (IM.count2 == 0)IM.count2++;else{IM.count1++;W(IM.intsem);}}procedure release(interf IM){IM.count2--;if (IM.count2 == 0 && IM.count1 > 0){IM.count1--;IM.count2++;R(IM.intsem);}}// Hanson实现例1: 读者写者问题MONITOR reader_writerint rc, wc;condition R, W;define start_read, end_read, start_write, end_write; use wait, signal, check, release;procedure start_read{check(IM);if (wc > 0)wait(R, IM);rc++;signal(R, IM);release(IM);}procedure end_read{check(IM);rc--;if (rc == 0)signal(W, IM);release(IM);}procedure start_write{check(IM);wc++;if (rc > 0 || wc > 1)wait(W, IM);release(IM);}procedure end_write{check(IM);wc--;if (wc > 0)signal(W, IM);elsesignal(R, IM);release(IM);}init{rc = 0;wc = 0;R = 0;W = 0;}cobegin{process reader{...reader_writer.start_read;...read;...reader_writer.end_read;...}process writer{...reader_writer.start_write;...write;...reader_writer.end_write;...}}coend//--------------------------------------------// Page 248 例2 父母子女水果问题//--------------------------------------------MONITOR FMSDenum FRUIT{apple, orange} plate;bool full;condition SP, SS, SD;define put, get;use wait, signal, check, release;procedure put(FRUIT fruit) // fruit: apple or orange {check(IM);if (full)wait(SP, IM);full = true;plate = fruit;if (fruit == orange)signal(SS, IM);elsesignal(SD, IM);release(IM);}procedure get(FRUIT fruit, FRUIT x) {check(IM);if (!full || plate != fruit){if (fruit == orange)wait(SS, IM);elsewait(SD, IM);}x = plate;full = false;signal(SP, IM);release(IM);}init{full = false;SP = 0;SS = 0;SD = 0;}cobegin{process father{...{准备好苹果};FMSD.put(apple);...}process mother{...{准备好桔子};FMSD.put(orange);...}process son{...FMSD.get(orange, x);{吃取到的桔子};...}process daughter{...FMSD.get(apple, x);{吃取到的苹果};...}}coend//--------------------------------------------// Page 250 例3 生产者消费者问题//--------------------------------------------MONITOR producer_consumeritem B[k]; // 缓冲区个数int in, out; // 存取指针int count; // 缓冲中产品数condition notfull, notempty; // 条件变量define append, take;use wait, signal, check, release;procedure append(item x){check(IM);if (count == k) // 缓冲已满wait(notfull, IM);B[in] = x;in = (in + 1) % k;count++; // 增加一个产品signal(notempty, IM); // 唤醒等待者release(IM);}procedure take(item x){check(IM);if (count == 0)wait(notempty, IM); // 缓冲已空x = B[out];out = (out + 1) % k;count--; // 减少一个产品signal(notfull, IM); // 唤醒等待者release(IM);}init{in = 0;out = 0;count = 0;}cobegin{process producer{item x;produce(x);append(x);}process consumer{item x;take(x);consume(x);}}coend//--------------------------------------------// Page 259 3.5.4 消息传递通信机制//--------------------------------------------typedef struct{int size; // 信箱大小int count; // 现有信件数message letter[n]; // 信箱semaphore S1, S2; // 等信箱和等信件信号量}box;procedure send(box B, message M){int i;if (B.count == B.size)W(B.S1);i = B.count;B.letter[i] = M;B.count = i + 1;R(B.S2);}procedure receive(box B, message x){int i;if (B.count == 0)W(B.S2);B.count--;x = B.letter[0];if (B.count != 0){for (i = 0; i < B.count; i++)B.letter[i] = B.letter[i + 1];}R(B.S1);}int capacity; // 缓冲大小int i;procedure producer{message pmsg;while (true){pmsg = produce; // 生产消息receive(mayproduce, pmsg); // 等待空消息{build message}; // 构造一条消息send(mayconsume, pmsg); // 发送消息}}procedure consumer{message cmsg;while (true){receive(mayconsume, cmsg); // 接受消息{extract message}; // 取消息send(mayproduce, NULL); // 回送空消息consume(cmsg); // 消耗消息}}main() // 主程序{create_mailbox(mayproduce); // 创建信箱create_mailbox(mayconsume);for (int i = 1; i <= capacity; i++)send(mayproduce, NULL); // 发送空消息cobegin{producer;consumer;}coend}//--------------------------------------------// Page 275 3.6.4 死锁 banker's algorithm//--------------------------------------------typedef struct{int resource[m];int available[m];int claim[m];int allocation[m];}state;resource_allocation // 资源分配算法{if (alloc[i, *] + request[*] > claim[i, *]){error}; // 申请量超过最大需求值else{if (request[*] > available[*]){suspend process.};else< define newstate by:allocation[i, *] = allocation[i, *] + request[*];available[*] = available[*] - request[*]; >;if (safe(newstate))< carry out allocation>;else{< restore original state >;< suspend process >;}}}bool safe(state s) // 安全性测试算法{int currentavail[m];set<process> rest;currentavail = available;rest = {all process};possible = true;while (possible){< find a Pk in rest such thatclaim[k, *] - allocation[k, *] <= currentavail; >if (found){currentavail = currentavail + allocation[k, *];rest = rest - [Pk];}elsepossible = false;}safe = rest = NULL;}/*----------------------Chapter 4 存储管理----------------------*///--------------------------------------------// Page 338 4.5.2 5.页面替换策略//--------------------------------------------int A[128][128];for (int j = 0; j < 128; j++)for (int i = 0; i < 128; i++)A[i][j] = 0;int A[128][128];for (int i = 0; i < 128; i++)for (int j = 0; j < 128; j++)A[i][j] = 0;/*---------------------------Chapter 8 分布式操作系统---------------------------*///--------------------------------------------// Page 660 8.3.4 Lamport算法//--------------------------------------------typedef struct{enum {application, reply, release} class; // 消息分申请消息、回答消息和释放消息int source = 1, ..., n; // 发消息进程编号int timestamp; // 消息上加盖的时间戳int clock; // 发消息时的时间戳bool valid; // 取真值时消息有效}message;// 每个进程都定义了下列变量和过程int T = 1; // 逻辑时间,初值为1message applicationstack[n]; // 1, ..., n 来自各进程的申请消息,开始全为无效消息int replycount; // 0, ..., n-1 回答消息计数procedure Apply // 申请资源时调用此过程{int i;message M;M.class = application; // 准备申请消息M.source = me; // me为本进程编号M.timestamp = T; // 填时间戳M.valid = true;T++;applicationstack[me] = M; // 消息也存入自己的消息数组replycount = n - 1; // 拟等待n - 1个进程的发来回答消息for (i = 1; i <= n; i++){M.clock = T;T++;if (i != me)send(M, i); // 申请消息发给进程i,且不等待}waitfor(Replycount = 0); // 等所有回答消息,应为n - 1个for (i = 1; i <= n; i++) // 辨别消息数组中时间戳的先后waitfor(not Applicationstack[i] -> Applicationstack[me]);// 关系"->"表示前者是有效消息,且前者排在后者之前get resource; // 可以使用资源了}procedure Receive(message M) // 进程空闲时,或处于waitfor等待态时才{ // 调用此过程来接受消息message R;T = 1 + max(M.clock, T);switch(M.class){case application:applicationstack[source] = M;R.class = reply;R.source = me;R.clock = T;T++;send(R, resource); // 发回答消息给申请者break;case reply:replycount--;break;case release:applicationstack[source].valid = false;break;}}procedure Release // 释放资源时,调用此过程{int i;message R;R.class = release;R.source = me;R.clock = T;T++;applicationstack[me].valid = false;for (i = 1; i <= n; i++)if (i != me)send(M, i); // 向其他进程发释放消息}//--------------------------------------------// Page 662 G.Ricart算法//--------------------------------------------typedef struct{enum {application, reply} class; // 消息分申请消息、回答消息int source = 1, ..., n; // 发消息进程编号int timestamp; // 消息上加盖的时间戳}message;int T; // 逻辑时间,初值为1int Applicationtime; // 发申请消息时刻bool Replydeffered[n]; // 如果i号进程申请资源,本进程暂不回答, // 则置Replydefered[i]为真,初值为假int Replycount; // 回答消息计数bool Requesting; // 申请资源时取真procedure Apply // 申请资源时调用此过程,执行后即获得资源{message M;M.class = application;M.timestamp = T;M.source = me;applicationtime = T;T++;requesting = true;replycount = n - 1;broadcast(M); // 发广播申请消息waitfor(replycount = 0); // 等待直到replycount = 0}procedure Receive(message M) // 进程空闲时,或处于waitfor等待态时,{ // 才可调用此过程来接受消息switch(M.class){case application:// 接到source的申请消息后,决定要否延迟发回答消息replydeffered[source] = requesting and ((timestamp > applicationtime)or (timestamp = applicationtime and source > me));T = 1 + max(T, timestamp);if (!replydeffered[source])sendreply(source); // 回答消息发给sourcebreak;case reply:replycount--;break;}}procedure Release // 释放资源时,调用此过程{int i;for (i = 1; i <= n; i++){if (replydeffered[i]){replydeffered[i] = false;sendreply(i); // 发释放消息}requesting = false;}}。

牛津大学英语教材代码

牛津大学英语教材代码牛津大学英语教材是广泛应用于全球英语学习领域的优质教材之一。

为了方便学生和教师进行辨识和使用,每套教材都有独特的代码。

本文将为您介绍牛津大学英语教材的代码以及它们的特点。

一、初级教材1. Code: OUP-EL-101Title: English for BeginnersLevel: A1Description: 该教材适用于初学者,以简单易懂的方式教授基础的英语词汇和语法知识。

通过各种实用的对话和练习,帮助学生快速入门。

2. Code: OUP-EL-102Title: Basic English CommunicationLevel: A2Description: 这套教材专注于提高学生的口语交流能力,以日常生活及工作场景为背景,教授实用的词汇和句型,帮助学生更流利地表达自己。

二、中级教材1. Code: OUP-EL-201Title: Intermediate English GrammarLevel: B1Description: 该教材主要注重中级英语语法的学习和应用,通过大量例句和练习,帮助学生掌握更复杂的语法结构和用法。

2. Code: OUP-EL-202Title: Practical English WritingLevel: B2Description: 这套教材专注于提升学生的写作能力,包括各种常见写作任务,如邮件、报告和文章写作。

通过范文分析和写作指导,帮助学生写出流畅且有逻辑的英文作文。

三、高级教材1. Code: OUP-EL-301Title: Advanced English VocabularyLevel: C1Description: 该教材侧重于扩展学生的词汇量,介绍高级词汇和短语的用法,并通过各种活动和练习帮助学生提高词汇记忆和运用能力。

2. Code: OUP-EL-302Title: Academic English SkillsLevel: C2Description: 这套教材旨在培养学生在学术环境中的英语能力,包括听力、口语、阅读和写作。

NC指令代码培训教材

一.常用M代码1.M00、M01、M02、M30之区别均为程序结束指令,但M01必须在机台OSP功能开关开启方有效,M00、M01生效后机台程序暂停执行,按STAR键可继续向后执行,M30则为程序结束执行后程序将回到开始。

2.M98/M99/G65/G66/G67●子程序呼叫指令格式:M98P_H_L_;L:子程序重复执行次数(当L省略时视同L1子程序执行一次)。

H:指定子程序中,开始执行的单节号码(当H省略时,子程序从最前头的单节开始执行)。

P:指定子程序的程序号码(当P省略时,指定程序本身,且只于记忆运转或MDI运转模式时)。

●M89为子程序调用指令,出现于主程序中,后接PXXXX指明调用XXXX号子程序●M99位于子程序尾,执行后结束子程序回主程序运行所对应之M89后各单节指令直接调用子程序执行完M99时,机台将回到子程序头循环执行该子程序●主程序中M99;使用时,程序执行M99后,回至主程序的开头。

(MDI亦同)●下述的命令动作相同,各G码对应的命令可由参数设定。

a︰M98P△△△△;b︰G65P△<自变量>;c︰G66P△<自变量>;G66呼叫后必须用G67取消;●M98指令与G65指令的相异处1)G65指令可以指定自变量,但是M98不可以指定自变量。

2)M98可以指定顺序号,但是G65,G66,G66.1不可以指定顺序号。

3)M98指令在M98单节中,执行M,P,H,L以外的指令后执行子程序,但G65不执行任何指令而转向子程序。

4)M98的单节中含有O,N,P,H,L以外的地址时,单节停止执行,G65的无单节停止。

5)M98的呼叫层数与G65,G66,G66.1相合最大为8层,G65与G66,G66.1相合最大为4层。

3.M29刚性攻牙指令中详述4.M19主轴定位指令。

自动换刀时主轴必须先作定位。

高光产品时为保证产品每次加工时刀纹一致或镗孔时防止进/退刀划伤孔内壁,需用其作主轴定向。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档