您的位置:首页 > 其它

学生, 教师封装的类

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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: