结构体综合练习

完成图书管理系统
1) 定义图书结构体,包括成员  编号  书名  作者  出版日期
2) 完成图书的录入 (添加)
3) 能输出单条图书信息
4) 能整体输出所有图书信息
5) 完成图书的查询 (按编号  按书名)
6) 完成图书的修改 (根据编号修改)
7) 完成图书的删除 (删除某个指定编号的图书)
8) 完成图书的排序 (按编号)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//时间结构体
struct date
{
    int year;
    int month;
    int day;
};
//图书结构体
struct  book
{
    char name[100];
    int number;
    char writer[52];
    struct date pub_date;
};
//录入图书函数
void insert_book(struct book *p, int n)
{
    scanf("%s%d%s%d%d%d", p[n].name,&p[n].number, p[n].writer, 
            &p[n].pub_date.year, &p[n].pub_date.month, &p[n].pub_date.day);
    if()    
}
//输出某本图书信息
void print_book(struct book *p)
{
    printf("\n书名: %s\n编号: %d\n作者: %s\n出版日期: %4d-%02d-%02d\n",p->name, p->number, p->writer, p->pub_date.year, p->pub_date.month, p->pub_date.day);

}
//输出全部图书信息
void print_all_book(struct book *p, int n)
{
    int i;
    for(i = 0; i < n; i++)
    {
        printf("\n书名: %s\n编号: %d\n作者: %s\n出版日期: %4d-%02d-%02d\n",p[i].name,p[i].number, p[i].writer, 
            p[i].pub_date.year, p[i].pub_date.month, p[i].pub_date.day);
    }
}
//通过编号查找图书位置
int find_by_number(struct book *p, int n, int number)
{
    int i;
    for(i = 0; i < n; i++)
    {
        if( number == p[i].number)
        {    
            return i;
        }
    }
}
//通过名称查找图书位置
int find_by_name(struct book *p, int n, char *name)
{
    int i;
    for(i = 0; i < n; i++)
    {
        int x = strcmp( p[i].name, name);
        if( x == 0)
        {
            return i;
        }
    }
}
//根据编号修改图书信息
void update_book(struct book *p, int num)
{
    printf("输入修改图书信息\n");
    scanf("%s%d%s%d%d%d", p[num].name,&p[num].number, p[num].writer, 
            &p[num].pub_date.year, &p[num].pub_date.month, &p[num].pub_date.day);    
}
//删除某个指定编号的图书
void delete_book(struct book *p,int x, int n)
{
    int i;
    for(i = n; i < x; i++)
    {
        p[i] = p[i + 1];
    }
}
//按编号排序图书
void sort_by_number(struct book *p, int n)
{
    int i, j; 
    for(i = 0; i < n-1; i++)
    {
        for(j = 0; j < n-i-1;j++)
        {
            if(p[j].number > p[j + 1].number)
            {
                struct book  t;
                t = p[j];
                p[j] = p[ j + 1 ];
                p[ j + 1 ] = t;
            }
        }
    }
}
int main()
{
    struct book b[1000] = {0};
    int count = 0;
    int n;
    while(1)
    {
        printf("\n输入:\n1--->录入图书\n2--->输出全部图书信息\n3--->编号查找图书\n4--->名称查找图书\n5--->根据编号修改图书信息\n6--->删除某个指定编号的图书\n7--->按编号排序图书\n8--->退出\n");
        scanf("%d",&n);
        if( n == 1 )
        {    
            printf("输入图书信息:\n");
            insert_book(b, count);
            count++;
        }
        else if( n == 2 )
        {
            print_all_book(b, count);
        }
        else if( n == 3 )//通过编号查找图书位置
        {
            int number;
            printf("输入编号:\n");
            scanf("%d", &number);
            int num = find_by_number(b, count, number);
            printf("所在位置: %d\n", num);
            print_book(&b[num]);
        }
        else if( n == 4 )
        {
            char name[100];
            printf("输入姓名:\n");
            scanf("%s", name);
            int num = find_by_name(b, count, name);
            printf("所在位置: %d\n", num);
            print_book(&b[num]);
        }
        else if( n == 5 )//根据编号修改图书信息
        {
            int num;
            printf("输入修改图书编号:\n");
            scanf("%d", &num);
            int x = find_by_number(b, count, num);
            update_book(b, x);
        }
        else if( n == 6 )//删除某个指定编号的图书
        {
            int num;
            printf("输入删除图书编号:\n");
            scanf("%d", &num);
            int x = find_by_number(b, count, num);
            delete_book(b,count, x);
            count--;
        }
        else if( n == 7)//按编号排序图书
        {
            sort_by_number(b, count);
        }
        else if( n == 8)
        {
            return 0;
        }
                
    }    
}


 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值