C語言設(shè)計圖書登記系統(tǒng)與停車場管理系統(tǒng)的實例分享
圖書登記管理系統(tǒng)
圖書登記管理系統(tǒng)應(yīng)該具有下列功能:
(1)、 通過鍵盤輸入某本圖書的信息;
(2) 、給定圖書編號,顯示該本圖書的信息;
(3) 、給定作者姓名,顯示所有該作者編寫的圖書信息;
(4) 、給定出版社,顯示該出版社的所有圖書信息;
(5) 、給定圖書編號,刪除該本圖書的信息;
(6) 、提供一些統(tǒng)計各類信息的功能。
程序完整的實現(xiàn)代碼如下:
#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、根據(jù)圖書編號進行查找\n");
printf("2、根據(jù)作者姓名進行查找\n");
printf("3、根據(jù)出版社進行查找\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("| 圖書登記管理系統(tǒng) |\n");
printf("| 0、 退出系統(tǒng) |\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("請選擇相應(yīng)的功能:");
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;
}
停車場管理系統(tǒng)
設(shè)停車場是一個可停放n輛汽車的狹長通道,且只有一個大門可供汽車進出。汽車在停車場內(nèi)按車輛到達時間的先后順序,依次由北向南排列(大門在最南端,最先到達的第一輛車停放在停車場的最北端),若停車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時,在它之后進入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進入車場,每輛停放在車場的車在它離開停車場時必須按它停留的時間長短交納費用。試為停車場編制按上述要求進行管理的模擬程序。
基本要求:
以棧模擬停車場,以隊列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進行模擬管理。每一組輸入數(shù)據(jù)包括三個數(shù)據(jù)項:汽車“到達”或“離去”信息、汽車牌照號碼以及到達或離去的時刻。對每一組輸入數(shù)據(jù)進行操作后的輸出信息為:若是車輛到達,則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時間和應(yīng)交納的費用(在便道上停留的時間不收費)。棧以順序結(jié)構(gòu)實現(xiàn),隊列以鏈表結(jié)構(gòu)實現(xiàn)。
完整的實現(xiàn)代碼如下:
第一種方法:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 2 //車庫容量
#define price 0.05 //每車每分鐘費用
typedef struct time //時間結(jié)點
{
int hour;
int min;
}Time;
typedef struct node //車輛信息結(jié)點
{
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;
//判斷車場內(nèi)是否有車
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請輸入現(xià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) //判斷車站內(nèi)是否有車
{
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; //車的時間結(jié)構(gòu)體
typedef struct
{
int num;
int position;
time t;
float money;
}Car; //車的信息
typedef struct
{
Car elem[SIZE+1];
int top; //指向便道中的第一個空位
} Stack; //創(chuàng)建堆棧
typedef struct Node
{
Car data;
struct Node *next;
}CQueueNode;
//建立過道的程序:
typedef struct
{
CQueueNode *front;
CQueueNode *rear;
}LinkQueue; //設(shè)置的便道
//便道初始化程序
void InitQueue(LinkQueue *Q)
{
Q->front=(CQueueNode*)malloc(sizeof(CQueueNode)); //使mallo返回的指針轉(zhuǎn)換為指向CQueueNode類型數(shù)據(jù)的指針
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您現(xià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); //輸出車主應(yīng)付金額
}
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("未進入停車場應(yīng)支付金額 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; //設(shè)定堆棧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; //結(jié)束程序
} return 0;
}
欄 目:C語言
下一篇:C和指針小結(jié)(推薦)
本文標(biāo)題:C語言設(shè)計圖書登記系統(tǒng)與停車場管理系統(tǒng)的實例分享
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2241.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-10C#中split用法實例總結(jié)
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改


