文章目录
- **1从文件读取数据实现链表存储**
- **1.1 账号密码**
- **1.2电影信息**
- **2修改链表信息 存储文件**
- **3.判断账户类型(影院经理/售票员/顾客)**
- **3.1判断**
- **3.2不同账户对应操作**
- **4.打印电影信息**
- **4.1打印无序电影信息**
- **4.2打印已排序电影信息**
- **5.对电影已卖票数排序**
- **6 增删改电影信息
- **比较重复函数:**
- **6.1增加**
- **6.2删除电影信息**
- **6.3修改电影信息**
- **7预定座位与退订**
- **7.1预定座位**
- **7.2取消座位**
- **完整代码如下:**
- **思维导图**
- **表现层(UI)
- 选择登录与退出menu()
- 登录页面Homepage()
- 不同账户操作对应:opt1(),opt2(),opt3()
- 1)影院经理端
- 2)售票端
- 3)顾客端
- **业务逻辑层(BLL)
- 增加电影信息
- 修改电影信息
- 删除电影信息
- 预定座位
- 取消座位
- **数据访问层(DAL)
- 从文件中读取信息存储链表:
- 将链表信息重新存入文件中:
1从文件读取数据实现链表存储
1.1 账号密码
struct node//定义账号密码链表
{
char account[20];
char password[20];
struct node *next;
}Node,*LinkList;
struct node *creat_inf(char filename[20])//尾插法建立存储账号密码的单链表
{
struct node *r,*head,*stu;
head=(struct node*)malloc(sizeof(struct node));
FILE *fp;
if((fp=fopen(filename,"rt"))==NULL)
{
printf("读文件出错,按任意键退出");
exit(1);
}
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
head=r;
while(!feof(fp))
{
stu=(struct node*)malloc(sizeof(struct node));
fscanf(fp,"%s %s",stu->account,stu->password);
r->next=stu;
r=stu;
}
//printf("%s %s",r->account ,r->password);
r->next=NULL;
fclose(fp);
//printf("文件信息已经正确读出,按任意键返回!");
return head;
}
1.2电影信息
struct node2
{
char name[30];
char id[20];
int rest;
int sold;
char time[30];
struct node2 *next;
};
struct node2 *creat_inf2(char filename[30])//尾插法建立存储账号密码的单链表
{
//printf("hh");
struct node2 *r,*head,*stu;
head=(struct node2*)malloc(sizeof(struct node2));
FILE *fp;
if((fp=fopen(filename,"rt"))==NULL)
{
printf("读文件出错,按任意键退出");
exit(1);
}
head=(struct node2*)malloc(sizeof(struct node2));
head->next=NULL;
head=r;
while(!feof(fp))
{
stu=(struct node2*)malloc(sizeof(struct node2));
fscanf(fp,"%s %s %d %d %s",stu->id,stu->name,&stu->rest ,&stu->sold,stu->time);
r->next=stu;
r=stu;
}
//printf("%s %s",r->account ,r->password);
r->next=NULL;
fclose(fp);
// printf("文件信息已经正确读出,按任意键返回!");
return head;
}
2修改链表信息 存储文件
void save(char filename[20],struct node2 *list)
{
FILE *fp;
struct node2 *stu;
if((fp=fopen(filename,"w"))==NULL)
{
printf("写文件出错,按任意键退出");
getchar();
exit(0);
}
for(stu=list->next;stu!=NULL;stu=stu->next)
fprintf(fp,"%s %s %d %d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
//printf("文件保存成功!");
fclose(fp);
}
3.判断账户类型(影院经理/售票员/顾客)
3.1判断
int compare(char account[20],char password[20])
{
struct node *l1,*stu,*l2,*l3;
l1=creat_inf(filename1);
// for(stu=l1;stu!=NULL;stu=stu->next)
//printf("%s %s",stu->account,stu->password );
for(stu=l1;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("影院经理端\n");
choice=1;
return 1;
}
}
l2=creat_inf(filename2);
for(stu=l2;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("售票员端\n");
choice=2;
return 1;
}
}
l3=creat_inf(filename3);
for(stu=l3;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("顾客端\n");
choice=3;
return 1;
}
}
return 0;
}
3.2不同账户对应操作
void opt1()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.电影放映有关信息\n\t\t\t\t2.增加电影信息\n\t\t\t\t3.删除电影信息\n\t\t\t\t4.更改电影信息\n\t\t\t\t5.按售出票排序\n\t\t\t\t6.退出\n");
printf("\t\t\t\t请选择操作/(输入操作对应序号):");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
add();
}
else if(n==3)
{
deletee();
}
else if(n==4)
{
modify();
}
else if(n==5)
{
sort();
}
else if(n==6)
return ;
}
}
void opt2()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看电影信息\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
printf("\t\t\t\t请选择操作(输入操作对应序号)\n");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
book();
}
else if(n==3)
{
cancel();
}
else if(n==4)
return ;
}
}
void opt3()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看推荐影片\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
scanf("%d",&n);
if(n==1)
{
recommand();
}
if(n==2)
{
book();
}
if(n==3)
{
cancel();
}
if(n==4)
return ;
}
}
4.打印电影信息
4.1打印无序电影信息
void print()
{
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(stu=l4->next;stu->next!=NULL;stu=stu->next)
printf(" %s %s %3d %3d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
}
4.2打印已排序电影信息
void print_sort(struct node2 *stu)
{
struct node2 *p;
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(p=stu->next->next;p!=NULL;p=p->next)
printf("%s %s %3d %3d %s\n",p->id,p->name,p->rest,p->sold,p->time);
}
5.对电影已卖票数排序
void sort()
{
struct node2 *stu;
stu=creat_inf2("e:\\infor.txt");
struct node2 *p,*q,temp;
system("cls");
printf("1.卖出票数由低到高\n2.卖出票数由高到低\n");
printf("请您选择所需操作对应的序号(1/2):");
scanf("%d",&n);
switch(n)
{
case 1:
p=stu->next;
while(p->next!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->sold>q->sold)
{
temp=*p;
*p=*q;
*q=temp;
temp.next=p->next;
p->next=q->next;
q->next=temp.next;
}
q=q->next;
}
p=p->next;
}
printf("排序已完成!查看请按任意键查看\n");
getch();
print_sort(stu);
break;
case 2:
p=stu->next;
while(p->next!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->sold<q->sold)
{
temp=*p;
*p=*q;
*q=temp;
temp.next=p->next;
p->next=q->next;
q->next=temp.next;
}
q=q->next;
}
p=p->next;
}
printf("排序已完成!查看请按任意键查看\n");
getch();
print_sort(stu);
break;
}
**6 增删改电影信息
比较重复函数:
int check1(char s[20],struct node2 *head)
{
struct node2 *p;
for(p=head->next;p!=NULL;p=p->next)
if(strcmp(s,p->id )==0)
return 1;
return 0;
}
int check2(char s[20],struct node2 *head)
{
struct node2 *p;
for(p=head->next;p!=NULL;p=p->next)
if(strcmp(s,p->name )==0)
return 1;
return 0;
}
6.1增加
void add()
{
struct node2 *l4,*p1,*p;
int flag=0;
l4=creat_inf2(filename4);
char s[20],s1[20],s2[20],s3[20];
while(1)
{
system("cls");
printf("\n\n\n\t\t\t\t请输入电影id(会加在其后):");
scanf("%s",s);
p=l4;
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1=(struct node2*)malloc(sizeof(struct node2));
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(p1->id,s2);
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(p1->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
}
}
printf("\n\t\t\t\t请输入要添加的电影剩余票数:");
scanf("%d",&p1->rest);
printf("\n\t\t\t\t请输入要添加的电影已卖数:");
scanf("%d",&p1->sold);
printf("\n\t\t\t\t请输入要添加的电影上映时间:");
scanf("%s",p1->time);
printf("\n\t\t\t\t添加成功!");
p1->next=p->next;
p->next=p1;
}
p=p->next;
}
if(flag==1)
{
flag=0;
save(filename4,l4);
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键继续!");
getch();
}
}
}
6.2删除电影信息
void deletee()
{
struct node2 *l4,*p1,*p;
int flag=0;
l4=creat_inf2(filename4);
char s[20];
while(1)
{
p1=l4;
p=p1->next;
system("cls");
printf("\n\t\t\t\t请输入要删除电影信息对应的id:");
scanf("%s",s);
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1->next=p->next;
free(p);
printf("\n\t\t\t\t删除成功!");
}
p1=p;
p=p->next;
}
if(flag==1)
{
flag=0;
save(filename4,l4);
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键重新输入!");
getch();
}
}
}
6.3修改电影信息
void modify()
{
int n;
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
struct node2 *p;
stu=l4;
int flag=0;
char s[20],s2[20];
system("cls");
printf("\n\t\t\t\t1.修改电影id\n\t\t\t\t2.修改电影名称\n\t\t\t\t3.修改剩余票数\n\t\t\t\t4.修改已卖票数\n\t\t\t\t5.修改上市日期\n");
printf("\t\t\t\t请选择操作(请输入对应操作序号):");
scanf("%d",&n);
switch(n)
{
case 1:
while(1)
{
stu=l4;
system("cls");
printf("\n\t\t\t\t请输入要修改的电影对应id: ");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
while(1)
{
printf("\n\t\t\t\t请输入要改为的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(stu->id,s2);
printf("\n\t\t\t\t修改成功!");
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 2:
while(1)
{
stu=l4;
printf("\n\t\t\t\t请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
while(1)
{
printf("\n\t\t\t\t请输入要改成的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(stu->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
break;
}
}
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 3:
while(1)
{
stu=l4;
printf("\n\t\t\t\t请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影剩余票数:");
scanf("%d",&stu->rest);
printf("修改完成!") ;
}
stu=stu->next;
}
break;
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 4:
while(1)
{
stu=l4;
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影已卖票数:");
scanf("%s",stu->sold);
printf("修改完成!") ;
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 5:
while(1)
{
stu=l4;
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影上映时间:");
scanf("%s",stu->time);
printf("修改完成!") ;
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
}
save(filename4,l4);
}
7预定座位与退订
7.1预定座位
void book()
{
int a[100][100];
read(a);
int count=0,x,y,c;
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请选择是手动选座还是系统选座(1\\2):");
scanf("%d",&c);
switch(c)
{
case 1:
printf("请输入您要选择的座位号(x,y)\n");
scanf("%d %d",&x,&y);
a[x][y]=1;
break;
case 2:
for(i=1;i<=5;i++)
for(j=1;j<=7;j++)
if(a[i][j]==0)
{
x=i;
y=j;
break;
}
a[x][y]=1;
break;
}
printf("执行中//");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");//清屏
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
printf("你的座位为:(%d,%d)",x,y);
save_book(a);
}
7.2取消座位
void cancel()
{
int n=7,m=5,count=0,x,y,c;
int a[10][10]={1,1,0,1,0,0,0,
0,0,0,1,0,0,0,
1,0,0,0,1,0,0,
0,1,0,0,1,0,0,
0,1,0,0,0,0,1};
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请输入您要退订的座位号(x,y):");
scanf("%d %d",&x,&y);
if(a[x][y]==1)
{
a[x][y]=0;
printf("退订成功!\n");
}
else
printf("不好意思,此座位还没有被预定\n");
printf("//执行中");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");
printf("电影院座位票更新为:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
}
完整代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <unistd.h>
#include<time.h>
#include<conio.h>
int choice;
char filename4[30]={"e:\\infor.txt"};
char filename1[20]={"e:\\ceo_list.txt"};
char filename2[30]={"e:\\conductor_list.txt"};
char filename3[30]={"e:\\customer_list.txt"};
struct node2
{
char name[30];
char id[20];
int rest;
int sold;
char time[30];
struct node2 *next;
};
struct node//定义账号密码链表
{
char account[20];
char password[20];
struct node *next;
}Node,*LinkList;
struct node *creat_inf(char filename[20])//尾插法建立存储账号密码的单链表
{
struct node *r,*head,*stu;
FILE *fp;
if((fp=fopen(filename,"rt"))==NULL)
{
//printf("error!");
//getch();
return NULL;
}
head=(struct node*)malloc(sizeof(struct node));
head->next=NULL;
r=head;
while(!feof(fp))
{
stu=(struct node*)malloc(sizeof(struct node));
fscanf(fp,"%s %s",stu->account,stu->password);
r->next=stu;
r=stu;
}
//printf("%s %s",r->account ,r->password);
r->next=NULL;
fclose(fp);
//printf("文件信息已经正确读出,按任意键返回!");
return head;
}
struct node2 *creat_inf2(char filename[30])//尾插法建立存储账号密码的单链表
{
//printf("hh");
struct node2 *r,*head,*stu;
FILE *fp;
if((fp=fopen(filename,"rt"))==NULL)
{
return NULL;
}
head=(struct node2*)malloc(sizeof(struct node2));
head->next=NULL;
r=head;
while(!feof(fp))
{
stu=(struct node2*)malloc(sizeof(struct node2));
fscanf(fp,"%s %s %d %d %s",stu->id,stu->name,&stu->rest ,&stu->sold,stu->time);
r->next=stu;
r=stu;
}
//printf("%s %s",r->account ,r->password);
r->next=NULL;
fclose(fp);
// printf("文件信息已经正确读出,按任意键返回!");
return head;
}
int save(char filename[20],struct node2 *list)
{
FILE *fp;
struct node2 *stu;
if((fp=fopen(filename,"w"))==NULL)
{
//printf("error!");
//getch();
return -1;
}
for(stu=list->next;stu!=NULL;stu=stu->next)
fprintf(fp,"%s %s %d %d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
//printf("文件保存成功!");
fclose(fp);
return 1;
}
int compare(char account[20],char password[20])
{
struct node *l1,*stu,*l2,*l3;
l1=creat_inf(filename1);
if(l1==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
// for(stu=l1;stu!=NULL;stu=stu->next)
//printf("%s %s",stu->account,stu->password );
system("cls");
for(stu=l1;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("\n\n\n\t\t\t\t\t\t影院经理端\n");
choice=1;
return 1;
}
}
l2=creat_inf(filename2);
if(l2==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
for(stu=l2;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("\n\n\n\t\t\t\t\t\t售票员端\n");
choice=2;
return 1;
}
}
l3=creat_inf(filename3);
if(l3==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
for(stu=l3;stu!=NULL;stu=stu->next)
{
if(strcmp(account,stu->account)==0&&strcmp(password,stu->password)==0)
{ printf("\n\n\n\t\t\t\t\t\t顾客端\n");
choice=3;
return 1;
}
}
return 0;
}
void print()
{
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
system("cls");
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(stu=l4->next;stu->next!=NULL;stu=stu->next)
printf(" %s %s %d %d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
}
void print_sort(struct node2 *stu)
{
struct node2 *p;
system("cls");
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(p=stu->next->next;p->next!=NULL;p=p->next)
printf("%s %s %d %d %s\n",p->id,p->name,p->rest,p->sold,p->time);
}
void sort()
{
int n;
struct node2 *list;
list=creat_inf2(filename4);
struct node2 *p,*q,*p1=NULL;
system("cls");
printf("\n\t\t\t\t1.卖出票数由高到低\n\t\t\t\t2.卖出票数由低到高\n");
printf("\n\t\t\t\t请您选择所需操作对应的序号(1/2):");
scanf("%d",&n);
switch(n)
{
case 1:
while((list->next->next)!=p1)
{
p=list;
q=list->next;
while(q->next!=p1)
{
if(q->sold > q->next->sold)
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=p->next;
}
q=q->next;
p=p->next;
}
p1=q;
}
printf("\n\t\t\t\t排序已完成!\n");
print_sort(list);
break;
case 2:
while((list->next->next)!=p1)
{
p=list;
q=list->next;
while(q->next!=p1)
{
if(q->sold<q->next->sold)
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=p->next;
}
q=q->next;
p=p->next;
}
p1=q;
}
printf("排序已完成!\n");
print_sort(list);
break;
}
}
int check1(char s[20],struct node2 *head)
{
struct node2 *p;
for(p=head->next;p!=NULL;p=p->next)
if(strcmp(s,p->id )==0)
return 1;
return 0;
}
int check2(char s[20],struct node2 *head)
{
struct node2 *p;
for(p=head->next;p!=NULL;p=p->next)
if(strcmp(s,p->name )==0)
return 1;
return 0;
}
void add()
{
struct node2 *l4,*p1,*p;
int flag=0;
int ass;
l4=creat_inf2(filename4);
if(l4==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
char s[20],s1[20],s2[20],s3[20];
while(1)
{
system("cls");
printf("\n\n\n\t\t\t\t请输入电影id(会加在其后):");
scanf("%s",s);
p=l4;
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1=(struct node2*)malloc(sizeof(struct node2));
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(p1->id,s2);
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(p1->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
}
}
printf("\n\t\t\t\t请输入要添加的电影剩余票数:");
scanf("%d",&p1->rest);
printf("\n\t\t\t\t请输入要添加的电影已卖数:");
scanf("%d",&p1->sold);
printf("\n\t\t\t\t请输入要添加的电影上映时间(year-mon-day):");
scanf("%s",p1->time);
printf("\n\t\t\t\t添加成功!");
p1->next=p->next;
p->next=p1;
}
p=p->next;
}
if(flag==1)
{
flag=0;
ass=save(filename4,l4);
if(ass<0)
printf("文件读取有误!");
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键继续!");
getch();
}
}
}
void deletee()
{
struct node2 *l4,*p1,*p;
int flag=0;
int ass;
l4=creat_inf2(filename4);
if(l4==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
char s[20];
while(1)
{
p1=l4;
p=p1->next;
system("cls");
printf("\n\t\t\t\t请输入要删除电影信息对应的id:");
scanf("%s",s);
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1->next=p->next;
free(p);
printf("\n\t\t\t\t删除成功!");
}
p1=p;
p=p->next;
}
if(flag==1)
{
flag=0;
ass=save(filename4,l4);
if(ass<0)
printf("文件打开有误!");
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键重新输入!");
getch();
}
}
}
void modify()
{
int n;
struct node2 *l4,*stu;
int ass1;
l4=creat_inf2(filename4);
if(l4==NULL)
{
printf("\t\t\t\t文件打开有误!");
getch();
}
struct node2 *p;
stu=l4;
int flag=0;
char s[20],s2[20];
system("cls");
printf("\n\t\t\t\t1.修改电影id\n\t\t\t\t2.修改电影名称\n\t\t\t\t3.修改剩余票数\n\t\t\t\t4.修改已卖票数\n\t\t\t\t5.修改上市日期\n");
printf("\t\t\t\t请选择操作(请输入对应操作序号):");
scanf("%d",&n);
switch(n)
{
case 1:
while(1)
{
stu=l4;
system("cls");
printf("\n\t\t\t\t请输入要修改的电影对应id: ");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
while(1)
{
printf("\n\t\t\t\t请输入要改为的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(stu->id,s2);
printf("\n\t\t\t\t修改成功!");
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 2:
while(1)
{
stu=l4;
printf("\n\t\t\t\t请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
while(1)
{
printf("\n\t\t\t\t请输入要改成的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(stu->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
break;
}
}
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 3:
while(1)
{
stu=l4;
printf("\n\t\t\t\t请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影剩余票数:");
scanf("%d",&stu->rest);
printf("修改完成!") ;
}
stu=stu->next;
}
break;
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 4:
while(1)
{
stu=l4;
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影已卖票数:");
scanf("%s",stu->sold);
printf("修改完成!") ;
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
break;
case 5:
while(1)
{
stu=l4;
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
flag=1;
printf("请输入要改成的电影上映时间(year-mon-day):");
scanf("%s",stu->time);
printf("修改完成!") ;
}
stu=stu->next;
}
if(flag==1)
{
flag=0;
break;
}
else
{
printf("\n\t\t\t\t输入有误!按任意键继续");
getch();
}
}
default:printf("\t\t\t\t输入有误!按任意键重新输入!");
break;
}
ass1=save(filename4,l4);
if(ass1<0)
printf("文件打开有误!");
}
int fuzzy_search(char s[],char x[])
{
int len=0,len1=0;
int i,j,k=0,m=0,a=0,n=0;
char cmp[2000][2000];
len=strlen(s);
for(i=1;i<=len;i++)
len1+=i;
printf("len=%d",len);
for(i=1;i<=len;i++)
{
k=0;
while(1)
{
n=k;
for(j=0;j<i;j++)
{
//printf("%c",s[n]);
cmp[a][j]=s[n];
n++;
}
k++;
a++;
if(n==len)
{
// printf("1");
break;
}
}
}
printf("2");
//for(i=0;i<len1;i++)
//printf("%s\n",cmp[i]);
for(i=0;i<len1;i++)
{
if(strcmp(x,cmp[i])==0)
return 1;
}
return 0;
}
void fuzzy()
{
struct node2 *l4,*p1,*p;
int flag=0;
l4=creat_inf2(filename4);
char s[20];
printf("输入想要模糊的电影名称:");
scanf("%s",s);
for(p=l4->next ;p!=NULL;p=p->next)
{
if(fuzzy_search(s,p->name)==1)
{
printf("%s",p->name);
}
else
{
printf("没有找到!");
}
}
}
//菜单显示
void homepage()
{
char account[20],password[20],n;
system("cls");
while(1)
{
printf("\n\n\n\t\t\t\t---------登录页面----------\n");
printf("\n\n\n\t\t\t\t账号:");
fflush(stdin);
scanf("%s",account);
printf("\n\n\n\t\t\t\t密码(4位):");
int i=0;
char ch;
for(i=0;i>=0&&i<4;i++)
{
password[i]=getch();
if(password[i]=='\b')
{
i-=2;
printf("\b \b");
}
else
printf("*");
}
//printf("%s %s",account,password);
getch();
if(compare(account,password)==0)
{
printf("\n\n\n\t\t\t\t\t\t账号或密码错误,请重新输入!\n");
getch();
system("cls");
}
else
break;
}
}
void recommand()
{
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
printf("--------------------------\n");
printf("|电影名称 |上市日期 |\n");
for(stu=l4->next;stu->next!=NULL;stu=stu->next)
printf(" %s %s\n",stu->name,stu->time);
}
void sleep(int millisecond)
{
clock_t begin=clock();
while(clock()-begin<millisecond);//clock()函数指该程序从启动到函数调用占用cpu的时间
}
int read(int a[100][100])
{
FILE *fp;
if((fp=fopen("e:\\book.txt","r"))==NULL)
{
return -1;
}
for(int i=1;i<=5;i++)
{
for(int j=1;j<=7;j++)
{
fscanf(fp,"%d ",&a[i][j]);//注意格式问题
}
}
fclose(fp);
return 1;
}
int save_book(int a[100][100])
{
FILE *fp;
if((fp=fopen("e:\\book.txt","w"))==NULL)
{
return -1;
}
for(int i=1;i<=5;i++)
{
for(int j=1;j<=7;j++)
{
fprintf(fp,"%d ",a[i][j]);//注意格式问题
}
}
fclose(fp);
return 1;
//printf("保存成功!");
}
void book()
{
int a[100][100];
int ass1=read(a);
if(ass1<0)
printf("文件打开失败!");
int ass;
int count=0,x,y,c;
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请选择是手动选座还是系统选座(1\\2):");
scanf("%d",&c);
switch(c)
{
case 1:
printf("请输入您要选择的座位号(x,y)\n");
scanf("%d %d",&x,&y);
a[x][y]=1;
break;
case 2:
for(i=1;i<=5;i++)
for(j=1;j<=7;j++)
if(a[i][j]==0)
{
x=i;
y=j;
break;
}
a[x][y]=1;
break;
}
printf("执行中//");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");//清屏
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
printf("你的座位为:(%d,%d)",x,y);
ass=save_book(a);
if(ass<0)
printf("文件打开有误!");
}
void cancel()
{
int n=7,m=5,count=0,x,y,c;
int ass;
int ass1;
int a[100][100];
ass1=read(a);
printf("文件打开有误!");
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请输入您要退订的座位号(x,y):");
scanf("%d %d",&x,&y);
if(a[x][y]==1)
{
a[x][y]=0;
}
else
printf("不好意思,此座位还没有被预定\n");
printf("//执行中");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");
printf("\n退订成功!\n");
printf("电影院座位票更新为:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
save_book(a);
if(ass<0)
printf("文件打开有误!");
}
void opt1()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.电影放映有关信息\n\t\t\t\t2.增加电影信息\n\t\t\t\t3.删除电影信息\n\t\t\t\t4.更改电影信息\n\t\t\t\t5.按售出票排序 \n\t\t\t\t7.退出\n");
printf("\t\t\t\t请选择操作/(输入操作对应序号):");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
add();
}
else if(n==3)
{
deletee();
}
else if(n==4)
{
modify();
}
else if(n==5)
{
sort();
}
else if(n==6)
{
fuzzy();
}
else if(n==7)
return ;
else
printf("\t\t\t\t输入有误!按任意键重新输入");
}
}
void opt2()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看电影信息\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
printf("\t\t\t\t请选择操作(输入操作对应序号)\n");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
book();
}
else if(n==3)
{
cancel();
}
else if(n==4)
return ;
else
printf("输入有误!按任意键重新输入!");
}
}
void opt3()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看推荐影片\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
scanf("%d",&n);
if(n==1)
{
recommand();
}
else if(n==2)
{
book();
}
else if(n==3)
{
cancel();
}
else if(n==4)
return ;
else
printf("输入有误!按任意键重新输入!");
}
}
void menu()
{
int n;
while(1)
{
printf("\n\n\n\t\t\t\t\t\t1.登录\n\n\n\t\t\t\t\t\t2.退出\n");
scanf("%d",&n);
if(n==1)
{
homepage();
break;
}
else if(n==2)
exit(0);
else
{
printf("输入有误,按任意键重新输入!");
getch();
system("cls");
}
}
}
int main()
{
//homepage();
menu();
if(choice==1)
{
opt1();
system("cls");
main();
}
else if(choice==2)
{
opt2();
system("cls");
main();
}
else if(choice==3)
{
opt3();
system("cls");
main();
}
}
思维导图
**表现层(UI)
选择登录与退出menu()
void menu()
{
int n;
while(1)
{
printf("\n\n\n\t\t\t\t\t\t1.登录\n\n\n\t\t\t\t\t\t2.退出\n");
scanf("%d",&n);
if(n==1)
{
homepage();
break;
}
else if(n==2)
exit(0);
else
{
printf("输入有误,按任意键重新输入!");
getch();
system("cls");
}
}
}
登录页面Homepage()
void homepage()
{
char account[20],password[20],n;
system("cls");
while(1)
{
printf("\n\n\n\t\t\t\t---------登录页面----------\n");
printf("\n\n\n\t\t\t\t账号:");
fflush(stdin);
scanf("%s",account);
printf("\n\n\n\t\t\t\t密码(4位):");
int i=0;
char ch;
for(i=0;i<4;i++)
{
password[i]=getch();
if(password[i]=='\b')
{
i-=2;
printf("\b \b");
}
else
printf("*");
}
//printf("%s %s",account,password);
getch();
if(compare(account,password)==0)
{
printf("\n\n\n\t\t\t\t\t\t账号或密码错误,请重新输入!\n");
getch();
system("cls");
}
else
break;
}
}
不同账户操作对应:opt1(),opt2(),opt3()
void opt1()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.电影放映有关信息\n\t\t\t\t2.增加电影信息\n\t\t\t\t3.删除电影信息\n\t\t\t\t4.更改电影信息\n\t\t\t\t5.按售出票排序\n\t\t\t\t6.退出\n");
printf("\t\t\t\t请选择操作/(输入操作对应序号):");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
add();
}
else if(n==3)
{
deletee();
}
else if(n==4)
{
modify();
}
else if(n==5)
{
sort();
}
else if(n==6)
return ;
}
}
void opt2()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看电影信息\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
printf("\t\t\t\t请选择操作(输入操作对应序号)\n");
scanf("%d",&n);
if(n==1)
{
print();
}
else if(n==2)
{
book();
}
else if(n==3)
{
cancel();
}
else if(n==4)
return ;
}
}
void opt3()
{
int n;
while(1){
getch();
system("cls");
printf("\n\n\n\t\t\t\t1.查看推荐影片\n\t\t\t\t2.预定电影票\n\t\t\t\t3.取消已购的电影票\n\t\t\t\t4.退出\n");
scanf("%d",&n);
if(n==1)
{
recommand();
}
if(n==2)
{
book();
}
if(n==3)
{
cancel();
}
if(n==4)
return ;
}
}
1)影院经理端
查看电影信息
print()
void print()
{
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
system("cls");
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(stu=l4->next;stu->next!=NULL;stu=stu->next)
printf(" %s %s %d %d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
}
增加电影信息
add()
void add()
{
struct node2 *l4,*p1,*p;
int flag=0;
l4=creat_inf2(filename4);
char s[20],s1[20],s2[20],s3[20];
while(1)
{
system("cls");
printf("\n\n\n\t\t\t\t请输入电影id(会加在其后):");
scanf("%s",s);
p=l4;
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1=(struct node2*)malloc(sizeof(struct node2));
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(p1->id,s2);
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(p1->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
}
}
printf("\n\t\t\t\t请输入要添加的电影剩余票数:");
scanf("%d",&p1->rest);
printf("\n\t\t\t\t请输入要添加的电影已卖数:");
scanf("%d",&p1->sold);
printf("\n\t\t\t\t请输入要添加的电影上映时间:");
scanf("%s",p1->time);
printf("\n\t\t\t\t添加成功!");
p1->next=p->next;
p->next=p1;
}
p=p->next;
}
if(flag==1)
{
flag=0;
save(filename4,l4);
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键继续!");
getch();
}
}
}
删除电影信息
deletee()
void deletee()
{
struct node2 *l4,*p1,*p;
int flag=0;
l4=creat_inf2(filename4);
char s[20];
while(1)
{
p1=l4;
p=p1->next;
system("cls");
printf("\n\t\t\t\t请输入要删除电影信息对应的id:");
scanf("%s",s);
while(p!=NULL)
{
if(strcmp(s,p->id)==0)
{
flag=1;
p1->next=p->next;
free(p);
printf("\n\t\t\t\t删除成功!");
}
p1=p;
p=p->next;
}
if(flag==1)
{
flag=0;
save(filename4,l4);
break;
}
else
{
printf("\t\t\t\t输入id有误,按任意键重新输入!");
getch();
}
}
}
修改电影信息
modify()
void modify()
{
int n;
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
struct node2 *p;
stu=l4;
char s[20],s2[20];
system("cls");
printf("\n\t\t\t\t1.修改电影id\n\t\t\t\t2.修改电影名称\n\t\t\t\t3.修改剩余票数\n\t\t\t\t4.修改已卖票数\n\t\t\t\t5.修改上市日期\n");
printf("\t\t\t\t请选择操作(请输入对应操作序号):");
scanf("%d",&n);
switch(n)
{
case 1:
printf("\t\t\t\t请输入要修改的电影对应id: ");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
while(1)
{
printf("\n\t\t\t\t请输入要改为的电影id:");
scanf("%s",s2);
if(check1(s2,l4)==0)
{
strcpy(stu->id,s2);
printf("修改成功!");
break;
}
else
{
printf("\t\t\t\t输入id重复,按任意键重新操作!");
getch();
}
}
}
stu=stu->next;
}
break;
case 2:
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
while(1)
{
printf("\n\t\t\t\t请输入要添加的电影名字:");
scanf("%s",s2);
if(check2(s2,l4)==0)
{
strcpy(stu->name,s2);
break;
}
else
{
printf("\t\t\t\t输入名字重复,按任意键重新操作!");
getch();
}
}
}
stu=stu->next;
}
break;
case 3:
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
printf("请输入要改成的电影剩余票数:");
scanf("%d",&stu->rest);
printf("修改完成!") ;
}
stu=stu->next;
}
break;
case 4:
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
printf("请输入要改成的电影已卖票数:");
scanf("%s",stu->sold);
printf("修改完成!") ;
}
stu=stu->next;
}
break;
case 5:
printf("请输入要修改的电影对应id");
scanf("%s",s);
while(stu!=NULL)
{
if(strcmp(s,stu->id)==0)
{
printf("请输入要改成的电影上映时间:");
scanf("%s",stu->time);
printf("修改完成!") ;
}
stu=stu->next;
}
break;
}
save(filename4,l4);
}
2)售票端
查询电影信息
print()
void print()
{
struct node2 *l4,*stu;
l4=creat_inf2(filename4);
system("cls");
printf("---------------------------------------------------------\n");
printf("|id |电影名称 |剩余票数 |已卖票数 |上市日期 |\n");
for(stu=l4->next;stu->next!=NULL;stu=stu->next)
printf(" %s %s %d %d %s\n",stu->id,stu->name,stu->rest,stu->sold,stu->time);
}
预定电影座位
book()
void book()
{
int a[100][100];
read(a);
int count=0,x,y,c;
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请选择是手动选座还是系统选座(1\\2):");
scanf("%d",&c);
switch(c)
{
case 1:
printf("请输入您要选择的座位号(x,y)\n");
scanf("%d %d",&x,&y);
a[x][y]=1;
break;
case 2:
for(i=1;i<=5;i++)
for(j=1;j<=7;j++)
if(a[i][j]==0)
{
x=i;
y=j;
break;
}
a[x][y]=1;
break;
}
printf("执行中//");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");//清屏
for(i=1;i<=5;i++)
{
for(j=1;j<=7;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
printf("你的座位为:(%d,%d)",x,y);
save_book(a);
}
退订电影座位
cancel()
void cancel()
{
int n=7,m=5,count=0,x,y,c;
int a[100][100];
read(a);
int i,j;
printf("电影院座位票:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
count=0;
printf("请输入您要退订的座位号(x,y):");
scanf("%d %d",&x,&y);
if(a[x][y]==1)
{
a[x][y]=0;
}
else
printf("不好意思,此座位还没有被预定\n");
printf("//执行中");
for(i=0;i<6;i++)
{
sleep(500);
printf(".");
}
system("cls");
printf("\n退订成功!\n");
printf("电影院座位票更新为:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j]==1)
printf("▇");
else
printf("□");
count++;
if(count%7==0)
printf("\n");
}
}
save_book(a);
}
3)顾客端
查看推荐电影信息
recommend()
预定电影座位
book()
退订电影座位
cancel()
**业务逻辑层(BLL)
增加电影信息
引用creat_inf()函数 文件读取信息创建链表
增加信息
引用save()函数 将信息存储文件中
修改电影信息
引用creat_inf()函数 文件读取信息创建链表
修改信息
引用save()函数 将信息存储文件中
删除电影信息
引用creat_inf()函数 文件读取信息创建链表
删除信息
引用save()函数 将信息存储文件中
预定座位
引用read()函数 文件读取信息创建链表
修改座位信息
引用save_book()函数 将信息存储文件中
取消座位
引用read()函数 文件读取信息创建链表
修改座位信息
引用save_book()函数 将信息存储文件中
**数据访问层(DAL)
从文件中读取信息存储链表:
1)账号密码
struct node *creat_inf(char filename[20]);
2)电影信息
struct node2 *creat_inf2(char filename[30])
3)座位
void read(int a[100][100])
将链表信息重新存入文件中:
1)账号密码
void save(char filename[20],struct node2 *list)
2)座位
void save_book(int a[100][100])