标题:图书管理系统 查询图书部分
只看楼主
安然o
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2016-12-7
结帖率:80%
已结贴  问题点数:18 回复次数:23 
图书管理系统 查询图书部分
大学计算机基础  陈建勋 000001 高等教育出版 2005年6月6日 30
语言大学        黄远林 000002 电子工业出版 2004年3月6日 25
计算机网络技术  宋文官 000003 中国铁道出版 2010年6月6日 28
数据库系统概述  萨师煊 000004 高等教育出版 2001年7月8日 40
计算机组成原理  白中英 000005 科学出版社   2008年6月1日 25
数据结构        刘大友 000006 清华大学出版 2009年1月6日 30
这是文本、



#include<stdio.h>
#include<cstdlib>
#include<stdlib.h>
#include<string.h>
struct book
{
    char name[20];                              //书名
    char writer[10];                            //作者
    char num[8];                               //书号
    char press[10];                             //出版社
    char outtime[10];                           //出版日期
    char price[3];                             //图书价格
}book[50];
void main()
{
    void query();
    void B_name();
    void Writer();
    void Number();
    void Press();
    query();
}
void query()                                  //查询书籍
{
    int lookup;
    printf("@#$%@$#%@#$%@#$%&*@#$%&*@#$%&*@#$%&*@#$%&*@#$%&#@&\n");
    printf("#####1.按书名查找。*******  2.按作者查找。  ######\n");
    printf("#####3.按书号查找。*******  4.按出版社查找。######\n");
    printf("#####5.退出查询功能。                       ######\n");
    printf("@#@$%&*@#%*@#%&*@#%^%*@#%!%&#@@^#@#^!%!@#$%$^&^!%@\n");
    printf("please choice!!!: ");                                      //选择按什么方式查找书籍
        scanf("%d",&lookup);
    while(lookup>5||lookup<1)
    {
        printf("input error!!!请重新输入!!!: \n");
        scanf("%d",&lookup);
    }
        switch(lookup)
        {
        case 1:B_name();
            break;
        case 2:Writer();
            break;
        case 3:Number();
            break;
        case 4:Press();
            break;
        case 5:                             //返回主菜单
            break;
        }
}

void B_name()                               //按书名查找
{
    int i,k;
    char b_name[10];
        FILE*fp;
    fp=fopen("text.txt","rb");
    k=0;
    printf("please input the book name: ");
        scanf("%s",&b_name);
        for(i=0;((fp=fopen("text.txt","rb"))==NULL);i++)
        {
            fread(&book[i],sizeof(struct book),1,fp);
            if(strcmp(book[i].name,b_name)==0)
            {
                printf("书名:%s  作者:%s  书号:%d  出版社:%s  出版日期:%s  单价:%s\n",book[i].name,book[i].writer,book[i].num,book[i].press,book[i].outtime,book[i].price);
                k++;
            }
        }
            if(k==0)
                printf("没有此书!!!请重新输入!!!");
            fclose(fp);
            query();                           //返回选择菜单
    system("pause");
}

void Writer()                                 //按作者查找
{
    int i,k;
    char writer[10];
        FILE*fp;
    fp=fopen("text.txt","rb");
    printf("please input the writer: ");
        scanf("%s",&writer);
        for(i=0;((fp=fopen("text.txt","rb"))==NULL);i++)
        {
            fread(&book[i],sizeof(struct book),1,fp);
            if(strcmp(book[i].writer,writer)==0)
            {
                printf("书名:%s  作者:%s  书号:%s  出版社:%s  出版日期:%s  单价:%s\n",book[i].name,book[i].writer,book[i].num,book[i].press,book[i].outtime,book[i].price);
                k++;
            }
        }
            if(k==0)
                printf("没有此书!!!请重新输入!!!");
                fclose(fp);
            query();                              //返回选择菜单
    system("pause");
}

void Number()                                 //按书号查找
{
    int i,k;
    char num[6];
        FILE*fp;
    fp=fopen("text.txt","rb");
    printf("please input the book num: ");
        scanf("%s",&num);
        for(i=0;((fp=fopen("text.txt","rb"))==NULL);i++)
        {
            fread(&book[i],sizeof(struct book),1,fp);
            if(strcmp(book[i].num,num)==0)
            {
                printf("书名:%s  作者:%s  书号:%s  出版社:%s  出版日期:%s  单价:%s\n",book[i].name,book[i].writer,book[i].num,book[i].press,book[i].outtime,book[i].price);
                k++;
            }
        }
            if(k==0)
                printf("没有此书!!!请重新输入!!!");
                fclose(fp);
            query();                          //返回选择菜单
    system("pause");
}

void Press()                                  //按出版社查找
{
    int i,k;
    char press[10];
        FILE*fp;
    fp=fopen("text.txt","rb");
    printf("please input the press: ");
        scanf("%s",&press);
        for(i=0;((fp=fopen("text.txt","rb"))==NULL);i++)
        {
            fread(&book[i],sizeof(struct book),1,fp);
            if(strcmp(book[i].press,press)==0)
            {
                printf("书名:%s  作者:%s  书号:%s  出版社:%s  出版日期:%s  单价:%s\n",book[i].name,book[i].writer,book[i].num,book[i].press,book[i].outtime,book[i].price);
                k++;
            }
        }
            if(k==0)
                printf("没有此书!!!请重新输入!!!");
                fclose(fp);
            query();                         //返回选择菜单
    system("pause");
}
搜索更多相关主题的帖子: 清华大学 计算机基础 数据库系统 计算机网络 高等教育 
2016-12-28 21:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
什么情况???~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-28 21:52
安然o
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2016-12-7
得分:0 
回复 2楼 九转星河
查询了  一直显示  无图书   但是不知道是哪错了
2016-12-28 21:55
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
明了,问题还是像你上个贴吹版说的一样,你的文件构造读取文件只能分段读取文件~~~stremp里面的比较时整个结构体内容做比较了~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-28 22:20
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:8 
改好部分了,先发部分代码~~我还得感谢吹版开导呢吹版的方法就是行~~

程序代码:
void B_name()                               //按书名查找
{
    int flag=1;
    char b_name[20];

    char buff[256];
    struct book *book = (struct book *)buff;


    FILE*fp;

    fp=fopen("text.txt","rb");

    printf("please input the book name: ");

    scanf("%s",&b_name);

    while (fgets(buff, 256, fp) != NULL)
    {
        if (strncmp(b_name,book->name,strlen(b_name))==0)
        {
            printf("%.*s ",sizeof(book->name),book->name);
            printf("%.*s ",sizeof(book->writer),book->writer);
            printf("%.*s ",sizeof(book->num),book->num);
            printf("%.*s ",sizeof(book->press),book->press);
            printf("%.*s ",sizeof(book->outtime),book->outtime);
            printf("%.*s ",sizeof(book->price),book->price);
            printf("\n");
            flag=0;
            break;
        }
    }
    if(flag)
        printf("没有此书!!!请重新输入!!!");

    fclose(fp);

    system("pause");

    query();                           //返回选择菜单
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-28 22:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
不清楚这个文本文件是怎样生成的
book结构与实际不符
大学计算机基础  陈建勋 000001 高等教育出版 2005年6月6日 30
struct book
{
    char name[20];//书名.........实际 16字节
    char writer[10];//作者.......实际 7字节
    char num[8];//书号...........实际 7字节
    char press[10];//出版社......实际 13字节
    char outtime[10];//出版日期..实际 13字节
    char price[3];//图书价格.....实际 3字节
};

改写了B_name(),其他类似。

#include<stdio.h>
//#include<cstdlib>
#include<stdlib.h>
#include<string.h>

struct book
{
    char name[16];                              //书名
    char writer[7];                            //作者
    char num[7];                               //书号
    char press[13];                             //出版社
    char outtime[13];                           //出版日期
    char price[3];                             //图书价格
} book[50];

void query();
void B_name();
void Writer();
void Number();
void Press();
void SetStr(char *);

void main()
{
    query();
}

void query()                                  //查询书籍
{
    int lookup;
    printf("@#$%@$#%@#$%@#$%&*@#$%&*@#$%&*@#$%&*@#$%&*@#$%&#@&\n");
    printf("#####1.按书名查找。*******  2.按作者查找。  ######\n");
    printf("#####3.按书号查找。*******  4.按出版社查找。######\n");
    printf("#####5.退出查询功能。                       ######\n");
    printf("@#@$%&*@#%*@#%&*@#%^%*@#%!%&#@@^#@#^!%!@#$%$^&^!%@\n");
    printf("please choice!!!: ");                                      //选择按什么方式查找书籍
    scanf("%d",&lookup);
    while(lookup>5||lookup<1)
    {
        printf("input error!!!请重新输入!!!: \n");
        scanf("%d",&lookup);
    }
    switch(lookup)
    {
        case 1:
            B_name();
            break;
        case 2:
            Writer();
            break;
        case 3:
            Number();
            break;
        case 4:
            Press();
            break;
        case 5:                             //返回主菜单
            break;
    }
}

void SetStr(char *buff)
{
    char *p;
    for (p=buff; *p; p++)
        if (*p==' ' || *p=='\r' || *p=='\n' || *p=='\t')
            *p = 0;
}

void B_name()                               //按书名查找
{
    FILE *fp=fopen("text.txt","rb");
    if (fp == NULL)
    {
        puts("打开文件失败");
        return;
    }
    char buff[256], b_name[20];
    struct book *book=(struct book *)buff;
    printf("please input the book name: ");
    scanf("%s", b_name);
    while (fgets(buff, 256, fp) != NULL)
    {
        SetStr(buff);
        if (strncmp(book->name, b_name, strlen(b_name)) == 0)
        {
            printf("书名 ..... %s\n",book->name);
            printf("作者 ..... %s\n",book->writer);
            printf("书号 ..... %s\n",book->num);
            printf("出版社 ... %s\n",book->press);
            printf("出版日期 . %s\n",book->outtime);
            printf("单价 ..... %s\n\n",book->price);
        }
    }
    fclose(fp);
    system("pause");
    query();
}

void Writer()                                 //按作者查找
{
}

void Number()                                 //按书号查找
{
}

void Press()                                  //按出版社查找
{
}

[此贴子已经被作者于2016-12-29 05:19编辑过]

2016-12-28 23:19
安然o
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2016-12-7
得分:0 
回复 6楼 吹水佬
在下佩服
2016-12-28 23:59
安然o
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2016-12-7
得分:0 
回复 5楼 九转星河
2016-12-29 00:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 8楼 安然o
查找一体化~这个把代码大大简化了~还得感谢吹版~
诶,链表做多了,就是想到用链表指针,一时想不到不用指针怎么直接调用整个结构体实现此功能了,不过还是感觉结构体指针较为方便,我平时都是这么调用函数实现查找不确定的结构体成员的功能的~
程序代码:
#include<stdio.h>
#include<cstdlib>
#include<stdlib.h>
#include<string.h>
#define MEMBER(A) (char*)A-(char *)head
typedef struct BOOK
{
    char name[16];                              //书名
    char writer[7];                            //作者
    char num[7];                               //书号
    char press[13];                             //出版社
    char outtime[13];                           //出版日期
    char price[2];                             //图书价格
}BOOK;
BOOK book;
BOOK *head=&book;

void query();
void Book_search(int);
void SetStr(char *buff);

void main()
{
    query();
}
void query()                                  //查询书籍
{
    int lookup;
    printf("@#$%@$#%@#$%@#$%&*@#$%&*@#$%&*@#$%&*@#$%&*@#$%&#@&\n");
    printf("#####1.按书名查找。*******  2.按作者查找。  ######\n");
    printf("#####3.按书号查找。*******  4.按出版社查找。######\n");
    printf("#####5.退出查询功能。                       ######\n");
    printf("@#@$%&*@#%*@#%&*@#%^%*@#%!%&#@@^#@#^!%!@#$%$^&^!%@\n");
    printf("please choice!!!: ");                                      //选择按什么方式查找书籍

    while(scanf("%d",&lookup)!=1&&lookup>5||lookup<1)
    {
        fflush(stdin);
        printf("input error!!!请重新输入!!!: \n");
    }
        switch(lookup)
        {
            case 1:Book_search(MEMBER(head->name));break;
            case 2:Book_search(MEMBER(head->writer));break;  
            case 3:Book_search(MEMBER(head->num));break;  
            case 4:Book_search(MEMBER(head->press));break;  
            case 5:break;
        }
}
void SetStr(char *buff)
{
    char *p;
    for (p=buff;*p;p++)
        if (*p==' '||*p=='\r'||*p=='\n'||*p=='\t')
            *p='\0';
}
void Book_search(int n)                              //按书名查找
{
    int flag=1;
    char s[20]="\0";

    char buff[256];


    BOOK *book = (BOOK *)buff;

    FILE*fp;

    if ((fp=fopen("text.txt","rb"))==NULL)
    {
        printf("打开失败\n");
        exit(0);
    }

    printf("please input the book name: ");

    scanf("%s",s);

    while (fgets(buff, 256, fp) != NULL)
    {
        SetStr(buff);
        if (strcmp(s,buff+n)==0)
        {
            printf("%s ",book->name);
            printf("%s ",book->writer);
            printf("%s ",book->num);
            printf("%s ",book->press);
            printf("%s ",book->outtime);
            printf("%s ",book->price);
            printf("\n");
            flag=0;
        }
    }

    if(flag)
        printf("没有此书!!!请重新输入!!!");

    fclose(fp);

    system("pause");

    system("cls");

    query();                           //返回选择菜单
}



[此贴子已经被作者于2016-12-29 00:51编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-29 00:19
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
写个按关键字模糊搜索

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct _BOOK_
{
    char name[16];                              //书名
    char writer[7];                            //作者
    char num[7];                               //书号
    char press[13];                             //出版社
    char outtime[13];                           //出版日期
    char price[3];                             //图书价格
} BOOK, *PBOOK;

char buff[256];
PBOOK book = (PBOOK)buff;

void query();
void SetStr(char *);
void book_search(char *);

void main()
{
    query();
}

void query()                                  //查询书籍
{
    char *member[] = {book->name,book->writer,book->num,book->press,book->outtime,book->price};
    char cmd;
    while (1)
    {
        printf("------------------------------------\n");
        printf("-- 1.按书名查找    2.按作者查找   --\n");
        printf("-- 3.按书号查找    4.按出版社查找 --\n");
        printf("-- 5.退出查询功能                 --\n");
        printf("------------------------------------\n");
        printf("please choice!!!: ");
        while (((cmd=getch()) < '1') || (cmd > '5')) ;
        if (cmd == '5')
            break;
        book_search(member[cmd-'1']);
    }
}

void SetStr(char *buff) //将空格、回车、换行、制表符转为'\0'
{
    char *p;
    for (p=buff; *p; p++)
        if (*p==' ' || *p=='\r' || *p=='\n' || *p=='\t')
            *p = 0;
}

void book_search(char *member)
{
    FILE *fp=fopen("text.txt","rb");
    if (fp == NULL)
    {
        puts("打开文件失败");
        return;
    }
    char keywords[20];
    printf("\nEnter search keywords: ");
    scanf("%s", keywords);
    printf("\n");
    while (fgets(buff, 256, fp) != NULL)
    {
        SetStr(buff);
        if (strstr(member, keywords) != NULL)
        {
            printf("书名 ..... %s\n",book->name);
            printf("作者 ..... %s\n",book->writer);
            printf("书号 ..... %s\n",book->num);
            printf("出版社 ... %s\n",book->press);
            printf("出版日期 . %s\n",book->outtime);
            printf("单价 ..... %s\n\n",book->price);
        }
    }
    fclose(fp);
}


[此贴子已经被作者于2016-12-29 09:28编辑过]

2016-12-29 08:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473067-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.488461 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved