北邮2024C语言程序设计(电影票销售系统|电话费统计管理系统)[2024-09-01]
计算机实习
为什么要开这门课
这是一门什么样的课
- 综合实践类课程
- 基于前序课程序设计基础,对软件系统进行设计与实
现的综合实践课程。
- 基于前序课程序设计基础,对软件系统进行设计与实
- 对学生的入门要求
- 完整学习过任意一本C语言书
- 有过基础结构和语法的实践练习
- 授课时间
- 没有理论授课时间
- 可能有集中授课时间
- 临时的
- 短暂的
- 次数取决于集中反馈和发现的问题
在这门课程中可以期待什么 - 积累≠存储,积累=存储+流通+增值
- 利用理论课内容从无到有创造一个真正的软件系统;
- 将理论内容通过实践牢牢地保存在记忆里并在后续的课程中发挥作用;
- 实践和由实践唤起的生动活泼的思想,是防止读死书的最有力手段;
- 改变对“知识”和“知道”这两个概念的本质看法
- 知道是会运用
- 成为精神生活的因素,能够吸引思想和激起兴趣时,才是真正的知识。
- 发挥自己的力量和可能性,感受脑力劳动中取得成绩的喜
悦! - 好的代码是艺术品,尽情享受创造带来的快乐!
- 优雅的代码,优秀的算法,优越的程序结构,严谨的逻辑……
参考资料
- 优雅的代码,优秀的算法,优越的程序结构,严谨的逻辑……
- C语言程序设计的教材及相关课堂资料
- 搜索引擎
- 码上平台
- 其他平台不行
- 该平台的使用方法在课程云平台首页已经发布
时间表
8.26 – 8.30
时间 周一 周二 周三 周四 周五
内容 宣讲 实践 实践 实践 实践
节次 1-4节 1-5节 1-5节 1-5节 1-5节
9.02 – 9.06
时间 周一 周二 周三 周四 周五
内容 实践 实践 实践&验收 实践&验收
节次 1-5节 1-5节 1-5节 1-5节
机房:教四楼103/138,教一楼101
实践要求
- 编程语言:C 语言
- 两个题目,任选其一
- 电影票销售系统的设计与实现
- 电话费统计管理系统的设计与实现
- 分组完成,五人一组,自愿组合;
- 开发环境:VC/Visual Studio/Dev C++/C
Free/Xcode均可- 组内环境统一(包括环境及其版本)
实践要求
- 组内环境统一(包括环境及其版本)
- 设计与实现要求:
- 提供命令行操作,无需图形界面
- 图形界面,只能锦上添花,不能雪中送炭。
- 模块化结构
- 遵守编程规范
- 界面友好
- 运行正确
- 具有容错机制(数据校验)
我们的目标
- 从宏观抽象且紧密结合的整体出发,逐步迈向具象
、精细且相互解耦的个体,最终成就一个既具象又
高度集成的全新整体。
软件系统的生命周期
需求分析阶段 系统设计阶段 系统实现阶段 系统测试阶段
明确是什么问题 - 明确用户需求
- 梳理业务流程
- 定义软件功能
- 确定性能要求
- 规划用户界面
- 识别潜在风险
- 建立需求基线
产出的文档 - 需求规格说明书
- 系统参与角色
- 不同角色的功能
- 主要的业务流程
- 系统原型
明确怎么解决问题 - 整体架构设计
- 功能模块划分
- 业务流程设计
- 数据结构设计
- 接口设计
- 用户界面设计
- 算法设计
- 非功能性设计
产出的文档 - 系统设计说明书
- 系统架构
- 功能模块
- 数据存储设计
- 用户界面设计
- 接口设计
- 技术选型
开始解决问题 - 系统实现
- 单元测试
- 系统集成
- 版本控制
检查并修正问题 - 功能测试
- 非功能测试
- 集成测试
产出的文档 - 可运行的系统、
- 代码变更记录
产出的文档 - 测试方案
- 测试报告
注意:这里未包含第一个阶段计划阶段和最后一个阶段实施与维护阶段。
抽象的整体 逐渐解耦的个体 集成的整体
软件系统的生命周期
需求分析阶段 系统设计阶段 系统实现阶段 系统测试阶段
明确是什么问题 - 明确用户需求(√)
- 梳理业务流程
- 定义软件功能(√)
- 确定性能要求
- 规划用户界面
- 识别潜在风险
- 建立需求基线
产出的文档 - 需求规格说明书
- 系统参与角色(√)
- 不同角色的功能(√)
- 主要的业务流程
- 系统原型
明确怎么解决问题 - 整体架构设计
- 功能模块划分
- 业务流程设计
- 数据结构设计
- 接口设计
- 用户界面设计
- 算法设计
- 非功能性设计
产出的文档 - 系统设计说明书
- 系统架构
- 功能模块
- 数据存储设计
- 用户界面设计
- 接口设计
- 技术选型
开始解决问题 - 系统实现
- 单元测试
- 系统集成
- 版本控制
检查并修正问题 - 功能测试
- 非功能测试
- 集成测试
产出的文档 - 可运行的系统
- 代码变更记录
产出的文档 - 测试方案
- 测试报告
注意:这里未包含第一个阶段计划阶段和最后一个阶段实施与维护阶段。
抽象的整体 逐渐解耦的个体 集成的整体
源码联系UP主 -> https://space.bilibili.com/329101171
电影票销售系统
- 系统服务人群:
- 购票用户。购票用户信息包含:用户ID、姓名、性别、
电话、密码、邮箱、账户余额 - 电影院管理员。每个电影院一名管理员,电影院管理员
信息包含:管理员ID、所属影院、姓名、邮箱、密码 - 要求:
- 购票用户。购票用户信息包含:用户ID、姓名、性别、
- 用户ID、管理员ID均为字母数字组合的字符串,长度6-10个字
符 - 电话号码为11位数字
- 邮箱必须符合规范***@.
电影票销售系统 - 电影场次信息包含:
- 场次号、所属影院、放映影厅、电影开始时间、电影结束时间、电
影时长、场次余票数、场次票价、场次放映类型(如英语、中文等
)、该场次优惠活动等
- 场次号、所属影院、放映影厅、电影开始时间、电影结束时间、电
- 影厅信息包含:
- 影厅编号、影厅总座位数、影厅座位分布图和座位编号、影厅类型
(如3D、4D、imax等)
- 影厅编号、影厅总座位数、影厅座位分布图和座位编号、影厅类型
- 要求:
- 场次号:字母(影院名拼音首字母缩写)+数字(自行设计编号方
案) - 时间相关信息:符合时间格式hh:mm
- 场次号:字母(影院名拼音首字母缩写)+数字(自行设计编号方
- 假设:
- 同一部电影在同一家影城排片都在每一天的固定若干时间。
电影票销售系统
- 同一部电影在同一家影城排片都在每一天的固定若干时间。
- 购票用户功能:
- 登陆:输入用户ID和密码登陆系统。
- 影片场次查询:根据系统提供的信息进行场次查询。
- 根据影片名查询,默认返回当日场次;
- 根据影片名+影院名查询,默认返回当日场次;
- 可用放映场次类型(如英语、中文等)、放映影厅类型(如3D
、4D、imax等)等过滤查询结果; - 根据放映开始时间排序所有场次;
- 根据场次票价排序所有场次;
- 根据场次余票数排序所有场次;
- 查询之后允许用户购票,购票时具有座位推荐功能;
- 系统也可以有热门场次推荐,可根据价格或热点影院或影厅等
来推荐,此处可自行确定用什么规则来推荐。
电影票销售系统 - 购票用户功能:
- 用户购票:用户根据需要浏览并可选择感兴趣的场次。
- 同一个订单只包含一个场次,可以包含多个座位(最多三个)
;购买的座位与已售出的座位不能相隔仅一个座位; - 同一名用户购买的多个影片场次的时间冲突时,系统应给出提
示;同一名用户从第二次开始购买相同影片的影票时,系统应
给出提示; - 规定一名用户一天最多购买五个场次的影票;
- 每个场次购票的座位数不能超过座位总数;座位编号不能冲突
; - 用户账户余额不足时,需要先充值再继续购票;
- 用户购买有优惠活动的场次票时,按优惠活动进行结算,优惠
活动自行设计。
电影票销售系统 - 购票用户功能:
- 个人信息管理
- 对个人信息中的电话、密码及邮箱进行修改
- 取消订单
- 在未付款之前用户可以取消自己的订单
- 假设:可模拟付款
- 查询购票后的订单
- 查看用户曾经的购票记录
电影票销售系统 - 影院管理员功能:
- 登陆:输入管理员ID和密码登陆系统。
- 订单管理:
- 查看用户订单情况:
- 查询管理员自己所属影院的场次的订票情况(各场次已被
订票的详细信息,如:何时哪个用户购买了哪个场次的哪个
座位)
- 查询管理员自己所属影院的场次的订票情况(各场次已被
- 统计用户订单信息:
- 按已购票人数排序还未放映的本影院所有的场次信息
- 按场次上座率排序已经放映结束的所有历史场次信息(可
以按日期分区段进行排序显示) - 按场次总票价收入排序已经放映结束的所有历史场次信息
(可以按日期分区段进行排序显示),并可计算排序显示
出影厅总票价收入(可以按日期分区段进行排序显示)
电影票销售系统
- 影院管理员功能:
- 影厅管理:针对管理员本影院开设的影厅
- 影厅查询:查询所有开设的影厅信息
- 添加影厅:添加一个新的影厅
- 场次管理:针对管理员本影院的排片场次
- 场次查询:查询所有排好的场次信息
- 添加场次:添加新的场次(排片)
- 排片时间应该考虑错开各影厅入场和散场的时间(错开人
流),在排片时系统关于排片时间可以给予智能提示 - 个人信息管理
- 排片时间应该考虑错开各影厅入场和散场的时间(错开人
- 对个人信息中的密码及邮箱进行修改
电话费统计管理系统
- 系统服务人群:
- 用户。用户信息包含:用户ID、姓名、性别、电话、密
码、邮箱、用户类型(如学生、教师或其他等)、话费
账户相关信息 - 运营商管理员。每个运营商一名管理员,运营商管理员
信息包含:管理员ID、所属运营商、姓名、邮箱、密码 - 要求:
- 用户。用户信息包含:用户ID、姓名、性别、电话、密
- 用户ID、管理员ID均为字母数字组合的字符串,长度6-10个字
符 - 电话号码为11位数字
- 邮箱必须符合规范***@.
电话费统计管理系统 - 话费账户信息包含:
- 电话号码、国际长途通话时间、国内电话通话时间、套餐费、当月
费用、话费余量、流量余量等。
- 电话号码、国际长途通话时间、国内电话通话时间、套餐费、当月
- 套餐信息包含:
- 套餐名称、套餐价格、套餐类型(如面向学生、教师或其他等)、
套餐优惠信息、套餐话费时长、套餐总流量。
- 套餐名称、套餐价格、套餐类型(如面向学生、教师或其他等)、
- 要求:
- 时间相关精确到分,不到一分钟按一分钟计。
- 用户购买套餐需要在前一套餐时间到期之后。
电话费统计管理系统
- 用户功能:
- 登陆:输入用户ID和密码登陆系统。
- 运营商套餐查询:根据系统提供的信息进行套餐查询。
- 根据套餐名查询;
- 根据运营商名查询;
- 根据套餐价格排序所有套餐;
- 根据套餐流量排序所有套餐;
- 根据套餐话费时长排序所有套餐;
- 查询之后允许用户购买套餐;
- 系统也可以有套餐推荐,可根据价格或热点套餐等来推荐,此
处可自行确定用什么规则来推荐。
电话费统计管理系统 - 用户功能:
- 用户打电话计费
- 模拟用户打电话和上网使用流量,记录通话时间和流量使用;
拨打电话时可以通过选项确定通话类型,也可以通过拨号确定
; - 如果属于套餐内的服务,则从套餐减去;如果超出套餐规定的
量或者没有购买套餐,按某规则进行计费,例如:国内电话费
(0.18元/3分钟)、国际长途电话全价(1.0元/分钟)、上网流量
(0.1元/兆)等,以上数值仅为示意,自行编制计费规则; - 可根据用户类型或者其购买套餐的类型来决定用户是否能够欠
费,以及能够欠费多少,自行编制规则; - 用户账户余额不足时,需要先充值再继续使用电话;
- 根据用户的电话费使用情况来为用户提供优惠活动,例如送话
费或者送流量等,优惠活动自行设计。
电话费统计管理系统 - 用户功能:
- 个人信息管理
- 对个人信息中的电话、密码及邮箱进行修改
- 查询话费清单
- 可以查询用户通话清单(本机号码、对方号码、通话时间、通话
类型、当次话费) 及流量使用明细; - 可以按时间分区统计用户累计通话及流量情况。
电话费统计管理系统 - 运营商管理员功能:
- 登陆:输入管理员ID和密码登陆系统。
- 话费查询统计管理:
- 查看用户套餐情况:
- 查询管理员自己所属运营商的套餐的购买情况(如:何时
哪个用户购买了哪个套餐)
- 查询管理员自己所属运营商的套餐的购买情况(如:何时
- 统计用户通话信息:
- 统计各类型电话(如本地、国内、国际等)的通话总时数
; - 对各个时段(2小时为一段)的通话业务(包括总业务量和不
同种类电话的业务量)进行排序; - 对所有用户进行电话费用(包括通话和流量)排序。
电话费统计管理系统
- 统计各类型电话(如本地、国内、国际等)的通话总时数
- 运营商管理员功能:
- 套餐管理:针对管理员所属运营商开设的套餐
- 套餐查询:查询所有开设的套餐信息
- 添加套餐:添加一个新的套餐
- 个人信息管理
- 对个人信息中的密码及邮箱进行修改
作业提交 - 小组文档
- 以小组为单位提交压缩包
- 命名规则:组长中方学号-组长中文姓名.rar
- 包含:
- 源程序每组一份;
- 可执行程序每组一份;
- 设计及测试报告每组一份,需包含如下内容:
- 系统分析与设计(详见28页)
- 系统测试结果
- 程序运行情况截图及简要说明;
- 验收报告每组一份:包含三张表,详见27页;
- 个人文档
- 个人实践报告每人一份
- 命名规则:中方学号-姓名.doc/docx
- 个人主要负责工作
- 个人实践感想
- 不少于2000字
- 模板见云平台
作业提交 - 验收报告格式:
- 表一:小组成员
- 表二:核心技术描述
- 表三:实现功能描述
学号 姓名 负责工作 贡献度
一级功能 二级功能 功能描述 说明
用户个人
信息管理
修改密码 修改当前登录的用户密码 新密码必须符合密码规则
增加地址 为当前登录用户增加一个新的收货地
址
数据结构 结构体数组□ 链表□ 其它
数据存储 使用文件 描述具体的文件名称及其作用
未使用文件 描述具体使用的数据存储技术
其它技术
作业提交
- 系统分析与设计部分内容:
- 系统总体分析与设计
- 系统总体功能描述(包含模块图及整个系统的总体功能描述)
- 接口定义规范(按照什么原则来命名接口)
- 工程组架构设计(分层设计还是分模块设计)
- 系统的数据结构描述(系统需要处理什么样的数据,这些数据以什么形式存
储及程序运行过程中使用的数据结构描述) - 系统的开发环境及运行环境描述(包含软硬件环境)
- 模块详细设计
- 功能概述
- 处理流程(包含流程图及详细的处理流程)
- 模块的输入输出(包含输入输出的数据描述及数据结构或存储格式描述)
- 模块的接口描述(包含哪些接口,接口名字、接口参数名、参数类型、参数
描述,返回值名,返回值类型、返回值描述,接口的作用)
作业提交 - 提交方式
- 2024年9月19日23:59之前
- 上传到云平台
- 小组文档和个人文档分别提交
- 上传文件为0字节的无效(注意检查)
验收
- 验收当天小组内所有同学必须到场接受检查;
- 小组内不允许出现如下工种:
- 只负责文字内容;
- 只负责收集数据;
- 只负责数据录入;
- 只负责试用系统;
- 负责如上任何工作组合;
- 如果有同学单独负责测试,那么请按照软件工程的具体要求
出具完整的测试报告并给出测试用例。
评价标准 - 态度
- 课堂表现
- 抄袭情况(一经发现零分处理)
- 作业完成情况
- 是否正确运行
- 是否遵守编程规范(参考附件)
- 是否有容错机制
- 界面是否友好
- 是否模块化
- 是否注释
- 实践报告内容及格式
一些小建议
- 如果C语言没有掌握好,不要开始用C++;
- 学好一种编程语言对于后续学习其他编程语言很重要,基础内容一通百通;
- 掌握知识的道路上,哪怕是迈出一小步都值得庆祝!
- 不要抄袭,要以自己的作品为荣;
- 试对是一种需要花费时间却不容易遗忘的学习方法;
- 不要期待大模型可以为我们编程,前提是我们可以读懂,可以发现问
题,可以理解编程的思路; - 选择比自己的能力稍微高一点的难度级别,更加容易达成目标同时更
加有成就感; - 在周围世界中发现不懂的东西越多,说明我们思考得越多,这时候接
受知识的能力就越强,学习的动力越足;当发现问题越来越多的时候
,正是我们发动自己拿下知识的最佳时间,放慢脚步各个击破!- 要认真、仔细、耐心;
- 不要读死书,死读书;
- 任何问题和建议都可以提出。
第一次课后需要完成的任务 - 按先后顺序进行:
① 分组并确定组长
② 组长负责线上填报各组成员信息(学号、姓名)
③ 分组讨论需求- 调研市场上同类产品功能
- 理解需求,完成角色及其功能的理解(重要!!!!! )
- 对每个功能完成业务逻辑分析(重要!!!!!)
④ 确定并安装环境 - 小组内所有同学开发环境统一
⑤ 开始熟悉相关技术
⑥ 请填写问卷反馈关于本课程你最想问的三个问题(云平台发布)