汝汝 發問時間: 電腦與網際網路程式設計 · 1 0 年前

我想要用C++寫一個停車計費系統的程式

如題

當有車來時,輸入車牌號碼開始計費,

車要走時輸入車牌號碼,停止計費(不只一台車)

一小時40元,不滿一小時以一小時計費

要顯示停了多久,多少錢

麻煩各位程式高手幫忙

感恩~

已更新項目:

小綿羊:

你說的bug是哪裡呢

可以跟我說嗎>

2 個已更新項目:

To:大雄

你的系統不會計時耶

放多久都是40元

3 個解答

評分
  • ?
    Lv 4
    1 0 年前
    最佳解答

    #include <iostream>

    #include<cstdlib>

    #include<string>

    #include<ctime>

    #include<cmath>

    #define LEN_LP 9

    using namespace std;

    int CreatePARK(void);

    struct PARK* SearchPARK(const char *CHAR_Target);

    double SecondsPARK(struct PARK *ST_Target);

    void DeletePARK(struct PARK *ST_Target);

    void Toupperstr(char *str1,char *str2);

    struct PARK{

    char LP[LEN_LP];

    time_t T_SEC;

    struct PARK *next;

    } ;

    typedef struct PARK CARPARK;

    CARPARK *first;

    int main(int argc, char* argv[])

    { int nStatus;

    char buf_lp[LEN_LP],temp[LEN_LP];;

    char CHAR_Status[3];

    CARPARK *ST_temp;

    while(1){

    cout<<"A.建立資料\n"<<"B.搜尋資料\n"<<"C.離開\n"<<"請輸入要執行的代號";

    fflush(stdin);

    fgets(CHAR_Status,3, stdin);

    switch(CHAR_Status[0])

    {

    case 'A':

    case 'a':

    if(CreatePARK())

    cout<<"建立資料錯誤\n";

    break;

    case 'B':

    case 'b':

    puts("請輸入搜尋車牌號碼ex. FC-6666");

    fflush(stdin);

    fgets(temp,LEN_LP,stdin);

    Toupperstr(buf_lp,temp);

    ST_temp=SearchPARK(buf_lp);

    if(ST_temp)

    {

    cout<<"停了 "<<(int)SecondsPARK(ST_temp)/3600<<" 小時";

    cout<<"付費NT "<<(int)SecondsPARK(ST_temp)/3600*40<<endl;

    DeletePARK(ST_temp);

    }

    break;

    case 'C':

    case 'c':

    break;

    }

    if('C'==CHAR_Status[0]||'c'==CHAR_Status[0])

    break;

    }

    return 0;

    }

    //---------------------------------------------------------------------------

    int CreatePARK(void)

    { char LP[LEN_LP];

    char temp[LEN_LP];

    CARPARK *newnode;

    puts("請輸入車牌號碼ex. FC-6666");

    fflush(stdin);

    fgets(temp,LEN_LP,stdin);

    temp[7]='\0';

    Toupperstr(LP,temp);

    if(!SearchPARK(LP))

    {

    newnode=(CARPARK*)malloc(sizeof(CARPARK));

    if(newnode)

    {

    strcpy(newnode->LP,LP);

    newnode->T_SEC=time(NULL);

    newnode->next=first;

    first=newnode;

    }

    else

    return 1;

    }

    return 0;

    }

    struct PARK* SearchPARK(const char *CHAR_Target)

    {

    CARPARK *current = first;

    while ( current != NULL) {

    if ( strcmp(current->LP,CHAR_Target))

    return current;

    current = current->next;

    }

    return NULL;

    }

    2009-04-23 11:00:42 補充:

    double SecondsPARK(struct PARK *ST_Target)

    {

    CARPARK *current =ST_Target;

    double DOU_time;

    DOU_time=difftime(time(NULL),current->T_SEC);

    DOU_time=(DOU_time<3600)?3600:DOU_time;

    return DOU_time;

    }

    2009-04-23 11:00:56 補充:

    void DeletePARK(struct PARK *ST_Target)

    {

    CARPARK *current=first;

    if(ST_Target==first)

    first = first->next;

    else

    {

    while (current->next!=ST_Target)

    current = current->next;

    if ( ST_Target->next == NULL )

    current->next = NULL;

    else

    current->next =ST_Target->next;

    }

    free(ST_Target);

    }

    2009-04-23 11:01:29 補充:

    void Toupperstr(char *str1,char *str2)

    {

    int i=0;

    while ( str2[i]!='\0' ) {

    str1[i]=( str2[i] >='a' && str2[i] <= 'z' ) ?char(str2[i]-32):char(str2[i]);

    i++;

    }

    }

    應該能滿足你所有需求!

    有問題再問吧!!

    2009-04-23 11:02:23 補充:

    如果有錯時在叫我上傳程式碼!

    2009-05-05 17:25:01 補充:

    To:大雄

    你的系統不會計時耶

    放多久都是40元

    答:

    經過測試後沒有這個問題呀!(金錢會隨時間改變呀)

    而且程式碼沒有問題!

    你有放超過一個小時嗎?

    (一小時40元,不滿一小時以一小時計費)

    2009-05-05 22:35:30 補充:

    實驗結果:

    A.建立資料

    B.搜尋資料

    C.離開

    請輸入要執行的代號a

    請輸入車牌號碼ex. FC-6666

    lk-6262//我把現在的時間調快1 天,因為我不想等一天

    A.建立資料

    B.搜尋資料

    C.離開

    請輸入要執行的代號b

    請輸入搜尋車牌號碼ex. FC-6666

    lk-6262

    停了 24 小時付費NT 960//答案是正確的

    A.建立資料

    B.搜尋資料

    C.離開

    請輸入要執行的代號

    2009-05-18 13:19:09 補充:

    SearchPARK函數中

    if ( strcmp(current->LP,CHAR_Target))

    改為

    if ( !strcmp(current->LP,CHAR_Target))

    int main函數中

    fgets(temp,LEN_LP,stdin);

    Toupperstr(buf_lp,temp);

    改為

    fgets(temp,LEN_LP,stdin);

    temp[strchr(temp,'\n')-temp]='\0';

    Toupperstr(buf_lp,temp);

  • 1 0 年前

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    #include<time.h>

    #include<math.h>

    //車牌號碼長度

    #define LEN_LP 8

    //車輛數

    #define MAX_CAR 12

    //用結構宣告的陣列來記錄

    struct PARK{

    int FLAG;

    char LP[LEN_LP];

    time_t T_SEC;

    }lp[MAX_CAR];

    double SEARCH(struct PARK* Data, int Length, char* Input){

    int L=Length,I;

    struct PARK *D=Data;

    char *IN=Input;

    double RET=-1;

    for(I=0;I<L;I++){

    if(!strcmp(D[I].LP,IN)){

    RET=difftime(time(NULL),D[I].T_SEC);

    D[I].FLAG=0,strcpy(D[I].LP,""),D[I].T_SEC=0;

    break;

    }

    }

    return RET;

    }

    int main(int argc, char* argv[]){

    //==START==//

    int i,nStatus;

    double temp;

    char buf_lp[LEN_LP];

    printf("Foolish Parking System\n");

    printf("licence plate format XX-XXXX or XXXX-XX\n");

    printf("e.g. FK-7474, 4848-GY\nExit program= exit\n");

    do{

    printf("\nInput a car licence plate: "),scanf("%s",buf_lp);

    nStatus=strcmp(strlwr(buf_lp),"exit");

    if(nStatus){

    //搜尋資料

    temp=SEARCH(lp,MAX_CAR,buf_lp);

    if(temp==-1){

    //建立資料

    for(i=0;i<MAX_CAR;i++){

    if(!lp[i].FLAG){

    lp[i].FLAG=1;

    strcpy(lp[i].LP,buf_lp);

    lp[i].T_SEC=time(NULL);

    break;

    }

    }

    }else{

    //顯示結果

    printf("Time= %.2lf minutes\n",temp/=60);

    printf("Price= $ %.lf\n",ceil(temp/60)*40);

    }

    }

    }while(nStatus);

    //==END==//

    printf("\n"),system("PAUSE");

    return 0;

    }

    參考資料: 可以運作,但是有BUG
  • Leo
    Lv 5
    1 0 年前

    你是要大家幫你啥忙呢?不是很清楚你的問題.

還有問題?馬上發問,尋求解答。