文章目录

  • **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();
    }

}

思维导图

欢迎来到电影院管理系统python 电影院管理信息系统_链表


欢迎来到电影院管理系统python 电影院管理信息系统_3d_02

**表现层(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])