学生, 教师封装的类
2015-12-28 22:13
106 查看
/* 实现班级信息程序 1、定义3个类:OurClass、Teacher、Student。 2、Teacher类,属性:姓名、年龄、班级,⽅方法:考试(exam:)。 3、Student类,属性:姓名、年龄、学号、成绩,⽅方法:⽐比较年龄。 4、OurClass类,属性:⽼老师、学⽣生,⽅方法:添加学⽣生和移除学⽣生。 提⽰示: 1、Person类作为Student、Teacher类的⽗父类,公共属性和⽅方法写在Person 类中。 2、Student的成绩为NSMutableDictionary类型,存储课程名称和成绩。 3、Teacher的考试内部实现随机为班级每个学⽣生的某⼀一科赋值。 4、OurClass的学⽣生为NSMutableArray类型,内部存Student的对象。 */ 关于该题: 1.main.m中, 注意, 现有老师, 学生, 将学生添加到ourClasss数组中; 注意,班级与老师之间的关系不能忘; 学生的成绩老师给的. 在MRC情况下, 注意, 释放要及时. //首先有个老师 Teacher *teacher = [[Teacher alloc] initWithName:@"灰灰" age:18]; //三个学生 Student *stu1 = [[Student alloc] initWithName:@"小强" age:23 number:1003]; Student *stu2 = [[Student alloc] initWithName:@"小花" age:23 number:1004]; Student *stu3 = [[Student alloc] initWithName:@"小张" age:22 number:2003]; //班级 OurClass *ourClass = [[OurClass alloc] initWithTeacher:teacher]; //班级添加学生 [ourClass addStudent:stu1]; [ourClass addStudent:stu2]; [ourClass addStudent:stu3]; [stu1 release]; [stu2 release]; [stu3 release]; //注意:两个类之间的关系 teacher.ourClass = ourClass; [ourClass release]; //成绩都是老师赋的值 [teacher exam:@"English"]; [teacher release]; } return 0; 2.学生和老师都继承person 在person.m文件中 #import "Person.h" @implementation Person - (void)dealloc { [_name release]; [super dealloc];//写在下面, 让自己先调用, 在父类调用 } - (NSString *)description { return [NSString stringWithFormat:@"name:%@, age:%ld", _name, _age]; } - (instancetype)initWithName:(NSString *)name age:(NSInteger)age { self = [super init]; if (self) { self.name = name; self.age = age; } return self; } + (instancetype)personWithName:(NSString *)name age:(NSInteger)age { return [[[self alloc]initWithName:name age:age] autorelease]; } @end 3.在学生的.m文件中 #import "Student.h" @implementation Student - (void)dealloc { [_resultDic release]; [super dealloc]; } //其中调用了,父类的方法 [super description] - (NSString *)description { return [NSString stringWithFormat:@"%@ number:%ld, resultDic:%@", [super description], _number, _resultDic]; } - (instancetype)initWithName:(NSString *)name age:(NSInteger)age number:(NSInteger)number { self = [super initWithName:name age:age];//注意: 这样可以简化子类的初始化 if (self) { self.number = number; self.resultDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"0", @"Chinese", @"0", @"Math", @"0", @"English", nil];//字典,先为每个学科初始化为0 } return self; } + (instancetype)studentWithName:(NSString *)name age:(NSInteger)age number:(NSInteger)number { return [[[self alloc] initWithName:name age:age number:number] autorelease]; } - (BOOL)compareAgeWithStudent:(Student *)stu { return self.age > stu.age; } + (BOOL)compareAgeWithStudent:(Student *)astu withAnotherStudent:(Student *)bstu { return astu.age > bstu.age; } @end 4.在老师类中 #import "Teacher.h" #import "OurClass.h" #import "Student.h" //为班级某一科的学生赋值 @implementation Teacher //- (void)dealloc //{ // [_ourClass release]; // [super dealloc]; //} - (void)exam:(NSString *)subject { for (Student *stu in _ourClass.stuArray) { //数据转换为字符串 stu.resultDic[subject] = [NSString stringWithFormat:@"%u", arc4random() % 101]; NSLog(@"%@ :%@", stu.name, stu.resultDic[subject]); //这样就只会对打印传进来的科目赋值(语法糖) } } @end 5. 在班级类中 #import "OurClass.h" #import "Teacher.h" #import "Student.h" @implementation OurClass - (void)dealloc { [_teacher release]; [_stuArray release]; [super dealloc]; } - (NSString *)description { return [NSString stringWithFormat:@"teacher:%@ stuArray:%@", _teacher, _stuArray]; } - (instancetype)initWithTeacher:(Teacher *)teacher { self = [super init]; if (self) { self.teacher = teacher; self.stuArray = [NSMutableArray arrayWithCapacity:0]; //数组开辟内存, 初始化为0 } return self; } + (instancetype)ourclassWithTeacher:(Teacher *)teacher { return [[[self alloc] initWithTeacher:teacher] autorelease]; } - (void)addStudent:(Student *)stu { [_stuArray addObject:stu]; //本身含有_stuArray属性 } - (void)removeStudent:(Student *)stu { [_stuArray removeObject:stu]; } - (void)removeStudentWithNumber:(NSInteger)number{ //forin快速枚举, 不能对后面的数组修改 for (NSInteger i = 0; i < _stuArray.count - 1; i++) { //遍历每个值 Student *stu = _stuArray[i]; if (stu.number == number) { [_stuArray removeObjectAtIndex:i]; break; //找到就结束 } } } @end }
相关文章推荐
- PID2 / 开心的金明(rqn)
- Js-Html 前端系列--Ajax
- Hadoop分布式文件系统:架构和设计要点
- 连续变量优化问题的模拟退火算法求解
- SQL 聚合函数
- 常用的C/C++文本文件的读写函数
- 关系型数据库管理系统简介
- 核心动画 CoreAnimation 详解 【推荐】
- mac下mysql
- 数据库学习1
- 期末总结
- VMware GPU虚拟化简介
- Apache配置SSL
- apt-get remove
- 进程相关:htop,dstat,top,ps
- Halcon算子-1D Measuring
- 【第一章】 Spring概述 ——跟我学Spring3
- 速查表:惯用算法和时间复杂度
- 磁盘IO
- 数据结构(二)