虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > C语言实现图书管理系统

C语言实现图书管理系统
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了C语言实现图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下

一、分析过程

首先此程序需要实现输入、增加、删除、查询、输出的五大功能,则首先需要设置一个菜单键,让用户可以选择不同的功能,完成不同的操作,然后编写不同的函数实现不同的功能,在这个过程中注意要人性化,让用户方便,直观的进行操作。

二、算法

三、函数模块介绍

 1录入模块:本模块主要执行信息的录入功能

 2浏览模块:本模块主要是执行把已有信息输出浏览功能

 3查询模块:本模块主要是按照图书名查找图书的相关信息

 4删除模块:主要是执行删除图书信息的功能

 5退出模块:方便用户离开

四、源程序

    #include<stdio.h> #include<math.h> #include<string.h> #include<stdlib.h> struct books_list {
    char author[20];
    /*作者名*/ char bookname[20];
    /*书名*/ char publisher[20];
    /*出版单位*/ char pbtime[15];
    /*出版时间*/ char loginnum[10];
    /*登陆号*/ float price;
    /*价格*/ char classfy[10];
    /*分类号*/ struct books_list * next;
    /*链表的指针域*/ }
    ;
    struct books_list * Create_Books_Doc();
    /*新建链表*/ void InsertDoc(struct books_list * head);
    /*插入*/ void DeleteDoc(struct books_list * head , int num);
    /*删除*/ void Print_Book_Doc(struct books_list * head);
    /*浏览*/ void search_book(struct books_list * head);
    /*查询*/ void save(struct books_list * head);
    /*保存数据至文件*/ /*新建链表头节点*/ struct books_list * Create_Books_Doc() {
    struct books_list * head;
    head=(struct books_list *)malloc(sizeof(struct books_list));
    /*分配头节点空间*/ head->next=NULL;
    /*头节点指针域初始化,定为空*/ return head;
    }
    /*保存数据至文件*/ void save(struct books_list * head) {
    struct books_list *p;
    FILE *fp;
    p=head;
    fp=fopen("data.txt","w+");
    /*以写方式新建并打开 data.txt文件*/ fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓n");
    /*向文件输出表格*/ fprintf(fp,"┃登录号┃ 书 名 ┃ 作 者┃ 出版单位 ┃ 出版时间 ┃分类号┃ 价格 ┃n");
    fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫n");
    /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/ while(p->next!= NULL) {
    p=p->next;
    fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);
    }
    fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛n");
    fclose(fp);
    printf(" 已将图书数据保存到 data.txt 文件n");
    }
    /*插入*/ void InsertDoc(struct books_list *head) {
    /*定义结构体指针变量 s指向开辟的新结点首地址 p为中间变量*/ struct books_list *s, *p;
    char flag='Y';
    /*定义flag,方便用户选择重复输入*/ p=head;
    /*遍历到尾结点,p指向尾结点*/ while(p->next!= NULL) {
    p=p->next;
    }
    /*开辟新空间,存入数据,添加进链表*/ while(flag=='Y'||flag=='y') {
    s=(struct books_list *)malloc(sizeof(struct books_list));
    printf("n 请输入图书登陆号:");
    fflush(stdin);
    scanf("%s",s->loginnum);
    printf("n 请输入图书书名:");
    fflush(stdin);
    scanf("%s",s->bookname);
    printf("n 请输入图书作者名:");
    fflush(stdin);
    scanf("%s",s->author);
    printf("n 请输入图书出版社:");
    fflush(stdin);
    scanf("%s",s->publisher);
    printf("n 请输入图书出版时间:");
    fflush(stdin);
    scanf("%s",s->pbtime);
    printf("n 请输入图书分类号:");
    fflush(stdin);
    scanf("%s",s->classfy);
    printf("n 请输入图书价格:");
    fflush(stdin);
    scanf("%f",&s->price);
    printf("n");
    p->next=s;
    /*将新增加的节点添加进链表*/ p=s;
    /*p指向尾节点,向后移*/ s->next=NULL;
    printf(" ━━━━ 添加成功!━━━━");
    printf("n 继续添加?(Y/N):");
    fflush(stdin);
    scanf("%c",&flag);
    printf("n");
    if(flag=='N'||flag=='n') {
    break;
    }
    else if(flag=='Y'||flag=='y') {
    continue;
    }
    }
    save(head);
    /*保存数据至文件*/ return;
    }
    /*查询操作*/ void search_book(struct books_list *head) {
    struct books_list * p;
    char temp[20];
    p=head;
    if(head==NULL || head->next==NULL) /*判断数据库是否为空*/ {
    printf(" ━━━━ 图书库为空!━━━━n");
    }
    else {
    printf("请输入您要查找的书名: ");
    fflush(stdin);
    scanf("%s",temp);
    /*指针从头节点开始移动,遍历至尾结点,查找书目信息*/ while(p->next!= NULL) {
    p=p->next;
    if(strcmp(p->bookname,temp)==0) {
    printf("n图书已找到!n");
    printf("n");
    printf("登录号: %stn",p->loginnum);
    printf("书名: %stn",p->bookname);
    printf("作者名: %stn",p->author);
    printf("出版单位: %stn",p->publisher);
    printf("出版时间: %stn",p->pbtime);
    printf("分类号: %stn",p->classfy);
    printf("价格: %.2ftn",p->price);
    }
    if(p->next==NULL) {
    printf("n查询完毕!n");
    }
    }
    }
    return;
    }
    /*浏览操作*/ void Print_Book_Doc(struct books_list * head) {
    struct books_list * p;
    if(head==NULL || head->next==NULL) /*判断数据库是否为空*/ {
    printf("n ━━━━ 没有图书记录! ━━━━nn");
    return;
    }
    p=head;
    printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━┳━━━━┓n");
    printf("┃登录号┃ 书 名 ┃ 作 者┃ 出版单位 ┃ 出版时间 ┃分类号┃ 价格 ┃n");
    printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━╋━━━━┫n");
    /*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/ while(p->next!= NULL) {
    p=p->next;
    printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-6.6s┃%.2f ┃n",p->loginnum,p->bookname,p->author,p->publisher,p->pbtime,p->classfy,p->price);
    /*循环输出表格*/ }
    printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━┻━━━━┛n");
    printf("n");
    }
    /*删除操作*/ void DeleteDoc(struct books_list * head) {
    struct books_list *s,*p;
    /*s为中间变量,p为遍历时使用的指针*/ char temp[20];
    int panduan;
    /*此变量用于判断是否找到了书目*/ panduan=0;
    p=s=head;
    printf(" [请输入您要删除的书名]:");
    scanf("%s",temp);
    /*遍历到尾结点*/ while(p!= NULL) {
    if(strcmp(p->bookname,temp)==0) {
    panduan++;
    break;
    }
    p=p->next;
    }
    if(panduan==1) {
    for(;
    s->next!=p;
    ) /*找到所需删除卡号结点的上一个结点*/ {
    s=s->next;
    }
    s->next=p->next;
    /*将后一节点地址赋值给前一节点的指针域*/ free(p);
    printf("n ━━━━ 删除成功! ━━━━n");
    }
    else /*未找到相应书目*/ {
    printf(" 您输入的书目不存在,请确认后输入!n");
    }
    return;
    }
    int main() {
    struct books_list * head;
    char choice;
    head=NULL;
    for(;
    ;
    ) /*实现反复输入选择*/ {
    printf(" ┏━┓━━━━━━━━━━━━━━━━━━━┏━┓n");
    printf(" ┃ ┃ tony 图书馆管理系统 ┃ ┃n");
    printf(" ┃ ┗━━━━━━━━━━━━━━━━━━━┛ ┃n");
    printf(" ┃ [1]图书信息录入 ┃n");
    printf(" ┃ ┃n");
    printf(" ┃ [2]图书信息浏览 ┃n");
    printf(" ┃ ┃n");
    printf(" ┃ [3]图书信息查询 ┃n");
    printf(" ┃ ┃n");
    printf(" ┃ [4]图书信息删除 ┃n");
    printf(" ┃ ┃n");
    printf(" ┃ [5]退出系统 ┃n");
    printf(" ┃ ┃n");
    printf(" ┃ ┃n");
    printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━┛n");
    printf(" 请选择:");
    fflush(stdin);
    scanf("%c",&choice);
    if(choice=='1') {
    if(head==NULL) {
    head=Create_Books_Doc();
    }
    InsertDoc(head);
    }
    else if(choice=='2') {
    Print_Book_Doc(head);
    }
    else if(choice=='3') {
    search_book(head);
    }
    else if(choice=='4') {
    DeleteDoc(head);
    }
    else if(choice=='5') {
    printf("n");
    printf(" ━━━━━━━━ 感谢使用图书管理系统 ━━━━━━━━n");
    break;
    }
    else {
    printf(" ━━━━ 输入错误,请重新输入!━━━━n");
    }
    }
    return 0;
    }

五、课程设计总结

通过这一周的课程设计,我感受到做程序一定要有自己的清晰计划,否则会无处用力,感觉会很乱,当高屋建瓴的有计划后,然后开始认真严谨的设计每一个模块,要知道用户的一切输入都是不可信的,必须想得要全面,要仔细的对待每一个细节,任何一个差错都有可能让程序崩溃,这其中有许多的困难,刚开始感觉到束手无策,但是放一放,换个角度想就会豁然开朗,我觉得从这个中感觉到了充实,满足感,也提醒我以后要多多练练,多上机,积累经验,争取设计出更多的好的程序。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)
  • C语言职工管理系统设计
  • C语言学生管理系统源码分享
  • C语言编写学生成绩管理系统
  • C语言实现简单学生管理系统
  • C语言利用结构体数组实现学生成绩管理系统
  • 学生成绩管理系统C语言代码实现
  • C语言通讯录管理系统完整版
  • C语言职工信息管理系统源码
  • C语言学生成绩管理系统源代码
相关热词搜索: C语言图书管理系统 C语言图书管理 C语言管