图书管理系统 (c语言实现) (全部代码)

  • 直接上代码不解释

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define AVAILABLE 0
#define UNAVAILABLE 1
#define MAXNAME 30
#define CLEAR "cls"

typedef struct book{
    char *name;
    int id;
    int count;
    int status;
    struct book *next;
}Book;

void welcome();
void error(char *);           // [异常提醒]
char land();                  // [主页面项目]
int usrstudent();             // [学生入口]返回 0表示返回主页 1表示继续执行本函数
int usrmanager();             // [管理员入口]返回 0表示返回主页 1表示继续执行本函数
int viewbook();               // [查看图书]返回打印的图书个数     失败返回-1
int addbook();                // [注册图书]添加图书成功 返回图书id  失败返回-1
int modbook();                // [修改图书]修改图书信息   成功后返回id  失败 -1
int delbook();                // [注销图书]删除成功 返回被删除图书的id 失败返回-1
void printbook(Book *);       // [打印图书]
Book *lookup(char *, int);    // [搜索图书]
int borrowbook();             // [借阅图书]
int returnbook();             // [归还图书]

Book *head = NULL;
int nbook = 0;
int main(){
    
    welcome();
    return 0;
}
void welcome(){
    printf("*************************欢迎使用图书管理系统*************************\n");
    while(1){
        printf("-------------------------------------\n");
        printf("请输入项目前编号执行相关操作:\n");
        printf("\n[1] 管理员入口\n\n[2] 学生入口\n\n[0] 退出\n\n");
        switch(land()){
            case '1':
                while(1){
                    if(usrmanager()){
                        continue;
                    }else{
                        break;
                    }
                 }
                break;
            case '2':
                while(1){
                    if(usrstudent()){
                        continue;
                    }else{
                        break;
                    }
                }
                break;
            case '0':
                exit(0);
            default:
                error("采集项目参数失败");
        }
    }
}
char land(){
    char c, flag;
    int i;
    while(1){
        for(i = 0; (c = getchar()) != '\n'; flag = c, ++i)
            ;
        if(i == 1){
            if(flag == '1' || flag == '2' || flag == '0'){
                return flag;
            }
        }else if(i == 0){
            continue;
        }
        error("[请输入命令: 1 / 2 / 0 选择项目]");
    }
    return '\0';
}
void error(char *s){
    fprintf(stderr, "%s\n", s);
}
char dostudent(){
    char c, flag;
    int i;
    while(1){
        for(i = 0; (c = getchar()) != '\n'; flag = c, ++i )
            ;
        if(i == 1){
            if(flag == '1' || flag == '2' || flag == '3' || flag == '
  • 18
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的数据结构图书管理系统C语言代码实现,包括书籍的增加、删除、查询和修改等功能。具体实现方法如下: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义图书结构体 typedef struct book { int id; // 编号 char name[20]; // 书名 char author[20]; // 作者 char press[20]; // 出版社 float price; // 价格 struct book *next; } Book; // 定义全局变量 Book *head = NULL; // 头结点指针 // 函数声明 void add_book(); void delete_book(); void search_book(); void modify_book(); void display_book(); void save_book(); void load_book(); // 主函数 int main() { int choice; // 加载图书数据 load_book(); while (1) { printf("\n"); printf("1. Add book\n"); printf("2. Delete book\n"); printf("3. Search book\n"); printf("4. Modify book\n"); printf("5. Display books\n"); printf("6. Save books\n"); printf("7. Exit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_book(); break; case 2: delete_book(); break; case 3: search_book(); break; case 4: modify_book(); break; case 5: display_book(); break; case 6: save_book(); break; case 7: // 退出程序前保存数据 save_book(); exit(0); default: printf("Invalid choice!\n"); } } return 0; } // 添加图书 void add_book() { Book *p, *tail; // 创建新结点 p = (Book *) malloc(sizeof(Book)); if (p == NULL) { printf("Memory allocation failed!\n"); return; } // 输入图书信息 printf("Enter book id: "); scanf("%d", &p->id); printf("Enter book name: "); scanf("%s", p->name); printf("Enter book author: "); scanf("%s", p->author); printf("Enter book press: "); scanf("%s", p->press); printf("Enter book price: "); scanf("%f", &p->price); // 将新结点插入链表尾部 p->next = NULL; if (head == NULL) { head = p; } else { tail = head; while (tail->next != NULL) { tail = tail->next; } tail->next = p; } printf("Book added successfully!\n"); } // 删除图书 void delete_book() { int id; Book *p, *prev; // 输入图书编号 printf("Enter book id: "); scanf("%d", &id); // 查找对应结点 p = head; prev = NULL; while (p != NULL) { if (p->id == id) { break; } prev = p; p = p->next; } if (p == NULL) { printf("Book not found!\n"); return; } // 删除结点 if (prev == NULL) { head = p->next; } else { prev->next = p->next; } free(p); printf("Book deleted successfully!\n"); } // 查找图书 void search_book() { int id; Book *p; // 输入图书编号 printf("Enter book id: "); scanf("%d", &id); // 查找对应结点 p = head; while (p != NULL) { if (p->id == id) { printf("Book id: %d\n", p->id); printf("Book name: %s\n", p->name); printf("Book author: %s\n", p->author); printf("Book press: %s\n", p->press); printf("Book price: %.2f\n", p->price); break; } p = p->next; } if (p == NULL) { printf("Book not found!\n"); } } // 修改图书 void modify_book() { int id; Book *p; // 输入图书编号 printf("Enter book id: "); scanf("%d", &id); // 查找对应结点 p = head; while (p != NULL) { if (p->id == id) { break; } p = p->next; } if (p == NULL) { printf("Book not found!\n"); return; } // 修改结点信息 printf("Enter new book name: "); scanf("%s", p->name); printf("Enter new book author: "); scanf("%s", p->author); printf("Enter new book press: "); scanf("%s", p->press); printf("Enter new book price: "); scanf("%f", &p->price); printf("Book modified successfully!\n"); } // 显示图书 void display_book() { Book *p; printf("--------------------\n"); printf("ID | Name | Author | Press | Price\n"); printf("--------------------\n"); // 遍历链表输出信息 p = head; while (p != NULL) { printf("%d | %s | %s | %s | %.2f\n", p->id, p->name, p->author, p->press, p->price); p = p->next; } } // 保存图书 void save_book() { FILE *fp; Book *p; // 打开文件 fp = fopen("book.txt", "w"); if (fp == NULL) { printf("File open failed!\n"); return; } // 遍历链表写入文件 p = head; while (p != NULL) { fprintf(fp, "%d %s %s %s %.2f\n", p->id, p->name, p->author, p->press, p->price); p = p->next; } // 关闭文件 fclose(fp); printf("Books saved successfully!\n"); } // 加载图书 void load_book() { FILE *fp; Book *p, *tail; int id; char name[20], author[20], press[20]; float price; // 打开文件 fp = fopen("book.txt", "r"); if (fp == NULL) { printf("File open failed!\n"); return; } // 读取文件内容并插入链表 while (fscanf(fp, "%d %s %s %s %f", &id, name, author, press, &price) != EOF) { p = (Book *) malloc(sizeof(Book)); if (p == NULL) { printf("Memory allocation failed!\n"); return; } p->id = id; strcpy(p->name, name); strcpy(p->author, author); strcpy(p->press, press); p->price = price; p->next = NULL; if (head == NULL) { head = p; } else { tail = head; while (tail->next != NULL) { tail = tail->next; } tail->next = p; } } // 关闭文件 fclose(fp); printf("Books loaded successfully!\n"); } ``` 此代码实现了一个简单的图书管理系统,可以通过菜单选择进行图书的增加、删除、查询、修改、显示、保存和加载等操作。其中,图书的信息以链表形式存储,保存在文件book.txt中,程序启动时会将文件中的数据加载到链表中,程序结束时会将链表中的数据保存到文件中,以便下次启动时使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值