【iOS】UI学习(三)

目录

  • 前言
  • 步进器和分栏控制器
  • 警告对话框和等待提示器
  • UITextField
  • 登陆界面案例
  • UIScrollView基础
  • 滚动视图的高级功能
  • 总结

前言

本篇博客是我在学习UI部分内容的学习笔记,希望对你有所帮助,如有错误,还请指出!

步进器和分栏控制器

  步进器(Stepper)和分栏控制器(Tab Controller)是iOS开发中常用的两种控件。
  步进器通常用于允许用户增加或减少数值,例如调整音量或选择数量。它通常由一个加号按钮和一个减号按钮组成,用户可以通过按这些按钮来逐步增加或减少数值。步进器还可以具有最小值和最大值,以确保用户不能选择超出指定范围的数值。步进器常用于购物车等需要增减数量的场景,例如增减房间数和人数。
  分栏控制器则是iOS中用于在多个视图控制器之间切换的控件。它通常出现在屏幕底部,每个分栏对应一个视图控制器,用户可以通过点击分栏来切换不同的视图控制器。分栏控制器常用于主界面的设计,例如在社交应用中切换"消息"、“联系人”、"动态"等不同的界面。

下面给出代码示例:

ViewController.h文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    //定义一个步进器对象(步进器:按照一定的数字来调整某个数据,比如每次调整音量时以5为单位)
    UIStepper* _stepper;
    
    //定义一个分栏控制器
    UISegmentedControl* _segControl;
}

//定义属性
@property(retain, nonatomic)UIStepper* stepper;
@property(retain, nonatomic)UISegmentedControl* segControl;

@end

ViewController,m文件:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize stepper = _stepper;
@synthesize segControl = _segControl;

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建步进器对象
    _stepper = [[UIStepper alloc] init];
    
    //设置步进器的位置和大小(其宽高不可变)
    _stepper.frame = CGRectMake(150, 100, 80, 40);
    
    //设置步进器的最小值
    _stepper.minimumValue = 0;
    
    //设置步进器的最大值
    _stepper.maximumValue = 100;
    
    //设置步进器的当前值(不设置的话 默认为0)
    _stepper.value = 50;
    
    //设置步进器的步进制,即每次向前或向后步进的步伐值(默认为1)
    _stepper.stepValue = 5;
    
    //是否可以重复响应事件操作(一直按着可以持续增大或减小)
    _stepper.autorepeat = YES;
    
    //是否将步进结果通过事件函数响应出来(只有在stepValue设置为YES时,才有效果)
    //(设置为YES时,当我们一直按着步进器进行持续增大或减小时,他会通过下面的事件函数将每次调整后的value都打印出来;设置为NO,则不会,但其实步进器的当前值还是发生了变化的)
    _stepper.continuous = YES;
    
    //添加一个事件函数
    //p1:函数实现体  p2:函数体  p3:事件值改变
    [_stepper addTarget:self action:@selector(stepChanged) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:_stepper];
    
    //创建一个分栏控件
    _segControl = [[UISegmentedControl alloc] init];
    
    //设置分栏控件的位置和大小(宽度可变,高度不可变)
    _segControl.frame = CGRectMake(50, 200, 300, 40);
    
    //添加一个按钮元素(多个按钮元素会平分分栏控件的宽度)
    [_segControl insertSegmentWithTitle:@"黄昏" atIndex:0 animated:NO];
    
    //p1:按钮选项文字  p2:按钮的索引位置  p3:是否插入动画效果
    [_segControl insertSegmentWithTitle:@"约尔" atIndex:1 animated:NO];
    
    [_segControl insertSegmentWithTitle:@"阿尼亚" atIndex:2 animated:NO];
    
    [_segControl insertSegmentWithTitle:@"邦德" atIndex:3 animated:NO];
    
    //设置当前默认按钮索引的位置
    _segControl.selectedSegmentIndex = 0;
    
    [_segControl addTarget:self action:@selector(segChanged) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview:_segControl];
}

- (void)stepChanged
{
    NSLog(@"step pressed!当前_stepper的值为%f", _stepper.value);
}

- (void)segChanged
{
    NSLog(@"当前索引位置为%d", _segControl.selectedSegmentIndex);
}

@end

运行结果:

在这里插入图片描述

在这里插入图片描述

警告对话框和等待提示器

  警告对话框(Alert Dialog)主要用于提醒用户关于程序中特定事件的信息。例如,当用户的操作可能会导致数据丢失时,程序会弹出一个警告对话框,询问用户是否真的要执行这个操作。在JavaScript中,你可以使用window.alert()方法来创建一个警告对话框。在iOS中,你可以使用UIAlertController类来创建一个警告对话框。
  等待提示器(Loading Indicator)则主要用于在程序需要花费一些时间来处理任务,例如下载文件或者加载数据时,告诉用户程序正在处理,让用户知道程序没有冻结,只是在执行需要一些时间的操作。在很多情况下,等待提示器会以一个旋转的圆圈的形式出现。

代码示例:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize activityInicator = _activityInicator;

- (void)viewDidLoad {
    [super viewDidLoad];
    
    for (int i = 0; i < 2; i++) 
    {
        UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        
        btn.frame = CGRectMake(150, 100 + 100 * i, 100, 40);
        
        if (i == 0) {
            [btn setTitle:@"警告对话框⚠️" forState:UIControlStateNormal];
        } else if (i == 1) {
            [btn setTitle:@"等待提示器⌛️" forState:UIControlStateNormal];
        }
        
        btn.tag = 101 + i;
        
        [btn addTarget:self action:@selector(pressBtn:) forControlEvents:UIControlEventTouchUpInside];
        
        [self.view addSubview:btn];
    }
}

- (void)pressBtn:(UIButton *)btn
{
    if (btn.tag == 101) {
        
        //创建一个UIAlertController对象
        //P1:弹出框的标题  P2弹出框的内容
        //P3:弹出的警告框的样式为UIAlertControllerStyleAlert(即中心弹出的警告框)
        UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"警告⚠️" message:@"你的手机电量过低,即将关机📴" preferredStyle:UIAlertControllerStyleAlert];

        //添加“确认”动作按钮到控制器上
        //P1:标题文字  P2:动作样式,有三种动作样式:常规(default)、取消(cancel)以及警示(destruective)
        //P3:用户选中并点击该动作时,所执行的代码
        UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
            // 用户点击确认按钮后执行的代码
        }];
        //将动作按钮添加到alertController视图上
        [alertController addAction:defaultAction];

        //添加“取消”动作按钮到控制器上
        UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) {
            // 用户点击取消按钮后执行的代码
        }];
        //将动作按钮添加到alertController视图上
        [alertController addAction:cancelAction];

        //将警告框显示出来
        [self presentViewController:alertController animated:YES completion:nil];
    } else if (btn.tag == 201) {
        //等待提示器创建
        //宽度和高度不可改变
        _activityIndicator = [[UIActivityIndicatorView alloc] init];
        _activityInicator.frame = CGRectMake(100, 300, 80, 80);
        
        //设定提示的风格
        _activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium;
        _activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleLarge;
        
        [self.view addSubview:_activityIndicator];
        
        //启动动画并显示
        [_activityIndicator startAnimating];
        //停止动画并隐藏
        [_activityIndicator stopAnimating];
    }
}

@end

运行结果:
在这里插入图片描述

UITextField

  UITextField 是 iOS 开发中的一个基本组件,用于接收用户输入的文本信息。它是 UIKit 框架中的一个类,通常被用于创建文本框。
  UITextField 提供了很多属性和方法来自定义文本框的行为和外观。例如,我们可以通过设置 placeholder 属性来显示提示文字,设置 text 属性来获取或设置文本框中的文本,使用 keyboardType 属性来改变键盘类型等等。
  还可以通过实现 UITextFieldDelegate 协议中的方法来响应文本框的各种事件,如开始编辑、结束编辑、文本改变等。

下面进行代码演示:

ViewController.h文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    //定义一个textField
    //textField:是一个文本输入区域,例如:用户名、密码等需要输入文本文字的内容区域
    //textField只能输入单行文字,不能输入或显示多行
    UITextField* _textField;
}

//定义属性
@property(retain, nonatomic)UITextField* textField;

@end

ViewController.m文件:


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize textField = _textField;

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UILabel* UserName = [[UILabel alloc] init];
    UserName.frame = CGRectMake(90, 150, 80, 40);
    UserName.text = @"用户名:";
    UserName.font = [UIFont systemFontOfSize:15];
    UserName.textColor = [UIColor blackColor];
    [self.view addSubview:UserName];
    
    //创建一个文本输入区对象
    self.textField = [[UITextField alloc] init];
    //设定文本输入区的位置和大小
    self.textField.frame = CGRectMake(150, 150, 180, 40);
    //设置textField的内容文字
    //self.textField.text = @"用户名";
    //设置文字的字体和大小
    self.textField.font = [UIFont systemFontOfSize:15];
    //设置字体的颜色
    self.textField.textColor = [UIColor blueColor];
    //设置边框的风格:
    //UITextBorderStyleRoundedRect:圆角风格(默认为这个)
    //UITextBorderStyleNone:无边框风格
    //UITextBorderStyleLine:线框风格
    //UITextBorderStyleBezel:bezel线框风格
    self.textField.borderStyle = UITextBorderStyleRoundedRect;
    //设置虚拟键盘风格(常用的):
    //UIKeyboardTypeNumberPad:默认风格
    //UIKeyboardTypeNumberPad:纯数字风格
    //UIKeyboardTypeNamePhonePad:字母和数字组合风格
    self.textField.keyboardType = UIKeyboardTypeDefault;
    //设置提示文字 当text属性为空时,显示此条信息
    self.textField.placeholder = @"请输入用户名";
    //是否作为密码输入(YES——加密输入*;NO——不加密输入 正常显示输入文字)
    self.textField.secureTextEntry = NO;
    
    [self.view addSubview:self.textField];
    
    //设置代理对象
    self.textField.delegate = self;
}

//四个协议:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@"开始编辑了!");
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    //结束输入后 将输入框清空
    self.textField.text = @"";
    NSLog(@"输入结束!");
}

//是否可以开始输入(YES——可以;NO——不可以) 如果不另外实现该函数,默认为YES
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    return YES;
}

//是否可以结束输入(YES——可以;NO——不可以) 如果不另外实现该函数,默认为YES
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    return  YES;
}

//点击屏幕空白处调用此函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //使虚拟键盘收回,不再作为第一响应者
    [self.textField resignFirstResponder];
}

@end

运行结果:

在这里插入图片描述
在这里插入图片描述

登陆界面案例

代码示例:

ViewController.h文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    //登录界面的组成: 用户名提示(Label):输入框;  密码提示(Label):密码输入框(TextFile);  登录按钮(Button);  注册按钮(BUtton)。
    
    //用户名提示Label
    UILabel* _lbUserName;
    //密码提示
    UILabel* _lbPassword;
    
    //用户名输入框
    UITextField* _tfUserName;
    //密码输入框
    UITextField* _tfPassWord;
    
    //登录按钮
    UIButton* _btLogin;
    //注册按钮
    UIButton* _btRegister;
}

@end

ViewController.m文件:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //用户名提示标签创建
    _lbUserName = [[UILabel alloc] init];
    _lbUserName.frame = CGRectMake(20, 100, 80, 40);
    _lbUserName.text = @"用户名:";
    _lbUserName.font = [UIFont systemFontOfSize:20];
    _tfUserName.textAlignment = NSTextAlignmentLeft;
    
    //密码提示创建
    _lbPassword = [[UILabel alloc] init];
    _lbPassword.frame = CGRectMake(20, 200, 80, 40);
    _lbPassword.text = @"密码:";
    _lbPassword.font = [UIFont systemFontOfSize:20];
    _lbPassword.textAlignment = NSTextAlignmentLeft;
    
    //用户名输入框
    _tfUserName = [[UITextField alloc] init];
    _tfUserName.frame = CGRectMake(120, 100, 180, 40);
    _tfUserName.placeholder = @"请输入用户名";
    _tfUserName.borderStyle = UITextBorderStyleRoundedRect;
    
    //密码输入框
    _tfPassWord = [[UITextField alloc] init];
    _tfPassWord.frame = CGRectMake(120, 200, 180, 40);
    _tfPassWord.placeholder = @"请输入密码";
    _tfPassWord.borderStyle = UITextBorderStyleRoundedRect;
    _tfPassWord.secureTextEntry = YES;
    
    //登录按钮和注册按钮的创建
    _btLogin = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _btLogin.frame = CGRectMake(150, 300, 80, 40);
    [_btLogin setTitle:@"登录" forState:UIControlStateNormal];
    [_btLogin addTarget:self action:@selector(pressLogin) forControlEvents:UIControlEventTouchUpInside];
    
    _btRegister = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _btRegister.frame = CGRectMake(150, 360, 80, 40);
    [_btRegister setTitle:@"注册" forState:UIControlStateNormal];
    [_btRegister addTarget:self action:@selector(pressRegister) forControlEvents:UIControlEventTouchUpInside];
    
    //将所有控件添加到视图中显示
    [self.view addSubview:_lbUserName];
    [self.view addSubview:_lbPassword];
    [self.view addSubview:_tfUserName];
    [self.view addSubview:_tfPassWord];
    [self.view addSubview:_btLogin];
    [self.view addSubview:_btRegister];
}

- (void)pressLogin
{
    NSString* strName = @"kacy";
    NSString* strPass = @"1234567";
    
    //获取输入框里的用户名和密码文字
    NSString* strTextName = _tfUserName.text;
    NSString* strTextPass = _tfPassWord.text;
    
    if ([strTextName isEqualToString:strName] && [strTextPass isEqualToString:strPass]) {  //这里不能用==,因为这两个指针不一定相等,我们只需要比较里面的内容
        NSLog(@"用户名和密码输入正确!");
        
        //创建一个UIAlertController对象
        //P1:弹出框的标题  P2弹出框的内容  P3:弹出的警告框的样式为UIAlertControllerStyleAlert(即中心弹出的警告框)
        UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"验证成功,正在登录..." preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:defaultAction];

        UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
        [alertController addAction:cancelAction];

        [self presentViewController:alertController animated:YES completion:nil];
    } else {
        NSLog(@"用户或密码错误");
        
        UIAlertController* alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"用户名或密码错误,登录失败" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:defaultAction];

        UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
        [alertController addAction:cancelAction];

        [self presentViewController:alertController animated:YES completion:nil];
    }
}

- (void)pressResigter
{
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //回收键盘对象⌨️
    [_tfUserName resignFirstResponder];
    [_tfPassWord resignFirstResponder];
}

@end

上述代码对用户注册部分的后续界面跳转代码未进行实现。

运行结果:

在这里插入图片描述

UIScrollView基础

  UIScrollView是iOS中非常重要的一个控件,它允许用户在其包含的视图大于其自身尺寸时进行滚动和缩放。
  UIScrollView的主要特性和用途包括:

  • 滚动视图:当内容视图的尺寸大于UIScrollView的尺寸时,用户可以通过拖动来滚动内容视图,查看被隐藏的部分。
  • 缩放视图:UIScrollView支持对内容视图进行缩放,用户可以通过双击或者捏合手势来放大或者缩小内容视图。
  • 嵌套滚动视图:UIScrollView可以嵌套使用,一个UIScrollView的内容视图可以是另一个UIScrollView。这种方式常用于实现复杂的滚动效果,比如说日历视图、时钟视图等。
  • 自动布局:UIScrollView支持自动布局(Auto Layout),可以根据内容视图的尺寸自动调整滚动范围。
  • 滚动事件响应:通过实现UIScrollViewDelegate协议,我们可以对滚动、缩放、动画等事件进行响应。

  UIScrollView的使用场景很广泛,比如说网页浏览、阅读器、图片浏览器等,都是UIScrollView的典型应用。

滚动视图的高级功能

代码示例:

#import "ViewController.h"
 
@interface ViewController ()
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //定义并创建一个滚动视图并设置其位置,滚动视图可以对视图内容进行滚屏查看
    UIScrollView* sv = [[UIScrollView alloc] initWithFrame: CGRectMake(0, 0, 394, 852)];
    
    //是否按照整页滚动视图
    sv.pagingEnabled = YES;
    //是否可以开启滚动效果
    sv.scrollEnabled = YES;
   
    //设置画布的大小,画布显示在滚动视图的内部,一般大于frame的大小,第一个参数表示宽,第二个表示高
    sv.contentSize = CGSizeMake(394 * 5, 852);
    
    //是否可以边缘弹动效果
    sv.bounces = YES;
    //开启横向弹动效果
    sv.alwaysBounceHorizontal = YES;
    //开启纵向弹动效果
    sv.alwaysBounceVertical = NO;
   
    //是否显示横向滚动条
    sv.showsHorizontalScrollIndicator = NO;
    //是否显示纵向滚动条
    sv.showsVerticalScrollIndicator = NO;
    
    for (int i = 0; i < 3; i++) {
        NSString* imageName = [NSString stringWithFormat: @"syx%d.jpg", i + 1];
        UIImage* aImage = [UIImage imageNamed: imageName];
        UIImageView* aView = [[UIImageView alloc] initWithImage: aImage];
        aView.frame = CGRectMake(394 * i, 0, 394 , 852);
        [sv addSubview: aView];
    }
    
    //设置背景颜色
    sv.backgroundColor = [UIColor cyanColor];
    
    [self.view addSubview: sv];
}
 
@end

运行结果:
在这里插入图片描述

总结

  以上就是本篇博客的全部内容,警告对话框和等待提示器、滚动视图等的相关内容在UI学习中还是比较重要的,学完记得动手实践哦!希望这篇博客对您有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/704373.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

宁波磁材商会×蓝卓 | 共同打造“稀磁产业平台”,赋能产业数字化转型

日前&#xff0c;蓝卓与宁波市磁性材料商会&#xff08;以下简称&#xff1a;宁波磁材商会&#xff09;共同打造的“稀磁产业平台”正式启动&#xff0c;宁波磁材商会秘书长吴玥臻、蓝卓副总经理陈挺等领导出席战略签约仪式。 宁波是全国磁性材料产业创新高地和全球重要磁性材料…

nginx优化与防盗链【☆☆☆】

目录 一、用户层面的优化 1、隐藏版本号 方法一&#xff1a;修改配置文件 方法二&#xff1a;修改源码文件&#xff0c;重新编译安装 2、修改nginx用户与组 3、配置nginx网页缓存时间 4、nginx的日志切割 5、配置nginx实现连接超时 6、更改nginx运行进程数 7、开启网…

Echarts饼图,自定义饼图图例的排列方式, formatter使用语法

&#x1f308;&#x1f308;​​​​​​​&#x1f308;文章目录 一、饼图图例的排列方式 1.引入饼图 2.水平顶部(底部)排列 3.垂直左右排列 二、formatter使用语法 以图例后面拼接占比百分比为例 1.上下左右排列占比百分比 2.两端排列占比百分比 一、饼图图例的排列方…

刚刚苹果发布了「Android18」,还有29999的新机

大伙儿端午好啊&#xff0c;刚刚过去端午节。 苹果就在本周二凌晨 1 点召开了 WWDC2024 大会开幕。 果子最近很活跃啊&#xff0c;看来是被上半年的财报深深刺痛了。 此次大会没有硬件&#xff0c;基本都是涵盖各个产品未来的系统更新&#xff0c;果粉们期待的 iOS18、Mac OS…

交流负载箱的使用场景和应用范围是什么?

交流负载箱模拟实际用电设备运行状态的电力测试设备&#xff0c;主要用于对各种电气设备、电源系统、发电机组等进行性能测试、质量检验和安全评估。交流负载箱的使用场景和应用范围非常广泛&#xff0c;涵盖了电力、通信、能源、交通等多个领域。 1. 电力行业&#xff1a;在电…

Linux 中 “ 磁盘、进程和内存 ” 的管理

在linux虚拟机中也有磁盘、进程、内存的存在。第一步了解一下磁盘 一、磁盘管理 &#xff08;1.1&#xff09;磁盘了解 track&#xff08; 磁道 &#xff09; &#xff1a;就是磁盘上的同心圆&#xff0c;从外向里&#xff0c;依次排序1号&#xff0c;2号磁盘........等等。…

中国首家!全球第二!沃飞长空AE200取得关键技术突破

近日&#xff0c;沃飞长空全自研战略产品AE200电动垂直起降航空器&#xff08;eVTOL&#xff09;验证机顺利完成全尺寸、全重量、全包线倾转过渡飞行&#xff0c;成为中国首个、全球第二完成该类试验科目的eVTOL企业&#xff0c;标志着中国eVTOL发展实现历史性突破&#xff0c;…

【JavaScript】简单数据类型 与 复杂数据类型 ② ( 简单数据类型参数传递 | 复杂数据类型参数传递 )

文章目录 一、简单数据类型参数传递1、值传递2、代码示例 二、复杂数据类型参数传递1、引用传递2、代码示例 一、简单数据类型参数传递 1、值传递 简单数据类型 的 参数传递时 , 将 该类型的比变量 或 值 作为 实参 传递给 函数形参 时 , 其本质是 将 栈内存 中存储的 数据值 …

meilisearch的索引(index)的最佳实践

官网的第一手资料学新技术&#xff1a;meilisearch官方文档 安装的官网地址&#xff1a;meilisearch安装的官网 部署在生产环境的指导&#xff1a;meilisearch部署在生产环境的指导 Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重…

基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现问卷调查系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;问卷信息因为其管理内容繁杂&#xff0c;管理数…

【数据结构】第十五弹---C语言实现直接插入排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、排序的概念及其运用 1.1、排序的概念与分类 1.2、排序运用 1.3、常见的排序算法 1.4、常见的排序算法性能测试 2、常见排序算法的实现 2…

NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE ida 可能会把 一个数组或字符串拆开&#xff0c;可以通过计算地址&#xff0c;知道是一起的 也有的会藏在汇编窗口 Segments IDA的Segments窗口 &#xff1a;shiftf7 https://www.cnblogs.com/sch01ar/p/9477697.html ida 各种窗口也是需要…

北斗导航:让科技引领未来出行

北斗导航是中国自主研发的卫星导航系统&#xff0c;由一系列北斗卫星和地面控制平台组成。它的研发始于上世纪80年代&#xff0c;经过几十年的发展&#xff0c;如今已成为全球领先的卫星导航系统之一。北斗导航凭借其优秀的性能&#xff0c;为我们的出行提供了准确、可靠的定位…

景联文科技:打造亿级高质量教育题库,赋能教育大语言模型新未来

随着人工智能技术的持续进步&#xff0c;从广泛的通用大语言模型到针对各行业的垂直大语言模型&#xff0c;已成为人工智能大语言模型技术深化演进的必然趋势。 教育大语言模型是适用于教育场景、具有庞大规模参数、融合了广泛的通用知识和专业知识训练形成的人工智能模型。能为…

【调试笔记-20240612-Linux-在 QEMU 中配置 OpenWrt-23.05 支持访问 Windows 宿主机的共享目录】

调试笔记-系列文章目录 调试笔记-20240612-Linux-在 QEMU 中配置 OpenWrt-23.05 支持访问 Windows 宿主机的共享目录 文章目录 调试笔记-系列文章目录调试笔记-20240612-Linux-在 QEMU 中配置 OpenWrt-23.05 支持访问 Windows 宿主机的共享目录 前言一、调试环境操作系统&…

现场直击 | 飞凌嵌入式亮相2024上海国际嵌入式展

6月12日&#xff0c;2024上海国际嵌入式展&#xff08;embedded world China 2024&#xff09;在上海世博展览馆开幕。飞凌嵌入式亮相3号馆646展位&#xff0c;聚焦人工智能、智慧交通、工业互联网、智慧医疗、电力与储能等领域&#xff0c;旨在为全球客户带来一场技术与创新的…

第 3 章:Spring Framework 中的 AOP

第 3 章&#xff1a;Spring Framework 中的 AOP 讲完了 IoC&#xff0c;我们再来聊聊 Spring Framework 中的另一个重要内容——面向切面编程&#xff0c;即 AOP。它是框架中众多功能的基础&#xff0c;例如声明式事务就是依靠 AOP 来实现的。此外&#xff0c;Spring 还为我们…

【车载AI音视频电脑】4路AHD 130万像素双卡车载录像机

产品主要特点&#xff1a; -支持4路实时高清AHD 720P录像 -SD卡记录数据&#xff08;可支持2张大容量SD卡,最大支持单张256G&#xff09; -支持GPS全球定位, 可选模块 -支持WIFI高速自动下载功能, 可选模块 -内置3/4G模块&#xff0c;实时预览和远程管理&#xff0c; 可选…

环保空调的制冷量和耗电量是多少呢

环保空调的制冷量和耗电量因具体型号、功率以及使用情况而异。以下是一些关于环保空调制冷量和耗电量的详细解释和归纳&#xff1a; 制冷量 原理&#xff1a;环保空调主要利用水蒸发吸热的物理原理进行降温&#xff0c;这种降温方式能够带来显著的冷却效果。效果&#xff1a;…

现代X86汇编-C和ASM混合编程举例

端午假期安装好了vs c2022,并写了个简单的汇编代码&#xff0c;证明MASM真的可以运行。今天需要搞一个实实在在的C和ASM混合编程的例子&#xff0c;因为用纯汇编的求伯君写WPS的时代一去不复返了。个别关键函数用汇编&#xff0c;充分发挥CPU的特色功能&#xff0c;偶尔还是需要…