iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现图书管理系统的示例分析
  • 276
分享到

C语言实现图书管理系统的示例分析

2023-06-29 11:06:43 276人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关C语言实现图书管理系统的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下实验要求:图书信息:包括ISBN、书名、主编、出版社、定价2、功能:(1)插入:若表中

这篇文章将为大家详细讲解有关C语言实现图书管理系统的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体内容如下

C语言实现图书管理系统的示例分析

实验要求:

图书信息:包括ISBN、书名、主编、出版社、定价
2、功能:

(1)插入:若表中不存在新图书信息(ISBN不同),则插入(表尾)新图书信息。
(2)删除:按ISBN删除
(3)查找:按ISBN查找
(4)修改:按ISBN查找,然后修改各个属性
(5)排序:按ISBN排序
(6)计数:输出图书信息的个数
(7)导入:从TXT文件中读取已有图书信息(不同的属性之间用tab键隔开)
(8)保存:将表中现有信息保存到txt文件中
(9)打印:在屏幕上显示所有图书信息

扩展功能(选做):

(1)增加按书名、主编、出版社进行查找
(2)增加按书名、主编、出版社、定价排序

界面要求:简单的人机交互界面
 

#include <stdio.h>#include <stdlib.h>#include <string.h>    //头文件    #define OK 1#define ERROR 0#define OVERFLOW -1#define LIST_INIT_SIZE 50#define LISTINCREMENT 10   //宏定义,即定义常量    typedef int status;typedef struct {    char ISBN[15];    char bookname[30];    char writername[10];    char publisher[20];    float price;} ElemType;typedef struct {    ElemType *elem;    int length;    int listsize;    } sqlist;     //定义结构体类型,即  typedef 类型  类型名     status  InitList_Sq(SqList &L)     {   //构造一个空的线性表L。    L.elem=(ElemType *)    malloc(LIST_INIT_SIZE*sizeof(ElemType));    //申请初始化长度的内存     if(!L.elem){    //如果L的序列非空         exit(OVERFLOW);            //说明L被重定义了,抛出溢出     }    L.length=0;    //默认L内有0个元素        L.listsize=LIST_INIT_SIZE;     //默认L的容量为初始化长度     return OK;} int LocateElem_Sq(SqList L,char ISBN[]){    //在顺序表L中遍历查找第1个值与e.ISBN相等的元素的位序,若找到,返回其位序,否则返回0;     for(int i=0;i<L.length;i++){        if(strcmp(ISBN,L.elem[i].ISBN)==0){            return i+1;        }    }    return 0;}status ListInsert_Sq(SqList &L,ElemType e){//元素e插入表尾    ElemType *newbase;    if(LocateElem_Sq(L,e.ISBN)){        return ERROR;    }    if(L.length>=L.listsize) {        newbase =(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));        if(!newbase){            exit(OVERFLOW);        }        L.elem=newbase;        L.listsize+=LISTINCREMENT;    }    L.elem[L.length]=e;    L.length++;    return OK;}status ListDelete_Sq(SqList &L,char ISBN[] ,ElemType &e){   //删除L中ISBN的元素,并返回删除元素;     int i,j;    if((i=LocateElem_Sq(L,ISBN))==0){        return ERROR;    }        e=L.elem[i-1];    for(j=i;j<L.length;j++){        L.elem[j-1]=L.elem[j];    }    L.length--;    return OK;}status SetElem_Sq(SqList &L,int i,ElemType e){   //修改在i的位置的元素     if(i<1||i>L.length){        return ERROR;    }    L.elem[i-1]=e;    return OK;}void sort_ISBN(SqList &L){    //对表中所有元素进行排序;     int i,j,k;    ElemType e;    for(i=0;i<L.length-1;i++){        k=i;        for(j=i+1;j<L.length;j++){            if(strcmp(L.elem[k].ISBN,L.elem[j].ISBN)>0){                k=j;            }        }        if(k!=i){            e=L.elem[i];            L.elem[i]=L.elem[k];            L.elem[k]=e;        }        }} void print(SqList L){    //打印出所有元素    int i;    printf("\n图书信息为:\n");    for(i=0;i<L.length;i++){        printf("%-15s%-30s%-10s%-20s%-6.2f\n",L.elem[i].ISBN,L.elem[i].bookname,L.elem[i].writername,L.elem[i].publisher,L.elem[i].price);     }    }void import(SqList &L,char *filename){    //从文件中导入信息     FILE *fp;    int i;    char ISBN[15],bookname[30],writername[10],publisher[20];    float price;    if((fp=fopen(filename,"r"))==NULL){        printf("文件不存在!\n");        return ;    }    i=0;    while(!feof(fp)){        fscanf(fp,"%s%s%s%s%f",ISBN,bookname,writername,publisher,&price);        strcpy(L.elem[i].ISBN,ISBN);        strcpy(L.elem[i].bookname,bookname);        strcpy(L.elem[i].writername,writername);        strcpy(L.elem[i].publisher,publisher);        L.elem[i].price=price;        i++;    }    L.length=i;    fclose(fp);}void save(SqList L,char *filename){      //把信息保存到文件     FILE *fp;    int i;    if((fp=fopen(filename,"w"))==NULL){        printf("文件不存在!\n");        return ;    }     for(i=0;i<L.length;i++){        fprintf(fp,"%-15s\t%-30s\t%-10s\t%-20s\t%-6.2f\n",L.elem[i].ISBN,L.elem[i].bookname,L.elem[i].writername,L.elem[i].publisher,L.elem[i].price);    }    fclose(fp); } int main(){    int ch;    SqList L;    char ISBN[15],filename[30];    int i;    ElemType e;    InitList_Sq(L);    printf("1. 插入   2. 删除   3. 查找   4. 修改元素   5. 按ISBN排序元素   6. 输出   7. 导入   8. 保存   9. 退出\n");    printf("请选择:");    scanf("%d",&ch);    while(ch!=9){        switch(ch){        case 1:    printf("请输入要增加的元素");                scanf("%s%s%s%s%f",e.ISBN,e.bookname,e.writername,e.publisher,&e.price);                 if(ListInsert_Sq(L,e)==OK){                    printf("插入成功!当前信息为:\n");                    print(L);                }                else {                    printf("表中已存在该图书!\n");                }                 break;        case 2:    printf("请输入删除的图书ISBN:");                scanf("%s",ISBN);                if(ListDelete_Sq(L,ISBN,e)==OK)                {                    printf("删除成功!被删图书为%s\t%s\t%s\t%s\t%.2f\n",e.ISBN,e.bookname,e.writername,e.publisher,e.price);                    print(L);                }                else                    printf("该图书不存在!\n");                break;        case 3:    printf("请输入要查找的图书ISBN:");                scanf("%s",&ISBN);                i=LocateElem_Sq(L,ISBN);                if(i!=0)                {                    printf("该图书为%s\t%s\t%s\t%s\t%.2f\n",L.elem[i-1].ISBN,L.elem[i-1].bookname,L.elem[i-1].writername,L.elem[i-1].publisher,L.elem[i-1].price);                }                else                    printf("该图书不存在!\n");                break;        case 4: printf("请输入要修改的图书ISBN:");                scanf("%s",&ISBN);                i=LocateElem_Sq(L,ISBN);                if(i==0){                    printf("该图书不存在!\n");                }                    else{                    printf("请输入图书的ISBN,书名,主编,出版商和定价");                    scanf("%s%s%s%s%f",e.ISBN,e.bookname,e.writername,e.publisher,e.price);                    SetElem_Sq(L,i,e);                    printf("修改成功,图书信息为:");                    print(L);                     }                break;        case 5:    sort_ISBN(L);                printf("按照ISBN排序后\n");                print(L);                break;        case 6: print(L);                break;        case 7: printf("请输入导入文件名:");                scanf("%s",filename);                import(L,filename);                break;        case 8: printf("请输入导出文件名:");                scanf("%s",filename);                save(L,filename);                break;            default: printf("输入错误,请重新选择\n");        }        printf("1. 插入   2. 删除   3. 查找   4. 修改元素   5. 按ISBN排序元素   6. 输出   7. 导入   8. 保存   9. 退出\n");        printf("请选择:");        scanf("%d",&ch);    }}

关于“C语言实现图书管理系统的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: C语言实现图书管理系统的示例分析

本文链接: https://www.lsjlt.com/news/324525.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作