目录
前言
本次管理系统的制作作为开学的必修课,
确实强度拉满
,这次的管理系统除了自己书写,还求助了许多同学,看了不少的教程,在这个过程虽然走得艰难,但是编程能力,确实有了不小的提升,这是我这几天来的一些对于制作管理系统的一些经验和心得。
系统结构概况
管理系统制作过程
- 初始界面整理
- 主题框架的构建
- 文件的输入
- 客人信息的输出
- 客人信息的查询
- 客人信息的修改与删除
- 文件信息的保存
开发环境
系统:windows
语言环境:c
操作过程
系统初始界面编写后可以使代码的外壳先出现,下一步架构每个功能的框架,将我们所要做的系统功能细化,逐步实现每一个功能,这样即可以缩小出错时的检查范围,还比较有条理,不会乱,而后制作出数字选择功能,不同的数字一一对应功能,最后以退出程序收尾,中途也添加了部分比较有用的小功能,比如按照不同的标准进行排序等
1.管理系统
(1).主菜单界面的实现
使用输出语句进行了简单的主菜单界面设计,分明了管理系统不同功能,并且对应了数字指令
void welcome()
{ 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("******退出管理系统---0**\n");
printf("************************\n");
printf("************************\n");
printf("请输入对应功能键(数字):");
}
(2).构建功能的基本框架
通过多分支语句将所需要分类的功能分好,后面再慢慢填充细节,并且这个系统最好能够执行完其中指令后能够多次进行操作,所以将这段选择功能的代码加入了循环中,以保证其可以多次进行
int main()
{
int choice=0;
readFile(&List);
while(true) //保证其可以多次进行操作
{
welcome();
scanf("%d",&choice);
switch(choice)
{
case 1://增加客人信息
printAddgesInfo();
break;
case 2://删除客人信息
printDeletegesInfo(&List);
break;
case 3://修改客人信息
printFixgesInfo(&List);
break;
case 4://查询客人信息
printsearchgesInfo(&List);
break;
case 5://输出客人信息
printgesInfo(&List);
break;
case 0://退出管理系统
goodbye();
break;
}
printf("是否还要继续操作?(yes:1/no:2):");
scanf("%d",&choice);
if(choice==0)
{
break;
}
}
return 0;
}
(3).定义数据结构
这部分虽然简单,但却是整个程序的核心部分,程序中链表的展开也是以定义这个链表的开头为起点的,定义所需要的数据,方便后期程序其他部分对于数据的调用。
typedef struct Node
{
int roomid;//房间号
char name[50];//姓名
char sex[10];//性别
int age;// 年龄
int day;// 住宿时长
int consume;//消费金额
struct Node *next;//指向下一个节点
}Node;
(4).文件数据的读取
本程序的数据都需要储存在文件中,所以除了需要创立文件以外,还需要对文件进行相应指令的操作才可以对文件进行使用。c语言的文件读取操作要使用文件指针和相关函数,格式如下。
FILE *fpr=fopen("文件名","相应操作指令");
fscanf(fpr,"%d",&intValue);
文件名需要加上后缀名,操作方式因为是要从文件中读取信息,所以写r。如果是进行信息的写入则是w。 之后需要将读取的信息以链表的方式组织起来,打算采用尾插法的方式插入数据。
t->next=s;//链表的尾指针的后一个结点指向新节点
t=s;//更新尾节点
t->next=NULL;//链表尾指针的后一个结点指向NULL
(5).读取函数
int readFile(Node *L)
{
FILE *fpr=fopen("gesInfo.txt","r");
Node st;
Node *s;
Node *t=L;
if(fpr==NULL)
{
return 0;
}else{
while(fscanf(fpr,"%d %s %s %d %d %d",&st.roomid,&st.name,&st.sex,&st.age,&st.day,&st.consume)!=EOF)
{
s=(Node *)malloc(sizeof(Node));
*s=st;
t->next=s;//链表的尾指针的后一个结点指向新节点
t=s;//更新尾节点
t->next=NULL;//链表尾指针的后一个结点指向NULL
}
}
fclose(fpr);//关闭文件指针
return 1;
}
(6).输出所有学生信息
此处要用到链表的遍历
在输出过程中为了保证美观,可以适当加入一些符号进行设计,并且可以加入比较函数,将部分所需信息提取出来,也算是设计的一些小功能,可以凭借个人能力自行添加
void printgesInfo(Node *L)
{
system("cls");
Node *p=L->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
if(p!=NULL){
while(p!=NULL)
{
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",p->roomid,p->name,p->sex,p->age,p->day,p->consume);
printf("_________________________________________________________\n");
p=p->next;
}
}
printf("最高消费,以后有发展价值");
printf("消费:%d\n",findmaxscore(L,0));
printf("最长住宿天数,可长期合作");
printf("住宿天数:%d\n",findmaxscore(L,1));
printf("最大年龄,注意时刻关注大龄人身体状况,避免安全事故发生");
printf("年龄:%d\n",findmaxscore(L,2));
}
(7).增加客人信息
下面的增加客人信息用到了头插法,将链表节点进行插入。将客人信息的增加分成了两份,一份是数据的打印,一份是底层数据的处理。
第一部分
void printAddgesInfo();//界面
void insertgesInfo(Node *L,Node e);//功能
第二部分
void printAddgesInfo()
{
Node st;
system("cls");
printf("请输入新增客人相关信息\n");
printf("房间号:");
scanf("%d",&st.roomid);
printf("姓名:");
scanf("%s",&st.name);
printf("性别:");
scanf("%s",&st.sex);
printf("年龄:");
scanf("%d",&st.age);
printf("住宿时长:");
scanf("%d",&st.day);
printf("消费:");
scanf("%d",&st.consume);
insertgesInfo(&List,st);
}
void insertgesInfo(Node *L,Node e)
功能单位
void insertgesInfo(Node *L,Node e)
{
//头插法
Node *h=L;
Node *s=(Node *)malloc(sizeof(Node));
*s=e;
s->next=h->next;
h->next=s;
saveFile(L);
}
(8).删除客人信息
删除客人信息这一功能的实现,首先先运用了上输出客人信息的输出格式,并且去掉了循环部分,使它只进行局部输出,达到预览删除对象的作用,并通过判断比对输入的房间号和对链表进行遍历判断是否有相同的房间号数据,以达到查找删除对象的作用,最后通过对于内存的释放从而删除掉所要删除的数据,再对于更改,实际上是删除后的数据进行保存
主功能函数
void printDeletegesInfo(Node *L)
{
system("cls");
int id;
Node *p;
printf("请输入需要删除的客人房间号");
scanf("%d",&id);
Node *st=searchgesInfoById(id,L);
p=st;
if(st==NULL)
{
printf("查无此人");
return;
}
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
deletegesInfo(p);
saveFile(L);
}
释放内存代码部分
void deletegesInfo(Node *pr)
{
Node *s=pr->next;
pr->next=s->next;
s->next=NULL;
free(s);//释放空间节点
}
保存改动后文件函数部分
int saveFile(Node *L)
{
FILE *fpw=fopen("gesInfo.txt","w");
if(fpw==0)return 0;
Node *p=L->next;
while(p!=NULL)
{
fprintf(fpw,"%d %s %s %d %d %d\n",p->roomid,p->name,p->sex,p->age,p->day,p->consume);
p=p->next;
}
fclose(fpw);//关闭文件指针
return 1;
}
执行结果演示
注意上述代码中的while循环中的p=p->部分,如果不加入,链表无法向后读取,会缺失跳出循环的改变条件,使得对于某一个结构体数据的无限输出,会占用大量内存,并且使得程序极其卡顿,前车之鉴啊
(9).修改客人信息
这部分实现了对于客人信息的修改功能,用相关房间号进行查找所对应的客人信息,并输出预览,增加了数字选项,可以针对某一信息进行单一的信息修改,并且可进行多次重复修改,最终用文件保存函数对于修改的信息进行保存即可
主功能函数
void printFixgesInfo(Node *L)
{
system("cls");
int id;
int choice=-1;
printf("请输入需要修改的客人房间号");
scanf("%d",&id);
Node *st=searchgesInfoById(id,L);
if(st==NULL)
{
printf("查无此人");
return;
}
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
while(1)
{
system("cls");
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
printf("修改姓名-----1\n");
printf("修改性别-----2\n");
printf("修改房间号---3\n");
printf("修改住宿天数-4\n");
printf("修改消费-----5\n");
printf("修改年龄-----6\n");
printf("请输入要修改的信息:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入修改后姓名");
scanf("%s",st->name);
break;
case 2:
printf("请输入修改后性别");
scanf("%s",st->sex);
break;
case 3:
printf("请输入修改后房间号");
scanf("%d",&st->roomid);
break;
case 4:
printf("请输入修改后住宿天数");
scanf("%d",&st->day);
break;
case 5:
printf("请输入修改后消费金额");
scanf("%d",&st->consume);
break;
case6:
printf("请输入修改后年龄");
scanf("%d",&st->age);
break;
}
printf("是否继续修改该客人信息?(yes-1/no-0):\n");
scanf("%d",&choice);
if(choice==0)
{
break;
}
}
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
saveFile(L);
}
文件保存函数
int saveFile(Node *L)
{
FILE *fpw=fopen("gesInfo.txt","w");
if(fpw==0)return 0;
Node *p=L->next;
while(p!=NULL)
{
fprintf(fpw,"%d %s %s %d %d %d\n",p->roomid,p->name,p->sex,p->age,p->day,p->consume);
p=p->next;
}
fclose(fpw);//关闭文件指针
return 1;
}
执行效果演示
(10).查询客人信息
在执行查询功能时设计了两种查询方式,第一种是按照房间号查询,第二种是按照姓名查询,其中按照房间号查询在之前就已多次出现,就不单独介绍,输入对应信息后,相关的房间号或者人名就会显示出来
查询客人信息主函数
void printsearchgesInfo(Node *L){
system("cls");
int choice=0;
int id;
char name[50];
Node *st;
printf("按照房间号查询-------1\n");
printf("按照姓名查询-------2\n");
printf("请输入查询方式:");
scanf("%d",&choice);
if(choice==1)
{
printf("请输入要查询房间号:");
scanf("%d",&id);
st=searchgesInfoById(id,L);
if(st==NULL)
{
printf("查无此人\n");
}else
{
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
}
}else if(choice==2){
printf("请输入要查询姓名:");
scanf("%s",&name);
st=searchgesInfoByName(name,L);
if(st==NULL)
{
printf("查无此人\n");
}else
{
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
}
}
}
按照姓名查询
Node * searchgesInfoByName(char name[],Node *L){
Node *p=L;
while(p->next!=NULL){
if(strcmp(name,p->next->name)==0){
return p;
}
p=p->next;
}
return NULL;
}
执行效果演示
(11).退出系统
所有程序到这里就结束了,在结束对客人信息的操作后,直接选择0,就会弹出结束页面,就会退出系统啦
void goodbye()
{
system("cls");
printf("欢迎下次使用~\n");
exit(0);//结束程序
}
执行效果图
到此整个酒店管理系统制作就结束了,在这之中还加入了部分特定的排序函数,因为其并不是主要功能的实现函数,所以就没有体现在博客中,关于账号密码的注册登录系统,又是一个新的体系,加入之后感觉过于冗长,之后会另写一个作为补充。
完整代码演示
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
int roomid;//房间号
char name[50];//姓名
char sex[10];//性别
int age;// 年龄
int day;// 住宿时长
int consume;//消费金额
struct Node *next;//指针域
}Node;
Node List;//链表
//读取文件
int readFile(Node *L);
//保存文件
int saveFile(Node *L);
//主菜单
void welcome();
//增加客人信息
void printAddgesInfo();//界面
void insertgesInfo(Node *L,Node e);//功能
//删除客人信息
void printDeletegesInfo(Node *L);
//逻辑功能
void deletegesInfo(Node *pr);
//修改客人信息
void printFixgesInfo(Node *L);
//查询客人信息
void printsearchgesInfo(Node *L);
//按房间号进行查找
Node * searchgesInfoById(int id,Node *L);
//按姓名进行查找
Node * searchgesInfoByName(char name[],Node *L);
//输出客人信息
void printgesInfo(Node *L);
//排序比较规则
bool cmp(Node a,Node b)
{
return a.consume>b.consume;
}
void gesconsumesort(Node *L)
{
for(Node *p=L->next;p!=NULL;p=p->next)
{
for(Node *q=p;q!=NULL;q=q->next){
if(!cmp(*p,*q)){
//交换值域
Node t=*p;
*p=*q;
*q=t;
//处理指针域
t.next=p->next;
p->next=q->next;
q->next=t.next;
}
}
}
}
int findmaxscore(Node *L,int mode)
{
//mode 0:消费 1:住宿天数 2:年龄
Node *p=L->next;
if(p!=NULL)
{
int max[4]={-1,-1,-1,-1};
while(p!=NULL)
{
if(p->consume>max[0])max[0]=p->consume;
if(p->day>max[1])max[1]=p->day;
if(p->age>max[2])max[2]=p->age;
p=p->next;
}
return max[mode];
}
return -1;
}
//退出管理系统
void goodbye();
int main()
{
int choice=0;
readFile(&List);
while(true)
{
welcome();
scanf("%d",&choice);
switch(choice)
{
case 1://增加客人信息
printAddgesInfo();
break;
case 2://删除客人信息
printDeletegesInfo(&List);
break;
case 3://修改客人信息
printFixgesInfo(&List);
break;
case 4://查询客人信息
printsearchgesInfo(&List);
break;
case 5://输出客人信息
printgesInfo(&List);
break;
case 0://退出管理系统
goodbye();
break;
}
printf("是否还要继续操作?(yes:1/no:2):");
scanf("%d",&choice);
if(choice==0)
{
break;
}
}
return 0;
}
void welcome()
{ 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("------退出管理系统---0--\n");
printf("------------------------\n");
printf("------------------------\n");
printf("请输入对应功能键(数字):");
}
//增加客人信息
void printAddgesInfo()
{
system("cls");
Node st;
printf("请输入新增客人相关信息\n");
printf("房间号:");
scanf("%d",&st.roomid);
printf("姓名:");
scanf("%s",&st.name);
printf("性别:");
scanf("%s",&st.sex);
printf("年龄:");
scanf("%d",&st.age);
printf("住宿时长:");
scanf("%d",&st.day);
printf("消费:");
scanf("%d",&st.consume);
insertgesInfo(&List,st);
}
void insertgesInfo(Node *L,Node e)
{
//头插法
Node *h=L;
Node *s=(Node *)malloc(sizeof(Node));
*s=e;
s->next=h->next;
h->next=s;
saveFile(L);
}
//删除客人信息
void printDeletegesInfo(Node *L)
{
system("cls");
int id;
Node *p;
printf("请输入需要删除的客人房间号");
scanf("%d",&id);
Node *st=searchgesInfoById(id,L);
p=st;
if(st==NULL)
{
printf("查无此人");
return;
}
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
deletegesInfo(p);
saveFile(L);
}
//删除客人信息
void deletegesInfo(Node *pr)
{
Node *s=pr->next;
pr->next=s->next;
s->next=NULL;
free(s);//释放空间节点
}
//修改客人信息
void printFixgesInfo(Node *L)
{
system("cls");
int id;
int choice=-1;
printf("请输入需要修改的客人房间号");
scanf("%d",&id);
Node *st=searchgesInfoById(id,L);
if(st==NULL)
{
printf("查无此人");
return;
}
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
while(1)
{
system("cls");
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
printf("修改姓名-----1\n");
printf("修改性别-----2\n");
printf("修改房间号---3\n");
printf("修改住宿天数-4\n");
printf("修改消费-----5\n");
printf("修改年龄-----6\n");
printf("请输入要修改的信息:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入修改后姓名");
scanf("%s",st->name);
break;
case 2:
printf("请输入修改后性别");
scanf("%s",st->sex);
break;
case 3:
printf("请输入修改后房间号");
scanf("%d",&st->roomid);
break;
case 4:
printf("请输入修改后住宿天数");
scanf("%d",&st->day);
break;
case 5:
printf("请输入修改后消费金额");
scanf("%d",&st->consume);
break;
case6:
printf("请输入修改后年龄");
scanf("%d",&st->age);
break;
}
printf("是否继续修改该客人信息?(yes-1/no-0):\n");
scanf("%d",&choice);
if(choice==0)
{
break;
}
}
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
saveFile(L);
}
//查询客人信息
void printsearchgesInfo(Node *L){
system("cls");
int choice=0;
int id;
char name[50];
Node *st;
printf("按照房间号查询-------1\n");
printf("按照姓名查询-------2\n");
printf("请输入查询方式:");
scanf("%d",&choice);
if(choice==1)
{
printf("请输入要查询房间号:");
scanf("%d",&id);
st=searchgesInfoById(id,L);
if(st==NULL)
{
printf("查无此人\n");
}else
{
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
}
}else if(choice==2){
printf("请输入要查询姓名:");
scanf("%s",&name);
st=searchgesInfoByName(name,L);
if(st==NULL)
{
printf("查无此人\n");
}else
{
st=st->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",st->roomid,st->name,st->sex,st->age,st->day,st->consume);
printf("_________________________________________________________\n");
}
}
}
//按房间号进行查找
Node * searchgesInfoById(int roomid,Node *L){
Node *p=L;
while(p->next!=NULL){
if(p->next->roomid==roomid){
return p;
}
p=p->next;
}
return NULL;
}
//按姓名进行查找
Node * searchgesInfoByName(char name[],Node *L){
Node *p=L;
while(p->next!=NULL){
if(strcmp(name,p->next->name)==0){
return p;
}
p=p->next;
}
return NULL;
}
//输出客人信息
void printgesInfo(Node *L)
{
system("cls");
//客人消费从高到低排序
// gesconsumesort(L);
Node *p=L->next;
printf("_________________________________________________________\n");
printf("|房间号\t|姓名\t|性别\t|年龄\t|住房日期|消费\t|\n");
printf("_________________________________________________________\n");
if(p!=NULL){
while(p!=NULL)
{
printf("%d\t|%s\t|%s\t|%d\t|%d\t|%d\t|\n",p->roomid,p->name,p->sex,p->age,p->day,p->consume);
printf("_________________________________________________________\n");
p=p->next;
}
}
printf("最高消费,以后有发展价值");
printf("消费:%d\n",findmaxscore(L,0));
printf("最长住宿天数,可长期合作");
printf("住宿天数:%d\n",findmaxscore(L,1));
printf("最大年龄,注意时刻关注大龄人身体状况,避免安全事故发生");
printf("年龄:%d\n",findmaxscore(L,2));
}
//退出管理系统
void goodbye()
{
system("cls");
printf("欢迎下次使用~\n");
exit(0);//结束程序
}
//文件输入
int readFile(Node *L)
{
FILE *fpr=fopen("gesInfo.txt","r");
Node st;
Node *s;
Node *t=L;
if(fpr==NULL)
{
return 0;
}else{
while(fscanf(fpr,"%d %s %s %d %d %d",&st.roomid,&st.name,&st.sex,&st.age,&st.day,&st.consume)!=EOF)
{
s=(Node *)malloc(sizeof(Node));
*s=st;
t->next=s;
t=s;//尾插法
t->next=NULL;
}
}
return 1;
}
//保存文件
int saveFile(Node *L)
{
FILE *fpw=fopen("gesInfo.txt","w");
if(fpw==0)return 0;
Node *p=L->next;
while(p!=NULL)
{
fprintf(fpw,"%d %s %s %d %d %d\n",p->roomid,p->name,p->sex,p->age,p->day,p->consume);
p=p->next;
}
fclose(fpw);//关闭文件指针
return 1;
}