Level7day2homework

水果店的数据库难题

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

(作业要求:做作业的时候不要再翻看视频上的教程,对函数理解不明白的全部通过man手册去查看,
自己思考框架,使用makefile编译,然后将测试的记录和结果添加到readme.txt文件中提交上来,代码实现完成测试通过后
再提交作业,这部分学习不写代码不测试看不出问题的,良好的习惯帮助你们快速成长。)

代码code:

#include <stdio.h>
#include <string.h>
#include <sqlite3.h>

#define FILEADD "fruit.db"
#define FILENAME "fruit"
#define DEBUG 1

void func_insert(sqlite3* db);
void func_delete(sqlite3* db);
void func_update(sqlite3* db);
void func_search(sqlite3* db);
int func_callback(void *para, int f_num, char **f_value, char **f_name);

int main()
{
	sqlite3* db;
	int result,cmd;
	char sql[128];
	char* errmsg;
	/* 打开sqlite3句柄 */
	result = sqlite3_open(FILEADD,&db);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
		return -1;
	}
	else
#if DEBUG
		printf("Success OPEN\n");
#endif

	/* 创建表单 */
	sprintf(sql,"create table %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME CHAR,PRICE_$ FLOAT,NUMBER_KG FLOAT)",FILENAME);

	result = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
	}
	else
#if DEBUG
		printf("Success Create\n");
#endif

	/* 构筑用户交互菜单 */
	while(1)
	{
		printf("******************************\n");
		printf("1.insert  2.delete  3.update  4.search 5.quit\n");
		printf("******************************\n");
		scanf("%d",&cmd);
		fflush(stdin);
		switch(cmd)
		{
		case 1:func_insert(db);break;
		case 2:func_delete(db);break;
		case 3:func_update(db);break;
		case 4:func_search(db);break;
		case 5:sqlite3_close(db);return 0;

		default:printf("ERROR: cmd\n");
		}
	}
	return 0;
}


void func_insert(sqlite3* db)
{
	int ID,result;
	char* errmsg;
	char NAME[32];
	float PRICE,NUMBER;
	char sql[128];
	printf("Begin to insert data:\n");
	printf("ID:");
	scanf("%d",&ID);
	fflush(stdin);
	printf("NAME:");
	scanf("%s",NAME);
	fflush(stdin);
	printf("PRICE($):");
	scanf("%f",&PRICE);
	fflush(stdin);
	printf("NUMBER(KG):");
	scanf("%f",&NUMBER);
	fflush(stdin);

	sprintf(sql,"insert into %s values(%d,'%s',%f,%f);",FILENAME,ID,NAME,PRICE,NUMBER);
	result = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
		return;
	}
	else
#if DEBUG
		printf("Success Create\n");
#endif

	return;
}

void func_delete(sqlite3* db)
{
	int ID,result;
	char* errmsg;
	char sql[128];
	printf("Begin to delete data:\n");
	printf("ID:");
	scanf("%d",&ID);
	fflush(stdin);

	sprintf(sql,"delete from %s where id = %d;",FILENAME,ID);
	result = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
		return;
	}
	else
#if DEBUG
		printf("Success Delete\n");
#endif

	return;
}

void func_update(sqlite3* db)
{
	int ID,result;
	char* errmsg;
	float PRICE,NUMBER;
	char sql[128];
	fflush(stdin);
	printf("Begin to update data:\n");
	printf("ID:");
	scanf("%d",&ID);
	fflush(stdin);
	printf("PRICE($):");
	scanf("%f",&PRICE);
	fflush(stdin);
	printf("NUMBER(KG):");
	scanf("%f",&NUMBER);
	fflush(stdin);

	sprintf(sql,"update %s set PRICE_$ = %f,NUMBER_KG = %f where id = %d;",FILENAME,PRICE,NUMBER,ID);
	//sprintf(sql,"update %s set PRICE_$ = %f where id = %d;",FILENAME,PRICE,ID);
	result = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
		return;
	}
	else
#if DEBUG
		printf("Success update\n");
#endif

	return;
}

void func_search(sqlite3* db)
{
	char sql[128];
	int result;
	char* errmsg;
	sprintf(sql,"select * from %s;",FILENAME);
	result = sqlite3_exec(db,sql,func_callback,NULL,&errmsg);
	if(result != SQLITE_OK)
	{
		printf("%s\n",sqlite3_errmsg(db));
		return;
	}
	else
#if DEBUG
		printf("Success update\n");
#endif

	return;
}

int func_callback(void *para, int f_num, char **f_value, char **f_name)
{
	int i;
	for(i=0;i < f_num;i++)
	{
			printf("%-11s",f_value[i]);
	}
	printf("\n");
	return 0;
}

结果展示:

inux@ubuntu:~/Level7/day2$ gcc -o homework homework.cpp -lsqlite3 -Wall
linux@ubuntu:~/Level7/day2$ ./homework 
Success OPEN
table fruit already exists
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
4
1001       apple      20.0       60.0       
Success update
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
1
Begin to insert data:
ID:1002
NAME:banana
PRICE($):5
NUMBER(KG):100
Success Create
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
4
1001       apple      20.0       60.0       
1002       banana     5.0        100.0      
Success update
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
1
Begin to insert data:
ID:1003
NAME:watermalon
PRICE($):10
NUMBER(KG):50
Success Create
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
4
1001       apple      20.0       60.0       
1002       banana     5.0        100.0      
1003       watermalon 10.0       50.0       
Success update
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
2
Begin to delete data:
ID:1003
Success Delete
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
4
1001       apple      20.0       60.0       
1002       banana     5.0        100.0      
Success update
******************************
1.insert  2.delete  3.update  4.search 5.quit
******************************
5