用Swift3和SQLite3实现课程表

本文介绍如何使用Swift3和SQLite3构建一个课程表应用。功能包括从数据库读取课程信息显示在表格中,点击课程格子跳转到详情页,清空课表及模拟添加课程。项目包含ViewController、DetailsViewController、UICollectionViewCell(DateCell和CourseCell)、Course模型类和SQLite3数据操作类dbOperations。文章提供相关代码和项目源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

img

功能描述:从数据库读取所有课程信息并显示在表格里,点击显示课程的格子会跳转页面显示该课程的详细信息,点击清空课表会清空表格里所有课程信息并清空数据库,点击加载课程会模拟一节课添加进数据库,然后会读取出来显示出来。清空课表和加载课程可以日后用于更新课表这个功能。

上代码吧。


目录
目录结构如图所示
- Controller两个:ViewController是主控制器,DetailsViewController是课程详细信息控制器
- view有两个:都是UICollectionViewCell,DateCell是用来显示星期和节数的,CourseCell是用来盛放课程格子的,两个都是有xib伴随的
- Model层有一个Course,就是课程对象啦
- 最后还有个工具类dbOperations,是用原生的SQLite3写的,用于数据持久化,要有桥接文件bridging-header.h


Course.swift:

import UIKit
// 课程model
class Course: NSObject, NSCoding {
    // MARK: - 课程名称
    var courseName: String!
    // MARK: - 任课教师
    var teacher: String!
    // MARK: - 上课教室
    var classroom: String!
    // MARK: - 起始周
    var start: Int!
    // MARK: - 结束周
    var end: Int!
    // MARK: - 上课日期
    var day: Int!
    // MARK: - 课程总周数
    var weeks: Int!

    override init() {

    }

    // MARK: - 编码
    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.courseName, forKey: "courseName")
        aCoder.encode(self.teacher, forKey: "teacher")
        aCoder.encode(self.classroom, forKey: "classroom")
        aCoder.encode(self.start, forKey: "start")
        aCoder.encode(self.end, forKey: "end")
        aCoder.encode(self.day, forKey: "day")
        aCoder.encode(self.weeks, forKey: "weeks")
    }

    // MARK: - 初始化时解码
    required init?(coder aDecoder: NSCoder) {
        super.init()
        self.courseName = aDecoder.decodeObject(forKey: "courseName") as! String
        self.teacher = aDecoder.decodeObject(forKey: "teacher") as! String
        self.classroom = aDecoder.decodeObject(forKey: "classroom") as! String
        self.start = aDecoder.decodeObject(forKey: "start") as! Int
        self.end = aDecoder.decodeObject(forKey: "end") as! Int
        self.day = aDecoder.decodeObject(forKey: "day") as! Int
        self.weeks = aDecoder.decodeObject(forKey: "weeks") as! Int
    }

}

DateCell:
DateCell.swift

import UIKit
// 左边和上边的日期cell
class DateCell: UICollectionViewCell {
   
   
    // MARK: - 右边框
    @IBOutlet weak var rightBorder: UIView!
    // MARK: - 下边框
    @IBOutlet weak var buttonBorder: UIView!
    // MARK: - 日期label
    @IBOutlet weak var dateLabel: UILabel!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

DateCell.xib:
img1
CourseCell.swift:

import UIKit
// 课程cell
class CourseCell: UICollectionViewCell {
   
   
    // MARK: - 课程label
    @IBOutlet weak var courseLabel: UILabel!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

}

Course.xib:
img2


Course.swift:

import UIKit
// 课程model
class Course: NSObject, NSCoding {
    // MARK: - 课程名称
    var courseName: String!
    // MARK: - 任课教师
    var teacher: String!
    // MARK: - 上课教室
    var classroom: String!
    // MARK: - 起始周
    var start: Int!
    // MARK: - 结束周
    var end: Int!
    // MARK: - 上课日期
    var day: Int!
    // MARK: - 课程总周数
    var weeks: Int!

    override init() {

    }

    // MARK: - 编码
    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.courseName, forKey: "courseName")
        aCoder.encode(self.teacher, forKey: "teacher")
        aCoder.encode(self.classroom, forKey: "classroom")
        aCoder.encode(self.start, forKey: "start")
        aCoder.encode(self.end, forKey: "end")
        aCoder.encode(self.day, forKey: "day")
        aCoder.encode(self.weeks, forKey: "weeks")
    }

    // MARK: - 初始化时解码
    required init?(coder aDecoder: NSCoder) {
        super.init()
        self.courseName = aDecoder.decodeObject(forKey: "courseName") as! String
        self.teacher = aDecoder.decodeObject(forKey: "teacher") as! String
        self.classroom = aDecoder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值