资源简介

目前大家比较熟悉共享单车的使用。请编制一个共享单车的管理程序,实现如下基本功能。假设有5种品牌的共享单车(品牌内容自定)。 针对该5种品牌的共享单车,自行设计一套包含每种单车的品牌名称、投放量、投放点、某一时间点的在用数量、每辆车的每天骑行次数及单次里程和总里程、开锁过程中发现的损坏次数等信息(所有相关数据均自行设计)的数据结构; 随着骑行活动的开展,待使用单车的数量将发生变化。要求能对每种单车的使用数量及待使用的数量进行查询统计并输出; 对于某一投放点的某一品牌的单车,如果无备用车(待使用的车均为备用车),或备用车均为损坏的车,系统应能给出信息提示; 对于损坏报修的车辆,系统能够进行及时的统计,并能在投放数量中削减损坏车辆的数量,形成真实的有效投放量; 能够对客户信息进行处理,包括注册的用户名、电话号码、骑行里程、骑行习惯(比如70%以上的出行时间集中在某个时间段,时间段按时钟整点划分)、每天平均的骑行时间等; 该系统能进行当日使用状况的统计,请用链表排序(排序算法不限)提示交易使用次数排在前三名的单车品牌; 假设每种单车的使用是收费的,如第一个小时是免费的,第二个小时开始每小时收费0.5元,各品牌可各自推出优惠收费条件(优惠条件请自定义),然后根据假设的使用情况,统计出各种品牌的日营业额,并对各品牌的受欢迎程度进行排序。

资源截图

代码片段和文件信息

// 共享单车.cpp : 
/*
使用说明:
*为了测试简单,投放地点用数字1-5代替 ,车辆种类用数字1-5代替,分别为1牌车,2牌车…… 
*存在一些冗余函数和变量 
*利润的计算比较难,因为是以真实的时间为参考,所以至少一个小时才会有利益 
*/
//

#include 
#include 
#include 
#include 
#include  
#include 
#include   
#include 
#include 
#include 
#include 

#define MAX 65536
#define LEN_ sizeof(Node_user)  
#define LEN_1 sizeof(Node_bike)
using namespace std;



int totnumber_user = 0;//用户人数
int totnumber_bike[6];//车辆数
int totnumber_bike_inuse[6];//正在用的车辆数
multimap totprofit;//总利润
//骑行次数
struct tot_ride
{
int category;
int cnt;
tot_ride* next;
}firstbike;

struct Time { //作为一个时间节点或者时间段使用 
int minu hour day;
Time(int a = 0 int b = 0 int c = 0) :minu(a) hour(b) day(c) {}
Time(SYSTEMTIME &a) {
minu = a.wMinute;
hour = a.wHour;
day = a.wDay;
}
Time operator +(Time &a) { //只做时间段累加 
Time b = a;
b.minu += minu;
b.hour += hour;
b.hour += b.minu / 60;
b.minu %= 60;
return b;
}
Time operator -(Time &a) { //只做计算时间差 
Time b = a;
int h = hour;
if (b.day != day)//只考虑半夜骑车的情况,不考虑骑24小时以上... 
{
if (b.day>day)b.hour += 24;
else h += 24;
}
int m = abs((h - b.hour) * 60 + minu - b.minu);
b.minu = m % 60;
b.hour = m / 60;
return b;
}
Time operator =(SYSTEMTIME &a) {
minu = a.wMinute;
hour = a.wHour;
day = a.wDay;
}
int operator /(int day) { //只做平均时间 
int min = hour * 60 + minu;
return min / day;
}
};
struct Ride_time {
Time st ed;//起始时间和结束时间  
Time lasting;
Ride_time(int a = 0 int b = 0 int c = 0) :st(a) ed(b) lasting(c) {}
Ride_time(Time &a Time &b) :st(a) ed(b) { lasting = a - b; }

};
struct Ride_info { //骑行历史信息 
int ride_cnt;//骑行次数 
double totdis; //总距离 距离都无法更新
int totday;
double dis[MAX];//每次骑行距离 
Ride_time ride_time[MAX];
Time totime;
Ride_info(int a=0int b=0int c=0):totime(0)ride_cnt(a)totdis(b)totday(c) {memset(dis 0 sizeof(dis));}
void update(double dis0 Ride_time a) { //更新数据
ride_cnt++;
dis[ride_cnt] = dis0;
totdis += dis0;
ride_time[ride_cnt] = a;
if (ride_time[ride_cnt].st.day != ride_time[ride_cnt].ed.day || ride_cnt != 0 && ride_time[ride_cnt].st.day != ride_time[ride_cnt - 1].ed.day || ride_cnt == 0)totday++;
totime = totime + a.lasting;
}
int average_ridetime() { //每天骑多少分钟 
if (totday == 0)return 0;
return totime / totday;
}
void main_ride() { //骑行习惯输出
int hours[13] = { 0 };
for (int i = 1; i <= ride_cnt; i++)
hours[ride_time[i].st.hour / 2]++;
int max1 = 0 t;
for (int i = 0; i<12; i++)
{
if (hours[i]>max1)
{
max1 = hours[i];
t = i;
}
}
if(ride_cnt)
printf(“有%d%%的出行时间集中在%d——%d时间段\n每天平均骑行时间为%d分钟\n“ max1 / ride_cnt * 100 t * 2 t * 2 + 2 average_ridetime());
}
};

//车辆数据
struct Node_bike {
char number[105];//车牌 
char pw[105];//密码
int catrgory;//种类 好像打错了 但是不影响 1-5
cha

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    .CA....   2020325  2018-06-09 14:45  共享单车.exe

    .CA....     47005  2018-06-09 13:42  流程图.pptx

    .CA....     23219  2018-06-10 15:56  共享单车.cpp

----------- ---------  ---------- -----  ----

              2090549                    3


评论

共有 条评论