【iOS】App仿写--管理系统

文章目录


前言

在日常生活中,如果用文字来记述与管理我们数据会十分麻烦,并且人工成本较高,这里笔者给出一种管理系统的模版,供大家借鉴,可凭借实际需求来创建所需要的管理系统

在先前C语言的学习过程中,笔者已经仿写过了学生管理系统,不过C语言的学生管理系统是没有UI的,所有功能都在控制台中实现,现用OC来仿写我们的管理系统


一、账号界面

这里的账号界面与3GShare大同小异,不再详细讲述,详见iOS--3GShare

唯一不同的就是在管理系统中使用了自定义字体,详见iOS自定义字体


二、功能界面

登录成功后首先出现的是我们功能界面,并且在功能界面显示了我们的人员信息

这里笔者使用了TableView来显示各项数据

在上面的第一行信息栏笔者使用了UILabel,这样可以根据自己的需要来更改管理系统需要管理的数据


三、添加功能

首先来看我们功能的实效效果

笔者的管理系统允许不同班级的有重名,但相同的鸡圈中不能有重名,同时成绩的区间需要在0-100之间,不能在这个区间之外,接下来放出具体实现代码:

objectivec 复制代码
- (void)back {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)confirm {
    NSString *s1 = _textField1.text;
    NSString *s2 = _textField2.text;
    NSString *s3 = _textField3.text;
    
    int boo1 = 0;
    int boo2 = 0;
    int boo3 = 0;
    
    for (int i = 0; i < _arrayName.count; i++) {
        if ([s1 isEqualToString:_arrayName[i]] && [s2 isEqualToString:_arrayClass[i]]) {
            boo1 = 1;
            boo2 = 1;
            break;
        }
        if (s3.integerValue < 0 || s3.integerValue > 100 || s2.integerValue < 0 || s2.integerValue > 10) {
            boo3 = 1;
            break;
        }
    }
    

    if (s1.length > 0 && s2.length > 0 && s3.length > 0){
        _textField1.text = @"";
        _textField2.text = @"";
        _textField3.text = @"";
        if (boo1 == 1 && boo2 == 1) {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"此只因已存在" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        } else if (boo3 == 1) {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入信息不合法" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        } else {
            [_arrayName addObject:s1];
            [_arrayClass addObject:s2];
            [_arrayScore addObject:s3];
            [self.delegate addName:_arrayName addClass:_arrayClass addScore:_arrayScore];
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"添加成功" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                [self dismissViewControllerAnimated:YES completion:nil];
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        }
    } else {
        self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入不能为空" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        }];
        [self.alert addAction:confirmAction];
        [self presentViewController:self.alert animated:YES completion:nil];
    }
}

这里需要注意的是添加成功之后需要将新的数据回传给功能界面,然后接着进行下一步操作


四、删除功能

笔者的删除功能是需要给出要删除的名字与其对应的鸡圈,这是因为不同鸡圈中可能存在重名

具体实现代码:

objectivec 复制代码
- (void)back {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)confirm {
    NSString *s1 = _textField1.text;
    NSString *s2 = _textField2.text;
    
    int boo1 = 0;
    int boo2 = 0;
    
    int t = 0;
    
    for (int i = 0; i < _arrayName.count; i++) {
        if ([s1 isEqualToString:_arrayName[i]] && [s2 isEqualToString:_arrayClass[i]]) {
            boo1 = 1;
            boo2 = 1;
            t = i;
            break;
        }

    }
    

    if (s1.length > 0 && s2.length > 0 ){
        _textField1.text = @"";
        _textField2.text = @"";
        if (boo1 != 1 && boo2 != 1) {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"此只因不存在" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        } else {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认删除" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                [self->_arrayName removeObjectAtIndex:t];
                [self->_arrayClass removeObjectAtIndex:t];
                [self->_arrayScore removeObjectAtIndex:t];
                [self.delegate deleteName:self->_arrayName deleteClass:self->_arrayClass deleteScore:self->_arrayScore];
                [self dismissViewControllerAnimated:YES completion:nil];
            }];
            UIAlertAction *confirmAction2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            }];
            [self.alert addAction:confirmAction2];
            [self.alert addAction:confirmAction1];
            [self presentViewController:self.alert animated:YES completion:nil];
        }
    } else {
        self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入不能为空" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        }];
        [self.alert addAction:confirmAction];
        [self presentViewController:self.alert animated:YES completion:nil];
    }
}

五、更改功能

笔者的更改功能是用来更改积分的,需要输入需要更改的名字与鸡圈,以此来避免重名导致更改错误的情况,然后输入我们需要更改的程序,然后将数据回传给我们的功能界面

objectivec 复制代码
- (void)back {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)confirm {
    NSString *s1 = _textField1.text;
    NSString *s2 = _textField2.text;
    NSString *s3 = _textField3.text;
    
    int f1 = 0;
    int f2 = 0;
    int f3 = 0;
    
    int boo1 = 0;
    int boo2 = 0;
    int boo3 = 0;
    
    for (int i = 0; i < _arrayName.count; i++) {
        if ([s1 isEqualToString:_arrayName[i]] && [s2 isEqualToString:_arrayClass[i]]) {
            boo1 = 1;
            boo2 = 1;
            f1 = i;
            f2 = i;
            break;
        }
        if ((s3.integerValue < 0 || s3.integerValue > 100 || s2.integerValue < 0 || s2.integerValue > 10) ) {
            boo3 = 1;
            break;
        }
    }
    

    if (s1.length > 0 && s2.length > 0 && s3.length > 0){
        _textField1.text = @"";
        _textField2.text = @"";
        _textField3.text = @"";
        if (boo1 == 0 && boo2 == 0) {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"此只因不存在" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        } else if (boo3 == 1) {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入信息不合法" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            }];
            [self.alert addAction:confirmAction];
            [self presentViewController:self.alert animated:YES completion:nil];
        } else {
            self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"确认更改" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *confirmAction1 = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                [self->_arrayName replaceObjectAtIndex:f1 withObject:s1];
                [self->_arrayClass replaceObjectAtIndex:f1 withObject:s2];
                [self->_arrayScore replaceObjectAtIndex:f1 withObject:s3];
                [self.delegate changeName:self->_arrayName changeClass:self->_arrayClass changeScore:self->_arrayScore];
                [self dismissViewControllerAnimated:YES completion:nil];
            }];
            UIAlertAction *confirmAction2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            }];
            [self.alert addAction:confirmAction2];
            [self.alert addAction:confirmAction1];
            [self presentViewController:self.alert animated:YES completion:nil];
        }
    } else {
        self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"输入不能为空" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        }];
        [self.alert addAction:confirmAction];
        [self presentViewController:self.alert animated:YES completion:nil];
    }
}

六、查找功能

因为存在不同鸡圈中有相同人名的情况,所以笔者这里仅仅根据名字来查找我们所需要的信息

objectivec 复制代码
- (void)back {
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void)confirm {
    _arrayFindName = [[NSMutableArray alloc] init];
    _arrayFindClass = [[NSMutableArray alloc] init];
    _arrayFindScore = [[NSMutableArray alloc] init];

    
    NSString *s1 = _textField1.text;

    int count = 0;
    
    for (int i = 0; i < _arrayName.count; i++) {
        if ([s1 isEqualToString:_arrayName[i]]) {
            [_arrayFindName addObject:_arrayName[i]];
            [_arrayFindClass addObject:_arrayClass[i]];
            [_arrayFindScore addObject:_arrayScore[i]];
            count++;
        }
    }
    if (count == 0) {
        self.alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"此只因不存在" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        }];
        [self.alert addAction:confirmAction];
        [self presentViewController:self.alert animated:YES completion:nil];
    } else {
        count = 0;
        [_tableView reloadData];
    }
    
}

七、排序功能

排序功能就比较简单了,这里既可以用我们c语言的排序方法来实现,也可以用OC创建排序描述符来实现

objectivec 复制代码
- (void)sort {
//    // 创建排序描述符,按照成绩降序排序
//    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO comparator:^NSComparisonResult(id obj1, id obj2) {
//        // 这里假设成绩为字符串类型,如果成绩是数字类型,可以将其转换为 NSNumber 进行比较
//        return [obj1 compare:obj2 options:NSNumericSearch];
//    }];
//
//    // 对 _arrayScore 进行排序
//    NSArray *sortedArray = [_arrayScore sortedArrayUsingDescriptors:@[sortDescriptor]];
//
//    // 使用排序描述符对 _arrayName 和 _arrayClass 进行重排,保持对应关系
//    _arrayName = [[NSMutableArray alloc] initWithArray:[_arrayName sortedArrayUsingDescriptors:@[sortDescriptor]]];
//    _arrayClass = [[NSMutableArray alloc] initWithArray:[_arrayClass sortedArrayUsingDescriptors:@[sortDescriptor]]];
//    _arrayScore = [[NSMutableArray alloc] initWithArray:sortedArray];
//
//    // 刷新表格
//    [_tableView reloadData];
    
    for (int i = 0; i < _arrayName.count - 1; i++) {
        for (int j = i + 1; j < _arrayName.count; j++) {
            if ([_arrayScore[i] intValue] < [_arrayScore[j] intValue]) {//需要注意字符串比较,要转换为int类型比较
                id temp = _arrayName[i];
                _arrayName[i] = _arrayName[j];
                _arrayName[j] = temp;
                
                temp = _arrayClass[i];
                _arrayClass[i] = _arrayClass[j];
                _arrayClass[j] = temp;
                
                temp = _arrayScore[i];
                _arrayScore[i] = _arrayScore[j];
                _arrayScore[j] = temp;
            }
        }
    }
    [_tableView reloadData];
}

八、退出功能

退出功能只有两段代码

objectivec 复制代码
-(void)exit {
    // 获取主线程对象
    UIApplication *app = [UIApplication sharedApplication];
    
    // 发送退出信号,立即终止应用程序
    [app performSelector:@selector(terminateWithSuccess) withObject:nil afterDelay:0.0];
}

总结

这里只是管理系统的一种模版,大家可以通过实际需求来更改代码来统计数据

相关推荐
Smile_Gently3 小时前
Mac 系统 Node.js 安装与版本管理指南
macos·node.js
野盒子5 小时前
前端面试题 微信小程序兼容性问题与组件适配策略
前端·javascript·面试·微信小程序·小程序·cocoa
海上彼尚5 小时前
Vue3 PC端 UI组件库我更推荐Naive UI
前端·vue.js·ui
无知的前端6 小时前
Flutter开发,GetX框架路由相关详细示例
android·flutter·ios
大熊猫侯佩6 小时前
iOS 18 中全新 SwiftData 重装升级,其中一个功能保证你们“爱不释手”
数据库·ios·swift
大熊猫侯佩6 小时前
SwiftUI 6.0(iOS 18)新容器视图修改器漫谈
ios·swiftui·wwdc
Yale曼陀罗6 小时前
如何快速删除谷歌浏览器在mac启动台生成的网页图标
macos
尖椒土豆sss7 小时前
记一次macOs系统安装使用vpn过程
macos
大千AI助手7 小时前
5分钟玩转Swagger UI:Docker部署+静态化实战
ui·docker·容器·swagger·swaggerui
Digitally7 小时前
如何将 iPhone 中的短信导出为 PDF
ios·pdf·iphone