程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話設計圖書掛號體系與泊車場治理體系的實例分享

C說話設計圖書掛號體系與泊車場治理體系的實例分享

編輯:關於C++

C說話設計圖書掛號體系與泊車場治理體系的實例分享。本站提示廣大學習愛好者:(C說話設計圖書掛號體系與泊車場治理體系的實例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話設計圖書掛號體系與泊車場治理體系的實例分享正文


圖書掛號治理體系

圖書掛號治理體系應當具有以下功效:
(1)、 經由過程鍵盤輸出某本圖書的信息;
(2) 、給定圖書編號,顯示該本圖書的信息;
(3) 、給定作者姓名,顯示一切該作者編寫的圖手札息;
(4) 、給定出書社,顯示該出書社的一切圖手札息;
(5) 、給定圖書編號,刪除該本圖書的信息;
(6) 、供給一些統計各類信息的功效。

法式完全的完成代碼以下:

#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
typedef struct book 
{ 
  int book_id;     //圖書編號 
  char book_name[20];  //圖書名字 
  char name[20];    //作者姓名 
  char press[20];    //出書社 
  struct book *next; 
}book; 
book *head=NULL; 
int length;  //鏈表的長度 
 
void create() 
{ 
  book *p1,*p2; 
  length=0; 
  p1=(book *)malloc(sizeof(book)); 
  p1->book_id=-1; 
  if(head==NULL) 
    head=p1; 
  printf("請輸出圖書的編號、名字、作者姓名、出書社信息:\n"); 
  while(1) //圖書編號為0的時刻加入 
  { 
    p2=(book *)malloc(sizeof(book)); 
    scanf("%d %s %s %s",&p2->book_id,p2->book_name,p2->name,p2->press); //輸出圖手札息 
    if(p2->book_id==0) 
    { 
      printf("圖手札息輸出完成!\n"); 
      break; 
    } 
    length++; //鏈表的長度 
    p1->next=p2; 
    p2->next=NULL; 
    p1=p1->next; 
  } 
  return ; 
} 
 
void display() 
{ 
  book *p=head->next; 
  printf("鏈表中一切的圖手札息以下:\n"); 
  while(p!=NULL) 
  { 
    printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); 
    p=p->next; 
  } 
  return ; 
} 
void search() 
{ 
  int num,x,flag1=0,flag2=0; 
  char name[20],press[20]; 
  book *p=head->next; 
  printf("1、依據圖書編號停止查找\n"); 
  printf("2、依據作者姓名停止查找\n"); 
  printf("3、依據出書社停止查找\n"); 
  printf("請選擇功效:"); 
  scanf("%d",&x); 
  if(x==1) 
  { 
    printf("須要查找的圖書編號為:"); 
    scanf("%d",&num); 
 
    while(p!=NULL) 
    { 
 
      if(p->book_id==num) 
      { 
        printf("圖書編號為%d的圖書的信息以下:\n",num); 
        printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); 
        return; 
      }   
      p=p->next; 
    } 
    if(p==NULL) 
      printf("無此記載!\n"); 
  } 
  else if(x==2) 
  { 
    printf("須要查找的作者姓名為:"); 
    scanf("%s",name); 
    while(p!=NULL) 
    { 
      if(strcmp(p->name,name)==0) 
      { 
        if(flag1==0) 
          printf("作者%s編寫的圖手札息以下:\n",name); 
        flag1=1; 
        printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); 
      } 
      p=p->next; 
    } 
    if(flag1==0) 
      printf("藏書樓沒有作者%s編寫的圖書!\n",name); 
  } 
  else if(x==3) 
  { 
    printf("須要查找的出書社為:"); 
    scanf("%s",press); 
    while(p!=NULL) 
    { 
      if(strcmp(p->press,press)==0) 
      { 
        if(flag2==0) 
          printf("出書社為%s編寫的圖手札息以下:\n",press); 
        flag2=1; 
        printf("%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press); 
      } 
      p=p->next; 
    } 
    if(flag2==0) 
      printf("藏書樓沒有出書社%s編寫的圖書!\n",press); 
  } 
  return ; 
} 
 
void Delete() 
{ 
  int num; 
  book *p,*q; 
  q=head,p=head->next; 
  printf("請輸出要刪除的圖書編號:\n"); 
  scanf("%d",&num); 
 
  while(p!=NULL) 
  { 
    if(p->book_id==num) 
    { 
      q->next=p->next; 
      free(p); 
      length--; 
      printf("刪除勝利!\n"); 
      return ; 
    } 
    p=p->next; 
    q=q->next; 
  } 
  if(p==NULL) 
  { 
    printf("找不到要刪除的圖書編號!\n"); 
    return ; 
  } 
} 
void menu() 
{ 
  printf("________________________________________________________________\n"); 
  printf("|        圖書掛號治理體系                |\n"); 
  printf("|        0、 加入體系                  |\n"); 
  printf("|        1、 輸出圖手札息                |\n"); 
  printf("|        2、 顯示圖手札息                |\n"); 
  printf("|        3、 查詢圖手札息                |\n"); 
  printf("|        4、 刪除圖手札息                |\n"); 
  printf("________________________________________________________________\n"); 
  return ; 
} 
int main(void) 
{ 
  int a; 
  menu(); 
  while(1) 
  { 
    printf("請選擇響應的功效:"); 
    scanf("%d",&a); 
    switch(a) 
    { 
    case 0: 
      return 0; 
    case 1: 
      create(); 
      menu(); 
      break; 
    case 2: 
      if(head) 
      { 
        display(); 
        menu(); 
      } 
      else 
      { 
        printf("圖手札息為空,請先輸出圖手札息!\n"); 
        menu(); 
      } 
      break; 
    case 3: 
      if(head) 
      { 
        search(); 
        menu(); 
      } 
      else 
      { 
        printf("圖手札息為空,請先輸出圖手札息!\n"); 
        menu(); 
      } 
      break; 
    case 4: 
      if(head) 
      { 
        Delete(); 
        menu(); 
      } 
      else 
      { 
        printf("圖手札息為空,請先輸出圖手札息!\n"); 
        menu(); 
      } 
      break; 
    default: 
      break; 
    } 
  } 
  system("pause"); 
  return 0; 
} 


泊車場治理體系
設泊車場是一個可停放n輛汽車的狹長通道,且只要一個年夜門可供汽車進出。汽車在泊車場內按車輛達到時光的前後次序,順次由北向南分列(年夜門在最南端,最早達到的第一輛車停放在泊車場的最北端),若泊車場內已停滿n輛汽車,則後來的汽車只能在門外的便道上等待,一旦有車開走,則排在便道上的第一輛車便可開入;當泊車場內某輛車要分開時,在它以後進入的車輛必需先加入車場為它讓路,待該輛車開出年夜門外,其他車輛再按原順序進入車場,每輛停放在車場的車在它分開泊車場時必需按它逗留的時光長短交納費用。試為泊車場編制按上述請求停止治理的模仿法式。
根本請求:
以棧模仿泊車場,以隊列模仿車場外的便道,依照從終端讀入的輸出數據序列停止模仿治理。每組輸出數據包含三個數據項:汽車“達到”或“離去”信息、汽車派司號碼和達到或離去的時辰。對每組輸出數據停止操作後的輸入信息為:若是車輛達到,則輸入汽車在泊車場內或便道上的泊車地位;若是車輛離去,則輸入汽車在泊車場內逗留的時光和應交納的費用(在便道上逗留的時光不免費)。棧以次序構造完成,隊列以鏈表構造完成。

完全的完成代碼以下:

第一種辦法:

#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
 
#define MAX 2  //車庫容量  
#define price 0.05  //每車每分鐘費用 
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 InitQueue(LinkQueueCar *); //初始化便道 
int arrival(SeqStackCar *,LinkQueueCar *); //車輛達到 
void leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); //車輛分開  
void list(SeqStackCar,LinkQueueCar); //顯示存車信息 
 
int main(void)  
{  
  SeqStackCar Enter,Temp;  
  LinkQueueCar Wait;  
  int ch;  
  InitStack(&Enter);  //初始化車站  
  InitStack(&Temp);   //初始化讓路的暫時棧  
  InitQueue(&Wait);   //初始化通道  
  while(1)  
  {  
    printf("\n        1. The car arrive\n");  
    printf("        2. The car leave\n");  
    printf("        3. The schedule\n");  
    printf("        4. Exit\n");  
    while(1)  
    {  
      scanf("%d",&ch);  
      if(ch>=1 && ch<=4) 
        break;  
      else 
        printf("\nPlease choose: 1|2|3|4.");  
    }  
    switch(ch)  
    {  
    case 1: 
      arrival(&Enter,&Wait);  //車輛達到 
      break; 
    case 2: 
      leave(&Enter,&Temp,&Wait);  //車輛分開  
      break; 
    case 3: 
      list(Enter,Wait);break;  //列表打印信息 
    case 4: 
      exit(0);  //加入主法式  
    default: 
      break;  
    }  
  }  
}  
 
void InitStack(SeqStackCar *s) //初始化棧 
{  
  int i;  
  s->top=0;  
  for(i=0;i<=MAX;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 room) //打印出站車的信息 
{  
  int A1,A2,B1,B2;  
  printf("\nplease input thedepart time:/**:**/");  
  scanf("%d:%d",&(p->leave.hour),&(p->leave.min));  
  printf("\nthe number of the car:");  
  puts(p->num);  
  printf("\nthe time the car arrive: %d:%d",p->reach.hour,p->reach.min);  
  printf("the depart time: %d:%d",p->leave.hour,p->leave.min);  
  A1=p->reach.hour;  
  A2=p->reach.min;  
  B1=p->leave.hour;  
  B2=p->leave.min;  
  printf("\nthe fee: %2.1f元",((B1-A1)*60+(B2-A2))*price);  
  free(p);  
}  
int arrival(SeqStackCar *Enter,LinkQueueCar *W) //車輛達到 
{  
  CarNode *p;  
  QueueNode *t;  
  p=(CarNode *)malloc(sizeof(CarNode));  
  flushall();  
  printf("\ninput the number of the car(例:陝A1234):");  
  gets(p->num);  
  if(Enter->top<MAX)   //車場未滿,車進車場 
  {  
    Enter->top++;  
    printf("\nthe place of the car.",Enter->top);  
    printf("\nthe time thecar arrive:/**:**/");  
    scanf("%d:%d",&(p->reach.hour),&(p->reach.min));  
    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 i, room;  
  CarNode *p,*t;  
  QueueNode *q;  
  //斷定車場內能否有車 
  if(Enter->top>0) //有車 
  {  
    while(1) //輸出分開車輛的信息  
    {  
      printf("\n請輸出車在車場的地位/1--%d/:",Enter->top);  
      scanf("%d",&room);  
      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,room);  
    //斷定通道上能否有車及車站能否已滿 
    if((W->head!=W->rear)&&Enter->top<MAX) //便道的車輛進入車場 
    {  
      q=W->head->next;  
      t=q->data;  
      Enter->top++;  
      printf("\n便道的%s號車進入車場第%d地位.",t->num,Enter->top);  
      printf("\n請輸出如今的時光/**:**/:");  
      scanf("%d:%d",&(t->reach.hour),&(t->reach.min));  
      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;  
    }  
  }  
  else 
    printf("\n便道裡沒有車.");  
}  
void list(SeqStackCar S,LinkQueueCar W)  
{  
  int flag,tag;  
  flag=1;  
  while(flag)  
  {  
    printf("\n請選擇 1|2|3:");  
    printf("\n1.車場\n2.便道\n3.前往\n");  
    while(1)  
    {  
      scanf("%d",&tag);  
      if(tag>=1 || tag<=3) 
        break;  
      else 
        printf("\n請選擇 1|2|3:");  
    }  
    switch(tag)  
    { 
    case 1: 
      list1(&S); 
      break;  //列表顯示車場信息 
    case 2: 
      list2(&W); 
      break;  //列表顯示便道信息 
    case 3: 
      flag=0; 
      break; 
    default: break; 
    }  
  }  
} 

 
第二種辦法:

#include "stdio.h" 
#include "stdlib.h" 
 
#define SIZE 10 
typedef struct  
{ 
  int hour; 
  int min;  
}time;   //車的時光構造體 
 
typedef struct  
{ 
  int num; 
  int position; 
  time t; 
  float money;  
}Car;   //車的信息 
typedef struct  
{ 
  Car elem[SIZE+1];  
  int top;    //指向便道中的第一個空位 
} Stack;      //創立客棧 
 
typedef struct Node  
{ 
  Car data;  
  struct Node *next;  
}CQueueNode; 
 
//樹立過道的法式: 
typedef struct  
{ 
  CQueueNode *front; 
  CQueueNode *rear;  
}LinkQueue;  //設置的便道 
 
//便道初始化法式 
void InitQueue(LinkQueue *Q)  
{ 
  Q->front=(CQueueNode*)malloc(sizeof(CQueueNode)); //使mallo前往的指針轉換為指向CQueueNode類型數據的指針 
  if(Q->front!=NULL)  
  { 
    Q->rear=Q->front;  
    Q->front->next=NULL; 
  }  
} 
 
int EnterQueue(LinkQueue *Q,Car *t)  
{ 
  CQueueNode *NewNode;  
  NewNode=(CQueueNode*)malloc(sizeof(CQueueNode));  //給便道請求空間 
  if(NewNode!=NULL)  
  { 
    NewNode->data.num=t->num;  
    NewNode->data.t.hour=t->t.hour;  
    NewNode->data.t.min=t->t.min;  
    NewNode->next=NULL;  
    Q->rear->next=NewNode;  
    Q->rear=NewNode;  
    return 1;  
  }  
  else return 0;  
}  
void InitStack(Stack *S)  
{ 
  S->top=0; 
}  //確保客棧為空 
 
void Push(Stack *S,Car *r)    //便道中的車入庫 
{ 
  S->top++;  
  S->elem[S->top].num=r->num;  
  r->position=S->elem[S->top].position=S->top;  
  S->elem[S->top].t.hour=r->t.hour;  
  S->elem[S->top].t.min=r->t.min;  
} 
int IsEmpty(Stack* S)  //斷定車庫能否為空 
{ 
  return(S->top==0?1:0); 
} 
 
int IsFull(Stack *S)  //斷定車庫能否為滿 
{ 
  return(S->top==SIZE?1:0); 
} 
 
int GetTop(Stack *S,Car *n)  //車分開車庫 
{ 
  n->num=S->elem[S->top].num;  
  n->position=S->elem[S->top].position;  
  n->t.hour=S->elem[S->top].t.hour;  
  n->t.min=S->elem[S->top].t.min;  
  return 1; 
} 
int DeleteQueue(LinkQueue *Q,Car *x)  
{ 
  CQueueNode *p;  
  if(Q->front==Q->rear) 
    return 0;   //斷定便道為空 
  p=Q->front->next;   //將便道中的車放入車庫 
  Q->front->next=p->next;  
  if(Q->rear==p)  
    Q->rear=Q->front;  
  x->num=p->data.num;  
  x->t.hour=p->data.t.hour;  
  x->t.min=p->data.t.min;  
  free(p);   //釋放暫時指針 
  return 1;  
}  
void In(Stack *S,LinkQueue *Q,Car*r)  
{ 
  if(IsFull(S))  
  { 
    printf("車庫已滿,請期待!");  
    EnterQueue(Q,r);   //車進入便道      
  } 
  else  
  { 
    Push(S,r);  
    printf("\n您如今地點地位 %d",r->position);    //打印車的地位 
  }  
} 
void TaM(Car *r,int h,int m)  
{ 
  if(m>r->t.min) 
  { 
    r->t.min+=60; 
    r->t.hour-=1; 
  } 
  h=r->t.hour-h; 
  m=r->t.min-m; 
  printf("\n泊車 %d小時 %d 分鐘\n",h,m); 
  printf("每小時免費30元\n"); 
  h=h*60;m=h+m;  
  r->money=0.5*m;  
  printf("請付出金額%.2f元\n",r->money);   //輸入車主敷衍金額 
} 
void Out(Stack *S,Stack *S0,Car *r,LinkQueue *Q)  
{ 
  int tag=S->top;  
  Car x;  
  if(IsEmpty(S)) 
    printf("沒有此車!");  
  else  
  { 
    for(;r->num!=S->elem[tag].num && tag>0;tag--)  
    { 
      Push(S0,&S->elem[tag]);  
      S->top--;  
    }  
    if(r->num==S->elem[tag].num)  
    { 
      TaM(r,S->elem[tag].t.hour,S->elem[tag].t.min);  
      S->top--;  
      for(;S0->top>0;S0->top--)  
        Push(S,&S0->elem[S0->top]);  
      if(S->top<SIZE && Q->front!=Q->rear)  //斷定車庫能否有此車,有就找到此車,然撤退退卻出 
      { 
        DeleteQueue(Q,&x); 
        Push(S,&x);  
      }  
    } 
    else if(tag==0)  //過道中的車無需收車資 
    { 
      printf("未進入泊車場應付出金額 0元!");  
      for(;S0->top>0;S0->top--) 
        Push(S,&S0->elem[S0->top]);   
    }  
  }  
} 
 
void print1(Stack *S)  
{ 
  int tag;  
  Car x;  
  printf("泊車場泊車情形:\n");  
  if(IsEmpty(S)) 
    printf("無車!");  
  for(tag=S->top;S->top>0;S->top--)  
    if(GetTop(S,&x))     //顯示車庫中個車的信息及達到時光 
      printf("車商標 %d,地點地位 %d,達到/分開時光 %d:%d\n",x.num,x.position,x.t.hour,x.t.min);  
  S->top=tag;  
} 
 
void print2(LinkQueue *Q)  
{ 
  CQueueNode *p;  
  p=Q->front->next;  
  for(;p!=NULL;p=p->next)  //顯示過道上車的信息及達到時光 
    printf("期待車商標 %d, 達到/分開時光 %d:%d",p->data.num,p->data.t.hour,p->data.t.min);  
} 
 
void print()  
{ 
  printf("\n***********************************迎接惠臨*************************************\n");  
  printf("\n 請選擇:\n");  
  printf("\n 1 :達到");  
  printf("\n 2 :分開");  
  printf("\n 3 :搜刮");  
  printf("\n 4 :加入\n");  
  printf("\n"); 
} 
 
int main(void)  
{ 
  int n,m,i=1,j,flag=0; 
  Car c[10]; 
  Stack S,S0;    //設定客棧S,SO 
  LinkQueue Q;   //便道 
  InitStack(&S);  //客棧S 
  InitStack(&S0);  //暫時客棧S0 
  InitQueue(&Q); 
  while(1)  
  { 
    print();  
    scanf("%d",&m);  
    switch(m) 
    { 
    case 1: 
      printf("\n請輸出車商標:");  
      scanf("%d",&c[i].num);  
      printf("\n請輸出達到/分開時光:");  
      scanf("%d:%d",&c[i].t.hour,&c[i].t.min);  
      In(&S,&Q,&c[i]);i++;   //車輛的情形 
      break; 
    case 2: 
      printf("\n請輸出車商標:");  
      scanf("%d",&n);  
      for(j=0;j<10;j++)  
        if(n==c[j].num) 
          break;  
      printf("\n請輸出達到/分開時光:");  
      scanf("%d:%d",&c[j].t.hour,&c[j].t.min);  
      Out(&S,&S0,&c[j],&Q);  //車輛的情形 
      break;       
    case 3: 
      print1(&S);   //輸入車庫中車的信息 
      print2(&Q);   //輸入過道上車的信息 
      break;      //終止 
    case 4: 
      flag=1; 
      break;  
    default: 
      printf("\n輸出毛病,請輸出 1,2,3 或4");  
    }  
    if(flag) 
      break;   //停止法式 
  } return 0;  
} 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved