a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言設計圖書登記系統與停車場管理系統的實例分享

2020-01-26 14:33:55
字體:
來源:轉載
供稿:網友

圖書登記管理系統

圖書登記管理系統應該具有下列功能:
(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;  } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久久久无码国产精品一区 | 国产一二三区在线播放 | 欧美三级免费 | 亚洲 欧美 精品 | 青青青草视频在线 | 国产免费黄视频 | 精品在线一区二区三区 | 国产真实精品久久二三区 | 韩日一级片 | 久久99精品久久久久久久久久久久 | 国产成人免费在线 | av青青草| 国产美女高潮视频 | 一区二区在线电影 | 久草网站 | 在线免费自拍 | 亚洲精品在线网站 | 美女福利视频网站 | 国产成人在线视频观看 | 欧美一区二区黄色片 | 日本精品网站 | 精品久久久久久久人人人人传媒 | 色婷婷久久久久swag精品 | 久久久久久久网 | 午夜激情福利电影 | 在线免费观看黄色av | 超碰97国产精品人人cao | 日韩午夜av | 超碰人人射 | 久久精品这里只有精品 | 欧美日韩午夜 | 懂色一区二区三区免费观看 | 日韩欧美三区 | 亚洲成人国产精品 | 欧美三级电影在线播放 | h视频在线免费观看 | 无套内谢孕妇毛片免费看红桃影视 | 国产精品粉嫩白浆在线观看 | 色999精品| 成人黄色片网站 | 亚洲精品视频国产 |