学生信息管理系统总结——(oc语言版)

这周仿写了oc语言版的学生信息管理系统,实现了增删改查和排序以及字符串的合法判定功能。虽然这个项目比较简单,但是同样学到了oc语言中NSScanner和NSPredicate这两个类和有关于正则表达式的一些知识,这是两个非常好用的类,通过与正则表达式结合,可以非常方便地实现对集合类进行过滤、对字符串进行判定等非常强大的功能,有关这些的知识之后会有博客来详细地讲解,这篇博客先在用到时简单讲解一下。

接下来开始讲解学生信息管理系统

登录注册

这里的登录注册与3Gshare的写法类似,只是多添加了账密合法判定的功能,这里关于字符串合法判定的功能全部放到增加学生的部分去讲解。 

主页

主页部分的布局十分简单,就是一个数据视图和下方一系列功能按钮。接下来一次讲解各个功能。

增加

 

增加功能在按下增加按钮后,要将输入的信息,添加到数组中,并且更新数据视图数据源,重新加载数据视图,这里还需要在前后界面进行传值,以确保增加界面与其他界面学生信息同步,这些都是之前写过的功能,这里主要讲一下非法输入的判定。

- (void)confirm {
    BOOL namePerfect = [self nameInputShouldChinese:self.nameTextfield];
    BOOL classPerfect = [self classInputShouldNumber:self.classTextfield];
    BOOL numberPerfect = [self numberInputShouldNumber:self.numberTextfield];
    
    if ([self.nameTextfield.text isEqualToString:@""] || [self.classTextfield.text isEqualToString:@""] || [self.numberTextfield.text isEqualToString:@""]) {
        UIAlertController* alertFailed = [UIAlertController alertControllerWithTitle:@"添加失败!" message:@"不允许有空的输入!" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* confirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            return;
        }];
        [alertFailed addAction:confirm];
        [self presentViewController:alertFailed animated:YES completion:nil];
        return;
    }
    
    if (!namePerfect) {
        UIAlertController* alertFailed = [UIAlertController alertControllerWithTitle:@"添加失败!" message:@"只能输入中文名!" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* confirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            return;
        }];
        [alertFailed addAction:confirm];
        [self presentViewController:alertFailed animated:YES completion:nil];
        return;
    }
    if (!classPerfect) {
        UIAlertController* alertFailed = [UIAlertController alertControllerWithTitle:@"班级格式不规范!!!" message:@"请按示例输入:计科2302" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* confirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            return;
        }];
        [alertFailed addAction:confirm];
        [self presentViewController:alertFailed animated:YES completion:nil];
        return;
    }
    if (!numberPerfect) {
        UIAlertController* alertFailed = [UIAlertController alertControllerWithTitle:@"学号格式不规范!!!" message:@"请输入以24开头的五位数字!" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction* confirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            return;
        }];
        [alertFailed addAction:confirm];
        [self presentViewController:alertFailed animated:YES completion:nil];
        return;
    }
    
    for (int i = 0; i < self.numberMutableArray.count; i++) {
        if ([self.numberMutableArray[i] isEqualToString:self.numberTextfield.text]) {
            UIAlertController* alertFailed = [UIAlertController alertControllerWithTitle:@"存在相同学号!!!" message:@"请检查当前学号!" preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction* confirm = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                return;
            }];
            [alertFailed addAction:confirm];
            [self presentViewController:alertFailed animated:YES completion:nil];
            return;
        }
    }
    
    [self.nameMutableArray addObject:self.nameTextfield.text];
    [self.classMutableArray addObject:self.classTextfield.text];
    [self.numberMutableArray addObject:self.numberTextfield.text];
    [self.tableview reloadData];
    [self.delegate pass:self.nameMutableArray And:self.classMutableArray And:self.numberMutableArray];
}

 

#pragma mark tellTheTextOfTextfield

- (BOOL)nameInputShouldChinese:(UITextField*)textfield {
    NSString *regex = @"[\u4e00-\u9fa5]+";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    if (![pred evaluateWithObject:textfield.text]) {
        return NO;
    }
    return YES;
}

- (BOOL)numberInputShouldNumber:(UITextField*)textfield {
    NSString *regex = @"^24\\d{3}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    if (![pred evaluateWithObject:textfield.text]) {
        return NO;
    }
    return YES;
}

- (BOOL)classInputShouldNumber:(UITextField*)textfield {
    NSString *regex = @"^[\u4e00-\u9fa5]{2,4}\\d{4}$";
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    if (![pred evaluateWithObject:textfield.text]) {
        return NO;
    }
    return YES;
}

这里使用下方代码封装的三个函数,可以很简便的实现对字符串合法性的判定,函数中用到的主要是NSpredicate和正则表达式。

在添加学生时,首先对文本输入框判空,不允许有任何一项为空,接着再设置三个BOOL类变量,调用函数为其赋值,根据BOOL变量的状态,来执行接下来的操作。还需要注意,由于学号不可能重复,所以需要遍历存放学号的数组,将当前输入的学号与数组中每一个学号比较,如果有相同的,则添加失败跳出函数。

删除

 删除功能比较简单,输入学号后遍历数组,找到该学生并删除对应数据即可,这里不需要做非法判定,如果有非法输入就找不到该学生。

更改

 这里更改的逻辑是:输入学号,更改班级和姓名,因为学号是不可能改变的,只有班级和姓名可能改变。那其实要实现就与删除功能类似,只需要根据学号找到对应学生数据时,更改学生的姓名和班级即可。这里同样要做非法输入判定。

查找

这里的查找实现的是班级和姓名都可以查找,也就是说当输入班级和姓名时,叫这个名字的同学和这个班的同学都会出现,所以要注意判重,不然我在输入一个人的姓名和班级时,就会弹出两个这个人的单元格。这里不需要传值出去,也不需要判定非法输入。

排序

 排序功能比较简单,这里实现的是按学号排序,也可以去实现通过给班级排序,来将不同班级学生归类,通过冒泡排序就可以实现了

退出

退出功能很简单,通过exit()函数就可以实现了

总结

这个项目虽然很简单,但是还是让我学到了一些很有用的知识的,有关NSPredicate和正则表达式的知识,之后会再继续深入学习

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值