C语言实现影院管理系统程序设计

本文实例为大家分享了C语言实现影院管理系统程序的具体代码,供大家参考,具体内容如下**影院管理系统基本运行图**下面是实现全部功能的函数与解析与思路**结构体与预定义**#includestdio.h...

本文实例为大家分享了C语言实现影院管理系统程序的具体代码,供大家参考,具体内容如下

**影院管理系统基本运行图**

下面是实现全部功能的函数与解析与思路

**结构体与预定义**

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<Windows.h>
typedef struct accout
{
 char pass[20];
 char name[20];
 struct accout* next;
}mm, * MM;
typedef struct movie
{
 char number[20];//电影序号
 char name[20];//电影名称
 int price;//电影价格
 int grade;//电影评分
 int time;//电影时长
 struct movie* next;
} Linklist;

下面基本分为三大部分

一.登录与注册

void Register(MM head)//注册
{
 system("cls");//清屏
 char username[20] = "";
 char password[13] = "";
 char pass[13] = "";
 char q;
 int i;
 FILE* fp;
 printf("\n\n\n");
 printf("\t\t\t\t账号:");
 scanf("%s", username);
 getchar();
 printf("\t\t\t\t密码:");
 i = 0;
 while (1)
 {
  q = getch();
  if (q == '\r')
  {
   password[i] = '\0';
   break;
  }
  else if (q == '\b')
  {
   printf("\b \b");
   password[i++] = q;
  }
  else
  {
   password[i++] = q;
   printf("*");
  }
 }
 printf("\n");
 printf("\t\t\t\t请确认密码");
 i = 0;
 while (1)
 {
  q = getch();
  if (q != 13)
  {
   printf("*");
   pass[i++] = q;
  }
  else
  {
   pass[i] = '\0';
   printf("\n");
   break;
  }
 }
  if (strcmp(pass, password) == 0)
  {
   fp = fopen("d:\\课设\\accout.txt", "ab+");
   fprintf(fp, "%s %s", username, password);//把内存中的文件输入到硬盘之中
   fclose(fp);
   system("cls");
   printf("\n\n\n注册成功\n\n");
   system("pause");
  }
}

MM judge(mm * head)//判断密码是否输入正确
 {
  char name1[20] = "", pass1[20] = "";
  char q;
  MM p1;
  int i = 0, j = 0;
  system("cls");
  printf("\n\n\n\n");
  while (1)
  {
   j++;
   p1 = head->next;
   printf("\t\t\t\t账号");
   scanf("%s", name1);
   getchar();
   printf("\t\t\t\t密码");
   i = 0;
   while (1)
   {
    j++;
    q = getch();
    if (q == '\r')
    {
     pass1[i] = '\0';
     break;
    }
    else if (q == '\b')
    {
     printf("\b \b");
     pass1[i++] = q;
    }
    else
    {
     pass1[i++] = q;
     printf("*");
    }
   }
   while (p1 != NULL)
   {
    if (strcmp(name1, p1->name) == 0)
    {
     if (strcmp(pass1, p1->pass) == 0)
     {
      printf("\n\n\t\t登录成功");
      system("pause");
      return head;
     }
     else
     {
      printf("登陆失败");
      system("pause");
     }
    }
    else
    {
     p1 = p1->next;
    }
   }
   if (p1 == NULL)
   {
    printf("\n\n\n\n\t\t\t\t输入有误");
    system("cls");
    break;
   }
  }
  return head;
 }

放到链表里面操作

MM AccountLibrary(MM head)//打开读取注册的账号和密码,放到链表里面
 { //用户数据库
  FILE* fp1 = fopen("d:\\课设\\accout.txt", "r");
  while (!feof(fp1))
  //feof()是检测流上的文件结束符的函数,如果文件结束,则返回非0值,否则返回0
  {
   MM q = (MM)malloc(sizeof(mm));
   fscanf(fp1, "\n%s%s\n", q->name, q->pass);
   q->next = head;
   head = q;
  }
  fclose(fp1);
  return head;
 }

以下代码为具体部分操作函数

int E=judge(head);//将E作为判断judge函数返回值的标志       
if (!E)
guanliyuan();/user()

void login()
{
 system("cls");
 int bk = 0;
 int bb = 0;
 MM head = 0, p1 = 0;
 // char a[10]={0};
 head = (mm*)malloc(sizeof(mm));
 head->next = NULL;
 while (1)
 {
  // char a[200];
  // char b[200];
  int a, b;
  printf_d();
  printf("请输入 ");
  scanf("%d", &a);
  switch (a)
  {
  case 1:
  {//登录
   printf1();
   printf("请输入 ");
   scanf("%d", &b);
   switch (b)
   {
   case 1: {
    AccountLibrary(head);//在文件中查找注册过的账号和密码
    int E=judge(head);       
    if (!E)
    guanliyuan();
   }
   case 2: {
    //judge(head);//用户登录
    AccountLibrary(head);
    int E=judge(head);
    if(!E)
    user();
    break;
     }
   case 0: {
    printf("再见");
    exit(0);
    break;
     }
   default:printf("输入错误");
   }
  case 2:
  {//注册
   Register(head);
   break;
  }
  case 0:
  {//退出
   printf("再见");
   break;
  }
  }
  }
 }
}

二.管理员系统操作

管理员系统登录之后函数

void guanliyuan()//管理员系统
{
 Linklist* head;
 head = (Linklist*)malloc(sizeof(Linklist));
 head->next = NULL;//创建头结点
 //录入信息
 int a = 0, b = 0;
 while (1)
 {
  system("cls");
  fflush(stdin);
  printf2();
  printf("请输入指令");
  scanf("%d", &a);
  fflush(stdin);
  switch (a)
  {
  case 1://录入信息
  {
   head = Input();
   Foutput(head);
   system("cls");
   break;
  }
  case 2://修改
  {
   head = read();
   change(head);
   Foutput(head);
   system("cls");
   break;
  }
  case 3://删除
  {
   head = read();
   deljavascriptete_1(head);
   Foutput(head);
   system("cls");
   break;
  }
  case 4://排序
  {
   head = read();
   sort(head);
   output(head);
   //Foutput(head);
   system("cls");
   break;
  }
  case 5://添加
  {
   head = read();
   insert(head);
   Foutput(head);
   system("cls");
   break;
  }
  case 6://查找
  {
   head = read();
   fflush(stdin);
   search(head);
   system("cls");
   break;
  }
  case 7://预览
   preview();
   break;
  /*case 8://修改密码//砍掉的功能
  {
   MM head;
   head = NULL;
   printf("\t\t\t欢迎修改密码\n");
   //head=duqu_cipher(head);
   head = AccountLibrary(head);
   change_cipher(head);
   luru_cipher(head);
   break;
  }*/
  case 0://退出系统
  {
   printf("感谢使用\n");
   exit(1);
  }
  default: {
   printf("输入错误!请重新输入");
   system("pause");
   break;
  }
  }
 }
 free(head);
}

录入信息分为两部分

void Input_1(Linklist* pNew)//输入结点的值
{
 int i = 0, j = 0, num = 0, sum = 0;
 char ch = 0;
 fflush(stdin);
 //pNew = (Linklist*)malloc(sizeof(Linklist));
 printf("请输入电影序号\n");
 scanf("%s", pNew->number);
 fflush(stdin);//清除缓存区数据
 if (pNew->number[0] == '#')
  return;
 printf("请输入电影名称\n");
 scanf("%s", pNew->name);
 fflush(stdin);
 printf("请输入电影价格\n");
 scanf("%d", &pNew->price);
 fflush(stdin);
 printf("请输入电影评分\n");
 scanf("%d", &pNew->grade);
 fflush(stdin);
 printf("请输入电影时长\n");
 scanf("%d", &pNew->time);
 fflush(stdin);
 printf("\n");
}
Linklist* Input()//手动输入,录入信息链表
{
 Linklist* head = NULL, * pEnd, * pNew;
 pEnd = head = (Linklist*)malloc(sizeof(Linklist));
 printf("电影序号输入#时停止输入");
 pNew = (Linklist*)malloc(sizeof(Linklist));
 Input_1(pNew);
 while (pNew->number[0] != '#')//尾插法
 {
  pEnd->next = pNew;
  pNew->next = NULL;
  pEnd = pNew;
  pNew = (Linklist*)malloc(sizeof(Linklist));
  Input_1(pNew);
  printf("\n");
 }
 Foutput(head);
 free(pNew);//最后一个pNew是没有数据所以释放掉
 return head;
}

void change(Linklist* head)//修改
{
 read();
 int n, j, k, l, y;
 char m[20] = "";
 char i = 0;
 Linklist* p = head;
 printf("1.名称2.评分3.价格4.时长5.编号");
 printf("请输入要修改的项目");
 scanf("%d", &n);
 switch (n)
 {
 case 1:
 {
  printf("请输入要修改的电影名称");
  scanf("%s", m);
  while (p != NULL)
  {
   if (strcmp(p->number, m) == 0)
   {
    printf("输入修改之后的名称");
    scanf("%s", &p->name);
    //strcpy()
    printf("修改完成");
   }
   p = p->next;
  }
 }
 case 2:
 {
  printf("请输入要修改的的电影评分");
  scanf("%d", &j);
  while (p != NULL)
  {

   if (p->grade == j)
   {
    printf("请输入修改之后的评分");
    scanf("%d", &p->grade);
    printf("修改成功");
   }
  }
 }
 case 3:
 {
  printf("请输入要修改的电影价格");
  scanf("%d", &l);
  while (p != NULL)
  {
   if (p->price == l)
   {
    printf("请输入修改之后的价格");
    scanf("%d", &p->price);
    printf("修改成功");
   }
  }
 }
 case 4:
 {
  printf("请输入要修改电影时长");
  scanf("%d", &k);
  while (p != NULL)
  {
   if (p->time == k)
   {
    printf("请输入修改之后的电影时长");
    scanf("%d", &p->time);
    printf("修改成功");
   }
  }
 }
 case 5:
 {
  printf("请输入要修改电影编号");
  scanf("%d", &y);
  while (p != NULL)
  {
   if (p->time == y)
   {
    printf("请输入修改之后的电影时长");
    scanf("%d", &p->time);
    printf("修改成功");
   }
  }
 }
 }
}

void delete_1(Linklist* head)//删除
{
 Linklist* p, * p1 = head;
 p = p1->next;
 int n, i;
 char a[20];
 printf("请输入1确认删除");
 scanf("%d", &i);
 switch (i)
 {
 case 1:
 {
  printf("请输入要删除的电影编号\n");
  scanf("%s", a);
  while (p != NULL)
  {
   if ((strcmp(p->number, a)) == 0)
   {
    printf("\t\t以下是要删除的电影信息\n\n");
    printf("%s\t%s\t%d\t%d\t%d\n\n", p->number, p->name, p->price, p->grade, p->time);
    p1->next = p->next;
    free(p);
    printf("删除完毕");
   }
   p1 = p;
   p = p->next;
  }
 }
 default:
 {
  printf("输入错误.....");
  break;
 }
 }
}

这里用得是链表冒泡排序
有点难理解,附图

void sort(Linklist* head)//单链表冒泡排序
{
 int n;
 Linklist* p, * q, * p1;
 p1 = NULL;
 printf("1.按票价从低到高排序2.按评分从低到高排序3.按时长从短到长排序\n");
 printf("请选择排序方式");
 scanf("%d", &n);
 switch (n)
 {
 case 1:
 {
  while ((head->next->next) != p1)//相当于数组第一层循环
  {
   p = head;//一个数据
   q = head->next;//下一个数据
   while (q->next != p1)
   {
    if (q->price > q->next->price)
    {
     p->next = q->next; //第一步
     q->next = q->next->next;//第二步
     p->next->next = q;//第三步
     q = p->next;//第四补3       
    }
    q = q->next;//接着往后走
    p = p->next;
   }
   p1 = q;//相当于数组比较的下一个外层 
  }
  printf("排序完成");
  output(head);
  system("pause");
  break;
 }
 case 2:
 {
  while ((head->next->next) != p1)//相当于数组第一层循环
  {
   p = head;//一个数据
   q = head->next;//下一个数据
   while (q->next != p1)
   {
    if (q->grade > q->next->grade)
    {
     p->next = q->next; //第一步
     q->next = q->next->next;//第二步
     p->next->next = q;//第三步
     q = p->next;//第四补3       
    }
    q = q->next;//接着往后走
    p = p->next;
   }
   p1 = q;//相当于数组比较的下一个外层 
  }
  printf("排序完成");
  output(head);
  break;
 }
 case 3:
 {
  while ((head->next->next) != p1)//相当于数组第一层循环
  {
   p = head;//一个数据
   q = head->next;//下一个数据
   while (q->next != p1)
   {
    if (q->time > q->next->time)
    {
     p->next = q->next; //第一步
     q->next = q->next->next;//第二步
     p->next->next = q;//第三步
     q = p->next;//第四补3       
    }
    q = q->next;//接着往后走
    p = p->next;
   }
   p1 = q;//相当于数组比较的下一个外层 
  }
  printf("排序完成");
  output(head);
  break;
 }
 }
}

void insert(Linklist* head)//添加新的电影信息
{
 Linklist* p = head, * p1;
 //p=p1->next;
 int n, i;
 printf("请输入1进行添加信息操作");
 scanf("%d", &n);
 switch (n)
 {
 case 1:
 {
  printf("请输入要插入信息前面的电影编号");
  scanf("%d", &i);
  while (p != NULL)
  {

   if (atoi(p->number) == i)
   {
    p1 = (Linklist*)malloc(sizeof(Linklist));//开辟新的空间
    printf("请输入电影编号");
    scanf("%s", p->number);
    printf("请输入电影名称");
    scanf("%s", p->name);
    printf("请输入电影价格");
    scanf("%d", &p->price);
    printf("请输入电影评分");
    scanf("%d", &p->grade);
    printf("请输入电影时长");
    scanf("%d", &p->time);
    printf("电影信息添加完毕");
    p1->next = p->next;//
    p->next = p;
   }
   p = p->next;//遍历  
  }
 }
 default:
 {
  printf("输入错误。。。。");
 }
 }
 Foutput(head);
}

void search(Linklist* head) //查询
{
 Linklist* p = head;
 //int n;
 char a[20] = "";

 printf("请输入要查询电影编号");
 scanf("%s", a);
 while (p != NULL)
 {
  if ((strcmp(p->number, a)) == 0)
  {
   printf("编号\t名称\t价格\t评分\t时长\n");
   printf("%s\t%s\t%d\t%d\t%d\t\t", p->number, p->name, p->price, p->grade, p->time);
   break;
  }
  p = p->next;

 }
 system("pause");
}

三.用户操作系统

用户登录主函数

void user()
{
 fflush("stdin");
 Linklist* head;
 head = (Linklist*)malloc(sizeof(Linklist));
 head->next = NULL;
 int n;
 printf3();
 printf("请输入要选择的操作");
 scanf("%d", &n);
 system("pause");
 char c[20] = "";
 // printf("")
 switch (n)
 {
 case 1:
 {
  printf("\t\t\t欢迎预览\n");
  preview();
  system("pause");
  break;
 }
 case 2:
 {
  printf("\t\t欢迎来到查询系统\n");
  head = read();
  fflush(stdin);
  search(head);
  system("cls");
  break;
 }
 case 3:
 {
  printf("\t\t\t欢迎来到购票系统\n");
  head = read();
  fflush(stdin);
  Linklist* p = head;
  //p = (Linklist*)malloc(sizeof(Linklist));
  printf("\t\t\t请输入要购买电影的编号\n");
  scanf("%s", c);
  //printf("ggdggd");
  while (p)
  {
   if ((strcmp(p->number, c)) == 0)
   {
    printf("*****************************");
    printf("|--------电影名字%s----------|\n", p->name);
    printf("|--------电影价格%d----------|\n", p->price);
    printf("|--------电影时间%d----------|\n", p->time);
    printf("|--------恭喜购票成功--------|\n");
    printf("|----------------------------|\n");
    printf("*****************************");
    system("pause");
    break;
   }
   p = p->next;
  }
  break;
 }
 case 4:
 {
  printf("感谢使用");
  exit(1);
 }
 }
}

预览

void preview()
{
 printf("\t\t***********************************************\n");
 printf("\t\t| 电影名称:Captain America    价格: 35   |\n");
 printf("\t\t| 评分:9        时长: 135       |\n");
 printf("\t\t***********************************************\n");

 printf("\t\t***********************************************\n");
 printf("\t\t| 电影名称:The Shawshank Redemption  价格:36 |\n");
 printf("\t\t| 评分:8        时长:126       |\n");
 printf("\t\t***********************************************\n");

 printf("\t\t***********************************************\n");
 printf("\t\t| 电影名称:Citizen Kane Redemption  价格:34 \n");
 printf("\t\t| 评分:10        时长:123       |\n");
 printf("\t\t***********************************************\n");

 printf("\t\t***********************************************\n");
 printf("\t\t| 电影名称:Casablanca      价格:32   |\n");
 printf("\t\t| 评分:6        时长:157       |\n");
 printf("\t\t***********************************************\n");

 printf("\t\t***********************************************\n");
 printf("\t\t| 电影名称:The Godfather Part II  价格:31  |\n");
 printf("\t\t| 评分:5        时长:134       |\n");
 printf("\t\t***********************************************\n");
}

四.文件操作

void Foutput(Linklist* head)//电影信息录入文件
{
 Linklist* pt = head;
 FILE* fp;
 pt = pt->next;
 fp = fopen("d:\\课设\\dgw.txt", "wt+");
 if (fp == NULL)
 {
  printf("文件打开失败");
  exit(1);
 }
 while (pt)
 {
  fprintf(fp, "%s %s %d %d %d", pt->number, pt->name, pt->price, pt->grade, pt->time);
  pt = pt->next;
 }
 fclose(fp);
}

五.打印函数实现

void printf2()
{
 system("cls");
 printf("\t\t\t|*******************************|\n");
 printf("\t\t\t| 欢迎来到影院管理系统(管理员) |\n");
 printf("\t\t\t|*******************************|\n");
 printf("\t\t\t|     1.录入信息      |\n");
 printf("\t\t\t|     2.修改        |\n");
 printf("\t\t\t|     3.删除       |\n");
 printf("\t\t\t|     4.排序        |\n");
 printf("\t\t\t|     5.添加        |\n");
 printf("\t\t\t|     6.查询        |\n");
 printf("\t\t\t|     7.预览        |\n");
 printf("\t\t\t|-------------------------------|\n");
 printf("\t\t\t|-------------------------------|\n");
 printf("\t\t\t|     0.退出程序      |\n");
 printf("\t\t\t|===============================|\n");
 printf("\t\t\t请选择你需要的操作\t\t");
}//管理员系统菜单
void printf3()//用户登录界面
{
 system("cls");
 printf("\t\t\t|*******************************|\n");
 printf("\t\t\t| 欢迎来到影院管理系统(个人用户)|\n");
 printf("\t\t\t|*******************************|\n");
 printf("\t\t\t|     1.预览        |\n");
 printf("\t\t\t|     2.查询        |\n");
 printf("\t\t\t|     3.购票并打印报表  |\n");
 printf("\t\t\t|     0.退出程序      |\n");
 printf("\t\t\t|===============================|\n");
}
void printf_d()
{
 system("cls");
 printf("\n\n\n\n");
 printf("\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆\n");
 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");
 printf("\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆\n");
}//登录
void printf1()//不同用户登录
{
 system("cls");
 printf("\n\n\n\n");
 printf("\t\t\t********************************\n");
 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");
 printf("\t\t\t********************************\n");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

本文标题为:C语言实现影院管理系统程序设计

基础教程推荐