用c语言实现单车管理 总体需求 单车信息的组成部分为:单车编号(不能重复)、所属城市、标记(是否租借)、单价、骑行次数、骑行总时长、总收入等 租车信息的组成部分为:会员名、单车编号、租借时间、归还时间、租金等 功能需求 1)新单车购入:添加单车信息2)单车查询:根据不同内容如租借标记、单价等查询并显示信息。 3)单车租借:输入会员名、单车编号、租借时间,修改租借标记(每个会员一次只可租借1辆单车) 4)单车归还:输入会员名、编号名称、归还日期,修改租借标记,计算租金。在该操作结束前,应 输出该会员此次归还所需支付的总租金。 (7)单车报废。 6)加入统计功能,可以统计会员租车信息等。

时间: 2023-07-10 21:31:04 浏览: 87
好的,这是一个比较详细的需求描述,你需要实现一个单车管理系统,包括以下功能: - 添加单车信息 - 根据不同内容查询单车信息 - 单车租借 - 单车归还 - 单车报废 - 统计会员租车信息等 下面是一个初步的实现思路: 1. 定义单车信息结构体和租车信息结构体 ``` typedef struct { int bike_id; // 单车编号 char city[20]; // 所属城市 bool is_rented; // 是否租借 float price; // 单价 int ride_count; // 骑行次数 int ride_time; // 骑行总时长 float total_income; // 总收入 } BikeInfo; typedef struct { char member_name[20]; // 会员名 int bike_id; // 单车编号 char rent_time[20]; // 租借时间 char return_time[20]; // 归还时间 float rent_fee; // 租金 } RentInfo; ``` 2. 定义单车信息数组和租车信息数组 ``` #define MAX_BIKE_NUM 100 // 最大单车数量 #define MAX_RENT_NUM 100 // 最大租车数量 BikeInfo bike_info[MAX_BIKE_NUM]; // 单车信息数组 int bike_count = 0; // 当前单车数量 RentInfo rent_info[MAX_RENT_NUM]; // 租车信息数组 int rent_count = 0; // 当前租车数量 ``` 3. 实现添加单车信息功能 ``` void add_bike_info() { if (bike_count >= MAX_BIKE_NUM) { printf("单车数量已达到上限,无法添加。\n"); return; } BikeInfo new_bike; printf("请输入单车编号:"); scanf("%d", &new_bike.bike_id); // 判断单车编号是否重复 for (int i = 0; i < bike_count; i++) { if (bike_info[i].bike_id == new_bike.bike_id) { printf("单车编号已存在,无法添加。\n"); return; } } printf("请输入所属城市:"); scanf("%s", new_bike.city); printf("请输入单价:"); scanf("%f", &new_bike.price); // 将新单车信息添加到单车信息数组中 new_bike.is_rented = false; new_bike.ride_count = 0; new_bike.ride_time = 0; new_bike.total_income = 0; bike_info[bike_count] = new_bike; bike_count++; printf("添加成功。\n"); } ``` 4. 实现单车查询功能 ``` void search_bike_info() { printf("请输入查询方式(1.租借标记 2.单价):"); int option; scanf("%d", &option); switch (option) { case 1: { printf("请输入租借标记(0或1):"); bool is_rented; scanf("%d", &is_rented); printf("单车编号\t所属城市\t是否租借\t单价\t骑行次数\t骑行总时长\t总收入\n"); for (int i = 0; i < bike_count; i++) { if (bike_info[i].is_rented == is_rented) { printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_info[i].bike_id, bike_info[i].city, bike_info[i].is_rented ? "是" : "否", bike_info[i].price, bike_info[i].ride_count, bike_info[i].ride_time, bike_info[i].total_income); } } break; } case 2: { printf("请输入单价区间(用空格隔开):"); float min_price, max_price; scanf("%f %f", &min_price, &max_price); printf("单车编号\t所属城市\t是否租借\t单价\t骑行次数\t骑行总时长\t总收入\n"); for (int i = 0; i < bike_count; i++) { if (bike_info[i].price >= min_price && bike_info[i].price <= max_price) { printf("%d\t%s\t%s\t%.2f\t%d\t%d\t%.2f\n", bike_info[i].bike_id, bike_info[i].city, bike_info[i].is_rented ? "是" : "否", bike_info[i].price, bike_info[i].ride_count, bike_info[i].ride_time, bike_info[i].total_income); } } break; } default: printf("无效的查询方式。\n"); } } ``` 5. 实现单车租借功能 ``` void rent_bike() { char member_name[20]; printf("请输入会员名:"); scanf("%s", member_name); int bike_id; printf("请输入单车编号:"); scanf("%d", &bike_id); // 查找单车信息 int bike_index = -1; for (int i = 0; i < bike_count; i++) { if (bike_info[i].bike_id == bike_id) { bike_index = i; break; } } if (bike_index == -1) { printf("单车编号不存在,请重新输入。\n"); return; } if (bike_info[bike_index].is_rented) { printf("该单车已被租借,请选择其他单车。\n"); return; } // 修改单车信息 bike_info[bike_index].is_rented = true; rent_info[rent_count].bike_id = bike_id; strcpy(rent_info[rent_count].member_name, member_name); time_t t = time(NULL); struct tm tm = *localtime(&t); sprintf(rent_info[rent_count].rent_time, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); rent_count++; printf("租借成功。\n"); } ``` 6. 实现单车归还功能 ``` void return_bike() { char member_name[20]; printf("请输入会员名:"); scanf("%s", member_name); int bike_id; printf("请输入单车编号:"); scanf("%d", &bike_id); // 查找租车信息 int rent_index = -1; for (int i = 0; i < rent_count; i++) { if (strcmp(rent_info[i].member_name, member_name) == 0 && rent_info[i].bike_id == bike_id) { rent_index = i; break; } } if (rent_index == -1) { printf("该会员未租借该单车,无法归还。\n"); return; } int bike_index = -1; for (int i = 0; i < bike_count; i++) { if (bike_info[i].bike_id == bike_id) { bike_index = i; break; } } if (bike_index == -1) { printf("单车编号不存在,请重新输入。\n"); return; } // 修改单车信息 bike_info[bike_index].is_rented = false; bike_info[bike_index].ride_count++; time_t t = time(NULL); struct tm tm = *localtime(&t); char return_time[20]; sprintf(return_time, "%d-%02d-%02d %02d:%02d:%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); int ride_time = (int)(difftime(mktime(&tm), mktime(&rent_info[rent_index].rent_time)) / 60); // 骑行总时长(分钟) bike_info[bike_index].ride_time += ride_time; float rent_fee = ride_time * bike_info[bike_index].price; // 租金 bike_info[bike_index].total_income += rent_fee; // 修改租车信息 strcpy(rent_info[rent_index].return_time, return_time); rent_info[rent_index].rent_fee = rent_fee; printf("归还成功,本次租金为%.2f元。\n", rent_fee); } ``` 7. 实现单车报废功能 ``` void scrap_bike() { int bike_id; printf("请输入要报废的单车编号:"); scanf("%d", &bike_id); int bike_index = -1; for (int i = 0; i < bike_count; i++) { if (bike_info[i].bike_id == bike_id) { bike_index = i; break; } } if (bike_index == -1) { printf("单车编号不存在,请重新输入。\n"); return; } // 将最后一个单车信息覆盖到要报废的单车信息上,实现删除 bike_info[bike_index] = bike_info[bike_count - 1]; bike_count--; printf("报废成功。\n"); } ``` 8. 实现统计会员租车信息功能 ``` void stat_rent_info() { char member_name[20]; printf("请输入会员名:"); scanf("%s", member_name); printf("单车编号\t租借时间\t归还时间\t租金\n"); for (int i = 0; i < rent_count; i++) { if (strcmp(rent_info[i].member_name, member_name) == 0) { printf("%d\t%s\t%s\t%.2f\n", rent_info[i].bike_id, rent_info[i].rent_time, rent_info[i].return_time, rent_info[i].rent_fee); } } } ``` 以上是一个简单的单车管理系统的实现思路,你可以根据自己的需求对其进行修改和完善。
阅读全文

最新推荐

recommend-type

C语言数组实现学生信息管理系统设计

"C语言数组实现学生信息管理系统设计" 本文主要介绍了使用C语言数组实现学生信息管理系统的设计,涵盖了学生信息的录入、输出、查找、排序和删除等功能。该系统使用多个数组来存储学生信息,包括学生姓名、数学成绩...
recommend-type

C语言实现银行管理系统

【C语言实现银行管理系统】是将银行的基本操作如存款、取款、查询、开户、销户、转账等集成到一个程序中,通过C语言编程来模拟真实的银行服务流程。这样的系统可以帮助学习者理解如何在实际场景中应用C语言,同时也...
recommend-type

C语言实现餐饮结账管理系统

"C语言实现餐饮结账管理系统" 本文主要介绍了使用C语言实现的餐饮结账管理系统的设计和实现。该系统主要功能包括信息录入、修改、删除、台面号查询、服务生查询、金额排序、总收入和顾客总数等。 首先,系统使用了...
recommend-type

C语言实现简单航班管理系统

C语言实现简单航班管理系统知识点大全 一、数据结构 * 结构体的使用:在本系统中,我们使用了两个结构体,分别是航班信息结构体(Plane)和乘客信息结构体(Person)。 * 结构体成员变量:我们在结构体中定义了多...
recommend-type

C语言实现车辆出租管理系统

该系统的代码实现主要使用C语言,使用结构体数组存储租赁信息,并使用函数来实现特定的功能,例如录入信息、显示信息、查询信息、添加信息、修改信息、删除信息等。 五、结论 本系统的开发主要目的是为了提高车辆...
recommend-type

Spring Websocket快速实现与SSMTest实战应用

标题“websocket包”指代的是一个在计算机网络技术中应用广泛的组件或技术包。WebSocket是一种网络通信协议,它提供了浏览器与服务器之间进行全双工通信的能力。具体而言,WebSocket允许服务器主动向客户端推送信息,是实现即时通讯功能的绝佳选择。 描述中提到的“springwebsocket实现代码”,表明该包中的核心内容是基于Spring框架对WebSocket协议的实现。Spring是Java平台上一个非常流行的开源应用框架,提供了全面的编程和配置模型。在Spring中实现WebSocket功能,开发者通常会使用Spring提供的注解和配置类,简化WebSocket服务端的编程工作。使用Spring的WebSocket实现意味着开发者可以利用Spring提供的依赖注入、声明式事务管理、安全性控制等高级功能。此外,Spring WebSocket还支持与Spring MVC的集成,使得在Web应用中使用WebSocket变得更加灵活和方便。 直接在Eclipse上面引用,说明这个websocket包是易于集成的库或模块。Eclipse是一个流行的集成开发环境(IDE),支持Java、C++、PHP等多种编程语言和多种框架的开发。在Eclipse中引用一个库或模块通常意味着需要将相关的jar包、源代码或者配置文件添加到项目中,然后就可以在Eclipse项目中使用该技术了。具体操作可能包括在项目中添加依赖、配置web.xml文件、使用注解标注等方式。 标签为“websocket”,这表明这个文件或项目与WebSocket技术直接相关。标签是用于分类和快速检索的关键字,在给定的文件信息中,“websocket”是核心关键词,它表明该项目或文件的主要功能是与WebSocket通信协议相关的。 文件名称列表中的“SSMTest-master”暗示着这是一个版本控制仓库的名称,例如在GitHub等代码托管平台上。SSM是Spring、SpringMVC和MyBatis三个框架的缩写,它们通常一起使用以构建企业级的Java Web应用。这三个框架分别负责不同的功能:Spring提供核心功能;SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架;MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架。Master在这里表示这是项目的主分支。这表明websocket包可能是一个SSM项目中的模块,用于提供WebSocket通讯支持,允许开发者在一个集成了SSM框架的Java Web应用中使用WebSocket技术。 综上所述,这个websocket包可以提供给开发者一种简洁有效的方式,在遵循Spring框架原则的同时,实现WebSocket通信功能。开发者可以利用此包在Eclipse等IDE中快速开发出支持实时通信的Web应用,极大地提升开发效率和应用性能。
recommend-type

电力电子技术的智能化:数据中心的智能电源管理

# 摘要 本文探讨了智能电源管理在数据中心的重要性,从电力电子技术基础到智能化电源管理系统的实施,再到技术的实践案例分析和未来展望。首先,文章介绍了电力电子技术及数据中心供电架构,并分析了其在能效提升中的应用。随后,深入讨论了智能化电源管理系统的组成、功能、监控技术以及能
recommend-type

通过spark sql读取关系型数据库mysql中的数据

Spark SQL是Apache Spark的一个模块,它允许用户在Scala、Python或SQL上下文中查询结构化数据。如果你想从MySQL关系型数据库中读取数据并处理,你可以按照以下步骤操作: 1. 首先,你需要安装`PyMySQL`库(如果使用的是Python),它是Python与MySQL交互的一个Python驱动程序。在命令行输入 `pip install PyMySQL` 来安装。 2. 在Spark环境中,导入`pyspark.sql`库,并创建一个`SparkSession`,这是Spark SQL的入口点。 ```python from pyspark.sql imp
recommend-type

新版微软inspect工具下载:32位与64位版本

根据给定文件信息,我们可以生成以下知识点: 首先,从标题和描述中,我们可以了解到新版微软inspect.exe与inspect32.exe是两个工具,它们分别对应32位和64位的系统架构。这些工具是微软官方提供的,可以用来下载获取。它们源自Windows 8的开发者工具箱,这是一个集合了多种工具以帮助开发者进行应用程序开发与调试的资源包。由于这两个工具被归类到开发者工具箱,我们可以推断,inspect.exe与inspect32.exe是用于应用程序性能检测、问题诊断和用户界面分析的工具。它们对于开发者而言非常实用,可以在开发和测试阶段对程序进行深入的分析。 接下来,从标签“inspect inspect32 spy++”中,我们可以得知inspect.exe与inspect32.exe很有可能是微软Spy++工具的更新版或者是有类似功能的工具。Spy++是Visual Studio集成开发环境(IDE)的一个组件,专门用于Windows应用程序。它允许开发者观察并调试与Windows图形用户界面(GUI)相关的各种细节,包括窗口、控件以及它们之间的消息传递。使用Spy++,开发者可以查看窗口的句柄和类信息、消息流以及子窗口结构。新版inspect工具可能继承了Spy++的所有功能,并可能增加了新功能或改进,以适应新的开发需求和技术。 最后,由于文件名称列表仅提供了“ed5fa992d2624d94ac0eb42ee46db327”,没有提供具体的文件名或扩展名,我们无法从这个文件名直接推断出具体的文件内容或功能。这串看似随机的字符可能代表了文件的哈希值或是文件存储路径的一部分,但这需要更多的上下文信息来确定。 综上所述,新版的inspect.exe与inspect32.exe是微软提供的开发者工具,与Spy++有类似功能,可以用于程序界面分析、问题诊断等。它们是专门为32位和64位系统架构设计的,方便开发者在开发过程中对应用程序进行深入的调试和优化。同时,使用这些工具可以提高开发效率,确保软件质量。由于这些工具来自Windows 8的开发者工具箱,它们可能在兼容性、效率和用户体验上都经过了优化,能够为Windows应用的开发和调试提供更加专业和便捷的解决方案。
recommend-type

如何运用电力电子技术实现IT设备的能耗监控

# 摘要 随着信息技术的快速发展,IT设备能耗监控已成为提升能效和减少环境影响的关键环节。本文首先概述了电力电子技术与IT设备能耗监控的重要性,随后深入探讨了电力电子技术的基础原理及其在能耗监控中的应用。文章详细分析了IT设备能耗监控的理论框架、实践操作以及创新技术的应用,并通过节能改造案例展示了监控系统构建和实施的成效。最后,本文展望了未来能耗监控技术的发展趋势,同时