C语言课程设计1HCY源代码//功能:图书管理系统//作者:黄成勇//时间:2012.12.04#includestdlib.h/*辅助库函数*/#includestdio.h/*输入输出函数*/#includeconio.h/*控制台输入输出函数getch*/#includemath.h#includememory.h#includestring.h#definebook_datae:\\book.txt#definereader_datae:\\reader.txtstructDate/*日期结构*/{intm_nYear;/*年*/intm_nMonth;/*月*/intm_nDay;/*日*/};typedefstructDatedate;structReader/*读者结构*/{charrname[10];/*读者姓名*/charnum[20];/*借书证号*/structDatebro;/*借出时间*/structDateback;/*归还时间*/};typedefstructReaderreader;structBook/*书本结构*/{intm_iBook_Number;/*对应书本号*/charm_strTitle[15];/*书名*/charm_strWroter[15];/*作者*/intm_nMoreNum;/*当前在架册数*/intm_nTotalHoldNum;/*馆藏册数*/charm_strComment[30];/*图书简介*/structReaderreader[5];C语言课程设计2HCY};typedefstructBookbook;structInfo/*借书信息结构*/{structInfo*m_pParentPoint;/*前驱结点*/structBook*m_pBookInfo;/*对应书本的信息*/structInfo*m_pSun;/*后继结点*/};typedefstructInfoinfo;structBook*InputNode(structInfo*bth);/*添加书本信息*/voidcheck(info*bth);/*测试链表长度*/structInfo*Search(structInfo*bth,intx,int*k,int*flag);/*查找图书*/structInfo*Insert_BookInfo(structInfo*bth);/*图书上架*/structInfo*Delete_BookInfo(structInfo*bth);/*图书下架*/voidOutput_BookInfo(structInfo*bth);/*打印输出书本信息*/voidBorrow_TheBook(structInfo*bth);/*图书出借*/voidTurnBack_TheBook(structInfo*bth);/*图书归还*/voidAll_TheBook(structInfo*bth);/*全部图书*/voidAll_TheReader(structInfo*bth);/*全部读者*/voidSave_Data(structInfo*bth);/*保存信息*/structInfo*Load_Data(void);/*加载信息*/charSelect_Menu();/*图书馆管理系统主菜单*/intsums=0;/**********************图书查找***********************/structInfo*Search(structInfo*bth,intx,int*k,int*flag){structInfo*p=NULL;/*当前工作指针*/p=bth;/*每次查询前,将工作指针指向双向链表头部结点*/*flag=0;/*是否查找到指定书本号的标志,初始化置为0*/while(p){if(p-m_pBookInfo-m_iBook_Number==x){/*找到相同的书号,置找到的标志*/*flag=1;returnp;}C语言课程设计3HCYelse{/*未找到相同的书号,置未找到标志*/*flag=0;}if(p-m_pSun!=NULL){p=p-m_pSun;/*没到双向链表的尾部时,向后移动当前指针*/}else{break;/*到达链表尾部,跳出循环*/}}returnbth;}/*************输入图书信息*************/structBook*InputNode(structInfo*bth){structBook*p=NULL;inti;p=(structBook*)malloc(sizeof(structBook));/*分配内存*/system(cls);/*清屏*/fflush(stdin);/*清除以前的输入*/printf(\n\t请输入书名:);gets(p-m_strTitle);/*从键盘取得书名*/printf(\n\t请输入作者:);gets(p-m_strWroter);/*从键盘取得作者名*/printf(\n\t请输入当前在架册数:);scanf(%d,&p-m_nMoreNum);/*从键盘取得当前在架册数*/printf(\n\t请输入馆藏册数:);scanf(%d,&p-m_nTotalHoldNum);/*从键盘取得当前馆藏册数*/fflush(stdin);printf(\n\t请输入本书简介:);/*从键盘取得本书内容简要介绍*/gets(p-m_strComment);/*以上从输入输出设备取得要求的信息*/for(i=0;i20;i++)(p-reader[i]).num[0]='\0';/*初始化书本结构成员的相关读者指针C语言课程设计4HCY内容为空*/return(p);/*返回成功插入的一本书信息*/}/******************图书上架*****************/structInfo*Insert_BookInfo(structInfo*bth){intflag,j,k,t;inty,x,z;structInfo*p=NULL,*q=NULL,*u=NULL,*s=NULL;structBook*r=NULL,*l=NULL;system(cls);/*清屏*/printf(\n\t请输入你想上架的书本号:);scanf(%d,&x);/*取书号*/q=Search(bth,x,&k,&flag);/*查找上架的书是否已经上架,返回已经找到的书的信息*/if(flag==1){/*查找成功,存在此书*/printf(\n\t当前存在这本书%d本,您想再增加一本%s书?(y/n)\n,q-m_pBookInfo-m_nTotalHoldNum,q-m_pBookInfo-m_strTitle);z=getch();if(z=='y'||z=='Y'){/*确认上架另一本书*/printf(\n\t本馆此书一共有:%d本,q-m_pBookInfo-m_nTotalHoldNum);printf(\n\t并且有:%d本在图书馆中内未借出.,q-m_pBookInfo-m_nMoreNum);q-m_pBookInfo-m_nTotalHoldNum++;q-m_pBookInfo-m_nMoreNum++;printf(\n\t上架后一共有:%d本,q-m_pBookInfo-m_nTotalHoldNum);printf(\n\t上架后当前有:%d本在图书馆中.,q-m_pBookInfo-m_nMoreNum);memset(p-m_pBookInfo-reader-num,'\0',sizeof(p-m_pBookInfo-reader-num));//使nun为空,用于借书读者判断}Save_Data(bth);return(bth);}C语言课程设计5HCYr=InputNode(bth);/*成功插入书本信息,指针r存放刚刚插入的书本*/if(bth==NULL){/*指针bth为空时,表示当前链表为空,此时需要单独处理,即链表头内存分配*/bth=p=(structInfo*)malloc(sizeof(structInfo));/*申请内存*/r-m_iBook_Number=x;/*将书号存入书本信息结构体*/p-m_pParentPoint=NULL;/*前驱结点置空*/p-m_pSun=NULL;/*后继结点置空*/p-m_pBookInfo=r;memset(p-m_pBookInfo-reader-num,'\0',sizeof(p-m_pBookInfo-reader-num));Save_Data(bth);return(p);/*返回新成功插入的书本结点*/}else{/*说明已经有头指针,则在此开始处理新插入的结构体指针*/p=NULL;p=bth;while(p-m_pSun!=NULL){p=p-m_pSun;/*当后继结点不为空时,表示还未到链表尾部*/}/*当循环结束后,p指向的就是最后一个结点*/q=(structInfo*)malloc(sizeof(structInfo));/*申请内存*/r-m_iBook_Number=x;/*将书号存入书本信息结构体*/p-m_pSun=q;/*双向链表的前驱与后继结点链接*/q-m_pParentPoint=p;q-m_pSun=NULL;q-m_pBookInfo=r;/*指向新插入的书本信息结构体*///q-m_pBookInfo-reader-bro.m_nYear=0;memset(q-m_pBookInfo-reader-num,'\0',sizeof(q-m_pBookInfo-reader-num));}Save_Data(bth);return(bth);}C语言课程设计6HCY/******************图书下架*****************/structInfo*Delete_BookInfo(structInfo*bth){intflag,j,k,t;intx,y;structInfo*u=NULL,*s=NULL,*p=NULL,*q=NULL;structBook*bookinfo=NULL;structInfo*BookLeftPoint=NULL;/*前驱结点*/structInfo*BookRightPoint=NULL;/*后继结点*/system(cls);/*清屏*/printf(\n\t请输入你想下架的书本号:);scanf(%d,&x);/*接受输入*/q=Search(bth,x,&k,&flag);/*查找指定的书是否存在*/if(flag==0){/*书本不存在是,直接输出消息并返回*/printf(\n\t这本书不存在!\n);return(bth);}else{if(q==NULL){printf(未知错误);returnbth;/*确保当前工作指针是有效的,防止出现非法操作*/}else{bookinfo=q-m_pBookInfo;printf(\n\t想下架的书本信息:);printf(\n\t书名:%s,bookinfo-m_strTitle);printf(\n\t作者:%s,bookinfo-m_strWroter);printf(\n\t当前在架册数:%d,bookinfo-m_nMoreNum);printf(\n\t馆藏册数:%d,bookinfo-m_nTotalHoldNum);printf(\n\t本书简介:%s\n,bookinfo-m_strComment);printf(\n\t你想退出系统?(y/n));t=getch();if(t=='y'||t=='Y'){system(cls);