停車場管理系統(資料庫)
阿新 • • 發佈:2019-02-14
停車場管理系統主要實現的功能包括:
1、檢視空位 2、停車 3、系統計費 3、管理員檢視停車記錄 4、查詢車輛資訊
/***************************************************** copyright (C), 2016-2017, Lighting Studio. Co., Ltd. File name:停車場 Author:王 Version:1.0 Date:2017.3.20 Description: Funcion List: *****************************************************/ #include <stdio.h> #include <sqlite3.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stddef.h> #define ALL 10 void creat_table(sqlite3 * db) //建立表,記錄車位資訊 { char *sql; char *errmsg; int ret; sql = "create table if not exists mytable (id integer primary key,name text,entertm integer,exittm integer,stall text,entertime text,exittime text);"; ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { printf("create table fail!:%s\n",errmsg); exit(-1); } } void creat_new(sqlite3 * db) //建立新表,儲存該停車場的所有停車記錄 { char *sql; char *errmsg; int ret; sql = "create table if not exists newtable (id integer,name text,stall text,entertime text,exittime text);"; ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { printf("create table fail!:%s\n",errmsg); exit(-1); } } void insert_init(sqlite3 * db) //對建立的車位進行初始化 { int i; int j = 0; for(i = 0;i < ALL; i++) { int ret; char *sql; char *errmsg; sql="insert into mytable(id,name,entertm,exittm,stall,entertime,exittime) values(NULL,'no',NULL,NULL,'no','no','no');"; ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { printf("insert fail!%s\n",errmsg); exit(-1); } } } void insert_value(sqlite3* db) //車主選擇位置自由停車 { int ret,a; char sql[100]; char *errmsg; char name[10]; time_t t; printf("輸入車牌號:\n"); scanf("%s",name); printf("選擇車位:\n"); scanf("%d",&a); t = time(NULL); struct tm *tb; tb = localtime(&t); sprintf(sql,"update mytable set name = '%s',entertm = %d,stall = 'parking',entertime = '%d.%d.%d %d:%d:%d' where id = %d;",name,t,tb->tm_year+1900,tb->tm_mon+1,tb->tm_mday,tb->tm_hour,tb->tm_min,tb->tm_sec,a); ret = sqlite3_exec(db,sql,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { printf("insert fail!%s\n",errmsg); exit(-1); } } void select_all(sqlite3 *db) //檢視該停車場的車位狀況 { int ret; int i; int row = 0; int column = 0; char * sql; char ** presult; char *errmsg; sql = "select id,name,stall from mytable;"; ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg); if(ret != SQLITE_OK) { printf("select fail:%s\n",errmsg); exit(-1); } for(i = 0;i < (ALL + 1) * column;i++) { printf("%15s",presult[i]); if((i + 1)%column == 0) { printf("\n"); } if((i + 1) == column) { printf("---------------------------------------------------------\n"); } } } void update_exittm(sqlite3 *db) //離開車位,計算費用,更新車位資訊 { int ret1,ret2,ret3; int a,b; int row = 0; int column = 0; char ** presult; char sql1[100]; char sql2[100]; char sql3[100]; char * errmsg1; char * errmsg2; char * errmsg3; char name[10]; time_t t; struct tm *td; printf("輸入車牌號:\n"); scanf("%s",name); t = time(NULL); td = localtime(&t); sprintf(sql1,"update mytable set exittm = %d,exittime = '%d.%d.%d %d:%d:%d' where name = '%s';",t,td->tm_year+1900,td->tm_mon+1,td->tm_mday,td->tm_hour,td->tm_min,td->tm_sec,name); ret1 = sqlite3_exec(db,sql1,NULL,NULL,&errmsg1); //離開車位 if(ret1 != SQLITE_OK) { printf("update fail:%s\n",errmsg1); exit(-1); } sprintf(sql3,"select entertm,exittm from mytable where name like '%s';",name); ret3 = sqlite3_get_table(db,sql3,&presult,&row,&column,&errmsg3); if(ret3 != SQLITE_OK) { printf("select fail :%s\n",errmsg3); exit(-1); } sprintf(sql3,"insert into newtable(id,name,entertime,exittime) select id,name,entertime,exittime from mytable where name like '%s';",name); sqlite3_exec(db,sql3,NULL,NULL,&errmsg1); //將該車的停車資訊儲存到新表中 a = atoi(presult[2]); b = atoi(presult[3]); printf("總費用:%d元\n",(b-a)/3600*2); //計算費用 sprintf(sql2,"update mytable set stall = 'no',name = 'no',entertime = 'no' where name = '%s';",name); ret2 = sqlite3_exec(db,sql2,NULL,NULL,&errmsg2); if(ret2 != SQLITE_OK) { printf("delete fail:%s\n",errmsg2); exit(-1); } } void select_name(sqlite3 * db) //按照車牌資訊查詢該車的停車記錄 { int ret,i; int row = 0; int column = 0; char ** presult; char sql[100]; char *errmsg; char name[20]; while(1) { printf("輸入車牌號:(q quit)\n"); scanf("%s",name); if(strcmp(name,"q") == 0) return; sprintf(sql,"select id,name,entertime,exittime from newtable where name like '%s';",name); ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg); if(ret != SQLITE_OK) { printf("select fail :%s\n",errmsg); exit(-1); } for(i = 0;i < (row + 1) * column;i++) { printf("%20s",presult[i]); if((i + 1)%column == 0) { printf("\n"); } if((i + 1) == column) { printf("-------------------------------------------------------------------------------\n"); } } } } void select_newall(sqlite3 *db) //檢視該停車場的所有停車記錄 { int ret; int i; int row = 0; int column = 0; char * sql; char ** presult; char *errmsg; sql = "select id,name,entertime,exittime from newtable;"; ret = sqlite3_get_table(db,sql,&presult,&row,&column,&errmsg); if(ret != SQLITE_OK) { printf("select fail:%s\n",errmsg); exit(-1); } for(i = 0;i < (row + 1) * column;i++) { printf("%20s",presult[i]); if((i + 1)%column == 0) { printf("\n"); } if((i + 1) == column) { printf("-----------------------------------------------------------------------------------\n"); } } } void menu() { printf("\n**************************\n"); printf("** 1)檢視空位 ** 2)停車 **\n"); printf("** 3)離開交費 ** 4)退出 **\n"); printf("** 5)管理員系統 **\n"); printf("** 收費標準2¥/h **\n"); printf("** 30分鐘免費 **\n"); printf("**************************\n\n"); } int main() { int ret,i; int a = 0; int b,c; sqlite3 *db; ret = sqlite3_open("park.db",&db); if(ret != SQLITE_OK) { printf("open fail!\n"); exit(-1); } creat_table(db); creat_new(db); insert_init(db); while(a != 4) { menu(); printf("選擇操作:"); scanf("%d",&a); switch(a) { case 1:select_all(db);break; case 2:insert_value(db);break; case 3:update_exittm(db);break; case 5:{ printf("輸入管理員密碼(123456):\n"); scanf("%d",&c); if(c == 123456) { b = 0; while(b != 3) { printf("1)檢視所有停車記錄 2)查詢車輛停車資訊 3)退出\n"); scanf("%d",&b); switch(b) { case 1:select_newall(db);break; case 2:select_name(db);break; } } } else printf("沒有許可權!\n"); }break; } } sqlite3_close(db); return 0; }