LinuxC練習:停車場專案:停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先後次序停放。若車場滿了,車要停在門 外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中
(1)建立三個資料結構分別是:停放棧、讓路棧、等候佇列。
(2)輸入資料模擬管理過程,資料(入或出,車號)
功能描述:進車登記、出車登記、按車牌號查詢停車車輛資訊、查詢出入車記錄、
查詢場內車輛資訊、查詢等候車輛資訊、退出系統。
(1)linux系統編寫(連結串列、棧、佇列);
(2)進車登記:登記車牌號以及入場時間;
(3)出車登記:計算出停車時間,記錄車輛車牌;
(4)按車牌號查詢車輛資訊:停車時間,是否來過停車場,是否還在停車場
(5)查詢出入記錄:所有車輛,包括已經離開的
(6)查詢場內車輛資訊:列出所有場內車輛資訊
(7)查詢等候車輛資訊:顯示等候車輛數量以及所有車牌號
(8)退出系統。
Car.h
#ifndef _CAR_H_ #define _CAR_H_ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> enum { SUCCESS = 10000, FAILURE, TRUE, FALSE, }; struct carinfo { char *carnum; char *entertime; char *outtime; long int enterseconds; long int outseconds; int enterflag; int outflag; int waitflag; int fee; struct carinfo *next; }; typedef struct carinfo CarInfo; struct carstack { CarInfo *top; int length; }; typedef struct carstack CarStack; struct carqueue { CarInfo *front; CarInfo *rear; }; typedef struct carqueue CarQueue; int Welcome(); int Login(); int CarMenue(); int CheckCarnumStack(CarStack *cs1, char *carnum); int CheckCarnumQueue(CarQueue *cq, char *carnum); int ShowByCarnum(CarStack *s, CarStack *s1, CarQueue *q, void(p)(CarInfo *)); int InitCarStack(CarStack **s); int Push(CarStack *s, CarInfo *c); CarInfo *Pop(CarStack *s); int EnterCarPark(CarStack *s, CarQueue *q); int LeaveCarPark(CarStack *s, CarStack *s1,CarStack *s2, CarQueue *q); int TraverseCarStack(CarStack *s, void (*p)(CarInfo *)); int EmptyCarStack(CarStack *s); int InitCarQueue(CarQueue **q); int EnterCarQueue(CarQueue *q, CarStack *s); int EmptyCarQueue(CarQueue *q); int LengthCarQueue(CarQueue *q); CarInfo *DeleteCarQueue(CarQueue *q); int TraverseCarQueue(CarQueue *q, void (*p)(CarInfo *)); #endif
Car.c #include "Car.h" int Welcome() { system("clear"); printf("\t\t\t************************************************************\n"); printf("\t\t\t------------------------------------------------------------\n"); printf("\t\t\t****************Welcome To CarPark System*****************\n"); printf("\t\t\t------------------------------------------------------------\n"); printf("\t\t\t*******************Made By Autumn Sun***********************\n"); printf("\t\t\t------------------------------------------------------------\n"); printf("\t\t\t************************************************************\n"); sleep(2); return 0; } int Login() { system("clear"); char *LoginName = (char *)malloc(sizeof(char) * 20); char *LoginPassword = (char *)malloc(sizeof(char) * 20); if(NULL == LoginName || NULL == LoginPassword) { printf("NULL ERROR\n"); exit(1); } int ret; printf("請輸入登入名\n"); scanf("%s", LoginName); printf("請輸入登入密碼\n"); scanf("%s", LoginPassword); ret = strcmp(LoginName, LoginPassword); if(ret != 0) { return FAILURE; } else { return SUCCESS; } } int CarMenue() { printf("\t\t\t1、顯示車庫 2、顯示等候\n"); printf("\t\t\t3、進入車庫 4、離開車庫\n"); printf("\t\t\t5、查詢所有 6、推出系統\n"); return 0; } int CheckCarnumStack(CarStack *cs1, char *carnum) { int flag = 0; if(NULL == cs1) { return FAILURE; } CarInfo *q = cs1 -> top; while(q) { if(0 == strcmp(q -> carnum, carnum)) { flag = 1; } q = q ->next; } if(flag == 0) { return FALSE; } else { return TRUE; } } int CheckCarnumQueue(CarQueue *cq, char *carnum) { if(NULL == cq) { return FAILURE; } int flag = 0; CarInfo *q1 = cq -> front -> next; while(q1) { if(0 == strcmp(q1 -> carnum, carnum)) { flag = 1; } q1 = q1 -> next; } if(flag == 0) { return FALSE; } else { return TRUE; } } int ShowByCarnum(CarStack *s, CarStack *s1, CarQueue *q, void(p)(CarInfo *)) { CarInfo *tmp1 = s -> top; CarInfo *tmp2 = s1 -> top; CarInfo *tmp3 = q -> front -> next; char *carnum = (char *)malloc(sizeof(char) * 20); if(NULL == carnum) { printf("NULL ERROR\n"); return FAILURE; } printf("請輸入要離開的車牌號\n"); scanf("%s", carnum); while(tmp1) { if(strcmp(tmp1 -> carnum, carnum) == 0) { printf(" 狀態:在停車場\n"); p(tmp1); } tmp1 = tmp1 -> next; } while(tmp2) { if(strcmp(tmp2 -> carnum, carnum) == 0) { printf("狀態:已經離開\n"); p(tmp2); } tmp2 = tmp2 -> next; } while(tmp3) { if(strcmp(tmp3 -> carnum, carnum) == 0) { printf("狀態:正在等候\n"); p(tmp3); } tmp3 = tmp3 -> next; } return SUCCESS; }
CarQueue.c
#include "Car.h"
int InitCarQueue(CarQueue **q)//初始化等候區
{
if (NULL == q)
{
return FAILURE;
}
(*q) = (CarQueue *)malloc(sizeof(CarQueue));
if ((*q) == NULL)
{
return FAILURE;
}
CarInfo *n = (CarInfo *)malloc(sizeof(CarInfo));
if (NULL == n)
{
return FAILURE;
}
n->next = NULL;
(*q)->rear = (*q)->front = n;
return SUCCESS;
}
int EnterCarQueue(CarQueue *q, CarStack *s)// 將車輛進入等候區
{
if (NULL == q)
{
return FAILURE;
}
int ret, ret1;
CarInfo *n = (CarInfo *)malloc(sizeof(CarInfo));
n -> carnum = (char *)malloc(sizeof(char) * 10);
n -> entertime = (char *)malloc(sizeof(char) * 20);
n -> outtime = (char *)malloc(sizeof(char) * 20);
n -> waitflag = 1;
char *carnum = (char *)malloc(sizeof(char) * 10);
if (NULL == n || NULL == n -> carnum || NULL == n -> entertime || NULL == n -> outtime || NULL == carnum)
{
return FAILURE;
}
printf("請輸入車牌號\n");
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
ret1 = CheckCarnumQueue(q, carnum);
while(TRUE == ret || TRUE == ret1)
{
printf("請重新輸入車牌號\n");
memset(carnum, 0, 10);
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
ret1 = CheckCarnumQueue(q, carnum);
}
strcpy(n ->carnum, carnum);
strcpy(n -> entertime, " ");
strcpy(n -> outtime, " ");
n -> fee = 0;
n -> enterflag = 0;
n -> outflag = 0;
n->next = NULL;
q->rear->next = n;
q->rear = n;
return SUCCESS;
}
int EmptyCarQueue(CarQueue *q)//判斷等候區是否有車
{
if (NULL == q)
{
return FAILURE;
}
return (q->rear == q->front) ? TRUE : FALSE;
}
int LengthCarQueue(CarQueue *q)//求得等候區車輛數
{
if (NULL == q)
{
return FAILURE;
}
CarInfo *p = q->front;
int length = 0;
while (p != q->rear)
{
p = p->next;
length++;
}
return length;
}
//將車從等候區出去,返回車輛資訊
CarInfo *DeleteCarQueue(CarQueue *q)
{
if (NULL == q || q->rear == q->front)
{
return NULL;
}
CarInfo *p = q->front->next;
q->front->next = p->next;
if (p == q->rear)
{
q->rear = q->front;
}
return p;
}
int TraverseCarQueue(CarQueue *q, void (*p)(CarInfo *))//現實等候區所有車輛
{
if (NULL == q || p == NULL)
{
return FAILURE;
}
int length = LengthCarQueue(q);
printf("目前有%d在等候區\n", length);
CarInfo *n = q->front->next;
while (n)
{
p(n);
n = n->next;
}
return SUCCESS;
}
CarStack.c
#include "Car.h"
int InitCarStack(CarStack **s)//初始化車庫
{
*s = (CarStack *)malloc(sizeof(CarStack));
if (NULL == (*s))
{
return FAILURE;
}
(*s)->top = NULL;
(*s)->length = 0;
return SUCCESS;
}
int Push(CarStack *s, CarInfo *c)
{
if(NULL == s)
{
return FAILURE;
}
c -> next = s -> top;
s -> top = c;
s -> length ++;
return SUCCESS;
}
CarInfo *Pop(CarStack *s)
{
if(NULL == s || NULL == s -> top)
{
return NULL;
}
CarInfo *c = s -> top;
s -> top = c -> next;
s -> length --;
//tmp = c;
//tmp -> next = NULL;
return c;
}
int EnterCarPark(CarStack *s, CarQueue *q)//將車牌號新增進車庫
{
if (NULL == s || NULL == q)
{
return FAILURE;
}
CarInfo *p = (CarInfo *)malloc(sizeof(CarInfo));
p -> carnum = (char *)malloc(sizeof(char) * 10);
p -> entertime = (char *)malloc(sizeof(char) * 20);
p -> outtime = (char *)malloc(sizeof(char) * 20);
char *carnum = (char *)malloc(sizeof(char) * 10);
if (NULL == p|| NULL == p -> carnum || NULL == p -> entertime || NULL == p -> outtime || NULL == carnum)
{
return FAILURE;
}
int ret, ret1;
//獲取時間
time_t timep;
if(s -> length > 5)//如果車庫滿了則將車轉到等候區
{
printf("停車場已經滿了,請進入等候區\n");
ret = EnterCarQueue(q, s);
if(SUCCESS == ret)
{
printf("進入等候區成功\n");
}
else
{
printf("進入等候區失敗\n");
}
}
else if(s -> length <= 5 && EmptyCarQueue(q) == TRUE)//如果等候區沒有車且車庫沒有滿
{
printf("請輸入車牌號\n");
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
ret1 = CheckCarnumQueue(q, carnum);
while(TRUE == ret || TRUE == ret1)
{
system("clear");
printf("請重新輸入車牌號\n");
memset(carnum, 0, 10);
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
ret1 = CheckCarnumQueue(q, carnum);
}
strcpy(p -> carnum, carnum);
p -> outseconds = 0;
strcpy(p -> outtime, " ");
p -> fee = 0;
p -> enterseconds = time(&timep);//獲取描述
strcpy(p -> entertime, ctime(&timep));
p -> enterflag = 1;
p -> outflag = 0;
p -> waitflag =1;
printf("入場時間:%s\n", p -> entertime);
Push(s, p);
}
return SUCCESS;
}
//出車時如果等候區有車則將等候區的第一輛車進入到車庫中、length不變
//如果等候區沒有車,則length --;
int LeaveCarPark(CarStack *s, CarStack *s1,CarStack *s2, CarQueue *q)//s為停車場,s1為方便停車的區域, s2為記錄離開的車子
{
char *carnum = (char *)malloc(sizeof(char) * 10);
CarInfo *tmp ;
CarInfo *tmp1;
CarInfo *tmp2;
CarInfo *tmp3;
CarInfo *tmp4;
int ret, ret2;
if (NULL == s || NULL == s->top || NULL == carnum)
{
return FAILURE;
}
printf("請輸入要離開的車牌號\n");
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
while(FALSE == ret)
{
printf("請重新輸入\n");
memset(carnum, 0, 10);
scanf("%s", carnum);
ret = CheckCarnumStack(s, carnum);
}
tmp = s -> top;
while(tmp)
{
if(strcmp(tmp -> carnum, carnum) == 0)
{
tmp1 = tmp;
break;
}
tmp4 = Pop(s);
if(NULL == tmp4)
break;
Push(s1, tmp4);
tmp = s -> top;
}
time_t timep;
time(&timep);
tmp1 -> outseconds = time(&timep);
strcpy(tmp1 -> outtime, ctime(&timep));
tmp1 -> fee = (tmp1 -> outseconds - tmp1 -> enterseconds) * 1;//一分鐘一元
tmp1 -> outflag = 1;
tmp1 -> enterflag = 0;
printf("應繳費用:%d\n", tmp1 -> fee);
printf("離開時間:%s\n", tmp1 -> outtime);
Pop(s);
Push(s2, tmp1);
tmp2 = s1 -> top;
while(tmp2)
{
tmp4 = Pop(s1);
if(NULL == tmp4)
break;
Push(s, tmp4);
tmp2 = s1 -> top;
}
//如果等候區有車將第一輛車開進停車場
if(FALSE == EmptyCarQueue(q))
{
tmp3 = DeleteCarQueue(q);
if(s -> length <= 5)
{
tmp3 -> enterseconds = time(&timep);
strcpy(tmp3 -> entertime, ctime(&timep));
tmp3 -> enterflag = 1;
tmp3 -> waitflag = 0;
ret2 = Push(s, tmp3);
if(SUCCESS == ret2)
{
printf("等候區車牌%s正在進入停車場\n", tmp3 -> carnum);
printf("入場時間:%s\n", tmp3 -> entertime);
printf("從等候區成功進入停車場\n");
return SUCCESS;
}
else
{
return FAILURE;
}
}
}
return SUCCESS;
}
int TraverseCarStack(CarStack *s, void (*p)(CarInfo *))//顯示所有停車場車輛的資訊
{
if (NULL == s)
{
printf("1\n");
return FAILURE;
}
//printf("2\n");
printf("目前停車場有%d正在使用\n", s -> length);
//printf("1\n");
CarInfo *q = s->top;
while (q)
{
p(q);
q = q->next;
}
while(getchar() != '\n');
return SUCCESS;
}
int EmptyCarStack(CarStack *s)//判斷停車場是否為空
{
if (NULL == s)
{
return FAILURE;
}
return (NULL == s->top) ? TRUE : FALSE;
}
test.c
#include"Car.h"
void visit(CarInfo *c)
{
printf("\t\t\t車牌號:%s進庫時間:%s出庫時間:%s應繳費用:%d\n", c -> carnum, c -> entertime, c -> outtime, c -> fee);
printf("\t\t\t--------------------------------------------------------------------\n");
printf("\t\t\t--------------------------------------------------------------------\n");
}
int main()
{
int ret, choice;
CarStack *cs1;//車庫
CarStack *cs2;//用於臨時存放
CarStack *cs3;//用於存放離開的車輛資訊
CarQueue *cq;
if(FAILURE == InitCarStack(&cs1) || FAILURE == InitCarStack(&cs2) || FAILURE == InitCarStack(&cs3) || FAILURE == InitCarQueue(&cq))
{
printf("Init Failure\n");
exit(1);
}
else
{
Welcome();
ret = Login();
while( FAILURE == ret)
{
system("clear");
printf("請重新登入\n");
ret = Login();
}
while(1)
{
CarMenue();
printf("\n");
printf("請輸入選項\n");
scanf("%d", &choice);
system("clear");
switch(choice)
{
case 1: TraverseCarStack(cs1, visit);
break;
case 2: TraverseCarQueue(cq, visit);
break;
case 3: EnterCarPark(cs1, cq);
break;
case 4: LeaveCarPark(cs1, cs2, cs3, cq);
break;
case 5: ShowByCarnum(cs1, cs3, cq, visit);
break;
case 6: exit(1);
break;
default: printf("1111\n");
return 0;
}
}
}
return 0;
}
相關推薦
LinuxC練習:停車場專案:停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先後次序停放。若車場滿了,車要停在門 外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中
基本功能要求: (1)建立三個資料結構分別是:停放棧、讓路棧、等候佇列。 (2)輸入資料模擬管理過程,資料(入或出,車號)功能描述:進車登記、出車登記、按車牌號查詢停車車輛資訊、查詢出入車記錄、 查詢場內車輛資訊、查詢等候
沒有傘的孩子只能快跑,如若不跑,只有一個結果:超過你的人回頭鄙視你
一.js a.'${pageContext.request.contextPath}'//結果:/projectName b.'<%=request.getContextPath()%>
3星|王賽《增長五線》:理論有新意,點評和案例一般,只有一個拿得出手的應用案例
貴賓 == 基礎 ash 純粹 都是 p12 樂視 dir 作者認為當下企業家最關註的都是如何實現客戶、業務、利潤、價值的增長。作者提出“增長五線”的理論,五線是:撤退線、成長底線、增長線、爆發線和天際線。其中天際線可以看作是企業的增長
位運算解決“一個數組中,只有一個數字出現n次,其他數字出現k次”問題
不重復 blog ron 運用 ons 利用 缺失 tail 位運算符 轉自:https://blog.csdn.net/monster_girl/article/details/52928864 在學習完位操作後,經常會遇到一類關於查找缺失整數的問題。 第一類是給你一個
第三方投票頁面,只有一個html頁面
關於html的程式碼就不註釋了,我比較喜歡這段JS程式碼,所以就註釋一下JS程式碼。 程式碼如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <
簡單的投票頁面,只有一個html頁面
幫鳥寫了個最簡單的投票頁面,他要求最簡單,所以介面就寫的很簡單,也沒有什麼大的功能。 關於html的程式碼就不註釋了,我比較喜歡這段JS程式碼,所以就註釋一下JS程式碼。 程式碼如下: <!DOCTYPE html> <html> <hea
eclipse建立maven工程時,出現目錄結構不全,只有一個resources
之前一直用的idea,想熟悉下eclipse開發maven工程,今天建立了幾個maven springmvc試了下,發現總是目錄不全,就網上各種查詢,試了很多方法 ,最後終於成功,原因在於maven的jar包配置出了問題,maven自帶的jdk版本和自己裝的不一樣,修改下就可
上千萬或上億資料(有重複),統計其中出現次數最多的N個數據. C++實現
上千萬或上億的資料,現在的機器的記憶體應該能存下。所以考慮採用hash_map/搜尋二叉樹/紅黑樹等來進行統計次數。然後就是取出前N個出現次數最多的資料了,可以用第2題提到的堆機制完成。 #in
一個數組中,只有一個數字僅出現一次,其他數字均出現兩次,找出這個數字
要求:不借助任何空間 我們知道:a^0 = a,a^a = 0,因此這裡可以藉助異或運算可以實現。 具體實現如下: public class SingleNum { /**
使用springmvc 接收上傳圖片,在 手機 ios 上,有圖片上傳就不報錯, 沒有就報下面這個錯誤,然後在pc端跟安卓手機上就不會有這個錯誤,這是為什麼呢?
七月 18, 2018 4:04:22 下午 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() for servlet [springMVC] in context with
一串數字中,只有一個數字出現一次,其他數字都出現兩次,查找出這個數字(python)
一次 面試 個數字 一個 直接 fas 其中 3.2 != 背景: 電話面試&手撕代碼 2019.03.22 Mufasa 問題: 一串數字中,只有一個數字出現一次,其他數字都出現兩次,查找出這個數字 條件: 這串數字是有序數
【嵌入式系統學習記錄】小專案:停車場管理系統的體會
停車場專案需求問題描述:停車場是一個能放 n 輛車的狹長通道,只有一個大門,汽車按到達的先後次序停放。若車場滿了,車要停在門 外的便道上等候,一旦有車走,則便道上第一輛車進入。當停車場中的車離開時,由於通道窄,在它後面的車 要先退出,待它走後在依次進入。汽
Linux小專案:停車場的實現。
標頭檔案: /****************************wddv587************************************* FileName: 停車場/parking.h Verson: 1.0 Date: 2018.0814
python小練習1:設計這樣一個函數,在桌面的文件夾上創建10個文本,以數字給它們命名。
一個 數字 width lose 文件夾 .com 小練習 pen wid python小練習1:設計這樣一個函數,在桌面的文件夾上創建10個文本,以數字給它們命名。 使用for循環即可實現: for name in range(1,11): desk
安卓專案實戰之強大的網路請求框架okGo使用詳解(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理
OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有
#Java又和Go語言槓上了!程式設計師:10年了!擡走,下一個
隨著IT行業越來越火,有很多小夥伴也就入了程式設計的坑。IT行業就業前景好使毋庸置疑的,從事IT行業的人,就算是跳槽再就業也是不會有什麼難度的,與其他行業相比,IT行業只要有技術,其他的就都微不足道了。 如果有想學習java的程式設計師,可來我們的java學習扣qun:72340,3928免
Java又和Go語言槓上了!程式設計師:20年了,擡走,下一個!
隨著IT行業越來越火,有很多小夥伴也就入了程式設計的坑。IT行業就業前景好使毋庸置疑的,從事IT行業的人,就算是跳槽再就業也是不會有什麼難度的,與其他行業相比,IT行業只要有技術,其他的就都微不足道了。 最近看到一篇帖子,有網友說,服務端未來是go的,說go不好的都是看了點go語法的,覺得
IDEA 從GitHub上拉取的專案POM.xml 不能新增依賴 ,報錯:Non-resolvable parent POM for com.cdc:blinddate:0.0.1-SNAPSHOT:
錯誤重現: [ERROR] Non-resolvable parent POM for com.fifree:backgroundFitfree:0.0.1-SNAPSHOT: Could not transfer artifact org.spri
Java:假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。
假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。 1)使用阻塞佇列來實現(BlockingQueue<T>) Producer類 package com.多執行緒停車問
機器學習工程師 - Udacity 專案:實現一個狗品種識別演算法App
在這個notebook中,你將邁出第一步,來開發可以作為移動端或 Web應用程式一部分的演算法。在這個專案的最後,你的程式將能夠把使用者提供的任何一個影象作為輸入。如果可以從影象中檢測到一隻狗,它會輸出對狗品種的預測。如果影象中是一個人臉,它會預測一個與其最相似的狗的種類。下面這張圖展