您好,欢迎访问三七文档
#includestdio.h/*标准输入输出函数库*/#includestdlib.h/*标准函数库*/#includestring.h/*字符串函数库*/#includeconio.h/*屏幕操作函数库*/#defineheader1----------------------------旅馆信息管理---------------------------------\n#defineheader2|客房号|客户姓名|客人身份证号|入住时间|退房时间|客房价格|消费金额|预付费用|\n#defineheader3|------|--------|------------|--------|--------|--------|--------|--------|#defineFORMAT|%-6s|%-8s|%12ld|%8d|%8d|%8d|%8d|%8d|\n#defineDATAp-data.num,p-data.name,p-data.id,p-data.intime,p-data.outtime,p-data.kefang,p-data.price,p-data.yufu#defineEND---------------------------------------------------------------------\nintsaveflag=0;/*是否需要存盘的标志变量*//*定义与客户有关的数据结构*/typedefstructkehu/*标记为kehu*/{charnum[10];/*客房号*/charname[15];/*姓名*/longid;/*身份证号*/intintime;/*入住时间*/intouttime;/*退房时间*/intkefang;/*客房价格*/intprice;/*消费金额*/intyufu;/*预付费用*/}Sqlist;/*定义每条记录或结点的数据结构,标记为:node*/typedefstructnode{structkehudata;/*数据域*/structnode*next;/*指针域*/}Node,*Link;/*Node为node类型的结构变量,*Link为node类型的指针变量*/voidmenu()/*主菜单*/{system(cls);/*调用DOS命令,清屏.与clrscr()功能相同*/printf(\n);printf(旅馆客户管理系统主菜单\n);printf(**************************************************\n);printf($1、客户信息录入5、插入客户信息$\n);printf($2、客户信息删除6、客户信息储存$\n);printf($3、查找客户信息7、客户信息显示$\n);printf($4、修改客户信息0、退出$\n);printf(**************************************************\n);}voidprintheader()/*格式化输出表头*/{printf(header1);printf(header2);printf(header3);}voidprintdata(Node*pp)/*格式化输出表中数据*/{Node*p;p=pp;printf(FORMAT,DATA);}voidWrong()/*输出按键错误信息*/{printf(\n\n\n\n\n**********Error:输入错误!请按任意键继续!!**********\n);getchar();}voidNofind()/*输出未查找此客户的信息*/{printf(\n=====未查找此客户的信息!\n);}voidDisp(Linkl)/*显示单链表l中存储的客户信息记录,内容为kehu结构中定义的内容*/{Node*p;p=l-next;/*l存储的是单链表中头结点的指针,该头结点没有存储客户信息,指针域指向的后继结点才有客户信息*/if(!p)/*p==NULL,NUll在stdlib中定义为*/{printf(\n=====无此客户的记录!\n);getchar();return;}printf(\n\n);printheader();/*输出表格头部*/while(p)/*逐条输出链表中存储的客户信息*/{printdata(p);p=p-next;/*移动直下一个结点*/printf(header3);}getchar();}Node*Locate(Linkl,charfindmess[],charnameornum[])/*用于定位链表中符合要求的节点,并返回指向该节点的指针参数:findmess[]保存要查找的具体内容;nameornum[]保存按什么查找;在单链表l中查找;*/{Node*r;if(strcmp(nameornum,num)==0)/*按客房号查询*/{r=l-next;while(r){if(strcmp(r-data.num,findmess)==0)/*若找到findmess值的客房号*/returnr;r=r-next;}}elseif(strcmp(nameornum,name)==0)/*按姓名查询*/{r=l-next;while(r){if(strcmp(r-data.name,findmess)==0)/*若找到findmess值的客户姓名*/returnr;r=r-next;}}return0;/*若未找到,返回一个空指针*/}/*输入字符串,并进行长度验证(长度lens)*/voidstringinput(char*t,intlens,char*notice){charn[255];do{printf(notice);/*显示提示信息*/scanf(%s,n);/*输入字符串*/if(strlen(n)lens)printf(\n超出长度范围,重新输入!\n);/*进行长度校验,超过lens值重新输入*/}while(strlen(n)lens);strcpy(t,n);/*将输入的字符串拷贝到字符串t中*/}/*输入身份证*/longidinput(char*notice){longt=0;printf(notice);scanf(%ld,&t);returnt;}/*输入时间*/intintimeinput(char*notice){intt=0;do{printf(notice);scanf(%d,&t);if(t24||t0)printf(\n时间必须在~24之间!\n);}while(t24||t0);returnt;}intouttimeinput(char*notice){intt=0;do{printf(notice);scanf(%d,&t);if(t24||t0)printf(\n时间必须在~24之间!\n);}while(t24||t0);returnt;}/*客房价格*/intkefanginput(char*notice){inta;printf(notice);scanf(%d,&a);returna;}/*增加客户信息*/voidAdd(Linkl){Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/charch,flag=0,num[10];r=l;s=l-next;system(cls);Disp(l);/*先打印出已有的客户信息*/while(r-next!=NULL)r=r-next;/*将指针移至于链表最末尾,准备添加记录*/while(1)/*一次可输入多条记录,直至输入学号为的记录结点添加操作*/{while(1)/*输入客房号,保证该客房号没有被使用,若输入学号为,则退出添加记录操作*/{stringinput(num,10,\n输入客房号(按“”返回菜单!):);/*格式化输入客房号并检验*/flag=0;if(strcmp(num,0)==0)/*输入为,则退出添加操作,返回主界面*/{return;}s=l-next;while(s)/*查询该客房号是否已经存在,若存在则要求重新输入一个未被占用的客房号*/{if(strcmp(s-data.num,num)==0){flag=1;break;}s=s-next;}if(flag==1)/*提示用户是否重新输入*/{getchar();printf(=====客房号%s不存在,重试?(y/n):,num);scanf(%c,&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}else{break;}}p=(Node*)malloc(sizeof(Node));/*申请内存空间*/if(!p){printf(\n内存空间申请失败!);/*如没有申请到,打印提示信息*/return;/*返回主界面*/}strcpy(p-data.num,num);/*将字符串num拷贝到p-data.num中*/stringinput(p-data.name,15,姓名:);p-data.id=idinput(客户身份证号:);/*输入并检验身份证号,号码是数字*/p-data.intime=intimeinput(入住时间:);/*输入并检验入住时间,时间格式是否正确*/p-data.outtime=outtimeinput(退房时间:);/*输入并检验入住时间,时间格式是否正确*/p-data.kefang=kefanginput(客房价格:);/*客房价格*/p-data.yufu=100;p-data.price=p-data.kefang*(p-data.outtime-p-data.intime)-p-data.yufu;/*消费金额*/r-next=p;/*将新建的结点加入链表尾部中*/p-next=NULL;/*表明这是链表的尾部结点*/r=p;saveflag=1;}return;}/*客房号或姓名,查询客户信息*/voidQur(Linkl){intselect;/*1:按客房号查,:按姓名查,其他:返回主界面(菜单)*/charsearchinput[20];/*保存用户输入的查询内容*/Node*p;if(!l-next)/*若链表为空*/{system(cls);printf(\n=====无此客户的信息!\n);getchar();return;}system(cls);printf(\n=====1按客房号查询=====2按名字查询\n);printf(请选择[1,2]:);scanf(%d,&select);if(select==1)/*按客房号查询*/{stringinput(searchinput,10,请输入现有客户的客房号:);p=Locate(l,searchinput,num);/*在l中查找客房号为searchinput值的节点,并返回节点的指针*/if(p){printheader();printdata(p);printf(END);printf(按任意键返回!);getchar();}elseNofind();getchar();}elseif(select==2)/*按姓名查询*/{stringinput(searchinput,15,请输入现有客户的姓名:);p=Locate(l,searchinput,name);if(p){printheader();printdata(p);printf(END);printf(按任意键返回!);getchar();}elseNofind();getchar();}elseWrong();getchar();}/*删除客户信息:先找到保存该客户信息的节点,然后删除该节点*/voidDel(Linkl){intsel;Node*p
本文标题:旅馆管理系统
链接地址:https://www.777doc.com/doc-3569620 .html