• 用链表实现部分图书信息管理


    #include<stdio.h>
    #include<string.h>
    #include<conio.h>
    #include<stdlib.h>
    #define N sizeof(struct book)
    #define PT "%-5d %10s %6s %6s %8s %3d 
    ",p->num,p->name,p->where,p->author,p->pub,p->count
    struct book /*图书信息*/
    {
        int num; /*书号*/
        char name[10]; /*书名*/
        char where[10]; /*所在书库*/
        char author[15]; /*作者*/
        char pub[20]; /*出版社*/
        int count; /*数量*/
        struct book *next;
    };
    typedef struct book *L;
    
    void save(L head);
    
    /*输出模块*/
    void print(struct book *p0)
    {
        struct book *p;
        p=p0->next;
        printf("
    
    		^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");
        printf("
    
    图书编号---图书名称---所在书库----作者----出版社---数量
    ");
        while(p)
        {
            printf("%-5d %10s %6s %6s %8s %3d 
    ",p->num,p->name,p->where,p->author,p->pub,p->count);
            p=p->next;
        }
        getch();
    }
    /*输入模块*/
    struct book *creat()
    {
        struct book *head,*p1,*p2;
        int i=0;
        head=p2=(struct book *)malloc(N);
        head->next=NULL;
        printf("
    
    		录入图书信息");
        printf("
    	---------------------------------------");
        while(1)
        {
            p1=(struct book *)malloc(N);
            printf("
     请输入图书编号(书号为0结束): ");
            scanf("%d",&p1->num);
            if(p1->num!=0)
            {
                printf("
    
    书名 所在书库 作者 出版社 图书数量
    ");
                scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);
                p2->next=p1;
                p2=p1;
                i++;
            }
            else
            break;
        }
        p2->next=NULL;
        free(p1);
        printf("
    		----------------------------------------");
            printf("
    		 %d 种书录入完毕",i);
        getch();
        return head;
    }
    /*查找模块*/
    void find(struct book *p0)
    {
        char name[10];
        int flag=1;
        struct book *p;
        p=p0->next;
        printf("请输入要查找的书名:
    ");
        scanf("%s",name);
        for(p=p0;p;p=p->next)
        if(strcmp(p->name,name)==0)
        {
            printf("
    
    图书编号---图书名称---所在书库----作者----出版社---数量
    ");
            printf(PT);
            flag=0;
            break;
        }
        if(flag)
            printf("
     暂无此图书信息
    ");
        getch();
    }
    /*删除模块*/
    void del(struct book *p0)
    {
        char name[10];
        int flag=1;
        struct book *p;
        p=p0;
        printf("请输入要删除的书名:
    ");
        scanf("%s",name);
        while(p!=NULL)
        {
            if(strcmp(p->name,name)==0)
            {
                p0->next=p->next; /*后续节点连接到前驱节点之后*/
                free(p);
                printf("	该书资料已删除.");
                flag=0;
                break;
            }
            p0=p;
            p=p->next;
        }
        save(p0);
        if(flag)
            printf("
    	无此图书信息。");
            getch();
    }
    /*增加模块*/
    void insert(L head)
    {
        int k,flag;
        L p,pre;
        
        if(pre == NULL)
            pre = head;
    
        while(1)
        {
            flag = 0;
            printf("
     请输入要增加的图书编号(书号为0 退出): ");
            scanf("%d",&k);
            if(k!=0)
            {
                pre = head->next;
                while(pre) //找到重号
                {
                    if(k == pre->num){
                        printf("	该书已存在");
                        system("PAUSE");
                        flag = 1;
                        break;
                    }
                    pre = pre->next;
                }
                if(flag)
                    break;
                p = new book;
                printf("
    
    书名 所在书库 作者 出版社 图书数量
    ");
                p->num = k;
                scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);
                p->next = head->next;
                head->next = p;
                printf("	已成功插入.");
            }
            else 
                break;
        }
        save(head);
    }
    /*修改模块*/
    void modify(struct book *p0)
    {
        char name[10];
        int flag=1;
        int choice;
        struct book *p;
        p=p0->next;
        printf("请输入要修改的书名:
    ");
        scanf("%s",name);
        while(p!=NULL&&flag==1)
        {
            if(strcmp(p->name,name)==0)
            {
                printf("
    	请选择要修改的项:");
                printf("
    	 1.修改图书编号
    ");
                printf("
    	 2.修改图书所在书库
    ");
                printf("
    	 3.修改图书作者
    ");
                printf("
    	 4.修改图书出版社
    ");
                printf("
    	 5.修改图书库存量
    ");
                scanf("%d",&choice);
                switch(choice)
                {
                    case 1:
                    {
                        printf("
     请输入新的图书编号:");
                        scanf("%d",&p->num); break;
                    }
                    case 2:
                    {
                        printf("
     请输入新的图书书库:");
                        scanf("%s",p->where); break;
                    }
                    case 3:
                    {
                        printf("
     请输入新的图书作者:");
                        scanf("%s",p->author); break;
                    }
                    case 4:
                    {
                        printf("
     请输入新的图书出版社:");
                        scanf("%s",p->pub); break;
                    }
                    case 5:
                    {
                        printf("
     请输入新的图书库存量:");
                        scanf("%d",&p->count); break;
                    }
                }
                printf("
    	该项已成功修改。
    	 新的图书信息:");
                printf("
    
    图书编号---图书名称---所在书库----作者----出版社---数量
    ");
                printf(PT);
                flag=0;
                save(p0);
            }
            p = p->next;
        }
        if(flag) printf("
    	暂无此图书信息。");
        getch();
    }
    /*读文件*/
    struct book *read_file()
    {
        int i=0;
        L p,p1,head=NULL;
        FILE *fp;
        if((fp=fopen("library.txt","r"))==NULL)
        {
            printf("
    
    
    
    
     	********库文件不存在,请创建!**********");
            getch();
            return NULL;
        }
        head=new book;
        head->next=NULL;
        printf("
     已有图书信息:");
        printf("
    
    图书编号---图书名称---所在书库----作者----出版社---数量
    ");
        p=new book; /*开辟空间以存放的取得信息*/
        p1 = head;
        while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF)
        {
            printf("%d %s %s %s %s %d
    ",p->num,p->name,p->where,p->author,p->pub,p->count);
            i++;
            p1->next = p;
            p1 = p;
            p=new book;
        }
        p1->next = NULL;
        delete p;
        fclose(fp);
        printf("
     共种%d 图书信息",i);
        printf("
    
    
     文件中的信息以正确读出。按任意键进入主菜单。");
        getch();
        return (head);
    }
    /*保存文件*/
    void save(L head)
    {
        FILE *fp;
        L p;
        fp=fopen("library.txt","w"); /*以只写方式打开二进制文件*/
        if(fp==NULL) /*打开文件失败*/
        {
            printf("
    =====>打开文件失败!
    ");
            getch();
            return ;
        }
        else{
            for(p=head->next;p!=NULL;p=p->next)
                fprintf(fp,"%d %s %s %s %s %d
    ",p->num,p->name,p->where,p->author,p->pub,p->count);
        }
        fclose(fp);
    }
    void Begin()
    {
        L head=new book, p;
        int choice=1;
        head->next = NULL;
        p=read_file();
        if(p)
            head = p;
        do
        {
            system("cls");
            printf("		----------Welcome---------
    ");
            printf("
    
    	欢迎您,图书管理员.
    
    ");
            printf("
    	 请选择:");
            printf("
    	 1.查询图书信息
    ");
            printf("
    	 2.修改图书信息
    ");
            printf("
    	 3.增加图书信息
    ");
            printf("
    	 4.删除图书信息
    ");
            printf("
    	 5.显示所有图书信息
    ");
            printf("
    	 0.退出系统
    ");
            scanf("%d",&choice);
            switch(choice)
            {
                case 1: find(head); break;
                case 2: modify(head); break;
                case 3: insert(head); break;//已改完
                case 4: del(head); break;
                case 5: print(head); break;
                case 0: system("cls");
                printf("
    
    
    
    
    	^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!
    
    ");
                system("PAUSE");
                exit(0);
                default :
                    printf("
    
    		输入有误!!
    ");
                    system("PAUSE");system("cls"); break;
            }
        }while(choice!=0);
        save(head);
    }
    void About()
    {
        system("cls");
        printf("
    
    
    ");
        printf("		          开发人员           
    
    ");
        printf("		****************************
    
    ");
        printf("		*****      XXXXXX      *****
    
    ");
        printf("		*****      XXXXXX      *****
    
    ");
        printf("		*****      XXXXXX      *****
    
    ");
        printf("		****************************
    
    ");
        getch();
    }
    void Introduction()
    {
        system("cls");
        printf("
    
    
    ");
        printf("		          系统介绍           
    
    ");
        printf("		*****************************
    
    ");
        printf("		    本系统主要实现图书信息   
    
    ");
        printf("		 查找 增加 删除 修改 浏览功能 
    
    ");
        printf("		*****************************
    
    ");
        getch();
    }
    void Welcome()
    {
        while(1)
        {
            int input;
            system("cls");
            printf("
    
    
    		图书馆管理系统
    ");
            printf("
    		1.管理系统
    ");
            printf("
    		2.开发人员
    ");
            printf("
    		3.系统简介
    ");
            printf("
    		4.退出
    ");
            printf("
    	请输入你的选项:");
            scanf("%1d", &input);
            switch(input){
                case 1:
                    system("cls"); Begin(); break;
                case 2:
                    About(); break;
                case 3:
                    Introduction(); break;
                case 4:
                    exit(0);
                default :
                    printf("
    
    		输入有误!!
    ");
                    system("PAUSE"); system("cls"); break;
            }    
        }
    }
    
    int main()
    {
        system("mode con  cols=70 lines=30");
        Welcome();
        return 0;
    }
  • 相关阅读:
    二进制原码、反码、补码
    Activiti5.22.0扩展支持达梦数据库
    ABP token过期时间修改 放在appsettings.json
    巧用reduce 实现 checkbox 选中勾选联动
    用filter: dropshadow()给透明图片添加阴影
    MySQL安装后文本20220628
    记录U盘安装centos系统的 uefi的启动我过程
    openssl 生成自签证书及查看证书细节
    给脚本添加到环境变量_让你的脚本可以在任意地方都可执行的几个方法
    使用u盘安装centos7.2踩坑过程
  • 原文地址:https://www.cnblogs.com/didideblog/p/7059915.html
Copyright © 2020-2023  润新知