MUstar

IoT C++ 10/22 - MySQL Test2

Oct 23rd, 2017
61
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>  //메인해더파일
  2. #include<iomanip>   //cout정렬
  3. #include<string>
  4. //^C++해더파일
  5. #include<my_global.h>
  6. #include<mysql.h>
  7. //^MySQL 해더파일
  8. #include<conio.h>
  9. #include<winsock2.h>
  10. #include<Windows.h>
  11. //^레거시 C언어 해더파일
  12. #define snprintf _snprintf
  13. using namespace std;
  14.  
  15. #pragma comment(lib ,"libmysql.lib")
  16.  
  17. #define DB_HOST "[Server URL or IP Address]"  //서버주소
  18. #define DB_USER "[DB UserName]"               //DB아이디
  19. #define DB_PASS "[Password]"                  //DB비밀번호
  20. #define DB_NAME "[DB Name]"                   //DB이름
  21. #define DB_TABLE "test44"                     //Table이름
  22.  
  23. int main(void)
  24. {
  25.     system("mode con:cols=101 lines=50");   //윈도우창 크기설정
  26.     system("title TESTNANA v1.0");          //윈도우창 타이틀
  27.     MYSQL *connection = NULL, conn;         //MYSQL함수 선언(coon는 Client, connection는 서버 연결저장)
  28.     MYSQL_RES   *sql_result;                //결과값 저장 자료형
  29.     MYSQL_ROW   sql_row;                    //Table의 레코드값을 가져오는 자료형.
  30.     int query_stat;                         //Table간 연결저장
  31.     int select;                             //그냥 선택할때 쓰는 함수.
  32.  
  33.     mysql_init(&conn);                      //MySQL연결준비
  34.     connection = mysql_real_connect(&conn, DB_HOST, DB_USER, DB_PASS, DB_NAME, 3306, (char *)NULL, 0); //MySQL서버에 연결해서 DB을 선택한다 그리고 이걸 connction에 저장한다.
  35.     if (connection == NULL)                                                                            //MySQL연결이 안되거나 DB을 찾을수 없으면 ERROR
  36.     {
  37.         cout << stderr << " MySQL Connection Error : " << mysql_error(&conn) << endl;
  38.         return 1;
  39.     }
  40.  
  41.     mysql_set_character_set(&conn, "euckr");                                                        //인코딩언어선언은 한글로 설정
  42.     //mysql_options(&conn, MYSQL_SET_CHARSET_NAME, "utf8");
  43.     //mysql_options(&conn, MYSQL_INIT_COMMAND, "SET NAMES utf8");
  44.     //mysql_real_connect(&conn, T_SERVER, T_USER, T_PASSWD, T_DBNM, 0, 0, 0);
  45.  
  46.     cout << "MySQL Server Version : " << mysql_get_server_info(&conn) << endl;                      //Server쪽 MySQL버전표시
  47.     cout << "MySQL Client Version : " << mysql_get_client_info() << endl << endl;                   //Client쪽 MySQL버전표시
  48.  
  49.     while (1)
  50.     {
  51.         query_stat = mysql_query(connection, "select * from " DB_TABLE);                            //Table선택
  52.         if (query_stat != 0)                                                                        //Table을 찾을수 없으면 ERROR
  53.         {
  54.             cout << stderr << " MySQL Connection Error : " << mysql_error(&conn) << endl;
  55.             return 1;
  56.         }
  57.         sql_result = mysql_store_result(connection);                                                //Table에 있는 값을 찾아서 sql_result에 저장.
  58.  
  59.         cout << "====================================MySQL 입출력 테스트 프로그램!====================================";
  60.         cout << "MENU>1)리스트출력 | 2)리스트추가 | 3)수정 | 4)검색 | 5)통계 | 6)삭제 | 7)종료" << endl;
  61.         cout << "INPUT>";  cin >> select;
  62.         if (select == 7) {                                                                          //select가 6이면 프로그램 종료
  63.             cout << "ByeBye!" << endl;
  64.             mysql_close(connection);                                                                //MySQL커넥션 종료
  65.             return 0;
  66.         }
  67.         if (cin.fail()) {                                                                           //한자리 숫자가 아니라 다른것을 입력시 나오는 무한반복방지.
  68.             cout << "ERROR>잘못된 선택" << endl << endl;
  69.             //cout<<"Error>PLZ ENTER NUM! NOT CHAR!"<<endl;
  70.             cin.clear(); cin.ignore(256, '\n');
  71.         }
  72.         cin.ignore();
  73.         switch (select)
  74.         {
  75.         case 1:
  76.  
  77.             cout << "|관서명 |살인발생|살인검거|강도발생|강도검거|강간발생|강간검거|";
  78.             cout << "절도발생|절도검거|폭력발생|폭력검거|" << endl;
  79.             for (int i = 0; i < 100; i++)cout << "-";
  80.             cout << endl;
  81.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                     //다음행이 NULL일때 까지 반복.
  82.             {
  83.                 //cout.setf(ios::left);
  84.                 //if(strlen(sql_row[0])==3) cout << sql_row[0] << " |";
  85.                 cout << "|" << setw(8) << sql_row[0] << "|";
  86.  
  87.                 cout.setf(ios::right);                                                  //오른쪽 정렬
  88.                 cout << setw(8) << sql_row[1] << "|" << setw(8) << sql_row[2] << "|";   //sql_row[열].
  89.                 cout << setw(8) << sql_row[3] << "|" << setw(8) << sql_row[4] << "|";   //Ex) |5|4|9|8| , sql_row[2] = 9
  90.                 cout << setw(8) << sql_row[5] << "|" << setw(8) << sql_row[6] << "|";
  91.                 cout << setw(8) << sql_row[7] << "|" << setw(8) << sql_row[8] << "|";
  92.                 cout << setw(8) << sql_row[9] << "|" << setw(8) << sql_row[10] << "|" << endl;
  93.             }mysql_free_result(sql_result); _getch(); break;                            //결과값을 메모리에서 제거
  94.         case 2: {
  95.             string name; int len, num[10], cksum=0;                                     //[디버깅]case2번은 DB테스트용 더미로직
  96.             char query[100];
  97.             cout << "관서명 :";  getline(cin, name);                                   //검색할값 입력
  98.             len = 8 - name.size();                                                      //남은자리수계산
  99.             if ((len > 0) && (len < 8)) {                                               //만약에 남은 자리수가 0개 남았거나 8개 미만라면
  100.                 if ((len % 2) != 0) name += " ";
  101.                 for (int i = 0; i < len / 2; i++)name += " ";                        
  102.             }
  103.             else if ((len <= 0) && (len >= 8)) {                                        //만약에 남은 자리수가 0개미만 또는 8개이상이면
  104.                 cout << "잘못된 검색어" << endl; break;
  105.             }
  106.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                     //다음행이 NULL일때 까지 반복.
  107.             {
  108.                 if (name == sql_row[0])                                                 //search와 sql_row[0]가 같은값이면
  109.                 {
  110.                     cksum = 1;
  111.                     break;
  112.                 }
  113.             }mysql_free_result(sql_result);
  114.             if (cksum != 0){
  115.                 cout << "DB상에 동일이름이 등록되어 있습니다." << endl;
  116.             }
  117.             else{
  118.                 cout << "살인발생:";  cin >> num[0];
  119.                 cout << "살인검거:";  cin >> num[1];
  120.                 cout << "강도발생:";  cin >> num[2];
  121.                 cout << "강도검거:";  cin >> num[3];
  122.                 cout << "강간발생:";  cin >> num[4];
  123.                 cout << "강간검거:";  cin >> num[5];
  124.                 cout << "절도발생:";  cin >> num[6];
  125.                 cout << "절도검거:";  cin >> num[7];
  126.                 cout << "폭력발생:";  cin >> num[8];
  127.                 cout << "폭력검거:";  cin >> num[9];
  128.                 sprintf_s(query, "insert into " DB_TABLE " values" "('%s','%d','%d','%d','%d','%d','%d','%d','%d','%d','%d','')",
  129.                     name.c_str(), num[0], num[1], num[2], num[3], num[4], num[5], num[6], num[7], num[8], num[9]);
  130.                 //^ MySQL상에서 Delete명렁어 실행커멘드을 query에 저장
  131.                 query_stat = mysql_query(connection, query);                                //실행
  132.                 if (query_stat != 0) {                                                      //실행실패시 ERROR
  133.                     cout << stderr << " MySQL Connection Error : " << mysql_error(&conn) << endl;
  134.                     return 1;
  135.                 }
  136.             } _getch();  break;
  137.         }
  138.         case 3: {
  139.             string search,s_query; int len, num[10], cksum = 0;
  140.             cout << "관서명 :";  getline(cin, search);                                     //검색할값 입력
  141.             char query[1024];
  142.             len = 8 - search.size();                                                        //남은자리수계산
  143.             if ((len > 0) && (len < 8)) {                                                   //만약에 자리수가 0개 남았거나 8개 미만라면
  144.                 if ((len % 2) != 0) search += " ";
  145.                 for (int i = 0; i < len / 2; i++) search += " ";
  146.             }
  147.             else if ((len <= 0) && (len >= 8)) {                                            //만약에 남은 자리수가 0개미만 또는 8개이상이면
  148.                 cout << "잘못된 검색어" << endl; break;
  149.             }
  150.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                         //다음행이 NULL일때 까지 반복.
  151.             {
  152.                 if (search == sql_row[0])                                                   //search와 sql_row[0]가 같은값이면
  153.                 {
  154.                     int tmp = atoi(sql_row[11]);
  155.                     cout << tmp << endl;
  156.                     cout << "살인발생:";  cin >> num[0];
  157.                     cout << "살인검거:";  cin >> num[1];
  158.                     cout << "강도발생:";  cin >> num[2];
  159.                     cout << "강도검거:";  cin >> num[3];
  160.                     cout << "강간발생:";  cin >> num[4];
  161.                     cout << "강간검거:";  cin >> num[5];
  162.                     cout << "절도발생:";  cin >> num[6];
  163.                     cout << "절도검거:";  cin >> num[7];
  164.                     cout << "폭력발생:";  cin >> num[8];
  165.                     cout << "폭력검거:";  cin >> num[9];
  166.                     sprintf_s(query, "update " DB_TABLE " set 살인발생 = '%d', 살인검거 = '%d', "
  167.                         "강도발생 = '%d', 강도검거 = '%d', 강간발생 = '%d', 강간검거 = '%d', "
  168.                         "절도발생 = '%d', 절도검거 = '%d', 폭력발생 = '%d', 폭력검거 = '%d' where cksum = '%d'",
  169.                         num[0], num[1], num[2], num[3], num[4], num[5], num[6], num[7], num[8], num[9],tmp);
  170.  
  171.                    
  172.                     //s_query = "update" + "123";
  173.                     /*UPDATE  `zadmin_test11`.`test44` SET  `살인 발생` =  '3',
  174. `살인 검거` =  '3',
  175. `강도 발생` =  '3',
  176. `강도 검거` =  '3',
  177. `강간 발생` =  '3',
  178. `강간 검거` =  '3',
  179. `절도 발생` =  '3',
  180. `절도 검거` =  '3',
  181. `폭력 발생` =  '3',
  182. `폭력 검거` =  '3' WHERE  `test44`.`cksum` =32;*/
  183.                     //^ MySQL상에서  Update명렁어 실행커멘드을 query에 저장
  184.                     query_stat = mysql_query(connection, query);                            //실행
  185.                     if (query_stat != 0) {                                                  //실행실패시 ERROR
  186.                         cout << stderr << " MySQL Connection Error : " << mysql_error(&conn) << endl;
  187.                         return 1;
  188.                     }
  189.                     cksum++; break;                                                         //cksum이 카운터되고 나옴.
  190.                 }
  191.             } if (cksum == 0) {                                                             //cksum이 0이면
  192.                 cout << "잘못된 검색어" << endl;
  193.             }mysql_free_result(sql_result); _getch(); break;                                //결과값을 메모리에서 제거
  194.         }
  195.         case 4: {
  196.             string search; int len, cksum = 0;
  197.             static int num[10];
  198.             cout << "관서명 :";  getline(cin, search);                                     //검색할값 입력
  199.             len = 8 - search.size();                                                        //남은자리수계산
  200.             cout << len << endl;
  201.             if ((len > 0) && (len < 8)) {                                                   //만약에 자리수가 0개 남았거나 8개 미만라면
  202.                 if ((len % 2) != 0) search += " ";
  203.                 for (int i = 0; i < len / 2; i++) search += " ";
  204.             }
  205.             else if ((len <= 0) && (len >= 8)) {                                            //만약에 남은 자리수가 0개미만 또는 8개이상이면
  206.                 cout << "잘못된 검색어" << endl; break;
  207.             }
  208.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                         //다음행이 NULL일때 까지 반복.
  209.             {
  210.                 if (search == sql_row[0])                                                   //search와 sql_row[0]가 같은값이면
  211.                 {
  212.                     cout << "|" << setw(8) << sql_row[0] << "|";
  213.                     cout.setf(ios::right);                                                  //오른쪽 정렬
  214.                     cout << setw(8) << sql_row[1] << "|" << setw(8) << sql_row[2] << "|";   //sql_row[열]
  215.                     cout << setw(8) << sql_row[3] << "|" << setw(8) << sql_row[4] << "|";   //Ex) |5|4|9|8| , sql_row[2] = 9
  216.                     cout << setw(8) << sql_row[5] << "|" << setw(8) << sql_row[6] << "|";
  217.                     cout << setw(8) << sql_row[7] << "|" << setw(8) << sql_row[8] << "|";
  218.                     cout << setw(8) << sql_row[9] << "|" << setw(8) << sql_row[10] << "|" << endl;
  219.                     cksum++; break;                                                         //cksum이 카운터되고 나옴.
  220.                 }
  221.             } if (cksum == 0) {                                                             //cksum이 0이면
  222.                 cout << "잘못된 검색어" << endl;
  223.             }mysql_free_result(sql_result); _getch(); break;                                //결과값을 메모리에서 제거
  224.         }
  225.         case 5: {
  226.             static int num[10];
  227.             string v_name[5] = { "살인","강도","강간","절도","폭력", };
  228.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                     //다음행이 NULL일때 까지 반복.
  229.             {
  230.                 //cout << atoi(sql_row[1]) << endl;
  231.                 num[0] += atoi(sql_row[1]);                                             //총 살인발생(더하기)
  232.                 num[1] += atoi(sql_row[2]);                                             //총 살인검거(더하기)
  233.                 num[2] += atoi(sql_row[3]);                                             //총 강도발생(더하기)
  234.                 num[3] += atoi(sql_row[4]);                                             //총 강도검거(더하기)
  235.                 num[4] += atoi(sql_row[5]);                                             //총 강간발생(더하기)
  236.                 num[5] += atoi(sql_row[6]);                                             //총 강간검거(더하기)
  237.                 num[6] += atoi(sql_row[7]);                                             //총 절도발생(더하기)
  238.                 num[7] += atoi(sql_row[8]);                                             //총 절도검거(더하기)
  239.                 num[8] += atoi(sql_row[9]);                                             //총 폭력발생(더하기)
  240.                 num[9] += atoi(sql_row[10]);                                            //총 폭력검거(더하기)
  241.             }mysql_free_result(sql_result);                                             //결과값을 메모리에서 제거
  242.             cout << "======2015년 서울특별시 5대범죄 통계현황======" << endl;
  243.             cout << "| 종류 |총발생량|총검거량|검거비율| 비고 |" << endl;
  244.             for (int i = 0; i < 10; i += 2) {
  245.                     double nn = ((double)num[i + 1] / (double)num[i]) * 100.0;          //비율계산
  246.                     cout.setf(ios::fixed); cout.precision(2);                           //소수점2자리설정(반올림)
  247.                     cout << "| " << v_name[i / 2] << " |" << setw(8) << num[i] << "|";//정보출력
  248.                     cout << setw(8) << num[i + 1] << "|" << setw(7) << nn << "%|";      //^^^
  249.                     cout << "    |" << endl; cout.unsetf(ios::fixed);               //비고란는 딱히추가할것이 없어 그냥더미. 소수점2자리설정해지
  250.             }_getch(); break;
  251.         }
  252.         case 6: {
  253.             string search; int len, cksum = 0;
  254.             char query[100];
  255.             cout << "관서명 :";  getline(cin, search);                                     //검색할값 입력
  256.             len = 8 - search.size();                                                        //남은자리수계산                                
  257.             if ((len > 0) && (len < 8)) {                                                   //만약에 자리수가 0개 남았거나 8개 미만라면
  258.                 if ((len % 2) != 0) search += " ";
  259.                 for (int i = 0; i < len / 2; i++) search += " ";
  260.             }
  261.             else if ((len <= 0) && (len >= 8)) {                                            //만약에 남은 자리수가 0개미만 또는 8개이상이면
  262.                 cout << "잘못된 검색어" << endl; break;
  263.             }
  264.             while ((sql_row = mysql_fetch_row(sql_result)) != NULL)                         //다음행이 NULL일때 까지 반복.
  265.             {
  266.                 if (search == sql_row[0])                                                   //search와 sql_row[0]가 같은값이면
  267.                 {
  268.                     int tmp = atoi(sql_row[11]);                                            //tmp에 DB상의 cksum값을 저장
  269.                     //cout << tmp << endl;                                                  //[디버깅]tmp값 확인
  270.                     sprintf_s(query, "delete from " DB_NAME "." DB_TABLE " where " DB_TABLE " . cksum = " "%d", tmp);
  271.                     //^ MySQL상에서 Delete명렁어 실행커멘드을 query에 저장
  272.                     query_stat = mysql_query(connection, query);                            //실행
  273.                     if (query_stat != 0) {                                                  //실행실패시 ERROR
  274.                         cout << stderr << " MySQL Connection Error : " << mysql_error(&conn) << endl;
  275.                         return 1;
  276.                        
  277.                     } cksum++; break;                                                       //cksum이 카운터되고 나옴.
  278.                 }
  279.             } if (cksum == 0) {                                                             //cksum이 0이면
  280.                 cout << "잘못된 검색어" << endl;
  281.             }mysql_free_result(sql_result); _getch(); break;                                //결과값을 메모리에서 제거                              
  282.         }
  283.         default: cout << "ERROR>잘못된 선택" << endl; break;
  284.         }
  285.         cout << endl;
  286.     }
  287.     //mysql_close(connection);
  288.     //cout << "계속하실려면 아무키나 누르세요." << endl;
  289.     //cout << "ByeBye" << endl;
  290.     //_getch();
  291.     //return 0;
  292. }
RAW Paste Data