C语言:基于单链表实现的泊车管理系统

一、需求

(1)管理员方账号登录;

(2)车位管理显示:车位状态;

(3)收费管理:小轿车 5元/小时,面包车6元/小时,大货车或客车7元/小时,由停车时选择录入;

(4)汽车停泊信息管理:车牌号、停泊位置、停泊开始时间,车位已满给出提示;

(5)车辆停泊时间自动计算费用管理:取车后自动计算车辆停泊所需费用;

(6)查询车辆信息管理:车辆是否入库,车辆出库,删除车辆信息;

(7)车主方选择车位、入库、出库时间。

二、系统功能

247880554ca0427f85baca47cf82400f.png

(1)登录模块:用于管理员登录账号

(2)信息保存模块:用于保存已有的泊车信息

(3)入库模块:用于停车时录入汽车停泊信息,如车牌号、车辆类型、车主电话、停泊位置、停泊开始时间等,若车位已满给出提示

(4)删除模块:用于出库时删除车辆信息

(5)展示模块:用于为车主提供车位信息,选择车位

(6)查找模块:用于通过车牌号查找车辆信息

(7)计费模块:用于取车时根据车辆停泊时间自动计算费用,小轿车 5元/小时,面包车6元/小时,大货车或客车7元/小时,由停车时选择录入

(8)出库模块:用于车主出库

(9)状态模块:用于修改车位状态

三、函数声明

1、单链表部分

头文件SLT.h

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<locale.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<stdbool.h>
#include<assert.h>
#include"parking.h"typedef Info SLTDateType;typedef struct SListNode
{SLTDateType data;struct SListNode* next;
}SLTNode;//链表的头插和尾插
void SLTPushBack(SLTNode** pphead, SLTDateType x);void SLTPushFront(SLTNode** pphead, SLTDateType x);//链表的头删、尾删
void SLTPopBack(SLTNode** pphead);void SLTPopFront(SLTNode** pphead);//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x);
//在指定位置之后插入数据
void SLTInsertAfter(SLTNode** pphead, SLTNode* pos, SLTDateType x);//删除pos
void SLTErase(SLTNode** pphead, SLTNode* pos);
//删除pos之后的节点
void SLTEraseAfter(SLTNode** pphead, SLTNode* pos);//销毁链表
void SListDestroy(SLTNode** pphead);

2、泊车系统功能部分

头文件Parking.h

#pragma once
#define TEL_Max 20
#define ROW_MAX 10
#define COL_MAX 10
#define BLANK L'□'//代表空车位
#define CAR L'★'//代表有车
typedef enum
{min = 1,mid,big
}Type;//类型typedef enum
{no,//无车yes//有车
}state;//状态typedef struct manager
{char id[20];//账号char secret[20];//密码
}login;//管理员登录信息typedef struct ParkTime
{int h;int m;int s;
}time;//停车时间
typedef struct CarInfo
{Type carType;//车类型char licensePlateNum[10];//车牌号char tel[TEL_Max];//电话int siteX;//位置横int siteY;//位置纵time startTime[10];//开始停车时间time leaveTime[10];//离开时间int fee;}Info;//车辆信息struct SListNode;
typedef struct SListNode Parking;void SetPos(int x, int y);int Entry();//是否进入系统int Login();//登录void parking();//登陆后进行系统操作void LoadParking(Parking** pcar, int arr[ROW_MAX + 1][COL_MAX + 1],int* sitenum);//录入文件中现有信息void SaveParking(Parking* car);//保存信息到文件void AddParking(Parking** pcar, int* siteNum, int arr[ROW_MAX + 1][COL_MAX + 1]);//增加车辆信息void DelParking(Parking** pcar);//删除车辆信息Parking* FindByNum(Parking* pcar, char num[]);//通过车牌号来查找void FindParking(Parking** pcar);//先通过车牌号,再查找车辆void ShowParking(Parking** pcar);//展示车辆信息void CountFee(Parking** pcar);//计算停车费用,未满一小时按照一小时计算void createSite(int arr[ROW_MAX + 1][COL_MAX + 1]);//创造车位状态void PrintSite(int arr[ROW_MAX + 1][COL_MAX + 1]);//查看车位状态void SiteState(Parking** pcar, int arr[ROW_MAX + 1][COL_MAX + 1], int* siteNum);//找到离开的车辆确定离开时间并且修改车位状态,计算费用void ParkingDestroy(Parking** pcar);//销毁

四、函数实现

1、链表部分

源文件:STL.c

#include"SLT.h"SLTNode* SLTBuyNode(SLTDateType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next = NULL;return newnode;
}
void SLTPushBack(SLTNode** pphead, SLTDateType x)
{assert(pphead);//新节点申请SLTNode* newnode = SLTBuyNode(x);//链表为空,新节点作为pheadif (*pphead == NULL){*pphead = newnode;return;}//链表不为空,通过遍历找尾节点SLTNode* ptail = *pphead;while (ptail->next){ptail = ptail->next;}ptail->next = newnode;
}void SLTPushFront(SLTNode** pphead, SLTDateType x)
{assert(pphead);SLTNode* newnode = SLTBuyNode(x);newnode->next = *pphead;//插入的节点指向第一个节点*pphead = newnode;//再把newnode设为第一个节点
}void SLTPopBack(SLTNode** pphead)
{assert(pphead);//链表不能为空assert(*pphead);//链表不为空//链表只有一个节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;return;}//有多个节点SLTNode* ptail = *pphead;//遍历找尾节点SLTNode* prev = NULL;//前驱while (ptail->next){prev = ptail;ptail = ptail->next;}prev->next = NULL;free(ptail);ptail = NULL;
}void SLTPopFront(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* next = (*pphead)->next;//->的优先级高于*free(*pphead);*pphead = next;}
//找pos的前驱节点prev
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{assert(pphead);assert(pos);//要加上链表不为空,因为pos是链表里的有效节点,空的话就找不到pos的前驱节点assert(*pphead);//pos是头结点if (pos == *pphead){//头插SLTPushFront(pphead, x);return;}//pos不是头结点的情况SLTNode* newnode = SLTBuyNode(x);SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}//prev找到了prev->next = newnode;newnode->next = pos;
}//在指定位置之后插入数据
void SLTInsertAfter(SLTNode** pphead, SLTNode* pos, SLTDateType x)
{assert(pphead);assert(pos);assert(*pphead);SLTNode* newnode = SLTBuyNode(x);newnode->next = pos->next;pos->next = newnode;
}//删除pos,找到前驱prev
void SLTErase(SLTNode** pphead, SLTNode* pos)
{assert(pphead);assert(pos);assert(*pphead);//pos是头结点if (pos == *pphead){SLTPopFront(pphead);return;}//不是头结点SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}//找到prevprev->next = pos->next;free(pos);pos = NULL;
}
//删除pos之后的节点
void SLTEraseAfter(SLTNode** pphead, SLTNode* pos)
{assert(pphead);assert(pos);assert(pos->next);SLTNode* del = pos->next;//不能直接释放pos->nextpos->next = pos->next->next;free(del);del = NULL;
}void SListDestroy(SLTNode** pphead)
{assert(pphead);assert(*pphead);//每个节点独立存在,应循环销毁SLTNode* pcur = *pphead;while (pcur){SLTNode* next = pcur->next;free(pcur);pcur = next;}*pphead = NULL;
}

2、泊车系统部分

源文件Parking.c

#include"SLT.h"void SetPos(int x, int y)
{//获得设备句柄HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//根据句柄设置光标的位置COORD pos = { x,y };//表示控制台坐标SetConsoleCursorPosition(handle, pos);
}int Login()
{int ret = -1;login manager = { "1","1" };//账号密码由自己设定char id[20] = { 0 };char secret[20] = { 0 };int chance = 5;SetPos(40, 13);printf("您有五次登陆机会");SetPos(42, 20);system("pause");system("cls");while (chance > 0) {SetPos(40, 13);printf("请输入账号:");scanf("%s", id);SetPos(40, 15);printf("请输入密码:");scanf(" %s", secret);SetPos(42, 20);system("cls");if (strcmp(manager.id, id)==0 && strcmp(manager.secret, secret)==0){SetPos(40, 13);printf("登陆成功\n");ret = 1;system("pause");system("cls");break;}else {if (chance > 1){SetPos(40, 13);printf("登陆失败,您还剩%d次机会,请重新输入:",chance-1);SetPos(42, 20);system("pause");system("cls");}else{SetPos(40, 13);printf("登陆失败\n");SetPos(42, 20);system("pause");system("cls");ret = -1;break;}chance--;}}return ret;
}
int Entry()
{SetPos(40, 13);printf("欢迎进入泊车系统\n");SetPos(42, 20);system("pause");system("cls");int op = -1;SetPos(40, 15);printf("请选择:1.登录系统\n");SetPos(40, 16);printf("0.退出系统\n");SetPos(40, 17);printf("请选择:");scanf("%d", &op);system("cls");int ret = 0;do {switch (op){case 1://登录ret = Login();break;case 0://退出SetPos(40, 13);printf("退出系统\n");ret = -1;break;default:printf("选择错误,请重新选择:\n");break;}if (ret == 1||ret == -1){break;}} while (op);return ret;
}void menu()
{SetPos(40, 12);printf("1.下载之前的信息");SetPos(40, 13);printf("2.车辆入库");SetPos(40, 14);printf("3.删除车辆信息");SetPos(40, 15);printf("4.根据车牌号查找车辆");SetPos(40, 16);printf("5.展示车辆信息");SetPos(40, 17);printf("6.查看车位状态");SetPos(40, 18);printf("7.车辆出库");SetPos(40, 19);printf("8.保存当前信息");
SetPos(40, 20);
printf("9.查看剩余车位");
SetPos(40, 21);printf("0.退出系统");
}
void parking()
{int op = -1;Parking* car = NULL;//int sitenum = ROW_MAX * COL_MAX;int arr[ROW_MAX + 1][COL_MAX + 1] = { 0 };createSite(arr);//创造车位do{menu();SetPos(40, 22);printf("请选择:");scanf(" %d", &op);system("cls");switch (op){case 1:LoadParking(&car,arr,&sitenum);system("pause");system("cls");break;case 2:AddParking(&car, &sitenum, arr);system("pause");system("cls");break;case 3:DelParking(&car);system("pause");system("cls");break;case 4:FindParking(&car);system("pause");system("cls");break;case 5:ShowParking(&car);system("pause");system("cls");break;case 6:PrintSite(arr);system("pause");system("cls");break;case 7:SiteState(&car,arr, &sitenum);system("pause");system("cls");break;case 8:SaveParking(car);system("pause");system("cls");break;case 9:printf("剩余车位:%d\n", sitenum);system("pause");system("cls");break;case 0:SetPos(40, 12);printf("退出系统");SetPos(40, 20);break;default:SetPos(40, 15);printf("输入错误,请重新选择\n");system("pause");system("cls");break;}} while (op);ParkingDestroy(&car);
}void AddParking(Parking** pcar, int* siteNum, int arr[ROW_MAX + 1][COL_MAX + 1])
{//判断车位是否已满if (*siteNum == 0){printf("车位已满,无法进入停车\n");return;}else{Info car = { 0 };printf("请选择车的类型(1.小轿车 2.面包车 3.大货车或客车):\n");//选车的位置scanf("%d", &car.carType);printf("请输入车牌号:\n");scanf("%s", car.licensePlateNum);printf("请输入电话号码:\n");scanf("%s", car.tel);system("cls");PrintSite(arr);printf("请选择停车的位置(坐标行列(x,y)):\n");scanf("%d%d", &car.siteX, &car.siteY);while (car.siteX > ROW_MAX || car.siteY > COL_MAX){printf("没有此车位,选择错误,请重新选择:");scanf("%d%d",&car.siteX,&car.siteY);}while (arr[car.siteX][car.siteY] == yes){printf("车位已有车主,无法进入,请重新选择:");scanf("%d%d",&car.siteX,&car.siteY);}arr[car.siteX][car.siteY] = yes;printf("请输入停车时间(时,分,秒):\n");scanf("%d%d%d", &car.startTime->h, &car.startTime->m, &car.startTime->s);SLTPushBack(pcar, car);printf("停车入库成功!");(*siteNum)--;}
}Parking* FindByNum(Parking* pcar, char num[])
{Parking* cur = pcar;while (cur){if (strcmp(cur->data.licensePlateNum ,num)==0){return cur;}cur = cur->next;}return NULL;
}void DelParking(Parking** pcar)
{printf("请输入要删除的车牌号:\n");char num[20];scanf("%s", num);Parking* pos = FindByNum(*pcar, num);if (pos == NULL) {printf("要删除的车的信息不存在,删除失败!\n");return;}if (pos->data.fee == 0) {printf("要删除的车辆未离开不允许删除!");return;}SLTErase(pcar, pos);printf("删除成功!\n");
}void SiteState(Parking** pcar, int arr[ROW_MAX + 1][COL_MAX + 1], int* siteNum)
{printf("请选择要离开的车的车牌号:");char num[20];scanf("%s", num);Parking* pos = FindByNum(*pcar, num);if (pos == NULL){printf("要出库的车辆不存在,选择失败!\n");return;}while (pos->data.fee != 0)
{
//车辆已经离开pos = pos->next;pos = FindByNum(pos, num);if (pos == NULL){printf("要出库的车辆已经离开,选择失败!\n");return;}	
} printf("请输入离开的时间:");scanf("%d%d%d", &pos->data.leaveTime->h,&pos->data.leaveTime->m, &pos->data.leaveTime->s);arr[pos->data.siteX][pos->data.siteY] = no;printf("车辆已离开,车位状态修改成功\n");//自动计算费用CountFee(&pos);(*siteNum)++;
}
void FindParking(Parking** pcar)//通过车牌号查找
{char num[20];printf("请输入要查找车牌号:\n");scanf("%s", num);Parking* pos = FindByNum(*pcar, num);if (pos == NULL){printf("要查找的用户不存在,查找失败!\n");return;}printf("查找成功!\n");printf("%-4s     %-10s       %-10s          %-8s      %-13s    %-10s   %-8s\n", "类型", "车牌号", "电话", "位置", "停车时间", "离开时间", "费用");printf("%-4d     %-10s        %-10s         (%d,%d)         %d时%d分%d秒        %d时%d分%d秒    %d元\n",pos->data.carType,pos->data.licensePlateNum,pos->data.tel,pos->data.siteX,pos->data.siteY,pos->data.startTime->h,pos->data.startTime->m,pos->data.startTime->s,pos->data.leaveTime->h,pos->data.leaveTime->m,pos->data.leaveTime->s,pos->data.fee);
}void ShowParking(Parking** pcar)
{printf("%-4s     %-10s       %-10s          %-8s      %-13s    %-10s   %-8s\n", "类型", "车牌号", "电话", "位置", "停车时间","离开时间","费用");Parking* pos = *pcar;while (pos){printf("%-4d     %-10s        %-10s         (%d,%d)         %d时%d分%d秒        %d时%d分%d秒    %d元\n",pos->data.carType,pos->data.licensePlateNum,pos->data.tel,pos->data.siteX,pos->data.siteY,pos->data.startTime->h,pos->data.startTime->m,pos->data.startTime->s,pos->data.leaveTime->h,pos->data.leaveTime->m,pos->data.leaveTime->s,pos->data.fee);pos = pos->next;}
}int Fee(int h1, int m1, int s1, int h2, int m2, int s2)
{float timeS = (h1 - h2) * 3600 + (m1 - m2) * 60 + s1 - s2;float timeH = timeS / 3600.0;if (timeH == (int)timeH){return (int)timeH;}else{return (int)timeH + 1;}
}
void CountFee(Parking** pcar)
{switch ((*pcar)->data.carType){case min://五元每小时(*pcar)->data.fee = 5 * Fee((*pcar)->data.leaveTime->h, (*pcar)->data.leaveTime->m, (*pcar)->data.leaveTime->s,(*pcar)->data.startTime->h, (*pcar)->data.startTime->m, (*pcar)->data.startTime->s);break;case mid://六元每小时(*pcar)->data.fee = 6 * Fee((*pcar)->data.leaveTime->h, (*pcar)->data.leaveTime->m, (*pcar)->data.leaveTime->s,(*pcar)->data.startTime->h, (*pcar)->data.startTime->m, (*pcar)->data.startTime->s);break;case big://七元每小时(*pcar)->data.fee = 7 * Fee((*pcar)->data.leaveTime->h, (*pcar)->data.leaveTime->m, (*pcar)->data.leaveTime->s,(*pcar)->data.startTime->h, (*pcar)->data.startTime->m, (*pcar)->data.startTime->s);break;}
}LoadParking(Parking** pcar, int arr[ROW_MAX + 1][COL_MAX + 1],int* sitenum)
{FILE* pf = fopen("C:/Users/16637/Desktop/Parking/Parking/Parking.txt", "rb");if (pf == NULL) {perror("fopen error!\n");return;}//循环读取⽂件数据 Info info;while (fread(&info, sizeof(info), 1, pf)){SLTPushBack(pcar, info);}printf("历史数据导入成功!\n");Parking* cur = *pcar;while (cur){arr[cur->data.siteX][cur->data.siteY] = yes;(*sitenum)--;cur = cur->next;}
}void SaveParking(Parking* car)
{FILE* pf = fopen("C:/Users/16637/Desktop/Parking/Parking/Parking.txt", "wb+,ccs = UTF-8");if (pf == NULL) {perror("fopen error!\n");return;}//将通讯录数据写入文件 Parking* cur = car;while (cur){fwrite(&(cur->data), sizeof(cur->data), 1, pf);cur = cur->next;}printf("通讯录数据保存成功!\n");
}void createSite(int arr[ROW_MAX + 1][COL_MAX + 1])
{int i = 0;int j = 0;//打印横坐标for (i = 0; i <= ROW_MAX; i++){for (j = 0; j <= COL_MAX; j++){arr[i][j] = no;}}
}void PrintSite(int arr[ROW_MAX + 1][COL_MAX + 1])
{int i = 0;int j = 0;//打印横坐标for (i = 0; i <= ROW_MAX; i++){printf("%d ", i);}printf("\n");for (i = 1; i <= COL_MAX; i++){printf("%d ", i);for (j = 2; j <= COL_MAX * 2; j += 2){if(arr[i][j/2]==no){SetPos(j, i);wprintf(L"%lc", BLANK);}else{SetPos(j, i);wprintf(L"%lc", CAR);}}printf("\n");}printf("\n");
}void ParkingDestroy(Parking** pcar)
{SListDestroy(pcar);
}

五、主函数

源文件 ParkingTest.c

#include"SLT.h"int main()
{setlocale(LC_ALL, "");system("mode con cols=100 lines=30");system("title 泊车系统");//登录系统int entry = Entry();if (entry == 1){//进入系统parking();}else {//退出系统;}return 0;
}

六、操作提示

需要在控制台属性将终端修改为Windows控制台主机

d9ed72de7aef4ff1acb0d9a31bb5db2c.png

显示结果

028ca988a72d4948a8206753e4b80d74.png

运行成功后就能按照提示进行接下来的操作了

登录账号1

密码1

a4950782456c481e8f8799f0e3b8f74e.png

2ed96a22090c43cd87a8d9b990a717d1.png

选择界面

b0064d03d7a748afa32fe7c003e5efd5.png

下载信息的文件路径由自己设定

车位样子如下:(星代表有车)

c1fae12e0a8b4fafa85f026651471da8.png

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT提示技巧——零,一和少量示例提示

ChatGPT提示技巧——零&#xff0c;一和少量示例提示 ​ 零样本(zero-shot)、少样本(few-shot)和单样本(one-shot)提示是用于在最少或没有示例的情况下从ChatGPT生成文本的技巧。这些技巧用于当某个具体任务有限定数据的时候或者任务是新的并且没有很好的定义的时候。 提示格…

设计模式之——简单工厂模式

上图为简单工厂模式的架构图。 1&#xff0c;产品&#xff08;Product&#xff09; 将会对接口进行声明。 2&#xff0c;具体产品&#xff08;Concrete Products&#xff09;是产品接口的不同实现。 3&#xff0c;创建者&#xff08;Concrete Creators&#xff09;将会重写基…

TCP传输收发

TCP通信: TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t ad…

20个Python函数程序实例

前面介绍的函数太简单了&#xff1a; 以下是 20 个不同的 Python 函数实例 下面深入一点点&#xff1a; 以下是20个稍微深入一点的&#xff0c;使用Python语言定义并调用函数的示例程序&#xff1a; 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

css-vxe-form-item中输入框加自定义按钮(校验位置错误)

1.浮动错误效果 提示内容不对 2.不使用浮动&#xff0c;使用行内块元素 代码如下 <vxe-form-item title"yoyo:" field"assembleWorkNo" span"8"><template #default><vxe-input style"width:70%;display:inline-block;&quo…

全天候购药系统(微信小程序+web后台管理)

PurchaseApplet 全天候购药系统&#xff08;微信小程序web后台管理&#xff09; 传统线下购药方式存在无法全天候向用户提供购药服务&#xff0c;无法随时提供诊疗服务等问题。为此&#xff0c;运用软件工程开发规范&#xff0c;充分调研建立需求模型&#xff0c;编写开发文档…

Java输入和输出处理

一、Java I/O 文件、内存、键盘--->程序--->文件、内存、控制台 二、文件 相关记录或放在一起的数据的集合 思考&#xff1a; Java程序如何访问文件属性&#xff1f; 解答&#xff1a; Java API:java.io.File类 三、File类 File类的常用方法 方法名称说明boole…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

黑马点评-分布式锁业务

分布式锁原理和实现 分布式系统部署了多个tomcat&#xff0c;每个tomcat都有一个属于自己的jvm&#xff0c;那么假设在服务器A的tomcat内部&#xff0c;有两个线程&#xff0c;这两个线程由于使用的是同一份代码&#xff0c;那么他们的锁对象是同一个&#xff0c;是可以实现互…

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…

142.环形链表II

142.环形链表II 力扣题目链接(opens new window) 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0…

Linux性能分析之CPU实战

本课程专注于教授学员如何利用各种工具和技术来分析Linux系统中的CPU性能问题。通过实际操作和案例研究&#xff0c;学员将深入了解CPU性能优化和故障排除&#xff0c;提升其在Linux环境下的技能水平。 课程大小&#xff1a;1.9G 课程下载&#xff1a;https://download.csdn.…

例行性工作(at,crontab)

目录 单一执行的例行性工作at 语法 选项 时间格式 at的工作文件存放目录 at工作的日志文件 实例 命令总结&#xff1a; 循环执行的例行性工作crond 语法 选项 crontab工作调度对应的系统服务 crontab工作的日志文件 用户定义计划任务的文件所在目录 动态查看 crontab文件格式 文…

尤雨溪:Vue 未来展望新的一轮

十年&#xff0c;一个既漫长又短暂的时光跨度&#xff0c;对于技术世界来说&#xff0c;更是沧海桑田的瞬间。在这十年里&#xff0c;Vue.js 从无到有&#xff0c;从默默无闻到蜚声全球&#xff0c;不仅改变了前端开发的面貌&#xff0c;更成为了无数开发者手中的得力工具。 在…

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块,其中YOLOv9针对于这个模块并没有介绍,只是在其项目文件中用到了,我将其整理出来用于我们的RT-DETR的项目,经过实验我发现该卷积模块(作为下采样模块)…

多路归并总结

1.鱼塘钓鱼 1262. 鱼塘钓鱼 - AcWing题库 多路归并的模型。 对于每个鱼塘构成的等差数列&#xff0c;我们每次在数列最头部进行选择&#xff0c;选完后再顺延到下一个数即可。我们可以通过维护一个包含所有等差序列首元素的大根堆&#xff0c;使每次可以很容易地选出最大的数…

Vivado使用记录(未完待续)

一、Zynq开发流程 二、软件安装 三、软件使用 字体大小修改&#xff1a;Setting、Font 四、Vivado基本开发流程 1、创建工程 Quick Start 组包含有 Create Project&#xff08;创建工程&#xff09;、 Open Project&#xff08;打开工程&#xff09;、 Open Example Project&…

List之ArrayList、LinkedList深入分析

集合 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#xff0c;下面又有三个主要的子接口&…

洗衣洗鞋店小程序对接水洗唛打印,一键预约,支付无忧

随着社会的进步和科技的发展&#xff0c;我们的生活幸福感与日俱增。为了让我们从琐碎中解脱出来&#xff0c;干洗店洗鞋店行业也日新月异。今天&#xff0c;我为大家推荐这款优秀的干洗店小程序系统&#xff0c;让您的洗衣洗鞋服务体验更上一层楼。 干洗店管理系统是一款专为洗…

阿里云和腾讯云区别价格表,云服务器费用对比2024年最新

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…