帮我写一段C语言停车场管理系统代码,使用栈和链表实现,通过栈来模拟停车场,将录入的信息通过二进制文件的方式保存在链表中,通过文件来保存和读取数据,主要功能包括停车,取车,查询,修改,统计,删除。停车时录入车牌号,停车时间,停车位号,车主姓名,车牌号固定没8位字符,若不为8位则显示输入错误,要求重新输入停车位号最大为50,超过50则显示该停车位不存在,规定栈的大小为50;取车时录入取车时间,并且计算停车费,将取车时间和停车位信息和停车时间,车牌号,停车位号,车主姓名等信息保存在同一张链表中,通过二进制文件保存;查询时通过文件查询,查询车辆的信息,可以分别通过车牌号和车主姓名来查询对应的车辆信息;修改时先查询到对应的车辆信息,再修改车辆信息,修改分为单独修改停车费用,单独修改车主姓名和修改整条信息三种,修改时录入新的信息并且覆盖对应的原有信息;统计时分别统计每天每周的停车数量和停车费用;删除时先查询到车辆信息,再进行对该信息的删除。
时间: 2024-03-16 09:42:21 浏览: 60
停车场管理的C语言代码
很高兴为您提供停车场管理系统的C语言代码,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 50
//车辆信息结构体
typedef struct CarInfo{
char carNum[9];
char ownerName[20];
int parkNum;
int parkTime;
struct CarInfo *next;
}CarInfo;
//定义栈
typedef struct ParkStack{
CarInfo *data[MAXSIZE];
int top;
}ParkStack;
//链表头指针
CarInfo *head = NULL;
//初始化栈
void initStack(ParkStack *s){
s->top = -1;
}
//判断栈是否为空
int isEmpty(ParkStack s){
if(s.top == -1){
return 1;
}
else{
return 0;
}
}
//判断栈是否已满
int isFull(ParkStack s){
if(s.top == MAXSIZE-1){
return 1;
}
else{
return 0;
}
}
//入栈
void push(ParkStack *s, CarInfo *x){
if(isFull(*s)){
printf("停车场已满,无法停车!\n");
}
else{
s->top++;
s->data[s->top] = x;
printf("车辆 %s 已成功停入第 %d 号停车位,停车时间为 %d 分钟。\n", s->data[s->top]->carNum, s->data[s->top]->parkNum, s->data[s->top]->parkTime);
}
}
//出栈
void pop(ParkStack *s, int parkTime){
if(isEmpty(*s)){
printf("停车场为空,无法取车!\n");
}
else{
CarInfo *p = s->data[s->top];
s->top--;
p->parkTime = parkTime - p->parkTime;
printf("车辆 %s 已成功取出,停车费用为 %d 元。\n", p->carNum, p->parkTime*2);
//将取车信息保存到链表中
CarInfo *temp = (CarInfo *)malloc(sizeof(CarInfo));
strcpy(temp->carNum, p->carNum);
strcpy(temp->ownerName, p->ownerName);
temp->parkNum = p->parkNum;
temp->parkTime = p->parkTime;
temp->next = head;
head = temp;
free(p);
}
}
//查询车辆信息
void search(){
FILE *fp = fopen("carInfo.dat", "rb");
if(fp == NULL){
printf("文件打开失败!\n");
return;
}
CarInfo temp;
int flag = 0;
int choice;
printf("请选择查询方式:\n");
printf("1. 车牌号查询\n");
printf("2. 车主姓名查询\n");
scanf("%d", &choice);
if(choice == 1){
char carNum[9];
printf("请输入车牌号:");
scanf("%s", carNum);
while(fread(&temp, sizeof(CarInfo), 1, fp) == 1){
if(strcmp(temp.carNum, carNum) == 0){
printf("车牌号:%s\n", temp.carNum);
printf("车主姓名:%s\n", temp.ownerName);
printf("停车位号:%d\n", temp.parkNum);
printf("停车时间:%d 分钟\n", temp.parkTime);
flag = 1;
break;
}
}
}
else if(choice == 2){
char ownerName[20];
printf("请输入车主姓名:");
scanf("%s", ownerName);
while(fread(&temp, sizeof(CarInfo), 1, fp) == 1){
if(strcmp(temp.ownerName, ownerName) == 0){
printf("车牌号:%s\n", temp.carNum);
printf("车主姓名:%s\n", temp.ownerName);
printf("停车位号:%d\n", temp.parkNum);
printf("停车时间:%d 分钟\n", temp.parkTime);
flag = 1;
}
}
}
if(flag == 0){
printf("未找到对应车辆信息!\n");
}
fclose(fp);
}
//修改车辆信息
void modify(){
FILE *fp = fopen("carInfo.dat", "rb+");
if(fp == NULL){
printf("文件打开失败!\n");
return;
}
CarInfo temp;
int flag = 0;
char carNum[9];
printf("请输入要修改的车辆的车牌号:");
scanf("%s", carNum);
while(fread(&temp, sizeof(CarInfo), 1, fp) == 1){
if(strcmp(temp.carNum, carNum) == 0){
flag = 1;
printf("请选择修改方式:\n");
printf("1. 修改停车费用\n");
printf("2. 修改车主姓名\n");
printf("3. 修改所有信息\n");
int choice;
scanf("%d", &choice);
if(choice == 1){
printf("请输入新的停车费用:");
scanf("%d", &temp.parkTime);
}
else if(choice == 2){
printf("请输入新的车主姓名:");
scanf("%s", temp.ownerName);
}
else if(choice == 3){
printf("请输入新的车牌号:");
scanf("%s", temp.carNum);
printf("请输入新的车主姓名:");
scanf("%s", temp.ownerName);
printf("请输入新的停车位号:");
scanf("%d", &temp.parkNum);
printf("请输入新的停车时间:");
scanf("%d", &temp.parkTime);
}
fseek(fp, -sizeof(CarInfo), SEEK_CUR);
fwrite(&temp, sizeof(CarInfo), 1, fp);
printf("车辆信息已成功修改!\n");
break;
}
}
if(flag == 0){
printf("未找到对应车辆信息!\n");
}
fclose(fp);
}
//统计车辆信息
void statistics(){
FILE *fp = fopen("carInfo.dat", "rb");
if(fp == NULL){
printf("文件打开失败!\n");
return;
}
CarInfo temp;
int dayCount = 0;
int weekCount = 0;
int dayFee = 0;
int weekFee = 0;
while(fread(&temp, sizeof(CarInfo), 1, fp) == 1){
if(temp.parkTime <= 1440){
dayCount++;
dayFee += temp.parkTime*2;
}
else{
weekCount++;
weekFee += temp.parkTime*2;
}
}
printf("今日停车数量:%d\n", dayCount);
printf("今日停车费用:%d 元\n", dayFee);
printf("本周停车数量:%d\n", weekCount);
printf("本周停车费用:%d 元\n", weekFee);
fclose(fp);
}
//删除车辆信息
void delete(){
FILE *fp = fopen("carInfo.dat", "rb");
if(fp == NULL){
printf("文件打开失败!\n");
return;
}
FILE *fp2 = fopen("temp.dat", "wb");
if(fp2 == NULL){
printf("文件打开失败!\n");
return;
}
CarInfo temp;
int flag = 0;
char carNum[9];
printf("请输入要删除的车辆的车牌号:");
scanf("%s", carNum);
while(fread(&temp, sizeof(CarInfo), 1, fp) == 1){
if(strcmp(temp.carNum, carNum) == 0){
flag = 1;
printf("车辆信息已成功删除!\n");
}
else{
fwrite(&temp, sizeof(CarInfo), 1, fp2);
}
}
if(flag == 0){
printf("未找到对应车辆信息!\n");
}
fclose(fp);
fclose(fp2);
remove("carInfo.dat");
rename("temp.dat", "carInfo.dat");
}
//录入车辆信息
void input(){
CarInfo *p = (CarInfo *)malloc(sizeof(CarInfo));
printf("请输入车牌号(8位字符):");
scanf("%s", p->carNum);
if(strlen(p->carNum) != 8){
printf("输入错误,请重新输入!\n");
free(p);
return;
}
printf("请输入车主姓名:");
scanf("%s", p->ownerName);
printf("请输入停车位号(1~50):");
scanf("%d", &p->parkNum);
if(p->parkNum < 1 || p->parkNum > 50){
printf("该停车位不存在,请重新输入!\n");
free(p);
return;
}
p->parkTime = 0;
//将车辆信息入栈
push(&s, p);
//将车辆信息保存到文件中
FILE *fp = fopen("carInfo.dat", "ab");
if(fp == NULL){
printf("文件打开失败!\n");
return;
}
fwrite(p, sizeof(CarInfo), 1, fp);
fclose(fp);
}
int main(){
//初始化栈
ParkStack s;
initStack(&s);
//主菜单
int choice;
do{
printf("****************************************\n");
printf(" 停车场管理系统\n");
printf("****************************************\n");
printf("1. 停车\n");
printf("2. 取车\n");
printf("3. 查询\n");
printf("4. 修改\n");
printf("5. 统计\n");
printf("6. 删除\n");
printf("7. 退出\n");
printf("请选择功能(输入数字):");
scanf("%d", &choice);
switch(choice){
case 1:
input();
break;
case 2:
if(isEmpty(s)){
printf("停车场为空,无法取车!\n");
}
else{
int parkTime;
printf("请输入取车时间:");
scanf("%d", &parkTime);
pop(&s, parkTime);
}
break;
case 3:
search();
break;
case 4:
modify();
break;
case 5:
statistics();
break;
case 6:
delete();
break;
case 7:
printf("谢谢使用!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}while(choice != 7);
return 0;
}
```
以上代码实现了停车场管理系统的主要功能:停车、取车、查询、修改、统计、删除。其中,使用了栈来模拟停车场,将录入的车辆信息通过二进制文件保存在链表中。同时,还实现了对车辆信息的查询、修改、统计和删除等功能。
阅读全文