【IOS开发笔记01】学生管理系统(上)
端到端的机会
虽然现在身处大公司,但是因为是内部创业团队,产品、native、前端、服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!!
事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度、技术广度
其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS、react等框架技术深度就深了,因为事实上angular中包含了很多设计思想,学习他是编程思想的提升,并不单是js功力的提升。
要说自身职业规划,前端当然可以往nodeJS发展走大前端方向,但是这个真的需要项目支持,多次尝试自学nodeJS皆收效甚微,便是因为没有实际项目支持,说白了没有人带着做项目。
而团队内部有人带着做IOS开发,我居然可以从零开始自学然后参与生产项目开发,想想真的令人兴奋!!!
但是天下没有不要钱的午餐,切入IOS开发的前提是保证现有H5任务的工期以及质量,所以加班什么的在所难免,可是我怎么可能放弃这种千载难逢的好事呢?于是立马给技术老大说了愿意多承担工作的意愿,老大也很nice的答应我可以切入IOS开发,于是这一切便如此美好的开始了!所以接下来一段时间只需要fighting就够了!!!
如何学习新语言
今时不同往日,已经不可能有太多的空闲时间给我学习了,刚开始也想过应该系统的学习,一章一章的巩固知识,但是这样效率太低,等我学完都猴年马月了,项目早结束了
所以现在适合我的学习方法是做简单并且熟悉多项目,比如大一的C语言考试,学生管理系统
需求说明
简单设计一个学生管理系统,要求具有以下功能:
1 可以录入学生姓名,性别、课程等信息
2 可以给各门课程录入考试成绩
3 支持姓名排序,班级排序,成绩排序
因为最初做项目是为了熟悉语言,所以不需要太复杂,于是我们便开始吧!!!
学生类的设计
你要开发IOS程序,首先得有一台Mac机,其次需要安装xcode开发工具,我反正是去借了一台,然后让同事考了一个最新版的xcode,于是开始开发吧。
OC中的类
OC中的类皆继承至NSObject类,会带有一些特有并且经常会用到的方法,具体细节我们不去纠结,直接创建类吧
新建一个类会形成两个文件:file.h头文件与file.m为类的具体实现文件,我们这里新建一个Student类:
#import <Foundation/Foundation.h> @interface Student : NSObject @end
#import "Student.h" @implementation Student @end
我们这里不去吐槽OC的怪异语法,因为我们如果得去学习一个东西,就不要吐槽他,这样会分散你的注意力并且会让学习难以继续,所以回到正题
属性
OC的属性定义在头文件中,以学生来说我们规定其有以下属性,其中课程真实场景会被抽象为一个类,所以我们也这样做吧,新建Course类,并且给学生的属性如下:
#import <Foundation/Foundation.h>
#import "Course.h" @interface Student : NSObject
{
NSString *_name;
int _age;
NSString *_sex;
Course *_chinese;
Course *_math;
//录入时间
NSDate *_dateCreate;
}
@end
课程类只具有名字与得分两个属性:
#import <Foundation/Foundation.h> @interface Course : NSObject
{
NSString *_name;
float _score;
}
@end
其中下划线定写法为OC的规则,我们不需要知道他为什么要这样做,先做再说,后面熟悉了自然就知道了,与C#一样,属性会有getter与setter方法,OC这里提供了语法糖,我们暂不使用,老老实实的写代码,下面为两个类的具体实现:
#import <Foundation/Foundation.h> @interface Course : NSObject
{
NSString *_name;
float _score;
} -(void)setName: (NSString *)str;
-(NSString *)name; -(void)setScore: (float)fl;
-(float)score; @end #import "Course.h" @implementation Course -(void) setName:(NSString *)str
{
_name = str;
} -(NSString *) name
{
return _name;
} -(void) setScore:(float)fl
{
_score = fl;
} -(float) score
{
return _score;
} @end #import <Foundation/Foundation.h>
#import "Course.h" @interface Student : NSObject
{
NSString *_name;
int _age;
NSString *_sex;
Course *_chinese;
Course *_math;
//录入时间
NSDate *_dateCreate;
} -(void)setName: (NSString *)str;
-(NSString *)name; -(void)setAge: (int)a;
-(int)age; -(void)setSex: (NSString *)str;
-(NSString *)sex; -(void)setChinese: (Course *)c;
-(Course *)chinese; -(void)setMath: (Course *)c;
-(Course *)math; //只暴露读取接口
-(NSDate *)dateCreate; @end #import "Student.h" @implementation Student -(void) setName:(NSString *)str
{
_name = str;
} -(NSString *) name
{
return _name;
} -(void)setAge: (int)a
{
_age = a;
} -(int)age
{
return _age;
} -(void)setSex: (NSString *)str
{
_sex = str;
} -(NSString *)sex
{
return _sex;
} -(void)setChinese: (Course *)c
{
_chinese = c;
} -(Course *)chinese
{
return _chinese;
} -(void)setMath: (Course *)c
{
_math = c;
} -(Course *)math
{
return _math;
} //只暴露读取接口
-(NSDate *)dateCreate
{
return _dateCreate;
} @end
Student-Course
构造函数
构造函数是每个类实例化的入口点,每一个继承至NSObject的对象都会有一个init的实例方法,这个便是其构造函数,我们这里自定义构造函数,Course与Student的构造函数
#import <Foundation/Foundation.h> @interface Course : NSObject
{
NSString *_name;
float _score;
} -(instancetype)initWithName:(NSString *)newName andScore:(float)newScore; -(void)setName: (NSString *)str;
-(NSString *)name; -(void)setScore: (float)fl;
-(float)score; @end #import "Course.h" @implementation Course //自定义构造方法
-(instancetype)initWithName:(NSString *)newName andScore:(float)newScore
{
self = [super init];
if (self) {
_name = newName;
_score = newScore;
}
return self;
} -(void) setName:(NSString *)str
{
_name = str;
} -(NSString *) name
{
return _name;
} -(void) setScore:(float)fl
{
_score = fl;
} -(float) score
{
return _score;
} @end
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Course.h" int main(int argc, const char * argv[]) {
@autoreleasepool { //alloc方法创建实例空间,init初始化
Course *c = [[Course alloc] initWithName:@"叶小钗" andScore:]; NSLog(@"%@, %f", c.name, c.score); }
return ;
}
成功打印出我们想要的代码,所以这个时候再将Student类的构造方法加上,并且给Student释放一个对外实例方法:showData
#import <Foundation/Foundation.h> @interface Course : NSObject
{
NSString *_name;
float _score;
} -(instancetype)initWithName:(NSString *)newName andScore:(float)newScore; -(void)setName: (NSString *)str;
-(NSString *)name; -(void)setScore: (float)fl;
-(float)score; -(void)showData; @end #import "Course.h" @implementation Course //自定义构造方法
-(instancetype)initWithName:(NSString *)newName andScore:(float)newScore
{
self = [super init];
if (self) {
_name = newName;
_score = newScore;
}
return self;
} -(void) setName:(NSString *)str
{
_name = str;
} -(NSString *) name
{
return _name;
} -(void) setScore:(float)fl
{
_score = fl;
} -(float) score
{
return _score;
} -(void) showData
{
NSLog(@"课程名:%@", _name);
NSLog(@"课程得分:%f",_score);
} @end #import <Foundation/Foundation.h>
#import "Course.h" @interface Student : NSObject
{
NSString *_name;
int _age;
NSString *_sex;
Course *_chinese;
Course *_math;
//录入时间
NSDate *_dateCreate;
} -(instancetype)initWithName:(NSString *)newName andAge:(int)newAge andSex:(NSString *)newSex andChinese:(Course *) newChinese andMath:(Course *) newMath; -(void)setName: (NSString *)str;
-(NSString *)name; -(void)setAge: (int)a;
-(int)age; -(void)setSex: (NSString *)str;
-(NSString *)sex; -(void)setChinese: (Course *)c;
-(Course *)chinese; -(void)setMath: (Course *)c;
-(Course *)math; //只暴露读取接口
-(NSDate *)dateCreate; -(void) showData; @end #import "Student.h" @implementation Student -(instancetype)initWithName:(NSString *)newName andAge:(int)newAge andSex:(NSString *)newSex andChinese:(Course *) newChinese andMath:(Course *) newMath
{
self = [super init];
if (self) {
_name = newName;
_age = newAge;
_sex = newSex;
_chinese = newChinese;
_math = newMath;
_dateCreate = [[NSDate alloc] init];
}
return self;
} -(void) setName:(NSString *)str
{
_name = str;
} -(NSString *) name
{
return _name;
} -(void)setAge: (int)a
{
_age = a;
} -(int)age
{
return _age;
} -(void)setSex: (NSString *)str
{
_sex = str;
} -(NSString *)sex
{
return _sex;
} -(void)setChinese: (Course *)c
{
_chinese = c;
} -(Course *)chinese
{
return _chinese;
} -(void)setMath: (Course *)c
{
_math = c;
} -(Course *)math
{
return _math;
} //只暴露读取接口
-(NSDate *)dateCreate
{
return _dateCreate;
} -(void) showData
{
NSLog(@"姓名:%@", _name);
NSLog(@"性别:%@", _sex);
NSLog(@"年龄:%d", _age);
[_chinese showData];
[_math showData]; } @end
#import <Foundation/Foundation.h>
#import "Student.h"
#import "Course.h" int main(int argc, const char * argv[]) {
@autoreleasepool { //alloc方法创建实例空间,init初始化
Course *chinese = [[Course alloc] initWithName:@"语文" andScore:];
Course *math = [[Course alloc] initWithName:@"数学" andScore:]; Student *s = [[Student alloc] initWithName:@"叶小钗" andAge: andSex:@"男" andChinese:chinese andMath:math]; [s showData]; }
return ;
}
-- ::24.853 student[:] 姓名:叶小钗
-- ::24.854 student[:] 性别:男
-- ::24.854 student[:] 年龄:
-- ::24.855 student[:] 课程名:语文
-- ::24.855 student[:] 课程得分:90.000000
-- ::24.855 student[:] 课程名:数学
-- ::24.855 student[:] 课程得分:95.000000
Program ended with exit code:
如此一来,基本的功能便具备了,今天的内容也暂时到此
【IOS开发笔记01】学生管理系统(上)的更多相关文章
- iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- iOS开发网络篇—文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...
- iOS 开发http post 文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- 菜鸟手下的iOS开发笔记(swift)
在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...
随机推荐
- bellman_ford算法
给定一个源点,求最短路径,那么存在以源点为根的最短路径树因为最短路径具有最优子结构的性质,所以我们可以先求出树的第一层,然后再求出树的第二层,以此类推bellman_ford算法就是按照这种思想求最短 ...
- Windows Phone开发(16):样式和控件模板
原文:Windows Phone开发(16):样式和控件模板 在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的 ...
- 23设计模式(3):Abstract Factory模式
定义:要创建一组相关或依赖对象提供一个接口,而你并不需要指定其具体类别. 类型:创建一个类模型 类图: 抽象工厂模式与工厂方法模式的差别 抽象工厂模式是工厂方法模式的升级版本号,他用来创建一组相关或者 ...
- ps设计资料整理
零基础学会建立一个简单化妆品网站—前台设计篇1[PS画草图] http://xiebiji.com/2008/09/huazhuang4/?wptheme=Plainscape&ie=1 PS ...
- WEB 3D SVG CAD 向量 几个实施
一.他们所有的发展.从地上爬起来 VML+SVG发展矢量地图.你并不需要导入第三方的图片作为背景,直接在地图编辑器可以在底图内容编辑,由于岩石.巷道.煤层.画水.础地图样子再在其上面画出智慧线等设备, ...
- 认识Backbone (三)
Backbone.Collection(集合) collection是model对象的一个有序的组合,我们可以在集合上绑定 "change" 事件,从而当集合中的模型发生变化时f ...
- UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants 题目链接 题意:给定一些黑点白点,要求一个黑点连接一个白点,而且全部线段都不相交 思路:二分图完美匹配,权值存负的欧几里得距离,这种话,相交肯定比不相交权值小,所以做一 ...
- 于win7使用虚拟磁盘隐藏文件
于win7使用虚拟磁盘隐藏文件,我只是win7在验证.其他型号未知. 一.创建虚拟磁盘 1.右键点击"计算机"-----"管理" ------"磁盘管 ...
- Fuel 5.1安装openstack I版本号环境
声明:本博客欢迎转载,但请保留原作者信息! 作者:傅斌杰 团队:华为杭州OpenStack团队 Fuel 简单介绍 Fuel是Mirantis公司开发的部署openstack集群工具,主要功能为裸机P ...
- 8.Eclipse中创建Maven Web项目
第一步: 创建maven webproject 注意以下一步: 第二步: 继承parent 改动pom.xml文件例如以下 <projectxmlns="http://maven ...