课设影院信息管理系统
课设影院信息管理系统
一.影院具体信息介绍:
1.人员分类:
负责人,管理者,售票者,顾客
2.人员涉及的功能:
负责人:注册管理者和售票者账号信息
管理者:管理影片信息,增删修改
售票者:查询影片信息
顾客:排序票价,查阅电影信息,统计票价信息
二.代码分块功能
调用的函数:
/*页面显示函数*/
void menu();//系统主页面
void menu1();//管理者系统的页面显示
void menu2();//售票人员的页面显示
void menu3();//顾客人员的页面显示
void menu4();//负责人员的页面显示
void ad();
/*用户的登录和注册*/
void Input();//登录注册
int Input_login();//登录
/*文件函数*/
void save(film *head);//文件保存
film *read();//文件读写
/*链表创建增删改查*/
film *creat_Film();//链表的创建
void Delete(film *head);//链表的删除
void add_film(film *head);//链表的添加
void change(film *head);//链表的修改
void output(film *head);//遍历子函数
void output_film();//遍历主函数
/*链表查询*/
void search(film *head);//单项查询子函数,两种查询方式
void search_film();//单项查询主函数
void Search_film();//组合查询
/*链表统计*/
void statistic(film *head);//统计票价
void sort(film *head);//按票价排序
int len(film *head);//求链表长度/*影院不同类型人员函数*/
void charge(); //影院负责人员
void manger();//影院管理人员
void sale_people();//影院售票人员
void buy_people();//顾客人员
主要功能代码块:
1.注册用户信息
//登录注册
void Input()
{system("read"); //暂停 system("cls");users a,b;//结构体 The_users 重命名定义FILE *fp;char temp[20];printf("\t\t\t\t -------------欢迎来到注册界面!-----------------\n");Sleep(1000);printf("\t\t\t\t 请输入用户名:");scanf("\t\t\t\t\t\t\t%s",a.id);printf("\t\t\t\t 请输入密码:");scanf("\t\t\t\t\t\t\t%s",a.pwd);printf("\t\t\t\t 请确认密码:");scanf("\t\t\t\t\t\t\t%s",temp);do{if(!strcmp(a.pwd,temp)){fp = fopen("D:\\user.text","a");fwrite(&a, sizeof(struct The_users), 1, fp);printf("\t\t\t\t 账号注册成功,请登录!\n"); Sleep(500);fclose(fp);system("read"); //暂停 system("cls");return;}else{printf("\t\t\t\t 两次密码不匹配!请重新输入!\n");scanf("\t\t\t\t\t\t%s",a.pwd);printf("\t\t\t\t 请确认密码:\n");scanf("\t\t\t\t\t\t%s",temp);}}while(1);
}
2.用户登录信息:
int Input_login()
{system("read"); system("cls");users a,b;//定义结构体The_users别名FILE *fp;printf("\t\t\t\t ----------- 欢迎来到登录界面! -----------------\n");Sleep(1000);fp = fopen("D:\\user.text","r");fread(&b, sizeof(struct The_users), 1, fp);printf("\t\t\t\t 请输入账号:");scanf("\t\t\t\t\t\t\t\t%s",a.id); while (1){ if (strcmp(a.id, b.id)==0) //如果有此用户名{break; }else {if (!feof(fp)) //如果文件没有读完 {fread(&b, sizeof(struct The_users), 1, fp);}else{printf("\t\t\t\t 此用户名不存在,请重新输入!\n");Sleep(500); fclose(fp); return 0; }}}printf("\t\t\t\t 请输入密码:");scanf("\t\t\t\t\t\t\t\t\t%s",a.pwd); do{ if (strcmp(a.pwd, b.pwd)==0) /*如果密码匹配*/{ fclose(fp);printf("\t\t\t\t 登录成功,欢迎使用!");Sleep(500);return 1;}else { printf("\t\t\t\t 密码不正确!请重新输入密码:");scanf("\t\t\t\t\t\t\t\t%s",&a.pwd); }}while(strcmp(a.pwd, b.pwd)==0);
}
3.文件保存
//文件的保存
void save(film *head)
{film *p;FILE *fp;char str[40];printf("\n\t\t\t\t 请输入要保存的文件名:");scanf("\t\t\t\t\t\t\t\t\t\t\t\t%s",str);if((fp=fopen(str,"wt"))==NULL){printf("\t\t\t\t 写文件出错,按任意键退出!");getchar();exit(1);}for(p=head->next;p!=NULL;p=p->next)// {fprintf(fp,"%s\t%s\t%d\t%.2lf\t ",p->num,p->name,p->money,p->score);}printf("\n\t\t\t\t 文件已成功保存,按任意键返回!\n");getchar();fclose(fp);return;
}
4.文件读写
//文件的读写 film *read()
{film *ghead=NULL,*r=NULL,*p;FILE *fp;char name[40];printf("\n\t\t\t\t 请输入要打开的文件名:");scanf("%s",name);if((fp=fopen(name,"rt"))==NULL){printf("\n\t\t\t\t 写文件出错,按任意键退出!\n");printf("\t\t\t\t 请创建链表\n"); system("read"); return 0;}while(!feof(fp)){p=(film *)malloc(sizeof(film)); //开辟空间 fscanf(fp,"%s\t%s\t%d\t%lf ",p->num,p->name,&p->money,&p->score); if(ghead==NULL){ghead=p;ghead->next=NULL;}else{r->next=p;p->next=NULL;}r=p;}fclose(fp);printf("\n\t\t\t\t 文件信息正确读入,按任意键退出!\n");getchar();return ghead;
}
5.影片信息录入
//录入信息 film *creat_Film(){int n,i;film *head, *node, *end;head=(film*)malloc(sizeof(film)); //开辟空间 ,初始化头指针 end=head;do{node=(film*)malloc(sizeof(film));//每读入一个数,都会创建一个新的空间 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\t\t ");scanf("%s",node->num);printf("\t\t\t\t * 录入电影名称 *\n");printf("\t\t\t\t\t\t ");scanf("%s",node->name); printf("\t\t\t\t * 录入电影票价 *\n");printf("\t\t\t\t\t\t ");scanf("%d",&node->money); printf("\t\t\t\t * 录入电影评价 *\n");printf("\t\t\t\t\t\t ");scanf("%lf",&node->score); printf("\t\t\t\t ---------------【录入电影信息完成】-----------*\n");printf("\t\t\t\t ***********************************************\n");end->next=node; //尾插新节点 end=node; //指向尾结点 printf("\t\t\t\t * 1.是\t2.否 *\n");printf("\t\t\t\t * 请输入是否要录入数据: *\n");printf("\t\t\t\t\t\t ");scanf("%d",&n);}while(n==1);end->next=NULL;//尾节点的指针域指向空 return head;
}
6.影片信息的删除
//删除信息
void Delete(film *head)
{int n;char i[20];film *p,*p1=head;p=p1->next;printf("\t\t\t\t * 请输入 1 进行删除操作:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t * 请输入要删除的编号:");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0) //比较要删除的编号与p所指的编号 {printf("\t\t\t\t * 【以下是你要删除的电影信息】\n\n");printf("\t\t\t\t *%s\t%s\t%d\t%.2lf\t\n",p->num,p->name,p->money,p->score);p1->next=p->next; //将p所指的下一个结点的地址赋值给上一个结点 free(p); //释放空间 printf("\t\t\t\t -----------------【已经安全删除】--------------\n");}p1=p;p=p->next;}break;default:printf("\t\t\t\t ------------【输入非法!请重新输入】------------\n");break;}
}
7.影片信息的添加
//添加电影信息
void add_film(film *head)
{int n;char i[20];film *p=head,*p1;printf("\t\t\t\t * 请输入 1 进行插入操作:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t * 请输入编号(会插入在其后):");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0)//比较要添加处的编号与p所指的编号{p1=(film*)malloc(sizeof(film)); //开辟空间 printf("\t\t\t\t * 输入电影编号 *\n");printf("\t\t\t\t\t\t ");scanf("%s",p1->num);printf("\t\t\t\t * 录入电影名称 *\n");printf("\t\t\t\t\t\t ");scanf("%s",p1->name); printf("\t\t\t\t * 录入电影票价 *\n");printf("\t\t\t\t\t\t ");scanf("%d",&p1->money); printf("\t\t\t\t * 录入电影评价 *\n");printf("\t\t\t\t\t\t ");scanf("%lf",&p1->score);printf("\t\t\t\t *添加电影信息完成 *\n");p1->next=p->next;//将p点的下一个结点的地址赋值给新建的结点的next p->next=p1;//将新节点的地址值赋值给p点所指的next }p=p->next;}break;default:printf("\t\t\t\t ---------【输入非法!请重新输入】--------------\n");break;}
}
8.影片信息的修改
//修改电影信息void change(film *head)
{int n,j;film *p;char i[20];printf("\t\t\t\t 1.编号\t2.票价\n");printf("\t\t\t\t 请输入你要修改的项目:");scanf("%d",&n);switch(n){case 1:p=head;printf("\t\t\t\t 请输入要修改的编号:");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0)//比较读入的编号与想要修改的编号 {printf("\t\t\t\t 输入想修改为的编号:");scanf("%s",p->num);printf("\t\t\t\t ------------【修改完成】----------------------\n");}p=p->next;}break;case 2:p=head;printf("\t\t\t\t 请输入要修改的编号:");scanf("%s",&i);printf("\t\t\t\t 请输入要修改的票价:");scanf("%d",&j);while(p!=NULL){if(p->money==j&&strcmp(p->num,i)==0)//比较想要修改的价格和修改的编号是否一致 {printf("\t\t\t\t 输入想修改为的票价是:");scanf("%d",&p->money);printf("\t\t\t\t ------------【修改完成】----------------------\n");}p=p->next;}break;}
}
9.链表的遍历输出
void output(film *head)
{film *p=head;//system("clear");printf("\t\t\t\t *********************************************************\n");printf("\t\t\t\t *\t\t 影院影片列表 \t\t\t*\n");printf("\t\t\t\t ********************************************************\n");printf("\t\t\t\t *编号\t名称\t票价\t评价\t*\n");while(p!=NULL) //遍历链表 {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->ame,p->money,p->score);p=p->next;//每次指向下一个 }printf("\t\t\t\t *********************************************************\n\n");
}
void output_film()
{film *q;q=read();//打开文件,读出所储存的数据,重新创建一个链表并返回头指针 output(q);printf("\t\t\t\t ------------------【影片遍历完成】-----------------------\n");
}
10.链表信息单项查询
//单项查询
void search(film *head)
{int n,j,flag=0;char i[40];film *p=head;printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");printf("\t\t\t\t 请输入你要查询的项目:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t 请输入编号:");scanf("%s",i);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->num,i)==0) {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);}p=p->next;}break;case 2:printf("\t\t\t\t 请输入名称:");scanf("\t\t\t\t\t\t%s",&i);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->name,i)==0){printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);flag=1;}p=p->next;}if(flag==0)printf("\t\t\t\t *输入信息错误*\n");break;}
}
11.信息组合查询
//组合查询主函数
void search_film(){film *q;q=read();search(q);printf("\t\t\t\t ----------------【定向查询完成】------------------\n");} //组合查询 void Search_film() {film *p;int flag=0;p=read();char i[100],a[100];printf("\t\t\t\t 请输入编号:");scanf("%s",i);printf("\n\t\t\t\t 请输入名称:");scanf("%s",a);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->name,a)==0&&strcmp(p->num,i)==0){printf("*\t\t\t\t\t\t%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);flag=1;}p=p->next;}if(flag==0)printf("\t\t\t\t *输入信息错误*\n");}
12.链表信息统计
//统计
void statistic(film *head)
{int count1=0,count2=0,n;film *p;printf("\t\t\t\t 1.票价50元以下\t2.票价票价50元以下,评分5.0以上\n");printf("\t\t\t\t 请选择统计方式:");scanf("%d",&n);switch(n){case 1:p=head;while(p!=NULL){if(p->money<50)count1++; p=p->next;}printf("\t\t\t\t 票价50元一下的有%d种\n",count1);break;case 2:p=head;while(p!=NULL){if(p->money<50&&p->score>5.0)count2++;p=p->next;}printf("\t\t\t\t 票价50元一下的,评分5.0以上的有%d种\n",count2);break;default :printf("\t\t\t\t 输入类型错误,结束\n");break; }
}
13.链表排序
//求链表长度
int len(film *head)
{film *p;int i;p=head->next;for(i=1;p!=NULL;i++)//当p不为NULL时,i++ {p=p->next;}return i;//返回链表的长度
}
//链表的排序
void sort(film *head) //采用了冒泡排序
{int n,j,h,ii,num;char i;film *p,*q,*head1;head1 = (film *)malloc(sizeof(film));//初始化头指针,创建头节点 head1->next = head;num=len(head1);//接收链表的长度printf("\t\t\t\t 1.票价从低向高\t2.票价从高到低\n");printf("\t\t\t\t 请选择排序方式:");scanf("%d",&n);switch(n){case 1: for(ii=0;ii<num-1;ii++){p=head1;//p指向头结点 q=head1->next;//q指向首节点 while(q->next!=NULL)//循环进行的条件 {if( q->money > q->next->money ) //当q所指的money大于q所指的下一个节点的money时,进入 {p->next = q->next;//将q所指的下一个节点的地址值赋值给p所指的next q->next = q->next->next;//将q所指的节点的下一个节点赋值给q所指的next p->next->next = q;//重新链接两个交换的节点 q=p->next;//重新让p指向q的相邻节点 }q=q->next;p=p->next;//q与p均向后移动 }}printf("\t\t\t\t --------------【排序已经完成】--------------\n");p=head1->next;//p指向首节点 while(p!=NULL)//对排序好的链表进行遍历 {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);p=p->next;//p向后移动 }break;case 2:for(ii=0;ii<num-1;ii++){p=head1;q=head1->next;while(q->next!=NULL){if(q->money < q->next->money){p->next=q->next;q->next=q->next->next;p->next->next=q;q=p->next;//printf("%d %d\n",q->money,p->money);}q=q->next;p=p->next;}}printf("\t\t\t\t --------------【排序已经完成】--------------\n");p=head1->next;while(p!=NULL){printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);p=p->next;}break;default:printf("\t\t\t\t --------【输入异常!!!请重新输入】-------\n");break;}
}
三.课设总代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>//定义电影院信息结构
typedef struct Film{char num[20];char name[20];int money;double score;struct Film *next;}film;//定义登录人员信息
typedef struct The_users
{char id[11]; char pwd[20];
}users;/*页面显示函数*/
void menu();//系统主页面
void menu1();//管理者系统的页面显示
void menu2();//售票人员的页面显示
void menu3();//顾客人员的页面显示
void menu4();//负责人员的页面显示
void ad();
/*用户的登录和注册*/
void Input();//登录注册
int Input_login();//登录
/*文件函数*/
void save(film *head);//文件保存
film *read();//文件读写
/*链表创建增删改查*/
film *creat_Film();//链表的创建
void Delete(film *head);//链表的删除
void add_film(film *head);//链表的添加
void change(film *head);//链表的修改
void output(film *head);//遍历子函数
void output_film();//遍历主函数
/*链表查询*/
void search(film *head);//单项查询子函数,两种查询方式
void search_film();//单项查询主函数
void Search_film();//组合查询
/*链表统计*/
void statistic(film *head);//统计票价
void sort(film *head);//按票价排序
int len(film *head);//求链表长度/*影院不同类型人员函数*/
void charge(); //影院负责人员
void manger();//影院管理人员
void sale_people();//影院售票人员
void buy_people();//顾客人员 void menu()
{printf("\t\t\t\t ***********************************************\n");printf("\t\t\t\t ***************欢迎来到XX影院****************\n");printf("\t\t\t\t ******************您是*************************\n");printf("\t\t\t\t ***********************************************\n");printf("\t\t\t\t ******** 1.影院负责人@_@ ***************\n");printf("\n");printf("\t\t\t\t ******* 2.影院管理人员@_@ ***************\n");printf("\n");printf("\t\t\t\t ******* 3.影院售票人员@_@ ***************\n");printf("\n"); printf("\t\t\t\t ******* 4.顾客@_@ ***************\n");printf("\n");printf("\t\t\t\t ******* 5.影院宣传 ***************\n");printf("\n");printf("\t\t\t\t 选择你的类型:");
}
void menu1()
{printf("\t\t\t\t ********************************************\n");printf("\n");printf("\t\t\t\t ********* 欢迎来到管理页面 ************\n");printf("\n");printf("\t\t\t\t ******** 1.录入电影信息@_@ ************\n");printf("\n");printf("\t\t\t\t ******** 2.修改电影信息@_@ ************\n");printf("\n");printf("\t\t\t\t ******** 3.删除电影信息@_@ ************\n");printf("\n"); printf("\t\t\t\t ******** 4.添加电影信息@_@ ************\n");printf("\n");printf("\t\t\t\t ******** 0.退出当前界面 ************\n");printf("\n");printf("\t\t\t\t 选择你的类型:");
}
void menu2()
{printf("\n\t\t\t\t ***************************************************\n");printf("\n");printf("\t\t\t\t ******** 欢迎来到售卖页面 ***********\n");printf("\n"); printf("\t\t\t\t ******** 1.单项查询某部电影信息@_@ ***********\n");printf("\n");printf("\t\t\t\t ******** 2.组合查询某部电影信息@_@ ***********\n");printf("\n");printf("\t\t\t\t ******* 3.查阅所有电影信息@_@ ***********\n");printf("\n");printf("\t\t\t\t ******* 0.退出当前界面@_@ ***********\n");printf("\n");printf("\t\t\t\t 选择你的类型:");
}
void menu3()
{printf("\t\t\t\t ************************************************\n");printf("\n");printf("\t\t\t\t *************顾客你好,欢迎来到青柠影院*********\n");printf("\t\t\t\t ******气势恢宏的视听效果,给你真的尊贵体验*****\n");printf("\n");printf("\t\t\t\t ******** 1.将票价排序 ***********\n");printf("\n");printf("\t\t\t\t ******* 2.查阅所有电影信息@_@ ***********\n");printf("\n");printf("\t\t\t\t ******* 3.统计票价信息@_@ ***********\n");printf("\n");printf("\t\t\t\t ******* 0.退出当前界面@_@ ***********\n");printf("\n");printf("\t\t\t\t 选择你的类型:");
}
void menu4()
{printf("\t\t\t\t *************************************************\n");printf("\n");printf("\t\t\t\t *************欢迎来到管理高层页面****************\n");printf("\n");printf("\t\t\t\t ******** 1.增加管理人员 ********************\n");printf("\n");printf("\t\t\t\t ******* 2.增加售票人员 ********************\n");printf("\n");printf("\t\t\t\t ******* 0.退出当前界面 ********************\n");printf("\n");printf("\t\t\t\t 选择你的类型:");
}
void ad()
{Sleep(1); printf("\t\t\t\t ******** 在我的心里 ***********\n");Sleep(1);printf("\t\t\t\t ******** 其实一直有座电影院 ***********\n");Sleep(1);printf("\t\t\t\t ******** 放映着我的心情 我的梦 我的渴望 ***********\n");Sleep(1);printf("\t\t\t\t ******** 有的是我的亲人 ***********\n");Sleep(1);printf("\t\t\t\t ******** 我的朋友 ***********\n");Sleep(1);printf("\t\t\t\t ******** 或者陌生人 ***********\n");Sleep(1);printf("\t\t\t\t ******** 拥有入场卷的人 ***********\n");Sleep(1);printf("\t\t\t\t ******** 有的是我的亲人 ***********\n");Sleep(1);printf("\t\t\t\t ******** 我的朋友 ***********\n");Sleep(1);printf("\t\t\t\t ******** 或者陌生人 ***********\n");Sleep(1);printf("\t\t\t\t ******** 他们纷纷穿梭在我的人生里,来了又去 ***********\n");Sleep(1);printf("\t\t\t\t ******** 而第一个入场的爱人,去没想到会是你 ***********\n");Sleep(1);printf("\t\t\t\t ******** 就像许多电影预告片 ***********\n");Sleep(1);printf("\t\t\t\t ******** 有时看了反而不精彩 ***********\n");Sleep(1);printf("\t\t\t\t ******** 也许我们都走过许多相同的地方...... ***********\n");Sleep(1);printf("\t\t\t\t ******** 看过很多相同的风景...... ***********\n");Sleep(1);printf("\t\t\t\t ******** 遇见过很多相同的陌路人...... ***********\n");Sleep(1);printf("\t\t\t\t ******** 然后再某个不经意的瞬间, ***********\n");Sleep(1);printf("\t\t\t\t ******** 我遇见了你 ***********\n");Sleep(1);printf("\t\t\t\t ******** 于是我想 ***********\n");Sleep(1);printf("\t\t\t\t ******** 一切那么的突然 ***********\n");Sleep(1);printf("\t\t\t\t ******** 突然到像是上天的安排 ***********\n");Sleep(1);printf("\t\t\t\t ******** 令人感到无限的惊喜 ***********\n");Sleep(1);printf("\t\t\t\t ******** 邂逅该是多么美丽的语言啊 ***********\n");Sleep(1);printf("\t\t\t\t ******** 幸福一直静静的存在那里 ***********\n");Sleep(1);printf("\t\t\t\t ******** 以甜美的莫名的悸动召唤着 ***********\n");Sleep(1);printf("\t\t\t\t ******** 等待着我 ***********\n");Sleep(1);printf("\t\t\t\t ******** 我知道终有一天 ***********\n");Sleep(1);printf("\t\t\t\t ******** 抬起手我就能够触碰到它 ***********\n");Sleep(1);printf("\t\t\t\t ******** 亲爱的 ***********\n");Sleep(1);printf("\t\t\t\t ******** 无论是曾经 ***********\n");Sleep(1);printf("\t\t\t\t ******** 现在还是将来 ***********\n");Sleep(1);printf("\t\t\t\t ******** 在我都会是你生活的基石 ***********\n");Sleep(1);printf("\t\t\t\t ******** 是你最坚强的后盾 ***********\n");Sleep(1);printf("\t\t\t\t ******** 你是美好的未来 ***********\n");Sleep(1);printf("\t\t\t\t ******** 我会给你无尽的希望 ***********\n");Sleep(10000);
}//登录注册
void Input()
{system("read"); //暂停 system("cls");users a,b;//结构体 The_users 重命名定义FILE *fp;char temp[20];printf("\t\t\t\t -------------欢迎来到注册界面!-----------------\n");Sleep(1000);printf("\t\t\t\t 请输入用户名:");scanf("\t\t\t\t\t\t\t%s",a.id);printf("\t\t\t\t 请输入密码:");scanf("\t\t\t\t\t\t\t%s",a.pwd);printf("\t\t\t\t 请确认密码:");scanf("\t\t\t\t\t\t\t%s",temp);do{if(!strcmp(a.pwd,temp)){fp = fopen("D:\\user.text","a");fwrite(&a, sizeof(struct The_users), 1, fp);printf("\t\t\t\t 账号注册成功,请登录!\n"); Sleep(500);fclose(fp);system("read"); //暂停 system("cls");return;}else{printf("\t\t\t\t 两次密码不匹配!请重新输入!\n");scanf("\t\t\t\t\t\t%s",a.pwd);printf("\t\t\t\t 请确认密码:\n");scanf("\t\t\t\t\t\t%s",temp);}}while(1);
}/*登录系统*/
int Input_login()
{system("read"); system("cls");users a,b;//定义结构体The_users别名FILE *fp;printf("\t\t\t\t ----------- 欢迎来到登录界面! -----------------\n");Sleep(1000);fp = fopen("D:\\user.text","r");fread(&b, sizeof(struct The_users), 1, fp);printf("\t\t\t\t 请输入账号:");scanf("\t\t\t\t\t\t\t\t%s",a.id); while (1){ if (strcmp(a.id, b.id)==0) //如果有此用户名{break; }else {if (!feof(fp)) //如果文件没有读完 {fread(&b, sizeof(struct The_users), 1, fp);}else{printf("\t\t\t\t 此用户名不存在,请重新输入!\n");Sleep(500); fclose(fp); return 0; }}}printf("\t\t\t\t 请输入密码:");scanf("\t\t\t\t\t\t\t\t\t%s",a.pwd); do{ if (strcmp(a.pwd, b.pwd)==0) /*如果密码匹配*/{ fclose(fp);printf("\t\t\t\t 登录成功,欢迎使用!");Sleep(500);return 1;}else { printf("\t\t\t\t 密码不正确!请重新输入密码:");scanf("\t\t\t\t\t\t\t\t%s",&a.pwd); }}while(strcmp(a.pwd, b.pwd)==0);
}//文件的保存
void save(film *head)
{film *p;FILE *fp;char str[40];printf("\n\t\t\t\t 请输入要保存的文件名:");scanf("\t\t\t\t\t\t\t\t\t\t\t\t%s",str);if((fp=fopen(str,"wt"))==NULL){printf("\t\t\t\t 写文件出错,按任意键退出!");getchar();exit(1);}for(p=head->next;p!=NULL;p=p->next)// {fprintf(fp,"%s\t%s\t%d\t%.2lf\t ",p->num,p->name,p->money,p->score);}printf("\n\t\t\t\t 文件已成功保存,按任意键返回!\n");getchar();fclose(fp);return;
}//文件的读写 film *read()
{film *ghead=NULL,*r=NULL,*p;FILE *fp;char name[40];printf("\n\t\t\t\t 请输入要打开的文件名:");scanf("%s",name);if((fp=fopen(name,"rt"))==NULL){printf("\n\t\t\t\t 写文件出错,按任意键退出!\n");printf("\t\t\t\t 请创建链表\n"); system("read"); return 0;}while(!feof(fp)){p=(film *)malloc(sizeof(film)); //开辟空间 fscanf(fp,"%s\t%s\t%d\t%lf ",p->num,p->name,&p->money,&p->score); if(ghead==NULL){ghead=p;ghead->next=NULL;}else{r->next=p;p->next=NULL;}r=p;}fclose(fp);printf("\n\t\t\t\t 文件信息正确读入,按任意键退出!\n");getchar();return ghead;
}//录入信息 film *creat_Film(){int n,i;film *head, *node, *end;head=(film*)malloc(sizeof(film)); //开辟空间 ,初始化头指针 end=head;do{node=(film*)malloc(sizeof(film));//每读入一个数,都会创建一个新的空间 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\t\t ");scanf("%s",node->num);printf("\t\t\t\t * 录入电影名称 *\n");printf("\t\t\t\t\t\t ");scanf("%s",node->name); printf("\t\t\t\t * 录入电影票价 *\n");printf("\t\t\t\t\t\t ");scanf("%d",&node->money); printf("\t\t\t\t * 录入电影评价 *\n");printf("\t\t\t\t\t\t ");scanf("%lf",&node->score); printf("\t\t\t\t ---------------【录入电影信息完成】-----------*\n");printf("\t\t\t\t ***********************************************\n");end->next=node; //尾插新节点 end=node; //指向尾结点 printf("\t\t\t\t * 1.是\t2.否 *\n");printf("\t\t\t\t * 请输入是否要录入数据: *\n");printf("\t\t\t\t\t\t ");scanf("%d",&n);}while(n==1);end->next=NULL;//尾节点的指针域指向空 return head;
}//删除信息
void Delete(film *head)
{int n;char i[20];film *p,*p1=head;p=p1->next;printf("\t\t\t\t * 请输入 1 进行删除操作:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t * 请输入要删除的编号:");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0) //比较要删除的编号与p所指的编号 {printf("\t\t\t\t * 【以下是你要删除的电影信息】\n\n");printf("\t\t\t\t *%s\t%s\t%d\t%.2lf\t\n",p->num,p->name,p->money,p->score);p1->next=p->next; //将p所指的下一个结点的地址赋值给上一个结点 free(p); //释放空间 printf("\t\t\t\t -----------------【已经安全删除】--------------\n");}p1=p;p=p->next;}break;default:printf("\t\t\t\t ------------【输入非法!请重新输入】------------\n");break;}
}
//添加电影信息
void add_film(film *head)
{int n;char i[20];film *p=head,*p1;printf("\t\t\t\t * 请输入 1 进行插入操作:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t * 请输入编号(会插入在其后):");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0)//比较要添加处的编号与p所指的编号{p1=(film*)malloc(sizeof(film)); //开辟空间 printf("\t\t\t\t * 输入电影编号 *\n");printf("\t\t\t\t\t\t ");scanf("%s",p1->num);printf("\t\t\t\t * 录入电影名称 *\n");printf("\t\t\t\t\t\t ");scanf("%s",p1->name); printf("\t\t\t\t * 录入电影票价 *\n");printf("\t\t\t\t\t\t ");scanf("%d",&p1->money); printf("\t\t\t\t * 录入电影评价 *\n");printf("\t\t\t\t\t\t ");scanf("%lf",&p1->score);printf("\t\t\t\t *添加电影信息完成 *\n");p1->next=p->next;//将p点的下一个结点的地址赋值给新建的结点的next p->next=p1;//将新节点的地址值赋值给p点所指的next }p=p->next;}break;default:printf("\t\t\t\t ---------【输入非法!请重新输入】--------------\n");break;}
}//修改电影信息void change(film *head)
{int n,j;film *p;char i[20];printf("\t\t\t\t 1.编号\t2.票价\n");printf("\t\t\t\t 请输入你要修改的项目:");scanf("%d",&n);switch(n){case 1:p=head;printf("\t\t\t\t 请输入要修改的编号:");scanf("%s",i);while(p!=NULL){if(strcmp(p->num,i)==0)//比较读入的编号与想要修改的编号 {printf("\t\t\t\t 输入想修改为的编号:");scanf("%s",p->num);printf("\t\t\t\t ------------【修改完成】----------------------\n");}p=p->next;}break;case 2:p=head;printf("\t\t\t\t 请输入要修改的编号:");scanf("%s",&i);printf("\t\t\t\t 请输入要修改的票价:");scanf("%d",&j);while(p!=NULL){if(p->money==j&&strcmp(p->num,i)==0)//比较想要修改的价格和修改的编号是否一致 {printf("\t\t\t\t 输入想修改为的票价是:");scanf("%d",&p->money);printf("\t\t\t\t ------------【修改完成】----------------------\n");}p=p->next;}break;}
}//链表输出 void output(film *head)
{film *p=head;//system("clear");printf("\t\t\t\t *********************************************************\n");printf("\t\t\t\t *\t\t 影院影片列表 \t\t\t*\n");printf("\t\t\t\t ********************************************************\n");printf("\t\t\t\t *编号\t名称\t票价\t评价\t*\n");while(p!=NULL) //遍历链表 {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);p=p->next;//每次指向下一个 }printf("\t\t\t\t *********************************************************\n\n");
}//链表的遍历
void output_film()
{film *q;q=read();//打开文件,读出所储存的数据,重新创建一个链表并返回头指针 output(q);printf("\t\t\t\t ------------------【影片遍历完成】-----------------------\n");
}//单项查询
void search(film *head)
{int n,j,flag=0;char i[40];film *p=head;printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");printf("\t\t\t\t 请输入你要查询的项目:");scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t 请输入编号:");scanf("%s",i);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->num,i)==0) {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);}p=p->next;}break;case 2:printf("\t\t\t\t 请输入名称:");scanf("\t\t\t\t\t\t%s",&i);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->name,i)==0){printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);flag=1;}p=p->next;}if(flag==0)printf("\t\t\t\t *输入信息错误*\n");break;}
}//组合查询主函数
void search_film(){film *q;q=read();search(q);printf("\t\t\t\t ----------------【定向查询完成】------------------\n");} //组合查询 void Search_film() {film *p;int flag=0;p=read();char i[100],a[100];printf("\t\t\t\t 请输入编号:");scanf("%s",i);printf("\n\t\t\t\t 请输入名称:");scanf("%s",a);printf("\t\t\t\t 1.编号\t2.名称\t3.票价\t4.评价\t\n");while(p!=NULL){if(strcmp(p->name,a)==0&&strcmp(p->num,i)==0){printf("*\t\t\t\t\t\t%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);flag=1;}p=p->next;}if(flag==0)printf("\t\t\t\t *输入信息错误*\n");}//统计
void statistic(film *head)
{int count1=0,count2=0,n;film *p;printf("\t\t\t\t 1.票价50元以下\t2.票价票价50元以下,评分5.0以上\n");printf("\t\t\t\t 请选择统计方式:");scanf("%d",&n);switch(n){case 1:p=head;while(p!=NULL){if(p->money<50)count1++; p=p->next;}printf("\t\t\t\t 票价50元一下的有%d种\n",count1);break;case 2:p=head;while(p!=NULL){if(p->money<50&&p->score>5.0)count2++;p=p->next;}printf("\t\t\t\t 票价50元一下的,评分5.0以上的有%d种\n",count2);break;default :printf("\t\t\t\t 输入类型错误,结束\n");break; }
}//求链表长度
int len(film *head)
{film *p;int i;p=head->next;for(i=1;p!=NULL;i++)//当p不为NULL时,i++ {p=p->next;}return i;//返回链表的长度
}
//链表的排序
void sort(film *head) //采用了冒泡排序
{int n,j,h,ii,num;char i;film *p,*q,*head1;head1 = (film *)malloc(sizeof(film));//初始化头指针,创建头节点 head1->next = head;num=len(head1);//接收链表的长度printf("\t\t\t\t 1.票价从低向高\t2.票价从高到低\n");printf("\t\t\t\t 请选择排序方式:");scanf("%d",&n);switch(n){case 1: for(ii=0;ii<num-1;ii++){p=head1;//p指向头结点 q=head1->next;//q指向首节点 while(q->next!=NULL)//循环进行的条件 {if( q->money > q->next->money ) //当q所指的money大于q所指的下一个节点的money时,进入 {p->next = q->next;//将q所指的下一个节点的地址值赋值给p所指的next q->next = q->next->next;//将q所指的节点的下一个节点赋值给q所指的next p->next->next = q;//重新链接两个交换的节点 q=p->next;//重新让p指向q的相邻节点 }q=q->next;p=p->next;//q与p均向后移动 }}printf("\t\t\t\t --------------【排序已经完成】--------------\n");p=head1->next;//p指向首节点 while(p!=NULL)//对排序好的链表进行遍历 {printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);p=p->next;//p向后移动 }break;case 2:for(ii=0;ii<num-1;ii++){p=head1;q=head1->next;while(q->next!=NULL){if(q->money < q->next->money){p->next=q->next;q->next=q->next->next;p->next->next=q;q=p->next;//printf("%d %d\n",q->money,p->money);}q=q->next;p=p->next;}}printf("\t\t\t\t --------------【排序已经完成】--------------\n");p=head1->next;while(p!=NULL){printf("\t\t\t\t *%s\t%s\t%d\t%lf\t*\n",p->num,p->name,p->money,p->score);p=p->next;}break;default:printf("\t\t\t\t --------【输入异常!!!请重新输入】-------\n");break;}
}//负责人员主页面
void charge()
{system("read"); //暂停 system("cls"); char temp[20],c;int count = 0,n;printf("\t\t\t\t 输入除0以外任意键,程序开始运行:");scanf("\t\t\t\t\t\t%c",&c);while(c!='0'){menu4();scanf("\t\t\t\t\t\t%d",&n);switch (n){case 1:Input();break;case 2:Input();break;case 0:break;default :printf("输入异常,请重新输入\n");break;}if(n==0)break;}return;
} void manger()
{system("read"); //暂停 system("cls"); int i=5,n,count;film *p1=NULL;while(1){count=Input_login();if(count==1) //字符串的比较,在查询功能中起到了作用 {system("cls"); //清屏,没有这个会重复出现目录界面 do{menu1(); //菜单函数 scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t --------------【信息的录入】----------------\n");p1=creat_Film();break; case 2:printf("\t\t\t\t --------------【修改电影信息】--------------\n");change(p1);break;case 3:printf("\t\t\t\t --------------【删除电影信息】--------------\n");Delete(p1);break;case 4:printf("\t\t\t\t --------------【添加电影信息】---------------\n");add_film(p1); break;case 0:printf("\t\t\t\t -----------------结束------------------------\n");break; default:printf("\t\t\t\t --------【输入异常!!!请重新输入】---------\n");break; }}while(n!=0); save(p1); return; }else{i--;printf("\t\t\t\t 【输入错误】\n\t\t\t\t 【剩余输入次数为%d】\n",i);}}if(i==0){printf("\t\t\t\t ---------------【系统退出】------------------"); }
} //售卖人员主函数
void sale_people()
{system("read"); //暂停 system("cls"); int i=5,n;int count=0;while(1){count=Input_login();if(count==1) //字符串的比较,在查询功能中起到了作用 {//system("cls"); //清屏,没有这个会重复出现目录界面 do{menu2(); //菜单函数 scanf("%d",&n);switch(n){case 1:printf("\t\t\t\t --------【单项查询某部电影的信息】------------\n");search_film();break;case 2:printf("\t\t\t\t --------【组合查询某部电影的信息】------------\n");Search_film();break; case 3:printf("\t\t\t\t --------【浏览所有电影信息】-----------------\n");output_film();break;case 0:printf("\t\t\t\t --------------------结束---------------------\n"); break; default:printf("\t\t\t\t -------【输入异常!!!请重新输入】----------\n");break; }}while(n!=0); return; }else{i--;printf("\t\t\t\t 【输入错误】\n\t\t\t\t 【剩余输入次数为%d】\n",i);}}if(i==0){printf("\t\t\t\t ---------------【系统退出】---------------------"); }return; } //顾客主函数
void buy_people(){system("read"); //暂停 system("cls"); int n,num; printf("\t\t\t\t 请输入任意一个除零以外的数:"); scanf("%d",&n);while(n!=0){menu3(); scanf("%d",&num); switch (num){case 1:sort(read()); break;case 2:printf("\t\t\t\t --------【浏览所有电影信息】-----------------\n");output_film();break;case 3:printf("\t\t\t\t --------【统计电影票】-----------------------\n");statistic(read()); break;case 0: printf("\t\t\t\t ----------------【结束】----------------------\n");break;default:printf("\t\t\t\t 输入情况不存在");break; }if(num==0)break;}return;}
int main()
{system("color 3E");int n;while(1){menu();scanf("\t\t\t\t %d",&n);switch (n){case 1:charge();break;case 2:manger();break;case 3:sale_people();break;case 4:buy_people();break;case 5:ad();break;case 0:break;default :printf("\t\t\t\t ************输入异常,请重新输入*******************\n");break; }system("read"); //暂停 system("cls"); //清屏,没有这个会重复出现目录界面 if(n==0)break;}return 0;
}
四.注意事项:
1.课设代码运行,由于管理者不同的功能函数调用之间传递的是头指针,当退出管理页面的时候,才会调用文件保存,一次性保存之后,如果再次调用管理者则之前保存的会被重写。
2.影院还有一个额外的功能,宣传广告
3.附一张函数调用图
课设影院信息管理系统相关推荐
- 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc
学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...
- C++课设-学生信息管理系统
前言:上学期的一个简单的C++课设项目(代码在后面,附github项目链接) 一.问题描述: 建立学生信息数据,包括学号.姓名.性别.三科成绩.出生时间.年龄(必须计算得到). 使用继承的方法构造至少 ...
- C语言课设图书信息管理系统(大作业)
一.设计功能(文章仅供参考) 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)系统以菜单方式工作 (2)图书信息录入功能( ...
- C语言课设职工信息管理系统(大作业)
一.设计功能(文章仅供参考) 职工信息包括:工号,姓名,性别,出生年月,婚姻状况,职称,家庭地址,电话,E-mail等. 设计一个职工信息管理系统,使之能提供以下功能: (1)职工信息录入功能(学生信 ...
- C语言课设——图书信息管理系统
其实这个题目要实现的功能比较清晰,主要就是文件和链表的操作以及基于这两个基础上的填删改查等功能,当然也可以添加一些个性化的功能,比如按照图书的检索量来对库存的图书进行热度的排序. 以下是我的这个图书管 ...
- java课设 学生信息管理系统
一.软件环境及开发工具 Windows10 eclipse sqlite 二.课程设计功能要求 1.添加学生功能:姓名.学号.性别.出生年月日.(注意:学号自动生成,学号必须唯一) 2.添加学生成绩功 ...
- C语言课设物资管理系统,C语言课设之物资管理系统.doc
C语言课设之物资管理系统 C语言课程设计 目 录 1.需求分析: 2.系统总框图: 3.每个模块的设计分析: 4.列出所有定义的函数及说明: 5.举例说明1.2个比较有特点的算法: 6.数据分析.完备 ...
- 日程信息管理系统设计与实现C 语言论文,C课设个人日程管理系统.docx
C课设个人日程管理系统 可视化程序设计 大作业 班 级: 学 号: 姓 名: 指导教师: 计算机与通信工程学院 2018.01 1. 任务描述 课题:日程管理系统 由于题目没有提及要实现的具体的功能, ...
- c语言课程图书信息管理系统,c语言课程设图书信息管理系统.doc
c语言课程设图书信息管理系统 课程设计报告 课程:高级语言程序设计 学号: 1010431059 姓名: 胡维维 班级: 嵌入式一班 教师: 王群芳 时间: 2011年6月 计算机科学与技术系 设计名 ...
最新文章
- CES中国企业被查抄案最新进展:美公司主动撤诉
- Java 动态绑定 静态绑定
- java list主要实现_java容器-list的常用实现及原理
- 一、烧写最小linux系统
- BUU--[MRCTF2020]PixelShooter
- pcl中ransac提取直线_复杂场景中的一个图像配准思路
- MongoDB 5.0 来了,原生时序、版本化 API 新特性悉数登场
- 使用python在ArcGIS中合并多个图层中的数据
- 培训loadrunner感受
- iOS 6分享列表——UIActivityViewController详解
- 输入输出知识点和问题超全总结(持续更新中)
- 线程取消(pthread_cancel)
- PID算法基本原理及整定实现方法
- Webpack打包UMD的export要带default访问问题
- 答辩复试技巧技巧1.0
- xp系统扫描仪服务器,xp系统扫描仪添加步骤全程的图文教程
- 流媒体直播协议与比较
- python 索引方法loc和iloc
- 8188gu驱动和su realtek_Realtek瑞昱RTL8192SU/RTL8188SU/RTL8192GU无线网卡驱动怎么样
- 洛谷P1046陶陶摘苹果题解--zhengjun
热门文章
- Imagination宣布成立IMG实验室,致力于创造突破性技术
- java excel 字体_Java 在Excel单元格中应用一种/多种字体样式
- 【USACO题库】 动态规划 汇总(普及-/普及)
- 2021年全国硕士研究生招生考试公告
- 京东云缓存JIMDB建设之路
- 第一款无线信号频谱分析仪:Ubuntu20(i3台式机) + hackrf one + qspectrumanalyzer
- WINCE 获得无线网卡相关信息
- 0001_halcon-测量函数说明
- WebRTC音视频同步详解
- Go基础编程:字符串处理