答案1



// car.cpp : 定义控制台应用程序的入口点。
//

#include <string.h>
#include "stdio.h"
#include "api.h"
#include "car.h"
#include <vector>
#include <algorithm>

typedef struct RecordList
{
 int index;
 QueryResult QR;
 RecordList* next;
}RecordList;

RecordList* RecordListInit()
{
 RecordList* ql = new RecordList();
 ql->index = -1;
 ql->next = NULL;
 return ql;
}
RecordList* Append(RecordList* np, QueryResult qr)
{
 RecordList* newr = new RecordList();
 newr->QR = qr;
 newr->next = NULL;
 np->next = newr;
 newr->index = np->index + 1;
 return newr;
}

int GetNotPayCount(RecordList* header)
{
 if (header->next == NULL)
 {
  return 0;
 }
 RecordList* temp = header;
 //开始计数
 temp = temp->next;
 int count = 0;
 while (temp != NULL)
 {
  if (temp->QR.PayFlag == enPayStat::STAT_NO_PAY)
   count++;
  temp = temp->next;
 }
 return count;
}

RecordList* GetLastPoint(RecordList* header)
{
 RecordList* temp = header;
 if (header->next == NULL)
  return NULL;
 while (temp->next != NULL)
  temp = temp->next;
 return temp;
}

//获取最小待缴罚款数
int GetMinPay(RecordList* header)
{
 RecordList* temp = header->next;
 int min = temp->QR.Fee;
 while (temp != NULL)
 {
  if (temp->QR.PayFlag == enPayStat::STAT_NO_PAY &&  min < temp->QR.Fee)
   min = temp->QR.Fee;
  temp = temp->next;
 }
 return min;
}

//获取待缴费数据列表
void GetPayList(RecordList* header, vector<RecordList*>& List)
{
 List.clear();
 RecordList* temp = header->next;
 while (temp != NULL)
 {
  if (temp->QR.PayFlag == enPayStat::STAT_NO_PAY)
  {
   List.push_back(temp);
  }
  temp = temp->next;
 }
}

//代缴费列表按照缴费规则排序
bool sort_pay(RecordList* val1, RecordList* val2)
{
 if (val1->QR.stCarSysInfo.Time > val2->QR.stCarSysInfo.Time)
  return true;
 else if (val1->QR.stCarSysInfo.Time < val2->QR.stCarSysInfo.Time)
  return false;
 else if (val1->QR.stCarSysInfo.Time = val2->QR.stCarSysInfo.Time)
 {
  if (val1->QR.Fee < val2->QR.Fee)
   return true;
  else
   return false;
 }
}

typedef struct User
{
 int Is_Inited;
 RecordList* Record;
 int basescore;
 int score_now;
 bool Is_butt;//吊销驾照
}User;

User newuser;

void main(int argc, char* argv[])
{
 /* 启动Socket服务侦听5555端口(sapi_server_start函数在lib库已实现)。
 * lib库已实现从Socket接收到字符串后的命令分发处理;
 * 考生只需要实现分发后的各命令即可。
 */
 api_server_start(argc, argv);
 // 此处不会执行到,注意不要在此处添加代码
}

/*****************************************************************************
函 数 名  : opInit
功能描述  : 考生需要实现的接口
完成“系统初始化”操作
命令实例:i
输入参数  : 无
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

修改历史      :
1.日    期   : 2010年1月21日
作    者   :
修改内容   : 新生成函数

*****************************************************************************/
void opInit(void)
{
 newuser.Is_Inited = RET_SUCC;
 newuser.Is_butt = false;
 newuser.score_now = 20;
 newuser.basescore = 20;
 newuser.Record = RecordListInit();
 api_print_result(OP_RST_INFO::S001);
}

/*****************************************************************************
函 数 名  : opRecord
功能描述  : 考生需要实现的接口
完成“录入违规记录”操作
命令实例:r 0-1
输入参数  : int Peccancy  :    违规类型
int Days      :    时间
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

修改历史      :
1.日    期   : 2010年1月21日
作    者   :
修改内容   : 新生成函数

*****************************************************************************/
void opRecord(int PeccancyType, int Days)
{
 if (newuser.Is_Inited != RET_SUCC)
 {
  api_print_result(OP_RST_INFO::E001);
  return;
 }
 if (newuser.Is_butt == true)
 {
  api_print_result(OP_RST_INFO::E004);
  return;
 }
 else
 {
  if (newuser.score_now <= 0)
  {
   newuser.Is_butt = true;
   api_print_result(OP_RST_INFO::E004);
   return;
  }
 }
 if (PeccancyType < enPeccancyType::PECCANCY_TYPE_0 || PeccancyType >= enPeccancyType::PECCANCY_TYPE_4)
 {
  api_print_result(OP_RST_INFO::E003);
  return;
 }
 if (Days < 1 || Days > MAX_DAYS_VALUE)
 {
  api_print_result(OP_RST_INFO::E002);
  return;
 }

 if (GetNotPayCount(newuser.Record) >= MAX_PECCANCY_RECORD_NUM)
 {
  api_print_result(OP_RST_INFO::E009);
  return;
 }
 RecordList* lastpoint = GetLastPoint(newuser.Record);
 if (lastpoint->QR.stCarSysInfo.Time > Days)
 {
  api_print_result(OP_RST_INFO::E008);
  return;
 }
 QUERY_RESULT qr;
 qr.Index = lastpoint->index + 1;
 qr.stCarSysInfo.Reason = PeccancyType;
 qr.stCarSysInfo.Time = Days;
 qr.PayFlag = enPayStat::STAT_NO_PAY;
 qr.Fee = (PeccancyType + 1) * 100;
 qr.Score = newuser.score_now - (PeccancyType + 1);
 newuser.score_now = newuser.score_now - (PeccancyType + 1);
 //加入违规信息
 Append(newuser.Record, qr);
 api_print_result(OP_RST_INFO::S002);
 if (newuser.score_now <= 0)
 {
  newuser.Is_butt = true;
 }
}

/*****************************************************************************
函 数 名  : opQuery
功能描述  : 考生需要实现的接口
完成查询违规记录操作
命令实例:q
输入参数  : 无
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

修改历史      :
1.日    期   : 2010年1月21日
作    者   :
修改内容   : 新生成函数

*****************************************************************************/
void opQuery(void)
{
 if (newuser.Is_Inited != RET_SUCC)
 {
  api_print_result(OP_RST_INFO::E001);
  return;
 }
 if (newuser.Is_butt == true)
 {
  api_print_result(OP_RST_INFO::E004);
  return;
 }
 
 if (newuser.Record->next == NULL)
 {
  api_print_result(OP_RST_INFO::E010);
  return;
 }

 //输出违规记录
 RecordList* temp = newuser.Record;
 temp = temp->next;
 while (temp != NULL)
 {
  api_print_query_info(&temp->QR);
  temp = temp->next;
 }
}

/*****************************************************************************
函 数 名  : opPay
功能描述  : 考生需要实现的接口
完成缴纳违规罚款操作
命令实例:p 100
输入参数  : int  Money       :    缴纳金额
输出参数  : 无
返 回 值  : 无
调用函数  :
被调函数  :

修改历史      :
1.日    期   : 2010年1月21日
作    者   :
修改内容   : 新生成函数

*****************************************************************************/
void opPay(int Money)
{
 if (newuser.Is_Inited != RET_SUCC)
 {
  api_print_result(OP_RST_INFO::E001);
  return;
 }
 if (newuser.Is_butt == true)
 {
  api_print_result(OP_RST_INFO::E004);
  return;
 }
 if (Money < 1 || Money >MAX_MONEY_VALUE)
 {
  api_print_result(OP_RST_INFO::E005);
  return;
 }

 if (GetNotPayCount(newuser.Record) == 0)
 {
  api_print_result(OP_RST_INFO::E007);
  return;
 }

 //查询是否可缴纳
 if (GetMinPay(newuser.Record) > Money)
 {
  api_print_result(OP_RST_INFO::E006);
  return;
 }

 //开始缴纳
 vector<RecordList*> List;
 GetPayList(newuser.Record, List);
 
 int count_ = GetNotPayCount(newuser.Record);
 int li_mon = 0;
 std::sort(List.begin(), List.end(), sort_pay);
 for (int i = 0; i < List.size(); i++)
 {
  if (List[i]->QR.Fee <= Money)
  {
   List[i]->QR.PayFlag = enPayStat::STAT_HAVE_PAY;
   Money = Money - List[i]->QR.Fee;
   count_ -= 1;
  }
  else
  {
   li_mon += List[i]->QR.Fee;
   continue;
  } 
 }

 //返回缴费数据
 PayResult PR;
 PR.Fee = li_mon;
 PR.PeccancyNo = count_;
 PR.Score = newuser.score_now;
 PR.ReturnMoney = Money;
 
 api_print_pay_info(&PR);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值