c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是面向对象的.
对该系统的重难点讲述如下:
1.排序.系统中的四个关键字分别是 stuID,姓名,年龄,成绩.我们可以选择这四种方式并选择 升降序的方法进行排序.
系统中使用的是 NSmutableArray 存储数据.那么如何对对象是类成员的数组排序呢?
先看看NSMutableArray排序的几种方式.
1)使用@Seletor选择器调用方法排序.
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[NSNumber numberWithInt:10]];
[array addObject:[NSNumber numberWithInt:20]];
[array addObject:[NSNumber numberWithInt:0]];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:3]];
NSLog(@"未排序的数组:%@",array);
NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"yi排序的数组:%@",sortedArray);
/*
2013-11-29 08:28:00.616 OC实现学生成绩管理系统[451:303] 未排序的数组:(
10,
20,
0,
1,
3
)
2013-11-29 08:28:00.621 OC实现学生成绩管理系统[451:303] yi排序的数组:(
0,
1,
3,
10,
20
)
*/
同时也适用于类对象.
//直接实现静态方法,获取带有name和age的Person对象
+(Person *)personWithAge:(int) age withName:(NSString *)name{
Person *person = [[Person alloc] init];
person.age = age;
person.name = name;
return person;
}
//自定义排序方法
-(NSComparisonResult)comparePerson:(Person *)person{
//默认按年龄排序
NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];//注意:基本数据类型要进行数据转换
//如果年龄一样,就按照名字排序
if (result == NSOrderedSame) {
result = [self.name compare:person.name];
}
return result;
}
2.高级排序,使用排序描述器:使用descriptor方法对Array中成员是类对象的类型进行按@propery 列进行排序.
-(void)SortStudentArray//
{
NSLog(@"按照学号排序请输入 (id)");
NSLog(@"按姓名排序请输入(name)");
NSLog(@"按照年龄排序请输入(age)");
NSLog(@"按照成绩排序(score)请输入:");
char charKey[10] ;
scanf("%s",charKey);
NSString *tempkey = [NSString stringWithUTF8String:charKey];
NSString *key = [tempkey lowercaseString];
BOOL ascending = NO;
NSLog(@"是否开启降序模式( 默认不开启 )?(yes or no):");
char ascendingStr[10] ;
scanf("%s",ascendingStr);
NSString *ascendingKey =[[NSString stringWithUTF8String:ascendingStr] lowercaseString];
if ([ascendingKey isEqualToString:@"yes"])
ascending = YES;
else
ascending = NO;
if ([key isEqualToString:@"id"]) {
NSSortDescriptor *sortByID = [NSSortDescriptor sortDescriptorWithKey:@"stuID" ascending:ascending];
// 建立NSSortDescriptor 对象,按照的属性列,是否是asc升序?
[studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByID]];
//按照建立的descriptor进行排序.
}
else if([key isEqualToString:@"name"])
{
NSSortDescriptor *sortByName= [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:ascending];
[studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByName]];
}
else if([ key isEqualToString:@"age"])
{
NSSortDescriptor *sortByAge = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:ascending];
[studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByAge]];
}
else if ([key isEqualToString:@"score"])
{
NSSortDescriptor *sortByScore = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:ascending];
[studentArray sortUsingDescriptors:[NSArray arrayWithObject:sortByScore]];
}
}
上述代码就是我在管理系统中实现的,结果将在系统中呈现.
3.自定义重写方法进行排序.使用Block进行排序.
NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil];
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//这里的代码可以参照上面compare:默认的排序方法,也可以把自定义的方法写在这里,给对象排序
NSComparisonResult result = [obj1 compare:obj2];
return result;
}];
NSLog(@"排序后:%@",sortedArray);
2013-11-29 08:42:56.723 OC实现学生成绩管理系统[483:303] 排序后:(
123,
1bc,
3ef,
4b6,
789
)