文章目录

  • 前言
  • 一、概要设计
    • 1、基本信息
    • 2、功能模块图
    • 3、功能描述
    • 4、调用关系图
  • 二、完整代码
  • 总结

前言

最近刚好在写自己的课设,匆匆忙忙写出来的课设系统,仍有不足,拿出来和大家分享一下,希望能对大家有帮助。

一、概要设计

1、基本信息

数据类型:链表

typedef struct node
{char name[N];                  // 名称char type[N];                  // 类型int time;                      // 时长char day[N];               // 日期char start[N];                 // 起始时间char site[N];            // 地点int price;                 // 价格int num;                   // 数量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;

实现功能:

开发环境:VS2019

2、功能模块图

3、功能描述

(1)管理员
①增加影片:新增影片至系统中
②显示影片:显示系统中的所有影片信息
③查找影片:通过姓名、类型、编号查询影片信息
④修改影片:通过编号查询影片,修改影片信息
⑤删除影片:通过编号查询影片,删除影片信息
⑥排序影片:按照时长、日期、价格、数量排序影片信息
(2)用户
①购票:排序影片信息,显示影片信息,通过编号查询影片信息,购票后显示票务信息
②取票:显示票务信息,选择是否取票
③退票:显示票务信息,选择是否退票

4、调用关系图

二、完整代码

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<conio.h>
#define N 100typedef 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;                   // 数量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);          // 数量从大到小
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);        // 数量从小到大// 购票
void Buy_ticket();                          // 功能
int Buy_ticket_Printf();                    // 界面
void Add2(TICKET* L, TICKET e);             // 保存预定信息
int Save_TICKET(TICKET* L);                 // 文件保存售票信息
int Read_TICKET(TICKET* L);                 // 读取售票信息// 取票
void Collect_ticket();
// 打印票务信息
void Print_ticket(TICKET* L);
void Print_ticket_Printf();// 退票
void Return_ticket();
void Print_ticket1(TICKET* L);                      // 打印信息
TICKET* Find_ticket(TICKET* L, char username[]);    // 查找前驱节点
void Delete_ticket(TICKET* s);                      // 删除// 退出系统
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("***********               影院管理系统               ***********\n");printf("***********             1 ----  管理员               ***********\n");printf("***********             2 ----  用户                 ***********\n");printf("***********             0 ----  退出                 ***********\n");printf("****************************************************************\n");printf("【系统】请选择你的身份(数字):");
}// 主菜单功能
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("【系统】欢迎%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("【系统】请选择你要实现的功能(数字):");
}// 管理员功能
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("是否需要继续操作?(Yes:1 / No:0):");scanf("%d", &choice);if (choice != 1){if (choice != 0)printf("输入错误!!!\n");system("pause");break;}}}
}// 用户界面
void menu_user()
{system("cls");printf("【系统】欢迎%s!!!\n", username);printf("****************************************************************\n");printf("***********              欢迎光临!!                ***********\n");printf("***********             1 ----  购票                 ***********\n");printf("***********             2 ----  取票                 ***********\n");printf("***********             3 ----  退票                 ***********\n");printf("***********             0 ----  退出                 ***********\n");printf("****************************************************************\n");printf("【系统】请选择您要实现的功能(数字):");
}// 用户功能
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("【系统】是否需要继续操作?(Yes:1 / No:0):");scanf("%d", &choice);if (choice != 1){if (choice != 0)printf("【系统】输入错误!!!\n");system("pause");break;}}}
}// 管理员登录界面
void menu_Login_admin()
{system("cls");printf("****************************************************************\n");printf("***********               管理员登录                 ***********\n");printf("***********             1 ----  登录                 ***********\n");printf("***********             0 ----  退出                 ***********\n");printf("****************************************************************\n");printf("【系统】请选择你要实现的功能(数字):");
}// 管理员登录功能
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("【系统】请输入用户名:");scanf("%s", username);getchar();printf("【系统】请输入密码:");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("【系统】登陆成功\n");getch();system("cls");flag = 1;return 1;}}printf("【系统】用户名或密码错误,请重新输入\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("请选择你要实现的功能(数字):");
}// 用户登录功能
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("【系统】请输入用户名:");scanf("%s", username);getchar();printf("【系统】请输入密码:");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);   // 打开文件后记得关闭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("【系统】用户名或密码错误,请重新输入\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);  // 打开文件后记得关闭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;}// 打开文件后记得关闭fclose(pfWrite);return 1;
}// 增加影片
void Add_Printf()
{system("cls");NODE st;printf("【系统】请输入新增影片的相关信息:\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("数量:");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("【系统】请输入要删除的影片的编号:");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|数量\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("【系统】请输入要修改的影片的编号:");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|数量\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修改数量     ---- 8\t|\n");printf("|\t修改编号     ---- 9\t|\n");printf("|\t退出         ---- 0\t|\n");printf("________________________________\n");printf("【系统】请输入要修改的信息:");scanf("%d", &choice);switch (choice){case 1:printf("【系统】请输入名称:");scanf("%s", st->name);break;case 2:printf("【系统】请输入类型:");scanf("%s", st->type);break;case 3:printf("【系统】请输入时长:");scanf("%d", &st->time);break;case 4:printf("【系统】请输入日期:");scanf("%s", st->day);break;case 5:printf("【系统】请输入起始时间:");scanf("%s", st->start);break;case 6:printf("【系统】请输入地点:");scanf("%s", st->site);break;case 7:printf("【系统】请输入价格:");scanf("%d", &st->price);break;case 8:printf("【系统】请输入数量:");scanf("%d", &st->num);break;case 9:printf("【系统】请输入编号:");scanf("%d", &st->id);break;case 0:break;}printf("是否继续修改该影片信息?(Yes:1 / No:0):");scanf("%d", &choice);if (choice == 0){break;}}// 修改完成后该影片的信息printf("_________________________________________________________________________________________________________\n");printf("|\t名称\t\t|类型\t|时长\t|日期\t\t|起始时间\t|地点\t|价格\t|数量\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("【系统】请输入查询方式:");scanf("%d", &choice);node* st;if (choice == 1){char name[N];int cnt = 0;printf("【系统】请输入要查询的影片名称:");scanf("%s", name);cnt = Search_allname(name, L);if (cnt == 0){printf("无法找到该类型的影片!\n");}}else if (choice == 2){char type[N];int cnt = 0;printf("【系统】请输入要查询的影片类型:");scanf("%s", type);cnt = Search_type(type, L);if (cnt == 0){printf("无法找到该类型的影片!\n");}}else if (choice == 3){int id;printf("【系统】请输入要查询的影片编号:");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|数量\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|数量\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|数量\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|数量\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("按照数量从大到小排序 ---- 7\n");printf("按照数量从小到大排序 ---- 8\n\n");printf("【系统】请选择排序方式:");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){// 交换数据域node t = *p;*p = *q;*q = t;// 处理指针域t.next = p->next;p->next = q->next;q->next = t.next;flag = 0;}}}printf("【系统】排序成功!\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;
}// 数量从大到小
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;
}// 数量从小到大
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;}// 打开文件后记得关闭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); // 打开文件后记得关闭return 1;
}// 购票
void Buy_ticket()
{do {Sort(&list);system("pause");Print(&list);} while (Buy_ticket_Printf() == 0);
}int Buy_ticket_Printf()
{TICKET s; // 记录票务信息int id;printf("【系统】请输入您要购买的影片的编号:");scanf("%d", &id);system("cls");node* st = Search_id(id, &list);if (st == NULL){printf("【系统】无法找到该影片!\n");int choice;printf("【系统】请选择是否要继续购票?(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("【系统】该影片的信息如下:\n");printf("_________________________________________________________________________________________________________\n");printf("|\t名称\t\t|类型\t|时长\t|日期\t\t|起始时间\t|地点\t|价格\t|数量\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("    ");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(" □");elseprintf(" ■");}printf("\n");}int a;printf("【系统】请选择您要购买的数量:");scanf("%d", &a);for (int i = 0; i < a; i++){printf("【系统】请选择您要购买的座位号:\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("【系统】预定失败,该座位已被预定\n");int choice;printf("【系统】请选择是否要继续购票?(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("【系统】预定成功\n");}system("pause");system("cls");printf("【系统】您的订单信息如下:\n");printf("_________________________________________________________________________________________________\n");printf("|\t名称\t\t|类型\t|时长\t|日期\t\t|起始时间\t|地点\t|价格\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|\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;
}// 保存预定信息
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("【系统】您的订单如下:\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("【系统】是否取票?(Yes:1 / No:0):");scanf("%d", &choice);if (choice != 1){if (choice != 0)printf("【系统】输入错误!!!\n");}else{p->istake = 1;printf("【系统】取票成功!!!\n");}system("pause");p = p->next;cnt++;}}if (cnt == 0)printf("【系统】抱歉,您当前无票可取。\n");
}void Print_ticket_Printf()
{system("cls");printf("______________________________________________________________________________________________________________________\n");printf("|\t名称\t\t|类型\t|时长\t|日期\t\t|起始时间\t|地点\t|价格\t|编号\t |购票人    |行\t|列   |\n");printf("______________________________________________________________________________________________________________________\n");
}// 退票
void Return_ticket()
{system("cls");printf("【系统】您的订单如下:\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("【系统】是否退票?(Yes:1 / No:0):");scanf("%d", &choice);if (choice != 1){if (choice != 0)printf("【系统】输入错误!!!\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("【系统】抱歉,您当前无票可退。\n");
}// 查找前驱节点
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);
}// 退出系统
void goodbye()
{system("cls");printf("欢迎下次使用影院售票管理系统!");exit(0);
}

总结

终于写完了课设,耗时蛮久的,不过也算是巩固了一些C语言知识了,嘿嘿,共勉!

C语言课设:影院售票管理系统相关推荐

  1. 课设影院信息管理系统

        课设影院信息管理系统 一.影院具体信息介绍: 1.人员分类: 负责人,管理者,售票者,顾客 2.人员涉及的功能: 负责人:注册管理者和售票者账号信息 管理者:管理影片信息,增删修改 售票者:查 ...

  2. C语言课设物资管理系统,C语言课设之物资管理系统.doc

    C语言课设之物资管理系统 C语言课程设计 目 录 1.需求分析: 2.系统总框图: 3.每个模块的设计分析: 4.列出所有定义的函数及说明: 5.举例说明1.2个比较有特点的算法: 6.数据分析.完备 ...

  3. c语言售票系统主要函数,c语言课设电影院售票系统.docx

    struct inf { char rate[20]; char name[20]; int time_hour; int time_min; int seat; int sell; }inf[10] ...

  4. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  5. C语言课设:影片管理系统

    在接触并学习C语言之后,往往需要做一个简单的课设系统完成对C语言的学习.当然,这可能是我们接触代码以来写过的最长的代码,不排除对新手有一定难度.由于之前笔者划水了一段时间,导致一些知识遗忘了,所以只得 ...

  6. C语言课设——酒店预订管理系统

    课设要求: 客房信息管理. 客人预订及入住信息管理. 各种查询和统计功能. 本系统要有通用性.界面美观.操作方便.要考虑系统安全. 可增加其他有用的功能. 头文件function.h #pragma ...

  7. C语言课设图书信息管理系统(大作业)

    一.设计功能(文章仅供参考) 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)系统以菜单方式工作 (2)图书信息录入功能( ...

  8. C语言课设手机电话簿管理系统(大作业)

    一.任务概述(文章仅供参考) 用c设计出模拟手机通讯录管理系统,实现对手机中的通讯录进行管理 二.设计功能 查看功能:选择此功能时,列出下列三类选择.A办公类,B个人类,C商务类,当选中某类时,显示出 ...

  9. 电影售票管理c语言课程设计,C语言课设--电影院售票

    #include #include int A[500]={0}; int B[500]={0}; int C[500]={0}; int D[500]={0}; void BuyTicket(); ...

  10. C语言课设职工信息管理系统(大作业)

    一.设计功能(文章仅供参考) 职工信息包括:工号,姓名,性别,出生年月,婚姻状况,职称,家庭地址,电话,E-mail等. 设计一个职工信息管理系统,使之能提供以下功能: (1)职工信息录入功能(学生信 ...

最新文章

  1. Python中的继承
  2. mysql避免回环复制_【20181204】 MySQL 双主复制是如何避免回环复制的
  3. context_component_san具体解释
  4. python中pop(),popitem()的整理
  5. (转)Java随机数
  6. 【Python 标准库学习】伪随机数生成库 — random
  7. React学习笔记(五) 状态提升
  8. TeaTalk·Online 演讲实录 | 圆满完结 大数据+云原生,再度风云起
  9. 0基础python入门书籍 excel_零基础学Python3(23):Excel 基础操作(上)
  10. 可以在函数中间打点了,以分析bpf_prog_load函数为例
  11. ACL2021最佳论文出炉,来自字节跳动
  12. 恒压板框过滤实验数据处理_中学少见、高考常考的化学实验仪器
  13. Python配置CPLEX
  14. 芥子空间破解游戏的加固保护案例
  15. 【如何删除taskmer.exe进程灰鸽子木马】
  16. Ubuntu18.04下的截图快捷方式
  17. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示
  18. ArcGIS图层标注显示(将图层属性名字显示出来)
  19. 新建一个html标题为李白,李白的诗,如果用自媒体的思维来起标题,画风是这样的...
  20. scConverter 文档转换 DLL / SDK

热门文章

  1. SQL SERVER中的方差函数
  2. 重装oracle接管磁盘阵列,ibm v7000磁盘阵列oracle恢复
  3. 某CCTV摄像头漏洞分析
  4. Google 地图下载工具 (C#)
  5. vb6.0实现生成不重复的随机整数并排序输出
  6. 机器学习中的数学——粒子群算法(Particle Swarm Optimization, PSO)(三):改进的粒子群算法
  7. Android 高仿QQ 好友分组列表
  8. 我们在囧途之UI工程师篇
  9. Docker安装postgre
  10. AtCoder Beginner Contest 205 A~E 题解