C语言课设——电影院选票系统
C语言课设——电影院选票系统
1.课题介绍
大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统。了解订票如何实现的。系统主要有2类用户:管理员用户和顾客用户。
管理员用户
- 1.电影放映厅信息管理
选择该菜单能展示所有放映厅,用户输入某个放映厅编号后,能实现对放映厅增加、删除、修改功能。主要对movie_house.txt数据修改。
放映厅主要字段信息有:
放映厅编号、放映厅名称、放映厅行数、放映厅列数、放映厅座位初始状态。
假如放映厅是一个10行10列座位安排,其初始状态可以生成一个二维数组house[10][10]={0,1,2,0,0},存储座位状态 。0表示未定、1表示已定、2表示不能定。初始时候应该只有0,2两种状态。
- 2.电影场次信息管理
实现对movie.txt数据增删改及查找。答辩务必演示增删改操作,对于已存在场次能提示不得修改。不存在场次不能删除等容错处理。修改和添加记录时候,一个放映厅一个时段只能排1部电影。若超过要提示不能修改。
movie.txt主要字段有:
电影场次编号、电影名称、播放日期、播放时间段、所在放映厅、放映厅座位当前状态。
(1)放映厅位置当前状态,表示当前位置购票情况,如house[10][10]={0,1,2,0,0}。其中:
0表示未定座位、1表示已定座位、2表示不能定座位。
(2)当前状态初始值应该是从movie_house.txt读取放映厅座位初始状态。
顾客登录系统
- 1.电影订票
操作步骤如下:
(1)展示当前时间段后可看的电影场次信息。(注意时间,一定是当前时间段后的电影信息)
(2)顾客输入输入观看电影名称和时间段,展示目前厅内位置信息。注意用矩阵方式显示位置信息,每行10列左右,具体自己设计。位置信息在电影信息文件即movie.txt查看位置状态信息。0表示可预订用绿色表示,1表示不能定用红色标识,2不可订可用灰色表示。这块建议图形化展示。
(3)若该场次无位置,提示选择其他电影场次。若有位置,继续下面操作:
* 选择1人位置,输入行列位置编号后,若当前位置可选,生成订单,写入订票信息文件movie_order.txt,更新movie.txt中座位状态。若当前位置已定或不可选,提示错误信息。屏幕座位状态能实时更新。
* 选择多人位置,输入人数及行列位置编号后,实现座位选择,屏幕实时更新。(选做)
位置编号从1---位置中数量编号。
* 订单生成后能计算总票价。
- 2.查看我的订单
展示所有历史订票信息,然后可删除未看的电影订单。(选做)
注意删除订单后,相应电影场次中位置信息状态也要修改。
具体数据文件
(1)放映厅信息文件:movie_house.txt。字段:
放映厅编号、放映厅名称、放映厅行数、放映厅列数、放映厅座位初始状态。
(2)电影场次信息文件movie.txt。字段有:
电影场次编号、电影名称、该场次电影单价、播放日期、播放时间段、所在放映厅、放映厅座位当前状态。
(3)电影订单信息文件movie_order.txt。字段有:
顾客编号、电影名称、购买数量、购买座位、总金额、购买时间。
购买座位: [1,1],[25,3]。表示购买2个座位,一个是第一行第一列,一个是第25行第三列。
(4)顾客账号文件customer.txt,自建。包括:顾客编号、密码。
(5)影院管理员账号manager.txt,自建。包括:管理员编号、密码。
要求
(1)系统演示时候必须保证文件内至少有50行数据。
(2)系统必须具备容错处理。没有位置、没有电影等都要出错处理及提醒。
(3)系统交互性要好,操作简单好用。
(4)有能力同学可以扩展系统功能,如导入easyx库,加入图片。系统交互性更好。电影放映厅等状态改进。
2.系统模块图

3.详细设计
3.1头文件截图及简单文字介绍



3.2各个模块主要函数截图及介绍
1.main.cpp

2. Login.cpp
1.ManagerLogin 函数
该函数用于管理员登录(默认管理员不能注册)


2.CustomerLogin函数
该函数用于用户登录及注册



3.ReadManagerFile 及 ReadCustomerFile函数
这两个函数主要用于计算manager.txt中的管理员数和customer.txt中的用户数。
在用户登陆时,根据计算得出的数量来检索输入的用户名及密码是否存在
(当时文件那块儿理解的不是很透彻,现在想想这两个函数纯属多余,直接用feof()函数判断是否到文件尾就好了)

3. manager.cpp
1.Create_House_Doc函数
该函数用于创建放映厅链表,将movie_house.txt中的数据建成链表,以便实现管理员的放映厅管理功能

2.Insert_House_Doc函数
该函数用于创建放映厅链表的连接,及实现管理员在放映厅管理中增加放映厅的功能

3.Print_House_Doc函数
该函数用于遍历放映厅链表,并以表格的形式输出movie_house.txt中的放映厅信息

4.Delete_House_Doc函数
该函数用于删除放映厅数据

5.Alter_House_Doc函数
改函数用于修改已有放映厅的信息


6.InHouseFile函数
该函数用于将修改后的链表重新写入movie_house.txt文件中,实现文件的更新

4. customer.cpp
1.Print_After_Movie 函数
显示当前时间之后的电影,供用户选择

2.Printf_MovieChoice 函数
该函数用于用户选择完想看的电影后,输出改电影当前时间后的所有场次信息

3.Print_MovieSeat 函数
该函数用于打印用户所选场次的电影的座位信息

4.运行结果
4.1管理员系统
放映厅管理
增加放映厅

删除放映厅

修改放映厅

电影场次管理
增加电影

删除电影

修改电影

4.2用户系统
- 电影订票+查看订单

5.总结
刚开始的时候,我想着学习一下EasyX,来实现座位信息的生成,结果,事实告诉我们,一个星期连课设都快搞不定了,更别说学EasyX了。
一开始的时候,我是想着用数组来做的,当时觉得删除那块儿的用数组做特别麻烦,然后就想着说用链表做。然而,链表又不太会用,就一边翻书,一边打代码。刚开始的时候,是花费了很多的时间,到后面,链表的那块儿内容直接都可以复制黏贴。
当时先做的是管理员的那个部分,所以相对于用户,管理员的部分做的相对要完善一些。然后,一个星期的时间真的有点点短,我里头的功能其实并不完善,就像选做中的删除功能就没有实现,系统的容错性也做的不完善。
这次的课设真的是非常的费脑、费时。但是,当你实现了一个又一个的功能后,你就会有一种成就感跟满足感。课上学的东西应用在这,只是基础中的基础,要想实现各个功能必须要自己去查找资料,可以说课设就是巩固课堂上学习的知识,学习课堂上所没有的知识的一个过程。做课设的时候,可以先把框架代码先写好,然后再一步步的完善各个函数功能。在写函数的时候,写好一个函数就应该调试一下这个函数功能是否实现,不然,等到所有代码都完成了再去调试,在查找错误方面就会非常的麻烦。
C语言课设——电影院选票系统的更多相关文章
- C语言课设心得分享(一)
今儿上完课设,老师果然讲的比较少,周四还不用去,看来还是学生自己折腾.我在做课设的过程中,攒了一些心得/体会,希望能和大家分享分享,也希望能一起探讨探讨.如果是我能回答的问题,我很乐意能够提供帮助. ...
- 库存管理系统实现 C语言课设
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 //定义一个商品结构体 6 ...
- C语言课程设计——电影院订票系统
1. 课题简介 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户登录系统后,实现电影放映厅信息管理和电 ...
- Matlab 信号与系统课设 - BiRadio仿真电台
BiRadio Matlab 信号与系统课设 - BiRadio仿真电台 Author : Benjamin142857 Date : 2018-12 Video : BiliBili Github ...
- JAVA课设——中药古籍《太平圣惠方》数据处理与分析系统
一.配置JAVA环境 本次课设是在Windows 10(64bit)平台上实现的,所以首先得配置下JAVA环境. 步骤一:先下载一个JDK(1.7)安装包,安装好JDK: 步骤二:JDK环境配置(由于 ...
- C语课设心得分享(二)
咱们今儿说说IDE的事儿. IDE是「集成开发环境」的意思,比如咱们常用的VC6.0,就是开发C语言所用的IDE的一种.对于IDE的认识,可能有些朋友有点儿模糊,咱们捋一捋,我也会给出一些IDE方面的 ...
- C语课设心得分享(三)
调试. 以前咱们写课后习题,一般也不需要使用调试,如果程序编译error,根据错误信息就可以改好:如果是结果错误,那么在稿纸上过几遍基本也可以得出结果. 但咱们这个课设比较大,就需要很多调试的过程,尤 ...
- 将C语课设传到了Github和Code上 2015-91-18
一直听说Git好使,以前捣鼓过没弄成,现在考完试了终于可以静下心来研究研究. 哎,我要是当时做课设的时候就用Git,也能省下不少事呢. 使用的Git教程,刚看个开头: 廖雪峰的Git教程 http:/ ...
- 如何用 python 优雅地完成数据库课设
0 前言 偶然间发现 Google 收录了学校实验打卡系统的接口,正好要做数据库课设,便拿来作为 environment. 机房居然装了 python ,早就听说 python 写爬虫速度一流,课上的 ...
随机推荐
- webstorm编辑器使用
1.自动生成vue文件模板,如图
- 常用MSSQL语句
现在很少用SQL 写东西,但有时真用起来半天想不起来,看来还是有必要记录一下... 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMA ...
- Docker学习资源
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ...
- mysql 纵表转横表
表名:sales SELECT NAME, sum( CASE MONTH WHEN '一月份' THEN money ELSE END ) AS '一月份', sum( CASE MONTH WHE ...
- 【转载】Sikuli安装及使用——基于图像识别自动化工具
一.Sikuli能做什么? 用屏幕截图的方式,用截出来的图形元素组合出神奇的程序实现自动化安装.卸载软件,自动化测试(Windows.mac应用测试,Web测试,移动端测试) 二.安装Sikuli 预 ...
- mysql,jdbc、连接池
show processlist; select * from information_schema.processlist; Command: The type of command the thr ...
- Oarcle之集合操作
计算字段(列):不在于表中,通过x.÷操作和列进行计算得到的列: 获取员工的年薪 select (ename || '的年薪为:' || sal*12) info from emp; *info 为表 ...
- Easy methods to select MB Star, Extremely MB Star, MB SD C4, Mercedes BENZ C5 SD
MB Star, Extremely MB SD Connect C4, MB SD C4, Mercedes BENZ C5 SD are usually analysis tools to get ...
- Oracle中connect by用法示例
在工作中常常会遇到一些数据表包含父子关系的数据,比如行业.地区等等,如果需要将其节点按父子关系一步一步列出来,就需要使用connect by了. 如有由自身行业代码basecode和父行业代码pare ...
- day07数据类型的相互转化,字符编码
复习 ''' 1.深浅拷贝 ls = [1, 'a', [10]] 值拷贝:直接赋值 ls1 = ls, ls中的任何值发生改变,ls1中的值都会随之改变 浅拷贝:通过copy()方法 ls2 = l ...