在Linux下,用SQlite数据库编写的图书管理系统源代码及错误总结
来源:互联网 发布:能以礼让为国乎何有 编辑:程序博客网 时间:2024/05/18 00:12
</pre><pre name="code" class="html">
总结:重点是利用sprintf()函数实现数据动态输入输出
错误总结:刚开始输入数据时只能输入一个字符,多于一个字符就出现段错误,检查后发现是<pre name="code" class="html">sprintf(sql,"insert into book_info(ISBN,name,writer,publisher,time,price) values(%d,'%s','%s','%s','%s',%d);",ISBN,name,writer,publisher,time,price); printf("---------------------\n");这一句中,<span style="font-family: Arial, Helvetica, sans-serif;">values()里面有字符串,应该用单引号括起来,才表示将一个字符串插入相应的地方,否则就只能输入一个字符。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">在Linux下编写程序时,遇到最多的错误就是段错误, 通常段错误是指访问的内存超出了系统所给这个程序的内存空间,遇到段错误,首先检查scanf(),看输入的参数有没有加取地址符,很多时候我都是这个地方出问题了;</span>
<span style="font-family:Arial, Helvetica, sans-serif;">再检查指针。。。。</span>
<span style="font-family:Arial, Helvetica, sans-serif;">个人心得:本来觉得应该很难写,自己写不出来的,后来因为某个赌注,逼着自己一晚上写了出来,这个程序也算是我写程序的又一个新的起点吧,以后会更加自信!!</span>
/*****************************************************copyright (C), Nanjing University of TecnologyFile name:db.cAuthor: Xiecan Version:0.1 Date: 2016-05-10 14:48Description:Funcion List: *****************************************************/#include <stdlib.h>#include <stdio.h>#include <sqlite3.h>#define N 10#define M 15int displaycb(void *para,int n_column,char ** column_value,char ** column_name);int inquire_usecb(sqlite3 *db);void Menus(sqlite3 *db);int creat_table(sqlite3 *db);int insert_data(sqlite3 *db);int delete_data(sqlite3 *db);int update_data(sqlite3 *db);int find_data(sqlite3 *db);int show_data(sqlite3 *db);int qiut(sqlite3 *db);int main(int argc, char **argv){ sqlite3 *db = NULL; int rc; rc = sqlite3_open("database.db",&db); if(rc != SQLITE_OK) { printf("open database error!\n"); exit(-1); } else { printf("create database success!\n"); } rc = creat_table(db); while(1) { Menus(db); } //rc = creat_table(db); return 0;}int inquire_usecb(sqlite3 *db){ char *sql; char *errmsg; sql = "select * from book_info;"; if(SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg)) { printf("exec_select error!error on:%s\n",errmsg); exit(-1); } /*sql = "./header on"; if(SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg)) { printf("exec_header error!error on:%s\n",errmsg); exit(-1); }*/ return 0;}int displaycb(void *para,int n_column,char **column_value,char ** column_name){ int i; printf("**************************************************\n"); printf("total column is %d\n",n_column); for(i = 0; i < n_column; i++) { printf("columnname:%s---->columnvalue:%s\n",column_name[i],column_value[i]); } printf("**************************************************\n"); return 0;}/****************************************************函数功能:选择菜单****************************************************/void Menus(sqlite3 *db){ int ch; printf("/***************欢迎进入图书管理系统****************/\n"); printf("* 1.添加图书信息\ \n 2.删除图书信息\ \n 3.查找图书信息\ \n 4.修改图书信息\ \n 5.输出图书管理系统所有图书信息\ \n 6.退出系统\ \n/***************************************************/\n"); printf("请输入你想进行的操作:\n"); scanf("%d",&ch); switch(ch) { case 1: insert_data(db); inquire_usecb(db); break; case 2: delete_data(db); inquire_usecb(db); break; case 3: find_data(db); inquire_usecb(db); break; case 4: update_data(db); inquire_usecb(db); break; case 5: inquire_usecb(db); break; case 6: qiut(db); break; default: printf("输入错误,请重新输入!\n"); }}int creat_table(sqlite3 *db){ char *sql; char *errmsg; sql = "create table if not exists book_info(\ ISBN integer primary key,\ name text,\ writer text,\ publisher text,\ time text,\ price real);"; if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_create table error! error on:%s\n",errmsg); exit(-1); } return 0;}int insert_data(sqlite3 *db){ char sql[100]; char *errmsg; int i; int num; int ISBN; char name[N]; char writer[N]; char publisher[N]; char time[N]; int price; printf("你想录入几本书?\n"); scanf("%d",&num); for(i = 1; i <= num; i++) { printf("请输入第%d本书的信息:\n",i); printf("ISBN:"); scanf("%d",&ISBN); printf("书名:"); //gets(name); scanf("%s",name); printf("作者:"); scanf("%s",writer); printf("出版社:"); scanf("%s",publisher); printf("出版时间:"); scanf("%s",time); printf("价格:"); scanf("%d",&price); printf("********************\n"); sprintf(sql,"insert into book_info(ISBN,name,writer,publisher,time,price) values(%d,'%s','%s','%s','%s',%d);",ISBN,name,writer,publisher,time,price); printf("---------------------\n"); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_insert data error! error on:%s\n",errmsg); exit(-1); } } return 0;}/*****************************************************函数功能:删除图书*****************************************************/int delete_data(sqlite3 *db){ char sql[100]; char *errmsg; int ch; int ISBN; char name[N]; char writer[N]; char publisher[N]; char time[N]; printf("--------删除图书信息--------\n"); printf("请选择你想进行的删除操作:\n"); printf(" 1.删除与指定ISBN相同的书\ \n 2.删除与指定书名相同的书\ \n 3.删除指定作者的书\ \n 4.删除指定出版社的书\n"); printf("------------------------\n"); scanf("%d",&ch); switch(ch) { case 1: printf("请输入你要删除的图书的ISBN:\n");//根据ISBN找到指定图书 scanf("%d",&ISBN); sprintf(sql,"delete from book_info where ISBN = %d;",ISBN); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_delete data according to ISBN error! error on:%s\n",errmsg); exit(-1); } break; case 2: printf("请输入你想删除图书的名字:\n"); scanf("%s",name); sprintf(sql,"delete from book_info where name = %s;",name); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_delete data according to name error! error on:%s\n",errmsg); exit(-1); } break; case 3: printf("请输入你想删除图书的作者名:\n"); scanf("%s",writer); sprintf(sql,"delete from book_info where writer = %s;",writer); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_delete data according to writer error! error on:%s\n",errmsg); exit(-1); } break; case 4: printf("请输入你想删除图书的出版社名字:\n"); scanf("%s",publisher); sprintf(sql,"delete from book_info where publisher = %s;",publisher); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_delete data according to publisher error! error on:%s\n",errmsg); exit(-1); } break; default: printf("输入错误!\n"); }}/******************************************************函数功能:根据需要选择要进行修改的操作******************************************************/int update_data(sqlite3 *db){ char *errmsg; char sql[100]; int ch; int c = 1; int NU; int ISBN; char name[N]; char writer[N]; char publisher[N]; char time[N]; int price; while(c) { c = 0; printf("--------修改图书信息--------\n"); printf("请输入你想修改图书的ISBN:\n"); scanf("%d",&NU); printf("请选择你想进行的修改操作:\n"); printf(" 1.修改ISBN\ \n 2.修改书名\ \n 3.修改作者\ \n 4.修改出版社名\ \n 5.修改书的价格\ \n 6.修改出版日期\n"); printf("----------------------\n"); scanf("%d",&ch); switch(ch) { case 1: printf("请输入新的ISBN:\n"); scanf("%d",&ISBN); sprintf(sql,"update book_info set ISBN = %d where ISBN = %d;",ISBN,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update ISBN error! error on:%s\n",errmsg); exit(-1); } break; case 2: printf("请输入新的书名:\n"); scanf("%s",name); sprintf(sql,"update book_info set name = %s where ISBN = %d;",name,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update name error! error on:%s\n",errmsg); exit(-1); } break; case 3: printf("请输入新的作者名字:\n"); scanf("%s",writer); sprintf(sql,"update book_info set writer = %s where ISBN = %d;",writer,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update writer error! error on:%s\n",errmsg); exit(-1); } break; case 4: printf("请输入新的出版社名字:\n"); scanf("%s",publisher); sprintf(sql,"update book_info set publisher = %s where ISBN = %d;",publisher,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update publisher error! error on:%s\n",errmsg); exit(-1); } break; case 5: printf("请输入新的time:\n"); scanf("%s",time); sprintf(sql,"update book_info set time = %s where ISBN = %d;",time,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update time error! error on:%s\n",errmsg); exit(-1); } break; case 6: printf("请输入新的price:\n"); scanf("%d",&price); sprintf(sql,"update book_info set price = %d where ISBN = %d;",price,NU); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_update price error! error on:%s\n",errmsg); exit(-1); } break; default: printf("输入错误\n"); }C: printf("还要继续修改吗?\ \n1.继续\ \n0.退出\n"); scanf("%d",&c); if(c > 1) { printf("输入错误,请重新输入!\n"); goto C; } } printf("修改后:\n");} int find_data(sqlite3 *db){ char sql[100]; char *errmsg; int ch; int a,b; char stime[N]; char etime[N]; int ISBN; char name[N]; char writer[N]; char publisher[N]; printf("--------查找图书信息--------\n"); printf("请选择你想进行的查找操作:\n"); printf(" 1.按ISBN查找\ \n 2.按书名查找\ \n 3.查找指定作者的所有书\ \n 4.查找指定出版社出版的所有书\ \n 5.查找书的价格范围在指定区间的书\ \n 6.查找出版时间在指定区间内的书\n"); printf("----------------------\n"); scanf("%d",&ch); switch(ch) { case 1: printf("请输入你想查找图书的ISBN:\n"); scanf("%d",&ISBN); sprintf(sql,"select * from book_info where ISBN = %d;",ISBN); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to ISBN error! error on:%s\n",errmsg); exit(-1); } break; case 2: printf("请输入你想查找图书的书名:\n"); scanf("%s",name); sprintf(sql,"select * from book_info where = %s;",name); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to name error! error on:%s\n",errmsg); exit(-1); } break; case 3: printf("请输入你想查找图书的作者:\n"); scanf("%s",writer); sprintf(sql,"select * from book_info where writer = %s;",writer); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to writer error! error on:%s\n",errmsg); exit(-1); } break; case 4: printf("请输入你想查找图书的出版社名字:\n"); scanf("%s",publisher); sprintf(sql,"select * from book_info where publisher = %s;",publisher); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to publisher error! error on:%s\n",errmsg); exit(-1); } break; case 5: printf("请输入你想查找图书价格的下限:\n"); scanf("%s",&a); printf("请输入你想查找图书的上限:\n"); scanf("%s",&b); sprintf(sql,"select * from book_info where price in (%d,%d);",a,b); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to price error! error on:%s\n",errmsg); exit(-1); } break; case 6: printf("请输入你想查找图书出版日期的区间[a,b]:(以逗号隔开)\n"); scanf("%s,%s",stime,etime); sprintf(sql,"select * from book_info where strcmp(time,%s) >= 0 and strcmp(time,%s) <= 0;",stime,etime); if(SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) { printf("exec_find data according to time error! error on:%s\n",errmsg); exit(-1); } break; default: printf("输入错误\n"); } return 0;}int show_data(sqlite3 *db){ return 0;}int qiut(sqlite3 *db){ printf("欢迎使用图书管理系统,再见!\n"); sqlite3_close(db); exit(0); return 0;}
1 0
- 在Linux下,用SQlite数据库编写的图书管理系统源代码及错误总结
- Linux下,用单链表编写图书管理系统
- Sqlite数据库在Linux系统下的移植
- 用c++编写简单的图书管理系统怎么弄
- 用c++编写简单的图书管理系统怎么弄
- 关系型数据库sqlite之图书管理系统
- 【数据库】图书管理系统
- 图书管理系统项目源代码
- 图书管理系统数据库设计
- 图书管理系统数据库设计
- C#数据库图书管理系统
- 图书管理系统数据库版
- 图书管理系统数据库设计
- 【swing】在做c/s的图书管理系统时遇到的异常及解决办法
- 简易图书管理系统总结
- 求图书管理系统 源代码,和界面
- 图书管理系统 C 语言 源代码
- 求图书管理系统C源代码
- 如何让子窗口全屏显示
- Target runtime Apache Tomcat v6.0 is not defined.
- PHP PSR-1 基本代码规范(中文版)
- BAPI_INCOMINGINVOICE_PARK(mir7)
- 页面延迟加载方法
- 在Linux下,用SQlite数据库编写的图书管理系统源代码及错误总结
- 【bzoj1601】【Usaco2008 Oct】灌水 (最小生成树) 题解&代码
- PPT裂字效果怎么制作
- 即时查询,类似于百度及时查询显示结果
- enum和Enum关系
- Spark Broadcast内幕解密
- 1018 of dp
- android 开发 onRestart()未调用
- 使用Fastjson生成Json字符串少字段属性(数据丢失)