电影院选票系统(C语言课设)

这里给到大家介绍一个自己写的C语言课设的代码,代码功能不是很完善,只有很基础的增删改查

题目 :电影院选票系统

功能 :放映厅 ,电影信息的 增删改查,以及排序

系统要求实现以下功能:
1、输入功能:录入电影/放映厅 信息(包括放映厅编号,名称,初始位置,行列,和电影编号,名称,所在放映厅 等);
2、显示功能:完成管理员记录的显示。
3、查找功能:完成按编号或位置查找放映厅/电影的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入电影/放映厅 信息并可将文件内容显示出来)3、完成修改功能,即输入编号,可修改该电影的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。
要求:1、用C语言实现程序设计;
2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。、

头文件

每一个头文件都有不同的用处:<stdio.h>就是我们必须要写的头文件,包括这输入和输出函数

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <windows.h>


下面来看一看,这里是我定义的所有结构体

定义出需要的结构体,后面的代码会用到这里的结构体

//  先定义需要定义的东西 
struct movieHouse   
{
	char houseNum[20];    //  放映厅编号
	char houseName[20];  //  放映厅名称
	int  housrow; 		//放映厅行数 
	int housecol;      // 放映厅列数
	char houseState [101];  // 放映厅初始位置 
	movieHouse * next; 
};//  定义一个放映厅 
struct Movie 
{
	char movieNum[20];    //电影编号
	char movieName[20];  //电影名称
	double  price ;     //电影单价 
	char date[20];     // 电影放映日期 
	char time[20];    // 放映时间
	char movieHouse[20];  //所在放映厅编号 
	char setState[101];  //当前状态
	Movie *next;
}; //电影信息
struct Order 
{
	char custName[20];   //顾客用户名 
	char movieName[20];  //电影名称
	int ticketNum;       // 购买数量
	char set[40];      // 所选座位
	double ticketCost;  // 总价格
	char OrderDate[20];  //购买日期
	Order *next; 
};//   定义顾客订单
struct Customer{
	char CustName[20];  //顾客名称
	char CustCode[20];  // 密码 
}; //  顾客 

//  定义结束

这里是我用到的函数

我们知道需要声明函数,而函数也可以帮你理清楚自己的思维,可以在码代码前想一想自己想要实现的功能,以此就可以编写出自己需要的函数,函数的功能,这样码代码的时候就会轻松很多,当然,也可以自己先画一个思维图,在哪个模块要实现什么功能。

void ManageLogin();   //管理员登录
void CustomerLogin();  // 用户登录
//int ReadManagerFile (FILE *fp,Manager s[]);  // manager.txt 中的管理员个数 
int ReadCustomerFile (FILE *fp,Customer t[]);  //customer.txt 中用户名的个数 
void HouseControl();  //放映厅管理
void MovieControl();  // 电影场次管理 
Order * MovieOrder(Order *ohead,char name[]);//电影订票
void Ordercheck(Order *ohead, char name[]);//查看订票 
movieHouse *Create_House_Doc();  //  创建放映厅链表 
movieHouse *Insert_House_Doc(movieHouse *head,movieHouse *p);   //  放映厅链表的插入   增加放映厅数据 
void print_House_Doc(movieHouse *head);    // 遍历链表 ,输出放映厅信息 
movieHouse* Delete_House_Doc(movieHouse * head,char houseNum[]) ;// 删除放映厅数据 
void After_House_Doc(movieHouse *head);  //  修改已有放映厅的信息 
void InHouseFile(movieHouse *head);  // 将修改的信息写入文件  
Movie *Creat_Movie_Doc();  // 创建电影场次信息链
void Printf_Movie_Doc(Movie *mhead);  // 输出电影场次信息
Movie *Insert_movie_Doc(Movie *mhead);  //插入链表,增加电影数目
Movie *Delete_Movie_Doc(Movie *mhead);  //删除电影场次信息
void After_Movie_Doc(Movie *mhead);   //修改电影场次信息
void InMoviefile(Movie * mhead);   // 将电影信息写入movie.txt 文件 
Order *Create_Order_Doc(); // 创建订单链表   和文件进入链表 
void InorderFile(Order *ohead,Order *p);//  将订单链表导入文件 
void printf_After_movie(Movie *mhead);   // 显示当前时间之后的电影 
void printf_moviechoice(Movie *mhead,char cheng[]);//   用于打印用户所选场次的电影的场次信息
//int setSurplus(movieHouse* head,Order *ohead); // 计算影厅还有多少座位
Order *Insert_Order_Doc(Order *ohead,Order *p);  // 将顾客的选择插入链表中
void sortMovie(Movie *mhead);  //  对电影编号进行升序排列排序 
void sortmovieHouse(movieHouse *head); //  对影厅的编号进行降序排序 

下面正式介绍代码

这里是主函数,主函数里面我有两个功能,一个是选择进行管理员登录,(管理员登陆这一块我只设定了一个管理员,对应了一个密码)需要的可以自己增加管理员的个数,增加的形式,和用户的是一样的)或者是用户登录。 刚开始会输入日期,这样我们就可以看到这天及以后的所有已经输入的电影。

system("color f5");  这行代码是改变了运行页面的颜色,这样更加美观一点。

int main (void)
{
	int x;
	Movie *mhead;
	mhead = Creat_Movie_Doc();
	sortMovie(mhead); 
	printf_After_movie(mhead);
onceagain: 
	system("color f5");
	printf("\n\t\t\t==================================\n");
	printf("\n");
	printf("\t\t\t       请输入登录类型              \n");
	printf("\n");
	printf("\t\t\t    1.管理员\t  2.用户            \n");
	printf("\n"); 
	printf("\t\t\t==================================\n");
	printf("\n\t\t\t请输入您想要进行的操作: ");
	scanf("%d",&x);
	system ("cls");
	switch (x)
	{
		case 1:ManageLogin();  // 管理员登录 
				break;
		case 2:CustomerLogin();   // 用户登录 
				break;
		default:
		{
			printf("\n\n\t\t\t您的输入有误,请重新选择\n");
			Sleep(1000);
			system ("cls");
			goto  onceagain;
		}
	}
	return 0;
}

下面是管理员登录的页面

管理员登陆的密码和账号都是111111,也可以自己进行修改。只有五次机会,不然就会自动跳出程序。

void ManageLogin()    //管理员登录的页面 
{
	
/*	FILE *fp =fopen("manager.txt","w");
	if ((fp =fopen("manager.txt","r")) == NULL)
	{
		printf("File open error");
		exit(0);
	}*/
	
	 int time=0; 
	 int name;
	 int code;
	 int  admCount;
//	 Manager man[10];
	 again_1:               // 后面goto again_1 可以使程序跳到这块    ,两个语句相当于一个循环 
	 int i,flag= 1;\
	 printf("\n\t\t\t请输入管理员账号: ");
	 scanf("%d",&name);
	 printf("\n\t\t\t请输入密码 : ");
	 scanf("%d",&code);
//	 admCount = ReadManagerFile(fp,man);
	 for (i=0;i<3;i++)
	 {
	 	if ((name== 111111) && (code==111111)) //  strcmp 函数比较两个数  ,相同返回零,前者大返回正数,后者大返回负数 
	 	{
	 		flag =0;
	 		break;
		 }
	 }
	 if (flag)
	 {
	 	printf("\t\t\t账号或密码错误,请重新输入!\n");
	 	time++;
	 	printf("\t\t\t你还有%d 次输入次数",(5-time));
	 	system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 
	 	system ("cls");  // 清屏命令 
	 	if (time<5)  goto again_1;
	 	else   exit(0);
	}
	else
	{
		printf("登录成功!\n");
	}
	system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 = 
	system ("cls");
/*	if(fclose(fp)) 
	{
		printf("Cannot close thr file \n");
		exit(0);
	}*/
	again_5:
	printf("\t\t\t==================================\n");
	printf("\t\t\t     1. 电影放映厅信息管理        \n"); 
	printf("\t\t\t     2. 电影场次信息管理          \n");
	printf("\t\t\t     0. 退出                      \n");
	printf("\t\t\t==================================\n");
	int choice;
	printf("\t\t\t请输入你想要进行的操作:    ");
	scanf("%d",&choice);
	system ("cls");
	switch(choice)
	{
		case 1:
			HouseControl();
			goto again_5;
			break;   // 进行放映厅的管理
		case 2:
			MovieControl();
			goto again_5;
			break;  // 电影场次管理
		case 0: exit(0);break;
		default : goto again_5; break;
	}
}

下面这块是客户登录的页面

进入页面,你可以选择登录/注册, 只有注册过后才可以登录。

这里有客户文件的创建,以及将信息写入到文件中

FILE *fp;//=fopen("customer.txt","w");  这段是由于创建文件经常会不成功,所以运用这行代码可以成功创建文件,但是“W”形式打开会将文件中的内容清空,所以创建成功之后一定要注释掉这串代码,不然文件之前有的内容就会找不到。

void CustomerLogin()    //   客户登录的页面 
{
	FILE *fp;//=fopen("customer.txt","w");
	if ((fp =fopen("customer.txt","a+")) == NULL)
	if (fp==NULL)
	{
		printf(" file open error!\n");
		exit (0);
	}
	char name[20];
	char code[20];
	int custCount;
	int choice;
	Customer cust[200];
	custCount = ReadCustomerFile(fp,cust);     //admCount = ReadManagerFile(fp,man)
    again_2:
	printf("\n\n\t\t*******************************\n");
	printf(" \n\t\t     欢迎来到倪家大剧院       \n");
	printf("\n");
	printf(" \n\t\t   1. 登录\t  2.注册          \n");
	printf("\n");
	printf("\n\t\t*******************************\n");
	printf("请输入您的选择:   ");
	scanf("%d",&choice);
	system("cls");
	int i,flag;
	int time =0;
	switch (choice)
	{
		case 1:
		again_3:
		flag =1;
		printf("请输入用户名: ");
		scanf("%s",name);
		printf("请输入密码:   ");
		scanf("%s",code);
		for (i=0;i<custCount;i++)
		{
			if ((strcmp(name,cust[i].CustName)==0) && (strcmp(code,cust[i].CustCode) == 0))
			{
				flag =0;
				break;
			}
		}
		if (flag)
		{
	 	printf("账号或密码错误,请重新输入! \n");
	 	time++;
	 	printf("你还有%d 次输入次数",(5-time));
	 	system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 
	 	system ("cls");
	 	goto again_3;
		}
		else 
		{
			printf("登录成功!\n");
			system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 
	 		system ("cls");  // 清屏命令 
		}
		break;
		case 2:
			again_4:
			printf("请输入您的用户名:  ");
			scanf("%s",name);
			for (i=0;i<custCount;i++)
			{
				if (strcmp(name,cust[i].CustName) == 0)   //  比较两个参数的大小,相同返回零 
				{
					printf("该用户名已存在");
					system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 
	 				system ("cls");
				    goto  again_4;		 
				}
			}
			printf("请输入密码: ");
			scanf("%s",code);
			strcpy (cust[custCount].CustName,name);
			strcpy (cust[custCount].CustCode,code);										//fscanf  从文件中读取数据保存到前面的链表中去 
			fprintf(fp,"%s   %s\n",cust[custCount].CustName,cust[custCount].CustCode);    //   将新增加的用户的用户名和密码写入文件中去 
			printf("注册成功!\n");
			system("pause"); //  可以实现冻结屏幕,便于观察程序执行结果 
	 		system ("cls");
	 		break;
		default :
			printf("您的输入有误,请重新选择想要操作的内容 :  ");
			Sleep(1000);
			system ("cls");
			goto again_2;
			break;
	}

	if (fclose(fp))
	{
		printf("can not close the file \n");
		exit(0);
	}
	Order *ohead;
	ohead = Create_Order_Doc();
	again_9:
	printf("\t\t\t*************************************\n");
	printf("\t\t\t           1.进行电影订票            \n");
	printf("\t\t\t           2.查看我的订单            \n");
	printf("\t\t\t           0.退出                    \n");
	printf("\t\t\t*************************************\n");
	int select;
	printf("\t\t\t 请输入您的选择:  ");
	scanf("%d",&select);
	system ("cls");

	switch (select)
	{
		case 1:
			ohead = MovieOrder(ohead,name);
		//	InorderFile(ohead);
			goto again_9;
			break;   // 电影订票 
		case 2:
		Ordercheck(ohead,name);
		system("pause");
		system("cls");
		int choice;
		printf("\t\t\t======================\n");
		printf("\t\t\t请问是否选择付钱:  \n");
		printf("\t\t\t1.YES     2.NO \n");
		printf("\t\t\t======================\n");
		printf("\t\t\t请选择: ");
		scanf("%d",&choice);
		printf("\n");
		if (choice==1)
		{
			printf("\t\t\t您已支付!\n");
			printf("\t\t\t");
			system("pause");
			return;
		}
		else
		{
			goto again_9;
		}
		break;   //  查看订票
		case 0:return;break;
	    default:
	    	{
	    		printf("\t\t\t 您的输入错误,请重新选择! ");
	    		Sleep(1000);
	    		system ("cls");
	    		goto again_9;
	    	    break;
			}
	}
	
}

计算顾客的数目,便于上一个函数中顾客的遍历

int ReadCustomerFile(FILE *fp, Customer t[])   //customer 中顾客的个数 
{
	int number=0;
	rewind(fp);
	while(!feof(fp))   // 判断文件有没有走到末尾; 
	{
		fscanf(fp,"%s%s",t[number].CustName,t[number].CustCode);
		number ++;
	}
	return number;
	
} 

这里是对放映厅进行管理,前面管理员登录的页面会用到这个

void HouseControl()  // 放映厅的管理 
{
	
	movieHouse * head;
//	head  = (movieHouse *)malloc (sizeof (movieHouse));
//	head->next = NULL;
	head = Create_House_Doc();

	again_6:
	printf("---------------------------------------\n");
	printf("1. 增加放映厅 \n");
	printf("2. 删除放映厅 \n");
	printf("3. 对已有放映厅进行改变\n");
	printf("4. 查看放映厅 \n");
	printf("0. 退出\n");
	printf("---------------------------------------\n");
	int choice;
	printf("请输入你想要进行的操作:  ");
	scanf("%d",&choice);
	system ("cls");
	switch (choice)
	{
		case 1:
			printf("请输入你想要增加的放映厅的编号,名字,行,列,位置:\n");
			movieHouse * p;
			p=(struct movieHouse*)malloc(sizeof(struct movieHouse));
			scanf("%s %s %d %d %s",p->houseNum,p->houseName,&p->housrow,&p->housecol,p->houseState);
			system ("cls");
			head =Insert_House_Doc(head,p);
			InHouseFile(head);
			print_House_Doc(head);
			goto again_6;
			break;
		case 2:
			print_House_Doc(head);
			printf("请输入你想去掉的放映厅的编号:");
			char housenum[20];
			scanf("%s",housenum);
			system("cls");
			head = Delete_House_Doc(head,housenum);
			InHouseFile(head);
			print_House_Doc(head);
			goto again_6;
			break;
		case 3:
			After_House_Doc(head);
			InHouseFile(head);
			break;
		case 4:
			sortmovieHouse(head);
			print_House_Doc(head);
			system("pause");
			system("cls");
			goto again_6;
			break;
		case 0: return;
		default: goto again_6;break;
	}
}

这里开始有了链表,这块创建链表,同时可以实现文件中的内容导入到链表中。

这里我用的是尾插法,因为我在将文件导入链表的时候加入了以空格结束的,防止最后会出现乱码,遍历到倒数第二个节点,让他指向NULL,这样就不会出现多处的空格变成乱码的情况了。

movieHouse *Create_House_Doc()   // 创建放映厅链表链表,实现文件导入链表 
{
	FILE *fp=fopen("movie_house.txt","rt");
	if (fp==NULL)
	{
		printf("file  open error");
		exit(-1);
	}
	movieHouse *head;
	head  = (movieHouse *)malloc (sizeof (movieHouse));
	head->next =NULL;
	movieHouse *p,*p1,*q;
	p = (movieHouse *)malloc (sizeof (movieHouse));
	p=head;
	p1 = (movieHouse *)malloc (sizeof (movieHouse));
	p1->next =NULL;
	if (fscanf(fp,"%s %s %d %d %s",p1->houseNum,p1->houseName,&p1->housrow,&p1->housecol,p1->houseState)!=EOF) 
	{
		p->next =p1;
		while(p->next)
		{
			p = p->next;
		}
		while (fgetc(fp)!=EOF)  //  判断文件是否到末尾   s是否为空 
		{
			q = (movieHouse *)malloc (sizeof (movieHouse));
			fscanf(fp,"%s %s %d %d %s",q->houseNum,q->houseName,&q->housrow,&q->housecol,q->houseState);
			p->next = q;    // 尾插法 
			q->next =NULL;
			p = p->next;
		 }
	    movieHouse *p2 = (movieHouse *)malloc (sizeof (movieHouse));
	    p2 = head;  //  删除最后一个节点 
	    while (p2->next->next)
	    {
	    	p2 = p2->next;
		}
		p2->next = NULL;
	}
	else
		return NULL;
	fclose(fp);
	return head;
} 

前面有放映厅场次,那后面就是电影场次的管理

和放映厅场次方法几乎一样

void MovieControl()  // 电影场次的管理 
{
	Movie * mhead;
//	mhead = (Movie*)malloc(sizeof(Movie));
//	mhead->next =NULL;
	mhead = Creat_Movie_Doc();
	sortMovie(mhead);
	///  此处需要一个建立头节点的链表    同时导入电影文件 
	again_0:
	printf("****************************************\n");
	printf("1.增加电影\n");
	printf("2.删除已存在的电影\n");
	printf("3.修改电影信息\n");
	printf("4.输出电影场次信息\n");
	printf("0.退出\n");
	printf("****************************************\n");
	int choice;
	printf("请输入您的选择:\n");
	scanf("%d",&choice);
	system("cls");
	switch (choice)
	{
		case 1: 
			Insert_movie_Doc(mhead);
			system("cls");
			InMoviefile(mhead);
			Printf_Movie_Doc(mhead);
			goto again_0;
			break;
		case 2:
			Printf_Movie_Doc(mhead);
			system("cls");
			Delete_Movie_Doc(mhead);
			system("cls");
			Printf_Movie_Doc(mhead);
		//	InMoviefile(mhead);
			goto again_0;
			break;
		case 3: 
			Printf_Movie_Doc(mhead);
			After_Movie_Doc(mhead);
		 	system("cls");
			Printf_Movie_Doc(mhead);
			goto again_0;
			break;
		case 4: 
			Printf_Movie_Doc(mhead);
			system("pause");
			system("cls"); 
			goto again_0;
			break;
		case 0: return;break;
	}
		 

}

下面就是电影的增删改查

增利用了头插法

Movie *Insert_movie_Doc(Movie *mhead) //插入链表,增加电影数目
{
	Movie *ptr,*ptr1,*p;
	ptr = (Movie *)malloc (sizeof (Movie));
	ptr = mhead;
	int n;
	printf("\n\n\t\t\t请输入你想要增加的电影场数:\n ");
	scanf("%d",&n);

		while (n)
		{
			p = (Movie *)malloc (sizeof (Movie));
			printf("\n\n\t\t请输入电影的 编号,名字,价格,放映日期,放映时间,放映地点,现在状态\n");
			printf("\t\t\t");
			scanf("%s %s %ld %s %s %s %s",p->movieNum,p->movieName,&p->price,p->date,p->time,p->movieHouse,p->setState);
			if (ptr->next ==NULL)
			{
				ptr->next =p;
				p->next = NULL;
			}
			else 
			{
				 p->next = ptr ->next;
				 ptr->next = p;
			}
			n--;
		}
	return mhead;
	
}
Movie *Delete_Movie_Doc(Movie *mhead) //删除电影场次信息
{
	Movie *ptr1,*ptr2;
	int n;
	printf("\n\n\t\t\t请输入你想要删除的电影的数目:  ");
	scanf("%d",&n);
	ptr1 = (Movie *)malloc (sizeof (Movie));
	ptr2 = (Movie *)malloc (sizeof (Movie));
	ptr1 = mhead;
	ptr2 = mhead->next;

	char num[20];
	while(n)
	{
		printf("\n\n\t\t\t请输入你想要删除的电影的编号:  ");
		scanf("%s",num);
		while(ptr2!=NULL)
		{
			if ((strcmp(ptr2->movieNum,num))==0)
			{
				ptr1->next = ptr2->next;
				free(ptr2);
			}
			ptr1 = ptr2;  // 判断编号不相同,ptr1 移动到ptr2 的位置 
			ptr2= ptr2->next;  //ptr2 往后移动一个结点 
		}
		n--;
	}
	return mhead;
	
}
void After_Movie_Doc(Movie *mhead)   //修改电影场次信息
{
	int choice;
	char name[20];
	Movie *ptr,*p;
	movieHouse* ptr1;
	printf("\t\t\t请输入你想要修改的电影名称: ");
	scanf("%s",name);
	printf("\t\t\t===========================\n");
	printf("\t\t\t1.价格\n");
	printf("\t\t\t2.所在放映厅编号\n");
	printf("\t\t\t3.放映时间\n");
	printf("\t\t\t===========================\n");
	printf("\n\t\t\t请输入你想要修改的信息: ");
	scanf("%d",&choice);
	for (ptr=mhead->next;ptr!=NULL;ptr=ptr->next)
	{
		if (strcmp(ptr->movieName,name)==0)
		{
			p=ptr;
			break;
		}
	}
	switch(choice)
	{
		case 1:
			double price;
			printf("\t\t\t请输入你想要修改成为的价格:");
			scanf("%ld",&price);
			p->price = price;
			break;
		case 2:
			char num[20];
			printf("\t\t\t请输入你想要修改成的编号: ");
			scanf("%s",num);
			strcpy(p->movieHouse,num);
		///	memcpy(p->movieHouse,num);
			break;
		case 3:
			char time[20];
			printf("\t\t\t请输入你想要改成的时间: ");
			scanf("%s",time);
			strcpy(p->time,time);
		//	p->time=time[20];
		//	memcpy(p->time,time);
			break;
	}
	InMoviefile(mhead);
	
}

下面利用头插法将链表电影信息写入文件(放映厅的方法也是这样的)

void InMoviefile(Movie * mhead)   // 将电影信息写入文件,实现文件的更新 
{
	FILE * fp;
	if ((fp=fopen("movie.txt","w"))==NULL)
	{
		printf("file open error");
		exit(0);
	}
	Movie *ptr;
	for (ptr= mhead ->next;ptr!=NULL;ptr=ptr->next)
	{
		fprintf(fp,"%s %s %ld %s %s %s %s\n",ptr->movieNum,ptr->movieName,ptr->price,ptr->date,ptr->time,ptr->movieHouse,ptr->setState);
	}
	if (fclose(fp))
	{
		printf("con not close the file\n ");
		exit(0);
	}
}

这里是main 函数中显示当天及之后的电影

void printf_After_movie(Movie *head)   // 显示当天及2之后的电影 
{
	char date[30];
	printf("请输入当前日期:\n");
	scanf("%s",date);
	Sleep(2000);
	system("cls");
	Movie *ptr;
	printf("*********************************************************************************************|\n");
	printf("|电影编号   |    电影名称  | 电影单价  |   电影放映日期  |  放映时间 |  所在放映厅  |\n");
	printf("*********************************************************************************************|\n");
	for (ptr=head->next;ptr!=NULL;ptr=ptr->next)
	{
		if (strcmp(ptr->date,date)>=0)
		{
			printf("|%-9s  |%-14s|%-11d|%-13s    |%-8s   | %-10s   |\n",ptr->movieNum,ptr->movieName,ptr->price,ptr->date,ptr->time,ptr->movieHouse);
			printf("*********************************************************************************************|\n");
		}
	}
}

利用冒泡排序对电影编号进行升序排列

void sortMovie(Movie *mhead)  // 对电影编号进行升序 
{
	Movie *p,*q,*r;
	r = NULL;
	while (r!=mhead->next)
	{
		p=mhead;
		q = p->next;
		while (q->next != r)
		{
			if (strcmp(p->next->movieNum,q->next->movieNum)==1)
			{
				p->next = q->next;
				q->next = q->next->next;
				p->next->next = q;
			}
			p = p->next;
			q = p->next;
		}
		r = q;
	}
	
}

做出了电影,放映厅的功能,还有顾客订单的功能,可以所有的代码都感觉是一个样子,就一摸一样的,不过就是换了结构体而已,所以这里也就不放出来了。

谢谢你的观看,希望可以对你有所帮助

  • 26
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值