图书管理系统->读者

读者用户模块

Str_reader* rea=NULL;

size_t Readers_cnt;//测试

Str_book* boo=NULL;

size_t Book_cnt;

unsigned int acc_rea;//存储当前用户的id

unsigned int ord_rea;//存储当前用户在结构体中的下标

static void reader_menu(void)

{

    system("clear");

    puts("******读者系统******");

    puts("1、个人信息");

    puts("2、检索图书");

    puts("3、借阅图书");

    puts("4、预约图书");

    puts("5、归还图书");

    puts("6、修改密码");

    puts("7、返回上层");

}

//读者显示个人信息

void show_people_reader(void)

{

    printf("id:%-5u 姓名:%-16s 电话:%-11lld 借:%hd %-7d %-7d %-7d 约:%hd %-7d %-7d %-7d 余额:%hd\n",rea[ord_rea].id,rea[ord_rea].name,rea[ord_rea].phone_num,rea[ord_rea].borrow_book_num,rea[ord_rea].borrow_book_id[0],rea[ord_rea].borrow_book_id[1],rea[ord_rea].borrow_book_id[2],rea[ord_rea].booking_book_num,rea[ord_rea].booking_book_id[0],rea[ord_rea].booking_book_id[1],rea[ord_rea].booking_book_id[2],rea[ord_rea].balance);

   

    anykey_continue();

}

//检索图书

void find_book_reader(void)

{

    find_book_manager();

}

//借阅图书,先判断书本是否存在,再判断已借图书是否满三本,再判断书本状态,即是否无预约且在馆或预约id是自己,是则借阅成功,更新书本状态和读者状态,否则借阅失败

void borrow_book_reader(void)

{

    if(rea[ord_rea].borrow_book_num >=3)  //自己借阅数大于等于3

    {

        put_str("借阅图书已达上限,无法继续借阅!",2);

        return;

    }

    unsigned int book_id;

    int i;

    printf("请输入需要借阅的图书id:");

    scanf("%u",&book_id);

    for(i=0;i<Book_cnt;i++)

    {

        if(book_id == boo[i].id) //找到图书

        {

            for(int j=0;j<3;j++) //for(int j=0;j<3;j++) //判断是否在自己借的书当中

            {

                if(rea[ord_rea].borrow_book_id[j]==book_id)

                {

                    put_str("此图书已被自己借阅,不用重复借阅",2);

                    return;

                }

            }

            if((boo[i].book_state==1)||(boo[i].book_state==2&&acc_rea == boo[i].booking_id)) //无预约在馆   有预约在馆,预约人是自己

            {

                printf("已成功借阅该书本\n");

                for(int j=0;j<3;j++) //更新借的情况

                {

                    if(rea[ord_rea].borrow_book_id[j]==0)

                    {

                        rea[ord_rea].borrow_book_id[j] = book_id;

                        rea[ord_rea].borrow_book_num++;

                        //printf("读者信息已更新\n");

                        break;

                    }

                }

                for(int j=0;j<3;j++)  //更新预约的情况

                {

                    if(rea[ord_rea].booking_book_id[j]==book_id)

                    {

                        rea[ord_rea].booking_book_id[j] = 0;

                        rea[ord_rea].booking_book_num--;

                        //printf("读者信息已更新\n");

                        break;

                    }

                }

                boo[i].borrow_book_cnt ++;

                boo[i].borrowe_id = acc_rea;

                boo[i].booking_id = 0;

                boo[i].book_state =3; //无预约离馆

                //put_str("书本信息已更新!",Delay_Time);

                _find_book_number(i);

                show_people_reader();

                return;

            }

            else

            {

                put_str("该图书暂时不在可借阅状态!",Delay_Time);

                return;

            }

        }

    }

    if(i==Book_cnt)

    {

        put_str("未检索到该图书,请检查id是否正确!",Delay_Time);

        return;

    }

    return;

}

//预约图书,先判断书本是否存在,在判断已预定图书是否满三本,再判断书本状态,即是否无预约且在馆,是则预约成功,否则预约失败,提示信息“预约失败”

void  booking_book_reader(void)//预约更新逻辑如上

{

    if((rea[ord_rea].borrow_book_num >=3)&&(rea[ord_rea].booking_book_num >=3))  //自己借阅数,预约数都大于等于3

    {

        put_str("借阅图书和预约图书均已达上限!!!",Delay_Time);

        return;

    }

    unsigned int book_id;

    int i;

    printf("请输入需要预约的图书id:");

    scanf("%u",&book_id);

    for(i=0;i<Book_cnt;i++)

    {

        if(book_id == boo[i].id) //书存在

        {

            for(int j=0;j<3;j++) //for(int j=0;j<3;j++) //判断是否在自己借的书当中

            {

                if(rea[ord_rea].borrow_book_id[j]==book_id)

                {

                    put_str("此图书已被自己借阅,不用预约",2);

                    return;

                }

            }

            for(int j=0;j<3;j++) //判断是否在自己预约的书当中

            {

                if(rea[ord_rea].booking_book_id[j]==book_id)

                {

                    put_str("此图书已被自己预约,不用重复预约",2);

                    return;

                }

            }

            if((boo[i].book_state==1)&&(rea[ord_rea].borrow_book_num < 3)) // 无预约在馆 自己借书数小于3,直接借走

            {

                printf("借书数不足3本,无需预约,已成功借阅该书本\n");

                for(int j=0;j<3;j++) //更新借的情况

                {

                    if(rea[ord_rea].borrow_book_id[j]==0)

                    {

                        rea[ord_rea].borrow_book_id[j] = book_id;

                        rea[ord_rea].borrow_book_num++;

                        //printf("读者信息已更新\n");

                        break;

                    }

                }

                for(int j=0;j<3;j++)  //更新预约的情况

                {

                    if(rea[ord_rea].booking_book_id[j]==book_id)

                    {

                        rea[ord_rea].booking_book_id[j] = 0;

                        rea[ord_rea].booking_book_num--;

                        //printf("读者信息已更新\n");

                        break;

                    }

                }

                boo[i].borrow_book_cnt ++;

                boo[i].borrowe_id = acc_rea;

                boo[i].booking_id = 0;

                boo[i].book_state =3; //无预约离馆

                //put_str("书本信息已更新!",3);

                _find_book_number(i);

                show_people_reader();

                return;

            }

            else if((boo[i].book_state==1||boo[i].book_state==3)&&(rea[ord_rea].booking_book_num < 3))// 无预约在馆 无预约离馆 自己预约数小于3

            {

                for(int j=0;j<3;j++)  //更新预约的情况

                {

                    if(rea[ord_rea].booking_book_id[j]==0)

                    {

                        rea[ord_rea].booking_book_id[j] = book_id;

                        rea[ord_rea].booking_book_num++;

                        //printf("读者信息已更新\n");

                        break;

                    }

                }

                boo[i].booking_id = acc_rea;

                boo[i].book_state +=1;

                //put_str("书本信息已更新!",Delay_Time);

                printf("预约成功!\n");

                _find_book_number(i);

                show_people_reader();

                return;

            }

            else if(rea[ord_rea].booking_book_num >=3)  //自己预约数大于3

            {

                put_str("预约图书已达上限,无法继续预约!",Delay_Time);

                return;

            }

            else

            {

                put_str("该图书暂时不在可预约状态!",Delay_Time);

                return;

            }

        }

    }

    if(i==Book_cnt)

    {

        put_str("未检索到该图书,请检查id是否正确!",Delay_Time);

        return;

    }

    return;

}

void backe_book_reader(void)

{

    if(0==rea[ord_rea].borrow_book_num )  //自己借阅数0

    {

        put_str("没有可归还的图书!!",Delay_Time);

        return;

    }

    unsigned int book_id;

    printf("请输入需要归还的图书id:");

    scanf("%u",&book_id);

    for(int i=0;i<Book_cnt;i++)

    {

        if(book_id == boo[i].id)  //找到书本

        {

            if(acc_rea == boo[i].borrowe_id) //判断书本的借阅人是否是自己

            {

                boo[i].book_state -=2;

                boo[i].borrowe_id = 0;

                for(int j=0;j<3;j++)

                {

                    if(rea[ord_rea].borrow_book_id[j] == book_id)

                    {

                        rea[ord_rea].borrow_book_id[j] = 0;

                        rea[ord_rea].borrow_book_num--;

                    }

                }

                printf("归还成功!\n");

                _find_book_number(i);

                show_people_reader();

                return;

            }

            else

            {

                put_str("您并非该书借阅者!",Delay_Time);

                return;

            }

        }

    }

    put_str("未检索到该图书,请检查id是否正确!",Delay_Time);

    return;

}

void change_past_reader(void)

{

    char passwd1[Length],passwd2[Length];

    printf("请输入原密码:");

    get_pwd(passwd1,PASSWD_LEN);

    if(strcmp(passwd1,rea[ord_rea].pwd))  //不同出1

    {

        put_str("\n输入的密码不对!",Delay_Time);

        return;

    }

    printf("请输入新密码(%d位以内):",PASSWD_LEN-1);

    //get_passwd(passwd1,PASSWD_LEN);

    if(!get_pwd(passwd1,PASSWD_LEN))

    {

        put_str("\n密码长度过长,修改密码失败!",Delay_Time);

        return;

    }

    if(!(strcmp(passwd1,rea[ord_rea].pwd)))

    {

        printf("新密码与原密码相同!\n");

    }

    printf("请再次输入新密码:");

    get_pwd(passwd2,PASSWD_LEN);

   

    if(strcmp(passwd1,passwd2))

    {

        put_str("两次输入的密码不符,修改密码失败!",Delay_Time);

        return;

    }

    strcpy(rea[ord_rea].pwd,passwd1);

    put_str("修改密码成功!",Delay_Time);

}//读者修改密码函数

void login_reader(void)//输入账号,判断,输入密码,判断

{

    if(0==Readers_cnt)

    {

        put_str("没有读者!",Delay_Time);

        return;

    }

    unsigned int acc;

    char pwd[Length];

    int i;

    printf("请输入读者id:");

    scanf("%u",&acc);

    for(i=0;i<Readers_cnt;i++)

    {

        if(acc == rea[i].id)

        {

            printf("请输入密码:");

            get_pwd(pwd,PASSWD_LEN); //隐形输入密码

            if(strcmp(pwd,rea[i].pwd) == 0)

            {

                put_str("读者登录成功!",Delay_Time);

                acc_rea=acc;

                ord_rea=i;

                break;

            }

            else

            {

                put_str("\n密码输入有误,请检查!",Delay_Time);

                return;

            }

        }

       

    }

    if(i==Readers_cnt)

    {

        put_str("id输入有误,请检查!",Delay_Time);

        return;

    }

    for(;;)

    {

        reader_menu();

        switch(get_cmd('1','7'))

        {

        case '1':

            show_people_reader();

            break;

        case '2':

            find_book_reader();

            break;

        case '3':

            borrow_book_reader();

            break;

        case '4':

            booking_book_reader();

            break;

        case '5':

            backe_book_reader();

            break;

        case '6':

            change_past_reader();

            break;

        default:    save_book();load_book();save_reader();load_reader();

            return;

        }

    }

    //save_reader();

}//读者登录函数

高校图书管理系统中的读者信息管理系统(简称RMS)是图书馆信息化建设的重要组成部分,主要用于管理图书馆内的读者资料、借阅记录、罚款等相关事务。它通常包括以下几个核心功能: 1. **读者注册与管理**:允许新读者注册,录入个人信息如姓名、学号、身份证号、联系方式等,并对现有读者信息进行维护和更新。 2. **借书与还书**:支持读者借阅图书,记录借阅历史,设置借阅期限,以及提醒读者按时归还,避免逾期罚款。 3. **图书查询与定位**:提供检索功能,帮助读者快速找到所需书籍,包括作者、书名、出版社等信息。 4. **图书续借与预约**:读者可以在系统中申请续借或预借图书,管理员审批后完成操作。 5. **罚款管理**:对于逾期未还的图书,系统会自动计算并记录罚款,方便后期催缴。 6. **权限管理**:根据读者身份(学生、教师等)分配不同的借阅权限,可能涉及不同借阅数量、类型等限制。 7. **数据分析与报告**:系统能生成统计报告,分析读者阅读习惯、借阅趋势等,为图书馆决策提供依据。 8. **自助服务**:部分现代系统还支持自助借还机、在线预约、电子图书借阅等功能,提高服务效率。 相关问题: 1. 图书馆管理系统中如何确保读者信息的安全性? 2. 该系统如何处理读者遗失图书的情况? 3. 如何通过RMS提升高校图书馆的服务质量和用户体验?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值