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

389 阅读13分钟

删除图书菜单

通过do while循环进行显示图书菜单,按1是按书名删除,2是按书号删除,3是删除所有图书

void dele()  //删除图书
{
    int x;	
    do
    {
        system("cls");
        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");dele_name();break;/*按书名删除*/
            case 2:system("cls");dele_num();break;/*按书号删除*/
            case 3:system("cls");dele_all();getch();break;/*删除所有图书*/
        }
    }while(x!=4);
}

按书名删除

定义循环下标i,用于遍历,书名name,k标记是否存在该书,给出提示让用户进行输入,如果找到问用户是否确定执行删除操作,得到肯定后通过用空数组覆盖达到删除效果,成功后给用户提示。同理如果不存在给出提示说不存在。

void dele_name()   //按书名删除
{                                        
    int i; //循环下标变量
    char name[20]; //用来存放输入的书名
    char new_name[20];  //定义一个空数组
    int k = 0;//用来标记 是否存在该书
    char c[2];    //用来表示   是否删除图书               
    printf("请输入您想要删除的书名(输入”exit”退出):\n");
    while(1)
    {
        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("\t是否要删除此书('y' or 'n'):\n");
                scanf("%s",&c); 
                if(!strcmp(c,"y"))
                {
                    strcpy(bk[i].name,new_name);     //空数组 拷贝给 已有书名
                    bk[i].num = 0;                   //令书号值为0
                    strcpy(bk[i].publish,new_name);  //空数组 拷贝给  已有出版社  
                    bk[i].t.year = 0;                //令年  = 0  
                    bk[i].t.month = 0;               //令月  = 0
                    bk[i].t.day = 0;                 //令日  = 0  
                    printf("\t删除成功!\n");
                    getch();
                    break;
                }
                else
                {
                    printf("用户取消操作,任意键返回。。。");
                    getch();
                    break;
                }
            }
        }
        if(k == 0)
        {
            system("cls");
            printf("未找到该书,请重新输入(输入“exit”退出):\n");
        }
        else
        {
            break;
        }
    }
}

按书号删除

定义循环下标i,用于遍历,书名num,k标记是否存在该书,给出提示让用户进行输入,如果找到问用户是否确定执行删除操作,得到肯定后通过用空数组覆盖达到删除效果,成功后给用户提示。同理如果不存在给出提示说不存在。

void dele_num()   //按书号删除
{
    int i;//循环下标变量
    int k = 0; //标记是否存在该书
    int num; //存放输入的书号
    char new_name[20];//定义一个空数组
    char c[2];//用来表示   是否删除图书
    printf("请输入您想要删除的书名的书号(输入”0”退出):\n");
    while(1)
    {
        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("\t是否要删除此书('y' or 'n'):\n");
                scanf("%s",&c); 
                if(!strcmp(c,"y"))
                {
                    strcpy(bk[i].name,new_name);
                    bk[i].num = 0;
                    strcpy(bk[i].publish,new_name);
                    bk[i].t.year = 0;
                    bk[i].t.month = 0;
                    bk[i].t.day = 0;
                    printf("\t删除成功!\n");
                    getch();
                    break;
                }
                else
                {
                    printf("用户取消操作,任意键返回。。。");
                    getch();
                    break;
                }
            }
        }
        if(k == 0)
        {
            system("cls");
            printf("未找到该书,请重新输入(输入“0”退出):\n");
        }
        else 
        {
            break;
        }
    }
}

删除所有图书

通过y或者n判断用户是否确定删除所有图书信息,如果确定把全局变量N置0达到删除所有图书,否则提示操作取消

void dele_all()  //删除所有图书
{
    char c[2]; //用来表示是否删除
    printf("\t继续操作会删除所有图书信息,是否继续(“y” or “n”)");
    scanf("%s",&c);
    if(!strcmp(c,"y"))
    {
        N = 0;  //N等于0 也就是令录入的图书数量为零 即删除了所有图书
        printf("\t删除成功\n");
        getch();
    }
    else
    {
        printf("\t操作取消,任意键返回。。。\n");
        getch();
    }
}

建立图书信息库

首先询问用户需要录入多少数量的图书,这个输入的数用N进行保存,然后进行N次循环,录入图书信息,int类型的数据有:编号、出版时间、借阅状态。字符串类型的有书名称和出版社名称。

/********建立图书信息库********/
void info()  
{   
    int i;   
    system("cls");   
    printf("\t\t     =====================    \n");   
    printf("\t\t        录入图书信息       \n");   
    printf("\t\t     =====================    \n\n");  
    printf("\t\t请输入您要录入的数量:");  
    scanf("%d",&N);   
    for(i=0;i<N;i++)   
    {  
        printf("\t\t请输入第%d本书的编号:",i+1);     
        scanf("%d",&bk[i].num);     
        printf("\t\t请输入第%d本书的名称:",i+1);     
        scanf("%s",bk[i].name);     
        printf("\t\t请输入第%d本书的出版社:",i+1);     
        scanf("%s",bk[i].publish);     
        printf("\t\t请输入第%d本书的出版时间(用逗号隔开):",i+1);     
        scanf("%d,%d,%d",&bk[i].t.year,&bk[i].t.month,&bk[i].t.day);     
        printf("\t\t该书是否已经被借阅,已被借阅输入'1',未被借阅输入'0':");     
        scanf("%d",&bk[i].lend);  
        printf("------------------------------------------------------------------\n"); 
    }  
    system("cls");   
    printf("\t\t     =====================    \n");   
    printf("\t\t        信息录入完成       \n");   
    printf("\t\t     =====================    \n");   
    printf("\n\t\t       按任意键继续...\n"); 
}

查看菜单

不同数字代表执行不同函数,分别是1.按书名查找,2.按书号查找,3.查看所有未借阅图书,4.查看所有已借阅图书,5.查看所有图书,6.返回主菜单

void show() //管理员———查看图书信息
{
    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|                     |\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|      6.返回主菜单         |\n");    
         printf("\t\t|-----------------------------------------------------------|\n"); 
         printf("\n\t\t请输入您的选择:");    
         scanf("%d",&x);    
         switch(x)    
         {       
             case 1:system("cls");showbook_name();getch();break;/*按书名查看*/   
             case 2:system("cls");showbook_num();getch();break;/*按书号查看*/                        case 3:system("cls");willreading();getch();break;/*查看未借阅图书*/ 
             case 4:system("cls");readed();getch();break;/*查看已借阅图书*/   
             case 5:system("cls");show_all_book();getch();break;/*查看所有图书*/ 
         }                   
    }while(x!=6);
} 

按书名或书号查看

name存储输入的书名,循环遍历结构体数组,找到后进行展示被查询书的信息。
num存储输入的书号,循环遍历结构体数组,找到后进行展示被查询书的信息。

void showbook_name()  //管理员————按书名查看
{
    int i,k=0; //i是局部变量一定记住,k用来标记书的借阅状态。
    char name[20];
    printf("请输入需要查看的书名:\n");
    scanf("%s",&name);                              
    for(i=0;i<N;i++)
    {
        if(!strcmp(name,bk[i].name))
        {		 
           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("\t\t已借阅\n");
         }
         else
         {
             printf("\t\t未借阅\n");
         }
         k++;
         printf("\t按任意键返回。。。\n");
        }
    }
    if(k == 0)
    {
            printf("该书不存在,任意键返回。。。\n");
    }
}
void showbook_num()  //管理员————按书号查看
{
    int i,k=0; //i是局部变量一定记住, ,k用来标记书的借阅状态。
    int num;
    printf("请输入需要查看的书号:\n");
    scanf("%d",&num);                              
    for(i=0;i<N;i++)
    {
        if(num==bk[i].num)
        {		 
              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("\t\t已借阅\n");
             }
             else
             {
                     printf("\t\t未借阅\n");
             }
             k++;
             printf("\t按任意键返回。。。\n");
        }
    }
    if(k == 0)
    {
        printf("该书不存在,任意键返回。。。\n");
    }
}

查看未借阅与借阅的图书

首先先验证结构体数组里面是否有数据,如果没有数据提示数据不存在,请先录入数据,验证完成后开始遍历结构体数组,借阅状态为可借阅的书进行显示,如果没找到提示目前没有可借阅的图书

void willreading()  //管理员————未借阅的图书
{
    int i,k=0;
    if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0)   
    //如果结构体中bk【】数组中存放的第一个数据书号为零年为零或数量为零则数据不存在
            {
                printf("数据不存在,请先录入数据...\n");
                printf("按任意键返回...\n");
            }
    for(i=0;i<N;i++)
    {		
        if(bk[i].lend == 0)
        {
            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);
            printf("您可以借阅此书...\n");
            k++;
        }
    }
    if(k == 0)
    printf("目前没有可借阅的图书,按任意键继续。。。\n");
}
void readed()  //管理员————已经借阅的图书
{
    int i,k=0;
    if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0)   //如果 结构体中 bk【】数组中存放 的第一个 数据 书号 为零 年 为零 或 数量为零 则 数据不存在
    {
        printf("数据不存在,请先录入数据。。。\n");
        printf("按任意键返回...\n");
    }
    else
    {
        for(i=0;i<N;i++)
        {
            if(bk[i].lend == 1)
            {
                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);
                printf("很遗憾,此书已被接走。。。\n");
                k++;
            }
        }
        if(k == 0)
        printf("目前没有任何书借出。按任意键继续。。。\n");
    }
}

查看所有图书

首先先验证结构体数组里面是否有数据,如果没有数据提示数据不存在,请先录入数据,验证完成后开始遍历结构体数组,展示所有书的情况

void show_all_book()  //管理员————查看所有图书
{
    int i;
    if(bk[0].num == 0&&bk[0].t.year == 0 || N == 0)  
    {
            printf("数据不存在,请先录入数据。。。\n");
    }
    else
    {
        printf("\t编号    图书名称     出版社        出版时间     状态\n");
        for(i=0;i<N;i++)
        {		
            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");
            }
        }
    }
}

客户模式菜单

显示客户模式下的菜单,1查看图书信息,2.借阅图书,3.退出系统,用int类型数据x表示用户选择。

int peo()  //客户模式
{
    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.按书名借阅,2.按书号借阅,3.查看所有图书,4.返回主菜单,查看所有图书可以复用之前的函数。用int类型数据x表示用户选择。

void reading()   //借阅图书
{
    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");lend_name();getch();break;/*按书名借阅*/
            case 2:system("cls");lend_num();getch();break;/*按书号借阅*/
            case 3:system("cls");show_all_book();getch();break;/*查看所有图书*/
        }
    }while(x!=4);
}

按书名或者书号借阅图书

按书号借阅可以用num记录用户输入的书号,然后遍历结构体数组比较输入书号与存在的书号是否一致,如果没找到进行提示,找到了并且图书状态为可以借阅的情况下显示图书信息,询问用户是否借阅,如果用户确定借阅则修改图书状态,按书名借阅与此过程类似,用的是name存储书名

void lend_num()
{
    int i;
    int num;
    int k = 0;
    char n[2];  //用来表示是否借阅
    system("cls");
    printf("请输入书名的书号:\n");
    while(1)
    {
        scanf("%d",&num);
        for(i=0;i<N;i++)
        {
            if((num == bk[i].num)&&(bk[i].lend == 0)) //比较输入书号与已有书号相等时且未借阅时执行if语句
            {
                k++;
                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);
                printf("可以借阅\n");
                printf("您是否需要借阅此书:'y' or 'n' \n");
                scanf("%s",&n);
                if(!strcmp(n,"y"))
                {
                    bk[i].lend = 1;
                    printf("借阅成功,按任意键返回。。。\n");
                    getch();
                    break;
                }
                else 
                {
                    if(!strcmp(n,"n"))
                    {
                        printf("借阅取消,按任意键返回。。。\n");
                        getch();
                    }
                    else 
                    {
                        printf("输入有错,按任意键返回。。。\n");  
                        getch();
                    }	
                    break;
                }
            }
        }
        if(k == 0)
        {
            printf("不存在该书,或该书已经借出!请正确输入图书名称!\n");
            printf("按任意键返回。。。\n");
            getch();
            break;
        }
        else 
        {
            break;
        }		
    }
}
void lend_name()                 
{
    char name[20];   
    int i;
    char n[2];       //用来表示是否借阅 
    int k = 0;      
    system("cls");
    printf("请输入书名:\n");
    while(1)
    {
        scanf("%s",&name);
        for(i=0;i<N;i++)
        {
            if((!strcmp(name,bk[i].name))&&(bk[i].lend == 0))  //比较输入书名与已有书名相等时 且 未借阅  时 执行 if语句
            {
                k++;
                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);
                printf("可以借阅\n");
                printf("您是否需要借阅此书:'y' or 'n' \n");
                scanf("%s",&n);
                if(!strcmp(n,"y"))
                {
                    bk[i].lend = 1;
                    printf("借阅成功,按任意键返回。。。\n");
                    getch();
                    break;
                }
                else 
                {
                    if(!strcmp(n,"n"))
                    {
                        printf("借阅取消,按任意键返回。。。\n");
                        getch();
                    }
                    else 
                    {
                        printf("输入有错,按任意键返回。。。\n");  
                        getch();
                    }	
                    break;
                }
            }
        }
        if(k == 0)
        {
            printf("不存在该书,或该书已经借出!请正确输入图书名称!\n");
            printf("按任意键返回。。。\n");
            getch();
            break;
        }
        else 
        {
            break;
        }		
    }
}

主函数

s用来接收主菜单的值 n来接收管理员模式的值 x来接受客户模式的值
首先显示主菜单,在用户做出选择后把返回的结果存储到s中,选择管理员模式后先对密码进行校验,如果没有问题再执行其他操作(录入信息、查看信息、修改信息等),进入用户模式后显示用户菜单,根据用户选择执行对应函数。完成操作后用户可以根据提示层层返回上一级菜单直到退出系统。

int main() { /*主函数*/
	int n,s,x,t;  //s用来接收主菜单的值   n来接收管理员模式的值  x来接受客户模式的值
	do {
		system("cls");
		s = mainmenu();
		switch(s) {
			case 1 :
                            system("cls");
                            t=codeverify(); //t来存放 密码 错误与正确 的 返回值
                            do {
                                if(t == 1) {
                                    n = adm();
                                    switch(n) {
                                        case 1:
                                                system("cls");
                                                info();
                                                getch();
                                                break;/*录入信息*/
                                        case 2:
                                                system("cls");
                                                show();
                                                break;/*查看信息*/
                                        case 3:
                                                system("cls");
                                                change();
                                                break;/*修改信息*/
                                        case 4:
                                                system("cls");
                                                changecode();
                                                break;/*修改密码*/
                                    }
                                } else {
                                    printf("密码错误,按任意键返回。。。\n");
                                    getch();
                                    break;
                                }
                            } while(n!=5);
                            break;
			case 2 :
                            do {
                                system("cls");
                                x = peo();
                                switch(x) {
                                    case 1:
                                        system("cls");
                                        show();
                                        break;//查看图书信息
                                    case 2:
                                        system("cls");
                                        reading();
                                        break;//借阅图书
                                }
                            } while(x!=3);
                            break;
		}
	} while(s!=3);
	system("cls");
	printf("\n\n\n\n\n\n\t\t谢谢使用!!!\n");
	getch();//等待用户 输入 一个字符  然后继续执行下面语句
	return 0;
}