C语言项目

项目要求:

假如我家开了个水果超市,有以下水果,想实现自动化管理,扫描二维码就能知道当前的水果状态,进货几天了,
好久需要再次进货,那些水果畅销,那些水果不畅销,那些水果春夏秋冬的价格波动,好,那么现在我想将
这些信息保存在数据库中,那么我应该怎么做;
提示: 建立一张fruit表,
假如水果有: 苹果,香蕉,梨,橘子,葡萄....(可以自己查一下英文保存到数据库)
水果价格: 苹果 5元/斤 香蕉 3元/斤 梨 3.5元/斤 橘子2.5元/斤 葡萄 8元/斤....
当前存货: 苹果 80斤 香蕉 200斤 梨 50斤 橘子300斤 葡萄 100斤....
超市每天水果都有进货和卖出嘛,水果的价格随着季节和天气也会有波动,顾客也会看一下每天水果的价格的嘛,
所以要求,根据上述提示,利用数据库完成水果店各种水果的增(进货)删(卖出)改(波动)查(看价格)功能。
并将进出货的时间和顾客光顾的时间记录到数据库中保存。

1.项目演示 

1

2.项目代码

#include<stdio.h>
#include<sqlite3.h>
#include<stdlib.h>
#include<time.h>
#define DATABASE "fruit.db"

/*
	功能:按水果名字查询水果数量
	参数:db:数据库句柄   name:水果名字
	返回值:成功:水果数量  失败: -1
*/
int queryfruitamount(sqlite3 *db,char name[10])
{
	char *errmsg;
	char ** resultp;
	int nrow;
	int ncolumn;
	char sql[128] = {};
	int fruitamount;
	sprintf(sql, "select amount from fruit where fruitname='%s';", name);
	
	if(sqlite3_get_table(db, sql,&resultp, &nrow, &ncolumn, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	fruitamount=atoi(resultp[ncolumn]);
	sqlite3_free_table(resultp);
	return fruitamount;
}

/*
	功能:改变水果数量
	参数:db:数据库句柄   name:水果名字  num:数量
	返回值:成功:0  失败: -1
*/
int updatefruitamount(sqlite3 *db,char name[10],int num)
{
	char sql[128] = {};
	char *errmsg;
	
	sprintf(sql, "update fruit set amount=%d where fruitname='%s';", num,name);

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

/*
	功能:记录时间
	参数:db:数据库句柄   name:水果名字 
	      operate:1:进货时间  2:出货时间  3:顾客查看价格时间
	返回值:成功:0  失败: -1
*/
int updatetime(sqlite3 *db,char name[10],int operate)
{
	char sql[128] = {};
	char str[20]={};
	char timestr[15]={};
	char *errmsg;
	time_t tem=time(NULL);
	struct tm*tmer=localtime(&tem);
	
	switch(operate)
		{
		case 1:
			sprintf(str, "purchasetime");
			break;
		case 2:
			sprintf(str, "shiptime");
			break;
		case 3:
			sprintf(str, "watchtime");
			break;
		default:
			return -1;
		}
	sprintf(timestr, "%02d:%02d:%02d",tmer->tm_hour,tmer->tm_min,tmer->tm_sec);
	sprintf(sql, "update fruit set %s='%s' where fruitname='%s';", str,timestr,name);

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


/*
	功能:改变水果价格
	参数:db:数据库句柄   name:水果名字  price:水果价格
	返回值:成功:0  失败: -1
*/
int updatefruitprice(sqlite3 *db,char name[10],float price)
{
	char sql[128] = {};
	char *errmsg;
	
	sprintf(sql, "update fruit set price=%0.3f where fruitname='%s';", price,name);

	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	
	return 0;
}
/*
	功能:水果进货
	参数:db:数据库句柄   
	返回值:成功 :0 失败:-1
*/
int fruit_buy(sqlite3 *db)
{
	char name[10];
	int amount;
	int num;
	printf("请输入水果的名称:");
	scanf("%s", name);
	while(getchar()!='\n');
	amount=queryfruitamount(db,name);
	if(amount==-1)
	{	
	return -1;
	}
	printf("请输入进货数量:");
	scanf("%d", &num);
	while(getchar()!='\n');
	amount+=num;
	if(updatefruitamount(db,name,amount)==-1)
	{
	return -1;
	}
	if(updatetime(db,name,1)==-1)
	{
	return -1;
	}
	return 0;
}

/*
	功能:水果卖出
	参数:db:数据库句柄   
	返回值:成功 :0 失败:-1
*/
int fruit_sell(sqlite3 *db)
{
	char name[10];
	int amount;
	int num;
	printf("请输入水果的名称:");
	scanf("%s", name);
	while(getchar()!='\n');
	amount=queryfruitamount(db,name);
	if(amount==-1)
	{
	return -1;
	}
	printf("请输入卖出的数量:");
	scanf("%d", &num);
	while(getchar()!='\n');
	amount-=num;
	if(amount<0)
	{
	printf("数量不够卖不了\n");
	return -1;
	}
	if(updatefruitamount(db,name,amount)==-1)
	{
	return -1;
	}
	if(updatetime(db,name,2)==-1)
	{
	return -1;
	}
	return 0;
}

/*
	功能:水果价格的更新
	参数:db:数据库句柄   
	返回值:成功 :0
*/
int fruit_update(sqlite3 *db)
{
	char name[10];
	float price;
	printf("请输入水果的名称:");
	scanf("%s", name);
	while(getchar()!='\n');	
	printf("请输入现在的价格:");
	scanf("%f", &price);
	while(getchar()!='\n');
	if(updatefruitprice(db,name,price)==-1)
	{
	return -1;
	}
	return 0;
}

/*
	功能:查看水果的价格
	参数:db:数据库句柄   
	返回值:成功 :0 失败:-1
*/
int callback(void *arg, int f_num, char ** f_value, char ** f_name)
{
	int i = 0;
	for(i = 0; i < f_num; i++)
	{
		printf("%-16s元/斤\n", f_value[i]);
	}
	return 0;
}
int fruit_watch(sqlite3 *db)
{
	char *errmsg;
	char sql[128] = "select fruitname,price from fruit;";
	char name[10];
	printf("请输入水果的名称:");
	scanf("%s", name);
	while(getchar()!='\n');
	sprintf(sql, "select price from fruit where fruitname='%s';",name);

	if(sqlite3_exec(db, sql, callback,NULL , &errmsg) != 0)
	{
		printf("%s", errmsg);
		return -1;
	}
	if(updatetime(db,name,3)==-1)
	{
	return -1;
	}
	return 0;
}

/*
	功能:查看全部信息
	参数:db:数据库句柄   
	返回值:成功 :0 失败:-1
*/
int fruit_all(sqlite3 *db)
{
	char *errmsg;
	char ** resultp;
	int nrow;
	int ncolumn;

	if(sqlite3_get_table(db, "select * from fruit", &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
		return -1;
	}

	int i = 0;
	int j = 0;
	int index = ncolumn;

	for(j = 0; j < ncolumn; j++)
	{
		printf("%-10s ", resultp[j]);
	}
	putchar(10);

	for(i = 0; i < nrow; i++)
	{
		for(j = 0; j < ncolumn; j++)
		{
			printf("%-10s ", resultp[index++]);
		}
		putchar(10);
	}
	sqlite3_free_table(resultp);
	return 0;
}

/*
	功能:数据表赋值初始信息
	参数:db:数据库句柄   
	返回值:成功 :0 失败:-1
*/
int fruit_create(sqlite3 *db)
{	
	char *errmsg;

	char sql1[128] = {"insert into fruit(fruitname,price,amount) values('apple',5,80);"};
char sql2[128] = {"insert into fruit(fruitname,price,amount) values('banana',3,200);"};
	char sql3[128] = {"insert into fruit(fruitname,price,amount) values('pear',3.5,50);"};
char sql4[128] = {"insert into fruit(fruitname,price,amount) values('orange',2.5,300);"};
	char sql5[128] = {"insert into fruit(fruitname,price,amount) values('grape',8,100);"};
	if(sqlite3_exec(db, sql1, NULL, NULL, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	
	if(sqlite3_exec(db, sql2, NULL, NULL, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}

	if(sqlite3_exec(db, sql3, NULL, NULL, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	
	if(sqlite3_exec(db, sql4, NULL, NULL, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	if(sqlite3_exec(db, sql5, NULL, NULL, &errmsg) != 0)
	{
		printf("%s\n", errmsg);
		return -1;
	}	
	return 0;
}


int main(int argc,char*argv[])
{
	sqlite3*db;
	if(sqlite3_open(DATABASE,&db)!=0)
	{
	printf("%s\n",sqlite3_errmsg(db));
	return -1;
	}

	char*errmsg;
	char sql[256]={"create table fruit(fruitname text,price float,amount int,purchasetime text,shiptime text,watchtime text);"};
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)==0)
	{
	fruit_create(db);//数据表创建成功赋初值
	}
	printf("open or create success\n");
	
	int cmd=0;
	while(1)
	{
	printf("**********************************\n");
       	printf("1.进货  2.卖出  3.价格波动  4.查看价格 5.显示所有 6.退出\n");
	printf("**********************************\n");
	printf("请选择:");
	scanf("%d",&cmd);
	while(getchar()!='\n');
	switch(cmd)
		{
		case 1:
			fruit_buy(db);
			break;
		case 2:
			fruit_sell(db);
			break;
		case 3:
			fruit_update(db);
			break;
		case 4:
			fruit_watch(db);
			break;
		case 5:
			fruit_all(db);
			break;
		case 6:
			sqlite3_close(db);
			exit(0);
			break;	
		default:
			printf("选择无效请重新选择\n");
		}
	}


	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

本环

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值