C語言設(shè)計(jì)圖書登記系統(tǒng)與停車場管理系統(tǒng)的實(shí)例分享
圖書登記管理系統(tǒng)
圖書登記管理系統(tǒng)應(yīng)該具有下列功能:
(1)、 通過鍵盤輸入某本圖書的信息;
(2) 、給定圖書編號,顯示該本圖書的信息;
(3) 、給定作者姓名,顯示所有該作者編寫的圖書信息;
(4) 、給定出版社,顯示該出版社的所有圖書信息;
(5) 、給定圖書編號,刪除該本圖書的信息;
(6) 、提供一些統(tǒng)計(jì)各類信息的功能。
程序完整的實(shí)現(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的時(shí)候退出
{
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ù)圖書編號進(jìn)行查找\n");
printf("2、根據(jù)作者姓名進(jìn)行查找\n");
printf("3、根據(jù)出版社進(jìn)行查找\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("請輸入要?jiǎng)h除的圖書編號:\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("找不到要?jiǎng)h除的圖書編號!\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è)停車場是一個(gè)可停放n輛汽車的狹長通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車停放在停車場的最北端),若停車場內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場,每輛停放在車場的車在它離開停車場時(shí)必須按它停留的時(shí)間長短交納費(fèi)用。試為停車場編制按上述要求進(jìn)行管理的模擬程序。
基本要求:
以棧模擬停車場,以隊(duì)列模擬車場外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號碼以及到達(dá)或離去的時(shí)刻。對每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。
完整的實(shí)現(xiàn)代碼如下:
第一種方法:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX 2 //車庫容量
#define price 0.05 //每車每分鐘費(fèi)用
typedef struct time //時(shí)間結(jié)點(diǎn)
{
int hour;
int min;
}Time;
typedef struct node //車輛信息結(jié)點(diǎn)
{
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 *); //車輛到達(dá)
void leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); //車輛離開
void list(SeqStackCar,LinkQueueCar); //顯示存車信息
int main(void)
{
SeqStackCar Enter,Temp;
LinkQueueCar Wait;
int ch;
InitStack(&Enter); //初始化車站
InitStack(&Temp); //初始化讓路的臨時(shí)棧
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); //車輛到達(dá)
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) //車輛到達(dá)
{
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) //車場未滿,車進(jìn)車場
{
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 //車場已滿,車進(jìn)便道
{
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) //便道的車輛進(jìn)入車場
{
q=W->head->next;
t=q->data;
Enter->top++;
printf("\n便道的%s號車進(jìn)入車場第%d位置.",t->num,Enter->top);
printf("\n請輸入現(xiàn)在的時(shí)間/**:**/:");
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 位置 到達(dá)時(shí)間 車牌號\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; //車的時(shí)間結(jié)構(gòu)體
typedef struct
{
int num;
int position;
time t;
float money;
}Car; //車的信息
typedef struct
{
Car elem[SIZE+1];
int top; //指向便道中的第一個(gè)空位
} 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); //釋放臨時(shí)指針
return 1;
}
void In(Stack *S,LinkQueue *Q,Car*r)
{
if(IsFull(S))
{
printf("車庫已滿,請等待!");
EnterQueue(Q,r); //車進(jìn)入便道
}
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小時(shí) %d 分鐘\n",h,m);
printf("每小時(shí)收費(fèi)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) //過道中的車無需收車費(fèi)
{
printf("未進(jìn)入停車場應(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)) //顯示車庫中個(gè)車的信息及到達(dá)時(shí)間
printf("車牌號 %d,所在位置 %d,到達(dá)/離開時(shí)間 %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) //顯示過道上車的信息及到達(dá)時(shí)間
printf("等待車牌號 %d, 到達(dá)/離開時(shí)間 %d:%d",p->data.num,p->data.t.hour,p->data.t.min);
}
void print()
{
printf("\n***********************************歡迎光臨*************************************\n");
printf("\n 請選擇:\n");
printf("\n 1 :到達(dá)");
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); //臨時(shí)堆棧S0
InitQueue(&Q);
while(1)
{
print();
scanf("%d",&m);
switch(m)
{
case 1:
printf("\n請輸入車牌號:");
scanf("%d",&c[i].num);
printf("\n請輸入到達(dá)/離開時(shí)間:");
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請輸入到達(dá)/離開時(shí)間:");
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輸入錯(cuò)誤,請輸入 1,2,3 或4");
}
if(flag)
break; //結(jié)束程序
} return 0;
}
- C語言實(shí)現(xiàn)圖書管理系統(tǒng)
- C語言圖書管理系統(tǒng)簡潔版
- C語言實(shí)現(xiàn)簡單圖書管理系統(tǒng)
- C語言圖書管理系統(tǒng)課程設(shè)計(jì)
- C語言鏈表實(shí)現(xiàn)圖書管理系統(tǒng)
- C語言實(shí)現(xiàn)簡單的圖書管理系統(tǒng)
- C語言實(shí)現(xiàn)圖書館管理系統(tǒng)
- C語言實(shí)現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)
- C語言單鏈表實(shí)現(xiàn)圖書管理系統(tǒng)
- C語言實(shí)現(xiàn)圖書管理系統(tǒng)開發(fā)
相關(guān)文章
Cocos2d-x學(xué)習(xí)筆記之Hello World!
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之Hello World!本文基于vs2010和C++語言開發(fā),需要的朋友可以參考下2014-09-09
利用OpenCV實(shí)現(xiàn)局部動(dòng)態(tài)閾值分割
這篇文章主要為大家詳細(xì)介紹了利用OpenCV實(shí)現(xiàn)局部動(dòng)態(tài)閾值分割,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Cocos2d-x保存用戶游戲數(shù)據(jù)CCUserDefault類使用實(shí)例
這篇文章主要介紹了Cocos2d-x保存用戶游戲數(shù)據(jù)CCUserDefault類使用實(shí)例,需要的朋友可以參考下2014-09-09

