C语言实现游戏VIP停车场管理系统

在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程。

我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试)。

功能要求如下:

程序如下:

/***************************************************************************
项目要求
游戏VIP停车场
问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放
在等候区。若等候区满了(10辆车),按汽车的VIP等级(两种排序方法),依次停入停车场 ,在停
车期间,我们可以通过汽车牌号查找汽车相关信息,并且可以随意删除其中一辆汽车,汽车
离开要按等候区的顺序依次离开(使用队列实现)汽车离开时按停放时间收费。
***************************************************************************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

#define LEN sizeof(struct parking)
#define MAXSIZE 10 //车库大小,可自定义大小,这里默认为10
#define MONEY 0.002 //收费价格,这里默认为1分钟,收费0.12元

typedef struct parking
{
 char number[10]; //车辆信息
 int vip; //车辆VIP等级
 int time1;  // 进入停车场时间
 int time2;  // 离开停车场时间
 int count; //标记车辆,后面入队时使用
 struct parking*next;
}car;
static int n = 0; //全局变量,用于标记车辆数目,计算车位
car c;
void menu()
{
 printf("\t==============欢迎来到中南国际停车场=============\n");
 printf ("\t******************目前停车场状况*****************\n");
 printf ("\t停车场共有%d个车位,当前停车场剩余%d车位\n", MAXSIZE,MAXSIZE - n);
 printf ("\t*************************************************\n");
 printf("\t================1,停入车辆=======================\n");
 printf("\t================2,VIP等级排序车辆================\n");
 printf("\t================3,驶出所有车辆(队列)==============\n");
 printf("\t================4,查找车辆=======================\n");
 printf("\t================5,遍历停车场全部车辆信息=========\n");
 printf("\t================6,驶出指定车辆===================\n");
 printf("\t================7,退出===========================\n");
}

struct parking *creat() //创建链表,用于存放车辆信息
{
 struct parking*p1,*p2,*head;
 head = NULL; //为方便后面排序,这里创建不带头结点的链表
 int i = 1;
 p1=p2=(struct parking*)malloc(LEN);
 printf("输入车辆VIP等级:\n");
 scanf("%d",&p1->vip);
 printf("输入车牌号:\n");
 scanf("%s",p1->number);
 p1->count = i;
 time_t t1;
  long int t = time(&t1);  // 标记进入停车场的时间
  c.time1 = t;
  char* t2;
  t2 = ctime(&t1);  // 获取当前时间
  printf("牌照为%s的汽车停入等候区成功,当前时间:%s\n",p1->number,t2); //显示停车场状况,以及停入时间
 while(p1->vip != 0 && i <= 10)
 {      //由于不带头结点,这里创建时考虑了三种插入方法
 n = n+1;
 if(n == 1)
  head = p1;
 else
  p2->next = p1;
 p2 = p1;
 p1 = (struct parking*)malloc(LEN);
 printf("输入车辆VIP等级:\n");
 scanf("%d",&p1->vip);
 printf("输入车牌号:\n");
 scanf("%s",p1->number);
 i++;
 p1->count = i;
 time_t t1;
    long int t = time(&t1); // 标记进入停车场的时间
 c.time1 = t;
    char* t2;
    t2 = ctime(&t1);  // 获取当前时间
    printf("牌照为%s的汽车停入等候区成功,当前时间:%s\n",p1->number,t2); //显示停车场状况,以及停入时间

 }
 p2->next = NULL;
 printf("等候区以满\n");
 return head;
}

struct parking *Sort(struct parking *head)//链表排序,冒泡排序
{
  struct parking *p,*q,*s;
  int t,a,m;
  char arr[10];
 printf("请输入排序方式:(1:冒泡排序法 0:选择排序法)\n");
 scanf("%d",&a);
 if(a = 1)
 {
   for(p = head;p != NULL;p = p->next)
   {
     for(q = p->next;q != NULL;q = q->next)
     {
       if(p->vip < q->vip)//降序
  {
         t = q->vip; //按VIP等级交换结点数据
   q->vip = p->vip;
   p->vip = t;
   strcpy(arr,q->number);
   strcpy(q->number,p->number);
   strcpy(p->number,arr);
   m = q->count;
   q->count = p->count;
   p->count = m;
  }
     }
   }
 return head;
  }
 else //选择排序法
 {
 for(p = head;p != NULL;p = p->next)
   {
  s = p; //s标记为最大值
  for(q = p->next;q != NULL;q = q->next)
     {
   if(p->vip < q->vip)//降序
  {
         s = q;
  }
  if(s != p)
  {
         t = q->vip; //按VIP等级交换结点数据
   q->vip = p->vip;
   p->vip = t;
   strcpy(arr,q->number);
   strcpy(q->number,p->number);
   strcpy(p->number,arr);
   m = q->count;
   q->count = p->count;
   p->count = m;
  }
     }
   }
 return head;
 }
}

typedef struct QueueNode //先入先出(队列)Vip离场
{
  int data;
  struct QueueNode *next;
}Queue,*QueuePtr;

typedef struct
{
  QueuePtr front,rear; //队列指针
}LinkQueue;

LinkQueue* CreateQueue(LinkQueue *Q) //创建队列
{
  Q = (LinkQueue*)malloc(sizeof(LinkQueue));
  Q->front = Q->rear = (QueuePtr)malloc(sizeof(Queue));
  Q->front->next = NULL;
  return Q;
}

void Push(struct parking *head,LinkQueue* Q) //入队操作,按链表中一开始车辆标号顺序
{
  struct parking *p;
 p = head;
  while(p!=NULL)
  {
    QueuePtr s = (QueuePtr)malloc(sizeof(Queue));
    s->data = p->count; //队列只记录车辆一开始的标号信息
    s->next = NULL;
    Q->rear->next = s;
    Q->rear = s;
    p = p->next;
  }
}

struct parking Exert1(struct parking *head,int e) //按等候区顺序出队(一辆)
{
  struct parking *p;
  p = head;
  while(p != NULL && p->count != e)
  {
    p = p->next;
  }
  if(p->count == e)
  {
    time_t t1;
 long int t = time(&t1);  // 标记显示时的时间
 printf ("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n"); //打印查到的车辆信息
 printf ("%s\t%d\t\t%d秒\t\t%2.3f元\n",p->number,p->vip,t - c.time1, MONEY * (t - c.time1));
  }
}
int Pop(struct parking *head,LinkQueue *Q) //按等候区顺序出队(全部)
{
  QueuePtr p;
  int i = 1;
  if(Q->front == Q->rear)
  {
    printf("停车场无车辆!\n");
    return 0;
  }
  else
  {
    for(i;i <= 10;i++) //按等候区顺序出队(全部)
    {
     p = Q->front->next;
     Q->front->next = p->next; //出队操作
     if(Q->rear == p)
       Q->rear = Q->front;
     Exert1(head,i); //调用函数,实现按等候区顺序出一辆车
     }
  }
}

struct parking *Exert(struct parking *head,char number[10]) //驶出指定车辆
{
 struct parking *p1,*p2;
 p1 = head;
 p2 = p1;
 while(p1->next !=NULL && strcmp(p1->number,number) != 0)
 {
 p2=p1;
 p1=p1->next;
 }
 if(strcmp(p1->number,number) == 0) //不带头结点,这里有三种删除车辆的辨别
 {
 if(p1 == head)
 {
  head = head->next; //头,中间,尾,三种删除方式
  printf("驶出车辆成功\n");
  n--;
 }
 else
 {
  p2->next = p1->next;
  printf("驶出车辆成功\n");
  n--;
 }
 time_t t1;
 long int t = time(&t1);
 c.time2 = t; // 标记离开停车场的时间
 char* t2;
 t2 = ctime(&t1); // 获取当前时间
 printf("离开时间%s\n需付%2.3f元\n",t2,MONEY * (c.time2 - c.time1)); //显示停车场状况以及驶出时间和收费情况
 }
 else
 {
 printf("停车场没此车辆!\n");
 }
 free(p1);
 return head;
}

struct parking *find(struct parking *head,char number[20]) //查找指定车辆
{
 struct parking *p1;
 p1 = head;
 while(p1->next != NULL && strcmp(p1->number,number)!=0)
 {
 p1 = p1->next;
 }
 if(strcmp(p1->number,number)==0) //打印查到的车辆信息
 {
 printf("查找成功,车辆信息如下:\n");
 time_t t1;
 long int t = time(&t1);       // 标记显示时的时间
 printf ("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n"); //打印查到的车辆信息
 printf ("%s\t%d\t\t%d秒\t\t%2.3f元\n",p1->number,p1->vip,t - c.time1, MONEY * (t - c.time1));
 }
 else
 printf("停车场没此车辆!\n");
}

void show(struct parking *head) //显示车库现有车辆
{
 struct parking *p;
 p = head;
 if(head != NULL)
 {
 do
  {
  time_t t1;
  long int t = time(&t1); // 标记显示时的时间
  printf ("车牌号\tVIP等级\t\t停放时长\t当前所需支付金额\n"); //打印查到的车辆信息
  printf ("%s\t%d\t\t%d秒\t\t%2.3f元\n",p->number,p->vip,t - c.time1, MONEY * (t - c.time1));
  p = p->next;
  }while(p != NULL);
 }
 else
 printf("停车场无车辆!\n");
}

int main()
{
 int n = 1;
 int i;
 struct parking *head; //初始化链表
 LinkQueue q;
 LinkQueue* Q = &q;
 Q = CreateQueue(Q);
 char number[10];
 while(n)
 {
 system("clear");
 menu();
 printf("请输入你的骚操作:\n");
 scanf("%d",&i);
 switch(i)
 {
  case 1:{head = creat();Push(head,Q);break;} //创建链表,并创建队列
  case 2:{head = Sort(head);break;} //按vip排序
  case 3:{Pop(head,Q);break;} //按等候区顺序出队(全部)
  case 4:
  {
  printf("请输入查找车辆的车牌号:\n"); //查找指定车辆
  scanf("%s",number);
  find(head,number);break;
  }
  case 5:{show(head);break;} //显示车库现有车辆
  case 6:
  {
  printf("请输入要驶出车辆的车牌号:\n"); //驶出指定车辆
  scanf("%s",number);
  head = Exert(head,number);break;
  }
  default:{break;}
 }
 }
}

功能的实现,有很多方法,如果大家有自己的想法,可以评论,大家互利共进。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言数组实现公交车管理系统

    本文实例为大家分享了C语言实现公交车管理系统的具体代码,供大家参考,具体内容如下 /**************************头文件声明************************************/ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" /*************************

  • C语言实现简单停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 /*************************************************************************** 项目要求 停车场管理 问题描述:停车场是一个能放n辆车的狭长通道, 只有一个大门,汽车按到达的先后次序停放.若 车场满了,车要停在门外的便道上等候,一旦有 车走,则便道上第一辆车进入.当停车场中的车 离开时,由于通道窄,在它后面的车要先退出, 待它走后再依次进入.汽车

  • C语言实现停车场管理系统

    问题描述:停车场是一个能放n辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放.若车场满了,车要停在门外的便道上等候,一旦有车走,则便道上第一辆车进入.当停车场中的车离开时,由于通道窄,在它后面呢的车要先退出,待它走后再依次进入.汽车离开时按停放时间收费. 基本功能要求: (1)建立三个数据结构分别是:停放队列.让路栈.等候队列. (2)输入数据模拟管理过程,数据(入或出,车号). 停车管理系统是C语言中队列和栈比较简单的应用,需要注意的是停车队列.等候队列.让路栈结构体的构建.在写代码时,

  • C语言源码实现停车场管理系统

    本文实例为大家分享了C语言停车场管理系统的具体代码,供大家参考,具体内容如下 题目要求: 刚开始在Codeblocks下用C语言写的,但是用指针传递参数的时候总是出问题.后来就用C++,但是调用了C的输入输出和文件操作的头文件,所以代码都是C的 main.cpp #include <iostream> #include <cstdio> #include <cstdlib> #include <windows.h> #include <ctime>

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • C语言设计图书登记系统与停车场管理系统的实例分享

    图书登记管理系统 图书登记管理系统应该具有下列功能: (1). 通过键盘输入某本图书的信息: (2) .给定图书编号,显示该本图书的信息: (3) .给定作者姓名,显示所有该作者编写的图书信息: (4) .给定出版社,显示该出版社的所有图书信息: (5) .给定图书编号,删除该本图书的信息: (6) .提供一些统计各类信息的功能. 程序完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "s

  • C语言实现停车场管理

    C语言课程设计之停车场管理问题,供大家参考,具体内容如下 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它

  • C语言编写学生成绩管理系统

    用C语言编写学生成绩管理系统代码,供大家参考,具体内容如下 C语言实现学生成绩管理系统实战教学 https://www.jb51.net/article/154767.htm (1)给出所选课程设计题目以及本题目具体所要完成的功能要求说明. 1.课程设计题目:学生成绩管理系统 2.完成的功能要求: (1).主要实现的功能: 1---学生输入 2---学生插入 3---学生查询(按学号) 4---学生删除 5---学生输出 6---计算每名学生的平均分并输出 7---计算每科的平均分并输出 8--

  • C语言实现游戏VIP停车场管理系统

    在数据结构这部分学习结束后,写一个小项目,我想是对这部分知识一个很好的运用过程. 我在这介绍我写的一个项目,游戏停车场(这个版本只是初级版,可以在这之上继续添加很多其他功能,大家可以自己尝试). 功能要求如下: 程序如下: /*************************************************************************** 项目要求 游戏VIP停车场 问题描述:停车场是一个能放10辆车的车场(链表实现), 汽车按到达的先后次序停放 在等候区.若

  • C语言实现简单的停车场管理系统

    本文实例为大家分享了C语言实现简单停车场管理系统的具体代码,供大家参考,具体内容如下 1.问题描述 1)有一个两层的停车场,每层有6个车位,当第一层车位停满后才允 许使用第二层(停车场可用一个二维数组实现),每辆车的信息包括车牌号,层号,车位号,停车时间共四项,其中停车时间按分钟计算:2)假设停车场初始状态为第一层空.第二层已经有四辆车,其车位号依次为第二层的1-4号,停车时间依次为20,15,10,5:3)停车操作:当一辆车进入停车场时,先输入其车牌号,再为它分配一个层号和一个车位号(分配前先

  • C语言实现简易停车场管理系统

    本文实例为大家分享了C语言实现停车场管理系统的具体代码,供大家参考,具体内容如下 问题描述: 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,

  • C语言实现餐饮点餐管理系统

    本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下 具体代码如下 /* 项目名称:南航餐饮管理系统 组员:梁文新,刘青林,刘艺,施瑞文(组长) */ //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员 //头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h&g

  • C/C++利用栈和队列实现停车场管理系统

    目录 纯c语言版 包含的功能 运行效果 源码 c++版 包含的功能 运行效果 源码 纯c语言版 包含的功能 1.停车功能 如果停车场满,能够暂时存放到便道内 2.开走车功能 将指定车开走后打印收据,便道内的车自动停到停车场 3.退出程序功能 运行效果 停车功能测试: 离开停车场并打印收据测试: 源码 #define _CRT_SECURE_NO_WARNINGS//visual stduio添加对scanf的信任 #include<stdio.h> #include <stdlib.h&

  • 基于C++语言实现机动车违章处罚管理系统

    关键代码如下所示: #include <iostream> #include <iomanip> #include <fstream> #include <string> #include <list> using namespace std; class Violation{ public: Violation(){points=fine=0; number=carNumber=tel=location=isSpot =police=camer

  • 简单实现C语言2048游戏

    本文实例为大家分享了C语言2048游戏的具体代码,供大家参考,具体内容如下 /*2048*/ #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> //全局变量 int x[4][4]={0}; int score=0; int can_move; int empty() { int i,j; int n=0; for(i=0;i<4;i++) { for(j=0

随机推荐