/magical-box

Primary LanguageC#Apache License 2.0Apache-2.0

神奇的盒子

本项目源于南京邮电大学自动化学院、人工智能学院自动化专业程序设计课程。本项目是由 C# 构建,使用 Entity Framework (EF) Core 操作本地 SQLite 文件数据库存储数据,使用语言集成查询 (LINQ) 从数据库检索实体类的实例,使用 Windows Presentation Foundation (WPF) 作为 UI 框架所构建的桌面客户端应用程序。

关于作者

前端废物,曾经想用前端技术栈构建桌面应用(React Native YYDS!),但受制于程序设计课程的语言限制,被迫使用 C# + WPF + SQLite 构建项目,而且项目差点没写完

程序设计要求

出题人:许棣华

面向专业:通信工程

难度等级:4

问题描述

手机等电子设备在使用过程中发出的信号可能干挠飞机驾驶舱与地面的正 常通信,使飞机处于错误操作状态,严重影响飞行安全。针对这一特殊情况,某 航班进行大胆革新,制作了一批“神奇的盒子”。在乘客在乘坐飞机时,由该航 班的乘务人员发给每个乘客,供乘客放置手机等电子产品。这些盒子上都有编号, 只要将电子设备放进去,无论什么状态都能自动转为“安全飞行模式”,既能正 常使用,也能保证飞行的安排。飞机着陆后,乘务人员将回收这些盒子。请你设 计一款方便乘务人员管理这些“神奇的盒子”的软件,并对这一服务展开客户满 意度调查,为航空公司进一步改善服务提供依据。

功能要求

这款软件应该包括以下几个基本功能:

  1. 乘务人员通过口令验证进入该系统;

  2. 盒子发放。乘务人员在发放盒子的过程中,需要登记乘客的姓名、有效证件、登机牌,出发地和目的地,手机机型及手机号码,备用联系方式,以及盒子的编号等信息。可以考虑登机牌已经包含了乘客身份的有效信息。另外,乘客的“备用联系方式”必须要填写;身份证号码等信息输入有明显错误也应给出提示。

  3. 信息保存。将登记的所有信息以文件形式保存。

  4. 回收盒子。飞机着陆时,乘客可以将手机等电子设备取出,将空的盒子直接还给乘务员,也可以放在自己的位置上离开,由乘务人员来回收,乘务人员收到盒子需确认“已归还”。所有的信息也必须保存到文件中。

  5. 找寻遗失手机的乘客。如果发生手机未取出就离开的乘客,乘务人员能根据盒子的号码找到该乘客的备用联系方式,以取得联系。

  6. 满意度调查。针对某航班这一服务,对乘客进行满意度调查。在乘客离开时按键,满意为 1,不满意为 2,不表态为 0。请统计乘客的满意度。

选做要求

  1. 如果乘客有什么其他意见和建议,请记录下来或由乘客填写,以便在以后的工作总结会议上进行总体展示;

  2. 参加满意度调查的乘客,可参加抽奖活动。请设计一个抽奖过程,以手机号码为准;

  3. 如果有更好的、更合理功能,可自加。

其他要求

  1. 界面美观,交互方便,实用性强。

  2. 注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

  3. 程序的层次清晰,可读性强。

  4. 变量、函数命名符合规范。

  5. 如有可能,可使用 MFC 等开发工具,实现彩色或图形操作界面。

开发环境

可以选择 TC2.0、TC3.0、VC++6.0 等开发环境,或者与老师讨论,选择自己熟悉的开发工具与平台。

如何编译运行

本项目使用 Visual Studio 2022 基于 .NET 6.0 开发,因此推荐使用安装了 .NET 开发工具集的 Visual Studio 2022 作为开发环境编译运行本项目(理论上该程序可以在 Visual Studio 2017 及以后版本的 Visual Studio 中编译运行)。

依赖安装

在项目正式开始编译运行前,需要先安装 Entity Framework Core,在这里我使用 NuGet 来进行 Entity Framework 的安装。

全局安装

dotnet tool install --global dotnet-ef --version 6.0.0

本地安装

dotnet tool install --local dotnet-ef --version 6.0.0

PS. 需要在全局安装依赖后再在项目文件夹进行一次本地安装

更新数据库

将本地数据库更新为最新迁移:

dotnet ef database update

注意:在更新本地数据库时需要关闭正在运行的项目程序,否则会导致 Build failed.

编译程序

直接编译运行即可启动程序。

其他

该程序在运行时自动创建的空数据库位于 %AppData%\Local\MagicalBox 目录下。

如何操作与使用该程序

程序在设计之初就考虑到了用户交互反馈的及时性,因此几乎用户的所有操作都能得到相应的反馈。对于用户的错误操作,程序也会给出对应的报错弹窗引导用户正确使用该程序,因此使用该程序几乎无需任何学习成本。

用户端

用户端信息由管理端导入,用户登录需要使用盒子编号及身份证号。登录之后用户能够对飞行旅途进行打分与反馈,在完成打分或反馈后,用户会被提供一次抽奖机会进行随机抽奖。

管理端

管理端可以通过注册功能新建账号,注册账号时需要提供注册口令以及之后会用于登录的用户名及密码。在登录后管理员能够对用户信息进行管理,包括但不限于添加删除乘客信息。同时管理员也能使用盒子编号快捷搜索乘客信息,并设置乘客盒子归还状态或删除该条乘客信息。

其他

  • 该项目基于 dotNET 6.0 开发,因此运行编译完成的可执行文件需确保电脑上安装有 dotNET 6.0 Runtime;

  • 程序自动创建的数据库初始为空,因此在登录系统前需要先进行注册账号以及导入信息等操作;

  • 该系统乘客端没有注册功能,乘客信息由管理员导入系统,乘客端需要使用管理员导入系统的本人信息登陆系统;

  • 管理端注册时默认的注册口令为 0000;

  • 数据库为 SQLite 数据库,可以使用 Navicat 应用程序连接查看。

参考文档

Windows Presentation Foundation - WPF .NET Framework | Microsoft Docs

NuGet Gallery | dotnet-ef 6.0.0

Entity Framework Core - EF Core | Microsoft Docs