精华内容
下载资源
问答
  • 这是一个C语言编写的简易图书管理系统,能够实现一些很简单的功能。
  • C语言课程设计 图书管理系统 提示:下方有设计要求及源代码。 、课程设计要求 设计要求: 引言 图书管理系统是智能办公系统的重要组成部分。图书管理系统将传统的图书管理方式彻底的解脱出来,提高管理效率,...

    C语言课程设计 图书管理系统


    提示:下方有设计要求及源代码。

    一、课程设计要求

    设计要求:

    1. 引言
      图书管理系统是智能办公系统的重要组成部分。图书管理系统将传统的图书管理方式彻底的解脱出来,提高管理效率,减轻管理人员的工作量,减少出错概率。使人们来获取信息、掌握信息。系统实现了借还书的方便性、高效性、有效性和及时性。
    2. 需求分析

    2.1 需求概述
    本次设计的职工信息管理系统,应该等提供以下功能:
    (1)录入图书信息
    (2)图书信息的浏览
    (3)图书查询
    (4)图书排序
    (5)图书信息的删除
    (6)图书信息的修改
    (7)退出系统

    会员管理
    (1) 会员注册
    (2) 会员登陆
    (3) 会员注销
    (4) 会员还书
    2.11需求说明

    (1)录入图书信息,录入图书编号时会判断此编号是否存在,若存在不能成功录入。
    (2)图书浏览可以浏览全部图书!	
    (3)图书查询可按图书编号模糊查询。
    (4)排序可以按年份和价格排序。
    (5)删除和修改通过图书编号进行删除。
    

    在图书管理系统中,管理员为每个读者建立一个账户,账户内储存者个人的详细信息,读者可以凭借借书卡在图书馆进行图书的借、还,不同类别的读者在借书借阅图书时,由管理员录入借书卡号,系统首先验证该卡号的有效性,若无效,则提示无效的原因;若有效,则显示卡号、姓名、借书限额、已借数量、在借阅信息中添加相应的记录,归还图书时,由管理员录入借书卡号和带归还的图书编号,显示借书卡号、读者姓名,读者姓名。
    3总体设计

    3.1功能模块图

    4详细设计
    4.1功能模块处理逻辑

    该系统主要有以下功能:浏览功能、查询功能、添加功能、修改功能、删除功能

    (1) 信息输入模块
    打开图书信息文件
    while(继续输入)
    {
    读入图书信息;
    将读入信息添加到职工信息文件中;
    提示是否继续输入;
    }
    关闭职工信息文件;
    (2)信息浏览模块
    打开图书信息文件;
    while(不到文件结束)
    {
    从文件中顺序读出一个图书的信息;
    按指定格式输出该图书的信息;
    }
    关闭职工信息文件;

    (3)信息查询模块
    while(仍继续查询)
    {
    if(按年份查询)
    {
    读入查询的职工工资条件;
    打开职工信息文件;
    }
    while(不到文件结束)
    {
    顺序读出一个图书的信息;
    if(该职工信息的工资符合条件)输出该图书的信息;
    }
    关闭图书信息文件;
    提示共有几条符合条件的记录;
    }
    else if(按年份查询)
    {
    读入查询的职工工资条件;
    打开职工信息文件;
    while(不到文件结束)
    {
    顺序读出一个图书的信息;
    if(该职工信息的工资符合条件)输出该图书的信息;
    }
    关闭图书信息文件;
    提示共有几条符合条件的记录;
    }
    else 提示输入不合适;
    提示是否继续查询;
    }
    (4)信息修改模块:
    while(继续修改)
    {
    从给出信息文件中所有的记录情况;
    提示并读入待修改的记录的图书编号;
    打开图书信息文件;
    查找图书的编号;
    进行修改;
    修改完毕重新写回到原职工信息文件中;
    关闭职工信息文件;
    }

    (5)信息删除模块;
    while(继续删除)
    {
    从给出信息文件中所有的记录情况;
    提示并读入待删除的记录的图书编号;
    打开图书信息文件;
    查找图书的编号;
    询问是否要删除;
    删除完毕;
    关闭职工信息文件;
    }
    (6)菜单选择模块:
    给出信息提示;
    清屏;
    绘制菜单(包含输入、显示、查询、修改、删除、返回上一级菜单、退出)
    提示菜单选择并读入到变量;
    根据读入变量的值调用不同的模块函数;
    4.2 数据结构
    本系统用到的数据结构具体如下:
    struct tushu
    {
    char bno[20]; //书号
    char bname[20];//书名
    char name[20];//作者
    char cbs[20];//出版社
    char lb; //类别
    long int cbsj;//出版时间
    float jg; //价格
    };

    struct hyzc
    {
    char xh[20];
    char pwd[7];
    };

    struct hyname //
    {
    char xh[20];
    char name[20];
    char bno[20];
    };

    struct hyhs
    {
    char xh[20];
    char bno[20];
    };

    6.总结
    通过本人努力和老师的关心指导,和同学们团结协作,一起完成了该课题。通过这次课程设计我系统地掌握了文件的应用,并锻炼饿了自己的团队合作精神。最后感谢任石老师的帮助。

    二、运行结果如下

    在这里插入图片描述

    三、源代码如下

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>//其中包含system函数
    #include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
    #include <string.h>//定义字符数组
    #include <math.h>
    #define LEN sizeof(struct book)//有关图书信息的结构体
    #define LEN1 sizeof(struct reader)//有关读者信息的结构体
    #define LEN2 sizeof(struct land)//有关登录系统的结构体
    
    
    struct book//图书信息
    {
    	char num[20],nam[20],aut[20],pub[20],cat[20];
    	int  many;
    	float price;
    	struct book*next;
    };
    
    struct reader//读者借阅信息
    {
    	int jnum;
    	char jnam[20],time[20],tsnam[20];
    	struct reader *next;
    };
    struct land//登录信息
    {
    	int zhanghao;
    	char password[20];
    	struct land*next;
    };
    
    
    
    int tjzs();//统计library文本个数函数
    void xg(int,char[] );
    void mainmenu();//显示主菜单
    void tsmenu();//显示图书信息菜单
    void jmenu();//显示借阅信息菜单
    void lmenu();//显示登录菜单
    
    void main1();// 主菜单功能
    void tsmain();//图书菜单功能
    void cxts();//查询图书
    void zjts();//增加图书
    void scts();//删除图书
    void llts();//浏览图书
    
    void jmain();//读者借阅信息
    void js();//借书
    void hs();//还书
    void cxjs();//查询借书
    void lljs();// 浏览借书情况
    
    void land();//登录功能系统
    void hyzx(); 
    int xinjian(int,char[] );//创建账号密码
    void xgmm();//修改密码
    
    void lmain();//登录界面函数
    
    
    int tjzs()//统计图书文本个数
    {
    FILE *fp;
    int txcl=0,n;
    float tprice=0;
    char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'};
    fp=fopen("library.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    int tjdzzs()//统计文读者本个数函数
    
    {
    FILE *fp;
    int zhenghao=0,n;
    char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    fp=fopen("reader.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%d%s%s%s ",&zhenghao,&mingzi,&riqi,&zname);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    int tjzs3()//统计账号密码文本个数
    {
    FILE *fp;
    int zhao=0,n;
    char mm[20]={'\0'};
    fp=fopen("land.txt","r");//打开文件
    for (n=0;!feof(fp);n++)//逐个读文件
    fscanf(fp,"%d %s",&zhao,mm);
    n--;
    fclose(fp);//关闭文件
    return (n);//返回个数
    }
    
    
    void mainmenu()//主菜单
    {
    system ("cls");
    
    printf("--------------------------------------------------");
    
    printf("\n\n 1.图书系统\n\n");
    
    printf("\n\n 2.会员借阅系统\n\n");
    
    printf("\n\n 3.退出系统\n\n");
    
    printf("\n\n 请按键选择,回车确定\n");
    
    printf("--------------------------------------------------\n");
    
    return ;
    }
    
    
    void tsmenu() //图书馆信息菜单
    {
    system ("cls");
    
    printf("----------------------------------------------------");
    
    printf("\n 1.录入图书信息\n\n");
    
    printf("\n 2.图书信息的删除\n\n");
    
    printf("\n 3.图书查询\n\n");
    
    printf("\n 4.图书信息的浏览\n\n");
    
    printf("\n 5.图书信息的修改\n\n");
    
    printf("\n 6.图书排序\n\n");
    
    printf("\n 7.返回上一级\n\n");
    
    printf("\n 请按键选择,回车确定\n");
    
    printf("---------------------------------------------------\n");
    
    return ;
    
    }
    
    
    void main1()
    {
    	void tsmian();
    	void jmain();
    	char choose;
    	mainmenu();
    	scanf(" %c",&choose);
    	switch(choose)//功能函数
      {
    	  case'1':
    	    tsmain();
    	    break;
    	  case'2':
    	  	jmain();
    	  	break;
    	  case'3':
    	  	system("cls");
        getch();
      	exit(0);
      	system ("cls");
    	break;
      }
    }
    
    
    void tsmain()
    {
    	void zjts();
    	void scts();
    	void ctts();
    	void llts();
    	char choose;
    	tsmenu();
    	scanf(" %c",&choose);
    	for(;;)
    	{
    		switch(choose)
    	{
    	case'1':
    		zjts();
    		break;
    	case'2':
    		scts();
    		break;
    	case'3':
    		cxts();
    		break;
    	case'4':
    		llts();
    		break;
    	case'7':
    		main1();
    		break;
    	}
        }
    }
    
    
    void zjts()//增加图书
    {
    	FILE*fp;
    	char i;
    	int many=0;
        float price=0;
        char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
        system ("cls");
    
        //if ((fp=fopen("library.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
    //	{
      //    fp=fopen("library.txt","a");
        //  fclose(fp);
        //}
    	fp=fopen("library.txt","a");
    	
    	printf("\n请按以下格式输入图书信息:\n书号 书名 作者 出版社 类别 进库量 单价");
    	
    	for(;i!=27;)//为了实现输入一次后按esc退出
    	{
    		printf("请输入:\n");
    		scanf("%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
    		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
    	    printf("继续输入请按回车,结束输入请按Esc\n");
            i=getch();//暂停程序当i接收后继续下一条指令
            for (;i!=13&&i!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
            i=getch();
         }
    
    	fclose(fp);
        printf("\n保存成功,按任意键返回上一层!");
        getch();
    	tsmain();//返回上一层
    }
    
    void scts()//删除图书
    {
    	   struct book *head=NULL;
           struct book *p,*p1,*p2;
           int tmany=0,n=0,j,k;
           float tprice=0;
           char  tnam[20]={'\0'},taut[20]={'\0'},tcat[20]={'\0'},tpub[20]={'\0'},tnum[20]={'\0'};
    	   char jjnam[20]={'\0'};
    	   char i;
           FILE *fp;
           if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
               getch();
               tsmain();
           }
    
    	   else//实现删除的功能
    	   {
    	      system ("cls");
    	      printf("\n请输入你要删除的书名:");//输入删除图书书名
              scanf("%s",jjnam);
              printf("\n确认删除请回车,取消请按Esc\n");
              i=getch();
              for(;i!=13&&i!=27;)
              i=getch();
              if (i==27)
              tsmain();
    	      fp=fopen("library.txt","r");
    		 j=tjzs();
    
    	   for (k=0;k<j;k++)
           {
    	       fscanf(fp,"%s%s%s%s%s%d%f",tnum,tnam,taut,tpub,tcat,&tmany,&tprice);
               if (strcmp(jjnam,tnam))//比较名字,将不同名字的信息复制到链表
              {
    	          n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
    	            if (n==1)//建立链表
                    {
    		          p1=p2=(struct book*)malloc(LEN);
                      head=p1;
    				}
                    else
    			    {
    			      p2->next=p1;
    				  p2=p1;
                      p1=(struct book*)malloc(LEN);//新建链表
                    }
    
                    strcpy(p1->num,tnum);//复制书号
                    strcpy(p1->nam,tnam);//复制书名
                    strcpy(p1->aut,taut);//复制作者名字
                    strcpy(p1->pub,tpub);//复制出版社
                    strcpy(p1->cat,tcat);//复制类别
                    p1->many=tmany;//复制个数
                    p1->price=tprice;//复制单价
               }
           }
                 if (n==0)//如果图书只有一项且这一项刚好和要删除的相同
    			 {
    			 head=NULL;
    			 }
    			 else//建立链表的最后剩余一个储存空间,所以封底
    			 {
    			 p2->next=p1;
    			 p1->next=NULL;
    			 fclose(fp);
    			 }
        }
    
       fp=fopen("library.txt","w");//清空文件,只写打开,然后关闭
       fclose(fp);
       fp=fopen("library.txt","a");//追加文件
       p=head;
    
       for (;p!=NULL;)//把链表内容覆盖到文件
       {
       	   fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
       	   p=p->next;
       }
       fclose(fp);
       system ("cls");
       printf("\n删除成功 \n按任意键返回上一层\n");
       getch();//返回上一层
       tsmain();
    }
    
    
    void cxts()//查询图书
    {
    	   FILE *fp;
           int k=0,many=0,m=0,n=0;
    	   float price=0;
           char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
           char i;
           char chazhao[20]={'\0'};
           if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
    		   tsmain();
           }
    	   system("cls");
           printf("请输入书号,书名,作者或类别查询:\n");
           scanf("%s",chazhao);
           system ("cls");
           m=tjzs();
    
    	   for (n=0;n<m;n++)
    	   {
    	    fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
            if(!strcmp(chazhao,num)||!strcmp(chazhao,nam)||!strcmp(chazhao,aut)||!strcmp(chazhao,cat))
            {
            	if(k==0)
                {
    			  printf("查询结果:\n\n");
    			  printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t现存量\t单价\n");
                }
    			printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
                k++;
            }
           }
            if (k==0)//文件夹为空则输出无记录并返回上一层
            { system ("cls");
            printf("\n无符合记录!\n");
            getch();
            tsmain();
    		}
    		fclose(fp);//查询结束
    		getch();
    		tsmain();
    }
    
    
    void llts()//浏览图书
    {
    	FILE *fp;
    	int n=0;
           int k=0,m=0,many=0;
    	   float price=0;
           char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
      	   char i;
    	   if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
    		   getch();//返回
               tsmain();
    	   }
    	   n= tjzs();
           if (n==0)
          {
    	  system ("cls");
          printf("\n无任何记录!");
          }
    
    	     fp=fopen("library.txt","r");//打开只读文件
             system ("cls");
    	     printf("书号\t书名\t    作者\t出版社\t\t类别\t\t库存量\t单价\n");
      
    	   for (m=0;m<n;m++)//输出数据
    	     {
    	     fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
    		 printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
    	 	}
    		fclose(fp);
            printf("\n按任意键返回\n");
            getch();
            tsmain();
    }
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`!~~~~~~~~~~~~~~~~~~~~~
    	
    void jmenu()//显示借书菜单
    {
    	system("cls");
    	printf("------------------------------------------------------");
    	printf("\n\n 1.会员登记\n\n");
    	printf("\n\n 2.会员还书\n\n");
    	printf("\n\n 3.借阅情况查看\n\n");
    	printf("\n\n 4.查询借书信息\n\n");
        printf("\n\n 5.返回上一级\n\n");
    	printf("\n\n 请按键选择,回车确定\n");
    	printf("-----------------------------------------------------");
    	return ;
    }
    
    
    void jmain()//借阅系统函数
    {
    	void js();
    	void hs();
    	void lljs();
    	void cxjs();
    	char choose;
    	jmenu();
    	scanf(" %c",&choose);
    	for(;;)
    	{
    		switch(choose)
    		{
    			case'1':
    			js();
    			break;
    			case'2':
    			hs();
    			break;
    			case'3':
    			lljs();
    			break;
    			case'4':
    			cxjs();
    			break;
    			case'5':
    			main1();
    			break;
    		}
    	}
    
    }
    
    
    
    void js()//借书函数
    {
    	FILE *fp,*fp3;
    	struct book *head=NULL;
        struct book *p,*p1,*p2;
        int i,loop,k,n=0,flag=0,s=0;
    	int jnum=0;
    	int many=0;
    	float tprice=0;
    	char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'},
             ttname[20]={'\0'},mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    	char hit=0;
    
    	system("cls");
    	if((fp=fopen("library.txt","r"))==NULL)
    	{
    		system("cls");
    		printf("\n 图书馆无库存!按任意键退出!");
    		getch();
    		exit(0);
    	}
    	else
    	{
            printf("\n请输入借阅书名:\n请输入:");
    		scanf("%s",zname);
        k= tjzs();//统计图书馆文件个数
    
    	for (i=0;i<k;i++)//先将图书信息建立链表,更改库存
        	{
        		fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&many,&tprice);
    			n++;
    			if(n==1)
    			{
    				p1=p2=(struct book*)malloc(LEN);
    				head=p1;
    			}
    		    else
               	{
                    p2->next=p1;
                    p2=p1;
                    p1=(struct book*)malloc(LEN);
    
                }
    			strcpy(p1->num,tshuhao);//复制书号
    			strcpy(p1->nam,tname);//复制书名
    			strcpy(p1->aut,tauthor);//复制作者
    			strcpy(p1->pub,tchuban);//复制出版社
    			strcpy(p1->cat,tkind);//复制类别
    			p1->many=many;//复制现存量
    			p1->price=tprice;//复制单价
            }
            if(n==0)
     		head=NULL;
    		else
    		 {
    		 	p2->next=p1;
    		 	p1->next=NULL;
    		 	fclose(fp);
    		 }
    
    	}
    	p=head;
    	
    	for (;p!=NULL;)
    	{
    		if(!(strcmp(p->nam,zname)))//判断要借书的是否存在,标记等于1,存在库存减一
    		{
    			
                flag=1;
    		 	loop=p->many;
    		 	(p->many)--;
    		 }
    			p=p->next;
      }
    	if(flag&&(loop>0))//存在被借的图书且现存量大于0,把库存量变化后的链表存入文件
        {
    
    		fp=fopen("library.txt","w");
        	fclose(fp);
        	fp=fopen("library.txt","a");
        	p=head;
    
    		for(;p !=NULL;)
        	{
        		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
       		   	p=p->next;
    		}
    		free(p);
    		fclose(fp);
    
    		if ((fp3=fopen("reader.txt","r"))==NULL)//建读者文件夹存入借书信息
            {
    		    fp3=fopen("reader.txt","w");//打开只读文件
                fclose(fp3);
            }
    		fp3=fopen("reader.txt","a");
    
    		printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:");//录入读者信息
     		scanf("%d %s %s %s",&jnum,mingzi,riqi,zname);
    		fprintf(fp3,"\n%-8d%-23s%-18s%-10s\n",jnum,mingzi,riqi,zname);
    	    fclose(fp3);
            printf("借书成功!请两个月内归还!!!按任意键返回\n");
    		getch();//返回
    		jmain();//调用借阅系统
       }
    	else
        {
        	if(flag!=0)
            printf("此书已被借完!按任意键返回!");//否则输出此书已被借完
    		else
    		printf("查找无此书!按任意键返回");
    	}
    	    getch();//返回
            jmain();//调用借阅系统
    
    }
    
    
    void hs ()//还书函数
    {
     	 FILE *fp,*fp3;
    	 struct reader *head=NULL;
    	 struct reader *p,*p1,*p2;
    	 struct book *lhead1=NULL;
    	 struct book *zp1,*lp1,*lp2;
    	 int txcl=0,i;
    	 float tprice=0;
    	 char tname[20]={'\0'},tauthor[20]={'\0'},tkind[20]={'\0'},
    	 tchuban[20]={'\0'},ttname[20]={'\0'},tshuhao[20]={'\0'};
    	 int ttzhenghao=0,tzhenghao=0,n=0,k=0,t=0,flag=0;
    	 char tmingzi[20]={'\0'},triqi[20]={'\0'},tzname[20]={'\0'},ttzname[20]={'\0'};
    	 char hitkey=0;
    	 system ("cls");
    {
     	 if ((fp=fopen("reader.txt","r"))==NULL)//不存在读者文件,则输出不能还书
    	  {
             system ("cls");
    		 printf("\n 不存在借书者!按任意键退出!");
    		 getch();
    		 system("cls");
    		 jmain();
          }
    
    	  else
    	  {{
    	     printf("\n请输入读者证号和书名:\n请输入:");
    		 scanf("%d %s",&ttzhenghao,ttzname);//输入还书证号和书名
    		 k=tjdzzs();//获取读者文件夹信息个数
    		 for (i=0;i<k;i++)//读取读者文件夹信息
               {
    			fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);
    			if((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname))//如果证号书名存在,则标记为1
    			flag=1;
    			}
          fclose(fp);
    	  fp=fopen("reader.txt","r");//打开读者文件,删除借书信息
    	  if(flag)
    	  {
    	  for (i=0;i<k;i++)//将读者文件复制到链表
    	  {
    	  fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);//读取文件信息
    	  if(!((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname)))
    	  {
              n++;
    		  if (n==1)
    		  {
    		      p1=p2=(struct reader*)malloc(LEN1);//新建链表
    			  head=p1;
    		  }
    		  else
    		  {
    		        p2->next=p1;
    				p2=p1;
    				p1=(struct reader*)malloc(LEN1);//新建链表
              }
    		  p1->jnum=tzhenghao;//复制证号
    		  strcpy(p1->jnam,tmingzi);//复制读者名字
    		  strcpy(p1->time,triqi);//复制日
    		  strcpy(p1->tsnam,tzname);//复制书名
    		  }}
    		  if (n==0)
    		  head=NULL;
    		  else
    		  {
    		       p2->next=p1;
    			   p1->next=NULL;
    			   fclose(fp);
    	      }
    		  fp=fopen("reader.txt","w");//清空读者文件
    		  fclose(fp);
    		  fp=fopen("reader.txt","a");//追加信息
    		  p=head;
    		  for (;p!=NULL;)//把链表内容覆盖读者文件
    		  {
    		      fprintf(fp,"\n%-8d%-23s%-18s%-10s\n",p->jnum,p->jnam,p->time,p->tsnam);
    			  p=p->next;
    	      }
    		  free(p);
    		  fclose(fp);
    		  }}}}
    
    		  if(flag)//标记为1,即还书时更改库存
    		  {{
    		  {
    		      printf("确认还书请按回车!");
    			  for (;hitkey!=13&&hitkey!=27;)
    			  hitkey=getch();
    			  if (hitkey==13)
    			  printf("成功!按任意键返回!");
    			  n=0;flag=0;
    			  fp3=fopen("library.txt","r");//打开图书馆文件
    			  k=tjzs();//获取图书馆文件个数
    			  for (i=0;i<k;i++)//将图书馆文件复制到链表
    			  {
    			       fscanf(fp3,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);//读取信息
    				   n++;
    				   if (n==1)
    				   {
    				       lp1=lp2=(struct book*)malloc(LEN);//新建链表
    					   lhead1=lp1;
    				   }
    				   else
    				   {
    				       lp2->next=lp1;
    					   lp2=lp1;
    					   lp1=(struct book*)malloc(LEN);//新建链表
    				   }
    				   strcpy(lp1->num,tshuhao);//复制书号
    				   strcpy(lp1->nam,tname);//复制书名
    				   strcpy(lp1->aut,tauthor);//复制作者
    				   strcpy(lp1->pub,tchuban);//复制出版社
    				   strcpy(lp1->cat,tkind);//复制类别
    				   lp1->many=txcl; //复制现存量
    				   lp1->price=tprice;//复制单价
    				   }
    				   if (n==0)
    				   {
     	  		          lhead1=NULL;
    				   }
    				   else
    				   {
    				   	   lp2->next=lp1;
    				   	   lp1->next=NULL;
    				   	   fclose(fp3);
    				   }}}
    				   zp1=lhead1;
    				   for (;zp1!=NULL;)
    				   {
    				        if(!(strcmp(zp1->nam,ttzname)))//寻找书名相同
    						++(zp1->many);//现存量加1
    						zp1=zp1->next;
    					}
    					fp3=fopen("library.txt","w");//清空图书馆文件
    					fclose(fp);
    					fp3=fopen("library.txt","a");//追加信息
    					zp1=lhead1;
    					for (;zp1!=NULL;)//把链表内容覆盖图书馆文件
    					{
                             fprintf(fp3,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",
            				 zp1->num,zp1->nam,zp1->aut,zp1->pub,zp1->cat,zp1->many,zp1->price);
    						 zp1=zp1->next;
    				    }
    					fclose(fp3);
    					getch();//返回
    					jmain();//调用借阅系统
    					}
    					else
    					printf("不存在此信息!按任意键返回!");
    					getch();//返回
    					jmain();//调用借阅系统
    }
    
    
    void lljs()//显示借书情况函数
    
    {
        FILE *fp;
        int zhenghao=0,xcl=0,n=0,i=0,j=0;
        char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
    	if ((fp=fopen("reader.txt","r"))==NULL)//打开读者文件夹
        {
            system ("cls");
            printf("\n记录文件不存在!按任意键返回");
    	    getch();
    	    jmain();
        }
        n=tjdzzs();
        if (n==0)
    	{ system ("cls");
    	printf("\n无任何记录!");
    	}
    	fp=fopen("reader.txt","r");
    	system ("cls");
    	printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
    	for (;!feof(fp);)//输出文件信息
    	{
    	fscanf(fp,"%d%s%s%s\n ",&zhenghao,mingzi,riqi,zname);
    	printf("\n%-8d%-23s%-18s%-10s\n", zhenghao,mingzi,riqi,zname);
    	}
    	fclose(fp);
    	printf("\n按任意键返回\n");
    	getch();//返回
    	jmain();//调用借阅系统
    }
    
    					
    void cxjs()//查询借书
    {
    	   FILE *fp;
           int jsnum=0,k=0,many=0,m=0,n=0;
    
           char  jsnam[20]={'\0'},jstime[20]={'\0'},tsnam[20]={'\0'};
           char i;
           char chazhao[20]={'\0'};
           if ((fp=fopen("reader.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
    		   jmain();
           }
    	   system("cls");
           printf("请输入证号或姓名查询:\n");
           scanf("%s",chazhao);
           system ("cls");
    	   m=tjzs();
    	   for (n=0;n<m;n++)
    	   {
    	    fscanf(fp,"%d%s%s%s",&jsnum,jsnam,jstime,tsnam);
            if(!strcmp(chazhao,jsnam)||(('chazhao'-'0')==jsnum))
            {
            	if(k==0)
                {
    			  printf("查询结果:\n\n");
    			  printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
                }
    			printf("\n%-8d%-23s%-18s%-10s\n",jsnum,jsnam,jstime,tsnam);
                k++;
             }
           }
    	    if (k==0)//文件夹为空则输出无记录并返回上一层
            { system ("cls");
            printf("\n无符合记录!\n");
            getch();
            jmain();
    		}
           fclose(fp);//查询结束
    		getch();
    		jmain();
    }
    
    
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
    
    void lmenu()//显示登录菜单
    {
    
    
    printf("\n\n\t   欢迎使用图书馆信息管理系统!\n\n");
    printf("_________________________________________________\n\n\n");
    printf("$$$$$$$----图书管理系统职工登录入口----$$$$$$$$\n\n");
    printf("\n\n\t\t1.登录系统\n\n");
    printf("\n\n\t\t2.职工注册\n\n");
    printf("\n\n\t\t3.修改密码\n\n");
    
    printf("\n\n     $$$$$$$----会员信息管理----$$$$$$$$\n\n");
    printf("\n\n\t\t4.会员登录\n\n");
    printf("\n\n\t\t5.会员注册\n\n");
    printf("\n\n\t\t6.会员注销\n\n");
    printf("\n\n\t\t7.退出系统\n\n");
    printf("\n\n\t    请按键选择,回车确定\n");
    printf("\n\n-----------------编写:杜瑞祥----------------------");
    
    return ;
    }
    
    void lmain()//登录功能函数
    {
    	void land();
    	void xinjian();
    	char choose;
    	lmenu();
    	scanf(" %c",&choose);
    	switch(choose)//功能函数
      {
    	  case'1':
    	    land();
    	    break;
    	  case'2':
    	  	xinjian();
    	  	break;
    	  case'3':
    	  	xgmm();
    	  	break;
    	  case'4':
    	  	land();
    	  	break;
    	  case'5':
    	  	xinjian();
    	  	break;
          case'6':
    	    hyzx();
    		break; 
    	  case'7':
    	  	system("cls");
        getch();
      	exit(0);
      	system ("cls");
    	break;
      }
    }
    
    
    void hyzx()//会员注销 
    {   
           FILE *fp;
           if ((fp=fopen("library.txt","r"))==NULL)//打开文件
           { 
           }
    	   else//实现删除的功能
    	   {
    	      system ("cls");
               printf("\n     暂未开通此功能!\n\n       敬请期待!\n\n\n\   按任意键退出系统");
        }
    }
    
    
    
    void xinjian()//新建账户密码
    {
    	FILE *fp;
    	int zhanghao;
    	char password[20],password1[20];
    	char hit=0;
    	if ((fp=fopen("land.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
    	{
          fp=fopen("land.txt","w");
          fclose(fp);
        }
        system("cls");
    	fp=fopen("land.txt","a");
    	for(;;)//输入两次密码确认,两次相同才能确认
    	{
    	   printf("\n请按以下格式输入账户:\n学号 密码\n");
    	   printf("请输入:");
    	   scanf("%d %s",&zhanghao,password);
           printf("再次输入密码:\n");
    	   scanf("%s",password1);
    	   if(strcmp(password,password1)==0)
    	   {
    	       fprintf(fp,"%d %s\n",zhanghao,password);
    		   break;
           }
           else
    	   {
    	       printf("两次输入密码不一致,继续创建按回车,退出按ESC");
    	       hit=getch();
    		   if(hit=27)
    		   system("cls");
    		   lmain();
    		         }
       }
       fclose(fp);
       printf("创建成功,按任意键返回");
       getch();
       system("cls");
       lmain();
    }
    
    
    
    int match(int m,char a[20])//匹配数据库中的账号密码
    {
    	FILE*fp;
    	int n=0,i=0;
    	int zhanghao;
    	char password[20];
    
    	if ((fp=fopen("land.txt","r"))==NULL)//不存在读者文件
    	  {
             system ("cls");
    		 printf("\n 还未存在用户!请新建账户");
    		 getch();
    	 	system("cls");
    		lmain();
    	
          }
    
    
            for(;!feof(fp);)
          {
            fscanf(fp,"%d%s",&zhanghao,password);
            if(m==zhanghao)
            {
            	if(strcmp(a,password)==0)
    			return 1;
    			else
    			{
    			return -1;
    		   }
    	    }
    	  }
    	  return 0;
     }
    
    void land()//输入账户密码的登录函数
    {
    	int zhanghao;
    	char password[20];
    	int i=2,j,k,n;
    	char hit=0;
    	system("cls");
    	do
    	{
    	   printf("\n请输入账号:\n");
           scanf("%d",&zhanghao);
           printf("确认输入请安回车,重新输入请按ECS");
           hit=getch();//暂停程序当i接收后继续下一条指令
           for (;hit!=13&&hit!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
           {
    	        hit=getch();
    	   }
        }
        while(hit==27);
    	 printf("\n请输入密码:\n");
    	 scanf("%s",password);
         i=match(zhanghao,password);
         if(i==1)
    	 {
           printf("登陆成功!按任意键继续");
    	   getch();
    	   main1();
    	 }
    	 else
    	 {
    	 	if(i==-1)
    		 {
    		 printf("密码错误!");
    		 getch();
             land();
    		 }
    		 if(i==0)
    		 printf("不存在此用户");
    		 getch();
    		 system("cls");
    		 lmain();
    	 }
    }
    
    void xg(int z,char m[20])//修改函数
    {
    	FILE *fp;
    	int zhanghao1,n,j,k;
    	char mima1[20];
    	struct land *head,*p,*p1,*p2;
    
    	 fp=fopen("land.txt","r");
    	   j =tjzs3();
    
    	   for (k=0;k<=j;k++)
           {
    	       fscanf(fp,"%d %s",&zhanghao1,mima1);
               if (z!=zhanghao1)//比较名字,将不同名字的信息复制到链表
              {
    	            n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
    	            if (n==1)//建立链表
                    {
    		          p1=p2=(struct land*)malloc(LEN2);
                      head=p1;
    				}
                    else
    			    {
    			      p2->next=p1;
    				  p2=p1;
                      p1=(struct land*)malloc(LEN2);//新建链表
                    }
     				p1->zhanghao=zhanghao1;
                    strcpy(p1->password,mima1);//复制账号密码
              }
           }
            if (n==0)
    			 {
    			 head=NULL;
    			 }
    			 else//建立链表的最后剩余一个储存空间,所以封底
    			 {
    			 p2->next=p1;
    			 p1->next=NULL;
    			 fclose(fp);
    			 }
    			  fp=fopen("land.txt","w");//清空文件,只写打开,然后关闭
                  fclose(fp);
                  fp=fopen("land.txt","a");//追加文件
                  p=head;
                for (;p!=NULL;)//把链表内容覆盖到文件
       			{
       	   		 	fprintf(fp,"%d %s%\n",p->zhanghao,p->password);
       	   			p=p->next;
    	        }
    	        fprintf(fp,"%d %s\n",z,m);
                fclose(fp);
                 system ("cls");
    
    }
    
    
    
    void xgmm()//修改密码
    {
    
    	   FILE *fp;
           int zh=0,k=0,many=0,m=0,n=0;
           int chazhao,hit;
           char mima[20]={'\0'},password1[20]={'\0'};
           char  mm[20]={'\0'};
           char i;
    
           if ((fp=fopen("land.txt","r"))==NULL)//打开文件
           {
    	       system ("cls");
               printf("\n记录文件不存在!按任意键返回");
      		   getch();
      		   system("cls");
    		   lmain();
           }
    	   system("cls");
           printf("请输入你的帐号和旧密码:\n");
           scanf("%d %s",&chazhao,mima);
    	   m =tjzs3();
    	   for (n=0;n<=m;n++)
    	   {
    	    fscanf(fp,"%d %s",&zh,mm);
            if(zh==chazhao)
            {
            	if(!strcmp(mm,mima))
            	{
            		printf("请输入新的密码");
            		scanf("%s",mima);
           		    printf("再次输入密码:\n");
    	            scanf("%s",password1);
    	             if(strcmp(mima,password1)==0)
    	   			 {
    		             xg(chazhao,mima);
    		            getch();
    				    lmain();
    	                system("cls");
       			     }
           			  else
    	   			  {
    	       		   	  printf("两次输入密码不一致,按任意键退出");
    	       			  hit=getch();
    		   			  system("cls");
    				      lmain();
    
       				  }
    			}
    			else
    			{
    				printf("旧密码错误,按任意键返回!");
    				getch();
    				system("cls");
    				lmain();
    	            
    			}
    
            }
          }
    	   printf("不存在此账号,按任意键返回");
    		fclose(fp);//修改结束
    		getch();
    		system("cls");
    		lmain();
    }
    
    
    
    int main()
    {
    	system("color 8F");
    	lmain();
    	return 0;
    }
    
    
    

    总结

    例如:以上就是C语言课程设计 创建一个图书管理系统源代码的分享。




    点进入我的博客主页: https://blog.csdn.net/HUCRXHF?spm=1001.2100.3001.5343.

    展开全文
  • 本系统为一个完整的图书管理系统,用C语言编写,有美观的界面并提供管理员与借阅者.......
  • 这是一个完全用c语言编写C语言编写图书管理系统,并且已经测试没有错误,可以用于完成计算机专业的课程设计作业
  • C语言编写简易图书管理系统

    万次阅读 多人点赞 2019-02-14 19:44:30
    1.课程论文题目 图书管理系统 2.程序设计思路 图书管理系统保持记录以进行删除,查询,借书,还书,退出,添加等等...3.为每个图书信息设置一个结构体,提供查询功能,还有删除功能以及借书还书功能。 4.每运行一...

    1.题目
    图书管理系统
    2.程序设计思路
    图书管理系统保持记录以进行删除,查询,借书,还书,退出,添加等等操作;使用菜单以实现功能选择模块。
    3.功能模块图
      系统功能模块图(增删改查)

    4.数据结构设计
    1.编写主函数main ()
    2.设计功能选项并标号,用switch选择,然后进入不同模块,进行不同选择,实现不同功能。
    3.为每个图书信息设置一个结构体,提供查询功能,还有删除功能以及借书还书功能。
    4.每运行一功能后都返回主菜单,方便再次选择,设置退出模块,方便退出。

    5.程序代码

    #include<stdio.h>
    #include<windows.h>
    #include<string.h>
    #include<conio.h>
    #define M 100
    struct books
    {
    	char BookName[12];
    	int BookNumber;
    	float Price;
    	char Writter[12];
    	char ExistentialState[12];
    	char Name[12];
    	char Sex[12];
    	int SchoolNember;
    }s[M];
    int N;
    
    int main ()
    { 
    	int sele; 
    	sele=1;
    	void Input();
    	void  Query();
    	int Delete();
    	void Borrow();
    	void  Return();
    	
    	void Finish();
    	while (1)
    	{	
    		system("cls"); 
    		
    		printf("\n\n");
    		printf("***********************************************|     1.图书入库      |***********************************************\n\n");
    		printf("***********************************************|     2.图书查询      |***********************************************\n\n");
    		printf("***********************************************|     3.删除图书      |***********************************************\n\n");
    		printf("***********************************************|     4.图书借阅      |***********************************************\n\n");
    		printf("***********************************************|     5.图书归还      |***********************************************\n\n");
    		printf("***********************************************|     0.退出软件      |***********************************************\n\n");
    		label_1:printf("\n\n请输入功能序号:");
    	    scanf ("%d",&sele);
    
    		if(sele>=0 && sele<=5)
    		
    
    	switch(sele)
    	{
    		case 1:Input();break;
    	    case 2:Query();break;
    	 	case 3:Delete();break;
    	    case 4:Borrow();break;
    	    case 5:Return();break;
    	    case 0:Finish();break;
    	}	
    		else
    		{
    			printf("输入错误请再次输入|\n\n");
    			goto label_1;
    		}
    		
    	
    	
    	}
    	
    }
    
    
    
    
    /*********输入*********/
    void Input()
    { 
     int n,i,m;
     N=0;
    	system("cls");
    	printf("可输入的书本数:");
    	scanf("%d",&n);
    	N += n; m = n;
    	printf("请输入相关信息:\n");
    	for(i=0;i<n;i++)
    	{
    	system("cls");
    	printf("还有%d本书待录入\n", m); m--;
    	printf("图书名称:");
    	scanf("%s",s[N-n+i].BookName);
    	printf("图书编号:");
    	scanf("%d",&s[N-n+i].BookNumber);
    	printf("单价:");
    	scanf("%f",&s[N-n+i].Price);
    	printf("作者:");
    	scanf("%s",&s[N-n+i].Writter);
    	strcpy(s[N-n+i].ExistentialState,"未借出");
    	strcpy(s[N-n+i].Name,"无");
    	}
    	printf("已成功入库%d本图书~~~,3秒后自动返回主菜单",n);
    	Sleep(3000);
    }
    
    
    
    /********查询**********/
    void Query()
    {
    	int i,j[100]={-1},d,k,t=0;
    	char m[20];
    	label_2:system("cls");
    	printf("查询:");
    	printf("1:图书名称              2:图书编号");
    	printf("\n\n请输入查询选项:");
    	scanf("%d",&k);
    	if(k==1)
    	{
    		system("cls"); 
    		printf("请输入图书名称:");
    		scanf("%s",m);
    		for(i=0;i<N;i++)
    		if(strcmp(m,s[i].BookName)==0)
    		{
    		j[t]=i;
    		t=t+1;
    		}
    	}
    	else if(k==2)
    	{
    		system("cls"); 
    		printf("请输入图书编号:");
    		scanf("%d",&d);
    		for(i=0;i<N;i++)
    		if(d==s[i].BookNumber)
    		{
    		j[t]=i;
    		t++;
    		}
    	}
    	if (j[0] == -1 && t == 0)
    	{
    		system("cls");
    		printf("书库暂时没有这本书哦~^_^\n\n继续查询吗?【按1继续/按其他键回主菜单】");
    		scanf("%d", &k);
    		if (k == 1)
    			goto label_2;
    		
    	}
    	if(j[0]!=-1 && t!=0)
    	{
    		system("cls"); 
    		printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
    	for(i=0;i<t;i++)
    	printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ",s[j[i]].BookName,s[j[i]].BookNumber,s[j[i]].Price,s[j[i]].Writter,s[j[i]].ExistentialState,s[j[i]].Name,s[j[i]].Sex,s[j[i]].SchoolNember);
    	printf("\n\n继续查询吗?【按1继续/按其他键回主菜单】");
    	scanf("%d", &k);
    	if (k == 1)
    		goto label_2;
    	}
    }
    /********删除模块*********/
    int Delete()
    {
    	int i,d,k,t=0;
    	char ms[20];
    	int ja=-1;
        label_1:system("cls");
    	printf("查询:");
    	printf("1:图书名称              2:图书编号");
    	printf("\n\n请输入查询选项:");
    	scanf("%d",&k);
    	if(k==1)
    	{
    		system("cls"); 
    		printf("请输入图书名称:");
    		scanf("%s",ms);
    		for(i=0;i<N;i++)
    		if(strcmp(ms,s[i].BookName)==0)
    		{
    		ja=i;
    		break;
    		}
    	}
    	else if(k==2)
    	{
    		system("cls"); 
    		printf("请输入图书编号:");
    		scanf("%d",&d);
    		for(i=0;i<N;i++)
    		if(d==s[i].BookNumber)
    		{
    		ja=i;
    		break;
    		}
    	}
    	printf("确定删除该图书吗?\n********1表示Yes,其他No*********");
    	int p;
    	scanf("%d",&p);
    	if (p == 1)
    	{
    		printf("删除中...");
    		Sleep(300);
    		
    	}
    	if (p != 1)
    		return 0;
    	if(ja!=-1 && p==1)
    	{
    		N=N-1;
    		for(i=ja;i<N;i++)
    		{
    			strcpy(s[i].BookName,s[i+1].BookName);
    			s[i].BookNumber=s[i+1].BookNumber;
    			s[i].Price=s[i+1].Price;
    			strcpy(s[i].Writter,s[i+1].Writter);
    			strcpy(s[i].ExistentialState,s[i+1].ExistentialState);
    			strcpy(s[i].Name,s[i+1].Name);
    			strcpy(s[i].Sex,s[i+1].Sex);
    			s[i].SchoolNember=s[i+1].SchoolNember;
    		}
    		printf("删除成功\n"); 
    		printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
    		scanf("%d", &k);
    		if (k == 1)
    			goto label_1;
    	}
    	else if (ja == -1)
    	{
    		
    		printf("书库暂时没有这本书哦~^_^\n");
    		printf("\n\n继续删除吗?【按1继续/按其他键回主菜单】");
    		scanf("%d", &k);
    		if (k == 1)
    			goto label_1;
    	}
    }
    
    /**********借书模块***********/
    void Borrow()
    {
    		int i,j[100]={-1},d,k,t=0;
    		char m[20];
    		label_1:system("cls");
    		printf("查询:");
    		printf("1:图书名称              2:图书编号");
    		printf("\n\n请输入查询选项:");
    		scanf("%d",&k);
    		if(k==1)
    		{
    			system("cls"); 
    			printf("请输入图书名称:");
    			scanf("%s",&m);
    			for(i=0;i<N;i++)
    			if(strcmp(m,s[i].BookName)==0)
    			{
    			j[t]=i;
    			t=t+1;
    			}
    		}
    	else if(k==2)
    	{
    		system("cls");
    		printf("请输入图书编号:");
    		scanf("%d",&d);
    		for(i=0;i<N;i++)
    		if(d==s[i].BookNumber)
    		{
    		j[t]=i;
    		t++;
    		}
    	}
    		if (j[0] == -1 && t == 0)
    		{
    			printf("没有找到这本书喔~~\n"); 
    			printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
    			scanf("%d", &k);
    			if (k == 1)
    				goto label_1;
    		}
    	
    	if(j[0]!=-1&&t!=0&&s[j[i]].ExistentialState==" 未借出")
    	{
    		system("cls"); 
    		printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
    		printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
    	}
    	printf("\n\n****************\n****************1:确定借阅  2:退出\n****************\n");
    	scanf("%d",&k);
    	switch(k)
    	{
    	case 1:system("cls"); 
    		printf("请输入学号:\n");
    	scanf("%d",&s[j[i]].SchoolNember);
    	printf("请输入姓名:\n");
    	scanf("%s",&s[j[i]].Name);
    	printf("请输入性别:\n");
    	scanf("%s",&s[j[i]].Sex);
    	strcpy(s[j[i]].ExistentialState,"已借出");
    	printf("借阅成功"); printf("\n\n继续借书吗?【按1继续/按其他键回主菜单】");
    	scanf("%d", &k);
    	if (k == 1)
    		goto label_1;
    	break;
    	
    	case 2:system("cls"); break;
    	}
    }
    
    /*************还书模块***************/
    void Return()
    {
    		int i,j[100]={-1},d,k,t=0;
    		char m[20];
    		label_1:system("cls");
    		printf("查询:");
    		printf("1:图书名称              2:图书编号");
    		printf("\n\n请输入查询选项:");
    		scanf("%d",&k);
    		if(k==1)
    		{
    			system("cls"); 
    			printf("请输入图书名称:");
    			scanf("%s",&m);
    			for(i=0;i<N;i++)
    			if(strcmp(m,s[i].BookName)==0)
    			{
    			j[t]=i;
    			t++;
    			break;
    			}
    		}
    	else if(k==2)
    	{
    		system("cls"); 
    		printf("请输入图书编号:");
    		scanf("%d",&d);
    		for(i=0;i<N;i++)
    		if(d==s[i].BookNumber)
    		{
    		j[t]=i;
    		t++;
    		break;
    		}
    	}
    		if (t == 0)
    		{
    			printf("没有找到这本书喔~~\n");
    			printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
    			scanf("%d", &k);
    			if (k == 1)
    				goto label_1;
    		}
    	else 
    	{
    		system("cls"); 
    		printf("\t图书名称 \t图书编号 \t单价 \t作者 \t存在状态 \t借书人姓名 \t性别 \t学号\n");
    		printf("\t%s       \t%d       \t%.3f\t%s   \t%s   \t%s         \t%s    \t%d ", s[j[i]].BookName, s[j[i]].BookNumber, s[j[i]].Price, s[j[i]].Writter, s[j[i]].ExistentialState, s[j[i]].Name, s[j[i]].Sex, s[j[i]].SchoolNember);
    		printf("\n\n****************\n****************1:确定归还  2:退出\n****************\n");
    		int p;
    		scanf("%d",&p);
    		if(p==1)
    		{
    		system("cls"); 
    		strcpy(s[j[i]].ExistentialState,"未借出");
    		strcpy(s[j[i]].Name,"无");
    		s[j[i]].SchoolNember=0;
    		printf("已归还\n");
    		printf("\n\n继续还书吗?【按1继续/按其他键回主菜单】");
    		scanf("%d", &k);
    		if (k == 1)
    			goto label_1;
    		}
    	 
    	}
    }
    /*************结束模块***************/
    void Finish()
    {
    	exit(0);
    }
    
    
    

    参考资料:c语言程序设计报告 图书管理系统

    展开全文
  • c语言编写图书管理系统例子

    千次阅读 2021-04-08 20:37:59
    #关于用C语言(c++类似)编写一个在控制台展示的图书管理系统(帮朋友写的课程作业) #其中只有图书增加 删除 借书 还书 查找图书 5个功能(小试牛刀) #工具:visual studio2019 #设计图 #思路是:打算用链表操作...

    #关于用C语言(c++类似)编写一个在控制台展示的图书管理系统(帮朋友写的课程作业)
    #其中只有图书增加 删除 借书 还书 查找图书 5个功能(小试牛刀)
    #工具:visual studio2019
    #设计图
    在这里插入图片描述
    #思路是:打算用链表操作数据 然后把数据写入到txt文件 每次执行数据操作前从txt文件把数据读取到链表

    下面先看看功能展示图

    图书馆里主界面样子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    #下面贴代码,因为只是小作业,所以没有用良好的编写习惯,只用了一个.c文件就把所有代码写完了(无自定义头文件)

    1.include要用的头文件,定义struck结构体,定义函数

    #define _CRT_SECURE_NO_WARNINGS//只会在该文件里起作用,下面会用到一些不安全函数(版本问题)strcpy,scanf
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #pragma warning(disable:4996)
    struct book {
    	int bid; //书本号
    	char bname[100]; //书名
    	char wname[100]; //作者
    	char publish[100]; //出版社
    	int present_count; //当前在架册数
    	int old_count; //馆藏册数
    	char show[100]; //书本简介
    	struct book* next; //结构体内指针变量
    	};
    	
    
    //定义函数
    struct book* creatbook();                          //创建链表
    struct book* addbook(struct book* head);           //添加图书
    int yanzheng(struct book* head, int m);             //验证新添加的图书编码是否已存在
    void deletebook(struct book* head);                //删除图书
    void fprint(struct book* head);                    //将链表写入文件
    struct book* load();                               //从文件中读取信息并建成链表
    void num_chaxun(struct book* head);                //按图书编号查询图书
    void xiugai(struct book* head);  //借阅书本
    void xiugai2(struct book* head); //归还书本
    

    2.编写程序入口main函数

    int main()
    {
    	int choice, x;
    	
    	struct book* head = NULL;//初始化头指针
    	
    				x = 1;
    				
    				while (x) {
    					system("cls");
    					printf("*******************************************************\n");
    					printf("*             图 书 馆 管 理 系 统                    *\n");
    					printf("*                    主菜单                           *\n");
    					printf("*                                                     *\n");
    					printf("*                  1,图书上架                         *\n");
    					printf("*                  2,图书下架                         *\n");
    					printf("*                  3,查找图书                         *\n");
    					printf("*                  4,图书出借                         *\n");
    					printf("*                  5,图书归还                         *\n");
    					printf("*                  6,退出系统                         *\n");
    					printf("*                                                     *\n");
    					printf("*                  请选择菜单项:(1^6)              *\n");
    					printf("*******************************************************\n");
    					printf("请输入所选择的序号:");
    					scanf("%d", &choice);
    					getchar();//获得键盘输入
    					system("cls");
    					switch (choice)
    					{
    					case 6:
    						x = 0; break;
    					case 1:
    						head = load();//从文件中读取数据到链表
    						if (head == NULL) {
    							head = creatbook();录入实例到txt文件。其实这个方法很蠢 写的时候没想到,可以直接在txt手动加实例就好了
    							head = addbook(head);
    							fprint(head);
    							printf("上架成功!\n");
    							getchar();
    							break;
    						}
    						else {
    							head = addbook(head);
    							fprint(head);
    							printf("上架成功!\n");
    							getchar();
    							break;
    						}
    
    					case 2:
    						head = load();
    						if (head == NULL) {
    							printf("书库为空,请先上架书本!\n");
    							getchar();
    							break;
    						}
    
    						else {
    							deletebook(head);
    							getchar();
    							break;
    						}
    						break;
    					
    					
    					case 3:
    						head = load();
    						if (head == NULL) {
    							printf("书库为空,请先上架书本!\n");
    							getchar();
    							break;
    						}
    						else {
    							num_chaxun(head);
    							getchar();
    							break;
    						}
    						break;
    					case 4:
    						head = load();
    						if (head == NULL) {
    							printf("书库为空,请先上架书本!\n");
    							getchar();
    							break;
    						}
    						else {
    							
    							xiugai(head);
    							getchar();
    							break;
    						}
    						break;
    
    
    					case 5:
    						head = load();
    						if (head == NULL) {
    							printf("书库为空,请先上架书本!\n");
    							getchar();
    							break;
    						}
    						else {
    							
    							xiugai2(head);
    							getchar();
    							break;
    						}
    						break;
    					
    					}
    
    				}
    			}
    

    3.函数编写

    //录入数据并形成链表
    struct book* creatbook()
    {
    	struct book* head, * tail, * p;
    	//初始时给txt文件添加一个实例先 免得报空指针错误,排错时间更多 不如提前堵住可能报错的问题
    	int num=1, num2=1, num3=1;
    	char bname[100]="实例", wname[100]= "实例", press[100]= "实例", sort[100]= "实例";
    	//sizeof操作符以字节形式给出了其操作数的存储大小
    	int size = sizeof(struct book);
    	head = tail = NULL;
    	
    	//malloc函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
    		p = (struct book*)malloc(size);
    		p->bid = num;
    		//strcpy函数对字符串进行复制拷贝之类的操作
    		strcpy(p->bname, bname);
    		strcpy(p->wname, wname);
    		strcpy(p->publish, press);
    		strcpy(p->show, sort);
    		p->present_count = num2;
    		p->old_count = num3;
    		p->next = NULL;
    		if (head == NULL)
    			head = p;
    		else
    			tail->next = p;
    
    		tail = p;
    		fprint(head);//调用写入数据到txt文件函数
    	    return head;
    }
    
    //将链表写入文件
    void fprint(struct book* head)
    {
    	FILE* fp;//文件指针
    	char ch = '1';
    	struct book* p1;
    	if ((fp = fopen("f1.txt", "w")) == NULL) {//打开文件
    		printf("File open error!\n");
    		exit(0);
    	}
    	fputc(ch, fp);//返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。EOF是在头文件 stdio.h中定义的宏。
    	for (p1 = head; p1; p1 = p1->next) {
    		fprintf(fp, "%d %s %s %s %d %d %s\n", p1->bid, p1->bname, p1->wname, p1->publish, p1->present_count, p1->old_count, p1->show);
    	}
    	fclose(fp);
    }
    
    从txt文件中读取数据并建成链表
    struct book* load()
    {
    	FILE* fp;
    	char ch;
    	struct book* head, * tail, * p1;
    	head = tail = NULL;
    	if ((fp = fopen("f1.txt", "r")) == NULL) {
    		printf("File open error!\n");
    		exit(0);
    	}
    	//从文件指针指定的文件中读入一个字符,该字符的ASCII值作为函数的返回值,若返回值为EOF,说明文件结束,EOF是文件结束标志,值为-1。
    	ch = fgetc(fp);
    	if (ch == '1') {
    
    		while (!feof(fp)) {
    			p1 = (struct book*)malloc(sizeof(struct book));
    			fscanf(fp, "%d%s%s%s%d%d%s\n", &p1->bid, p1->bname, p1->wname, p1->publish, &p1->present_count, &p1->old_count, p1->show);
    			if (head == NULL)
    				head = p1;
    			else
    				tail->next = p1;
    			tail = p1;
    		}
    		tail->next = NULL;
    		fclose(fp);
    		return head;//返回值可用来确定文件中是否有数据(图书馆中是否有书)
    	}
    	else
    		return NULL;
    
    }
    
    
    //插入结点,并且插入后仍按一定顺序存储
    struct book* addbook(struct book* head)
    {
    
    	struct book* ptr, * p1, * p2, * p;
    	p1 = NULL;
    	char bname[100], wname[100], press[100], sort[100];
    	int size = sizeof(struct book);
    	int bid, present_count, old_count ,n ;
    	
    	do {
    		printf("请输入图书编号:");
    		scanf("%d", &bid);
    		n = yanzheng(head, bid);//调用函数判断该编号是否存在
    		if (n == 0)
    			break;
    		else
    			printf("您输入的编号已存在,请重新输入!\n");
    	} while (1);
    	printf("请输入图书名:");
    	scanf("%s", bname);
    	getchar();
    	printf("请输入作者名:");
    	scanf("%s", wname);
    	getchar();
    	printf("请输入出版社:");
    	scanf("%s", press);
    	getchar();
    	printf("请输入当前在架册数:");
    	scanf("%d", &present_count);
    	getchar();
    	printf("请输入管藏册数:");
    	scanf("%d", &old_count);
    	getchar();
    	printf("请输入书本简介:");
    	scanf("%s", sort);
    	getchar();
    	p = (struct book*)malloc(size);
    	p->bid = bid;
    	strcpy(p->bname, bname);
    	strcpy(p->wname, wname);
    	strcpy(p->publish, press);
    	strcpy(p->show, sort);
    	p->present_count = present_count;
    	p->old_count = old_count;
    	p2 = head;
    	ptr = p;
    	while ((ptr->bid > p2->bid) && (p2->next != NULL)) {
    		p1 = p2;
    		p2 = p2->next;
    	}//1,2,3,4,插入5 要把p2头指到4 此时p1指到3 ;1,2,5 插入4 要把p2指到5 此时p1指到2
    	if (ptr->bid <= p2->bid) {
    		if (head == p2)
    			head = ptr;
    		else {
    			p1->next = ptr;
    			p->next = p2;
    		}
    	}
    	else {
    		p2->next = ptr;
    		p->next = NULL;
    	}
    	return head;
    }
    
    //验证添加的图书编号是否已存在
    int yanzheng(struct book* head, int m)
    {
    	struct book* p;
    	p = head;
    	while (p != NULL) {
    		if (p->bid == m)
    			break;
    		p = p->next;
    	}
    	if (p == NULL)
    		return 0;
    	else
    		return 1;
    }
    
    //删除图书信息
    void deletebook(struct book* head)
    {
    	int a;
    	char b, ch = '1';
    	struct book* p1, * p2;
    	FILE* fp;
    	printf("请输入要删除的图书编号:");
    	scanf("%d", &a);
    	p1 = head;
    	p2 = NULL;
    	if (p1->bid == a && p1->next == NULL) {  //假如txt里只有最初添加的实例一组数据时       
    		printf("是否下架唯一的书!(y/n)\n");
    		getchar();
    		scanf("%c", &b);
    		getchar();
    		switch (b) {
    		case 'n':
    			break;
    		case 'y':
    
    			if ((fp = fopen("f1.txt", "w")) == NULL) {
    				printf("File open error!\n");
    				exit(0);
    			}
    			fclose(fp);
    			printf("文件已清空!\n");
    		}
    	}
    	else {
    		while (p1->bid != a && p1->next != NULL) {//不止一组数据,要删除节点也不是头节点时,寻找到对应编号对应的数据
    			p2 = p1;
    			p1 = p1->next;
    		}
    
    		if (p1->next == NULL) {
    			if (p1->bid == a) {
    				p2->next = NULL;
    				printf("是否确定从书架中彻底删除该图书?(y/n)\n");
    				getchar();
    				scanf("%c", &b);
    
    				switch (b) {
    				case 'n':
    					break;
    				case 'y':
    					fprint(head);
    					printf("删除成功!\n");
    					getchar();
    					break;
    				}
    			}
    
    			else {
    				printf("没有找到要删除的数据!\n");
    				getchar();
    			}
    		}
    		else if (p1 == head) {//删除节点时头结点时
    			head = p1->next;
    			printf("是否确定从书架中彻底删除该图书?(y/n)\n");
    			getchar();
    			scanf("%c", &b);
    
    			switch (b) {
    			case 'n':
    				break;
    			case 'y':
    				fprint(head);
    				printf("删除成功!\n");
    				getchar();
    				break;
    			}
    
    		}
    		else {
    			p2->next = p1->next;
    			printf("是否确定从书架中彻底删除该图书?(y/n)\n");
    			getchar();
    			scanf("%c", &b);
    
    			switch (b) {
    			case 'n':
    				break;
    			case 'y':
    				fprint(head);
    				printf("删除成功!\n");
    				getchar();
    				break;
    			}
    		}
    	}
    
    }
    
    //按编号查询图书信息
    void num_chaxun(struct book* head)
    {
    	int a;
    	struct book* p;
    	printf("请选择您要查询的图书编号:");
    	scanf("%d", &a);
    	getchar();
    	p = head;
    	while (p != NULL) {
    		if (p->bid == a)
    			break;
    		p = p->next;
    	}
    
    	if (p == NULL) {
    		printf("没有找到该编号的图书!\n");
    	}
    	else {
    		printf("书本信息:\n");
    		printf("书名:%s\n", p->bname);
    		printf("作者:%s\n", p->wname);
    		printf("当前在架册数:%d\n", p->present_count);
    		printf("馆藏册数:%d\n", p->old_count);
    		printf("本书简介:%s\n", p->show);
    
    	}
    }
    
    //借阅书本 更改txt内对应书本编号的数量
    void xiugai(struct book* head)
    {
    	int a;
    	
    	
    	struct book* p;
    
    	
    		printf("请输入要借的书本号:");
    		scanf("%d", &a);
    
    		p = head;
    
    
    		while (p != NULL) {
    			if (p->bid == a)
    				break;
    			p = p->next;
    		}
    
    
    		if (p == NULL) {
    			printf("没有找到该编号的图书!\n");
    			getchar();
    		}
    
    
    		else {
    			
    			printf("书名:%s\n", p->bname);
    			printf("作者:%s\n", p->wname);
    			printf("当前在架册数:%d\n", p->present_count);
    			printf("馆藏册数:%d\n", p->old_count);
    			printf("本书简介:%s\n", p->show);
    			getchar();
    				p->old_count = p->old_count - 1;
    				p->present_count = p->present_count - 1;
    				fprint(head);//修改后写入文件
    				printf("借阅成功\n");
    				getchar();
    	
    		}
    	}
    
    //归还书籍,改变数量
    void xiugai2(struct book* head){
    	int a;
    	
    	
    	struct book* p;
    	
    		printf("请输入要还的书本号:");
    		scanf("%d", &a);
    		
    		p = head;
    		while (p != NULL) {
    			if (p->bid == a)
    				break;
    			p = p->next;
    		}
    
    		if (p == NULL) {
    			printf("没有找到该编号的图书!\n");
    			getchar();
    		}
    		else {
    			
    			printf("书名:%s\n", p->bname);
    			printf("作者:%s\n", p->wname);
    			printf("当前在架册数:%d\n", p->present_count);
    			printf("馆藏册数:%d\n", p->old_count);
    			printf("本书简介:%s\n", p->show);
    			
    			getchar();
    			
    				p->old_count = p->old_count + 1;
    				p->present_count = p->present_count + 1;
    				fprint(head);
    				printf("归还成功\n");
    				getchar();
    				
    			}
    		}
    	
    
    展开全文
  • C语言编写简易图书管理系统

    千次阅读 多人点赞 2019-07-01 09:53:09
    3,统计总价格(并存入另一个文件夹中) 4,图书修改 5,图书借阅功能 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章...

    1,查询功能

    2,排序功能

    3,统计总价格(并存入另一个文件夹中)

    4,图书修改

    5,图书借阅功能

    在程序开始之前,需创建一个txt文件夹写入信息,我的txt文件保存在D盘的根目录下,所以books函数是D:…
    如图
    这个是这个程序需要的txt文件,如果不需要可以自己创建
    详细设计:
    程序中的主要调用函数功能在menu()函数的switch中,main函数只需调用menu()函数,在menu()函数中利用switch调用各个函数中的功能,在最外层添加do-while(1)死循环,在do-while上面先调用books()函数,将txt文件存入结构体变量中,然后在do-while中选择自己所需要的功能调用函数。在各个函数结尾都存在调用menu函数或者调用自己,若想结束程序,则必须先返回主菜单选择0确定结束程序即可。

    功能要求:
    1.将txt文件中的内容存入结构体数组中时,第一步应该用FILE *fp=fopen(“txt文件中的地址,需要添加后缀.txt”,”r”);可以适当加一个if语句判断fp是否等于NULL。先存入第一行,用一个单独的字符串数组存,然后可以用for。
    循环或者while将后面的的信息依次一行行存入结构体中,并要在存储完了以后加上文件关闭fcolse()。
    2.在主函数中调用菜单函数,利用菜单函数选项加入switch调用各函数的功能,并加入死循环,用退出选项调用函数退出。
    3.图书查询功能,按书名查找,先用for循环判断这个书是否在已经存入的结构体数组中,并引入一个判断条件,如果实在数组中,则令那个int值为一个特定值,则就可以在函数外用if—else语句写存在后与不存在时的操作,当存在时,则打印第一行的标题与对应的图书,不存在时则提示无此书。在这个函数的后面还可以加入判断条件,是否继续查询,是的话就调用这个查询功能函数,不是则调用主菜单返回。
    4.打印全部图书直接用for循环打印即可
    5.排序图书的数量,用冒泡排序法,互换了数量的位置后将与其对应的编号图书名等也互换位置,字符串用strcpy复制,数值用赋值
    6.重新定义一个总价数组,将将总价存入数组中,打开另一个文件,”w”只写,然后在第一行加入总价并存入文件中,用for循环将下面的信息存入另一个文件中。
    7.先用图书名或者作家名查找是否存在此图书,如果存在则显示该图书的信息,然后提示你所要修改的选项,利用switch语句修改对应的选项,字符串用strcpy,数值用赋值,修改完后将文件打开重新存入文件夹中,然后在函数结尾提示是否继续修改图书操作即可。
    8.借阅图书时,先查找是否有此图书,如果有判断其图书的数量是否大于0,大于0则将其数量减1,否则提示库存不足,查询最后一次还没有找到此书则提示无此书。
    9.退出程序时用exit(0).

    第一次写博客,不喜勿喷!!!

    全部代码

    #include  "stdio.h"
    #include  "stdlib.h"              //system("cls")清空上面的内容用到的头文件 
    #include  "string.h"
    #define N 100
    typedef struct book                //用了typedef以后定义结构体时候不用struct Book a[N],直接用Book a[N]; 
    {
    	int num;	            //编号
    	char type[20];	     //分类 
    	char name[20];        //书名
    	char author[20];      //作者
    	char press[30];     //出版社
    	int quantity;         //数量 
    	double price;          //价格
    	char nume[7];            //txt文件中的第一行 
    }Book;
    
    Book a[N];
    
    void menu();     //菜单
    void books();    //将txt文件存入结构体 
    void refer();    //1.查询
    void show();     //2.打印全部图书
    void amount();    //3.查看图书数量
    void pr();         //4.统计价格
    void alter();       //5.图书修改
    void borrow();      //6.借阅图书 
    void over();      //7.退出
     
    void menu()										  //@@@@@@@@@@@@@@@@@@@@菜单 
    {
    	books();
    	do
    	{
    		int n;
    		printf(" __________________________________\n"); 
    		printf("|******---------------------******|\n");
    		printf("|      欢迎进入图书管理系统       |\n"); 
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|  *       1.图书查询          *  |\n");
    		printf("|  *       2.打印全部图书      *  |\n");
    		printf("|  *       3.图书数量排序      *  |\n");     //按数量排序 
    		printf("|  *       4.统计价格          *  |\n");   //统计每本书的总价及所有图书的总价
    		printf("|  *       5.图书修改          *  |\n");
    		printf("|  *       6.借阅图书          *  |\n");
    		printf("|  *       0.退出              *  |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|                                 |\n");
    		printf("|******---------------------******|\n");
    		printf("|_________________________________|\n");
    		printf("                 注:输入对应序号!\n"); 
    		scanf("%d",&n);
    		fflush(stdin);
    		switch( n )
    		{
    			case 1 : refer();   break;
    			case 2 : show();    break;
    			case 3 : amount();  break;
    			case 4 : pr();      break;
    			case 5 : alter();   break;
    			case 6 : borrow();  break;
    			case 0 : over();    break;
    			default :break;
    		}
    	}while(1); 
    }
    void books()                                      //@@@@@@@@@@@@@@@@@@@@@@@将txt文件存入结构体 
    {
    	int n = 0;
        FILE *fr = fopen("D:\JK0627.txt","r+"); 
        if(fr == NULL) {
            printf("打开文件出错。\n");
            return 1;
        }
                                   //存入第一行
        fscanf(fr,"%s\t%s\t%s\t%s\t%s\t%s\t%s",&a[0].nume,&a[1].nume,&a[2].nume,&a[3].nume,&a[4].nume,&a[5].nume,&a[6].nume);                  
    	while(!feof(fr)) {                           //      feof(fr)有两个返回值:   如果遇到文件结束,函数feof(fr)的值为非零值,否则为0
    	                     	//存入1~10行       整数类的必须加入地址符,字符串可要可不要 
            fscanf(fr,"%d\t%s\t%s\t%s\t%s\t%d\t%lf\n",&a[n].num,&a[n].type,&a[n].name,&a[n].author,&a[n].press,&a[n].quantity,&a[n].price);
            n++;
        }
        fclose(fr);
    }
    
    void refer()                                     //@@@@@@@@@@@@@@@@@@@@@@@ 图书查询 
    {
    	int i,n,m=0,p;
    	char nam[30];
    	system("cls");
    	printf("请输入您要查询的书名:");
    	scanf("%s",&nam);
    	fflush(stdin);
    	for( i=0; i < 10; i++ )
    	{
    		if( strcmp(nam,a[i].name) == 0 ){              
    			m = 1;
    			p = i;                   //       p值为了记录i为多少,方便后面使用 
    			break;
    		}
    	}
    	if( m = 1) {
    		system("cls");
    		printf("*************************************************图书总览***********************************************\n");
    		printf("--------------------------------------------------------------------------------------------------------\n");
                             //         打印第一行
    		printf("%s\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);   
                              //         打印特定行 
    		printf("%d\t%-10s\t%s\t%-10s\t%-20s\t%d\t\t%.2lf\n",a[p].num,a[p].type,a[p].name,a[p].author,a[p].press,a[p].quantity,a[p].price);    
    		printf("--------------------------------------------------------------------------------------------------------\n");
    	}else {
    			printf("馆内无此书!");
    	}
    	printf("\n\n-----------------------\n");
    	printf("|   是否继续查询?    |\n");
    	printf("| 1.是     2.否   |\n");
    	printf("-----------------------\n");
    	scanf("%d",&n); 
    	if( n==1 ){
    		refer();
    	}
    	else if( n==2 ){
          system("cls");
    		menu();
    	}
    }
    
    void show()                                  //@@@@@@@@@@@@@@@@@@@ 打印全部图书
    {
    	system("cls");
    	int i;
    	char n;
    	printf("*************************************************图书总览***********************************************\n");
    	printf("--------------------------------------------------------------------------------------------------------\n");
    	printf("%s\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);
    	for( i=0; i<10; i++ )
    	{
    		printf("%d\t%-10s\t%s\t%-10s\t%-20s\t%d\t\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price);
    	}
    	printf("--------------------------------------------------------------------------------------------------------\n");
    	printf("\n按任意字符回车返回主菜单!\n");
    	fflush(stdin);
    	n=getchar();
    	system("cls");
    	menu();
    }
    
    void amount()                                     //@@@@@@@@@@@@@@@查看图书数量
    {
    	int i,j;
    	char n;
    	for( i=0; i<10-1; i++ )
    	{
    		for( j=0; j<10-1-i; j++ )
    		{
    			if( a[j].quantity > a[j+1].quantity )                                      //冒泡排序法 
    			{
    				int m;
    				double p;
    				char b[30];
    				m = a[j].quantity; a[j].quantity = a[j+1].quantity; a[j+1].quantity = m;		//当数量互换了位置以后,其对应的价格以及分类也要对应互换位置 
    				m = a[j].num; a[j].num = a[j+1].num; a[j+1].num = m;
    				p = a[j].price; a[j].price = a[j+1].price; a[j+1].price = p;
    				strcpy(b,a[j].type); strcpy(a[j].type,a[j+1].type); strcpy(a[j+1].type,b);
    				strcpy(b,a[j].name); strcpy(a[j].name,a[j+1].name); strcpy(a[j+1].name,b);
    				strcpy(b,a[j].author); strcpy(a[j].author,a[j+1].author); strcpy(a[j+1].author,b);
    				strcpy(b,a[j].press); strcpy(a[j].press,a[j+1].press); strcpy(a[j+1].press,b);
    			}
    		}
    	}
    	system("cls");								//将重新排序的结果打印 
    	printf("*************************************************图书总览***********************************************\n");
    	printf("--------------------------------------------------------------------------------------------------------\n");
    	printf("%s\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);
    	for( i=0; i<10; i++ )
    	{
    		printf("%d\t%-10s\t%s\t%-10s\t%-20s\t%d\t\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price);
    	}
    	printf("--------------------------------------------------------------------------------------------------------\n");
    	printf("\n按任意字符回车返回主菜单!\n");
    	fflush(stdin);
    	n=getchar();
    	system("cls");
    	menu();
    }
    
    void pr()                                       //  @@@@@@@@@@@@@@@@@@@统计价格
    {
    	int i;
    	char n;
    	double b[10],sum=0.0;
    	for( i=0; i<10; i++ )
    	{
    		b[i] = a[i].price*a[i].quantity;                          //重新定义的一个b数组   将图书的数量与对应的价格相乘 
    		sum = sum + b[i];
    	}
    	FILE *fp = fopen("D:\ZJ0627.txt","w");                                  //将总价格一起写入另一个文件夹中 
    	fprintf(fp,"%s\t%s\t%s\t\t%s\t\t%s\t\t\t%s\t%s\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume,"总价");
    	for( i=0; i<10; i++ ){
    	                     	//存入1~10行
            fprintf(fp,"%d\t%s\t%-20s\t%s\t\t%-30s\t%d\t%.2lf\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price,b[i]);
        }
        fprintf(fp,"\t\t\t\t\t\t\t\t\t\t%s\t%.2lf","总价",sum);       //最后一行写入总价    
        if( fp != NULL )
        {
        	system("cls");
        	printf("恭喜你,存入文件夹成功!\n");
    	}
    	fclose(fp);
    	printf("\n按任意字符回车返回主菜单!\n");
    	fflush(stdin);
    	n=getchar();
    	system("cls");
    	menu();
    }
    
    void alter()                                      // @@@@@@@@@@@@@@@@@@@图书修改
    {
    	system("cls");
    	char b[20],c[20];
    	int i,n,m;
    	double p;
    	printf("输入你要修改的图书名或作家名:");
    	fflush(stdin);
    	scanf("%s",&b);
    	for( i=0; i<10; i++ )
    	{
    		if( strcmp( b , a[i].name ) == 0 || strcmp( b , a[i].author) == 0 )
    		{
    			system("cls"); 
    			printf("*************************************************图书总览***********************************************\n");
    			printf("--------------------------------------------------------------------------------------------------------\n");
    	                    //         打印第一行
    			printf("%s\t%s\t\t%s\t\t%s\t\t%s\t\t\t%s\t\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);   
    	               //         打印1~10行 
    			printf("%d\t%-10s\t%s\t%-10s\t%-20s\t%d\t\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price);    
    			printf("--------------------------------------------------------------------------------------------------------\n");
    			printf("\n注:编号(0),分类(1),书名(2),作者(3),出版社(4),数量(5),单价(6)\n输入您要修改的选项的序号:");
    			fflush(stdin);
    			scanf("%d",&n);
    			switch( n )
    			{
    				system("cls");
    				case 0:printf("输入你要修改后的[%s]:",a[0].nume);fflush(stdin);scanf("%d",&m);a[i].num = m;     //   整数赋值 
    				if( a[i].num == m ){	printf("修改成功!\n");	}	break;
    				case 1:printf("输入你要修改后的[%s]:",a[1].nume);fflush(stdin);scanf("%s",&c);strcpy(a[i].type,c);   //字符拷贝strcpy 
    				if( strcmp(a[i].type,c) == 0 ){	printf("修改成功!\n");	}	break;
    				case 2:printf("输入你要修改后的[%s]:",a[2].nume);fflush(stdin);scanf("%s",&c);strcpy(a[i].name,c);
    				if( strcmp(a[i].name,c) == 0 ){	printf("修改成功!\n");}	break;
    				case 3:printf("输入你要修改后的[%s]:",a[3].nume);fflush(stdin);scanf("%s",&c);strcpy(a[i].author,c);
    				if( strcmp(a[i].author,c) == 0 ){	printf("修改成功!\n");}	break;
    				case 4:printf("输入你要修改后的[%s]:",a[4].nume);fflush(stdin);scanf("%s",&c);strcpy(a[i].press,c);
    				if( strcmp(a[i].press,c) == 0 ){	printf("修改成功!\n");}	break;
    				case 5:printf("输入你要修改后的[%s]:",a[5].nume);fflush(stdin);scanf("%d",&m);a[i].quantity = m;
    				if( a[i].quantity == m ){	printf("修改成功!\n");} 	break;
    				case 6:printf("输入你要修改后的[%s]:",a[6].nume);fflush(stdin);scanf("%lf",&p);a[i].price = p;
    				if( a[i].price==p  ){	printf("修改成功!\n");}	break;
    				default :printf("修改失败!\n");	break;
    			}
    			FILE *f = fopen("D:\JK0627.txt","w");                   //  修改成功后重新存入文件中 
    			fprintf(f,"%s\t%s\t%s\t\t%s\t\t%s\t\t\t%s\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);
    			for( i=0; i<10; i++ )
    			{
    				fprintf(f,"%d\t%s\t%-20s\t%s\t\t%-30s\t%d\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price);
    			}
    			if( f != NULL )
    		    {
    		    	printf("存入文件夹成功!\n");
    			}
    			else
    			{
    				printf("存入文件夹失败!\n");
    			}
    			fclose(f);
    			printf("-----------------------\n");
    			printf("|      继续修改?     |\n");
    			printf("| 1.确定     2.取消   |\n");
    			printf("-----------------------\n");
    			fflush(stdin);
    			scanf("%d",&n);
    			if( n==1 ){
    				alter();
    			}else{
    				system("cls");
    				menu();
    			}
    		}else if( i == 9){
    			printf("你所要修改的图书不在书库中,请重新输入!\n");
    			printf("-----------------------\n");
    			printf("|      继续修改?     |\n");
    			printf("| 1.确定     2.取消   |\n");
    			printf("-----------------------\n");
    			fflush(stdin);
    			scanf("%d",&n);
    			if( n==1 ){
    				alter();
    			}else{
    				system("cls");
    				menu();
    			}
    		}
    	}
    }
    
    void borrow()                                 //@@@@@@@@@@@@@@@@@借阅图书 
    {
    	system("cls");
    	int i,n;
    	char b[20];
    	printf("输入你要借阅的书籍:");
    	scanf("%s",&b);
    	for( i=0; i<10; i++ )
    	{
    		if( strcmp( b , a[i].name ) == 0  )          //判断是否有对应相等 
    		{
    			if( a[i].quantity > 0 )
    			{
    				a[i].quantity = a[i].quantity - 1;            //   如果数量大一0 数量减一 
    				printf("\n\n借出成功!");
    				FILE *f = fopen("D:\JK0627.txt","w");                    //减一后再将结果重新存入文件 
    				fprintf(f,"%s\t%s\t%s\t\t%s\t\t%s\t\t\t%s\t%s\n",a[0].nume,a[1].nume,a[2].nume,a[3].nume,a[4].nume,a[5].nume,a[6].nume);
    				for( i=0; i<10; i++ )
    				{
    					fprintf(f,"%d\t%s\t%-20s\t%s\t\t%-30s\t%d\t%.2lf\n",a[i].num,a[i].type,a[i].name,a[i].author,a[i].press,a[i].quantity,a[i].price);
    				}
    				if( f != NULL )
    			    {
    			    	printf("存入文件夹成功!\n");
    				}
    				else
    				{
    					printf("存入文件夹失败!");
    				}
    				fclose(f);
    				printf("-----------------------\n");
    				printf("|      继续借阅?     |\n");
    				printf("| 1.确定     2.取消   |\n");
    				printf("-----------------------\n");
    				fflush(stdin);
    				scanf("%d",&n);
    				if( n==1 ){
    					borrow();
    				}else{
    					system("cls");
    					menu();
    				}
    			}else{
    				printf("次书库存不足!\n");
    				printf("-----------------------\n");
    				printf("|      继续借阅?     |\n");
    				printf("| 1.确定     2.取消   |\n");
    				printf("-----------------------\n");
    				fflush(stdin);
    				scanf("%d",&n);
    				if( n==1 ){
    					borrow();
    				}else{
    					system("cls");
    					menu();
    				}
    			}
    		}else if( i == 9 ){
    			printf("书库中无此书!\n");
    			printf("-----------------------\n");
    			printf("|      继续借阅?     |\n");
    			printf("| 1.确定     2.取消   |\n");
    			printf("-----------------------\n");
    			fflush(stdin);
    			scanf("%d",&n);
    			if( n==1 ){
    				borrow();
    			}else{
    				system("cls");
    				menu();
    			}
    		}
    	}
    }
    
    void over()                                //@@@@@@@@@@@@@@@@@@退出程序 
    {
    	int n;
    	system("cls");
    	printf("-----------------------\n");
    	printf("|   您确定要退出吗?  |\n");
    	printf("| 1.确定     2.取消   |\n");
    	printf("-----------------------\n");
    	scanf("%d",&n);
    	if( n==1 ){
    		exit(0);                  //结束程序 
    	}
    	else if( n==2 ){
    		system("cls");
    		menu();               // 返回菜单 
    	}
    } 
    int main() 
    {
        menu();
    	return 0;                                                                                                            
    }
    

    运行结果:
    选择自己所需要的功能即可

    展开全文
  • 程序开始定义一个存储单个图书相关信息的结构体 struct bk { int num1; char str1[20]; char str2[20]; int num2; char str3[20]; float num3; struct bk * next; }; 然后利用链表存储一系列图书的信息...
  • printf(">>>以下是图书管理系统--请按要求操作); printf("在本系统中与执行某功能请输入相应数字:\n"); printf("请选择操作单子\n"); printf("1.借阅书籍 2.添加书籍 3.归还书籍 4.图书浏览 5.删除图书 6....
  • 这是一个C语言编写图书管理系统程序,没有繁琐的界面代码,在DOS下运行的简单程序,对程序的初学者来说借鉴意义很大!
  • 一个自己编写图书管理系统代码,能实现大部分图书管理功能
  • 简单的书籍管理系统,就是查找不到录入的信息 <code class="language-cs">#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct book { char ...
  • 这是一个C语言编写一个简单的图书管理系统。这个管理系统没有使用数据库,使用的是C语言的结构体和数据结构中的单链表作为存储,同时频繁使用了C语言中的指针操作。这个程序可以作为一个C语言阶段性的一个程序,...
  • 本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下 一、分析过程 首先此程序需要实现输入、增加、删除、查询、输出的五大功能,则首先需要设置一个菜单键,让用户可以选择不同的功能...
  • 这是一个简单的用C语言编写的智能图书馆,它实现了登陆学号及书籍借阅的基本功能,是一个很好的C语言基础学习例程
  • C语言完成图书管理系统

    万次阅读 多人点赞 2018-09-22 00:03:13
     引言:这个系统是我大一下册编写的,也没有再修改,C语言只学到简单的指针为止,对C的认识非常肤浅,并且没有代码经验,可以说这是我第一个能算上能实现功能的系统,仅仅借助书籍:程序设计第四版(谭浩强)、数据...
  • 题目:编写一个程序模拟图书管理系统。用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择。读者菜单包括借书、还书、查询等功能。管理员菜单包括图书和读者信息录入、删除、修改和...
  • 这只是一个简易的图书管理系统,虽然它有千余行代码,不过终究是个简单基本的东西。  在Linux系统下,用Vim编写,如要在Windows上运行则需要一些改动,主要是一些调用系统函数的改动。如Windows下的cls命令在Linux...
  • DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书、删除图书等)和会员操作(注册、借书、还书等); 1、管理员操作界面 2、会员操作界面 global.h头文件:(程序中只使用了一个编写的...
  • 随着社会的飞速发展人们越来越知道知识的重要性越来越喜欢进入图书馆,查找或借阅自己喜欢的书籍图书馆大量的图书不仅给工作人员带来了大量的工作量,同时还给人们带来了大量的麻烦,费神费力迫切需要一个图书信息软件...
  • C语言 图书管理系统(课程设计)

    万次阅读 多人点赞 2018-12-28 09:13:06
    C语言编程模拟一个简单的图书管理系统,主要包括图书的库存信息,每一本书的借阅信息以及每一个人的借书信息。 系统功能: (1)借阅资料管理(对相关资料进行添加,删除,修改,查询等操作) (2)借阅管理...
  • 图书管理系统 C语言

    2008-09-09 22:45:53
    这是一个C语言编写的程序,在winTC下调试 用其他的编译程序的话 需要进行少量的修改~!
  • c语言课程设计- 图书管理系统

    千次阅读 多人点赞 2017-03-12 21:03:41
    图书管理系统     A分析过程 首先此程序需要实现输入、增加、删除、查询、输出的五大功能,则首先需要设置一个菜单键,让用户可以选择不同的功能,完成不同的操作,然后编写不同的函数实现不同的功能,在这个...
  • 这是一个C语言编写的关于图书管理一个系统,主要实现了图书管理的功能,里面的代码可以为你编写C语言程序提供参考,特别适合学生做课程设计之用。
  • 编写一个图书销售系统。以把所学数据结构知识应用到实际软件开发中去。 任务: 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、销售图书); 2)会员管理(增加会员、查询会员、删除会员、会员买书);
  • 实用文档 北 京 师 范 大 学 珠 海 分 校 C 程序设计实践报告 ...2013 年 4 月 11 日 大全 实用文档 1 题目与要求 编写一个图书管理系统除了书上的功能之外还要能做到读者借书还书查看书籍排行榜看到书籍的 借阅记录
  • 这是针对简单的图书管理系统编写一个c语言程序,非常适合学习c的人。。
  • 基于此问题,建立一个规范化,系统化,程序化的图书管理系统迫不急待。为方便对图书馆书籍、读者资料、借还书等进行高效的管理,特编写程序以提高图书馆的管理效率。使用程序之后,工作人员可以查询某位读者、某种...
  • 这是我花了3天时间写的一个基于C语言图书管理系统,里面包含了超级管理员,普通管理员,图书,读者4个模块。该管理系统使用了多文件的方式进行设计编写的,具有保存存储功能,也可以批量导入,批量导出,使用了...

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

c语言编写一个图书管理系统

c语言 订阅