public override void Save(ParkingCar car) { string booksOutput = ""; booksOutput += "<cars>\n"; //\n 대신에 Enviroment.NewLine 써도 됨 if (Cars.Count > 0) { foreach (var item in Cars) { booksOutput += "<car>\n"; booksOutput += $" <parkingSpot>{item.parkingSpot}</parkingSpot>\n"; booksOutput += $" <carNumber>{item.carNumber}</carNumber>\n"; booksOutput += $" <driverName>{item.driverName}</driverName>\n"; booksOutput += $" <phoneNumber>{item.phoneNumber}</phoneNumber>\n"; booksOutput += $" <parkingTime>{item.parkingTime}</parkingTime>\n"; booksOutput += "</car>\n"; } } else //xml 파일에 아무 것도 없는 경우 { for (int i = 1; i <= 5; i++) { booksOutput += "<car>\n"; booksOutput += $" <parkingSpot>{i}</parkingSpot>\n"; booksOutput += " <carNumber></carNumber>\n"; booksOutput += " <driverName></driverName>\n"; booksOutput += " <phoneNumber></phoneNumber>\n"; booksOutput += " <parkingTime></parkingTime>\n"; booksOutput += "</car>\n"; } } booksOutput += "</cars>"; File.WriteAllText(@"./Cars.xml", booksOutput); }
public override void Save(ParkingCar car) { try { //주차 or 출차로 인하여 상태가 변하였으므로 update문을 호출하여 db table에도 값이 바뀔 수 있도록 한다. dbh.updateQuery(car); } catch (Exception exception) { MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace); dataSource.PrintLog(exception.Message + Environment.NewLine + exception.StackTrace); } }
//xml json mssql mysql oracle 다 이용하지 않을 거라면 내부 List가지고만 주차관리하기 //이럴 경우 프로그램 끄면 다 리셋된다. public virtual void Load() { for (int i = 1; i <= 5; i++) { ParkingCar tempCar = new ParkingCar() { parkingSpot = i, carNumber = "", driverName = "", phoneNumber = "", parkingTime = DateTime.Now }; Cars.Add(tempCar); } }
public override bool insertParkingSpot(int parkingSpotNum) { try { ParkingCar checkSpot = Cars.Single((x) => x.parkingSpot == parkingSpotNum); if (checkSpot != null) { MessageBox.Show("이미 존재하는 주차공간입니다."); dataSource.PrintLog("이미 존재하는 주차공간입니다."); } return(false); //single했는데 catch로 안 빠지면 어차피 주차공간이 있다는 것이다. } catch (Exception ex) { //없다면 이리로 온다. dbh.insertQuery(parkingSpotNum); Load(); return(true); } }
public override void Save(ParkingCar car) { var jCarArray = new JArray(); if (Cars.Count > 0) { foreach (var item in Cars) { var jCarobject = new JObject(); jCarobject.Add("parkingSpot", item.parkingSpot); jCarobject.Add("carNumber", item.carNumber); jCarobject.Add("driverName", item.driverName); jCarobject.Add("phoneNumber", item.phoneNumber); jCarobject.Add("parkingTime", item.parkingTime); jCarArray.Add(jCarobject); } } else { for (int i = 1; i <= 5; i++) { var jCarobject = new JObject(); jCarobject.Add("parkingSpot", i); jCarobject.Add("carNumber", ""); jCarobject.Add("driverName", ""); jCarobject.Add("phoneNumber", ""); jCarobject.Add("parkingTime", new DateTime()); jCarArray.Add(jCarobject); } } var jCarArrayobect = new JObject(); jCarArrayobect.Add("car", jCarArray); var jCarsobect = new JObject(); jCarsobect.Add("cars", jCarArrayobect); // 저장 File.WriteAllText(@"./Cars.json", jCarsobect.ToString()); }
public override void Load() { Cars.Clear(); try { string carsOutput = File.ReadAllText(@"./Cars.xml"); XElement carsXElement = XElement.Parse(carsOutput); foreach (var item in carsXElement.Descendants("car")) { int tempParkingSpot = int.Parse(item.Element("parkingSpot").Value); string tempCarNumber = item.Element("carNumber").Value; string tempDriverName = item.Element("driverName").Value; string tempPhoneNumber = item.Element("phoneNumber").Value; DateTime tempParkingTime = item.Element("parkingTime").Value == "" ? DateTime.Now : DateTime.Parse(item.Element("parkingTime").Value); ParkingCar tempCar = new ParkingCar() { parkingSpot = tempParkingSpot, carNumber = tempCarNumber, driverName = tempDriverName, phoneNumber = tempPhoneNumber, parkingTime = tempParkingTime }; Cars.Add(tempCar); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); dataSource.PrintLog(ex.Message); dataSource.PrintLog(ex.StackTrace); //만약 파일이 없어서 여기로 진입한 경우라면 CreateFile(); //파일을 다시 만들고 Save(null); //그 파일을 저장한 다음 Load(); //다시 불러들여본다. //단, Load 함수 자체가 잘못된거라면 이 코드는 무한루프에 빠진다. } }
public override void updateQuery(ParkingCar car) { try { ConnectDB(); MySqlCommand cmd = new MySqlCommand("", Myconn); string sqlcommand = "Update CarManager set CarNumber = '', DriverName = '', PhoneNumber = '', ParkingTime = null where ParkingSpot = '" + car.parkingSpot + "'"; if (car.carNumber != "") //주차 { sqlcommand = $"Update CarManager set CarNumber = '{car.carNumber}', DriverName = '{car.driverName}', PhoneNumber = '{car.phoneNumber}', ParkingTime = '{car.parkingTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}' where ParkingSpot = '{car.parkingSpot}'"; } cmd.CommandText = sqlcommand; cmd.ExecuteNonQuery(); Myconn.Close(); } catch (Exception e) { showDBError(e); } }
public override void updateQuery(ParkingCar car) { try { ConnectDB(); cmd.Connection = OraConn; string sqlcommand = "Update CarManager set CarNumber = '', DriverName = '', PhoneNumber = '', ParkingTime = null where ParkingSpot = '" + car.parkingSpot + "'"; if (car.carNumber != "") //주차 { //SET PARKINGTIME = TO_DATE('2021-05-05 11:06:21', 'YYYY-MM-DD HH24:MI:SS') sqlcommand = $"Update CarManager set CarNumber = '{car.carNumber}', DriverName = '{car.driverName}', PhoneNumber = '{car.phoneNumber}', ParkingTime = TO_DATE('{car.parkingTime.ToString("yyyy-MM-dd HH:mm:ss")}', 'YYYY-MM-DD HH24:MI:SS') where ParkingSpot = '{car.parkingSpot}'"; } cmd.CommandText = sqlcommand; cmd.ExecuteNonQuery(); OraConn.Close(); } catch (Exception e) { showDBError(e); } }
public override void Load() { try { //select 문으로 해당 테이블의 전체 데이터들을 가져옴 ds = dbh.selectQuery(); Cars.Clear(); //새로 조회할 때마다 Clear 해줘야 함 foreach (DataRow item in ds.Tables[0].Rows) { ParkingCar car = new ParkingCar(); car.parkingSpot = int.Parse(item["ParkingSpot"].ToString()); car.carNumber = item["CarNumber"].ToString(); car.driverName = item["DriverName"].ToString(); car.phoneNumber = item["PhoneNumber"].ToString(); car.parkingTime = item["ParkingTime"].ToString() == "" ? new DateTime() : DateTime.Parse(item["ParkingTime"].ToString()); Cars.Add(car); //그 데이터들을 Cars에 넣음 } } catch (Exception exception) { dataSource.PrintLog(exception.Message); dataSource.PrintLog(exception.StackTrace); } }
public override bool insertParkingSpot(int parkingSpotNum) { try { ParkingCar checkSpot = Cars.Single((x) => x.parkingSpot == parkingSpotNum); if (checkSpot != null) { MessageBox.Show("이미 존재하는 주차공간입니다."); dataSource.PrintLog("이미 존재하는 주차공간입니다."); } return(false); } catch (Exception) { //없다면 이리로 온다. Cars.Add(new ParkingCar() { parkingSpot = parkingSpotNum, carNumber = "", driverName = "", phoneNumber = "", parkingTime = DateTime.Now }); Save(null); Load(); return(true); } }
public override void updateQuery(ParkingCar car) { try { ConnectDB(); SqlCommand cmd = new SqlCommand(); cmd.Connection = Msconn; cmd.CommandType = CommandType.Text; string sqlcommand; if (car.carNumber == "") { sqlcommand = "Update CarManager set CarNumber = '', DriverName = '', PhoneNumber = '', ParkingTime = null where ParkingSpot = @p1"; cmd.Parameters.AddWithValue("@p1", car.parkingSpot); } else { sqlcommand = "Update CarManager set CarNumber = @p1, DriverName = @p2, PhoneNumber = @p3, ParkingTime = @p4 where ParkingSpot = @p5"; cmd.Parameters.AddWithValue("@p1", car.carNumber); cmd.Parameters.AddWithValue("@p2", car.driverName); cmd.Parameters.AddWithValue("@p3", car.phoneNumber); cmd.Parameters.AddWithValue("@p4", car.parkingTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); cmd.Parameters.AddWithValue("@p5", car.parkingSpot); //제대로 된 숫자 입력하지 않으면 이 부분까지 코드가 실행되지도 못 하도록 짜여있음 } cmd.CommandText = sqlcommand; cmd.ExecuteNonQuery(); //쿼리 실행 Msconn.Close(); } catch (Exception eee) { showDBError(eee); } }
public virtual void updateQuery(ParkingCar Car) { }
//주차, 출차시 호출 //근데 만약 파일이나 db 저장이 아니라면 Form 안에서 이미 List에 대한 연산이 다 끝남(data.csv에 -1썼을 때) //따라서 여기서는 구체적으로 구현할 내용은 없음. public virtual void Save(ParkingCar car) { }