C语言管理系统——图书管理系统(1)

2,082 阅读7分钟

「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

运行结果

主页面

进入时页面,选择管理员模式或者客户模式 image.png\

管理员模式

进入管理员模式需要输入密码(初始密码mm) image.png
进入系统管理员可以录入图书信息,查看图书信息,修改图书信息,还可以修改管理密码 image.png

录入图书信息

先输入需要录入图书数量 image.png
录入图书信息 image.png 信息录入完成有提示
image.png\

查看图书\

image.png 1.按书名查找\

image.png
2.按书号查找
image.png 3.查看所有未借阅图书
image.png 4.查看所有已经借阅图书
image.png 5.查看所有图书
image.png

修改图书信息

进入修改图书信息页面 image.png 1.按书名进行修改
image.png 2.按书号进行修改
image.png 3.如果不存在给出提示重新输入
image.png

删除图书

删除图书主页 image.png
1.按书名删除
image.png 2.按书号删除
image.png 3.是否删除所有图书信息
image.png

修改密码

image.png

客户模式

客户模式下的主页 image.png

查看图书信息(同管理员权限)

image.png

借阅图书

image.png 1.按书名借阅
image.png
2.按书号借阅 image.png

定义结构体与全局变量

结构体数组中对图书的定义主要分书号、书名、出版社、时间、借阅状态,除了书名与出版社为字符串数组,其他均为int类型

struct book  //定义图书结构体
{
	int num;  // 书号
	char name[20];  //书名
	char publish[20];  // 出版社
    struct time //定义时间结构体
	{
		int year,month,day; //年月日
	}t;
	int lend;// 定义 借的状态
}bk[20];

int N;   // N可以理解为 录入的图书的数量
char code[20] = "mm";  //密码

主菜单

这一块没有什么好说的,用int类型存储用户操作选择,返回结果

int mainmenu()   //主菜单
 {   
    int x;  
    printf("\n\n\n\n");   
    printf("\t\t|-------------------------------------------------------------|\n");
    printf("\t\t|                     |\n");   
    printf("\t\t|    ======================    |\n");   
    printf("\t\t|      欢迎光临图书管理系统     |\n");   
    printf("\t\t|    ======================    |\n");   
    printf("\t\t|                     |\n");   
    printf("\t\t|      1.管理员模式          |\n");   
    printf("\t\t|      2.客户模式           |\n");   
    printf("\t\t|      3.退出系统           |\n");   
    printf("\t\t|--------------------------------------------------------------|\n");   
    printf("\n\t\t请输入您的选择:");   
    scanf("%d",&x);   
    return x; 
}
 

密码验证与密码修改

密码验证这一块主要是通过对比输入的密码与存储已有的密码,如果相同返回1,不相同返回0,这里简单介绍一下strcmp函数,作用是比较两个字符串,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

int codeverify()  //密码验证
{ 
    char mm[20];   //用来存放输入的密码
     printf("\n");   
     printf("\t\t     ======================    \n");   
     printf("\t\t      欢迎使用管理员模式      \n");   
     printf("\t\t     ======================    \n");   
     printf("\n");   
     printf("\t\t     请输入密码:"); 
    scanf("%s",&mm);
    if(!strcmp(mm,code))  //比较输入的密码 是否 与原密码相同
    {
        return 1;
    }
    else
    {
        return 0;
    }

}

修改密码这一块主要用了三个字符数组分别存储用户输入密码、第一次输入新密码、第二次输入新密码,首先比较输入密码与原始密码是不是一样的,只有是一样的情况下才能进行修改密码操作,不一样直接提示密码输入错误不允许修改,如果是一样的开始进行输入两次密码,比较两次输入的密码,如果是一样的说明修改成功给出提示,否则提示两次密码不一样终止本次密码修改。

int changecode()   //修改密码
{
    char code_temp[20];//用来存放用户输入的密码
    char new_code[20];   //存放第一次新密码
    char new_code1[20];  //存放第二次新密码

    printf("请输入原始密码:\n");
    scanf("%s",&code_temp);
    if(!strcmp(code_temp,code))  //比较原始密码 与 用户输入的密码
    {
        printf("请输入新密码:\n");
        scanf("%s",&new_code);
        printf("请再输一次:\n");
        scanf("%s",&new_code1);
        if(!strcmp(new_code1,new_code)) //比较 两次修改后输入的密码
        {
                strcpy(code,new_code); //将 新密码 拷贝给 原始密码
                printf("密码修改成功,请牢记,按任意键返回。。。\n");
                getch();
                return 0;
        }
        else
        {
                printf("错误!两次输入的密码不一致,按任意键返回。。。\n");
                getch();
                return 1;
        }
    }
    else
    {
        printf("原始密码错误,按任意键返回。。。\n");
        getch();
    }
}

管理员模式

管理员页面

这是管理员模式下的主菜单

int adm()  //管理员模式
{   
    int x; 
    system("cls");
    printf("\n\n\n\n");   
    printf("\t\t|-------------------------------------------------------------|\n");   
    printf("\t\t|                     |\n");   
    printf("\t\t|    ======================    |\n");   
    printf("\t\t|        管理员模式        |\n");  
    printf("\t\t|    ======================    |\n");   
    printf("\t\t|                     |\n");   
    printf("\t\t|      1.录入图书信息        |\n");  
    printf("\t\t|      2.查看图书信息        |\n");   
    printf("\t\t|      3.修改图书信息        |\n");   
    printf("\t\t|      4.修改管理密码        |\n");   
    printf("\t\t|      5.退出系统          |\n");  
    printf("\t\t|-------------------------------------------------------------|\n");   
    printf("\n\t\t请输入您的选择:");   
    scanf("%d",&x);   
    return x; 
} 

修改图书菜单

显示修改图书菜单,按1.按书名查找,2.按书号查找,3.显示删除图书菜单

/***********修改图书信息*********/
void change()
{
    int x;
    do
    {
        system("cls");
        printf("\n\n\n\n");
        printf("\t\t|------------------------------------------------------------|\n");
        printf("\t\t|         =====================        |\n");
        printf("\t\t|               修改图书信息              |\n");
        printf("\t\t|         =====================        |\n");
        printf("\t\t|                                         |\n");
        printf("\t\t|            1.按书名查找                 |\n");
        printf("\t\t|            2.按书号查找                 |\n");
        printf("\t\t|            3.删除图书                   |\n");
        printf("\t\t|            4.返回主菜单                 |\n");
        printf("\t\t|------------------------------------------------------------|\n");
        printf("\t\t请输入您的选择:");
        scanf("%d",&x);
        switch(x)
        {
            case 1:system("cls");change_name();break;/*按书名查找名修改信息*/
            case 2:system("cls");change_num();break;/*按书号查找并修改信息*/
            case 3:system("cls");dele();break;	
        }
    }while(x!=4);
}

按书名来修改信息

用name存放需要修改的书名,输入书名后遍历存储的结构体数组,看里面有没有,如果有就进行修改,没有就提示错误请重新输入

void change_name()        //按书名来修改信息      
{
    char name[20];  //用来存放想要修改的书名
    int i;   //循环下标
    int k = 0;// 标记书名是否存在
    printf("输入你想要修改的书名,按“exit”退出:\n");
    do
    {
            scanf("%s",&name);
            if(!strcmp(name,"exit"))
            {
                break;
            }
            for(i=0;i<N;i++)
            {
                if(!strcmp(name,bk[i].name))
                {
                    k++;
                    printf("该书的信息为:\n");
                    printf("\t编号    图书名称     出版社        出版时间     状态\n");
                    printf("\t%-7d %-8s %-12s   %4d年%2d月%2d日 ",bk[i].num,bk[i].name,bk[i].publish,bk[i].t.year,bk[i].t.month,bk[i].t.day);
                    if(bk[i].lend == 1)
                    {
                        printf("已被借阅\n");
                    }
                    else
                    {
                        printf("可以借阅\n");	
                    }
                    printf("现在请输入新的信息:\n");
                    printf("请输入书的编号:\n");
                    scanf("%d",&bk[i].num);
                    printf("请输入书的名称:\n");
                    scanf("%s",&bk[i].name);
                    printf("请输入书的出版社:\n");
                    scanf("%s",&bk[i].publish);
                    printf("请输入书的出版时间(用逗号隔开,英文的逗号哦!):\n");                             scanf("%4d,%2d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);
                    printf("该书是否已经被借阅,已经借阅输入‘1’,未被借阅输入‘0’:\n");
                    scanf("%d",&bk[i].lend);
                }
            }
            if(k == 0)
            {
                system("cls");
                printf("您输入的书名不存在,请重新输入(按“exit”退出):\n");
            }
            else
            {
                 printf("恭喜你信息修改成功,按任意键返回。。。\n");
                 getch();
                 break;
            }
    }while(1);
}

按书号修改图书

用num存放需要修改的书号,输入书号后遍历存储的结构体数组,看里面有没有,如果有就进行修改(修改成功后给出提示),没有就提示错误请重新输入

void change_num() //按书号修改图书
{
    int num;  //用来存放 想要 修改的书号
    int i;  //循环下标变量
    int k = 0; //用来标记 该书是否存在
    printf("请输入你想要修改的图书的书号(按'0'退出):\n");
    do
    {
        scanf("%d",&num);
        if(num == 0)
        {
                break;
        }
        for(i=0;i<N;i++)
        {
            if(num == bk[i].num)
            {
                k++;
                printf("该书的信息为:\n");
                 printf("\t编号    图书名称     出版社        出版时间     状态\n");
                printf("\t%-7d %-8s %-12s   %4d年%2d月%2d日 ",bk[i].num,bk[i].name,bk[i].publish,bk[i].t.year,bk[i].t.month,bk[i].t.day);
                if(bk[i].lend == 1)
                {
                        printf("已被借阅\n");
                }
                else
                {
                        printf("可以借阅\n");	
                }
                printf("现在请输入新的信息:\n");
                printf("请输入书的编号:\n");
                scanf("%d",&bk[i].num);
                printf("请输入书的名称:\n");
                scanf("%s",&bk[i].name);
                printf("请输入书的出版社:\n");
                scanf("%s",&bk[i].publish);
                printf("请输入书的出版时间(用逗号隔开,英文的逗号哦!):\n");
                scanf("%4d,%2d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);
                printf("该书是否已经被借阅,已经借阅输入‘1’,未被借阅输入‘0’:\n");
                scanf("%d",&bk[i].lend);
            }
        }
        if(k == 0)
        {
            system("cls");
            printf("您输入的书号不存在,请重新输入(按“0”退出):\n");
        }
        else
        {
             printf("恭喜你信息修改成功,按任意键返回。。。\n");
             getch();
             break;
        }		
    }while(1);
}