“航班订票系统”程序的说明如下: 1.用户分为admin和普通用户两种,admin可以进行航班信息的录入、删除、修改,普通用户可以进行查询、订票、退票。 2.启动程序时,输入的用户名如果以前没有,则系统自动完成注册,如果有,则进行密码比较以判断是否允许登录。同时运行结果显示为: 请输入用户名: 请输入密码: (如果之前的用户存在就显示登录成功,否则直接注册成功进入菜单,如果密码不匹配则显示密码错误) 3. 无论是admin还是普通用户,他们操作的结果都要存盘,以便在以后运行本系统时还能使用那些数据。 4.程序必须对一切用户的输入都进行严格的合法性检查。 5.不能发生违背常理的错误(例如应该阻止admin删除某个已经存在订单的航班,或阻止他将航班座位数修改成小于订单的数目,等等)。 6.程序一定要尽量地简洁,包含文字 7.要求运行结果直接显示为用户注册登录部分(请输入用户名: 请输入密码:) 登录成功后则清屏进入菜单: 航班订票系统 欢迎您,用户名 请选择您要办理的业务: 1.列出所有航班 2.查询航班余票 3.订票 4.退票 5.列出我的订单 6.退出 (注:运行结果直接显示为 请输入用户名: 请输入密码: 清屏进入菜单后每选择一项都要清屏再进入) 并说出代码的中心及重点

时间: 2024-04-05 14:29:35 浏览: 25
中心:航班订票系统的实现。其中包括用户身份管理、航班信息的录入、删除、修改、查询、订票、退票和订单管理等功能。 重点:合法性检查、数据存储和用户界面设计。 合法性检查是确保用户输入的数据符合规范,避免程序出错或数据异常。数据存储是保证系统能在多次运行中保存和读取之前的数据,实现持久化存储。用户界面设计是让用户能够直观地使用系统,提高用户体验。
相关问题

Python设计一个程序,程序功能如下:1.用户登录界面,进行用户信息验证。2.主界面包含一个主菜单(即顶级菜单)和一个快捷菜单。

好的,以下是 Python 程序的实现: ```python # 用户信息验证函数 def user_login(): # 假设用户名为 admin,密码为 123456 username = input("请输入用户名:") password = input("请输入密码:") if username == "admin" and password == "123456": print("登录成功!") return True else: print("用户名或密码错误,请重新输入!") return False # 主菜单函数 def main_menu(): print("欢迎进入主菜单!") print("1.选项一") print("2.选项二") print("3.选项三") print("4.退出") # 快捷菜单函数 def quick_menu(): print("欢迎进入快捷菜单!") print("1.选项一") print("2.选项二") print("3.选项三") # 程序入口 if __name__ == "__main__": # 用户登录验证 while not user_login(): pass # 进入主界面 while True: print("=" * 20) print("请选择您要进入的菜单:") print("1.主菜单") print("2.快捷菜单") print("3.退出") choice = input("请输入选项:") if choice == "1": main_menu() elif choice == "2": quick_menu() elif choice == "3": print("程序已退出!") break else: print("输入有误,请重新输入!") ``` 程序说明: 1. `user_login` 函数用于实现用户登录验证,输入正确的用户名和密码后返回 `True`,否则返回 `False`。 2. `main_menu` 函数用于显示主菜单,可以根据需要修改菜单选项。 3. `quick_menu` 函数用于显示快捷菜单,可以根据需要修改菜单选项。 4. 在程序入口处,先进行用户登录验证,如果验证不通过,则一直重复验证,直到验证通过为止。 5. 进入主界面后,根据用户的选择进入相应的菜单,如果选择退出,则程序结束。 注意:为了保证程序的安全性,建议将用户名和密码存储在配置文件或数据库中,而不要直接写在代码中。

用c语言写航班订票系统,要求如下用户分为admin和普通用户两种,admin可以进行航班信息的录入、删除、修改,普通用户可以进行查询、订票、退票。 启动程序时,输入的用户名如果以前没有,则系统自动完成注册,如果有,则进行密码比较以判断是否允许登录。不能发生违背常理的错误(例如应该阻止admin删除某个已经存在订单的航班,或阻止他将航班座位数修改成小于订单的数目,等等)。

以下是一个简单的航班订票系统的C语言代码,实现了管理员和普通用户的功能要求: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define MAX_FLIGHTS 100 #define MAX_USERS 100 #define MAX_TICKETS 1000 struct Flight { int id; char from[20]; char to[20]; char date[20]; int seats; int price; }; struct User { char name[20]; char password[20]; int isAdmin; }; struct Ticket { int flightId; char userName[20]; }; struct Flight flights[MAX_FLIGHTS]; int nFlights = 0; struct User users[MAX_USERS]; int nUsers = 0; struct Ticket tickets[MAX_TICKETS]; int nTickets = 0; void addUser(char *name, char *password, int isAdmin) { strcpy(users[nUsers].name, name); strcpy(users[nUsers].password, password); users[nUsers].isAdmin = isAdmin; nUsers++; } void addFlight(char *from, char *to, char *date, int seats, int price) { flights[nFlights].id = nFlights + 1; strcpy(flights[nFlights].from, from); strcpy(flights[nFlights].to, to); strcpy(flights[nFlights].date, date); flights[nFlights].seats = seats; flights[nFlights].price = price; nFlights++; } void printFlights() { printf("ID\tFrom\tTo\tDate\tSeats\tPrice\n"); for (int i = 0; i < nFlights; i++) { printf("%d\t%s\t%s\t%s\t%d\t%d\n", flights[i].id, flights[i].from, flights[i].to, flights[i].date, flights[i].seats, flights[i].price); } } int login(char *name, char *password) { for (int i = 0; i < nUsers; i++) { if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) return i; } return -1; } void bookTicket(int userId, int flightId) { if (flights[flightId - 1].seats <= 0) { printf("Sorry, this flight is fully booked.\n"); return; } for (int i = 0; i < nTickets; i++) { if (tickets[i].flightId == flightId && strcmp(tickets[i].userName, users[userId].name) == 0) { printf("You have already booked this flight.\n"); return; } } flights[flightId - 1].seats--; strcpy(tickets[nTickets].userName, users[userId].name); tickets[nTickets].flightId = flightId; nTickets++; printf("Ticket booked successfully!\n"); } void cancelTicket(int userId, int flightId) { int ticketIndex = -1; for (int i = 0; i < nTickets; i++) { if (tickets[i].flightId == flightId && strcmp(tickets[i].userName, users[userId].name) == 0) { ticketIndex = i; break; } } if (ticketIndex == -1) { printf("You have not booked this flight.\n"); return; } flights[flightId - 1].seats++; for (int i = ticketIndex; i < nTickets - 1; i++) { tickets[i] = tickets[i + 1]; } nTickets--; printf("Ticket cancelled successfully!\n"); } void deleteFlight(int flightId) { for (int i = 0; i < nTickets; i++) { if (tickets[i].flightId == flightId) { printf("Cannot delete this flight because there are tickets booked for it.\n"); return; } } for (int i = flightId - 1; i < nFlights - 1; i++) { flights[i] = flights[i + 1]; } nFlights--; printf("Flight deleted successfully!\n"); } void modifyFlight(int flightId, int seats, int price) { for (int i = 0; i < nTickets; i++) { if (tickets[i].flightId == flightId && flights[flightId - 1].seats < seats) { printf("Cannot modify this flight because there are more tickets booked than the new number of seats.\n"); return; } } flights[flightId - 1].seats = seats; flights[flightId - 1].price = price; printf("Flight modified successfully!\n"); } int main() { addUser("admin", "admin123", 1); addUser("user1", "user123", 0); addUser("user2", "user123", 0); addFlight("Beijing", "Shanghai", "2021-07-01", 100, 500); addFlight("Shanghai", "Beijing", "2021-07-02", 100, 500); addFlight("Beijing", "Guangzhou", "2021-07-03", 100, 800); addFlight("Guangzhou", "Beijing", "2021-07-04", 100, 800); int userId = -1; char name[20], password[20]; printf("Enter your name: "); scanf("%s", name); printf("Enter your password: "); scanf("%s", password); userId = login(name, password); if (userId == -1) { printf("User not found or password incorrect. Please try again.\n"); return 0; } printf("Welcome, %s!\n", users[userId].name); while (1) { if (users[userId].isAdmin) { printf("1. Add flight\n"); printf("2. Delete flight\n"); printf("3. Modify flight\n"); printf("4. Print flights\n"); printf("5. Exit\n"); int choice; printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: { char from[20], to[20], date[20]; int seats, price; printf("Enter from: "); scanf("%s", from); printf("Enter to: "); scanf("%s", to); printf("Enter date (yyyy-mm-dd): "); scanf("%s", date); printf("Enter number of seats: "); scanf("%d", &seats); printf("Enter price: "); scanf("%d", &price); addFlight(from, to, date, seats, price); printf("Flight added successfully!\n"); break; } case 2: { int flightId; printf("Enter flight ID: "); scanf("%d", &flightId); if (flightId <= 0 || flightId > nFlights) { printf("Invalid flight ID. Please try again.\n"); break; } deleteFlight(flightId); break; } case 3: { int flightId, seats, price; printf("Enter flight ID: "); scanf("%d", &flightId); if (flightId <= 0 || flightId > nFlights) { printf("Invalid flight ID. Please try again.\n"); break; } printf("Enter number of seats: "); scanf("%d", &seats); printf("Enter price: "); scanf("%d", &price); modifyFlight(flightId, seats, price); break; } case 4: printFlights(); break; case 5: return 0; default: printf("Invalid choice. Please try again.\n"); break; } } else { printf("1. Book ticket\n"); printf("2. Cancel ticket\n"); printf("3. Print flights\n"); printf("4. Exit\n"); int choice; printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: { int flightId; printf("Enter flight ID: "); scanf("%d", &flightId); if (flightId <= 0 || flightId > nFlights) { printf("Invalid flight ID. Please try again.\n"); break; } bookTicket(userId, flightId); break; } case 2: { int flightId; printf("Enter flight ID: "); scanf("%d", &flightId); if (flightId <= 0 || flightId > nFlights) { printf("Invalid flight ID. Please try again.\n"); break; } cancelTicket(userId, flightId); break; } case 3: printFlights(); break; case 4: return 0; default: printf("Invalid choice. Please try again.\n"); break; } } } return 0; } ``` 在这个程序中,我们定义了航班、用户和订单的结构体,并定义了相应的数组来存储它们。在主函数中,我们首先添加了一些默认的管理员和航班信息,然后让用户输入用户名和密码进行登录。如果输入的用户名不存在,则自动完成注册。之后,我们根据用户的身份不同,分别提供管理员和普通用户的功能。管理员可以添加、删除和修改航班信息,以及查看所有航班信息。普通用户可以查询、订票和退票。在订票和退票时,我们检查航班的剩余座位数和订单情况,防止出现不合理的操作。如果用户输入了无效的选项,则程序会给出相应的提示。

相关推荐

用c语言编写一个程序,功能是: 输入用户名和密码,如果用户不 存在则自动注册,如果用户存在 则验证用户名密码是否正确。用 户分为admin和普通用户两种, 如果用户名是admin,登录后有5 个选项:1.列出所有航班(点击1 进入后显示航班号,座位数,终 点站,起飞时间)2.录入航班信 息(进入后有:请输入要录入的 航班数目,输入后要录入每 一个航班的信息:航班号,座位 数,终点站,起飞时间)3.删除 航班信息(进入后有:请输入要 删除的航班号,输入后即可删除 航班信息)4.修改航班信息(进 入后显示:请输入要修改的航班 号,输入后可修改座位数,终点 站,起飞时间)5.退出。如果用 户名不是admin,则是普通用 户,普通用户进入后,有6个选 项,1.列出所以航班(列出admin 用户录入的航班信息:航班号, 座位数,终点站,起飞时间)2. 查询航班余票(进入后显示:按航班号查询请输入1,按终点站查询请输入2,输入后显示你要查询的航班号或者显示你要查询的终点站,输入航班号或终点站后显示查询信息:航班号,终点站,起飞时间,余票)3.订票(进入后显示:请输入你要预定的航班号,显示余票数,和请输入你要预定的票数)4.退订(进入后显示:你输入你要退订的航班号,输入后显示:请输入退票数目即可完成退票)5.列出我的订单(进入后显示航班号和票数)6.退出(退出程序)

最新推荐

recommend-type

eladmin自动代码生成步骤以及注意事项.docx

将生成的代码复制到前端IDE中,分为两个文件:js文件和index文件。js文件存放于js目录下,而index文件存放于views目录下。 步骤六:重新启动前后端并登录管理员账号 重新启动前后端,登录管理员账号,进入系统管理...
recommend-type

Java实现飞机航班管理系统的思路详解

本资源对学习或工作的朋友具有一定的参考借鉴价值,需要的朋友可以参考下学习Java实现飞机航班管理系统,可以了解系统的技术架构、数据库设计、管理员功能等方面的内容,并可以根据自己的需要进行修改和扩展。
recommend-type

详解Spring Boot Admin监控服务上下线邮件通知

"Spring Boot Admin监控服务上下线邮件通知" Spring Boot Admin是一款功能强大且灵活的监控工具,能够实时...通过配置邮件服务器和邮件通知信息,开发者和运维人员可以快速响应服务的故障,提高系统的可靠性和稳定性。
recommend-type

可靠性测试及模型计算模板

可靠性测试及模型计算模板
recommend-type

电力电子系统建模与控制入门

"该资源是关于电力电子系统建模及控制的课程介绍,包含了课程的基本信息、教材与参考书目,以及课程的主要内容和学习要求。" 电力电子系统建模及控制是电力工程领域的一个重要分支,涉及到多学科的交叉应用,如功率变换技术、电工电子技术和自动控制理论。这门课程主要讲解电力电子系统的动态模型建立方法和控制系统设计,旨在培养学生的建模和控制能力。 课程安排在每周二的第1、2节课,上课地点位于东12教401室。教材采用了徐德鸿编著的《电力电子系统建模及控制》,同时推荐了几本参考书,包括朱桂萍的《电力电子电路的计算机仿真》、Jai P. Agrawal的《Powerelectronicsystems theory and design》以及Robert W. Erickson的《Fundamentals of Power Electronics》。 课程内容涵盖了从绪论到具体电力电子变换器的建模与控制,如DC/DC变换器的动态建模、电流断续模式下的建模、电流峰值控制,以及反馈控制设计。还包括三相功率变换器的动态模型、空间矢量调制技术、逆变器的建模与控制,以及DC/DC和逆变器并联系统的动态模型和均流控制。学习这门课程的学生被要求事先预习,并尝试对书本内容进行仿真模拟,以加深理解。 电力电子技术在20世纪的众多科技成果中扮演了关键角色,广泛应用于各个领域,如电气化、汽车、通信、国防等。课程通过列举各种电力电子装置的应用实例,如直流开关电源、逆变电源、静止无功补偿装置等,强调了其在有功电源、无功电源和传动装置中的重要地位,进一步凸显了电力电子系统建模与控制技术的实用性。 学习这门课程,学生将深入理解电力电子系统的内部工作机制,掌握动态模型建立的方法,以及如何设计有效的控制系统,为实际工程应用打下坚实基础。通过仿真练习,学生可以增强解决实际问题的能力,从而在未来的工程实践中更好地应用电力电子技术。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

图像写入的陷阱:imwrite函数的潜在风险和规避策略,规避图像写入风险,保障数据安全

![图像写入的陷阱:imwrite函数的潜在风险和规避策略,规避图像写入风险,保障数据安全](https://static-aliyun-doc.oss-accelerate.aliyuncs.com/assets/img/zh-CN/2275688951/p86862.png) # 1. 图像写入的基本原理与陷阱 图像写入是计算机视觉和图像处理中一项基本操作,它将图像数据从内存保存到文件中。图像写入过程涉及将图像数据转换为特定文件格式,并将其写入磁盘。 在图像写入过程中,存在一些潜在陷阱,可能会导致写入失败或图像质量下降。这些陷阱包括: - **数据类型不匹配:**图像数据可能与目标文
recommend-type

protobuf-5.27.2 交叉编译

protobuf(Protocol Buffers)是一个由Google开发的轻量级、高效的序列化数据格式,用于在各种语言之间传输结构化的数据。版本5.27.2是一个较新的稳定版本,支持跨平台编译,使得可以在不同的架构和操作系统上构建和使用protobuf库。 交叉编译是指在一个平台上(通常为开发机)编译生成目标平台的可执行文件或库。对于protobuf的交叉编译,通常需要按照以下步骤操作: 1. 安装必要的工具:在源码目录下,你需要安装适合你的目标平台的C++编译器和相关工具链。 2. 配置Makefile或CMakeLists.txt:在protobuf的源码目录中,通常有一个CMa
recommend-type

SQL数据库基础入门:发展历程与关键概念

本文档深入介绍了SQL数据库的基础知识,首先从数据库的定义出发,强调其作为数据管理工具的重要性,减轻了开发人员的数据处理负担。数据库的核心概念是"万物皆关系",即使在面向对象编程中也有明显区分。文档讲述了数据库的发展历程,从早期的层次化和网状数据库到关系型数据库的兴起,如Oracle的里程碑式论文和拉里·埃里森推动的关系数据库商业化。Oracle的成功带动了全球范围内的数据库竞争,最终催生了SQL这一通用的数据库操作语言,统一了标准,使得关系型数据库成为主流。 接着,文档详细解释了数据库系统的构成,包括数据库本身(存储相关数据的集合)、数据库管理系统(DBMS,负责数据管理和操作的软件),以及数据库管理员(DBA,负责维护和管理整个系统)和用户应用程序(如Microsoft的SSMS)。这些组成部分协同工作,确保数据的有效管理和高效处理。 数据库系统的基本要求包括数据的独立性,即数据和程序的解耦,有助于快速开发和降低成本;减少冗余数据,提高数据共享性,以提高效率;以及系统的稳定性和安全性。学习SQL时,要注意不同数据库软件可能存在的差异,但核心语言SQL的学习是通用的,后续再根据具体产品学习特异性。 本文档提供了一个全面的框架,涵盖了SQL数据库从基础概念、发展历程、系统架构到基本要求的方方面面,对于初学者和数据库管理员来说是一份宝贵的参考资料。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依