鱼C论坛

 找回密码
 立即注册
查看: 864|回复: 14

[已解决]求助,改成c++格式

[复制链接]
发表于 2020-7-7 21:16:22 | 显示全部楼层 |阅读模式
50鱼币
#include<stdio.h>
#include<stdlib.h>  
#include<string.h>
#include<malloc.h>  
/*------------------------------------------------------------------------------*/
#define Max 10
int getn()
{
        int n;
        printf("欢迎您光临吉吉停车场,");
        printf("本停车场管理实行24小时制,停车每分钟0.1元.\n");
        printf("请输入停车场可容纳的车(最多10辆):");
        scanf("%d", &n);
        fflush(stdin);
        do
        {
                if (n < 1 || n>10)
                {
                        printf("输入的车辆数不在要求围,请重新输入!");
                        scanf("%d", &n);
                        fflush(stdin);
                }
                else break;
        } while (n < 1 || n>10);
        return n;
}
typedef struct time
{
        int hour;
        int min;
}Time; /*时间结点*/
typedef struct node
{
        char num[10];
        Time reach;
        Time leave;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{
        CarNode *stack[Max + 1];
        int top;
}SeqStackCar; /*模拟车站*/
typedef struct car
{
        CarNode *data;
        struct car *next;
}QueueNode;
typedef struct Node
{
        QueueNode *head;
        QueueNode *rear;
}LinkQueueCar; /*模拟通道*/
void InitStack(SeqStackCar *, int n); /*声明栈*/
int InitQueue(LinkQueueCar *); /*声明便道*/
int Arrival(SeqStackCar *, LinkQueueCar *, int n); /*车辆进站*/
void Leave(SeqStackCar *, SeqStackCar *, LinkQueueCar *, int n); /*车辆出站*/
void List(SeqStackCar, LinkQueueCar); /*显示存车信息*/
void InitStack(SeqStackCar *s, int n) /*初始化栈*/
{
        int i;
        s->top = 0;
        for (i = 0; i <= n; i++)
                s->stack[s->top] = NULL;
}
int InitQueue(LinkQueueCar *Q) /*初始化便道*/
{
        Q->head = (QueueNode *)malloc(sizeof(QueueNode));
        if (Q->head != NULL)
        {
                Q->head->next = NULL;
                Q->rear = Q->head;
                return(1);
        }
        else return(-1);
}
void PRINT(CarNode *p) /*打印出站车的信息*/
{
        int A1, A2, B1, B2;
        int a, b, c;
        printf("\n请输入离开的时间:/**:**/");
        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
        fflush(stdin);
        do
        {
                if (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min))
                {
                        printf("输入离开时间比进站时间早,请重新输入!\n");
                        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
                        fflush(stdin);
                }
                if (p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60)
                {
                        printf("输入的时间格式有错,请重新输入!");
                        scanf("%d:%d", &(p->leave.hour), &(p->leave.min));
                        fflush(stdin);
                }
                else break;
        } while (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min) || p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60);
        printf("车场现在有一辆车离开,请便道里的第一辆车进入车场!\n");
        printf("出站的车的车牌号为:");
        puts(p->num);
        printf("\n");
        A1 = p->reach.hour;
        A2 = p->reach.min;
        B1 = p->leave.hour;
        B2 = p->leave.min;
        a = (B1 - A1) * 60 + B2 - A2;
        if (a >= 60)
        {
                b = a / 60;
                c = a - 60 * b;
        }
        else
        {
                b = 0;
                c = a;
        }
        printf("         祝您一路顺风,欢迎您下次光临.");
        printf("\n收据\n");
        printf("================================== 车牌号: ");
        puts(p->num);
        printf("\n");
        printf("===================================================\n");
        printf("|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\n");
        printf("====================================================\n");
        printf("|   %d:%d", p->reach.hour, p->reach.min);
        printf("    |   %d:%d", p->leave.hour, p->leave.min);
        printf("    |   %d:%d", b, c);
        printf("  |      %2.1f", 0.1*a);
        printf("    |\n");
        printf("-----------------------------------------------------\n");
        free(p);
}
int Arrival(SeqStackCar *Enter, LinkQueueCar *W, int n) /*车辆到达*/
{
        CarNode *p;
        QueueNode *t;
        int a, b;
        p = (CarNode *)malloc(sizeof(CarNode));
        flushall();
        printf("\n请输入车牌号(七位,例:吉A1234):\n");
        printf("请严格按照要求输入车牌号,否则系统会出错!\n");
        do
        {
                a = strlen("陕A1234");
                b = strlen(gets(p->num));
                fflush(stdin);
                if (a != b)
                {
                        printf("输入车牌号格式错误,请重新输入(七位)!\n");
                        gets(p->num);
                        fflush(stdin);
                }
                else break;
                if (a != b)
                        printf("输入车牌号格式错误,请重新输入(七位)!\n");
        } while (a != b);
        if (Enter->top < n) /*车场未满,车进车场*/
        {
                Enter->top++;
                printf("\n车辆在车场第%d位置.", Enter->top);
                fflush(stdin);
                printf("\n请输入到达时间:/**:**/");
                scanf("%d:%d", &(p->reach.hour), &(p->reach.min));
                fflush(stdin);
                do
                {
                        if (p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 || p->reach.min >= 60)
                        {
                                printf("输入的时间格式有错,请重新输入!");
                                scanf("%d:%d", &(p->reach.hour), &(p->reach.min));
                                fflush(stdin);
                        }
                        else
                                break;
                } while (p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 ||
                        p->reach.min >= 60);
                Enter->stack[Enter->top] = p;
                return(1);
        }
        else /*车场已满,车进便道*/
        {
                printf("\n请该车在便道稍作等待!");
                t = (QueueNode *)malloc(sizeof(QueueNode));
                t->data = p;
                t->next = NULL;
                W->rear->next = t;
                W->rear = t;
                return(1);
        }
}
void Leave(SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar *W, int n)
{ /*车辆离开*/
        int i, room;
        CarNode *p, *t;
        QueueNode *q;  /*判断车场是否有车*/
        if (Enter->top > 0) /*有车*/
        {
                while (1) /*输入离开车辆的信息*/
                {
                        printf("\n请输入要离开的车在车场的位置/1--%d/:", Enter->top);
                        scanf("%d", &room);
                        fflush(stdin);
                        if (room >= 1 && room <= Enter->top) break;
                }
                while (Enter->top > room) /*车辆离开*/
                {
                        Temp->top++;
                        Temp->stack[Temp->top] = Enter->stack[Enter->top];
                        Enter->stack[Enter->top] = NULL;
                        Enter->top--;
                }
                p = Enter->stack[Enter->top];
                Enter->stack[Enter->top] = NULL;
                Enter->top--;
                while (Temp->top >= 1)
                {
                        Enter->top++;
                        Enter->stack[Enter->top] = Temp->stack[Temp->top];
                        Temp->stack[Temp->top] = NULL;
                        Temp->top--;
                } PRINT(p);  /*判断通道上是否有车及车站是否已满*/
                if ((W->head != W->rear) && Enter->top < n) /*便道的车辆进入车场*/
                {
                        q = W->head->next;
                        t = q->data;
                        Enter->top++;
                        printf("\n现在请便道上的车进入车场.该车的车牌号为:");
                        puts(t->num);
                        printf("\n该车进入车场第%d位置.", Enter->top);
                        printf("\n请输入现在的时间(即该车进站的时间)/**:**/:");
                        scanf("%d:%d", &(t->reach.hour), &(t->reach.min));
                        fflush(stdin);
                        do
                        {
                                if (t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60)
                                {
                                        printf("输入的时间格式有错,请重新输入!");
                                        scanf("%d:%d", &(t->reach.hour), &(t->reach.min));
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60);
                        W->head->next = q->next;
                        if (q == W->rear) W->rear = W->head;
                        Enter->stack[Enter->top] = t;
                        free(q);
                }
                else printf("\n目前便道里没有车.\n");
        }
        else printf("\n目前车场里没有车,来车请直接进入车场!"); /*没车*/
}
void List1(SeqStackCar *S) /*列表显示车场存车信息*/
{
        int i;
        if (S->top > 0) /*判断车站是否有车*/
        {
                printf("\n车场:");
                printf("\n 位置到达时间车牌号\n");
                for (i = 1; i <= S->top; i++)
                {
                        printf(" %d ", i);
                        printf("%d:%d  ", S->stack[i]->reach.hour, S->stack[i]->reach.min);
                        puts(S->stack[i]->num);
                }
        }
        else printf("\n目前车场里没有车");
}
void List2(LinkQueueCar *W) /*列表显示便道信息*/
{
        QueueNode *p;
        p = W->head->next;
        if (W->head != W->rear) /*判断通道上是否有车*/
        {
                printf("\n目前正在等待车辆的为:");
                while (p != NULL)
                {
                        puts(p->data->num);
                        p = p->next;
                        printf("\n");
                }
        }
        else printf("\n目前便道里没有车.");
}
void List(SeqStackCar S, LinkQueueCar W)
{
        int flag, tag;
        flag = 1;
        while (flag)
        {
                printf("\n1.车场\n2.便道\n3.返回\n");
                while (1)
                {
                        printf("\n请选择 1|2|3:");
                        scanf("%d", &tag);
                        fflush(stdin);
                        do
                        {
                                if (tag < 1 || tag>3)
                                {
                                        printf("输入有误,请按要求重新输入!");
                                        scanf("%d", &tag);
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (tag > 3 && tag < 1);
                        break;
                }
                switch (tag)
                {
                case 1:List1(&S); break; /*列表显示车场信息*/
                case 2:List2(&W); break; /*列表显示便道信息*/
                case 3:flag = 0; break;/*返回*/
                default: break;
                }
        }
}
void main()
{
        SeqStackCar Enter, Temp;
        LinkQueueCar Wait;
        int ch;
        int n;
        printf("该停车场管理系统是个比较简单系统,在应用的时候请注意要求! \n");
        printf("============================================================\n");
        n = getn();
        InitStack(&Enter, n); /*初始化车场*/
        InitStack(&Temp, n); /*初始化让路的临时栈*/
        InitQueue(&Wait); /*初始化便道*/
        while (1)
        {
                printf("\n1. 车辆进站");
                printf(" 2. 车辆出站");
                printf(" 3. 存车信息");
                printf(" 4. 退出系统\n");
                while (1)
                {
                        printf("请选择: 1|2|3|4.\n");
                        scanf("%d", &ch);
                        fflush(stdin);
                        do
                        {
                                if (ch > 4 || ch < 1) {
                                        printf("输入有误,请重新输入!");
                                        scanf("%d", &ch);
                                        fflush(stdin);
                                }
                                else
                                        break;
                        } while (ch > 4 || ch < 1);
                        break;
                }
                switch (ch)
                {
                case 1:Arrival(&Enter, &Wait, n); break; /*车辆进站*/
                case 2:Leave(&Enter, &Temp, &Wait, n); break; /*车辆出站*/
                case 3:List(Enter, Wait); break; /*存车信息*/
                case 4:exit(0); /*退出系统*/
                default:break;
                }
        }
}
最佳答案
2020-7-7 21:16:23
本帖最后由 superbe 于 2020-7-22 13:26 编辑

试着修改了下,不知道还有没有问题,你测试下。
  1. #include <iostream>
  2. #include <cstdlib>  
  3. #include <cstring>
  4. #include <iomanip>
  5. using namespace std;

  6. #define Max 10
  7. void checkcin();

  8. int getn()
  9. {
  10.     int n;
  11.     cout << "欢迎您光临吉吉停车场,";
  12.     cout << "本停车场管理实行24小时制,停车每分钟0.1元.\n";
  13.     cout << "请输入停车场可容纳的车(最多" << Max << "辆): ";
  14.    
  15.     while (!(cin >> n) || n < 1 || n > Max)
  16.     {
  17.         checkcin();
  18.         cout << "输入的车辆数不在要求范围,请重新输入: ";
  19.     }

  20.     return n;
  21. }
  22. typedef struct time
  23. {
  24.     int hour;
  25.     int min;
  26. }Time; /*时间结点*/
  27. typedef struct node
  28. {
  29.     char num[10];
  30.     Time reach;
  31.     Time leave;
  32. }CarNode; /*车辆信息结点*/
  33. typedef struct NODE
  34. {
  35.     CarNode *stack[Max + 1];
  36.     int top;
  37. }SeqStackCar; /*模拟车站*/
  38. typedef struct car
  39. {
  40.     CarNode *data;
  41.     struct car *next;
  42. }QueueNode;
  43. typedef struct Node
  44. {
  45.     QueueNode *head;
  46.     QueueNode *rear;
  47. }LinkQueueCar; /*模拟通道*/
  48. void InitStack(SeqStackCar *, int n); /*声明栈*/
  49. int InitQueue(LinkQueueCar *);        /*声明便道*/
  50. int Arrival(SeqStackCar *, LinkQueueCar *, int n); /*车辆进站*/
  51. void Leave(SeqStackCar *, SeqStackCar *, LinkQueueCar *, int n); /*车辆出站*/
  52. void List(SeqStackCar, LinkQueueCar); /*显示存车信息*/
  53. void InitStack(SeqStackCar *s, int n) /*初始化栈*/
  54. {
  55.     int i;
  56.     s->top = 0;
  57.     for (i = 0; i <= n; i++)
  58.         s->stack[s->top] = NULL;
  59. }
  60. int InitQueue(LinkQueueCar *Q) /*初始化便道*/
  61. {
  62.     Q->head = new QueueNode;
  63.     if (Q->head != NULL)
  64.     {
  65.         Q->head->next = NULL;
  66.         Q->rear = Q->head;
  67.         return(1);
  68.     }
  69.     else return(-1);
  70. }
  71. void PRINT(CarNode *p) /*打印出站车的信息*/
  72. {
  73.     int A1, A2, B1, B2;
  74.     int a, b, c;
  75.     cout << "\n请输入离开的时间(**:**): ";

  76.     while (1)
  77.     {
  78.         if (!((cin >> p->leave.hour).ignore() >> p->leave.min) ||
  79.             (p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60))
  80.         {
  81.             checkcin();
  82.             cout << "输入的时间格式有误,请重新输入: ";
  83.         }
  84.         else if (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min))
  85.             cout << "输入的离开时间比进站时间早,请重新输入: ";
  86.         else
  87.             break;
  88.     }
  89.     cout << "车场现在有一辆车离开,请便道里的第一辆车进入车场!\n";
  90.     cout << "出站的车的车牌号为: ";
  91.     cout << p->num << endl << endl;
  92.     A1 = p->reach.hour;
  93.     A2 = p->reach.min;
  94.     B1 = p->leave.hour;
  95.     B2 = p->leave.min;
  96.     a = (B1 - A1) * 60 + B2 - A2;
  97.     if (a >= 60)
  98.     {
  99.         b = a / 60;
  100.         c = a - 60 * b;
  101.     }
  102.     else
  103.     {
  104.         b = 0;
  105.         c = a;
  106.     }
  107.     cout << "         祝您一路顺风,欢迎您下次光临.";
  108.     cout << "\n收据\n";
  109.     cout << "================================== 车牌号: ";
  110.     cout << p->num << endl << endl;
  111.     cout << "===================================================\n";
  112.     cout << "|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\n";
  113.     cout << "====================================================\n";
  114.     cout << "|   " << p->reach.hour << ":" << p->reach.min;
  115.     cout << "    |   " << p->leave.hour << ":" << p->leave.min;
  116.     cout << "    |   " << b << ":" << c;
  117.     cout << fixed << setprecision(1);
  118.     cout << "  |      " << 0.1*a;
  119.     cout << "    |\n";
  120.     cout << "-----------------------------------------------------\n";
  121.     delete p;
  122. }
  123. int Arrival(SeqStackCar *Enter, LinkQueueCar *W, int n) /*车辆到达*/
  124. {
  125.     CarNode *p;
  126.     QueueNode *t;
  127.     p = new CarNode;
  128.     cout << "\n请输入车牌号(七位,例:吉A1234):\n";
  129.     cout << "请严格按照要求输入车牌号,否则系统会出错!\n";
  130.     while (!cin.getline(p->num, 10) || strlen(p->num) != strlen("陕A1234"))
  131.     {
  132.         checkcin();
  133.         cout << "输入车牌号格式错误,请重新输入(七位):\n";
  134.     }
  135.     if (Enter->top < n) /*车场未满,车进车场*/
  136.     {
  137.         Enter->top++;
  138.         cout << "\n车辆在车场第" << Enter->top << "位置.";
  139.         cout << "\n请输入到达时间(**:**): ";

  140.         while(!((cin >> p->reach.hour).ignore() >> p->reach.min) ||
  141.             p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 || p->reach.min >= 60)
  142.         {
  143.             checkcin();
  144.             cout << "输入的时间格式有误,请重新输入: ";
  145.         }
  146.         Enter->stack[Enter->top] = p;
  147.         return(1);
  148.     }
  149.     else /*车场已满,车进便道*/
  150.     {
  151.         cout << "\n请该车在便道稍作等待!";
  152.         t = new QueueNode;
  153.         t->data = p;
  154.         t->next = NULL;
  155.         W->rear->next = t;
  156.         W->rear = t;
  157.         return(1);
  158.     }
  159. }
  160. void Leave(SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar *W, int n) /*车辆离开*/
  161. {
  162.     int room;
  163.     CarNode *p, *t;
  164.     QueueNode *q;  /*判断车场是否有车*/
  165.     if (Enter->top > 0) /*有车*/
  166.     {
  167.         cout << "\n请输入要离开的车在车场的位置(1--" << Enter->top << "): ";
  168.         while (!(cin >> room) || room < 1 || room > Enter->top) /*输入离开车辆的信息*/
  169.         {
  170.             checkcin();
  171.             cout << "输入的位置超出范围,请重新输入: ";
  172.         }
  173.         while (Enter->top > room) /*车辆离开*/
  174.         {
  175.             Temp->top++;
  176.             Temp->stack[Temp->top] = Enter->stack[Enter->top];
  177.             Enter->stack[Enter->top] = NULL;
  178.             Enter->top--;
  179.         }
  180.         p = Enter->stack[Enter->top];
  181.         Enter->stack[Enter->top] = NULL;
  182.         Enter->top--;
  183.         while (Temp->top >= 1)
  184.         {
  185.             Enter->top++;
  186.             Enter->stack[Enter->top] = Temp->stack[Temp->top];
  187.             Temp->stack[Temp->top] = NULL;
  188.             Temp->top--;
  189.         }
  190.         PRINT(p);  /*判断通道上是否有车及车站是否已满*/
  191.         if ((W->head != W->rear) && Enter->top < n) /*便道的车辆进入车场*/
  192.         {
  193.             q = W->head->next;
  194.             t = q->data;
  195.             Enter->top++;
  196.             cout << "\n现在请便道上的车进入车场. 该车的车牌号为: ";
  197.             cout << t->num << endl;
  198.             cout << "\n该车进入车场第" << Enter->top << "位置.";
  199.             cout << "\n请输入现在的时间(即该车进站的时间**:**): ";

  200.             while (!((cin >> t->reach.hour).ignore() >> t->reach.min) ||
  201.                 t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60)
  202.             {
  203.                 checkcin();
  204.                 cout << "输入的时间格式有误,请重新输入: ";
  205.             }
  206.             W->head->next = q->next;
  207.             if (q == W->rear) W->rear = W->head;
  208.             Enter->stack[Enter->top] = t;
  209.             delete q;
  210.         }
  211.         else cout << "\n目前便道里没有车.\n";
  212.     }
  213.     else cout << "\n目前车场里没有车,来车请直接进入车场!"; /*没车*/
  214. }
  215. void List1(SeqStackCar *S) /*列表显示车场存车信息*/
  216. {
  217.     int i;
  218.     if (S->top > 0) /*判断车站是否有车*/
  219.     {
  220.         cout << "\n车场: ";
  221.         cout << "\n 位置\t到达时间\t车牌号\n";
  222.         for (i = 1; i <= S->top; i++)
  223.         {
  224.             cout << " " << i << "\t";
  225.             cout << S->stack[i]->reach.hour << ":" << S->stack[i]->reach.min << "\t\t";
  226.             cout << S->stack[i]->num << endl;
  227.         }
  228.     }
  229.     else cout << "\n目前车场里没有车\n";
  230. }
  231. void List2(LinkQueueCar *W) /*列表显示便道信息*/
  232. {
  233.     QueueNode *p;
  234.     p = W->head->next;
  235.     if (W->head != W->rear) /*判断通道上是否有车*/
  236.     {
  237.         cout << "\n目前正在等待车辆的为: ";
  238.         while (p != NULL)
  239.         {
  240.             cout << p->data->num << endl;
  241.             p = p->next;
  242.             cout << endl;
  243.         }
  244.     }
  245.     else cout << "\n目前便道里没有车.\n";
  246. }
  247. void List(SeqStackCar S, LinkQueueCar W)
  248. {
  249.     int flag = 1, tag;
  250.     while (flag)
  251.     {
  252.         cout << "\n 1.车场\n 2.便道\n 3.返回\n";
  253.         cout << "\n请选择 1|2|3: ";
  254.         while (!(cin >> tag) || tag < 1 || tag > 3)
  255.         {
  256.             checkcin();
  257.             cout << "输入有误,请按要求重新输入!";
  258.         }
  259.         switch (tag)
  260.         {
  261.             case 1: List1(&S); break; /*列表显示车场信息*/
  262.             case 2: List2(&W); break; /*列表显示便道信息*/
  263.             case 3: flag = 0; break;  /*返回*/
  264.             default: break;
  265.         }
  266.     }
  267. }
  268. void main()
  269. {
  270.     SeqStackCar Enter, Temp;
  271.     LinkQueueCar Wait;
  272.     int ch;
  273.     int n;
  274.     cout << "该停车场管理系统是个比较简单系统,在应用的时候请注意要求!\n";
  275.     cout << "============================================================\n";
  276.     n = getn();
  277.     InitStack(&Enter, n); /*初始化车场*/
  278.     InitStack(&Temp, n);  /*初始化让路的临时栈*/
  279.     InitQueue(&Wait);     /*初始化便道*/
  280.     while (1)
  281.     {
  282.         cout << "\n1. 车辆进站";
  283.         cout << " 2. 车辆出站";
  284.         cout << " 3. 存车信息";
  285.         cout << " 4. 退出系统\n";
  286.         cout << "请选择: 1|2|3|4.\n";
  287.         while (!(cin >> ch) || ch < 1 || ch >4)
  288.         {
  289.             checkcin();
  290.             cout << "输入有误,请重新输入: ";
  291.         }
  292.         cin.get();
  293.         switch (ch)
  294.         {
  295.             case 1: Arrival(&Enter, &Wait, n); break;      /*车辆进站*/
  296.             case 2: Leave(&Enter, &Temp, &Wait, n); break; /*车辆出站*/
  297.             case 3: List(Enter, Wait); break;              /*存车信息*/
  298.             case 4: exit(0);                               /*退出系统*/
  299.             default: break;
  300.         }
  301.     }
  302. }

  303. void checkcin()
  304. {
  305.     if (cin.good())
  306.         return;
  307.     else if (cin.fail() && !cin.eof() && !cin.bad())
  308.     {
  309.         cin.clear();
  310.         while (cin.get() != '\n');
  311.     }
  312.     else {
  313.         cout << "出现不可恢复的错误,程序退出.\n";
  314.         exit(1);
  315.     }
  316. }
复制代码

最佳答案

查看完整内容

试着修改了下,不知道还有没有问题,你测试下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-7 21:16:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2020-7-22 13:26 编辑

试着修改了下,不知道还有没有问题,你测试下。
  1. #include <iostream>
  2. #include <cstdlib>  
  3. #include <cstring>
  4. #include <iomanip>
  5. using namespace std;

  6. #define Max 10
  7. void checkcin();

  8. int getn()
  9. {
  10.     int n;
  11.     cout << "欢迎您光临吉吉停车场,";
  12.     cout << "本停车场管理实行24小时制,停车每分钟0.1元.\n";
  13.     cout << "请输入停车场可容纳的车(最多" << Max << "辆): ";
  14.    
  15.     while (!(cin >> n) || n < 1 || n > Max)
  16.     {
  17.         checkcin();
  18.         cout << "输入的车辆数不在要求范围,请重新输入: ";
  19.     }

  20.     return n;
  21. }
  22. typedef struct time
  23. {
  24.     int hour;
  25.     int min;
  26. }Time; /*时间结点*/
  27. typedef struct node
  28. {
  29.     char num[10];
  30.     Time reach;
  31.     Time leave;
  32. }CarNode; /*车辆信息结点*/
  33. typedef struct NODE
  34. {
  35.     CarNode *stack[Max + 1];
  36.     int top;
  37. }SeqStackCar; /*模拟车站*/
  38. typedef struct car
  39. {
  40.     CarNode *data;
  41.     struct car *next;
  42. }QueueNode;
  43. typedef struct Node
  44. {
  45.     QueueNode *head;
  46.     QueueNode *rear;
  47. }LinkQueueCar; /*模拟通道*/
  48. void InitStack(SeqStackCar *, int n); /*声明栈*/
  49. int InitQueue(LinkQueueCar *);        /*声明便道*/
  50. int Arrival(SeqStackCar *, LinkQueueCar *, int n); /*车辆进站*/
  51. void Leave(SeqStackCar *, SeqStackCar *, LinkQueueCar *, int n); /*车辆出站*/
  52. void List(SeqStackCar, LinkQueueCar); /*显示存车信息*/
  53. void InitStack(SeqStackCar *s, int n) /*初始化栈*/
  54. {
  55.     int i;
  56.     s->top = 0;
  57.     for (i = 0; i <= n; i++)
  58.         s->stack[s->top] = NULL;
  59. }
  60. int InitQueue(LinkQueueCar *Q) /*初始化便道*/
  61. {
  62.     Q->head = new QueueNode;
  63.     if (Q->head != NULL)
  64.     {
  65.         Q->head->next = NULL;
  66.         Q->rear = Q->head;
  67.         return(1);
  68.     }
  69.     else return(-1);
  70. }
  71. void PRINT(CarNode *p) /*打印出站车的信息*/
  72. {
  73.     int A1, A2, B1, B2;
  74.     int a, b, c;
  75.     cout << "\n请输入离开的时间(**:**): ";

  76.     while (1)
  77.     {
  78.         if (!((cin >> p->leave.hour).ignore() >> p->leave.min) ||
  79.             (p->leave.hour < 0 || p->leave.hour >= 24 || p->leave.min < 0 || p->leave.min >= 60))
  80.         {
  81.             checkcin();
  82.             cout << "输入的时间格式有误,请重新输入: ";
  83.         }
  84.         else if (p->leave.hour < p->reach.hour || (p->leave.hour == p->reach.hour && p->leave.min < p->reach.min))
  85.             cout << "输入的离开时间比进站时间早,请重新输入: ";
  86.         else
  87.             break;
  88.     }
  89.     cout << "车场现在有一辆车离开,请便道里的第一辆车进入车场!\n";
  90.     cout << "出站的车的车牌号为: ";
  91.     cout << p->num << endl << endl;
  92.     A1 = p->reach.hour;
  93.     A2 = p->reach.min;
  94.     B1 = p->leave.hour;
  95.     B2 = p->leave.min;
  96.     a = (B1 - A1) * 60 + B2 - A2;
  97.     if (a >= 60)
  98.     {
  99.         b = a / 60;
  100.         c = a - 60 * b;
  101.     }
  102.     else
  103.     {
  104.         b = 0;
  105.         c = a;
  106.     }
  107.     cout << "         祝您一路顺风,欢迎您下次光临.";
  108.     cout << "\n收据\n";
  109.     cout << "================================== 车牌号: ";
  110.     cout << p->num << endl << endl;
  111.     cout << "===================================================\n";
  112.     cout << "|进车场时刻 | 出车场时刻 | 停留时间 | 应付(元)|\n";
  113.     cout << "====================================================\n";
  114.     cout << "|   " << p->reach.hour << ":" << p->reach.min;
  115.     cout << "    |   " << p->leave.hour << ":" << p->leave.min;
  116.     cout << "    |   " << b << ":" << c;
  117.     cout << fixed << setprecision(1);
  118.     cout << "  |      " << 0.1*a;
  119.     cout << "    |\n";
  120.     cout << "-----------------------------------------------------\n";
  121.     delete p;
  122. }
  123. int Arrival(SeqStackCar *Enter, LinkQueueCar *W, int n) /*车辆到达*/
  124. {
  125.     CarNode *p;
  126.     QueueNode *t;
  127.     p = new CarNode;
  128.     cout << "\n请输入车牌号(七位,例:吉A1234):\n";
  129.     cout << "请严格按照要求输入车牌号,否则系统会出错!\n";
  130.     while (!cin.getline(p->num, 10) || strlen(p->num) != strlen("陕A1234"))
  131.     {
  132.         checkcin();
  133.         cout << "输入车牌号格式错误,请重新输入(七位):\n";
  134.     }
  135.     if (Enter->top < n) /*车场未满,车进车场*/
  136.     {
  137.         Enter->top++;
  138.         cout << "\n车辆在车场第" << Enter->top << "位置.";
  139.         cout << "\n请输入到达时间(**:**): ";

  140.         while(!((cin >> p->reach.hour).ignore() >> p->reach.min) ||
  141.             p->reach.hour < 0 || p->reach.hour >= 24 || p->reach.min < 0 || p->reach.min >= 60)
  142.         {
  143.             checkcin();
  144.             cout << "输入的时间格式有误,请重新输入: ";
  145.         }
  146.         Enter->stack[Enter->top] = p;
  147.         return(1);
  148.     }
  149.     else /*车场已满,车进便道*/
  150.     {
  151.         cout << "\n请该车在便道稍作等待!";
  152.         t = new QueueNode;
  153.         t->data = p;
  154.         t->next = NULL;
  155.         W->rear->next = t;
  156.         W->rear = t;
  157.         return(1);
  158.     }
  159. }
  160. void Leave(SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar *W, int n) /*车辆离开*/
  161. {
  162.     int room;
  163.     CarNode *p, *t;
  164.     QueueNode *q;  /*判断车场是否有车*/
  165.     if (Enter->top > 0) /*有车*/
  166.     {
  167.         cout << "\n请输入要离开的车在车场的位置(1--" << Enter->top << "): ";
  168.         while (!(cin >> room) || room < 1 || room > Enter->top) /*输入离开车辆的信息*/
  169.         {
  170.             checkcin();
  171.             cout << "输入的位置超出范围,请重新输入: ";
  172.         }
  173.         while (Enter->top > room) /*车辆离开*/
  174.         {
  175.             Temp->top++;
  176.             Temp->stack[Temp->top] = Enter->stack[Enter->top];
  177.             Enter->stack[Enter->top] = NULL;
  178.             Enter->top--;
  179.         }
  180.         p = Enter->stack[Enter->top];
  181.         Enter->stack[Enter->top] = NULL;
  182.         Enter->top--;
  183.         while (Temp->top >= 1)
  184.         {
  185.             Enter->top++;
  186.             Enter->stack[Enter->top] = Temp->stack[Temp->top];
  187.             Temp->stack[Temp->top] = NULL;
  188.             Temp->top--;
  189.         }
  190.         PRINT(p);  /*判断通道上是否有车及车站是否已满*/
  191.         if ((W->head != W->rear) && Enter->top < n) /*便道的车辆进入车场*/
  192.         {
  193.             q = W->head->next;
  194.             t = q->data;
  195.             Enter->top++;
  196.             cout << "\n现在请便道上的车进入车场. 该车的车牌号为: ";
  197.             cout << t->num << endl;
  198.             cout << "\n该车进入车场第" << Enter->top << "位置.";
  199.             cout << "\n请输入现在的时间(即该车进站的时间**:**): ";

  200.             while (!((cin >> t->reach.hour).ignore() >> t->reach.min) ||
  201.                 t->reach.hour < 0 || t->reach.hour >= 24 || t->reach.min < 0 || t->reach.min >= 60)
  202.             {
  203.                 checkcin();
  204.                 cout << "输入的时间格式有误,请重新输入: ";
  205.             }
  206.             W->head->next = q->next;
  207.             if (q == W->rear) W->rear = W->head;
  208.             Enter->stack[Enter->top] = t;
  209.             delete q;
  210.         }
  211.         else cout << "\n目前便道里没有车.\n";
  212.     }
  213.     else cout << "\n目前车场里没有车,来车请直接进入车场!"; /*没车*/
  214. }
  215. void List1(SeqStackCar *S) /*列表显示车场存车信息*/
  216. {
  217.     int i;
  218.     if (S->top > 0) /*判断车站是否有车*/
  219.     {
  220.         cout << "\n车场: ";
  221.         cout << "\n 位置\t到达时间\t车牌号\n";
  222.         for (i = 1; i <= S->top; i++)
  223.         {
  224.             cout << " " << i << "\t";
  225.             cout << S->stack[i]->reach.hour << ":" << S->stack[i]->reach.min << "\t\t";
  226.             cout << S->stack[i]->num << endl;
  227.         }
  228.     }
  229.     else cout << "\n目前车场里没有车\n";
  230. }
  231. void List2(LinkQueueCar *W) /*列表显示便道信息*/
  232. {
  233.     QueueNode *p;
  234.     p = W->head->next;
  235.     if (W->head != W->rear) /*判断通道上是否有车*/
  236.     {
  237.         cout << "\n目前正在等待车辆的为: ";
  238.         while (p != NULL)
  239.         {
  240.             cout << p->data->num << endl;
  241.             p = p->next;
  242.             cout << endl;
  243.         }
  244.     }
  245.     else cout << "\n目前便道里没有车.\n";
  246. }
  247. void List(SeqStackCar S, LinkQueueCar W)
  248. {
  249.     int flag = 1, tag;
  250.     while (flag)
  251.     {
  252.         cout << "\n 1.车场\n 2.便道\n 3.返回\n";
  253.         cout << "\n请选择 1|2|3: ";
  254.         while (!(cin >> tag) || tag < 1 || tag > 3)
  255.         {
  256.             checkcin();
  257.             cout << "输入有误,请按要求重新输入!";
  258.         }
  259.         switch (tag)
  260.         {
  261.             case 1: List1(&S); break; /*列表显示车场信息*/
  262.             case 2: List2(&W); break; /*列表显示便道信息*/
  263.             case 3: flag = 0; break;  /*返回*/
  264.             default: break;
  265.         }
  266.     }
  267. }
  268. void main()
  269. {
  270.     SeqStackCar Enter, Temp;
  271.     LinkQueueCar Wait;
  272.     int ch;
  273.     int n;
  274.     cout << "该停车场管理系统是个比较简单系统,在应用的时候请注意要求!\n";
  275.     cout << "============================================================\n";
  276.     n = getn();
  277.     InitStack(&Enter, n); /*初始化车场*/
  278.     InitStack(&Temp, n);  /*初始化让路的临时栈*/
  279.     InitQueue(&Wait);     /*初始化便道*/
  280.     while (1)
  281.     {
  282.         cout << "\n1. 车辆进站";
  283.         cout << " 2. 车辆出站";
  284.         cout << " 3. 存车信息";
  285.         cout << " 4. 退出系统\n";
  286.         cout << "请选择: 1|2|3|4.\n";
  287.         while (!(cin >> ch) || ch < 1 || ch >4)
  288.         {
  289.             checkcin();
  290.             cout << "输入有误,请重新输入: ";
  291.         }
  292.         cin.get();
  293.         switch (ch)
  294.         {
  295.             case 1: Arrival(&Enter, &Wait, n); break;      /*车辆进站*/
  296.             case 2: Leave(&Enter, &Temp, &Wait, n); break; /*车辆出站*/
  297.             case 3: List(Enter, Wait); break;              /*存车信息*/
  298.             case 4: exit(0);                               /*退出系统*/
  299.             default: break;
  300.         }
  301.     }
  302. }

  303. void checkcin()
  304. {
  305.     if (cin.good())
  306.         return;
  307.     else if (cin.fail() && !cin.eof() && !cin.bad())
  308.     {
  309.         cin.clear();
  310.         while (cin.get() != '\n');
  311.     }
  312.     else {
  313.         cout << "出现不可恢复的错误,程序退出.\n";
  314.         exit(1);
  315.     }
  316. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-7 21:36:19 | 显示全部楼层
啥意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-7 21:44:00 | 显示全部楼层

这代码是C语言的输出输入,我想换成C++的输出输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-7 23:29:53 | 显示全部楼层
没有 300 鱼币打死我不改这堆……    你工作之后会懂的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-7 23:37:19 | 显示全部楼层
HJX54088 发表于 2020-7-7 21:44
这代码是C语言的输出输入,我想换成C++的输出输入

printf  改为 cout 不就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 07:40:00 | 显示全部楼层
直接把扩展名改成.cpp不就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-8 08:16:03 | 显示全部楼层
我叫MD 发表于 2020-7-7 23:37
printf  改为 cout 不就行了

害,中间还有一些代码是C++使用不了的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 09:30:07 | 显示全部楼层
KevinHu 发表于 2020-7-8 07:40
直接把扩展名改成.cpp不就行了

楼上说的对,再上extert "c"{
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 19:40:28 | 显示全部楼层
热气球 发表于 2020-7-8 09:30
楼上说的对,再上extert "c"{

  1. extern "C" {}
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-9 07:49:36 | 显示全部楼层
你的库呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-10 08:39:28 | 显示全部楼层
superbe 发表于 2020-7-9 14:12
试着修改了下,不知道还有没有问题,你测试下。

能帮我再调试一下吗。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-10 15:33:43 | 显示全部楼层
第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-10 16:00:06 | 显示全部楼层
superbe 发表于 2020-7-10 15:33
第125行忘改成delete了。刚改了。我在VS2015下能正常运行,你的有什么错误提示吗。

之前没改能调试,就是怎么输入也是显示不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-10 19:16:59 | 显示全部楼层
你用得什么开发环境,截个图看看什么提示
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表