ios 手游SDK 开发教程

article/2025/5/20 3:31:10

前言:

各位同学大家好 ,有一段时间没有见面了。 具体多久我也不清楚了, 最近在学习iOS 手游sdk 的开发 所以就想着写完 写一份教程分享给大家, 本人之前一直都是做安卓开发的 安卓 app和安卓手游SDK 开的都会。

需要用到的三方库

     pod 'AFNetworking'pod 'SDWebImage','4.0.0'pod 'WHToast','~>0.1.0'

效果图

image.png

image.png

image.png

主要实现逻辑 手游SDK

初始化        init. 
登录            login  
支付            pay.  
区服登录    servicelogin. 
等级变化上报   updateuserinfo

接口设计

//
//  NineFunSdk.h
//  016登录界面
//
//  Created by xuqing on 2022/4/26.
//#import <Foundation/Foundation.h>
#import <UIkit/UIkit.h>
#import "RoleInfo.h"
#import "ServiceInfo.h"
NS_ASSUME_NONNULL_BEGINtypedef void (^LoginFinishBlock)(BOOL success, id data);typedef void (^InitFinishBlock)(BOOL success, NSString * data);
typedef void (^PayFinishBlock)(BOOL success, NSString * data);typedef void (^ServiceBlock)(BOOL success);typedef void (^UpdateUserInfoBlcok)(BOOL success);@interface NineFunSdk : NSObject+ (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock;+ (void)initSdk:(InitFinishBlock)finishBlock;+ (void)pay:(PayFinishBlock)finishBlock;+ (void)serviceinfo:(ServiceInfo*)getserviceinfo  serviceLogin:(ServiceBlock)finishBlock;+ (void)roleinfo:(RoleInfo*)getroleinfo updateUserInfo:(UpdateUserInfoBlcok)finishBlock;@endNS_ASSUME_NONNULL_END

我们定义这些对外方法 当然你也可以写成类方法 然后写个单例 去掉也行 我这边方便就用 + 然后每个方法我们定义了 block回调 这个看具体需求 因为参考了安卓了那边写法 每个对外接口都给回调 我就都给加了

具体接口的实现

//
//  NineFunSdk.m
//
//  Created by xuqing on 2022/4/26.
//#import "NineFunSdk.h"
#import "ViewController.h"
#import  <AFNetworking.h>
#import "NSString+Encrypt.h"
#import "RoleInfo.h"
#import "ServiceInfo.h"
#import "Md5Utils.h"@implementation NineFunSdk// 登录接口
+ (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock{ViewController * viewController= [[ViewController alloc]init];viewController.logBlock = finishBlock;[controller presentViewController:viewController animated:YES completion:nil];
}// 初始化接口
+ (void)initSdk:(InitFinishBlock)finishBlock{}//支付接口
+ (void)pay:(PayFinishBlock)finishBlock{}// 区服登录接口
+ (void)serviceinfo:(ServiceInfo*)getserviceinfo  serviceLogin:(ServiceBlock)finishBlock{NSLog(@"区服登录");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getserviceinfo->_sid,getserviceinfo->_roleid,getserviceinfo->_rolename];NSLog(@" sign %@", sign);// NSString * getsign=[sign MD5];NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/serviceinfo/servicelogin?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getserviceinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getserviceinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getserviceinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getserviceinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getserviceinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//    NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"");NSLog(@"请求成功---%@",responseObject);NSLog(@"请求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];};//等级变化上报接口
+ (void)roleinfo:(RoleInfo*)getroleinfo updateUserInfo:(UpdateUserInfoBlcok)finishBlock{NSLog(@"等级变化上报");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getroleinfo->_sid,getroleinfo->_roleid,getroleinfo->_rolename];NSLog(@" sign %@", sign);// NSString * getsign=[sign MD5];NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSLog(@"  getsign %@", getsign);NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/roleinfo/submitroleinfo?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getroleinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getroleinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getroleinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getroleinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getroleinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];//    NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"");NSLog(@"请求成功---%@",responseObject);NSLog(@"请求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];}
@end

因为时间问题 我这边制作了 login 和servicelogin. updateuserinfo 这几个接口的实现

登录接口

// 登录接口
+ (void)viewcontroller:(UIViewController *)controller sdkCheckLogin:(LoginFinishBlock)finishBlock{ViewController * viewController= [[ViewController alloc]init];viewController.logBlock = finishBlock;[controller presentViewController:viewController animated:YES completion:nil];
}

登录接口我们需要传入 UIViewController 实例和 实现LoginFinishBlock 回调

登录界面逻辑

  • m 文件

//
//  ViewController.h
//  016登录界面
//
//  Created by xuqing on 2021/7/27.
//#import <UIKit/UIKit.h>@interface ViewController : UIViewController{//登录界面的组成UILabel *_usernameLabel;UILabel * _passwordLabel;UITextField *_userTextfield;UITextField *_passwordfield;UIButton * _loginBtn;UIButton * _registerBtn;}
@property(retain,nonatomic)UILabel * usernameLabel;
@property(retain,nonatomic)UILabel * pswLabel;
@property(retain,nonatomic)UITextField * userTextfield;
@property(retain,nonatomic)UITextField * pswfield;
@property(retain,nonatomic)UIButton * loginBtn ;
@property(retain, nonatomic)UIButton * registerBtn;
@property (nonatomic,copy)void(^logBlock)(BOOL success, id data);
@end
  • h 文件

//
//  ViewController.m
//  016登录界面
//
//  Created by xuqing on 2021/7/27.
#import "ViewController.h"
#import "RegisterController.h"
#import  <AFNetworking.h>
#import <WHToast.h>
#import "TextUtils.h"
@interface ViewController ()
@end@implementation ViewController
@synthesize usernameLabel=_usernameLabel;
@synthesize pswLabel=_passwordLabel;
@synthesize userTextfield=_userTextfield;
@synthesize pswfield=_passwordfield;
@synthesize loginBtn=_loginBtn;
@synthesize registerBtn=_registerBtn;- (void)viewDidLoad {[super viewDidLoad];_usernameLabel =[[UILabel alloc]init];_usernameLabel.frame=CGRectMake(60, 100, 60, 40);_usernameLabel.text=@"账号:";_usernameLabel.textColor=[UIColor blueColor];[self.view addSubview:_usernameLabel];_userTextfield =[[UITextField alloc] init];_userTextfield.frame=CGRectMake(100, 100,180, 40);_userTextfield.font= [UIFont systemFontOfSize:15];// 设置字体颜色_userTextfield.textColor=[UIColor blackColor];//设置边框的风格// UITextBorderStyleBezel bezel线框// UITextBorderStyleRoundedRect 圆角风格// UITextBorderStyleLine 线框风格// UITextBorderStyleNone  无边框风格_userTextfield.borderStyle= UITextBorderStyleRoundedRect;//设置虚拟键盘风格//UIKeyboardTypeDefault 默认风格//UIKeyboardTypeNumberPad 纯数字风格//UIKeyboardTypeNamePhonePad 字母和数字组合风格_userTextfield.keyboardType=UIKeyboardTypeNamePhonePad;_userTextfield.placeholder=@"请输入用户名...";//是否作为密码输入//YES 做为处理 圆点加密//NO: 正常显示输入的文字_userTextfield.secureTextEntry= NO;[self.view addSubview:  _userTextfield];_passwordLabel =[[UILabel alloc]init];_passwordLabel.frame=CGRectMake(60, 150, 60, 40);_passwordLabel.text=@"密码:";_passwordLabel.textColor=[UIColor blueColor];[self.view addSubview:_passwordLabel];_passwordfield =[[UITextField alloc] init];_passwordfield.frame=CGRectMake(100, 150,180, 40);_passwordfield.font= [UIFont systemFontOfSize:15];// 设置字体颜色_passwordfield.textColor=[UIColor blackColor];//设置边框的风格// UITextBorderStyleBezel bezel线框// UITextBorderStyleRoundedRect 圆角风格// UITextBorderStyleLine 线框风格// UITextBorderStyleNone  无边框风格_passwordfield.borderStyle= UITextBorderStyleRoundedRect;//设置虚拟键盘风格//UIKeyboardTypeDefault 默认风格//UIKeyboardTypeNumberPad 纯数字风格//UIKeyboardTypeNamePhonePad 字母和数字组合风格_passwordfield.keyboardType=UIKeyboardTypeNamePhonePad;_passwordfield.placeholder=@"请输入密码...";//是否作为密码输入//YES 做为处理 圆点加密//NO: 正常显示输入的文字_passwordfield.secureTextEntry= YES;[self.view addSubview:  _passwordfield];_loginBtn=[UIButton buttonWithType: UIButtonTypeRoundedRect];_loginBtn.frame=CGRectMake(80, 220, 80, 40);[_loginBtn setTitle:@"登录" forState:UIControlStateNormal];[_loginBtn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchUpInside];_loginBtn.backgroundColor=[UIColor blueColor];[_loginBtn setTitleColor: [UIColor whiteColor ] forState:UIControlStateNormal] ;//设置按钮颜色[_loginBtn setTitleColor: [UIColor grayColor] forState:UIControlStateHighlighted] ;[self.view addSubview:_loginBtn];_registerBtn=[UIButton buttonWithType:UIButtonTypeRoundedRect];_registerBtn.frame=CGRectMake(180, 220, 80, 40);[_registerBtn setTitle:@"注册" forState:UIControlStateNormal];[_registerBtn addTarget:self action:@selector(registerMethod) forControlEvents:UIControlEventTouchUpInside];_registerBtn.backgroundColor=[UIColor blueColor];[_registerBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];[self.view addSubview:_registerBtn];}-(void)registerMethod{RegisterController * registerController= [[RegisterController alloc]init];registerController.registerBlock = self.logBlock;[self presentViewController:registerController animated:YES completion:nil];}-(void)login{NSString * _strTextName=_userTextfield.text;NSString * _strTextPsw=_passwordfield.text;if(![TextUtils isBlankString:_strTextName]&&![TextUtils isBlankString:_strTextPsw]){NSLog(@"登录成功");NSLog(@"%@ %@",_strTextName,_strTextPsw);NSString * registerString=@"http://192.168.7.25:8090/boss/user/validlogin?";NSString * str1=@"username=";NSString * str2=@"password=";NSMutableString *geturl = [NSMutableString string];[geturl appendString:registerString];[geturl appendString:str1];[geturl appendString:_strTextName];[geturl appendString:@"&"];[geturl appendString:str2];[geturl appendString:_strTextPsw];NSLog(@" geturl  ---  > %@",geturl);[[AFHTTPSessionManager manager]GET:geturl parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"");NSLog(@"请求成功---%@",responseObject);NSLog(@"请求 msg ---%@",[responseObject objectForKey:(@"msg")]);if (self.logBlock) {self.logBlock(YES, responseObject);}[self dismissViewControllerAnimated:YES completion:nil];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];}else {[WHToast showMessage:@"账号或者密码不能为空" duration:2 finishHandler:^{NSLog(@"登录toast");}];}}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//回收键盘[_userTextfield resignFirstResponder];[_passwordfield  resignFirstResponder];
}
@end

我们看到 我们在登录的viewcontroller 也定义了一个block 然后我们跳转的时候将外部传进来的 block 赋值给我们在登录定义的block.然后我们在登录网络请求成功以后 回调我们数据回去即可。
还有注册的viewcontroller 也是同理的 我就不展开讲了 也是注册成功 将服务端返回的数据结构 回调回去

数据上报逻辑 servicelogin

// 区服登录接口
+ (void)serviceinfo:(ServiceInfo*)getserviceinfo  serviceLogin:(ServiceBlock)finishBlock{NSLog(@"区服登录");NSString * sign = [NSString stringWithFormat:@"sid=%@role_id=%@role_anme=%@||0a649d6b-df9f-4583-bf7d-3fae84838519",getserviceinfo->_sid,getserviceinfo->_roleid,getserviceinfo->_rolename];NSLog(@" sign %@", sign);NSString * getsign=[Md5Utils getMd5_32Bit_String:sign isUppercase:NO];NSLog(@" getsign --- >  %@" ,getsign);NSString * serviceLoginUrl=@"http://192.168.7.25:8090/boss/serviceinfo/servicelogin?";NSMutableString *geturl = [NSMutableString string];[geturl appendString:serviceLoginUrl];[geturl appendString:@"gid="];[geturl appendString:getserviceinfo->_gid];[geturl appendString:@"&"];[geturl appendString:@"sid="];[geturl appendString:getserviceinfo->_sid];[geturl appendString:@"&"];[geturl appendString:@"role_name="];[geturl appendString:getserviceinfo->_rolename];[geturl appendString:@"&"];[geturl appendString:@"role_level="];[geturl appendString:getserviceinfo->_rolelevel];[geturl appendString:@"&"];[geturl appendString:@"role_id="];[geturl appendString:getserviceinfo->_roleid];[geturl appendString:@"&"];[geturl appendString:@"sign="];[geturl appendString:getsign];NSString *url = [geturl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
//    NSLog(@"geturl --- %@",geturl);[[AFHTTPSessionManager manager]GET:url parameters:nil headers:nil progress:^(NSProgress * _Nonnull downloadProgress) {NSLog(@"");} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {NSLog(@"");NSLog(@"请求成功---%@",responseObject);NSLog(@"请求 msg ---%@",[responseObject objectForKey:(@"msg")]);finishBlock(YES);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {NSLog(@"");}];
};

我们同样定义对外接口方法 需要传入 ServiceInfo 模型实例 然后实现 ServiceBlock 回调
然后我们在这个方法内部去请求服务端进去游戏里面数据上报逻辑 。

具体接入效果

  • 登录接入

//登录
- (IBAction)login:(id)sender {[NineFunSdk viewcontroller:self sdkCheckLogin:^(BOOL success, id data) {NSLog(@"回调成功成功---%@",data);}];
}
  • 数据上报 servicelogin

// 区服登录上报
- (IBAction)servicelogin:(id)sender {ServiceInfo * serviceinfo=[ServiceInfo new];serviceinfo->_sid=@"1111";serviceinfo->_gid=@"424251";serviceinfo->_roleid=@"旋涡名人";serviceinfo->_rolename=@"最强王者";serviceinfo->_rolelevel=@"214141";[NineFunSdk serviceinfo:serviceinfo serviceLogin:^(BOOL success) {NSLog(@"区服登录");}];
}
  • 数据上报 updateuserinfo

// 等级变化上报
- (IBAction)updateuserinfo:(id)sender {RoleInfo * roleinfo= [RoleInfo new];roleinfo->_gid=@"12232";roleinfo->_roleid=@"422422";roleinfo->_rolename=@"醉生梦死";roleinfo->_sid=@"测试服务器";roleinfo->_rolelevel=@"191";[NineFunSdk roleinfo:roleinfo updateUserInfo:^(BOOL success) {NSLog(@"等级变化上报");}];
}

整个iOS 手机SDK 大概就讲完了

最后总结:

有很多同学这时候就说 做成SDK 应该最后要打包成静态库才对吧 。是的没错 这一期我只是讲大概思路 因为我也不会打包静态库 所以我也还在学习 后面继续更新哈代码里面很多的三方库其实也不是这样去用的 我们应该直接去拉代码 不应该用 pod file 这样去依赖 我也是为了方便。最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。各位同学如果觉得文章还不错 ,麻烦给关注和star,小弟在这里谢过啦!


http://chatgpt.dhexx.cn/article/LowJ31Wy.shtml

相关文章

数据分析:大数据时代的必备技能之EXCEL

文章目录 数据分析价值与数据分析思维一、数据分析概述1.什么是数据2.理解数据3.什么是数据分析3. 数据分析的步骤 二、数据分析价值1.定义和组成2. 商业价值案例--豆浆 三、数据分析思维1. 核心思维方式(1)、结构化分析思维(2)、公式化分析思维(3)、业务化分析思维 数据预处理…

#C数据结构与算法# 绪论 算法与大O时间复杂度表示法(附例题)

一 算法基本概念与特性。 1.解决问题的五个步骤 由此我们可以看出良好的解决问题离就不开算法。 2.什么是算法 算法是指在解决问题时&#xff0c;按照某种机械的步骤一定可以得到问题的结果&#xff08;有的问题有解&#xff0c;有的没有&#xff09;的处理过程。算法是对解…

云计算期末速成大法

笔记仅自用&#xff0c;杠勿cue我 1. 绪论 4V特征&#xff1a;Volume&#xff08;规模大&#xff09;&#xff0c;Variety&#xff08;种类杂&#xff09;&#xff0c;Velocity&#xff08;变化快&#xff09;&#xff0c;Value&#xff08;价值密度小&#xff09; 从抽样到全…

简单分析几十个游戏案例

文章目录 一、 介绍二、 影响游戏体验的要点三、 游戏爆火的秘诀1.解读5个关键因素2.把握玩游戏的两种经典心理3.分析几款爆款游戏Qq农场植物大战僵尸水果忍者召唤神龙羊了个羊 4.值得游戏公司学习的经验5.未来游戏面对的诸多挑战 四、 几十款游戏的多方面分析FC红白游戏机十二…

软考高级-系统分析师-案例分析-系统设计

系分-案例分析-系统设计 结构化设计SD内聚&#xff08;高内聚低耦合&#xff09;耦合 业务流程建模IDEF&#xff08;建模仿真&#xff09; 面向对象的设计OOD设计原则设计模式分类 人机界面设计架构设计Zachman 架构框架Zachman 架构框架&#xff08;案例&#xff09; 面向服务…

系统分析师【系统规划案例分析汇总】

系统规划 项目选择和确定 &#xff08;1&#xff09;选择有核心价值的项目 &#xff08;2&#xff09;评估所选择的项目 &#xff08;3&#xff09;项目优先级排序 &#xff08;4&#xff09;评估项目的多种实施方式 &#xff08;5&#xff09;平衡地选择合适的方案 可行…

数据分析师常用的商业模型

数据分析少不了商业分析思维&#xff0c;以及对业务的理解。很多时候觉得思维不够健全&#xff0c;或者分析没有思路&#xff0c;其实都可以借助思维模型的学习来不足&#xff0c;来加速分析的成功。 一、波特五种竞争力模型 波特五力模型是企业制定竞争战略时常用的战略分析…

障碍度如何分析?

通常在综合评价后&#xff0c;比如计算得到准则层和指标层的分别权重之后&#xff08;指标权重体系构建后&#xff09;&#xff0c;为了找到‘主要障碍因子’&#xff0c;此时可使用‘障碍度模型’&#xff08;obstacle degree&#xff09;进一步研究&#xff0c;以便进行障碍度…

大数据分析师技能图谱详解

全球的数据量正在以每18个月翻一倍的惊人速度增长,世界正在高速数字化,大数据堪比石油,如何掘金大数据是所有个人、企业和国家的机遇和挑战。中国是人才大国,能理解和应用大数据的创新人才更是稀缺资源。大数据分析应用已经渗透到我们生活的方方面面。 随着大数据在国内的…

大数据分析案例-基于决策树算法构建银行客户流失预测模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

系分 - 案例分析 - 需求分析

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 系分 - 案例分析 - 需求分析结构化分析SA数据流图DFD答题技巧典型例题 1题目描述参考答案 典型例题 2题目描述参考答案 面向对象的分析OOA用例图用例模型细化用例描述用例关系【包含、扩展、泛化】分析模…

大数据分析案例-基于RFM+KMeas算法探究客户价值分析

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.项目准备 2.1 项目内容 2.2 数据说明

3-如何进行市场规模的分析预测-1

在进行行业分析时&#xff0c;经常需要根据历史的市场数据来预测未来的规模&#xff0c;一方面是帮助企业在做战略规划的时候&#xff0c;给他们提供一个指引&#xff0c;另一方面在做行业调查的时候也常会预测未来的市场规模&#xff0c;来判断行业的发展前景。 01 市场规模预…

第四段第一天_数学模型之层次分析法

层次分析法 [ 定义] [ 步骤] [ 优点介绍] [ 缺点介绍] [程序 ] 1&#xff1a;定义 所谓层次分析法&#xff0c;是指将一个复杂的多目标决策问题作为一个系统&#xff0c;将目标分解为多个目标或准则&#xff0c;进而分解为多指标&#xff08;或准则、约束&#xff09;的若…

鱼骨图分析法实际案例_技术前沿 | 基于鱼骨图分析标准实施偏差成因的应用研究...

引言 标准在实施过程中,难免会因为各种主客观原因导致难以落地的情况,分析标准执行偏差,开展问题成因分析,从而有针对性地制定一套有效的问题整改措施和预防措施,是一件很有价值、很有意义的创造性工作。基于鱼骨图开展根因研究,将能够对产生问题的所有直接原因和根本…

层次分析法在高校教学评价体系中的应用(原理+实例+工具)

1 层次分析法的原理及步骤 1.1 层次分析法的原理 20世纪70年代末&#xff0c;美国运筹学家、匹兹堡大学教授T.L.萨迪&#xff08;T.L.Saaty&#xff09;提出了层次分析法&#xff08;Analysis Hierarchy Process,简称 AHP&#xff09;。它将人的思维过程分成目标层、准则层和…

数学建模整理-层次分析法

目录 基本原理步骤&#xff08;1&#xff09;建立递阶层次结构模型&#xff08;2&#xff09;构造出各层次中的所有判断矩阵&#xff08;3&#xff09;计算权重&#xff08;3&#xff09;层次单排序及一致性检验&#xff08;4&#xff09;层次总排序及一致性检验 基本原理 层次…

层次分析法原理及实例(AHP)

层次分析法&#xff08;AHP&#xff09; 一、层次分析法概述 层次分析法&#xff08;analytic hierarchy process&#xff09;&#xff0c;简称AHP&#xff0c;是指将与决策总是有关的元素分解成目标、准则、方案等层次&#xff0c;在此基础之上进行定性和定量分析的决策方法…

JavaWeb自我学习——Tomcat简介&基本使用

目录 一.Tomcat简介 JavaEE Tomcat各类文件夹&#xff1a; 控制台中文乱码解决方法&#xff1a; 配置: 二.启动关闭 启动时出现问题&#xff1a; 三.Tomcat部署项目: 四.IDEA中创建Maven Web项目 1.Web 项目结构&#xff1a; 2.创建 第一种&#xff1a;项目骨架 第…

tomcat简介部署

tomcat 文章目录 1.tomcat简介2.tomcat历史3.tomcat官网4.部署tomcat5.登录到Host Manager,Manager App,Server Status 1.tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的…