欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實現(xiàn)影院售票管理系統(tǒng)

 更新時間:2022年08月12日 10:35:29   作者:WE-ubytt  
這篇文章主要為大家詳細介紹了C語言實現(xiàn)影院售票管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C語言實現(xiàn)影院售票管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

前言

最近剛好在寫自己的課設(shè),匆匆忙忙寫出來的課設(shè)系統(tǒng),仍有不足,拿出來和大家分享一下,希望能對大家有幫助。

一、概要設(shè)計

1、基本信息

數(shù)據(jù)類型:鏈表

typedef struct node
{
? ? char name[N]; ? ? ? ? ??? ??? ?// 名稱
? ? char type[N]; ? ? ? ? ??? ??? ?// 類型
? ? int time; ? ? ? ? ? ? ??? ??? ?// 時長
? ? char day[N]; ? ? ? ? ? ??? ?// 日期
? ? char start[N]; ? ? ? ? ?? ??? ?// 起始時間
? ? char site[N]; ? ? ? ? ? ?? ?// 地點
? ? int price; ? ? ? ? ? ? ??? ?// 價格
? ? int num; ? ? ? ? ? ? ? ??? ?// 數(shù)量
? ? int id; ? ? ? ? ? ? ? ? ?? ?// 編號
? ? int seat[N][N]; ? ? ? ?? ??? ?// 座位
? ? struct node* next; ? ? ? ?? ?// 指針域
}NODE;

實現(xiàn)功能:

typedef struct ticket
{
? ? char name[N]; ? ? ? ? ? ?? ?// 名稱
? ? char type[N]; ? ? ? ? ? ?? ?// 類型
? ? int time; ? ? ? ? ? ? ??? ??? ?// 時長
? ? char day[N]; ? ? ? ? ? ??? ?// 日期
? ? char start[N]; ? ? ? ? ??? ?// 起始時間
? ? char site[N]; ? ? ? ? ? ?? ?// 地點
? ? int price; ? ? ? ? ? ? ?? ??? ?// 價格
? ? int id; ? ? ? ? ? ? ? ? ? ?? ?// 編號
? ? char username[N]; ? ? ? ??? ?// 用戶名
? ? int x; ? ? ? ? ? ? ? ??? ??? ?// 行
? ? int y; ? ? ? ? ? ? ? ?? ? ?? ?// 列
? ? int istake; ? ? ? ? ? ? ? ??? ?// 是否取票
? ? struct ticket* next; ? ? ??? ?// 指針域
}TICKET;

實現(xiàn)功能:

開發(fā)環(huán)境:VS2019

2、功能模塊圖

3、功能描述

(1)管理員

①增加影片:新增影片至系統(tǒng)中
②顯示影片:顯示系統(tǒng)中的所有影片信息
③查找影片:通過姓名、類型、編號查詢影片信息
④修改影片:通過編號查詢影片,修改影片信息
⑤刪除影片:通過編號查詢影片,刪除影片信息
⑥排序影片:按照時長、日期、價格、數(shù)量排序影片信息

(2)用戶

①購票:排序影片信息,顯示影片信息,通過編號查詢影片信息,購票后顯示票務(wù)信息
②取票:顯示票務(wù)信息,選擇是否取票
③退票:顯示票務(wù)信息,選擇是否退票

4、調(diào)用關(guān)系圖

二、完整代碼

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<conio.h>
#define N 100

typedef struct administrator
{
?? ?char id[N];?? ??? ??? ??? ??? ??? ??? ??? ?// 用戶名
?? ?char password[N];?? ??? ??? ??? ??? ??? ?// 密碼

?? ?struct administrator* next;?? ??? ??? ??? ?// 指針域
}ADMIN;

typedef struct user
{
?? ?char id[N];?? ??? ??? ??? ??? ??? ??? ??? ?// 用戶名
?? ?char password[N];?? ??? ??? ??? ??? ??? ?// 密碼

?? ?struct user* next;?? ??? ??? ??? ??? ??? ?// 指針域
}USER;

typedef struct node
{
?? ?char name[N];?? ??? ??? ??? ?// 名稱
?? ?char type[N];?? ??? ??? ??? ?// 類型
?? ?int time;?? ??? ??? ??? ??? ?// 時長
?? ?char day[N];?? ??? ??? ??? ?// 日期
?? ?char start[N];?? ??? ??? ??? ?// 起始時間
?? ?char site[N];?? ??? ??? ??? ?// 地點
?? ?int price;?? ??? ??? ??? ??? ?// 價格
?? ?int num;?? ??? ??? ??? ??? ?// 數(shù)量
?? ?int id;?? ??? ??? ??? ??? ??? ?// 編號
?? ?int seat[N][N];?? ??? ??? ??? ?// 座位

?? ?struct node* next;?? ??? ??? ?// 指針域
}NODE;

typedef struct ticket
{
?? ?char name[N];?? ??? ??? ??? ?// 名稱
?? ?char type[N];?? ??? ??? ??? ?// 類型
?? ?int time;?? ??? ??? ??? ??? ?// 時長
?? ?char day[N];?? ??? ??? ??? ?// 日期
?? ?char start[N];?? ??? ??? ??? ?// 起始時間
?? ?char site[N];?? ??? ??? ??? ?// 地點
?? ?int price;?? ??? ??? ??? ??? ?// 價格
?? ?int id;?? ??? ??? ??? ??? ??? ?// 編號

?? ?char username[N];?? ??? ??? ?// 用戶名
?? ?int x;?? ??? ??? ??? ??? ??? ?// 行
?? ?int y;?? ??? ??? ??? ??? ??? ?// 列
?? ?int istake;?? ??? ??? ??? ??? ?// 是否取票

?? ?struct ticket* next;?? ??? ?// 指針域
}TICKET;

ADMIN a;?? ??? ??? ??? ??? ??? ??? ??? ??? ?// 管理員信息
USER b;?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?// 用戶信息
NODE list;?? ??? ??? ??? ??? ??? ??? ??? ??? ?// 影片信息
TICKET c;?? ??? ??? ??? ??? ??? ??? ??? ??? ?// 購票

char fusername[N], fpassword[N];?? ??? ??? ?// 用戶名/密碼(文件)
char username[N], password[N];?? ??? ??? ??? ?// 用戶名/密碼(輸入)
int flag = 0;?? ??? ??? ??? ??? ??? ??? ??? ?// 判斷是否登錄成功

// 管理員登錄
void menu_Login_admin();?? ??? ??? ??? ??? ?// 界面
void fun_Login_admin();?? ??? ??? ??? ??? ??? ?// 功能
void admin_login();?? ??? ??? ??? ??? ??? ??? ?// 登錄
int Read_admin_login();?? ??? ??? ??? ??? ??? ?// 文件讀取

// 用戶登錄
void menu_Login_user();?? ??? ??? ??? ??? ??? ?// 界面
void fun_Login_user();?? ??? ??? ??? ??? ??? ?// 功能
void user_login(USER* L);?? ??? ??? ??? ??? ?// 登錄
int Read_user(USER* L);?? ??? ??? ??? ??? ??? ?// 用戶登錄文件讀取
int Read_user_login(USER* L);?? ??? ??? ??? ?// 判斷
int user_logon(USER* L);?? ??? ??? ??? ??? ?// 注冊
void Add1(USER* L, USER e);?? ??? ??? ??? ??? ?// 插入

// 讀取文件
int Read_FILE(NODE* L);

// 保存文件
int Save_FILE(NODE* L);

// 菜單
void welcome();?? ??? ??? ??? ??? ??? ??? ??? ?// 主菜單
void fun_welcome();?? ??? ??? ??? ??? ??? ??? ?// 主菜單功能
void menu_administrator();?? ??? ??? ??? ??? ?// 管理員界面
void fun_administrator();?? ??? ??? ??? ??? ?// 管理員功能
void menu_user();?? ??? ??? ??? ??? ??? ??? ?// 用戶界面
void fun_user();?? ??? ??? ??? ??? ??? ??? ?// 用戶功能

// 增加影片
void Add(NODE* L, NODE e);?? ??? ??? ??? ??? ?// 功能
void Add_Printf();?? ??? ??? ??? ??? ??? ??? ?// 界面

// 查詢影片
void Search_Printf(NODE* L);?? ??? ??? ??? ??? ?// 界面
int Search_allname(char name[], NODE* L);?? ??? ?// 按名稱進行查找
NODE* Search_name(char name[], NODE* L);?? ??? ?// 按名稱進行查找第一個
int Search_type(char type[], NODE* L);?? ??? ??? ?// 按類型進行查找
NODE* Search_id(int id, NODE* L);?? ??? ??? ??? ?// 按編號進行查找

// 刪除影片
void Delete_Printf(NODE* L);?? ??? ??? ??? ?// 界面
void Delete(NODE* s);?? ??? ??? ??? ??? ??? ?// 功能

// 修改影片
void Fix(NODE* L);

// 顯示影片
void Print(NODE* L);?? ??? ??? ??? ??? ??? ?// 功能
void Print_Printf();?? ??? ??? ??? ??? ??? ?// 界面

// 排序影片
void Sort(NODE* L);
int cmp_big_time(NODE e1, NODE e2);?? ??? ??? ?// 時長從大到小
int cmp_big_day(NODE e1, NODE e2);?? ??? ??? ?// 日期從大到小
int cmp_big_price(NODE e1, NODE e2);?? ??? ?// 價格從大到小
int cmp_big_num(NODE e1, NODE e2);?? ??? ??? ?// 數(shù)量從大到小
int cmp_small_time(NODE e1, NODE e2);?? ??? ?// 時長從小到大
int cmp_small_day(NODE e1, NODE e2);?? ??? ?// 日期從小到大
int cmp_small_price(NODE e1, NODE e2);?? ??? ?// 價格從小到大
int cmp_small_num(NODE e1, NODE e2);?? ??? ?// 數(shù)量從小到大

// 購票
void Buy_ticket();?? ??? ??? ??? ??? ??? ??? ?// 功能
int Buy_ticket_Printf();?? ??? ??? ??? ??? ?// 界面
void Add2(TICKET* L, TICKET e);?? ??? ??? ??? ?// 保存預(yù)定信息
int Save_TICKET(TICKET* L);?? ??? ??? ??? ??? ?// 文件保存售票信息
int Read_TICKET(TICKET* L);?? ??? ??? ??? ??? ?// 讀取售票信息

// 取票
void Collect_ticket();
// 打印票務(wù)信息
void Print_ticket(TICKET* L);
void Print_ticket_Printf();

// 退票
void Return_ticket();
void Print_ticket1(TICKET* L);?? ??? ??? ??? ??? ??? ?// 打印信息
TICKET* Find_ticket(TICKET* L, char username[]);?? ?// 查找前驅(qū)節(jié)點
void Delete_ticket(TICKET* s);?? ??? ??? ??? ??? ??? ?// 刪除

// 退出系統(tǒng)
void goodbye();

int main()
{
?? ?Read_FILE(&list);
?? ?Read_TICKET(&c);
?? ?Read_user(&b);

?? ?while (1)
?? ?{
?? ??? ?fun_welcome();
?? ?}

?? ?return 0;
}

// 主菜單
void welcome()
{
?? ?system("cls");
?? ?printf("****************************************************************\n");
?? ?printf("*********** ? ? ? ? ? ? ? 影院管理系統(tǒng) ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 1 ---- ?管理員 ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 2 ---- ?用戶 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 0 ---- ?退出 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("****************************************************************\n");

?? ?printf("【系統(tǒng)】請選擇你的身份(數(shù)字):");
}

// 主菜單功能
void fun_welcome()
{
?? ?int choice = 0;
?? ?welcome();
?? ?scanf("%d", &choice);
?? ?switch (choice)
?? ?{
?? ?case 1:// 管理員
?? ??? ?fun_administrator();
?? ??? ?break;
?? ?case 2:// 用戶
?? ??? ?fun_user();
?? ??? ?break;
?? ?case 0:// 退出
?? ??? ?goodbye();
?? ??? ?break;
?? ?}
}

// 管理員界面
void menu_administrator()
{
?? ?system("cls");
?? ?printf("【系統(tǒng)】歡迎%s?。?!\n", username);
?? ?printf("****************************************************************\n");
?? ?printf("*********** ? ? ? ? ? ? ? 歡迎!??! ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 1 ---- ?增加影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 2 ---- ?顯示影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 3 ---- ?查找影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 4 ---- ?修改影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 5 ---- ?刪除影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 6 ---- ?排序影片 ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 0 ---- ?退出 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("****************************************************************\n");

?? ?printf("【系統(tǒng)】請選擇你要實現(xiàn)的功能(數(shù)字):");
}

// 管理員功能
void fun_administrator()
{
?? ?fun_Login_admin();

?? ?if (flag == 1)
?? ?{
?? ??? ?int choice = 0;
?? ??? ?while (1)
?? ??? ?{
?? ??? ??? ?menu_administrator();
?? ??? ??? ?scanf("%d", &choice);
?? ??? ??? ?switch (choice)
?? ??? ??? ?{
?? ??? ??? ?case 1:// 增加影片
?? ??? ??? ??? ?Add_Printf();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:// 顯示影片
?? ??? ??? ??? ?Print(&list);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:// 查找影片
?? ??? ??? ??? ?Search_Printf(&list);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 4:// 修改影片
?? ??? ??? ??? ?Fix(&list);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 5:// 刪除影片
?? ??? ??? ??? ?Delete_Printf(&list);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 6:// 排序影片
?? ??? ??? ??? ?Sort(&list);
?? ??? ??? ??? ?break;
?? ??? ??? ?case 0:// 退出
?? ??? ??? ??? ?return;
?? ??? ??? ?}

?? ??? ??? ?printf("是否需要繼續(xù)操作?(Yes:1 / No:0):");
?? ??? ??? ?scanf("%d", &choice);

?? ??? ??? ?if (choice != 1)
?? ??? ??? ?{
?? ??? ??? ??? ?if (choice != 0)
?? ??? ??? ??? ??? ?printf("輸入錯誤!?。n");
?? ??? ??? ??? ?system("pause");
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

// 用戶界面
void menu_user()
{
?? ?system("cls");
?? ?printf("【系統(tǒng)】歡迎%s?。。n", username);
?? ?printf("****************************************************************\n");
?? ?printf("*********** ? ? ? ? ? ? ?歡迎光臨??! ? ? ? ? ? ? ? ?***********\n");
?? ?printf("*********** ? ? ? ? ? ? 1 ---- ?購票 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 2 ---- ?取票 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 3 ---- ?退票 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 0 ---- ?退出 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("****************************************************************\n");

?? ?printf("【系統(tǒng)】請選擇您要實現(xiàn)的功能(數(shù)字):");
}

// 用戶功能
void fun_user()
{
?? ?fun_Login_user();

?? ?if (flag == 1)
?? ?{
?? ??? ?int choice = 0;
?? ??? ?while (1)
?? ??? ?{
?? ??? ??? ?menu_user();
?? ??? ??? ?scanf("%d", &choice);
?? ??? ??? ?switch (choice)
?? ??? ??? ?{
?? ??? ??? ?case 1:// 購票
?? ??? ??? ??? ?Buy_ticket();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:// 取票
?? ??? ??? ??? ?Collect_ticket();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:// 退票
?? ??? ??? ??? ?Return_ticket();
?? ??? ??? ??? ?break;
?? ??? ??? ?case 0:// 退出
?? ??? ??? ??? ?return;
?? ??? ??? ?}

?? ??? ??? ?system("cls");

?? ??? ??? ?printf("【系統(tǒng)】是否需要繼續(xù)操作?(Yes:1 / No:0):");
?? ??? ??? ?scanf("%d", &choice);

?? ??? ??? ?if (choice != 1)
?? ??? ??? ?{
?? ??? ??? ??? ?if (choice != 0)
?? ??? ??? ??? ??? ?printf("【系統(tǒng)】輸入錯誤?。。n");
?? ??? ??? ??? ?system("pause");
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

// 管理員登錄界面
void menu_Login_admin()
{
?? ?system("cls");
?? ?printf("****************************************************************\n");
?? ?printf("*********** ? ? ? ? ? ? ? 管理員登錄 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 1 ---- ?登錄 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 0 ---- ?退出 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("****************************************************************\n");

?? ?printf("【系統(tǒng)】請選擇你要實現(xiàn)的功能(數(shù)字):");
}

// 管理員登錄功能
void fun_Login_admin()
{
?? ?int choice = 0;
?? ?menu_Login_admin();
?? ?scanf("%d", &choice);
?? ?switch (choice)
?? ?{
?? ?case 1:// 登錄
?? ??? ?admin_login();
?? ??? ?break;
?? ?case 0:// 退出
?? ??? ?flag = 0;
?? ??? ?return;
?? ?}
}

// 管理員登錄
void admin_login()
{
?? ?int cnt = 0;
?? ?do {
?? ??? ?printf("【系統(tǒng)】請輸入用戶名:");
?? ??? ?scanf("%s", username);
?? ??? ?getchar();

?? ??? ?printf("【系統(tǒng)】請輸入密碼:");
?? ??? ?char c;
?? ??? ?int i = 0;
?? ??? ?while ((c = getch()) != '\r')
?? ??? ?{
?? ??? ??? ?password[i] = c;
?? ??? ??? ?i++;
?? ??? ??? ?putchar('*');

?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?password[i] = '\0';

?? ??? ?cnt++;
?? ?} while (Read_admin_login() == 0 && cnt < 3);
}

// 管理員登錄文件讀取
int Read_admin_login()
{
?? ?FILE* fp = fopen("admin.txt", "r");

?? ?if (fp == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?while (fscanf(fp, "%s %s", fusername, fpassword) != EOF)
?? ?{
?? ??? ?fscanf(fp, "\n");
?? ??? ?if ((strcmp(fusername, username) == 0) && (strcmp(fpassword, password)) == 0)
?? ??? ?{
?? ??? ??? ?printf("【系統(tǒng)】登陸成功\n");
?? ??? ??? ?getch();
?? ??? ??? ?system("cls");
?? ??? ??? ?flag = 1;
?? ??? ??? ?return 1;
?? ??? ?}
?? ?}
?? ?printf("【系統(tǒng)】用戶名或密碼錯誤,請重新輸入\n");
?? ?getch();
?? ?system("pause");

?? ?return 0;
}

// 用戶登錄界面
void menu_Login_user()
{
?? ?system("cls");
?? ?printf("****************************************************************\n");
?? ?printf("*********** ? ? ? ? ? ? ? 用戶登錄 ? ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 1 ---- ?注冊 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 2 ---- ?登錄 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("*********** ? ? ? ? ? ? 0 ---- ?退出 ? ? ? ? ? ? ? ? ***********\n");
?? ?printf("****************************************************************\n");

?? ?printf("請選擇你要實現(xiàn)的功能(數(shù)字):");
}

// 用戶登錄功能
void fun_Login_user()
{
?? ?int choice = 0;
?? ?menu_Login_user();
?? ?scanf("%d", &choice);
?? ?switch (choice)
?? ?{
?? ?case 1:
?? ??? ?user_logon(&b);
?? ?case 2:
?? ??? ?user_login(&b);
?? ??? ?break;
?? ?case 0:
?? ??? ?flag = 0;
?? ??? ?return;
?? ?}
}

// 用戶登錄
void user_login(USER* L)
{
?? ?int cnt = 0;
?? ?do {
?? ??? ?printf("【系統(tǒng)】請輸入用戶名:");
?? ??? ?scanf("%s", username);
?? ??? ?getchar();

?? ??? ?printf("【系統(tǒng)】請輸入密碼:");
?? ??? ?char c;
?? ??? ?int i = 0;
?? ??? ?while ((c = getch()) != '\r')
?? ??? ?{
?? ??? ??? ?password[i] = c;
?? ??? ??? ?i++;
?? ??? ??? ?putchar('*');

?? ??? ?}
?? ??? ?printf("\n");
?? ??? ?password[i] = '\0';

?? ??? ?cnt++;
?? ?} while (Read_user_login(L) == 0 && cnt < 3);
}

int Read_user(USER* L)
{
?? ?FILE* fp = fopen("user.txt", "r");

?? ?if (fp == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?USER st;
?? ?USER* s = NULL;
?? ?USER* t = L;

?? ?while (fscanf(fp, "%s %s", st.id, st.password) != EOF)
?? ?{
?? ??? ?s = (USER*)malloc(sizeof(USER));
?? ??? ?*s = st;

?? ??? ?// 尾插法
?? ??? ?t->next = s;
?? ??? ?t = s;
?? ??? ?t->next = NULL;
?? ?}

?? ?fclose(fp);?? ?// 打開文件后記得關(guān)閉

?? ?return 1;
}

// 用戶登錄文件讀取
int Read_user_login(USER* L)
{
?? ?USER* q = L->next;
?? ?while (q != NULL)
?? ?{
?? ??? ?if ((strcmp(q->id, username) == 0) && (strcmp(q->password, password)) == 0)
?? ??? ?{
?? ??? ??? ?printf("登陸成功\n");
?? ??? ??? ?getch();
?? ??? ??? ?system("cls");
?? ??? ??? ?flag = 1;
?? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?q = q->next;
?? ?}
?? ?printf("【系統(tǒng)】用戶名或密碼錯誤,請重新輸入\n");
?? ?getch();
?? ?system("pause");

?? ?return 0;
}

// 用戶注冊
int user_logon(USER* L)
{
?? ?FILE* pf = fopen("user.txt", "w");

?? ?if (pf == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?USER st;

?? ?printf("請輸入用戶名:");
?? ?scanf("%s", st.id);
?? ?printf("請輸入密碼:");
?? ?scanf("%s", st.password);

?? ?Add1(&b, st);

?? ?USER* p = L->next;

?? ?while (p != NULL)
?? ?{
?? ??? ?fprintf(pf, "%s %s\n", p->id, p->password);
?? ??? ?p = p->next;
?? ?}

?? ?fclose(pf);

?? ?system("cls");
?? ?printf("注冊成功!\n");
}

// 插入
void Add1(USER* L, USER e)
{
?? ?// 頭插法
?? ?USER* p = L;
?? ?USER* s = (USER*)malloc(sizeof(USER));
?? ?*s = e;

?? ?s->next = p->next;
?? ?p->next = s;
}

// 讀取文件
int Read_FILE(NODE* L)
{
?? ?FILE* pfRead = fopen("ticket.txt", "r");
?? ?NODE st;
?? ?NODE* s = NULL;
?? ?NODE* t = L;

?? ?if (pfRead == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?while (fscanf(pfRead, "%s %s %d %s %s %s %d %d %d", st.name, st.type, &st.time, st.day, st.start, st.site, &st.price, &st.num, &st.id) != EOF)
?? ?{
?? ??? ?// 讀取座位表
?? ??? ?for (int i = 1; i <= 10; i++)
?? ??? ?{
?? ??? ??? ?for (int j = 1; j <= 10; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?fscanf(pfRead, "%d ", &st.seat[i][j]);
?? ??? ??? ?}
?? ??? ??? ?fscanf(pfRead, "\n");
?? ??? ?}

?? ??? ?s = (NODE*)malloc(sizeof(NODE));
?? ??? ?*s = st;

?? ??? ?// 尾插法
?? ??? ?t->next = s;
?? ??? ?t = s;
?? ??? ?t->next = NULL;
?? ?}

?? ?fclose(pfRead);?? ?// 打開文件后記得關(guān)閉

?? ?return 1;
}

// 保存文件
int Save_FILE(NODE* L)
{
?? ?FILE* pfWrite = fopen("ticket.txt", "w");
?? ?if (pfWrite == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?NODE* p = L->next;

?? ?while (p != NULL)
?? ?{
?? ??? ?fprintf(pfWrite, "%s %s %d %s %s %s %d %d %d\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->num, p->id);
?? ??? ?// 保存座位表
?? ??? ?for (int i = 1; i <= 10; i++)
?? ??? ?{
?? ??? ??? ?for (int j = 1; j <= 10; j++)
?? ??? ??? ?{
?? ??? ??? ??? ?fprintf(pfWrite, "%d ", p->seat[i][j]);
?? ??? ??? ?}
?? ??? ??? ?fprintf(pfWrite, "\n");
?? ??? ?}

?? ??? ?p = p->next;
?? ?}

?? ?// 打開文件后記得關(guān)閉
?? ?fclose(pfWrite);

?? ?return 1;
}

// 增加影片
void Add_Printf()
{
?? ?system("cls");

?? ?NODE st;
?? ?printf("【系統(tǒng)】請輸入新增影片的相關(guān)信息:\n");

?? ?printf("名稱:");
?? ?scanf("%s", st.name);
?? ?printf("類型:");
?? ?scanf("%s", st.type);
?? ?printf("時長:");
?? ?scanf("%d", &st.time);
?? ?printf("日期:");
?? ?scanf("%s", st.day);
?? ?printf("起始時間:");
?? ?scanf("%s", st.start);
?? ?printf("地點:");
?? ?scanf("%s", st.site);
?? ?printf("價格:");
?? ?scanf("%d", &st.price);
?? ?printf("數(shù)量:");
?? ?scanf("%d", &st.num);
?? ?printf("編號:");
?? ?scanf("%d", &st.id);
?? ?
?? ?for (int i = 1; i <= 10; i++)
?? ?{
?? ??? ?for (int j = 1; j <= 10; j++)
?? ??? ?{
?? ??? ??? ?st.seat[i][j] = 0;
?? ??? ?}
?? ?}

?? ?Add(&list, st);
}

void Add(NODE* L, NODE e)
{
?? ?// 頭插法
?? ?NODE* p = L;
?? ?NODE* s = (NODE*)malloc(sizeof(NODE));
?? ?*s = e;

?? ?s->next = p->next;
?? ?p->next = s;

?? ?Save_FILE(L);
}

// 刪除影片
void Delete_Printf(NODE* L)
{
?? ?system("cls");

?? ?int id;
?? ?node* p;

?? ?printf("【系統(tǒng)】請輸入要刪除的影片的編號:");
?? ?scanf("%d", &id);
?? ?NODE* st = Search_id(id, L);
?? ?p = st;

?? ?if (st == NULL)
?? ?{
?? ??? ?printf("找不到該影片!\n");
?? ??? ?return;
?? ?}

?? ?st = st->next;
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price, st->num, st->id);
?? ?printf("_________________________________________________________________________________________________________\n");

?? ?Delete(p);

?? ?// 保存信息
?? ?Save_FILE(L);
}

void Delete(NODE* s)
{
?? ?NODE* t = s->next;

?? ?s->next = t->next;
?? ?t->next = NULL;

?? ?free(t);
}

// 修改影片
void Fix(NODE* L)
{
?? ?system("cls");

?? ?int id;
?? ?printf("【系統(tǒng)】請輸入要修改的影片的編號:");
?? ?scanf("%d", &id);

?? ?NODE* st = Search_id(id, L);

?? ?if (st == NULL)
?? ?{
?? ??? ?printf("無法找到該影片!\n");
?? ??? ?return;
?? ?}

?? ?st = st->next;

?? ?int choice = 0;
?? ?while (1)
?? ?{
?? ??? ?system("cls");

?? ??? ?// 輸出一次所要修改的影片信息
?? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t|\n");
?? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price, st->num, st->id);
?? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?
?? ??? ?printf("|\t修改名稱 ? ? ---- 1\t|\n");
?? ??? ?printf("|\t修改類型 ? ? ---- 2\t|\n");
?? ??? ?printf("|\t修改時長 ? ? ---- 3\t|\n");
?? ??? ?printf("|\t修改日期 ? ? ---- 4\t|\n");
?? ??? ?printf("|\t修改起始時間 ---- 5\t|\n");
?? ??? ?printf("|\t修改地點 ? ? ---- 6\t|\n");
?? ??? ?printf("|\t修改價格 ? ? ---- 7\t|\n");
?? ??? ?printf("|\t修改數(shù)量 ? ? ---- 8\t|\n");
?? ??? ?printf("|\t修改編號 ? ? ---- 9\t|\n");
?? ??? ?printf("|\t退出 ? ? ? ? ---- 0\t|\n");
?? ??? ?printf("________________________________\n");

?? ??? ?printf("【系統(tǒng)】請輸入要修改的信息:");
?? ??? ?scanf("%d", &choice);

?? ??? ?switch (choice)
?? ??? ?{
?? ??? ?case 1:
?? ??? ??? ?printf("【系統(tǒng)】請輸入名稱:");
?? ??? ??? ?scanf("%s", st->name);
?? ??? ??? ?break;
?? ??? ?case 2:
?? ??? ??? ?printf("【系統(tǒng)】請輸入類型:");
?? ??? ??? ?scanf("%s", st->type);
?? ??? ??? ?break;
?? ??? ?case 3:
?? ??? ??? ?printf("【系統(tǒng)】請輸入時長:");
?? ??? ??? ?scanf("%d", &st->time);
?? ??? ??? ?break;
?? ??? ?case 4:
?? ??? ??? ?printf("【系統(tǒng)】請輸入日期:");
?? ??? ??? ?scanf("%s", st->day);
?? ??? ??? ?break;
?? ??? ?case 5:
?? ??? ??? ?printf("【系統(tǒng)】請輸入起始時間:");
?? ??? ??? ?scanf("%s", st->start);
?? ??? ??? ?break;
?? ??? ?case 6:
?? ??? ??? ?printf("【系統(tǒng)】請輸入地點:");
?? ??? ??? ?scanf("%s", st->site);
?? ??? ??? ?break;
?? ??? ?case 7:
?? ??? ??? ?printf("【系統(tǒng)】請輸入價格:");
?? ??? ??? ?scanf("%d", &st->price);
?? ??? ??? ?break;
?? ??? ?case 8:
?? ??? ??? ?printf("【系統(tǒng)】請輸入數(shù)量:");
?? ??? ??? ?scanf("%d", &st->num);
?? ??? ??? ?break;
?? ??? ?case 9:
?? ??? ??? ?printf("【系統(tǒng)】請輸入編號:");
?? ??? ??? ?scanf("%d", &st->id);
?? ??? ??? ?break;
?? ??? ?case 0:
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?printf("是否繼續(xù)修改該影片信息?(Yes:1 / No:0):");
?? ??? ?scanf("%d", &choice);
?? ??? ?if (choice == 0)
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ?}

?? ?// 修改完成后該影片的信息
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t|\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price, st->num, st->id);
?? ?printf("_________________________________________________________________________________________________________\n");

?? ?// 保存信息
?? ?Save_FILE(L);
}

// 查詢影片
void Search_Printf(NODE* L)
{
?? ?system("cls");

?? ?int choice = 0;
?? ?printf("按照名稱查詢 ---- 1\n");
?? ?printf("按照類型查詢 ---- 2\n");
?? ?printf("按照編號查詢 ---- 3\n");
?? ?printf("【系統(tǒng)】請輸入查詢方式:");
?? ?scanf("%d", &choice);

?? ?node* st;

?? ?if (choice == 1)
?? ?{
?? ??? ?char name[N];
?? ??? ?int cnt = 0;

?? ??? ?printf("【系統(tǒng)】請輸入要查詢的影片名稱:");
?? ??? ?scanf("%s", name);

?? ??? ?cnt = Search_allname(name, L);

?? ??? ?if (cnt == 0)
?? ??? ?{
?? ??? ??? ?printf("無法找到該類型的影片!\n");
?? ??? ?}
?? ?}
?? ?else if (choice == 2)
?? ?{
?? ??? ?char type[N];
?? ??? ?int cnt = 0;

?? ??? ?printf("【系統(tǒng)】請輸入要查詢的影片類型:");
?? ??? ?scanf("%s", type);

?? ??? ?cnt = Search_type(type, L);

?? ??? ?if (cnt == 0)
?? ??? ?{
?? ??? ??? ?printf("無法找到該類型的影片!\n");
?? ??? ?}
?? ?}
?? ?else if (choice == 3)
?? ?{
?? ??? ?int id;

?? ??? ?printf("【系統(tǒng)】請輸入要查詢的影片編號:");
?? ??? ?scanf("%d", &id);

?? ??? ?st = Search_id(id, L);

?? ??? ?if (st == NULL)
?? ??? ?{
?? ??? ??? ?printf("查無此人!\n");
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?st = st->next;

?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price, st->num, st->id);
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?}
?? ?}
}

// 按名稱進行查找
int Search_allname(char name[], NODE* L)
{
?? ?int cnt = 0;

?? ?node* p = L;

?? ?while (p->next != NULL)
?? ?{
?? ??? ?p = p->next;

?? ??? ?if (strcmp(name, p->name) == 0)
?? ??? ?{
?? ??? ??? ?cnt++;

?? ??? ??? ?if (cnt == 1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ??? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ??? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?}
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->num, p->id);
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?}

?? ?}
?? ?return cnt;
}

// 按名稱進行查找第一個
NODE* Search_name(char name[], NODE* L)
{
?? ?NODE* p = L;

?? ?while (p->next != NULL)
?? ?{
?? ??? ?if (strcmp(name, p->next->name) == 0)
?? ??? ?{
?? ??? ??? ?return p;
?? ??? ?}
?? ??? ?p = p->next;
?? ?}
?? ?return NULL;
}

// 按編號進行查找
NODE* Search_id(int id, NODE* L)
{
?? ?NODE* p = L;

?? ?while (p->next != NULL)
?? ?{
?? ??? ?if (p->next->id == id)
?? ??? ?{
?? ??? ??? ?return p;
?? ??? ?}
?? ??? ?p = p->next;
?? ?}
?? ?return NULL;
}

// 按類型進行查找
int Search_type(char type[], NODE* L)
{
?? ?int cnt = 0;

?? ?node* p = L;

?? ?while (p->next != NULL)
?? ?{
?? ??? ?p = p->next;

?? ??? ?if (strcmp(type, p->type) == 0)
?? ??? ?{
?? ??? ??? ?cnt++;

?? ??? ??? ?if (cnt == 1)
?? ??? ??? ?{
?? ??? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ??? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ??? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?}
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->num, p->id);
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ?}
?? ??? ?
?? ?}

?? ?return cnt;
}

// 顯示影片
void Print(NODE* L)
{
?? ?system("cls");

?? ?node* p = L->next;
?? ?Print_Printf();

?? ?if (p != NULL)
?? ?{
?? ??? ?while (p != NULL)
?? ??? ?{
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->num, p->id);
?? ??? ??? ?printf("_________________________________________________________________________________________________________\n");
?? ??? ??? ?p = p->next;
?? ??? ?}
?? ?}
}

void Print_Printf()
{
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ?printf("_________________________________________________________________________________________________________\n");
}

// 排序影片
void Sort(NODE* L)
{
?? ?system("cls");

?? ?int choice = 0;
?? ?printf("按照時長從大到小排序 ---- 1\n");
?? ?printf("按照時長從小到大排序 ---- 2\n");
?? ?printf("按照日期從大到小排序 ---- 3\n");
?? ?printf("按照日期從小到大排序 ---- 4\n");
?? ?printf("按照價格從大到小排序 ---- 5\n");
?? ?printf("按照價格從小到大排序 ---- 6\n");
?? ?printf("按照數(shù)量從大到小排序 ---- 7\n");
?? ?printf("按照數(shù)量從小到大排序 ---- 8\n\n");
?? ?printf("【系統(tǒng)】請選擇排序方式:");
?? ?scanf("%d", &choice);

?? ?int flag = 0;
?? ?for (node* p = L->next; p != NULL; p = p->next)
?? ?{
?? ??? ?for (node* q = p; q != NULL; q = q->next)
?? ??? ?{
?? ??? ??? ?switch (choice)
?? ??? ??? ?{
?? ??? ??? ?case 1:
?? ??? ??? ??? ?if (!cmp_big_time(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:
?? ??? ??? ??? ?if (!cmp_small_time(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:
?? ??? ??? ??? ?if (!cmp_big_day(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 4:
?? ??? ??? ??? ?if (!cmp_small_day(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 5:
?? ??? ??? ??? ?if (!cmp_big_price(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 6:
?? ??? ??? ??? ?if (!cmp_small_price(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 7:
?? ??? ??? ??? ?if (!cmp_big_num(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?case 8:
?? ??? ??? ??? ?if (!cmp_small_num(*p, *q))
?? ??? ??? ??? ?{
?? ??? ??? ??? ??? ?flag = 1;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?break;
?? ??? ??? ?}
?? ??? ??? ?if (flag == 1)
?? ??? ??? ?{
?? ??? ??? ??? ?// 交換數(shù)據(jù)域
?? ??? ??? ??? ?node t = *p;
?? ??? ??? ??? ?*p = *q;
?? ??? ??? ??? ?*q = t;
?? ??? ??? ??? ?// 處理指針域
?? ??? ??? ??? ?t.next = p->next;
?? ??? ??? ??? ?p->next = q->next;
?? ??? ??? ??? ?q->next = t.next;
?? ??? ??? ??? ?flag = 0;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?printf("【系統(tǒng)】排序成功!\n");
}

// 時長從大到小
int cmp_big_time(NODE e1, NODE e2)
{
?? ?return e1.time > e2.time;
}

// 日期從大到小
int cmp_big_day(NODE e1, NODE e2)
{
?? ?return strcmp(e1.day, e2.day) >= 0 ? 1 : 0;
}

// 價格從大到小
int cmp_big_price(NODE e1, NODE e2)
{
?? ?return e1.price > e2.price;
}

// 數(shù)量從大到小
int cmp_big_num(NODE e1, NODE e2)
{
?? ?return e1.num > e2.num;
}

// 時長從小到大
int cmp_small_time(NODE e1, NODE e2)
{
?? ?return e1.time < e2.time;
}

// 日期從小到大
int cmp_small_day(NODE e1, NODE e2)
{
?? ?return strcmp(e1.day, e2.day) < 0 ? 1 : 0;
}

// 價格從小到大
int cmp_small_price(NODE e1, NODE e2)
{
?? ?return e1.price < e2.price;
}

// 數(shù)量從小到大
int cmp_small_num(NODE e1, NODE e2)
{
?? ?return e1.num < e2.num;
}

// 文件保存售票信息
int Save_TICKET(TICKET* L)
{
?? ?FILE* pfWrite = fopen("ticket1.txt", "w");
?? ?if (pfWrite == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?TICKET* p = L->next;

?? ?while (p != NULL)
?? ?{
?? ??? ?fprintf(pfWrite, "%s %s %d %s %s %s %d %d %s %d %d %d\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->id, p->username, p->x, p->y, p->istake);
?? ??? ?p = p->next;
?? ?}

?? ?// 打開文件后記得關(guān)閉
?? ?fclose(pfWrite);

?? ?return 1;
}

// 讀取售票信息
int Read_TICKET(TICKET* L)
{
?? ?FILE* pfRead = fopen("ticket1.txt", "r");
?? ?TICKET st;
?? ?TICKET* s = NULL;
?? ?TICKET* t = L;

?? ?if (pfRead == NULL)
?? ?{
?? ??? ?return 0;
?? ?}

?? ?while (fscanf(pfRead, "%s %s %d %s %s %s %d %d %s %d %d %d\n", st.name, st.type, &st.time, st.day, st.start, st.site, &st.price, &st.id, st.username, &st.x, &st.y, &st.istake) != EOF)
?? ?{
?? ??? ?s = (TICKET*)malloc(sizeof(TICKET));
?? ??? ?*s = st;

?? ??? ?// 尾插法
?? ??? ?t->next = s;
?? ??? ?t = s;
?? ??? ?t->next = NULL;
?? ?}

?? ?fclose(pfRead);?? ?// 打開文件后記得關(guān)閉

?? ?return 1;
}

// 購票
void Buy_ticket()
{
?? ?do {
?? ??? ?Sort(&list);
?? ??? ?system("pause");
?? ??? ?Print(&list);
?? ?} while (Buy_ticket_Printf() == 0);
}

int Buy_ticket_Printf()
{
?? ?TICKET s; // 記錄票務(wù)信息

?? ?int id;
?? ?printf("【系統(tǒng)】請輸入您要購買的影片的編號:");
?? ?scanf("%d", &id);

?? ?system("cls");

?? ?node* st = Search_id(id, &list);

?? ?if (st == NULL)
?? ?{
?? ??? ?printf("【系統(tǒng)】無法找到該影片!\n");

?? ??? ?int choice;
?? ??? ?printf("【系統(tǒng)】請選擇是否要繼續(xù)購票?(Yes:1 / No:0):");
?? ??? ?scanf("%d", &choice);
?? ??? ?
?? ??? ?if (choice == 1)
?? ??? ??? ?return 0;
?? ??? ?else if (choice == 0)
?? ??? ??? ?return 1;
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("輸入錯誤\n");
?? ??? ??? ?system("pause");
?? ??? ??? ?return 1;
?? ??? ?}
?? ?}

?? ?st = st->next;
?? ?printf("【系統(tǒng)】該影片的信息如下:\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|編號\t |\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("_________________________________________________________________________________________________________\n");
?? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|%d\t |\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price, st->num, st->id);
?? ?printf("_________________________________________________________________________________________________________\n");

?? ?printf("【系統(tǒng)】座位示意圖如下:(■表示已預(yù)定,□表示未預(yù)定)\n");

?? ?printf(" ? ?");
?? ?for (int i = 1; i <= 10; i++)
?? ?{
?? ??? ?printf("%3d", i);
?? ?}
?? ?printf("\n");

?? ?for (int i = 1; i <= 10; i++)
?? ?{
?? ??? ?printf("%4d", i);
?? ??? ?for (int j = 1; j <= 10; j++)
?? ??? ?{
?? ??? ??? ?if (st->seat[i][j] == 0)
?? ??? ??? ??? ?printf(" □");
?? ??? ??? ?else
?? ??? ??? ??? ?printf(" ■");
?? ??? ?}
?? ??? ?printf("\n");
?? ?}

?? ?int a;
?? ?printf("【系統(tǒng)】請選擇您要購買的數(shù)量:");
?? ?scanf("%d", &a);

?? ?for (int i = 0; i < a; i++)
?? ?{
?? ??? ?printf("【系統(tǒng)】請選擇您要購買的座位號:\n");
?? ??? ?int x, y;
?? ??? ?printf("行(1-10):");
?? ??? ?scanf("%d", &x);
?? ??? ?printf("列(1-10):");
?? ??? ?scanf("%d", &y);

?? ??? ?if (st->seat[x][y] == 0)
?? ??? ?{
?? ??? ??? ?st->seat[x][y] = 1;
?? ??? ??? ?st->num = st->num - 1;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?printf("【系統(tǒng)】預(yù)定失敗,該座位已被預(yù)定\n");

?? ??? ??? ?int choice;
?? ??? ??? ?printf("【系統(tǒng)】請選擇是否要繼續(xù)購票?(Yes:1 / No:0):");
?? ??? ??? ?scanf("%d", &choice);

?? ??? ??? ?if (choice == 1)
?? ??? ??? ??? ?return 0;
?? ??? ??? ?else if (choice == 0)
?? ??? ??? ??? ?return 1;
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?printf("輸入錯誤\n");
?? ??? ??? ??? ?system("pause");
?? ??? ??? ??? ?return 1;
?? ??? ??? ?}
?? ??? ?}

?? ??? ?// 記錄訂單信息
?? ??? ?strcpy(s.name, st->name);
?? ??? ?strcpy(s.type, st->type);
?? ??? ?s.time = st->time;
?? ??? ?strcpy(s.day, st->day);
?? ??? ?strcpy(s.start, st->start);
?? ??? ?strcpy(s.site, st->site);
?? ??? ?s.price = st->price;
?? ??? ?s.id = st->id;

?? ??? ?strcpy(s.username, username);
?? ??? ?s.x = x;
?? ??? ?s.y = y;
?? ??? ?s.istake = 0;

?? ??? ?Add2(&c, s);

?? ??? ?printf("【系統(tǒng)】預(yù)定成功\n");
?? ?}

?? ?system("pause");
?? ?system("cls");

?? ?printf("【系統(tǒng)】您的訂單信息如下:\n");
?? ?printf("_________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|數(shù)量\t|\n");
?? ?printf("_________________________________________________________________________________________________\n");
?? ?printf("_________________________________________________________________________________________________\n");
?? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t|\n", st->name, st->type, st->time, st->day, st->start, st->site, st->price * a, a);
?? ?printf("_________________________________________________________________________________________________\n");

?? ?system("pause");

?? ?Save_FILE(&list);
?? ?return 1;
}

// 保存預(yù)定信息
void Add2(TICKET* L, TICKET e)
{
?? ?// 頭插法
?? ?TICKET* p = L;
?? ?TICKET* s = (TICKET*)malloc(sizeof(TICKET));
?? ?*s = e;

?? ?s->next = p->next;
?? ?p->next = s;

?? ?Save_TICKET(L);
}

// 取票
void Collect_ticket()
{
?? ?system("cls");
?? ?
?? ?Print_ticket(&c);

?? ?Save_TICKET(&c);
}

void Print_ticket(TICKET* L)
{
?? ?TICKET* p = L->next;
?? ?int cnt = 0, choice = 0;
?? ?
?? ?if (p != NULL)
?? ?{
?? ??? ?while (p != NULL && strcmp(p->username, username) == 0 && p->istake==0)
?? ??? ?{
?? ??? ??? ?printf("【系統(tǒng)】您的訂單如下:\n");
?? ??? ??? ?Print_ticket_Printf();
?? ??? ??? ?printf("______________________________________________________________________________________________________________________\n");
?? ??? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t |%-10s|%d\t|%-5d|\n", p->name, p->type, p->time, p->day, p->start, p->site, p->price, p->id, p->username, p->x, p->y);
?? ??? ??? ?printf("______________________________________________________________________________________________________________________\n");

?? ??? ??? ?printf("【系統(tǒng)】是否取票?(Yes:1 / No:0):");
?? ??? ??? ?scanf("%d", &choice);

?? ??? ??? ?if (choice != 1)
?? ??? ??? ?{
?? ??? ??? ??? ?if (choice != 0)
?? ??? ??? ??? ??? ?printf("【系統(tǒng)】輸入錯誤?。。n");
?? ??? ??? ?}
?? ??? ??? ?else
?? ??? ??? ?{
?? ??? ??? ??? ?p->istake = 1;
?? ??? ??? ??? ?printf("【系統(tǒng)】取票成功?。。n");
?? ??? ??? ?}
?? ??? ??? ?system("pause");

?? ??? ??? ?p = p->next;

?? ??? ??? ?cnt++;
?? ??? ?}
?? ?}

?? ?if (cnt == 0)
?? ??? ?printf("【系統(tǒng)】抱歉,您當前無票可取。\n");
}

void Print_ticket_Printf()
{
?? ?system("cls");
?? ?printf("______________________________________________________________________________________________________________________\n");
?? ?printf("|\t名稱\t\t|類型\t|時長\t|日期\t\t|起始時間\t|地點\t|價格\t|編號\t |購票人 ? ?|行\(zhòng)t|列 ? |\n");
?? ?printf("______________________________________________________________________________________________________________________\n");
}

// 退票
void Return_ticket()
{
?? ?system("cls");

?? ?printf("【系統(tǒng)】您的訂單如下:\n");
?? ?system("pause");
?? ?Print_ticket1(&c);

?? ?Save_TICKET(&c);
}

// 打印信息
void Print_ticket1(TICKET* L)
{
?? ?TICKET* s = L;
?? ?TICKET* p = NULL, * q = NULL;
?? ?int cnt = 0, choice = 0;

?? ?while (1)
?? ?{
?? ??? ?q = Find_ticket(s, username);
?? ??? ?if (q == NULL)
?? ??? ??? ?break;

?? ??? ?p = q;
?? ??? ?Print_ticket_Printf();
?? ??? ?printf("______________________________________________________________________________________________________________________\n");
?? ??? ?printf("|%-15s\t|%s\t|%d\t|%s\t|%s\t\t|%s\t|%d\t|%d\t |%-10s|%d\t|%-5d|\n", q->next->name, q->next->type, q->next->time, q->next->day, q->next->start, q->next->site, q->next->price, q->next->id, q->next->username, q->next->x, q->next->y);
?? ??? ?printf("______________________________________________________________________________________________________________________\n");

?? ??? ?printf("【系統(tǒng)】是否退票?(Yes:1 / No:0):");
?? ??? ?scanf("%d", &choice);

?? ??? ?if (choice != 1)
?? ??? ?{
?? ??? ??? ?if (choice != 0)
?? ??? ??? ??? ?printf("【系統(tǒng)】輸入錯誤?。?!\n");
?? ??? ??? ?q = q->next;
?? ??? ?}
?? ??? ?else if(choice == 1)
?? ??? ?{
?? ??? ??? ?NODE* r = Search_id(q->next->id, &list);
?? ??? ??? ?r->next->num = r->next->num + 1;
?? ??? ??? ?r->next->seat[q->next->x][q->next->y] = 0;
?? ??? ??? ?printf("%d,%d\n", r->next->num, r->next->seat[p->next->x][p->next->y]);


?? ??? ??? ?Save_FILE(&list);
?? ??? ??? ?Delete_ticket(p);
?? ??? ?}
?? ??? ?system("pause");
?? ??? ?s = q;
?? ??? ?cnt++;
?? ?}

?? ?if (cnt == 0)
?? ??? ?printf("【系統(tǒng)】抱歉,您當前無票可退。\n");
}

// 查找前驅(qū)節(jié)點
TICKET* Find_ticket(TICKET* L, char username[])
{
?? ?TICKET* p = L;

?? ?while (p->next != NULL)
?? ?{
?? ??? ?if (strcmp(username, p->next->username) == 0)
?? ??? ?{
?? ??? ??? ?return p;
?? ??? ?}
?? ??? ?p = p->next;
?? ?}
?? ?return NULL;
}

// 刪除
void Delete_ticket(TICKET* s)
{
?? ?TICKET* t = s->next;

?? ?s->next = t->next;
?? ?t->next = NULL;

?? ?free(t);
}

// 退出系統(tǒng)
void goodbye()
{
?? ?system("cls");
?? ?printf("歡迎下次使用影院售票管理系統(tǒng)!");
?? ?exit(0);
}

總結(jié)

終于寫完了課設(shè),耗時蠻久的,不過也算是鞏固了一些C語言知識了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C程序中Ubuntu、stm32的內(nèi)存分配問題

    C程序中Ubuntu、stm32的內(nèi)存分配問題

    這篇文章主要介紹了C程序中Ubuntu、stm32的內(nèi)存分配問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 解析C++中的5個存儲類的作用

    解析C++中的5個存儲類的作用

    這篇文章主要介紹了C++中的5個存儲類的作用,存儲類是管理對象的生存期、鏈接和內(nèi)存位置的類型說明符,需要的朋友可以參考下
    2016-05-05
  • 剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類

    剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類

    這篇文章主要介紹了剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類,友元了以后在外部就可以訪問到正常情況下無法訪問到的私有屬性和方法,需要的朋友可以參考下
    2016-01-01
  • C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼

    C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼

    這篇文章主要介紹了 C++實現(xiàn)一個線程安全的單例工廠實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Qt事件過濾實現(xiàn)點擊圖片的放大和縮小

    Qt事件過濾實現(xiàn)點擊圖片的放大和縮小

    這篇文章主要為大家詳細介紹了Qt事件過濾實現(xiàn)點擊圖片的放大和縮小,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++和C中const的區(qū)別詳解

    C++和C中const的區(qū)別詳解

    這篇文章主要為大家介紹了C++和C中const的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • C語言二叉樹層序遍歷

    C語言二叉樹層序遍歷

    這篇文章主要介紹了C語言二叉樹層序遍歷,文章基于C語言的相關(guān)資料展開詳細的文章內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-04-04
  • C語言遞歸實現(xiàn)歸并排序詳解

    C語言遞歸實現(xiàn)歸并排序詳解

    這篇文章主要為大家詳細介紹了C語言遞歸實現(xiàn)歸并排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,?希望能夠給你帶來幫助
    2022-03-03
  • C語言選擇排序算法及實例代碼

    C語言選擇排序算法及實例代碼

    本篇文章主要介紹了 C語言選擇排序算法,這里提供代碼實例以便大家理解,通過本文,更好的理解排序算法
    2016-07-07
  • Qt實戰(zhàn)案例之如何利用QProcess類實現(xiàn)啟動進程

    Qt實戰(zhàn)案例之如何利用QProcess類實現(xiàn)啟動進程

    這篇文章主要介紹了Qt實戰(zhàn)案例之如何利用QProcess類實現(xiàn)啟動進程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02

最新評論