本停车场管理系统使用sqlite3所写
其主要功能有
1.查看车库空位 2.车主选择车位停车
3.系统计费 4.查看指定车辆停车记录
5.查看所以车辆停车记录 6.退出
这里讲解下
其中获取时间的函数time_t( )
其头文件为#include
作用: 获取系统时间
方法1:
按字符串输出,格式已规定好,不可自己改变格式
格式:Thu Feb 3 21:16:17 2022
#include
int main()
{
time_t timep;
time(&timep); //获取从1970至今过了多少秒,存入time_t类型的timep
printf("%s", ctime(&timep));//用ctime将秒数转化成字符串格式,输出:Thu Feb 3 21:16:17 2022
return 0;
}
方法2:
用stuct tm结构体,可自己改变格式
输出:2022/3/03 21:12:31
#include
int main()
{
time_t timep;
struct tm *p;
time(&timep); //获取从1970至今过了多少秒,存入time_t类型的timep
p = localtime(&timep);//用localtime将秒数转化为struct tm结构体
printf("%d/%d/%d %02d:%02d:%02d\n", 1900 + p->tm_year, 1+ p->tm_mon, p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec);//2022/3/03 21:12:31
return 0;
}
3、大体思路
需要头文件 #include
(关于地方时,我在第三部分用到时有简单的介绍,现在说怕待会儿用到时候就忘了hhhh)
这里用最简单的话,大致介绍一下我理解的time_t类型和struct tm结构体。
在计算机中看到的utc时间都是从(1970年01月01日 0:00:00)开始计算秒数的。
我们可以通过函数time()来获取从1970年到现在经过了多少秒,并定义time_t 这种类型(本质上是长整型long)来存储从1970年到现在经过了多少秒。
现在我们有了1970年至今的秒数了,但是我们是无法直接通过秒数看出当前的年月日的,所以需要用函数进行转化。(比如直接告诉你现在距离1970年过了1551193610秒,你是不知道今天几号的,得通过函数转化成“Tue Feb 26 20:32:53 2019”这种形式)
这里用于转化的函数,我们暂且称之为时间函数,它们有很多。
我们按照输出参数类型进行分类,一共有两种,
第一种是直接输出字符指针类型,这种函数的好处是可以直接打印字符串(输出如 :Tue Feb 26 20:32:53 2022),但是它的缺点是无法按照想要的格式输出。
第二种函数是输出struct tm结构体类型指针,这种结构体中分别定义了年月日时分秒等,我们可以利用它输出成我们想要的格式(如:2022/3/03 21:01:38)。
4.具体使用与解析
1、定义time_t类型变量,用来存储1970至今的秒数
本质上time_t是长整型,我用 long 替换后运行没有任何差别
time_t timep;
2、利用函数time()获取从1970年至今的秒数
time(&timep);
函数原型 : time_t time(time_t *t);
time(&timep);
printf("%d",timep);
输出 : 1551193610
如果还是不太懂time_t函数的话 去查查资料 我就不细讲了
如果有看不懂的地方 可以留言 我会第一时间解答
#include
#include
#include
#include
#include
#include"paking_admin.h"
#include
int main(){
sqlite3 * pdb;
int ret;
int num;
ret = sqlite3_open("database.db",&pdb);//打开或创建数据库
if(ret == SQLITE_OK){
printf("open database success!\n");
}
else{
printf("open database fail\n");
exit(-1);
}
create_table(pdb);//创建车库表
create_all_table(pdb);//创建存放以往所有车的停车记录
// init_table(pdb);
// welcome();
while(1){
welcome();
printf("请输入你的选择:\n");
scanf("%d",&num);
switch(num){
case 1:
select_all(pdb);//查看车库空位和停车信息
break;
case 2:
insert_values(pdb);//车主根据车位选择停车
break;
case 3:
count_fee(pdb);//出库并计算价钱
break;
case 4:
select_paking(pdb);//根据车牌查询该车停车记录
break;
case 5:
select_allpaking(pdb);//查看此车库以往所有车的停车记录
break;
case 6:
sqlite3_close(pdb);//退出
printf("已退出\n");
exit(-1);
}
}
return 0;
}
#include
#include
#include
#include
#include
#include"paking_admin.h"
#include
#define MAX 10
void welcome(){
printf("*************************************************************************\n");
printf("**************** *****************\n");
printf("**************** 停车收费 *****************\n");
printf("**************** (撞坏栏杆 罚款1000元) *****************\n");
printf("*************************************************************************\n");
printf("\n");
printf("**************** what can I do for you ,sir *****************\n");
printf("\n");
printf("****** 1 查看所有车位 2 车主选择车位停车 ******\n");
printf("****** 3 汽车出库并计算费用 4 查看车辆停车记录 ******\n");
printf("****** 5 查看所有车辆停车记录 6 退出 ******\n");
printf("****** 收费标准5¥/s(概不还价) ******\n");
printf("*************************************************************************\n");
}
int create_table(sqlite3 *pdb){//创建此表 将其变为车库
char *sql = NULL;
char *errmsg = NULL;
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(pdb,sql,NULL,NULL,&errmsg);
if(ret == SQLITE_OK){
printf("create mytable success!\n");
return SQLITE_OK;
}
else{
printf("create mytable fail! %s\n",errmsg);
exit(-1);
}
}
int create_all_table(sqlite3 *pdb){//创建此表用于存放以往在此车库停过车的停车记录
char *sql = NULL;
char *errmsg = NULL;
int ret;
sql = "create table if not exists alltable (id integer primary key,name text,entertime text,exittime text);";
ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
if(ret == SQLITE_OK){
printf("create alltable success!\n");
return SQLITE_OK;
}
else{
printf("create alltable fail! %s\n",errmsg);
return -1;
}
}
void init_table(sqlite3 *pdb){//初始化车库
int i;
for(i = 0;i < MAX;i++){
char *sql = NULL;
sql = "insert into mytable (id,name,entertm,exittm,stall,entertime,exittime) values (NULL,'no',NULL,NULL,'no','no','no');";
char *errmsg = NULL;
int ret;
ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
if(ret != SQLITE_OK){
printf("init table fail! %s",errmsg);
exit(-1);
}
}
}
void select_all(sqlite3 *pdb){//查寻车库现在的停车信息
char * sql = NULL;
char * errmsg = NULL;
char ** ret_val = NULL;
int nrow;
int ncol;
int ret;
int i;
sql = "select * from mytable;";
ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg);
if(ret != SQLITE_OK){
printf("select all fail! %s",errmsg);
sqlite3_free_table(ret_val);
return;
}
else{
for(i = 0;i < (nrow + 1) * ncol;i++){
printf("%-20s",ret_val[i]);
if((i + 1) % ncol == 0){
printf("\n");
}
}
}
sqlite3_free_table(ret_val);
}
void insert_values(sqlite3 * pdb){//车主根据id自行选择停在哪个车库
char sql[200];
char *errmsg = NULL;
int ret;
char name[20];
int id;
time_t t;
printf("请输入车牌号\n");
scanf("%s",name);
printf("请选择车位id:\n");
scanf("%d",&id);
t = time(NULL);
struct tm *tb;
tb = localtime(&t);
sprintf(sql,"update mytable set name = '%s',entertm = %ld,stall = 'paking',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,id);
ret = sqlite3_exec(pdb,sql,NULL,NULL,&errmsg);
if(ret == SQLITE_OK){
printf("停车成功\n");
return;
}
else{
printf("停车失败! %s\n",errmsg);
return;
}
}
void count_fee(sqlite3 *pdb){ //先将此刻时间赋值给exittm 然后将此车出库 通过entertm和exittm计算所停时间 并将停车记录给alltable表
char sql1[200];
char sql2[200];
char *errmsg = NULL;
int ret1;
int ret2;
char name[20];
time_t t;
char ** ret_val;
int nrow;
int ncol;
int i;
int a,b;
char sql3[200];
int ret3;
char sql4[200];
t = time(NULL);
struct tm * tb;
tb = localtime(&t);
printf("出库汽车车牌号:\n");
scanf("%s",name);
sprintf(sql1,"update mytable set exittm = %ld,exittime = '%d/%d/%d %d:%d:%d' where name = '%s';",t,tb->tm_year + 1900,tb->tm_mon+1,tb->tm_mday,tb->tm_hour,tb->tm_min,tb->tm_sec,name);
ret1 = sqlite3_exec(pdb,sql1,NULL,NULL,&errmsg);
if(ret1 == SQLITE_OK){
printf("exit time succcess!\n");
}
else{
printf("exit time fail! %s",errmsg);
exit(-1);
}
sprintf(sql2,"select entertm,exittm from mytable where name = '%s';",name);
ret2 = sqlite3_get_table(pdb,sql2,&ret_val,&nrow,&ncol,&errmsg);
a = atoi(ret_val[2]);
b = atoi(ret_val[3]);
printf("费用是:%d元\n",(b-a)*5);
sprintf(sql4,"insert into alltable(id,name,entertime,exittime) select id,name,entertime,exittime from mytable where name like '%s';",name);
sqlite3_exec(pdb,sql4,NULL,NULL,&errmsg);
sprintf(sql3,"update mytable set stall = 'no',name = 'no',entertm = NULL,exittm = NULL,entertime='no',exittime = 'no' where name = '%s';",name);
ret3 = sqlite3_exec(pdb,sql3,NULL,NULL,&errmsg);
if(ret3 == SQLITE_OK){
printf("车位已空\n");
}
else{
printf("satll no is fail! %s\n",errmsg);
}
}
void select_paking(sqlite3 *pdb){//根据车牌号查找这辆车的停车记录
char sql[200];
char *errmsg = NULL;
int ret;
int nrow;
int ncol;
int i;
char ** ret_val = NULL;
char name[20];
printf("请输入你想查询车的车牌号\n");
scanf("%s",name);
sprintf(sql,"select id,name,entertime,exittime from alltable where name = '%s';",name);
ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg);
if(ret != SQLITE_OK){
printf("select_paking error! %s\n",errmsg);
sqlite3_free_table(ret_val);
return;
}
else{
printf("select_paking success!\n");
}
for(i = 0;i < (nrow + 1) * ncol;i++){
printf("%-20s",ret_val[i]);
if((i + 1) % ncol == 0){
printf("\n");
}
}
sqlite3_free_table(ret_val);
}
void select_allpaking(sqlite3 *pdb){//查询这个车库以往所有停过车的停车记录
char *sql = NULL;
char *errmsg = NULL;
char **ret_val = NULL;
int nrow;
int ncol;
int ret;
int i;
sql = "select * from alltable;";
ret = sqlite3_get_table(pdb,sql,&ret_val,&nrow,&ncol,&errmsg);
if(ret != SQLITE_OK){
printf("select_allpaking error! %s\n",errmsg);
sqlite3_free_table(ret_val);
return;
}
else{
printf("select_allpaking success!\n");
}
for(i = 0;i < (nrow + 1) * ncol;i++){
printf("%-20s",ret_val[i]);
if((i + 1) % ncol == 0){
printf("\n");
}
}
sqlite3_free_table(ret_val);
}
#ifndef paking_admin
#define paking_admin
#include
#include
#include
#include
#define MAX 10
void welcome();
int create_table(sqlite3 *pdb);
int create_all_table(sqlite3 *pdb);
void init_table(sqlite3 *pdb);
void select_all(sqlite3 * pdb);
void insert_values(sqlite3 *pdb);
void count_fee(sqlite3 *pdb);
void select_paking(sqlite3 *pdb);
void select_allpaking(sqlite3 *pdb);
#endif