c语言课程设计——影院管理系统

用文件操作来写简单管理系统


什么是文件操作

文件就是磁盘中的文件,C语言里我们可以直接通过代码实现文件创建,修改等操作。
我们在进行操作时需要先指定一个文件指针FILE * fp;我们可以将FILE简单理解为一个像int,float的数据类型。
打开文件
fp=fopen(“文件路径”,“打开方式”);
文件路径可以使用相对路径,即"text.txt",此时文件就在该程序所处目录;也可使用绝对路径,即"e:\\code\\data.txt",注意用两个反斜杠“\\”作分隔
打开方式有

文件使用方式意义
“rt”只读打开一个文本文件,只允许读数据
“wt”只写打开或建立一个文本文件,只允许写数据
“at”追加打开一个文本文件,并在文件末尾写数据

除此以外,还有其他打开方式,这里不过多介绍
关闭文件
关闭文件很简单,我们只需要fclose(fp);就可以了
写入文件
int fprintf(FILE *fp,“格式化字符串”,输出项地址表);
作用:将程序中变量的值写入文件中
与printf格式相似,只是添加了文件指针
FILE *fp=fopen(“text.txt”,“wt”);
fprintf(fp,"%d%s%c",num,name,sex);
fclose(fp);
读取文件
int scanf(FILE *fp,“格式化字符串”,输入项地址表);
作用:将文件的信息按格式读取到程序的变量里
FILE *fp=fopen(“text.txt”,“rt”);
fscanf(fp,"%d%s%c",&num,name,&sex);


头文件,链表节点定义及函数声明

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct node//链表节点
{
	int number;
	char moviename[100];
	double price;
	double score;
	struct node *next;
}MOVIE;
void menu();//菜单目录
MOVIE* creat();//创建一个链表,新用户注册使用
void save(MOVIE *head);//将链表信息保存到文件
void modify(MOVIE *head);//修改文件信息
MOVIE* read();//将文件信息读取到链表
void Printf(MOVIE *head);//将信息逐个打印显示
void insert(MOVIE *head);//插入信息
void del(MOVIE *head);//删除信息
void serch();//按名称查询信息
void sort();//信息排序
int log();//登陆与注册
void sum(MOVIE *head);//信息统计

主函数

int main()
{
	printf("\n\n\n");
	printf("\t\t\t\t----------------------------------------\n\n");
	printf("\t\t\t\t|         欢迎使用影院管理系统         |\n\n");
	printf("\t\t\t\t----------------------------------------\n\n");
	printf("\n\t\t\t\t\t\t请您登陆\n\n\t\t");
	//开始界面
	system("pause");//暂停,给用户缓冲
	if(log()){//如果登陆注册成功就进入程序,否则直接退出程序
		int num;
		MOVIE *head=read();//将文件信息读取到链表
		system("cls");//清屏,以重新选择
		menu();//显示菜单目录
		printf("\n请输入您想要的功能:");
		scanf("%d",&num);//根据输入编号选择功能
		for(;num;){
			switch(num){
				case 1:
					system("cls");//清屏
					Printf(head);//打印信息
					system("pause"); 
					break;
				case 2:
					system("cls");
					insert(head); //插入信息
					break;
				case 3:
					system("cls");
					modify(head);//修改信息
					break;
				case 4:
					system("cls");
					del(head);//删除信息
					break;
				case 5:
					system("cls");
					serch();//按名称查询信息
					system("pause"); 
					break;
				case 6:
					system("cls");
					sort();//信息排序
					system("pause"); 
					break;
				case 7:
					system("cls");
					sum(head);//信息统计
					system("pause"); 
					break;
			}
			system("cls");
			menu();//再次显示菜单,以供再次选择
			printf("\n请输入您想要的功能:");
			scanf("%d",&num);
		}
	}
}

子函数代码

MOVIE* creat()//创造录入信息,注册时使用 
{
	MOVIE *head,*r,*s;
	int sign;
	head=(MOVIE*)malloc(sizeof(MOVIE));
	head->next=NULL;
	r=head;
	system("cls");
	printf("\n\n\n\t\t\t电影录入\n\n");
	printf("按0结束输入\n\n");
	printf("请输入电影编号:");
	scanf("%d",&sign);
	while(sign){
		s=(MOVIE*)malloc(sizeof(MOVIE));
		s->number=sign;
		printf("请输入电影名称:");
		scanf("%s",&s->moviename);
		printf("请输入电影票价:");
		scanf("%lf",&s->price);
		if(s->price>100||s->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&s->price);
		}
		printf("请输入电影评分:");
		scanf("%lf",&s->score);
		if(s->score>15||s->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&s->score);
		}
		printf("\n已录入,请继续\n\n");
		printf("请输入电影编号:");
		scanf("%d",&sign);
		r->next=s;
		r=s;
	}
	r->next=NULL;
	save(head);
	return head;
}
void save(MOVIE *head)//保存信息为文件 
{
	MOVIE *stu;
	FILE *fp;
	fp=fopen("电影目录.txt","wt");
	for(stu=head->next;stu!=NULL;stu=stu->next){
		fprintf(fp,"%d %s %lf %lf\n",stu->number,stu->moviename,stu->price,stu->score);
	}
	fclose(fp);
	printf("\n信息已保存,按任意键退出\n");
	getch();
}
void modify(MOVIE *head)//修改信息 
{
	MOVIE *stu;
	stu=head->next;
	int i;
	printf("\n\n");
	Printf(head);
	printf("\n\t请输入需要修改的电影编号:");
	scanf("%d",&i);
	if(i){
		for(i;i-1;i--){
			stu=stu->next;
		}
		printf("请输入修改后的票价:");
		scanf("%lf",&stu->price);
		printf("请输入修改后的评分:");
		scanf("%lf",&stu->score);
		if(stu->price>100||stu->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->price);
		}
		if(stu->score>15||stu->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->score);
		}
		printf("\n\n已成功修改\n");
		save(head);
	}
}
void insert(MOVIE *head)//插入信息 
{
	MOVIE *stu,*s;
	int num;
	stu=(MOVIE*)malloc(sizeof(MOVIE));
	s=head;
	printf("\n\n");
	Printf(head);
	printf("\n您想插入哪一个电影之后?:");
	scanf("%d",&num);
	if(num+1){
		stu->number=num+1;
		printf("\n请输入电影名称:");//
		scanf("%s",&stu->moviename);
		printf("请输入电影票价:");
		scanf("%lf",&stu->price);
		if(stu->price>100||stu->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->price);
		}
		printf("请输入电影评分:");
		scanf("%lf",&stu->score);
		if(stu->score>15||stu->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->score);//用stu保存将添加的信息 
		}
		for(num;num;num--){
			s=s->next;	
		}//找到将插入的节点 
		stu->next=s->next;
		s->next=stu;
		for(stu=stu->next;stu!=NULL;stu=stu->next){
			stu->number++;
		}//将后续的电影编号加一 
		printf("\n已成功插入该电影\n");
		save(head);
	}
}
void del(MOVIE *head)//删除信息 
{
	MOVIE *stu=head,*s;
	int num;
	printf("\n\n");
	Printf(head);
	printf("\t请输入您想删除的电影编号:");
	scanf("%d",&num);
	if(num){
		for(num;num-1;num--){
			stu=stu->next;
		}
		s=stu->next;
		stu->next=s->next;
		free(s);
		for(stu=stu->next;stu!=NULL;stu=stu->next){
			stu->number--;
		}
		printf("\n\n\t已删除该电影\n"); 
	}
	save(head);
}
MOVIE* read()//从文件读取信息到内存 
{
	MOVIE *head,*r,*stu,*s;
	FILE *fp;
	fp=fopen("电影目录.txt","rt");
	head=(MOVIE*)malloc(sizeof(MOVIE));
	head->next=NULL;
	r=head;
	while(!feof(fp)){
		stu=(MOVIE*)malloc(sizeof(MOVIE));
		fscanf(fp,"%d %s %lf %lf",&stu->number,stu->moviename,&stu->price,&stu->score);
		r->next=stu;
		r=stu;
	}
	r->next=NULL;
	fclose(fp);
	for(r=head,s=head->next;;r=r->next,s=s->next){
		if(r->next->next==NULL){
			r->next=NULL;
			free(s);
			break;
		}
	}
	return head; 
}
void Printf(MOVIE *head)//从内存打印信息 
{
	int i;
	printf("\t\t电影目录:\n\n");
	printf("\t编号\t名称\t\t票价\t评分\n\n");
	for(head=head->next;head!=NULL;head=head->next){
		printf("\t%d\t%s",head->number,head->moviename);
		for(i=84;i<sizeof(head->moviename)-strlen(head->moviename);i++){
			printf(" ");
		}
		printf("%.2lf\t%.1lf\n",head->price,head->score);
	}
	printf("\n");
}
void sum(MOVIE *head)//数据统计 
{
	MOVIE *stu=head->next;
	double pri,sco;
	int num,i,cnt=0;
	printf("\n\n");
	Printf(read());
	printf("\n\t\t电影查询:\n\n");
	printf("\t1-查询票价在??元以下的电影\n");
	printf("\t2-查询票价在??元以下且评分在??分以下的电影\n\n");
	printf("请输入查询内容:");
	scanf("%d",&num);
	switch(num){
		case 1:
			printf("请输入票价限制范围:");
			scanf("%lf",&pri);
			printf("\n");
			printf("\t名称\t\t票价\t评分\n\n");
			for(stu;stu!=NULL;stu=stu->next){
				if(stu->price<=pri){
					printf("\t%s",stu->moviename);
					for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
						printf(" ");
					}
					printf("%.2lf\t%.1lf\n",stu->price,stu->score);
					cnt++;
				}
			}
			printf("\n");
			if(!cnt){
				printf("未找到相关信息!");
			}
			else{
				printf("共找到%d",cnt);
				printf("条内容\n");
			}
			break;
		case 2:
			printf("请输入票价限制范围:");
			scanf("%lf",&pri);
			printf("请输入评分限制条件:");
			scanf("%lf",&sco);
			printf("\n");
			printf("\t名称\t\t票价\t评分\n\n");
			for(stu;stu!=NULL;stu=stu->next){
				if(stu->price<=pri&&stu->score>=sco){
					printf("\t%s",stu->moviename);
					for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
						printf(" ");
					}
					printf("%.2lf\t%.1lf\n",stu->price,stu->score);
					cnt++;
				}
			}
			printf("\n");
			if(!cnt){
				printf("未找到相关信息!");
			}
			else{
				printf("共找到%d",cnt);
				printf("条内容\n");
			}
			break;
	}
}
void sort()//数据排序 
{
	MOVIE *head,*pre,*p,*tail,*stu;
	int num,i;
	head=read();
	tail=NULL;
	printf("\n\t\t\t数据排序\n\n\n");
	printf("\t1-票价由低到高排序\n");
	printf("\t2-评分由高到低排序\n\n") ;
	printf("请输入您想要的排序方式:");
	scanf("%d",&num);
	switch(num){
		case 1:
			while(head->next!=tail){
				pre=head;
				p=head->next;
				while(p->next!=tail){
					if(p->price>p->next->price){
						pre->next=p->next;
						p->next=pre->next->next;
						pre->next->next=p;
					}
					else{
						p=p->next;
					}
					pre=pre->next;
				}
				tail=p;
			}
			printf("\n\t\t名称\t\t票价\t评分\n\n");
			for(stu=head->next;stu!=NULL;stu=stu->next){
				printf("\t\t%s",stu->moviename);
				for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
					printf(" ");
				}
			printf("%.2lf\t%.1lf\n",stu->price,stu->score);
			}
			break;
		case 2:
			while(head->next!=tail){
				pre=head;
				p=head->next;
				while(p->next!=tail){
					if(p->score<p->next->score){
						pre->next=p->next;
						p->next=pre->next->next;
						pre->next->next=p;
					}
					else {
						p=p->next;
					}
					pre=pre->next;
				}
				tail=p;
			}
			printf("\n\t\t名称\t\t票价\t评分\n\n");
			for(stu=head->next;stu!=NULL;stu=stu->next){
				printf("\t\t%s",stu->moviename);
				for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
					printf(" ");
				}
			printf("%.2lf\t%.1lf\n",stu->price,stu->score);
			}
			break;
	}
	printf("\n\t");
}
void serch()
{
	char aa[100];
	int i;
	printf("\n\t\t\t电影查找\n\n\n");
	MOVIE *stu=read();
	printf("请输入您想查找的电影:");
	scanf("%s",aa);
	for(stu=stu->next;stu!=NULL;stu=stu->next){
		if(!strcmp(stu->moviename,aa)){
			printf("\n\t查找到的信息如下:\n\n"); 
			printf("\t编号\t名称\t\t票价\t评分\n\n");
			printf("\t%d\t%s",stu->number,stu->moviename);
			for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
				printf(" ");
			}
			printf("%.2lf\t%.1lf\n\n",stu->price,stu->score);
		}
	}
}

完整代码

//函数声明
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct node//链表节点
{
	int number;
	char moviename[100];
	double price;
	double score;
	struct node *next;
}MOVIE;
void menu();//菜单目录
MOVIE* creat();//创建一个链表,新用户注册使用
void save(MOVIE *head);//将链表信息保存到文件
void modify(MOVIE *head);//修改文件信息
MOVIE* read();//将文件信息读取到链表
void Printf(MOVIE *head);//将信息逐个打印显示
void insert(MOVIE *head);//插入信息
void del(MOVIE *head);//删除信息
void serch();//按名称查询信息
void sort();//信息排序
int log();//登陆与注册
void sum(MOVIE *head);//信息统计


//主函数
int main()
{
	printf("\n\n\n");
	printf("\t\t\t\t----------------------------------------\n\n");
	printf("\t\t\t\t|         欢迎使用影院管理系统         |\n\n");
	printf("\t\t\t\t----------------------------------------\n\n");
	printf("\n\t\t\t\t\t\t请您登陆\n\n\t\t");
	//开始界面
	system("pause");//暂停,给用户缓冲
	if(log()){//如果登陆注册成功就进入程序,否则直接退出程序
		int num;
		MOVIE *head=read();//将文件信息读取到链表
		system("cls");//清屏,以重新选择
		menu();//显示菜单目录
		printf("\n请输入您想要的功能:");
		scanf("%d",&num);//根据输入编号选择功能
		for(;num;){
			switch(num){
				case 1:
					system("cls");//清屏
					Printf(head);//打印信息
					system("pause"); 
					break;
				case 2:
					system("cls");
					insert(head); //插入信息
					break;
				case 3:
					system("cls");
					modify(head);//修改信息
					break;
				case 4:
					system("cls");
					del(head);//删除信息
					break;
				case 5:
					system("cls");
					serch();//按名称查询信息
					system("pause"); 
					break;
				case 6:
					system("cls");
					sort();//信息排序
					system("pause"); 
					break;
				case 7:
					system("cls");
					sum(head);//信息统计
					system("pause"); 
					break;
			}
			system("cls");
			menu();//再次显示菜单,以供再次选择
			printf("\n请输入您想要的功能:");
			scanf("%d",&num);
		}
	}
}

//子函数
int  log()//登陆注册
{
	int num,i;
	char username[10],fusername[10];
	char password[9],password0[9],fpassword[8];
	FILE *fp;
	system("cls");
	printf("\n\t\t登陆\n\n");
	printf("\t1-用户登录\n");
	printf("\t2-注册成为新用户\n");
	printf("\t0-退出程序\n\n");
	printf("请输入您的选择:");
	scanf("%d",&num);
	switch(num){
		case 1:
			printf("\n\t\t   用户登录\n\n");
			printf("请输入您的用户名:");
			scanf("%s",&username);
			printf("请输入您的密码:");
			for(i=0;i<8;i++){//输入8位密码 
				password[i]=getch();//输入不回显 
				if(password[i]==8){//按下退格键 
					printf("\b");
					i=i-2;
				}
				else if(password[i]==9||password[i]==13||password[i]==' '){//按下tab,空格以及回车换行 
					i--;
				}
				else{
					printf("*");//用“*”代替输入 
				}
			}
			password[8]='\0';
			fp=fopen("账号管理.txt","rt");
			for(i=0;i<3;i++){//以三个账号为例,可以fscanf的返回值判断是否读取完毕 
				fscanf(fp,"%s %s",&fusername,&fpassword);//重复读取,并存入同一个变量 
				if(!strcmp(fusername,username)){//判断输入的用户名与文件是否有相同 
					break;
				}
			}//最后结果为用户名相同且i<3,或用户名不同且i=3 
			fclose(fp);
			if(!strcmp(fpassword,password)&&i!=3){//判断用户名与输入的密码是否匹配 
				printf("\n\n\t\t恭喜,登陆成功!\n\n\t");
				system("pause");
				return 1;
			}
			else{
				printf("\n\n\t\t用户名或密码不正确,请重新登陆!\n\n\t ");
				system("pause");//界面停留 
				log();
			}
			break;
		case 2:
			printf("\n\t\t   注册成为新用户\n\n");
			printf("请输入您的用户名:");
			scanf("%s",&username);
			printf("请输入您的密码:");
			for(i=0;i<8;i++){//输入8位密码 
				password[i]=getch();//输入不回显 
				if(password[i]==8){//按下退格键
					printf("\b");
					i=i-2;
				}
				else if(password[i]==9||password[i]==13||password[i]==' '){//按下tab,空格以及回车换行 
					i--;
				}
				else{
					printf("*");//用“*”代替输入 
				}
			}
			password[8]='\0';
			printf("\n请确认您的密码:");
			for(i=0;i<8;i++){//输入8位密码 
				password0[i]=getch();//输入不回显 
				if(password0[i]==8){//按下退格键 
					printf("\b");
					i=i-2;
				}
				else if(password0[i]==9||password0[i]==13||password0[i]==' '){//按下tab,空格以及回车换行 
					i--;
				}
				else{
					printf("*");//用“*”代替输入 
				}
			}
			password0[8]='\0';
			if(!strcmp(password,password0)){//两次的密码是否一致 
				fp=fopen("账号管理.txt","at");
				fprintf(fp,"%s %s\n",username,password);//保存到文件 
				fclose(fp);
				printf("\n\n\t\t已注册,请录入电影信息\n\n");
				system("pause");
				creat();
				return 1;
			}
			else{
				printf("\n\n\t\t两次的密码不一致,请重新登陆!\n\n\t");
				system("pause");
				log();
			}
			break;
	}
}
void menu()//开始界面 
{
	printf("\n\n");
	printf("\t\t\t\t+--------------------------------------+\n");
	printf("\t\t\t\t|         欢迎使用影院管理系统         |\n");
	printf("\t\t\t\t|               您已登录               |\n");
	printf("\t\t\t\t+--------------------------------------+\n");
	printf("\t\t\t\t|                                      |\n");
	printf("\t\t\t\t|              1-影片全览              |\n");
	printf("\t\t\t\t|              2-添加影片              |\n");
	printf("\t\t\t\t|              3-修改信息              |\n");
	printf("\t\t\t\t|              4-删除影片              |\n");
	printf("\t\t\t\t|              5-影片查询              |\n");
	printf("\t\t\t\t|              6-数据排序              |\n");
	printf("\t\t\t\t|              7-数据统计              |\n");
	printf("\t\t\t\t|              0-退出程序              |\n");
	printf("\t\t\t\t|                                      |\n");
	printf("\t\t\t\t+--------------------------------------+\n");
}
MOVIE* creat()//创造录入信息,注册时使用 
{
	MOVIE *head,*r,*s;
	int sign;
	head=(MOVIE*)malloc(sizeof(MOVIE));
	head->next=NULL;
	r=head;
	system("cls");
	printf("\n\n\n\t\t\t电影录入\n\n");
	printf("按0结束输入\n\n");
	printf("请输入电影编号:");
	scanf("%d",&sign);
	while(sign){
		s=(MOVIE*)malloc(sizeof(MOVIE));
		s->number=sign;
		printf("请输入电影名称:");
		scanf("%s",&s->moviename);
		printf("请输入电影票价:");
		scanf("%lf",&s->price);
		if(s->price>100||s->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&s->price);
		}
		printf("请输入电影评分:");
		scanf("%lf",&s->score);
		if(s->score>15||s->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&s->score);
		}
		printf("\n已录入,请继续\n\n");
		printf("请输入电影编号:");
		scanf("%d",&sign);
		r->next=s;
		r=s;
	}
	r->next=NULL;
	save(head);
	return head;
}
void save(MOVIE *head)//保存信息为文件 
{
	MOVIE *stu;
	FILE *fp;
	fp=fopen("电影目录.txt","wt");
	for(stu=head->next;stu!=NULL;stu=stu->next){
		fprintf(fp,"%d %s %lf %lf\n",stu->number,stu->moviename,stu->price,stu->score);
	}
	fclose(fp);
	printf("\n信息已保存,按任意键退出\n");
	getch();
}
void modify(MOVIE *head)//修改信息 
{
	MOVIE *stu;
	stu=head->next;
	int i;
	printf("\n\n");
	Printf(head);
	printf("\n\t请输入需要修改的电影编号:");
	scanf("%d",&i);
	if(i){
		for(i;i-1;i--){
			stu=stu->next;
		}
		printf("请输入修改后的票价:");
		scanf("%lf",&stu->price);
		printf("请输入修改后的评分:");
		scanf("%lf",&stu->score);
		if(stu->price>100||stu->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->price);
		}
		if(stu->score>15||stu->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->score);
		}
		printf("\n\n已成功修改\n");
		save(head);
	}
}
void insert(MOVIE *head)//插入信息 
{
	MOVIE *stu,*s;
	int num;
	stu=(MOVIE*)malloc(sizeof(MOVIE));
	s=head;
	printf("\n\n");
	Printf(head);
	printf("\n您想插入哪一个电影之后?:");
	scanf("%d",&num);
	if(num+1){
		stu->number=num+1;
		printf("\n请输入电影名称:");//
		scanf("%s",&stu->moviename);
		printf("请输入电影票价:");
		scanf("%lf",&stu->price);
		if(stu->price>100||stu->price<15){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->price);
		}
		printf("请输入电影评分:");
		scanf("%lf",&stu->score);
		if(stu->score>15||stu->score<2){
			printf("出错,请重新输入 :");
			scanf("%lf",&stu->score);//用stu保存将添加的信息 
		}
		for(num;num;num--){
			s=s->next;	
		}//找到将插入的节点 
		stu->next=s->next;
		s->next=stu;
		for(stu=stu->next;stu!=NULL;stu=stu->next){
			stu->number++;
		}//将后续的电影编号加一 
		printf("\n已成功插入该电影\n");
		save(head);
	}
}
void del(MOVIE *head)//删除信息 
{
	MOVIE *stu=head,*s;
	int num;
	printf("\n\n");
	Printf(head);
	printf("\t请输入您想删除的电影编号:");
	scanf("%d",&num);
	if(num){
		for(num;num-1;num--){
			stu=stu->next;
		}
		s=stu->next;
		stu->next=s->next;
		free(s);
		for(stu=stu->next;stu!=NULL;stu=stu->next){
			stu->number--;
		}
		printf("\n\n\t已删除该电影\n"); 
	}
	save(head);
}
MOVIE* read()//从文件读取信息到内存 
{
	MOVIE *head,*r,*stu,*s;
	FILE *fp;
	fp=fopen("电影目录.txt","rt");
	head=(MOVIE*)malloc(sizeof(MOVIE));
	head->next=NULL;
	r=head;
	while(!feof(fp)){
		stu=(MOVIE*)malloc(sizeof(MOVIE));
		fscanf(fp,"%d %s %lf %lf",&stu->number,stu->moviename,&stu->price,&stu->score);
		r->next=stu;
		r=stu;
	}
	r->next=NULL;
	fclose(fp);
	for(r=head,s=head->next;;r=r->next,s=s->next){
		if(r->next->next==NULL){
			r->next=NULL;
			free(s);
			break;
		}
	}
	return head; 
}
void Printf(MOVIE *head)//从内存打印信息 
{
	int i;
	printf("\t\t电影目录:\n\n");
	printf("\t编号\t名称\t\t票价\t评分\n\n");
	for(head=head->next;head!=NULL;head=head->next){
		printf("\t%d\t%s",head->number,head->moviename);
		for(i=84;i<sizeof(head->moviename)-strlen(head->moviename);i++){
			printf(" ");
		}
		printf("%.2lf\t%.1lf\n",head->price,head->score);
	}
	printf("\n");
}
void sum(MOVIE *head)//数据统计 
{
	MOVIE *stu=head->next;
	double pri,sco;
	int num,i,cnt=0;
	printf("\n\n");
	Printf(read());
	printf("\n\t\t电影查询:\n\n");
	printf("\t1-查询票价在??元以下的电影\n");
	printf("\t2-查询票价在??元以下且评分在??分以下的电影\n\n");
	printf("请输入查询内容:");
	scanf("%d",&num);
	switch(num){
		case 1:
			printf("请输入票价限制范围:");
			scanf("%lf",&pri);
			printf("\n");
			printf("\t名称\t\t票价\t评分\n\n");
			for(stu;stu!=NULL;stu=stu->next){
				if(stu->price<=pri){
					printf("\t%s",stu->moviename);
					for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
						printf(" ");
					}
					printf("%.2lf\t%.1lf\n",stu->price,stu->score);
					cnt++;
				}
			}
			printf("\n");
			if(!cnt){
				printf("未找到相关信息!");
			}
			else{
				printf("共找到%d",cnt);
				printf("条内容\n");
			}
			break;
		case 2:
			printf("请输入票价限制范围:");
			scanf("%lf",&pri);
			printf("请输入评分限制条件:");
			scanf("%lf",&sco);
			printf("\n");
			printf("\t名称\t\t票价\t评分\n\n");
			for(stu;stu!=NULL;stu=stu->next){
				if(stu->price<=pri&&stu->score>=sco){
					printf("\t%s",stu->moviename);
					for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
						printf(" ");
					}
					printf("%.2lf\t%.1lf\n",stu->price,stu->score);
					cnt++;
				}
			}
			printf("\n");
			if(!cnt){
				printf("未找到相关信息!");
			}
			else{
				printf("共找到%d",cnt);
				printf("条内容\n");
			}
			break;
	}
}
void sort()//数据排序 
{
	MOVIE *head,*pre,*p,*tail,*stu;
	int num,i;
	head=read();
	tail=NULL;
	printf("\n\t\t\t数据排序\n\n\n");
	printf("\t1-票价由低到高排序\n");
	printf("\t2-评分由高到低排序\n\n") ;
	printf("请输入您想要的排序方式:");
	scanf("%d",&num);
	switch(num){
		case 1:
			while(head->next!=tail){
				pre=head;
				p=head->next;
				while(p->next!=tail){
					if(p->price>p->next->price){
						pre->next=p->next;
						p->next=pre->next->next;
						pre->next->next=p;
					}
					else{
						p=p->next;
					}
					pre=pre->next;
				}
				tail=p;
			}
			printf("\n\t\t名称\t\t票价\t评分\n\n");
			for(stu=head->next;stu!=NULL;stu=stu->next){
				printf("\t\t%s",stu->moviename);
				for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
					printf(" ");
				}
			printf("%.2lf\t%.1lf\n",stu->price,stu->score);
			}
			break;
		case 2:
			while(head->next!=tail){
				pre=head;
				p=head->next;
				while(p->next!=tail){
					if(p->score<p->next->score){
						pre->next=p->next;
						p->next=pre->next->next;
						pre->next->next=p;
					}
					else {
						p=p->next;
					}
					pre=pre->next;
				}
				tail=p;
			}
			printf("\n\t\t名称\t\t票价\t评分\n\n");
			for(stu=head->next;stu!=NULL;stu=stu->next){
				printf("\t\t%s",stu->moviename);
				for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
					printf(" ");
				}
			printf("%.2lf\t%.1lf\n",stu->price,stu->score);
			}
			break;
	}
	printf("\n\t");
}
void serch()
{
	char aa[100];
	int i;
	printf("\n\t\t\t电影查找\n\n\n");
	MOVIE *stu=read();
	printf("请输入您想查找的电影:");
	scanf("%s",aa);
	for(stu=stu->next;stu!=NULL;stu=stu->next){
		if(!strcmp(stu->moviename,aa)){
			printf("\n\t查找到的信息如下:\n\n"); 
			printf("\t编号\t名称\t\t票价\t评分\n\n");
			printf("\t%d\t%s",stu->number,stu->moviename);
			for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
				printf(" ");
			}
			printf("%.2lf\t%.1lf\n\n",stu->price,stu->score);
		}
	}
}
  • 17
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值