#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void menu();
struct MOV *input();
void output();
void save();
struct MOV *read();
void search();
void delete();
void change();
void sort();
void insert();
void excel();
void swapint(int *a,int*b);
void swapchar(char *a,char *b);
void swapfloat(float *a,float *b);
void swapdouble(double *a,double *b);
typedef struct MOV
{
char name[100];
float price;
float score;
int amount;
double attendance;
struct MOV *next;
}Linklist;
Linklist* head = NULL;
void save(Linklist *list)
{
Linklist *p;
FILE *fp;
char name[40];
printf("\n请输入要保存的文件名:");
getchar();
gets(name);
if((fp=fopen(name,"w"))==NULL)
{
printf("写文件出错,按任意键退出!");
getchar();
exit(1);
}
for(p=list->next;p!=NULL;p=p->next)
{
fprintf(fp,"%21s\t\t%.1f\t\t%.1f\t\t%d\t\t%.2lf\n",p->name,p->price,p->score,p->amount,p->attendance);
}
printf("\n文件已成功保存,退出成功!\n");
fclose(fp);
}
Linklist *read()
{
Linklist *ghead,*r,*p;
FILE *fp;
char filename[40];
printf("\n请输入要打开的文件名:");
getchar();
gets(filename);
if((fp=fopen(filename,"a+"))==NULL)
{
printf("\n读写文件出错!\n");
return 0;
}
ghead=(Linklist *)malloc(sizeof(Linklist));
ghead->next=NULL;
r=ghead;
while(!feof(fp))
{
p=(Linklist *)malloc(sizeof(Linklist));
fscanf(fp,"%s%f%f%d%lf\n",p->name,&p->price,&p->score,&p->amount,&p->attendance);
r->next=p;
r=p;
}
r->next=NULL;
fclose(fp);
printf("\n文件信息正确读入!按Enter键继续!");
getchar();
return ghead;
}
void menu()
{
printf("\n");
printf("*****************************************************\n");
printf("* 影院信息管理系统 *\n");
printf("*****************************************************\n");
printf("********************系统功能菜单*********************\n");
printf("----------------------- -------------------------\n");
printf("*****************************************************\n");
printf("** 1、影片信息排序 * 2、重新录入影片信息 **\n");
printf("*****************************************************\n");
printf("** 3、查询影片信息 * 4、删除影片信息 **\n");
printf("*****************************************************\n");
printf("** 5、显示电影信息 * 6、修改影片信息 **\n");
printf("*****************************************************\n");
printf("** 7、添加影片信息 * 8、将信息存入报表 **\n");
printf("*****************************************************\n");
printf("** 0、退出系统 * **\n");
printf("*****************************************************\n");
printf("----------------------- -------------------------\n");
}
void swapchar(char *a,char *b)
{
char c[100];
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
}
void swapint(int *a,int *b)
{
int c;
c=*a;
*a=*b;
*b=c;
}
void swapfloat(float *a,float *b)
{
float c;
c=*a;
*a=*b;
*b=c;
}
void swapdouble(double *a,double *b)
{
double c;
c=*a;
*a=*b;
*b=c;
}
void sort(Linklist *list)
{
Linklist *p=NULL,*t=NULL;
int num;
printf("1.按价钱从高到低\n2.按价钱从低到高\n");
printf("请输入菜单编号:\n");
scanf("%d",&num);
switch(num)
{
case 1:
for(p=list->next;p->next;p=p->next)
{
for(t=p->next;t;t=t->next)
{
if(p->price<t->price)
{
swapchar(p->name,t->name);
swapfloat(&p->price,&t->price);
swapfloat(&p->score,&t->score);
swapint(&p->amount,&t->amount);
swapdouble(&p->attendance,&t->attendance);
}
}
}
printf("------排序完成!------\n");
break;
case 2:
for(p=list->next;p->next;p=p->next)
{
for(t=p->next;t;t=t->next)
{
if(p->price>t->price)
{
swapchar(p->name,t->name);
swapfloat(&p->price,&t->price);
swapfloat(&p->score,&t->score);
swapint(&p->amount,&t->amount);
swapdouble(&p->attendance,&t->attendance);
}
}
}
printf("------排序完成!------\n");
break;
default:
printf("---【输入有误!】---\n");
break;
}
}
Linklist * input()
{
int n;
Linklist *head,*end,*node;
head=(Linklist *)malloc(sizeof(Linklist));
end=head;
do
{
node=(Linklist *)malloc(sizeof(Linklist));
printf("*********************************************************\n");
printf("*\t\t欢迎进入电影信息录入界面\t\t*\n");
printf("*********************************************************\n");
printf("*\t\t 输入电影名称 \t\t\t*\n");
printf("\t\t ");
scanf("%s",node->name);
printf("*\t\t 输入电影评分 \t\t\t*\n");
printf("\t\t ");
scanf("%f",&node->score);
printf("*\t\t 输入电影票价 \t\t\t*\n");
printf("\t\t ");
scanf("%f",&node->price);
printf("*\t\t 输入电影每日排片数量 \t\t*\n");
printf("\t\t ");
scanf("%d",&node->amount);
printf("*\t\t 输入电影上座率 \t\t\t*\n");
printf("\t\t ");
scanf("%lf",&node->attendance);
printf("*\t\t---【录入电影信息完成】---\t\t*\n");
printf("*********************************************************\n");
end->next=node;
end=node;
printf("1.继续录入\n2.退出\n");
scanf("%d",&n);
} while (n==1);
end->next=NULL;
return (head);
}
void search(Linklist * p)
{
int flag=0;
int i,j;
int num;
int price;
float score;
char filmname[100];
Linklist *list=p->next;
do{
list=p->next;
printf("***************************************************\n");
printf("*----1.按名称查找------ - -----2.按价钱查找-----*\n");
printf("*----3.按评分查找------ - -----0.退出本菜单-----*\n");
printf("***************************************************\n\n");
printf("请输入菜单编号:\n");
scanf("%d",&num);
switch (num)
{
case 1:
printf("------按名称查找------\n");
printf("请输入电影名称:\n");
scanf("%s",&filmname);
printf("*名称\t\t票价\t上座率\t排片\t评分\t*\n");
while(list!=NULL)
{
if(strcmp(list->name,filmname)==0)
{
printf("*%s\t\t%.1f\t%.2lf\t%d\t%.1f\t*\n",list->name,list->price,list->attendance,list->amount,list->score);
flag=1;
}
list=list->next;
}
if(flag==0)
{
printf("------未找到该影片------\n");
}
break;
case 2:
printf("------按价钱查找------\n");
printf("请输入价格上限:\n");
scanf("%d",&price);
printf("*名称\t\t票价\t上座率\t排片\t评分\t*\n");
while(list)
{
if(list->price <= price)
{
printf("*%s\t\t%.1f\t%.2lf\t%d\t%.1f\t*\n",list->name,list->price,list->attendance,list->amount,list->score);
flag=1;
}
list=list->next;
}
if(flag==0)
{
printf("------未找到该影片------\n");
}
break;
case 3:
printf("------按评分查找------\n");
printf("请输入评分下限:\n");
scanf("%f",&score);
printf("*名称\t\t票价\t上座率\t排片\t评分\t*\n");
while(list)
{
if(list->score>=score)
{
printf("*%s\t\t%.1f\t%.2lf\t%d\t%.1f\t*\n",list->name,list->price,list->attendance,list->amount,list->score);
flag=1;
}
list=list->next;
}
if(flag==0)
{
printf("------未找到该影片------\n");
}
break;
case 0:
printf("------退出------\n");
break;
}
}while(num!=0);
}
void delete(Linklist *list)
{
int n;
char i;
Linklist *p,*p1=list;
p=p1->next;
printf("请输入0进行删除操作:\n");
scanf("%d",&n);
if(n==0)
{
printf("请输入要删除的影片名:\n");
scanf("%s",&i);
while(p!=NULL)
{
if(strcmp(p->name,&i)==0)
{
printf("\n\t\t【以下是你要删除的信息】\t\t\n");
printf("*%s\t\t%.1f\t%.2lf\t%d\t%.1f\t*\n",p->name,p->price,p->attendance,p->amount,p->score);
p1->next=p->next;
free(p);
printf("\n\t\t【已安全删除】\t\t\n");
}
p1=p;
p=p->next;
}
}
else
{
printf("\t\t【非法输入】\t\t");
}
}
void output(Linklist * list)
{
Linklist *p=list->next;
printf("*********************************************************\n");
printf("*\t\t 影院影片列表 \t\t\t*\n");
printf("*********************************************************\n");
while(p)
{
printf("%21s\t%.1f\t%.2lf\t%d\t%.1f\t\n",p->name,p->price,p->attendance,p->amount,p->score);
p=p->next;
}
printf("*********************************************************\n\n");
getchar();
}
void change(Linklist *list)
{
int n,j,flag=0;
char i[40];
Linklist *p=list;
printf("请输入要修改的电影名称:");
scanf("%s",i);
while(p!=NULL)
{
if(strcmp(p->name,i)==0)
{
flag=1;
printf("请输入新票价:");
scanf("%f",&p->price);
printf("---【修改完成】---\n");
}
p=p->next;
}
if(flag==0) printf("---【未找到对应信息】---\n");
}
void insert(Linklist *list)
{
int n;
int i;
Linklist *p=list,*p1;
char filmname[100];
printf("请输入1进行操作:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入要添加的影片名:\n");
scanf("%s",filmname);
do
{
if(strcmp(p->name,filmname)!=0)
{
p1=(Linklist*)malloc(sizeof(Linklist));
printf("*\t\t 输入电影名称 \t\t\t*\n");
printf("\t\t ");
scanf("%s",p1->name);
printf("*\t\t 输入电影评分 \t\t\t*\n");
printf("\t\t ");
scanf("%f",&p1->score);
printf("*\t\t 输入电影票价 \t\t\t*\n");
printf("\t\t ");
scanf("%f",&p1->price);
printf("*\t\t 输入电影每日排片数量 \t\t*\n");
printf("\t\t ");
scanf("%d",&p1->amount);
printf("*\t\t 输入电影上座率 \t\t\t*\n");
printf("\t\t ");
scanf("%lf",&p1->attendance);
printf("*\t\t---【插入电影信息完成】---\t\t*\n");
printf("*********************************************************\n");
p1->next=p->next;
p->next=p1;
printf("1.继续\n2.退出\n");
scanf("%d",&n);
}
p=p->next;
}while(n==1);
break;
default:
printf("---【输入非法!请重新输入】---\n");
break;
}
}
void excel(Linklist *list)
{
save(list);
}
int main()
{
int num,i=5;
Linklist *p=NULL;
char password[]={"20011221"};
char inputword[40];
while(i)
{
printf("请输入管理员密码:");
scanf("%s",inputword);
if(!strcmp(password,inputword))
{
p=read();
do{
menu();
printf("请输入菜单编码:\n");
scanf("%d",&num);
switch(num)
{
case 1:
printf("-----【电影信息排序】-----\n");
sort(p);
break;
case 2:
printf("-----【录入信息】-----\n");
p=input();
break;
case 3:
printf("---【查询电影信息】---\n");
search(p);
break;
case 4:
printf("---【删除电影信息】---\n");
delete(p);
break;
case 5:
printf("---【显示电影信息】---\n");
output(p);
break;
case 6:
printf("---【修改电影信息】---\n");
change(p);
break;
case 7:
printf("---【添加电影信息】---\n");
insert(p);
break;
case 8:
printf("---【存入数据报表】---\n");
excel(p);
break;
case 0:
printf("---【已经安全退出系统】---\n");
break;
default:
printf("---【输入异常!】---\n");
break;
}
}while(num!=0);
save(p);
return 0;
}
else
{
i--;
printf("【输入错误,请重新输入】\n");
}
}
if(i==0)
{
printf("---【系统退出】---\n");
}
return 0;
}