图书登记管理系统
图书登记管理系统应该具有下列功能:
(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; }</div>
停车场管理系统
设停车场是一个可停放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,&Wai