C语言实现影院管理系统

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include"state.h"
#define change 3
int iCount;
int n;
//*****************注册*****************//
void router_registe(pAccout ahead)
{
 system("cls");
 char username[20];
 char password[13];
 char pass[13];
 char q;
 int i;
 FILE *fp;
 loop2:
 printf("\n\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 != 13)
  {
  printf("*");
  password[i++] = q;
  }
  else {
  password[i] = '\0';
  printf("\n");
  break;
  }
  }
 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("e:\\课设\\Accout1.txt", "ab+");
  fprintf(fp," %s %s",username,password); //把内存中的文件输入到硬盘中
 fclose(fp);
 system("cls");
 printf("\n\n\n\n注册成功\n");
 }
 else goto loop2;
}
//*****************登录*****************//
pAccout router_acc(pAccout ahead)
{
 pAccout p1,p2;
 FILE *fp;
 int m=0;
 if((fp=fopen("e:\\课设\\Accout.txt", "rw"))==NULL)
 {
 printf("读取失败!");
 return ahead;
 }
 ahead==NULL;
 p1=(pAccout)malloc(sizeof(Accout));
 while(fscanf(fp,"%s %s",p1->name,p1->pass)==2)
 {
 //printf("%s\n",p1->name);         //读进去了
 m=m+1;
 if(m==1)
 {
  ahead->next=p1;
  p2=p1;
  p2->next = NULL;
 }
 else
 {
  p2->next=p1;
  p2=p1;
  p2->next=NULL;
 }
 p1=(pAccout)malloc(sizeof(Accout));
 }
 fclose(fp);
 return ahead;
}
pAccout router_acc1(pAccout ahead)
{
 pAccout p1,p2;
 FILE *fp;
 int m=0;
 if((fp=fopen("e:\\课设\\Accout1.txt", "rw"))==NULL)
 {
 printf("读取失败!");
 return ahead;
 }
 ahead==NULL;
 p1=(pAccout)malloc(sizeof(Accout));
 while(fscanf(fp,"%s %s",p1->name,p1->pass)==2)
 {

 //printf("%s\n",p1->name);   //由于文件没有读入换行,读出的时候将先一个人的密码和
 //printf("%s",p1->pass);   //后一个人的名称
 m=m+1;
 if(m==1)
 {
  ahead->next=p1;
  p2=p1;
  p2->next = NULL;
 }
 else
 {
  p2->next=p1;
  p2=p1;
  p2->next=NULL;
 }
 p1=(pAccout)malloc(sizeof(Accout));
 }
 fclose(fp);
 return ahead;
}
void login_printf()
{
 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 login_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");
}
void login_acc()
 {
 system("cls");
 int bk;
 int bb;
 pAccout ahead,p1;
 ahead=(pAccout)malloc(sizeof(Accout));
 ahead->next=NULL;
 while(1)
 {
  char a[200];
  char b[200];
  loop:
  login_printf();
 printf("请输入:");
 scanf("%s",a);
 bk=back(a);
 switch(bk)
 {
  case 1:{
   login_printf1();
   printf("请输入:");
   scanf("%s",b);
   bb=back(b);
   switch(bb)
   {
    case 1:{
     router_acc(ahead);
     ahead=login_panduan(ahead);//管理员登录
     meun();
    break;
     }
   case 2:{
     router_acc1(ahead);
     ahead=login_panduan(ahead);//用户登陆
     menu1();
     break;
    }
   case 0:
    {
    print2();
    exit(0);
    break;
    }
   default:printf("输入错误!");
    Sleep(1000);
    system("cls");
     break;
   }
   if(bb!=0)//丢失此处则会无法跳出循环
    break;
   }
  case 2:{
   router_registe(ahead);
        goto loop;
   break;
  }
  case 0:{
  // printf("BUG!!!!\n");测试bug!!!!!
   print2();
   exit(0);
   break;
   }
  default:printf("输入错误!");
   Sleep(1000);
   system("cls");
   break;
 }
 if(bk!=0)
 break;
 }
}
pAccout login_panduan(pAccout ahead)
{
 char name1[20],pass1[20];
 char q;
 pAccout p1;
 int i=0,j=0;
 system("cls");
 printf("\n\n\n\n");
 loop1:
 while(1)
 {
 j++;
 p1=ahead->next;
 printf("\t\t\t\t账号:");
 scanf("%s",name1);
 getchar();
 printf("\t\t\t\t密码:");
 i=0;
 while (1)
 {
  j++;
  q = getch();
  if (q != 13)
  {
  printf("*");
  pass1[i++] = q;
  }
  else {
  pass1[i] = '\0';
  printf("\n");
  break;
  }
  }
  //printf("%s",pass1);密码正确(加密最初出现问题)
 while(p1!=NULL)
 {
  if(strcmp(name1,p1->name)==0)
  {
  if(strcmp(pass1,p1->pass)==0)
  {
   printf("\n\n\t\t\t\t登录成功!");
   Sleep(2000);
   return ahead;
   }
  else
  {
   p1=p1->next;
  }
  }
  else
  {
  p1=p1->next;
  }
  if(p1==NULL)
  {
  printf("\n\n\n\n\t\t\t\t输入有误");
  system("cls");
  printf("\n\n\n\n\t\t\t\t请重新输入\n");
  Sleep(2000);
  goto loop1;
  break;
  }
 }
 if(j>=change)
 {
  system("cls");
  printf("\n\n\n\n");
  printf("\t\t\t\t***************\n");
  printf("\t\t\t\t你完蛋了!!!!!\n");
  printf("\t\t\t\t***************\n");
  Sleep(2000);
  print2();
  exit (0);
 }
 }
 return ahead;
}//登录成功
int panduan(char choice)
{
 while(1)
 {
 fflush(stdin);
 choice=getchar();
 if(choice == 'y'|| choice =='Y')
 return 1;
 else if(choice == 'n'||choice == 'N')
 return 0;
 while(getchar() != '\n')
  continue;
 printf("输入错误!请重新输入您的选择:\n");
 }
}
int back(char *a)
{
 if(strlen(a)==1)
 {
 if(a[0]>='0'&&a[0]<='9')
 return ((int)a[0]-48);
 }
 else
   return 10;
}

void print1()
{
 int i;
 system("cls");
 printf("\n\n\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||****************************||\n");
 printf("\t\t\t\t|******************************|\n");
 printf("\n\t\t\t\t系统开始启动.........\n");
  printf("===================================================================================================\r");
 for(i=1;i<100;i++)
 {
  Sleep(40);
  printf(">");
 }
}
void print()    //主界面
{
 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|-------------------------------|\n");
 printf("\t\t\t|-------------------------------|\n");
 printf("\t\t\t|     0.退出程序      |\n");
 printf("\t\t\t|===============================|\n");
}
void print2()
{
 system("cls");
 printf("\n\n\n\n");
 printf("\t\t\t|******************************|\n");
 printf("\t\t\t||****************************||\n");
 printf("\t\t\t|||             |||\n");
 printf("\t\t\t|||    谢谢使用     |||\n");
 printf("\t\t\t|||             |||\n");
 printf("\t\t\t||****************************||\n");
 printf("\t\t\t|******************************|\n");
 Sleep(2000);
}
void print3()
{
 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|-------------------------------|\n");
 printf("\t\t\t|-------------------------------|\n");
 printf("\t\t\t|     0.退出程序      |\n");
 printf("\t\t\t|===============================|\n");
}
/*******************查询模块********************/
pticket searchmenu(pticket phead)   //查询子系统菜单
{
 fflush(stdin);
 system("cls");
 int bk;
 while(1)
 {
 char P[200];
 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|-------------------------------|\n");
 printf("\t\t\t|     0.返回上一层     |\n");
 printf("\t\t\t|*******************************|\n\n");
 printf("请输入指令:");
 scanf("%s",P);
 bk=back(P);
 switch(bk)
 {
  case 1:
    {
    phead=search1(phead);//按影院查询
    break;
    }
  case 2:
  {
   phead=search2(phead);//按电影查询
   break;
  }
  case 3:{
  phead=search3(phead);//按价格区间查询
  break;
  }
  case 0:break;
  default:printf("输入错误!请重新输入\n");
   system("pause");
   break;
 }
 if(bk==0)
 break;
 }
 return phead;
}
pticket search1(pticket phead)     //影院查询
{
 system("cls");
 char cinema1[30],choice;
 pticket p;
 int flag=0;
 char q;
 p=(pticket)malloc(sizeof(ticket));
 while(1)
 {
 system("cls");
 printf("\n\n\n\t\t\t请输入影院名称:");
 scanf("%s",cinema1);
 if(strlen(cinema1)>=30)
 {
  system("cls");
  printf("**************\n");
  printf("请输入正确的名字!\n");
  printf("**************\n");
  Sleep(1000);
 }
 else
 break;
 }
 while(1)
 {
 system("cls");
 if(phead->next==NULL)
 {
  printf("\n\n\n\t\t\t没有信息!\n");
  system("pause");
  break;
 }
 p=phead->next;
 print_stu2();
   do
   {
  if(strcmp(p->cinema,cinema1)==0)
  {
  printf("  %-4s   ",p->number);
  printf("%-12s ",p->name);
  printf("%-16s",p->cinema);
  printf(" %4d   ",p->time);
  printf("%.2lf  ",p->price);
  printf(" %.1lf  ",p->grade);
  printf("\n");
  flag=1;
  }
  p=p->next;
 }while(p!=NULL);
 if(flag==0)
 {
  printf("不存在的!\n");
 }
 printf("是否继续查找?(Y or N)");
 q=getchar();
 if(panduan(q)==1)
 {
  while(1)
  {
  system("cls");
  printf("\n\n\n\t\t\t请输入影院名称:");
  scanf("%s",cinema1);
  if(strlen(cinema1)>=30)
  {
   system("cls");
   printf("**************\n");
   printf("请输入正确的名字!\n");
   printf("**************\n");
   Sleep(1000);
  }
  else
   break;
  }
 }
 else if(panduan(choice)==0)
  break;
 }
 return phead;
}
pticket search2(pticket phead)     //按电影名称查询
{
 system("cls");
 char name1[30],choice;
 pticket p;
 int flag=0;
 char q;
 while(1)
 {
 system("cls");
 printf("\n\n\n\t\t\t请输入电影名称:");
 scanf("%s",name1);
 if(strlen(name1)>=30)
 {
  system("cls");
  printf("**************\n");
  printf("请输入正确的名字!\n");
  printf("**************\n");
  Sleep(1000);
 }
 else
 break;
 }
 while(1)
 {
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  system("pause");
  break;
 }
 p=phead->next;
 print_stu2();

  do{
 if(strcmp(p->name,name1)==0)
 {
  printf("  %-4s   ",p->number);
  printf("%-12s ",p->name);
  printf("%-16s",p->cinema);
  printf(" %4d   ",p->time);
  printf("%.2lf  ",p->price);
  printf(" %.1lf  ",p->grade);
  printf("\n");
  flag=1;
 }
  p=p->next;
 }while(p!=NULL);
 if(flag==0)
 {
  printf("不存在的!\n");

 }
 printf("是否继续查找?(Y or N)\n");
 q=getchar();
 if(panduan(q)==1)
 {
  while(1)
  {
  system("cls");
  printf("请输入电影名称:");
  scanf("%s",name1);
  if(strlen(name1)>=30)
  {
   system("cls");
   printf("**************\n");
   printf("请输入正确的名字!\n");
   printf("**************\n");
   Sleep(1000);
  }
  else
   break;
  }
 }
 else if(panduan(choice)==0)
  break; 

}
 return phead;
}
pticket search3(pticket phead)     //按价格区间名称查询
{
 system("cls");
 int count=0;
 char choice;
 float x,y;
 pticket p;
 int flag=0;
 char q;
 loop2:
 system("cls");
 printf("\n\n\n\t\t\t请输入价格下限:");
 scanf("%f",&x);
 printf("\n\t\t\t请输入价格上限:");
 scanf("%f",&y);
 while(1)
 {

 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  system("pause");
  break;
 }
 p=phead->next;
 print_stu2();

  do{
 if(p->price>x&&p->price<y)
 {
  printf("  %-4s   ",p->number);
  printf("%-12s ",p->name);
  printf("%-16s",p->cinema);
  printf(" %4d   ",p->time);
  printf("%.2lf  ",p->price);
  printf(" %.1lf  ",p->grade);
  printf("\n");
  count++;
  flag=1;
 }
  p=p->next;
 }while(p!=NULL);
 printf("\t\t\t此价格区间内的电影共有%d场\n",count);
 if(flag==0)
 {
  printf("不存在的!\n");

 }
 system("pause");
 printf("是否继续查找?(Y or N)\n");
 q=getchar();
 if(panduan(q)==1)
 {
  count=0;
  goto loop2;
 }
 else if(panduan(choice)==0)
  break;
 }
 return phead;
}
/******************排序模块*******************/
pticket sortmenu(pticket phead)   //排序子系统菜单
{
 fflush(stdin);
 system("cls");
 int bk;
 while(1)
 {
 system("cls");
 char P[200];
 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|-------------------------------|\n");
 printf("\t\t\t|     0.返回上一层     |\n");
 printf("\t\t\t|*******************************|\n\n");
 printf("请输入指令:");
 scanf("%s",P);
 bk=back(P);
 printf("%d",bk);
 switch(bk)
 {
  case 1:phead=sort1(phead);//按价格排序
    break;
  case 2:phead=sort2(phead);//按时长排序
    break;
  case 3:phead=sort3(phead);// 按评分排序
    break;
  case 0:break;
  default:printf("输入错误,重新输入!");
   Sleep(1000);
   system("cls");
   break;
   }
   if(bk==0)
   break;
  }
  Save_Stu(phead);
 return phead;
}
pticket sort(pticket phead)
{
 pticket pTemp,pj,pj_f,pj_b;
 int i,j,flag;
  for(i=0;i<iCount;i++)
 for(j=0,flag=0,pj=phead;j<iCount-1-i;j++)
 {
  if(flag==0)
  {
  pj_f=pj;
  pj=pj->next;
  pj_b=pj->next;
  }
 if(flag==1)
 {
  pj_f=pj_f->next;
  pj_b=pj->next;
 }
 flag=0;
 if(pj->price>pj_b->price)
 {
  pTemp=pj->next;
  pj->next=pj_b->next;
  pj_b->next=pTemp;

  pTemp=pj_f->next;
  pj_f->next=pj_b->next;
  pj_b->next=pTemp;
  flag=1;
 }
 }
 return phead;
}
pticket sort22(pticket phead)
{
 pticket pTemp,pj,pj_f,pj_b;
 int i,j,flag;
  for(i=0;i<iCount;i++)
 for(j=0,flag=0,pj=phead;j<iCount-1-i;j++)
 {
  if(flag==0)
  {
  pj_f=pj;
  pj=pj->next;
  pj_b=pj->next;
  }
 if(flag==1)
 {
  pj_f=pj_f->next;
  pj_b=pj->next;
 }
 flag=0;
 if(pj->time<pj_b->time)
 {
  pTemp=pj->next;
  pj->next=pj_b->next;
  pj_b->next=pTemp;

  pTemp=pj_f->next;
  pj_f->next=pj_b->next;
  pj_b->next=pTemp;
  flag=1;
 }
 }
 return phead;
}
pticket sort11(pticket phead)
{
 pticket pTemp,pj,pj_f,pj_b;
 int i,j,flag;
  for(i=0;i<iCount;i++)
 for(j=0,flag=0,pj=phead;j<iCount-1-i;j++)
 {
  if(flag==0)
  {
  pj_f=pj;
  pj=pj->next;
  pj_b=pj->next;
  }
 if(flag==1)
 {
  pj_f=pj_f->next;
  pj_b=pj->next;
 }
 flag=0;
 if(pj->grade<pj_b->grade)
 {
  pTemp=pj->next;
  pj->next=pj_b->next;
  pj_b->next=pTemp;

  pTemp=pj_f->next;
  pj_f->next=pj_b->next;
  pj_b->next=pTemp;
  flag=1;
 }
 }
 return phead;
}
pticket sort1(pticket phead)    //按价格排序
{
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  Sleep(1000);
  return phead;
 }
 sort(phead);
 print_stu1(phead);
 return phead;
}
pticket sort2(pticket phead)    //按时长排序
{
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  Sleep(1000);
  return phead;
 }
 sort22(phead);
 print_stu1(phead);
 return phead;
}
pticket sort3(pticket phead)    //评分排序
{
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  Sleep(1000);
  return phead;
 }
 sort11(phead);
 print_stu1(phead);
 return phead;
}

/********************增加模块**********************/
pticket Insert(pticket phead)
{
 system("cls");
 pticket pNew,p=phead;
 /*if(phead->next==NULL)
 {
 printf("无信息!");
 Sleep(1000);
 return phead;
 }*/
 char choice;
 while(p->next!=NULL)
 p=p->next;
  do
  {
   pNew=(pticket)malloc(sizeof(ticket));
 printf("请输入序号:");
 scanf("%s",pNew->number);
 printf("请输入名称:");
 scanf("%s",pNew->name);
 printf("请输入影院:");
 scanf("%s",&pNew->cinema);
 printf("请输入时长:");
 scanf("%d",&pNew->time);
 printf("请输入价格:");
 scanf("%lf",&pNew->price);
 printf("请输入评分:");
 scanf("%lf",&pNew->grade);
   p->next=pNew;
   p=pNew;
   p->next=NULL;
   iCount++;
   printf("是否继续添加信息(Y or N):");
 choice=getchar();
 }while(panduan(choice)==1);
  printf("已增加电影信息.\n");
 Sleep(1000);
 Save_Stu(phead);
 return phead;
}
/*****************输出模块******************/
void print_stu1(pticket phead)
{
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  Sleep(1000);
  return ;
 }
 print_stu2();
 pticket p;
 p=phead->next;
 while(p != NULL)
 {
 printf("  %-4s   ",p->number);
 printf("%-12s ",p->name);
 printf("%-16s",p->cinema);
 printf(" %4d   ",p->time);
 printf("%.2lf  ",p->price);
 printf(" %.1lf  ",p->grade);
 printf("\n");
 p=p->next;
 }
  system("pause");
}
void print_stu2()
{
 printf("信息如下:\n");
 printf("-----------------------------------------------------------------------\n");
 printf("****序号******名称*************影院**********时间*****价格*****评分****\n");
 printf("-----------------------------------------------------------------------\n");
}
void print_stu3()
{
 printf("\t\t\t价格评分报表如下\n");
 printf("-----------------------------------------------------------------------\n");
 printf("*********名称******************价格*******************评分*************\n");
 printf("-----------------------------------------------------------------------\n");

}
void print_stu4(pticket phead)
{
 system("cls");
 if(phead->next==NULL)
 {
  printf("没有信息!\n");
  Sleep(1000);
  return ;
 }
 print_stu3();
 pticket p;
 p=phead->next;
 while(p != NULL)
 {
 printf("\t%-20s  ",p->name);
 printf("%.2f\t\t\t",p->price);
 printf(" %.1lf  ",p->grade);
 printf("\n");
 p=p->next;
 }
  system("pause");
}
/*****************保存模块***************/
void Save_Stu(pticket phead)          //定义保存函数
{
 system("cls");
  FILE *fp;
  if((fp=fopen("e:\\课设\\Student", "wt"))==NULL)
  {
    printf("不能打开文件\n");
    exit(1);
  }
  pticket p;
  p=phead->next;
  while(p!=NULL)
  {
    fprintf(fp,"%s %s %s %d %lf %lf ",
  p->number,p->name,p->cinema,p->time,p->price,p->grade); //把内存中的文件输入到硬盘中
    p=p->next;
  }
  fclose(fp);          //关闭文件
  //printf("文件已保存\n");   //成功保存,显示提示
  Sleep(1000);
}
/******************读取模块**********************/
pticket router_Stu(pticket phead)
{
 system("cls");
 FILE *fp;
 int m=0;
 if((fp=fopen("e:\\课设\\Student", "rw"))==NULL)
 {
 printf("读取失败!");
 return;
 }
 pticket p1,p2;

 p1=(pticket)malloc(sizeof(ticket));
 while(fscanf(fp,"%s %s %s %d %lf %lf ",
  &p1->number, &p1->name, &p1->cinema,&p1->time,&p1->price,&p1->grade)==6)
 {
 m=m+1;
 if(m==1)
 {
  phead->next=p1;
  p2=p1;
  p2->next = NULL;
 }
 else
 {
  p2->next=p1;
  p2=p1;
  p2->next=NULL;
 }
 p1=(pticket)malloc(sizeof(ticket));
 }
 fclose(fp);
 //printf("读取成功!");
 iCount=m;
 //Sleep(1000);
 return phead;
}
/******************删除模块**********************/
pticket delete_Stu(pticket phead)
{
 system("cls");
 if(phead->next==NULL)
 {
 printf("\n\n\n\n\n\t\t\t\t没有可删除的信息!\n");
 system("pause");
 return phead;
 }
 char name1[30];
 pticket pTemp,p;
 printf("\n\n\n\n\t\t\t\t输入即将下线的电影名称:");
 scanf("%s",name1);
 pTemp=phead;
 while(strcmp(pTemp->name,name1)!=0&&pTemp->next!=NULL)
 {
 p=pTemp;
 pTemp=pTemp->next;
 }
 if(strcmp(pTemp->name,name1)==0)
 {
 if(p!=phead)
 {
  p->next=pTemp->next;
 }
 else
 {
  phead=pTemp->next;
 }
 printf("已删除");
 system("pause");
 }
 else
 {
 printf("没找到");
 Sleep(1000);
 }
 getchar();
 Save_Stu(phead);
 return phead;
}
/********************修改*******************/
pticket revise(pticket phead)
{
 system("cls");
 char P[200];
 int bk;
 char name[30];
 pticket pTemp;
 if(phead->next==NULL)
 {
 printf("没有可修改的信息!\n");
 system("pause");
 return phead;
 }
 pTemp=phead->next;
 printf("\n\n\n\n\t\t\t请输入你要修改的电影名称:");
 scanf("%s",name);
 while(strcmp(pTemp->name,name)!=0&&pTemp->next!=NULL)
 {
 pTemp=pTemp->next;
 }
 if(strcmp(pTemp->name,name)==0)
 {
 while(1)
 {
  system("cls");
  printf("\t\t\t请输入你要修改的信息:\n");
  printf("\t\t\t********************************\t\t\t\n");
  printf("\t\t\t  1.修改代码   2.修改名称  \t\t\t\n");
  printf("\t\t\t  3.修改影院   4.修改时长  \t\t\t\n");
  printf("\t\t\t  5.修改价格   6.修改评分  \t\t\t\n");
  printf("\t\t\t     0.返回上一层     \t\t\t\n");
  printf("\t\t\t********************************\t\t\t\n");
  printf("请输入您的选择:");
  scanf("%s",P);
  bk=back(P);
  switch(bk)
  {
  case 1:{
   system("cls");
      printf("请输入新代码:");
      scanf("%s",pTemp->number);
     system("cls");
     printf("修改成功!");
     Sleep(1000);
     break;
     }
  case 2:{
   system("cls");
   printf("请输入新的名称:");
   scanf("%s",pTemp->name);
   system("cls");
   printf("修改成功!");
   Sleep(1000);
     break;
      }
  case 3:{
   system("cls");
   printf("请输入新的影院:");
   scanf("%s",&pTemp->cinema);
      printf("请输入正确的影院:");
      scanf("%s",&pTemp->cinema);

   system("cls");
   printf("修改成功!");
   Sleep(1000);
     break;
      }
  case 4:{
   system("cls");
   printf("请输入新的时长:");
   getchar();
   scanf("%d",&pTemp->time);
   system("cls");
   printf("修改成功!");
   Sleep(1000);
     break;
      }
  case 5:{
   system("cls");
   printf("请输入新的价格:");
   scanf("%lf",&pTemp->price);
   system("cls");
   printf("修改成功!");
   Sleep(1000);
     break;
      }
  case 6:{
   system("cls");
   printf("请输入新的评分:");
   scanf("%lf",&pTemp->grade);
   system("cls");
   printf("修改成功!");
   Sleep(1000);
     break;
      }
  case 0:break;
  default:printf("输入错误,请重新输入");
   system("pause");
  }
  if(bk==0)
  break;
  }
  Save_Stu(phead);
  return phead;
 }
 else
 {
 printf("无该电影信息!");
 Sleep(1000);
 return phead;
 }
}
void menu1()
{
 pticket phead;
 phead = (pticket)malloc(sizeof(ticket));
 phead->next = NULL;
 router_Stu(phead);
 char P,a[200];
 char choice;
 int bk;
 while(1)
 {
 system("cls");
 print3();
 fflush(stdin);
 printf("请输入指令:");
 scanf("%s",a);
 bk=back(a);
 switch(bk)
 {
  case 1: {print_stu1(phead); //查看
     system("cls");
     break;}
  case 2:{phead=searchmenu(phead);  //查找
     system("cls");
      break;}
  case 3:{phead=sortmenu(phead);  //排序
    system("cls");
      break;}
  case 4:{
  print_stu4(phead);
  system("cls");//打印报表
  break;
  }
  case 0:{
    print2();
    exit(1);
      }
   default:{printf("输入错误!请重新输入\n");
    system("pause");}
 }
 }
}
void meun()
{
 pticket phead;
 phead = (pticket)malloc(sizeof(ticket));
 phead->next = NULL;
 router_Stu(phead);
 char P,a[200];
 char choice;
 int bk;
 while(1)
 {
 system("cls");
 print();
 fflush(stdin);
 printf("请输入指令:");
 scanf("%s",a);
 bk=back(a);
 switch(bk)
 {
   case 1:{phead=Insert(phead);   //插入
    system("cls");
    break;}
  case 2:{print_stu1(phead); //查看
     system("cls");
     break;}
  case 3:{phead=searchmenu(phead);  //查找
     system("cls");
      break;}
  case 4:{phead=revise(phead);   // 修改
     system("cls");
     break;}
  case 5:{phead=sortmenu(phead);  //排序
    system("cls");
      break;}
  case 6:{phead=delete_Stu(phead); //删除
     system("cls");
     break;}
   case 0:{
    print2();
   exit(1);
      }
   default:{printf("输入错误!请重新输入\n");
    system("pause");}
  }
 }
 free(phead);
}
void main()        //主函数
{
 system("color 3A");
 print1();
 login_acc();
}

pticket Create(pticket pHead)      //创建链表
{
  fflush(stdin);
  system("cls");
  char choice;
  while(1)
 {
   printf("确定重新输入所有信息麽?\n如果重新输入,之前所有信息会被删除!\n请谨慎选择!(Y or N)\n");
   if(panduan(choice)==1)
   break;
   else
   return pHead;
 }
 pticket pNew,pEnd;
 iCount=0;
 fflush(stdin);
 pEnd=pHead;
 do
 {
 pNew=(pticket)malloc(sizeof(ticket));
 if(pNew==NULL)
  return pHead;
 printf("请输入代码:");
   scanf("%s",pNew->number);
 printf("请输入名称:");
 scanf("%s",pNew->name);
 printf("请输入影院:");
 scanf("%s",&pNew->cinema);
 printf("请输入时长:");
 scanf("%d",&pNew->time);
 printf("请输入价格:");
 scanf("%lf",&pNew->price);
 printf("请输入评分:");
 scanf("%lf",&pNew->grade);
 pEnd->next=pNew;
 pEnd=pNew;
 iCount++;
 fflush(stdin);
 printf("是否继续? Y or N\n");
 choice=getchar();
 getchar();
 while(choice!='y'&&choice!='Y'&&choice!='n'&&choice!='N')
 {
  printf("输入错误!请重新输入您的选择:\n");
   choice=getchar();
   getchar();
 }
 getchar();
 }while(choice=='y'||choice=='Y');
 pEnd->next=NULL;
 system("cls");
 return pHead;
}

很简易的一个影院管理系统,写出来也只能是一个参考,菜鸡代码,希望有用。

另附 stata.h文件

#ifndef state_h
#define state_h
typedef struct accout
{
 char pass[20];
 char name[20];
 struct accout *next;
}Accout,*pAccout;

typedef struct ticket
{
 char number[15];
 char name[30];
 char cinema[30];
 int time;
 double price;
 double grade;
 struct student *next;
}ticket,*pticket;

pAccout router_acc(pAccout ahead);  //读取账户信息
//void pAccout save_acc(pAccout ahead); //保存账户
void login_acc();     //登录函数
void login_printf();    //登录界面
pAccout login_panduan(pAccout ahead);

pticket Create(pticket phead); //声明创建链表
void meun();     //综合
void print();    //主菜单
void print1();   //主界面
void print2();   //退出界面
pticket searchmenu(pticket phead);  //查询子系统菜单
pticket search1(pticket phead);  //学号查询
pticket search2(pticket phead);  //姓名查询
pticket search3(pticket phead);  

pticket sortmenu(pticket phead);   //排序子系统菜单
pticket sort1(pticket phead);    //年龄排序
pticket sort2(pticket phead);    //平均分排序
pticket sort3(pticket phead);    //总分排序
pticket sort_1(pticket phead);
pticket sort_2(pticket phead);
pticket sort_3(pticket phead);  

pticket Insert(pticket phead); //新学生信息录入
void print_stu1(pticket phead);//打印学生信息
void print_stu2();//学生信息表格 

pticket delete_Stu(pticket phead);  //删除信息 

void Save_Stu(pticket phead);//信息保存
pticket router_Stu(pticket phead); //信息读取 

pticket revise(pticket phead); //修改信息 

int panduan(char choice);     //布尔判断
int back(char *a);  //返回整数函数
#endif

具体的设计思路及流程图如下所示:

各个模块详细的功能描述。

(1)、主函数

主函数从文件中读取文件,根据每个字符对应的ASCII码的数值,统计各字符出现的次数,用s数组存取出现的字符,用w数组存取各字符的权值,进行树的创建与各字符的编码。

(2)、树的创建

首先将哈夫曼树置空,根据字符的个数确定需要的初始化的长度,如果有n个字符,则会有2*n-1个结点,将前n个结点的左右孩子父亲结点置空,将对应的权值存入,在前n个结点中选出没有父亲结点的最大值和最小值,进行相加,将和存入新的节点中,并更新对应孩子结点的父亲结点,及相应的父亲结点。

(3)、对每个字符进行编码

从叶子结点向根回溯,将建立好的哈夫曼树进行编码,如果是左孩子则编码为0,如果是右孩子则编码为1,当回溯到根结点时,则这个字符编码结束,将字符对应的编码存入到hc数组中,不断重复此步骤,直至所有的字符都编码结束。

(4)、对文件里的文件进行编码

将文件中的文章通过fgetc();进行读出,将读出的字符一一的读入到c数组中,如果c数组中的字符与s数组中的字符一致,则输出其对应的hc数组中的编码,并将其存入到文件中。

(5)、对文件里的文件进行译码

译码过程不同于编码过程,译码过程是从根结点向叶子结点回溯如果是0则进入左孩子,如果是1则进入右孩子,由于哈夫曼树是一棵最小二叉树,所以哈夫曼树的结点只能是0或者2,其中一个结点若为空,则证明其为叶子结点,当遇到叶子结点,则输出叶子结点对应的字符,将译码后的字符串记录到文件中。

更多学习资料请关注专题《管理系统开发》。

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

(0)

相关推荐

  • C语言学生管理系统源码分享

    本文实例为大家分享了C语言学生管理系统源码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> //结构体可以存放的学生信息最大个数,不可变变量 int const MAX_LENGTH=100; //学生信息结构体数组,最多可以存放100个学生信息 struct student{ int id; //学号 char *name; //姓名 int age; //年龄 float c_score; //C语言成绩 float engl

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • C语言学生成绩管理系统源代码

    大学C语言实训课,C语言学生成绩管理系统,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; float kaoshi; double zongping; }stu[4]; void main() { void a(); void b(); void

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • 学生成绩管理系统C语言代码实现

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct person //定义结构体 { char num[10]; //学号 char name[20]; //姓名 float cyuyan; //C语言成绩 float en; //物理学成绩 float ji; //原子物理成绩

  • C语言图书管理系统简洁版

    DOS界面的图书管理系统,具体内容如下 程序分为两块:管理员操作(收录图书.删除图书等)和会员操作(注册.借书.还书等): 1.管理员操作界面 2.会员操作界面 global.h头文件:(程序中只使用了一个编写的头文件,在这里存放了所有的接口函数以及需要使用到的头文件,还有结构体的定义) #include "iostream" #include "string" #include "fstream" #include "conio.h&

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

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

    本文实例为大家分享了C语言实现影院管理系统程序的具体代码,供大家参考,具体内容如下 **影院管理系统基本运行图** 下面是实现全部功能的函数与解析与思路 **结构体与预定义** #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include<windows.h> typedef struct accout {     char pass[20];

  • C语言实现影院管理系统

    本文实例为大家分享了C语言影院管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> #include"state.h" #define change 3 int iCount; int n; //*****************注册*****************// void router_

  • C语言实现影院售票管理系统

    本文实例为大家分享了C语言实现影院售票管理系统的具体代码,供大家参考,具体内容如下 前言 最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,希望能对大家有帮助. 一.概要设计 1.基本信息 数据类型:链表 typedef struct node {     char name[N];                  // 名称     char type[N];                  // 类型     int time;              

  • C语言实现电影管理系统

    本文实例为大家分享了C语言实现电影管理系统的具体代码,供大家参考,具体内容如下 文件目录 说明: user.txt 储存用户名和密码 空格隔开 data.txt 单行数据分别为:电影名 评分 场次 时长 展厅号 票价 时间段 场次对应后面有几个时间段 原码 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct a{     char name[100]; //电影名     int

  • C语言学生成绩管理系统小设计

    本文实例为大家分享了C语言学生成绩管理系统的具体代码,供大家参考,具体内容如下 一.本设计涉及的重要C语言知识有: 1.单链表的各种操作 2.文件流的操作 3.单链表的排序 二.本设计主要以下几个模块组成 1.学生成绩添加模块 2.学生成绩删除模块 3.学生成绩修改模块 4.学生成绩检索模块 5.学生成绩显示模块(包括成绩排序) 6.学生成绩保存模块 效果图: 本设计大概5.6百行代码左右,通过这个设计,本人感觉C语言熟练了很多, 希望能对像我一样的C语言菜鸟同学会有点帮助,废话少说,咱们上代码

  • C语言学生成绩管理系统课程设计

    学生成绩管理系统是比较适合初学者的.它涵盖了c语言几乎知识.对于学了c语言的人,把这个课程设计搞好(当然自己能设计出来是要有很好的基础).不管自己能不能够完成,最重要的是能弄懂.参考其他资料,试着自己编写是不错的选择.这个课程设计也是我参照资料,自己编写的.自己适当地增加了一些功能.不过,编的不够那么专业吧. #include<stdio.h> #include<string.h> #include<stdlib.h> #define size 100 char* cl

  • C语言实现图书管理系统

    目前为止跟着学校进度学习C语言大概半年左右,基础学习只学到了指针,学得非常浅.说实话,起初对C语言的印象---只是一个学习计算机语言的敲门砖,对具体C语言如何应用等,非常迷茫.直到大一下半学期的高级语言设计课程之后,试过dos运行的图形化界面的完整小程序,才发现C语言的魅力. ok,废话不多说了,下面是我第二节课的作品----C语言的图书管理系统.一个简单的小程序.并非纯原创,是基于网络搜索到的"学生管理系统"改编而成的.通过直接浏览.修改一个完整的代码,我的收获颇丰.我认为这样比枯燥

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言学生学籍管理系统课程设计

    C语言学生学籍管理系统做了好长时间的,里面有点小问题,希望大佬找到并帮忙改改,注意输入密码三次错误会自动注销用户,密码123456 代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct student { char xuehao[100];//输入学号 char name[100];//输入姓名 char sex[100];//输入性别 int

随机推荐