· 6 years ago · May 14, 2019, 12:42 PM
1//
2// ViewController.swift
3// FairnessApp
4//
5// Created by Julian Dickopp / BBM3H17M on 09.05.19.
6// Copyright © 2019 Julian Dickopp / BBM3H17M. All rights reserved.
7//
8
9import UIKit
10import SQLite3
11
12class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
13
14 @IBOutlet weak var picker: UIPickerView!
15
16 @IBOutlet weak var inputField: UITextField!
17 @IBOutlet weak var input: UIButton!
18 var db: OpaquePointer?
19
20 var timer = SimpleTimer()
21
22 var userListe = [User]()
23
24
25 override func viewDidLoad() {
26 super.viewDidLoad()
27 init_start()
28 self.picker.delegate = self
29 self.picker.dataSource = self
30
31 picker.selectedRow(inComponent: 0)
32 readValues()
33 }
34
35
36 func init_start(){
37 let fileURL = try! FileManager.default.url(for: .documentDirectory,
38 in: .userDomainMask, appropriateFor: nil, create: false)
39 .appendingPathComponent("FairUserDatabase.sqlite")
40
41 if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
42 print("error opening database")
43 }
44 if sqlite3_exec(db, """
45 CREATE TABLE IF NOT EXISTS FairUser (
46 id INTEGER PRIMARY KEY AUTOINCREMENT,
47 name TEXT,
48 zeit TEXT)
49 """, nil, nil, nil) != SQLITE_OK {
50 let errmsg = String(cString: sqlite3_errmsg(db)!)
51 print("error creating table: \(errmsg)")
52 }
53 }
54
55 @IBAction func inputButton(_ sender: Any) {
56 let name =
57 inputField.text?.trimmingCharacters(in: .whitespacesAndNewlines)
58
59 if(name?.isEmpty)!{
60 inputField.layer.borderColor = UIColor.red.cgColor
61 return
62 }
63
64 var stmt: OpaquePointer?
65 let queryString = "INSERT INTO FairUser (name, zeit ) VALUES (?,?)"
66
67 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK {
68 let errmsg = String(cString: sqlite3_errmsg(db)!)
69 print("error preparing insert: \(errmsg)")
70 return
71 }
72 if sqlite3_bind_text(stmt, 1, name, -1, nil) != SQLITE_OK {
73 let errmsg = String(cString: sqlite3_errmsg(db)!)
74 print("failure binding name: \(errmsg)")
75 return
76 }
77
78 if sqlite3_step(stmt) != SQLITE_DONE {
79 let errmsg = String(cString: sqlite3_errmsg(db)!)
80 print("failure inserting teilnehmer: \(errmsg)")
81 return
82 }
83
84 inputField.text=""
85
86 readValues()
87 }
88
89
90 func numberOfComponents(in pickerView: UIPickerView) -> Int {
91 return 1
92 }
93
94 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
95 return userListe.count
96 }
97
98 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
99 return Array(userListe)[row].getName()
100 }
101
102
103
104 private func reload_picker(){
105 picker.reloadAllComponents()
106 }
107
108
109
110 func readValues(){
111
112 userListe.removeAll()
113
114 let queryString = "SELECT * FROM FairUser ORDER by zeit"
115
116 var stmt: OpaquePointer?
117
118 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK {
119 let errmsg = String(cString: sqlite3_errmsg(db)!)
120 print("error preparing insert: \(errmsg)")
121 return
122 }
123
124 while(sqlite3_step(stmt) == SQLITE_ROW) {
125 let id = sqlite3_column_int(stmt, 0)
126 let name = String(cString: sqlite3_column_text(stmt, 1))
127 let zeit = sqlite3_column_int(stmt, 2)
128 userListe.append(User(id: Int(id),
129 name: String(describing: name),
130 time: Int(zeit)))
131
132 }
133 self.picker.reloadAllComponents()
134 }
135
136
137 func deleteUser(id : Int) {
138
139 let queryString = "DELETE FROM FairUser WHERE id = ?"
140 var stmt: OpaquePointer?
141
142 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK {
143 let errmsg = String(cString: sqlite3_errmsg(db)!)
144 print("error preparing insert: \(errmsg)")
145 return
146 }
147 if sqlite3_bind_text(stmt, 1, "\(id)", -1, nil) != SQLITE_OK {
148 let errmsg = String(cString: sqlite3_errmsg(db)!)
149 print("failure binding name: \(errmsg)")
150 return
151 }
152
153 if sqlite3_step(stmt) != SQLITE_DONE {
154 let errmsg = String(cString: sqlite3_errmsg(db)!)
155 print("failure inserting teilnehmer: \(errmsg)")
156 return
157 }
158 self.picker.reloadAllComponents()
159 }
160
161
162 @IBAction func start_button(_ sender: Any) {
163
164 }
165
166
167 @IBAction func deleteUser(_ sender: Any) {
168 picker.selectedRow(inComponent: 0)
169
170 }
171
172}