#include stdioh#include stdlibh#include stringh#define MAX_SIZE 1000typedef struct char bookCode20; char bookName50; char author50; char publisher50; char bookkind50; char bookkinds
是的,可以将程序中的修改和查找功能改为使用数据库文件。以下是修改后的程序示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlite3.h>
#define MAX_SIZE 1000
typedef struct {
char bookCode[20];
char bookName[50];
char author[50];
char publisher[50];
char bookkind[50];
char bookkinds[50];
int quantity;
} Book;
Book bookList[MAX_SIZE];
int count = 0;
void loadBookData() {
sqlite3 *db;
int rc = sqlite3_open("book_storage.db", &db);
if (rc != SQLITE_OK) {
printf("无法打开数据库文件!\n");
return;
}
sqlite3_stmt *stmt;
const char *sql = "SELECT * FROM book";
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
printf("无法执行查询语句!\n");
return;
}
while (sqlite3_step(stmt) == SQLITE_ROW) {
strcpy(bookList[count].bookCode, sqlite3_column_text(stmt, 0));
strcpy(bookList[count].bookName, sqlite3_column_text(stmt, 1));
strcpy(bookList[count].author, sqlite3_column_text(stmt, 2));
strcpy(bookList[count].publisher, sqlite3_column_text(stmt, 3));
strcpy(bookList[count].bookkind, sqlite3_column_text(stmt, 4));
strcpy(bookList[count].bookkinds, sqlite3_column_text(stmt, 5));
bookList[count].quantity = sqlite3_column_int(stmt, 6);
count++;
}
sqlite3_finalize(stmt);
sqlite3_close(db);
}
void saveBookData() {
sqlite3 *db;
int rc = sqlite3_open("book_storage.db", &db);
if (rc != SQLITE_OK) {
printf("无法打开数据库文件!\n");
return;
}
const char *sql = "CREATE TABLE IF NOT EXISTS book ("
"bookCode TEXT PRIMARY KEY,"
"bookName TEXT,"
"author TEXT,"
"publisher TEXT,"
"bookkind TEXT,"
"bookkinds TEXT,"
"quantity INTEGER);";
rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("无法创建表格!\n");
return;
}
sql = "DELETE FROM book;";
rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
printf("无法清空表格!\n");
return;
}
sqlite3_stmt *stmt;
sql = "INSERT INTO book (bookCode, bookName, author, publisher, bookkind, bookkinds, quantity) VALUES (?, ?, ?, ?, ?, ?, ?);";
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (rc != SQLITE_OK) {
printf("无法执行插入语句!\n");
return;
}
int i;
for (i = 0; i < count; i++) {
sqlite3_bind_text(stmt, 1, bookList[i].bookCode, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 2, bookList[i].bookName, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 3, bookList[i].author, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 4, bookList[i].publisher, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 5, bookList[i].bookkind, -1, SQLITE_STATIC);
sqlite3_bind_text(stmt, 6, bookList[i].bookkinds, -1, SQLITE_STATIC);
sqlite3_bind_int(stmt, 7, bookList[i].quantity);
rc = sqlite3_step(stmt);
if (rc != SQLITE_DONE) {
printf("无法插入数据!\n");
return;
}
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);
sqlite3_close(db);
}
void addBook() {
Book newBook;
printf("请输入图书编号:");
scanf("%s", newBook.bookCode);
printf("请输入书名:");
scanf("%s", newBook.bookName);
printf("请输入作者:");
scanf("%s", newBook.author);
printf("请输入出版社:");
scanf("%s", newBook.publisher);
printf("请输入图书种类:");
scanf("%s", newBook.bookkind);
printf("请输入图书种类编号:");
scanf("%s", newBook.bookkinds);
printf("请输入价格:");
scanf("%d", &newBook.quantity);
bookList[count++] = newBook;
printf("添加成功!\n");
}
void deleteBook() {
char bookCode[20];
printf("请输入要删除的图书编号:");
scanf("%s", bookCode);
int i, j;
for (i = 0; i < count; i++) {
if (strcmp(bookList[i].bookCode, bookCode) == 0) {
for (j = i; j < count - 1; j++) {
bookList[j] = bookList[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
printf("没有找到相关图书!\n");
}
void modifyBook() {
char bookCode[20];
printf("请输入要修改的图书编号:");
scanf("%s", bookCode);
int i;
for (i = 0; i < count; i++) {
if (strcmp(bookList[i].bookCode, bookCode) == 0) {
printf("请输入新的书名:");
scanf("%s", bookList[i].bookName);
printf("请输入新的作者:");
scanf("%s", bookList[i].author);
printf("请输入新的出版社:");
scanf("%s", bookList[i].publisher);
printf("请输入新的图书种类:");
scanf("%s", bookList[i].bookkind);
printf("请输入新的图书种类编号:");
scanf("%s", bookList[i].bookkinds);
printf("请输入新的价格:");
scanf("%d", &bookList[i].quantity);
printf("修改成功!\n");
return;
}
}
printf("没有找到相关图书!\n");
}
void searchBook() {
char bookName[50];
printf("请输入要查找的书名:");
scanf("%s", bookName);
int i;
int found = 0;
for (i = 0; i < count; i++) {
if (strcmp(bookList[i].bookName, bookName) == 0) {
printf("图书编号:%s\n", bookList[i].bookCode);
printf("书名:%s\n", bookList[i].bookName);
printf("作者:%s\n", bookList[i].author);
printf("出版社:%s\n", bookList[i].publisher);
printf("图书种类:%s\n", bookList[i].bookkind);
printf("图书种类编号:%s\n", bookList[i].bookkinds);
printf("价格:%d\n", bookList[i].quantity);
found = 1;
}
}
if (!found) {
printf("没有找到相关图书!\n");
}
}
void displayBook() {
int i;
for (i = 0; i < count; i++) {
printf("图书编号:%s\n", bookList[i].bookCode);
printf("书名:%s\n", bookList[i].bookName);
printf("作者:%s\n", bookList[i].author);
printf("出版社:%s\n", bookList[i].publisher);
printf("图书种类:%s\n", bookList[i].bookkind);
printf("图书种类编号:%s\n", bookList[i].bookkinds);
printf("价格:%d\n", bookList[i].quantity);
printf("\n");
}
printf("图书种数:%d\n",count);
}
int main() {
loadBookData();
while (1) {
printf("*****欢迎使用图书管理系统*****\n");
printf("1. 添加图书信息\n");
printf("2. 删除图书信息\n");
printf("3. 修改图书信息\n");
printf("4. 查找图书信息\n");
printf("5. 显示图书信息\n");
printf("0. 退出程序\n");
printf("请输入您的选择:");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
addBook();
break;
case 2:
deleteBook();
break;
case 3:
modifyBook();
break;
case 4:
searchBook();
break;
case 5:
displayBook();
break;
case 0:
saveBookData();
printf("感谢使用,再见!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
以上是将修改和查找功能改为使用数据库文件的示例。在程序中使用了SQLite数据库,通过SQLite C接口进行数据库操作。程序中使用的数据库文件名为"book_storage.db",如果该文件不存在,程序会自动创建并初始化数据库表格。
原文地址: http://www.cveoy.top/t/topic/hEKr 著作权归作者所有。请勿转载和采集!