图书管理系统(简单实现)

该文描述了一个C语言编写的图书管理系统,包括图书信息管理、用户注册与登录功能。系统使用结构体存储图书和用户信息,提供录入、查看、修改、删除图书信息以及排序和退出系统等操作。
摘要由CSDN通过智能技术生成
问题描述:
    该图书管理系统应包含书名,作者名,图书编号,图书出版社,出版时间等信息。
实现功能:
    1.注册功能(用户在使用时需要创建账号)
    2.提示菜单栏
    3.图书信息录入
    4.图书信息浏览
    5.查看所有图书信息
    6.图书信息修改
    7.图书信息删除
    8.图书排序
    9.退出系统
说明:图书最多存放100册

思想:
    按照问题描述可以创建三个结构体,一个用来存放账号信息,一个用来存放图书信息,最后一个用
来使用存放前两个结构体里面的数据。然后按照实现功能的描述去创建对应的函数,需要思考的是函数
的形式参数应该传什么,为什么这样传。最后就是函数代码的实现

    
library.h
#ifndef __LIBRARY_H__
#define __LIBRARY_H__
#include<stdio.h>
#include<stdbool.h>
#define NUM 100 //图书馆书籍最大册数
#define STU_NUM 1000 //学校学生的个数
/*用来保存图书信息*/
typedef struct LIBRARY_INFORMATION{
    int book_number;//图书编号
    char book_name[32];//书名
    char book_author[32];//作者名
    char publishing_house[32];//出版社
    /*出版时间*/
    int year;
    int month;
    int day;
}lib_information;

/*保存账号信息的结构体,账号就是学号,密码自己设定*/
typedef struct LIB_STUDENT_INFORMATION{
    int id; //学生学号
    char password[32];//密码
    //char name[32];//学生姓名,其他需要的话可以自己添加,稍微修改代码就可以了
}lib_stu_acount;

/*这一个结构体是整个程序的核心,它需要包含图书信息与账号信息*/
typedef struct LIBRARY_HOUSE{
    /*主要是用来说明图书馆中书籍的最大册数,需要使用数组,
    因为每一册数都是一个lib_information结构体类型,而且每次录入一册书籍都需要一片空间,
    所以我们这里可以直接使用数组开辟空间,然后我们使用数组中的空间就可以了*/
    lib_information lib_information[NUM];

    //主要用来说明这个图书馆可以有多少个账号,与上面的图书信息同理
    lib_stu_acount student_account[STU_NUM];

    int book_count;//用来记录现在图书馆拥有书籍册数
    int stu_count; //用来记录学生注册图书馆账号的人数
}library_house;

//判断输入的数据是数字还是字符
bool judjment(int *choose);
//菜单栏
void printf_menu();
//登录图书管理系统
int login_lib_house(library_house *lib);
//图书信息录入
void insert_lib_book_information(library_house *lib);
//图书信息查看(根据id)
void search_lib_book_information(library_house *lib);
//所有图书信息查阅
void all_search_lib_book_information(library_house *lib);
//图书休息修改
void modify_lib_information(library_house *lib);
//图书信息删除
void delete_lib_information(library_house *lib);
//图书信息排序根据书籍编号
void sort_lib_information(library_house *lib);

//注册账号
int insert_lib_account(library_house *lib);
//登录与注册菜单栏
void printf_login_register_menu();
#endif
/*library.h文件里面的都是声明*/
main.c
#include "library.h"
int main(){
    library_house lib_house;//创建一个图书馆
    //初始化书籍册数与图书馆账号个数
    lib_house.stu_count=0;
    lib_house.book_count=0;
    int choose; //输入编号,表示你要进行哪些操作

    //登录与注册界面,只有登录成功才能对书籍进行操作
    while(true){
        printf_login_register_menu();
        printf("请输入你的选择:");
        //scanf("%d",&choose);//这里不使用scanf是因为如果你输入的是字符的时候会出现死循环,
                         // 使用fgets()函数与sscanf()配合则可以判断驶入的是数字还是字符

        /*这个是判断你输入的数字是否合法,如果合法则进入switch语句进行登录注册操作
        否者需要从新输入选择*/
        if(!judjment(&choose)){
            printf("\n输入不合法请重新输入: \n");
            continue;
        }
        switch (choose)
        {
            /*登录操作,若果登录成功则进行图书操作*/
        case 1:
        LOOP:if(!login_lib_house(&lib_house)){
                return 0;
        }
            break;
        case 2:
            /* if(insert_lib_account(&lib_house)){
                 printf("请登录图书管理系统\n"); 
                 goto LOOP; 
                 }
             break;*/

            //注册账号,如果注册失败则重新注册,注册成功则使用账号登录 
            while(!insert_lib_account(&lib_house)){
                insert_lib_account(&lib_house);
            }
            goto LOOP;
        case 3://退出系统
            return 0;
        default://输入错误
            printf("输入不合法,请从新输入。");
            continue;
        }
        break;
    }
    while (true ){
        /* code */
        printf_menu();
        printf("请输出你的选择:");
        //scanf("%d",&choose);

        //这一步操作也是判断用户输入的数据是数字还是字符,操作都一样
        if(!judjment(&choose)){
            printf("\n输入不合法请重新输入: \n");
            continue;
        }
        switch (choose){
            /* code */
            case 1:
                insert_lib_book_information(&lib_house);
                continue;
            case 2:
                search_lib_book_information(&lib_house);
                continue;
            case 3:
                all_search_lib_book_information(&lib_house);
                continue;
            case 4:
                modify_lib_information(&lib_house);
                continue;
            case 5:
               delete_lib_information(&lib_house);
                continue;
            case 6:
                sort_lib_information(&lib_house);
                continue;
            case 7:
                return 0;
            default:
                printf("输入信息错误,请从新输入。\n");
                continue;
        }
    }
    return 0;
}
library.c
#include "library.h"
void printf_login_register_menu(){
        printf("\n-----------------------------------------------\n");
        printf("| 1.登录图书管理系统  2.注册账号  3.退出登录注册页面 |");
        printf("\n-----------------------------------------------\n");
}
void printf_menu(){
    printf("\n-------------------------------------------------------------------------\n");
    printf("\n|  1.录入图书信息  2.查询图书信息  3.查看所有图书信息  4.修改图书信息       |\n");
    printf("\n|  5.删除图书信息  6.排序并输出    7.退出图书管理系统                       |\n");
    printf("\n-------------------------------------------------------------------------\n");
}

//登录图书管理系统
int  login_lib_house(library_house *lib){
    int stu_id;
    char password[32];
    int i=0;//当登录失败三次之后会退出系统
    printf("请输入账号: ");
    scanf("%d",&stu_id);
    printf("请输入密码: ");
    scanf("%s",password);

    //如果输入密码正确则退出函数
    for (int  i = 0; i <lib->stu_count; i++){
        if ((stu_id==lib->student_account[i].id)&&(*password)==*(lib->student_account[i].password)){
            return 1;
        }    
    }
    while ((stu_id!=lib->student_account[lib->stu_count].id)||(*password)!=*(lib->student_account[lib->stu_count].password))
    {
        printf("请重新输入账号: ");
        scanf("%d",&stu_id);
        printf("请重新输入密码: ");
        scanf("%s",password);
        i++;
        if(i==3){
            return 0;
        }

    }
}
//图书信息录入
void insert_lib_book_information(library_house *lib){
    printf("请输入图书编号:");
    scanf("%d",&(lib->lib_information[lib->book_count].book_number));

    printf("\n请输入书籍名称:");
    scanf("%s",lib->lib_information[lib->book_count].book_name);

    printf("\n请输入图书作者:");
    scanf("%s",lib->lib_information[lib->book_count].book_author);

    printf("\n请输入图书出版社:");
    scanf("%s",lib->lib_information[lib->book_count].publishing_house);
    printf("\n请输入图书出版时间:");
    scanf("%d.%d.%d",&(lib->lib_information[lib->book_count].year),
        &(lib->lib_information[lib->book_count].month),
        &(lib->lib_information[lib->book_count].day));
    printf("图书录入成功!\n");
    lib->book_count++;
    return;
}
//图书信息查看(根据id)
void search_lib_book_information(library_house *lib){
    int book_id;
    printf("请输入要查看书籍的id编号:");
    scanf("%d",&book_id);
    for(int i=0;i<lib->book_count;i++){
        if (book_id==lib->lib_information[i].book_number){
        printf("图书编号(id): %d\n",lib->lib_information[i].book_number);
        printf(" 图书名称:    %s\n",(lib->lib_information[i].book_name));
        printf(" 图书作者:    %s\n",(lib->lib_information[i].book_author));
        printf("图书出版社:   %s\n",(lib->lib_information[i].publishing_house));
        printf("图书出版时间: %d年%d月%d日\n",lib->lib_information[i].year,
                                            lib->lib_information[i].month,
                                            lib->lib_information[i].day);
                                            return;
        }
    }
    printf("图书编号为%d的书籍不存在",book_id);
    return;
}

//所有图书信息查阅
void all_search_lib_book_information(library_house *lib){
    for (int i = 0; i < lib->book_count; i++){
        printf("\n------------------------------------------------------------\n");
        printf("图书编号(id): %d\n",lib->lib_information[i].book_number);
        printf(" 图书名称:    %s\n",(lib->lib_information[i].book_name));
        printf(" 图书作者:    %s\n",(lib->lib_information[i].book_author));
        printf("图书出版社:   %s\n",(lib->lib_information[i].publishing_house));
        printf("图书出版时间: %d年%d月%d日\n",lib->lib_information[i].year,
                                            lib->lib_information[i].month,
                                            lib->lib_information[i].day);
        printf("\n------------------------------------------------------------\n");
    }
    printf("所有图书信息已经查阅完成!!!");
    return;
}
//图书信息修改(根据图书编号进行修改)
void modify_lib_information(library_house *lib){
    int book_id;
    printf("请输入要查看书籍的id编号:");
    scanf("%d",&book_id);
    for(int i=0;i<lib->book_count;i++){
        if (book_id==lib->lib_information[i].book_number){
            printf("请输入图书编号:");
            scanf("%d",&(lib->lib_information[i].book_number));

            printf("\n请输入书籍名称:");
            scanf("%s",lib->lib_information[i].book_name);

            printf("\n请输入图书作者:");
            scanf("%s",lib->lib_information[i].book_author);

            printf("\n请输入图书出版社:");
            scanf("%s",lib->lib_information[i].publishing_house);
            printf("\n请输入图书出版时间:");
            scanf("%d.%d.%d",&(lib->lib_information[i].year),
                &(lib->lib_information[i].month),
                &(lib->lib_information[i].day));
            printf("修改图书信息成功!!!");
            return;
        }
    }
    printf("图书编号为%d的书籍不存在",book_id);
}
//图书信息删除
void delete_lib_information(library_house *lib){
    int book_id;
    int num;//用于临时存储要删除书籍的位置
    printf("请输入要删除书籍的id编号:");
    scanf("%d",&book_id);
    for(int i=0;i<lib->book_count;i++){
        if (book_id==lib->lib_information[i].book_number){
            num=i;
        }
    }
    if (num<lib->book_count){
        for(int i=num;i<lib->book_count-1;i++){
            lib->lib_information[i]=lib->lib_information[i+1];
            
        }
        return;
    }else{
        printf("编号为%d的图书不存在",book_id);
        return ;
    }
}
//图书信息排序根据书籍编号
void sort_lib_information(library_house *lib){
    for (int i = 0; i < lib->book_count; i++){
        for (int  j = 0; j < lib->book_count-1-i; j++)
        {
            if (lib->lib_information[j].book_number>lib->lib_information[j+1].book_number)
            {
               lib_information  temp=lib->lib_information[j];
               lib->lib_information[j]=lib->lib_information[j+1];
               lib->lib_information[j+1]=temp;
            }
        } 
    }
    printf("排序完成!!!");
    all_search_lib_book_information(lib);
}
//注册账号
int insert_lib_account(library_house *lib){
    char again_password[32];
    printf("注册开始,请输入你的学号:");
    scanf("%d",&(lib->student_account[lib->stu_count].id));
    printf("请设置你的密码:");
    scanf("%s",(lib->student_account[lib->stu_count].password));
    printf("请在此输入你的密码:");
    scanf("%s",again_password);
    if(*again_password==*(lib->student_account[lib->stu_count].password)){
        printf("注册成功!!!\n");
        lib->stu_count++;
        return 1;
    }
    printf("退出系统,请重新注册!\n");
    return 0;
}
bool judjment(int *choose){
        char str[32];
        /*
        fgets 函数从指定的输入流stdin标准输入中读取最多字符,并将其存储到字符串 str 中
        */
        fgets(str ,sizeof(str),stdin);

        /*sscanf(str,"%d",choose):函数从字符串 str 中按照指定的格式字符串 %d 解析数据,
        解析成功返回1,并将解析的数据存储到hoose中。否者返回0*/
        if (sscanf(str,"%d",choose)==1){
            return true;
        }
        return false;
}
后续会更新图书管理系统完全版本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值