图书管理系统,数据本地存储
#include<stdio.h> #include<stdlib.h> #include<string.h> #define ZFNUM 20 struct book { char isbn[ZFNUM]; char bookname[ZFNUM]; float price; book *next; }; void s_db_input(char *s_db) { char ch[ZFNUM + 100] = { 0 }; while (!(scanf("%s", ch) && (strlen(ch)<ZFNUM))) { printf("长度超出,重新输入\n>>>"); } strcpy(s_db, ch); } void bookname_input(book* p) { char* ch = (char*)malloc(128*sizeof(char)); if (ch) { while (!(scanf("%s", ch) && (strlen(ch)<ZFNUM))) { printf("长度超出,重新输入书名\n>>>"); } strcpy(p->bookname, ch); } } void isbn_input(book* p) { char* ch = (char*)malloc(128 * sizeof(char)); if (ch) { while (!(scanf("%s", ch) && (strlen(ch) < ZFNUM))) { printf("长度超出,重新输入ISBN\n>>>"); } strcpy(p->isbn, ch); } } void price_input(book* p) { int fh = 0; while (!fh) { fh = scanf("%f", &p->price); if (!fh) { printf("输入错误,重新输入价格\n"); printf(">>>"); fflush(stdin); } } } void g_input(book* p) { int t = 0; scanf("%d", &t); switch (t) { case 1: { printf("请输入书名>>>"); bookname_input(p); } break; case 2: { printf("请输入ISBN>>>"); isbn_input(p); } break; case 3: { printf("请输入价格>>>"); price_input(p); } break; default: printf("输入错误\n"); } } void writedata(book *wt,FILE *pw) { if (pw) { while (wt) { fprintf(pw, "%s\t\t", wt->bookname); fprintf(pw, "%s\t\t", wt->isbn); fprintf(pw, "%f\t\n", wt->price); wt = wt->next; } fclose(pw); } else printf("库中无书\n"); } book* readdata() { FILE *pw = fopen("config.txt", "r"); book head = { 0 }; if (pw) { while (1) { book* p = (book*)malloc(sizeof(book)); strcpy(p->bookname, "0"); fscanf(pw, "%s", p->bookname); if (!strcmp(p->bookname, "0")) { free(p); break; } fscanf(pw, "%s", p->isbn); fscanf(pw, "%f", &p->price); p->next = head.next; head.next = p; } return head.next; fclose(pw); } } void z() { book head = { 0 }; printf("(添加图书信息)\n"); printf("输入“0”以结束添加\n\n"); printf("********************\n"); while (1) { book* p = (book*)malloc(sizeof(book)); if (p) { printf("输入书名>>>"); bookname_input(p); if (!(strcmp(p->bookname, "0"))) { free(p); break; } printf("输入ISBN>>>"); isbn_input(p); printf("输入价格>>>"); price_input(p); p->next = head.next; head.next = p; printf("已添加图书信息\n\n"); } else printf("内存出错\n"); } printf("录入结束\n"); FILE *pw = fopen("config.txt", "a+"); writedata(head.next,pw); printf("***********************************************************************************\n\n"); } void s() { printf("(删除图书信息)\n"); printf("输入“0”以结束删除\n\n"); book head = { 0 }; head.next=readdata(); if (head.next) { while (1) { printf("请选择输入ISBN或书名:(1.ISBN 2.书名)\n>>>"); int xz = 0; scanf("%d", &xz); if (!xz) break; switch (xz) { case 1: { char s_db[ZFNUM]; book* p = &head; book* last_p = &head; int flag = 0; printf("输入ISBN:>>>"); s_db_input(s_db); while (p) { if (!(strcmp(p->isbn, s_db))) { printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n"); last_p->next = p->next; p->next = NULL; printf("已删除\n"); flag = 1; } last_p = p; p = p->next; } if (!flag) printf("书库无此书\n"); } break; case 2: { char s_db[ZFNUM]; book* p = &head; book* last_p = &head; int flag = 0; printf("输入书名:>>>"); s_db_input(s_db); while (p) { if (!(strcmp(p->bookname, s_db))) { printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n"); last_p->next = p->next; p->next = NULL; printf("已删除\n"); flag = 1; } last_p = p; p = p->next; } if (!flag) printf("书库无此书\n"); } break; default: printf("输入错误\n"); } } FILE *pw = fopen("config.txt", "w+"); writedata(head.next, pw); } else printf("库中无书\n"); printf("***********************************************************************************\n\n"); } void g() { printf("(更改图书信息)\n"); printf("输入“0”以结束修改\n\n"); book head = { 0 }; head.next = readdata(); if (head.next) { while (1) { printf("请选择输入ISBN或书名:(1.ISBN 2.书名)>>>"); int xz = 0; scanf("%d", &xz); if (!xz) break; switch (xz) { case 1: { char s_db[ZFNUM]; book* p = &head; printf("输入ISBN:>>>"); s_db_input(s_db); int flag = 0; while (p) { if (!(strcmp(p->isbn, s_db))) { flag = 1; printf("已查到位置!\n"); printf("------------------\n"); printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n"); printf("请选择要修改的信息:(1.书名 2.ISBN 3.价格)\n"); g_input(p); printf("已修改!\n"); } p = p->next; } if (!flag) printf("书库无此书\n"); } break; case 2: { char s_db[ZFNUM]; book* p = &head; printf("输入书名:>>>"); s_db_input(s_db); int flag = 0; while (p) { if (!(strcmp(p->bookname, s_db))) { flag = 1; printf("已查到位置\n"); printf("------------------\n"); printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n"); printf("请选择要修改的信息:(1.书名 2.ISBN 3.价格)\n"); g_input(p); printf("已修改!\n"); } p = p->next; } if (!flag) printf("书库无此书\n"); } break; default: printf("输入错误\n"); } } FILE *pw = fopen("config.txt", "w+"); writedata(head.next, pw); } else printf("库中无书\n"); printf("***********************************************************************************\n\n"); } void c() { printf("(查询图书信息)\n"); printf("输入“0”以结束查找\n\n"); book head = { 0 }; head.next = readdata(); if (head.next) { while (1) { printf("请选择输入ISBN或书名或其它:(1.ISBN 2.书名 3.输出所有图书信息)\n>>>"); int xz = 0; scanf("%d", &xz); if (!xz) break; printf("***********************************************************************************\n\n"); switch (xz) { case 1: { char s_db[ZFNUM]; book* p = &head; book* last_p = &head; int flag = 0; printf("输入ISBN:>>>"); s_db_input(s_db); while (p) { if (!(strcmp(p->isbn, s_db))) { flag = 1; printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n\n"); } p = p->next; } if (!flag) printf("书库无此书\n"); } break; case 2: { char s_db[ZFNUM]; book* p = &head; book* last_p = &head; int flag = 0; printf("输入书名:>>>"); s_db_input(s_db); while (p) { if (!(strcmp(p->bookname, s_db))) { flag = 1; printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n\n"); } p = p->next; } if (!flag) printf("书库无此书\n"); } break; case 3: { book* p = head.next; while (p) { printf("书名:%s \n", p->bookname); printf("ISBN:%s \n", p->isbn); printf("价格:%.2f \n", p->price); printf("------------------\n\n"); p = p->next; } printf("\n输出结束\n"); } break; default: printf("输入错误\n"); } } } else printf("库中无书\n"); printf("***********************************************************************************\n\n"); } int main() { int xz; printf("简易图书管理---@kyaa111 作品\n"); printf("提供本地存储功能\n"); printf("请输入数字选择功能:\n"); while (1) { printf("1.增(添加图书信息)2.删(删除图书信息)3.改(更改图书信息)4.查(查询图书信息)\n"); printf("\n>>>"); int fh = 0; while (!fh) { fh = scanf("%d", &xz); if (!fh) { printf("输入错误,注意格式\n>>>"); fflush(stdin); xz = 0; } } printf("***********************************************************************************\n\n"); switch (xz) { case 1: z(); break; case 2: s(); break; case 3: g(); break; case 4: c(); break; default: printf("输入错误\n"); } } return 0; }