Linux|卖水果的数据库sqlite3

项目描述

假如我家开了个水果超市,有以下水果,想实现自动化管理,扫描二维码就能知道当前的水果状态,进货几天了,好久需要再次进货,那些水果畅销,那些水果不畅销,那些水果春夏秋冬的价格波动,好,那么现在我想将这些信息保存在数据库中,那么我应该怎么做。

假如水果有:
苹果,香蕉,梨,橘子,葡萄…
水果价格:
苹果 5元/斤 香蕉 3元/斤 梨 3.5元/斤 橘子2.5元/斤 葡萄 8元/斤…
当前存货:
苹果 80斤 香蕉 200斤 梨 50斤 橘子300斤 葡萄 100斤…

超市每天水果都有进货和卖出,水果的价格随着季节和天气也会有波动,顾客也会看一下每天水果的价格的,所以要求利用数据库完成水果店各种水果的进货、卖出、价格变化等的数据变动和查询功能,并且实现实时更新进出货的时间和顾客光顾的时间记录到数据库中保存。

解决方案

  1. 添加输入水果数据信息 do_insert()
  2. 查询已有的水果数据信息 do_query()
  3. 水果的进货、卖出 = 水果重量的变动信息 do_update_weight()
  4. 水果价格的变动信息 do_update_price()
  5. 删除不需要的水果数据信息 do_delete()
  6. 退出

把代码文件起名为test.c执行gcc -o -test test.c -lsqlite3然后./fruit
在这里插入图片描述

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
#include <time.h>
 
#define  DATABASE  "mysql.db"
#define TABLES "fruit"
#define  N  128




/*添加输入水果数据*/
int do_insert(sqlite3 *db,char *buf)
{
	char name[32] = {};
	float weight;
	float price;
	char sql[N] = {};
	char *errmsg;
 
 
	printf("Input fruit name:");//水果名
	scanf("%s", name);
	getchar();
	printf("Input price:");//单位重量的价格
	scanf("%f", &price);
	printf("Input weight:");//重量
	scanf("%f", &weight);
 

	sprintf(sql, "insert into '%s' (name,weight,price,time)values('%s', '%.3f', '%.3f','%s')",TABLES, name, weight, price,buf);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Insert done.\n");
	}
 
	return 0;
}
 



/*callback函数*/
int callback(void *arg, int f_num, char ** f_value, char ** f_name)
{
	int i = 0;
 
	for(i = 0; i < f_num; i++)//for循环,实现数据全部一起显示
	{
		printf("%-8s", f_value[i]);
	}
 
	putchar(10);
 
	puts("-----------------------------------------");
 
	return 0;
}
/*查询已输入的水果信息*/
int do_query(sqlite3 *db)
{
	char *errmsg;
	char sql[N] = {};
 
	sprintf(sql,"select * from '%s';",TABLES);
	if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)//callback函数的调用
	{
		printf("%s", errmsg);
	}
	else
	{
		printf("select done.\n");
	}
	return 0;
}





/*更改相应水果的重量*/
int do_update_weight(sqlite3 *db,char *buf)
{
	int Num;
	char sql[N] = {};
	char *errmsg;
	float weight;
 
	printf("Input Num:");
	scanf("%d", &Num);
 
	printf("Input weight:");
	scanf("%f", &weight);
 
 
	sprintf(sql, "update '%s' set weight='%f',time='%s' where Num=%d",TABLES, weight,buf,Num);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Update_weight done.\n");
	}
 
	return 0;
}




/*更改相应水果的价格*/
int do_update_price(sqlite3 *db,char *buf)
{
	float price;
	int Num;
	char sql[N] = {};
	char *errmsg;
 
	printf("Input Num:");
	scanf("%d", &Num);
 
	printf("Input alter price:");
	scanf("%f", &price);
 
	sprintf(sql, "update '%s' set price='%f',time='%s' where Num=%d",TABLES , price,buf,Num);
 
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Update_price done.\n");
	}
 
	return 0;
}




/*删除相应的水果信息*/
int do_delete(sqlite3 *db)
{
	int Num;
	char sql[N] = {};
	char *errmsg;

    printf("Input Num:");
	scanf("%d", &Num);

    sprintf(sql, "delete from '%s' where Num='%d'",TABLES, Num);

    if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Delete done.\n");
	}
 
	return 0;
}


 
int main(int argc, const char *argv[])
{
	sqlite3 *db;
	char *errmsg;
	int n;
	char sql[128] = {};
	char buf[128] = {};
 
	time_t t;
	struct tm *tp;
 
	if(sqlite3_open(DATABASE, &db) != SQLITE_OK)
	{
		printf("%s\n", sqlite3_errmsg(db));
		return -1;
	}
	else
	{
		printf("open DATABASE success.\n");
	}
	sprintf(sql,"create table if not exists '%s' (Num integer primary key autoincrement,name char,weight float,price float,time char);",TABLES);
	if(sqlite3_exec(db, sql,NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
	}
	else
	{
		printf("Create or open table success.\n");
        puts("-----------------------------------------");
 
	    sprintf(sql,"select * from '%s';",TABLES);
	    if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != SQLITE_OK)
	    {
		    printf("%s", errmsg);
	    }
	}
	time(&t);//获取时间
	tp = localtime(&t);//时间格式化
	sprintf(buf,"%d-%02d-%02d %02d:%02d:%02d\n",
			tp->tm_year+1900, tp->tm_mon+1,tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec);
	
	printf("%s",buf);
	while(1)
	{
		printf("********************************************\n");
		printf("1: insert  2:query  3:update_weight 4:update_price 5:delete 6:quit\n");
		printf("********************************************\n");
		printf("Please select:");
		scanf("%d", &n);
 
		switch(n)
		{
		case 1:
			do_insert(db,buf);//添加输入
			break;
		case 2:
			do_query(db);//查询
			break;
		case 3:
			do_update_weight(db,buf);//更新重量
			break;
		case 4:
			do_update_price(db,buf);//更新价格
			break;
        case 5:
			do_delete(db);//删除
			break;
		case 6:
			printf("main exit.\n");//退出
			sqlite3_close(db);
			exit(0);
			break;
		default :
			printf("Invalid data n.\n");
		}
 
	}
 
	return 0;
}
 
 
 


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值