1. 程式人生 > 程式設計 >C語言實現影院管理系統

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",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->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->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=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=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->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,&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->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,其中一個結點若為空,則證明其為葉子結點,當遇到葉子結點,則輸出葉子結點對應的字元,將譯碼後的字串記錄到檔案中。

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。