详细代码讨论加我QQ:1271370903

程序设计课程实践

基于C语言的停车管理系统编程设计
1.课程目的
本程序旨在训练学生的C语言基本编程能力,通过串联C语言输入输出、循环语句、子函数设计、数组、结构体等知识点,完成一个简单系统的设计开发。

2.系统功能
(1)通过菜单的形式实现人机交互界面
(2)实现便道上停车信息显示
(3)实现录入进入停车场的车辆信息
(4)实现删除离去停车场的车辆信息
(5)实现查询指定汽车功能
(6)实现对车辆的停车时间计费功能
3.设计思想
(1)人机交互界面
设有一个可以停放n(n>=5)辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在他之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆在依原来的次序进场。每辆车在离开停车场时,都应依据它在停车场内停留的时间长短交费。如果停留在便道上的车 未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制模拟该停车场的管理的程序。
人机交互界面可以自己设计,可以加上开发者信息,体现每个学生的差异。


(2)停车信息显示
设首先定义结构体要包含车辆的这些信息:车牌、进入(离开)的状态、进入(离开)的时间,为了清晰地表示汽车的位置,结构体中还应该设置有表示位置信息的变量。
输入1后可查看当前停靠的车辆信息,输入2后可查看便道上的停车信息。


3)录入进入停车场的车辆信息
实现顺序栈和链队的数据结构,分析程序的结构。有车入场,停车场数据加一,若车辆已满,将车辆信息存入便道,输入3后可输入车辆信息。

(4)删除离去停车场的车辆信息
停车场车辆出场,将便道第一辆加进停车场,修改位置信息。输入4后可删除车辆信息。

5)实现查询指定汽车功能

根据输入需要查找车辆的车牌号,遍历当前结构体数组,判断是否含有一致车牌,若有则显示输出相应的车辆,否则不显示车辆,输入5后可查询指定汽车。

(6)实现对车辆的停车时间计费功能
停车场内的车辆离开停车场时需要根据停放时间进行计费,则需要调用<time.h>库的函数,保存车辆的进出时间,并且设立一个容易更改的停车单价,用宏定义Price,方便在头部修改。

部分详细代码

// 汽车信息的结构体
typedef struct{int TimeIn;                  // 进入停车场时间int TimeOut;              // 离开停车场时间char ct[50];char Lincense[10];            // 字符类型 车牌号
}Car;
// 停放车辆的栈
typedef struct{Car Stop[MAX_STOP];          // 用来停放车辆的栈int top;                 // 标记栈顶位置
}Stopping;
// 等候队列
typedef struct{Car Pave[MAX_PAVE];          // 便道上的队列 int count;                    // 标记队列等候车辆个数 int front, rear;          // 标记队头和队尾
}Pavement;
// 用来让路的栈
typedef struct{Car Let[MAX_STOP];           // 用来让路的栈 int top;                  // 标记栈顶位置
}Buffer;
// 用来让路的队列
typedef struct{                 Car Wait[MAX_PAVE];         // 临时便道的队列int count;                    // 标记队列等候车辆个数 int front, rear;          // 标记队头和队尾
}Waiting;
// 声明每个全局变量/结构体
Stopping s;
Pavement p;
Buffer   b;
Car      c;
Waiting  w;
char     C[10];void Car_Come();             // 车辆进入函数
void Car_Leave();               // 车辆离开函数
void Stop_To_Pave();            // 当停车场满时车辆驶入便道
void Stop_To_Buff();            // 有车辆驶出时车辆暂时驶入缓冲栈
void Leave_Pavement();          // 车辆离开便道(说明要出停车场的汽车在便道上)
void DisPlay();                 // 展示停车场内的车辆位序
void DisPlayPave();             // 展示便道上的车辆位序
void Welcome();                 // 显示菜单
void SmallWelcome();
void Car_Leave_menu();
void Search();// 车辆进入函数
void Car_Come(){                         printf("请输入即将停车的车牌号:");scanf("%s", &C);         // 先分别在栈和队列中检测是否已经停入int i = s.top;while(i != -1){if(0 == strcmp(s.Stop[i].Lincense, C)){printf("输入有误,此汽车已存在!\n");return;}i--;}int k = MAX_PAVE;while(k != 0){if(0 == strcmp(p.Pave[k].Lincense, C)){printf("输入有误,此汽车已存在!\n");return;}k--;}if (s.top >= MAX_STOP - 1){Stop_To_Pave();                    // 当停车栈已满,停入便道函数 }else{time_t t1;long int t = time(&t1);            // 记录停入时间char* t2;                      // 将当前时间转换程字符串 t2 = ctime(&t1); s.Stop[++s.top].TimeIn = t;strcpy(s.Stop[s.top].ct, t2);strcpy(s.Stop[s.top].Lincense, C);      // 登记车牌号 printf("牌照为%s的汽车停入停车位的%d车位,当前时间:%s\n", C, s.top+1, t2);}
}// 停车场查找汽车
void Search(){printf("请输入要搜索的车牌号:\n");scanf("%s", &C);int i, j, k, flag = 0;         // flag用来标记车辆位置,如果在停车场内会置为1 time_t t1;long int t = time(&t1);if(s.top >= 0){for(i = s.top; i >= 0; i--){if(0 == strcmp(s.Stop[i].Lincense, C)){printf("此汽车在停车场内,信息如下:\n");printf("\t车牌号\t\t停车位序\t当前所需支付金额\t进入时间\t\n");printf("\t%s\t第%d个\t\t%0.f元\t\t\t%s", s.Stop[i].Lincense, i+1, Price * (t - s.Stop[i].TimeIn), s.Stop[i].ct);flag = 1;break;} }}if(flag == 0 && p.count > 0){       i = p.front, k = 1, j = p.rear;         while(i != j ){if(0 == strcmp(p.Pave[i].Lincense, C)){printf("此汽车在停便道上\n");printf("\t车牌号\t\t停车位序\n");printf("\t%s\t第%d个",p.Pave[i].Lincense, k);flag = 2;break;}i++;k++;} }if(0 == flag)printf("停车场内外不存在该汽车信息!\n");}// 车辆离开函数
void Car_Leave(){                           // 还需要加上检测车辆是否在队列中 printf("请输入即将离开的车牌号:");scanf("%s", &C);int i, j, flag = 1, flag2 = 1;if(s.top >= 0){                            // 在停车场栈内寻找该车牌, for(i = s.top; i >=0; i-- ){            // 存在则flag会变为0 flag = flag * strcmp(s.Stop[i].Lincense, C);i--;}}if(0 == flag){                                  // 当flag == 0 汽车必在停车场栈内 Stop_To_Buff();                               // 调用缓冲栈函数 }    if(flag !=0 /*&& flag2 != 0*/)                        // 此情况说明汽车一定不在停车场内外 printf("停车场内没有该汽车的信息!\n");
}// 车辆离开便道(说明要出停车场的汽车在便道上)
void Leave_Pavement(){int i, j, flag = 0;printf("请输入即将离开的车牌号:");scanf("%s", &C);if(p.count  <= 0){printf("便道上不存在汽车!\n");return;}while(p.count > 0){                            // 找到该车位置时退出while循环 i = p.front; if(0 == strcmp(p.Pave[i].Lincense, C)){break;   }printf("牌照为%s的汽车暂时从便道进入临时便道\n", p.Pave[p.front].Lincense);strcpy(w.Wait[w.rear].Lincense, p.Pave[p.front].Lincense);p.front = (p.front + 1) % MAX_PAVE;        // 出p队:队头指针的移动 w.rear = (w.rear + 1) % MAX_PAVE;       // 入w队:队尾指针的移动 w.count++;                              // w.count + 1 p.count--;                              // p.count - 1 }printf("\n牌照为%s的汽车从便道上开走,不收取任何费用!\n\n", p.Pave[i].Lincense); // 让该车辆驶出 p.front = (p.front + 1) % MAX_PAVE;p.count--;while(p.count > 0){                        // 让其后的车辆继续驶入临时便道 printf("牌照为%s的汽车暂时从便道进入临时便道\n", p.Pave[p.front].Lincense);strcpy(w.Wait[w.rear].Lincense, p.Pave[p.front].Lincense);p.front = (p.front + 1) % MAX_PAVE;w.rear = (w.rear + 1) % MAX_PAVE;w.count++;p.count--;}while(w.count > 0){                       // 将临时便道的车辆全部驶回便道中 printf("\n牌照为%s的汽车返回便道\n",w.Wait[w.front].Lincense);strcpy(p.Pave[p.rear].Lincense, w.Wait[w.front].Lincense);w.front = (w.front + 1) % MAX_PAVE;     p.rear = (p.rear + 1) % MAX_PAVE;w.count--;p.count++;}
}// 车辆暂时驶入缓冲栈
void Stop_To_Buff(){while (s.top >= 0){                         // 当该车为栈顶时退出while循环 if(0 == strcmp(s.Stop[s.top].Lincense, C)){break;}strcpy(b.Let[b.top++].Lincense, s.Stop[s.top].Lincense);printf("牌照为%s的汽车暂时退出停车场\n", s.Stop[s.top--].Lincense);}printf("牌照为%s的汽车从停车场开走\n", s.Stop[s.top].Lincense);    // 驶出该车并收费 time_t t1;long int t = time(&t1);s.Stop[s.top].TimeOut = t;char* t2;t2 = ctime(&t1);printf("离开时间%s\n需付费%.0f元\n", t2, Price * (s.Stop[s.top].TimeOut - s.Stop[s.top].TimeIn));s.top--;while(b.top > 0){strcpy(s.Stop[++s.top].Lincense, b.Let[--b.top].Lincense);printf("牌照为%s的汽车停回停车位%d车位\n", b.Let[b.top].Lincense, s.top+1);}while(s.top < MAX_STOP-1){if(0 == p.count)break;else{strcpy(s.Stop[++s.top].Lincense, p.Pave[p.front].Lincense);printf("牌照为%s的汽车从便道中进入停车位的%d车位\n", p.Pave[p.front].Lincense, s.top+1);time_t t1;long int t = time(&t1);char* t2;s.Stop[s.top].TimeIn = t;p.front = (p.front + 1) % MAX_PAVE;p.count--;}}
}
// 当停车场满时车辆驶入便道
void Stop_To_Pave(){if(p.count > 0 && (p.front == (p.rear + 1) % MAX_PAVE))printf("便道已满,请下次再来!\n");else{strcpy(p.Pave[p.rear].Lincense, C);p.rear = (p.rear + 1) % MAX_PAVE;p.count++;printf("牌照为%s的汽车停入便道上\n", C);}
}// 展示停车场内的车辆位序
void DisPlay(){int i = s.top;if(-1 == i)printf("停车场目前为空\n");time_t t1;long int t = time(&t1);printf("\t车牌号\t\t停放时间\t当前所需支付金额\t停放位序\n");while(i != -1){printf("\t%s\t%d分%d秒\t\t%.0f元\t\t\t第%d个\n", s.Stop[i].Lincense, (t - s.Stop[i].TimeIn)/60,(t - s.Stop[i].TimeIn) % 60, Price * (t - s.Stop[i].TimeIn), i+1);i--;}
}// 展示便道上的车辆位序
void DisPlayPave(){int i = p.front;int k = 1;                     // 用k模拟便道上汽车的位序  /***********/ if(0 == p.count)                   // 0 == p.count printf("便道目前为空\n");printf("\t车牌号\t\t停放位序\n");while(i != p.rear && k <= p.count){  printf("\t%s\t第%d个\n", p.Pave[i].Lincense, k++);i = (i + 1) % MAX_PAVE;}
}// 4.汽车离去子菜单
void Car_Leave_menu(){while(1){system("cls");                     // 清屏 SmallWelcome();                           // 重新显示界面 int i, cho;scanf("%d", &i);if(1 == i)  Car_Leave();if(2 == i)  Leave_Pavement();if(3 == i)  return;printf("\n返回请输入0\n");top:                                // goto 标志位 scanf("%d", &cho);if(0 == cho){continue;}else{printf("您的输入有误,请重新输入\n");goto top;                       // goto 到指定标志位 top}}
}
// 子菜单的welcome
void SmallWelcome(){printf ("\t*******************目前停车场状况***********************\n");printf ("\t停车场共有%d个车位,当前停车场共有%d辆车,等候区共有%d/%d辆车\n",  MAX_STOP, s.top+1, (p.rear + MAX_PAVE - p.front) % MAX_PAVE, MAX_PAVE-1);printf ("\t********************************************************\n");printf ("\t---------Welcome to Ep's Car Parking next time----------\n");printf ("\t*                                                      *\n");printf ("\t*                   1.从停车场内驶出汽车               *\n");printf ("\t*                   2.从便道上驶出汽车                 *\n");printf ("\t*                   3.退出子管理系统                   *\n");printf ("\t*请注意:从停车场内驶离的汽车按照%.0f元/分钟计费          *\n",60*Price);printf ("\t*望周知:从便道上驶离的汽车不收取费用                  *\n");printf ("\t*                                                      *\n");printf ("\t*------------------------------------------------------*\n");printf ("\t--------Press key(1/2/3) to continue the program--------\n");
}
void HideCursor(){CONSOLE_CURSOR_INFO cursor_info = {1, 0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
// 显示菜单
void Welcome(){time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );printf ("\t\t\t%s", asctime(timeinfo) );HideCursor();printf ("\t*******************目前停车场状况***********************\n");printf ("\t停车场共有%d个车位,当前停车场共有%d辆车,等候区共有%d/%d辆车\n",  MAX_STOP, s.top+1, (p.rear + MAX_PAVE - p.front) % MAX_PAVE, MAX_PAVE-1);printf ("\t********************************************************\n");printf ("\t--------------Welcome to Ep's Car Parking---------------\n");printf ("\t*                                                      *\n");printf ("\t*                   1.停车场停车信息显示               *\n");printf ("\t*                   2.便道上停车信息显示               *\n");printf ("\t*                   3.汽车到达停车场操作               *\n");printf ("\t*                   4.汽车离去停车场操作               *\n");printf ("\t*                   5.查找汽车功能                     *\n");printf ("\t*                   6.退出管理系统                     *\n");printf ("\t*收费标准:本停车场按照%.0f元/分钟计费,望周知            *\n",60*Price);printf ("\t*                                                      *\n");printf ("\t*------------------------------------------------------*\n");printf ("\t---------Press key(1/2/3/4/5/6) to run program----------\n");}int main(){s.top = -1;b.top = 0;p.rear = 0;p.count = 0;p.front = 0;w.count = 0;w.front = 0;w.rear = 0;while(1){system("color 0B");system("cls");                       // 清屏 Welcome();                            // 重新显示界面 int i, cho;scanf("%d", &i);if(1 == i)  DisPlay();if(2 == i)  DisPlayPave();if(3 == i)  Car_Come();if(4 == i)  Car_Leave_menu();         //汽车离去:停车场内和便道上 if(5 == i)  Search();if(6 == i)  {printf("\n欢迎您再次使用本系统呦 ε=ε=ε=(~ ̄▽ ̄)~\n\n");break;} printf("\n返回请输入0\n");begin:                             // goto 标志位 scanf("%d", &cho);if(0 == cho){continue;}else{printf("您的输入有误,请重新输入\n");goto begin;                     // goto 到指定标志位 begin}}return 0;
}

基于C/C++语言的停车场管理系统编程课程设计超详细相关推荐

  1. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  2. C语言学生成绩管理系统(课程设计报告书)

    今天再跟大家分享一份课程设计报告:C语言学生成绩管理系统源码 程序设计组成框图: #include<stdio.h> #include<conio.h> #include< ...

  3. C语言连接MySQL数据库编程教程:超详细

    ** C语言连接MySQL数据库编程教程 ** 一.下载安装mysql.h库文件 我们使用的编译器一般为VC6.0或者VS,默认的都是32位编译器,所以我们下载的库文件也直接下载32位的就可以.下面附 ...

  4. c语言二叉树族谱管理系统,数据结构课程设计报告(用二叉树实现家谱管理系统).doc...

    数据结构课程设计 题目:用二叉树实现家谱管理系统 姓名:郭志超 学号:031010151554042 完成日期:2005.7.3 一.需求分析 ??建立输入文件以存放最初家谱中各成员的信息. ??成员 ...

  5. 基于C语言的停车场管理系统编程(二)简单版

    一.系统功能 (1)通过菜单的形式实现人机交互界面 (2)实现便道上停车信息显示 (3)实现录入进入停车场的车辆车牌号 二.设计思想 1.人机交互界面 2.录入进入车牌信息 3.显示已停停车场情况 下 ...

  6. 基于C/C++语言员工工资管理系统编程设计

    详细代码讨论加我QQ:1271370903 1.课程目的 本程序旨在训练学生的C语言基本编程能力,通过串联C语言输入输出.循环语句.子函数设计.数组.结构体等知识点,完成一个简单系统的设计开发. 2. ...

  7. 基于asp.net汽修系统仓库管理系统#毕业设计#课程设计

    汽修仓库管理系统的设计与实现-编号:0821 汽修仓库管理系统是一个典型的后台管理系统,本系统采用ASP.NET技术和SQL数据库进行开发,系统分为管理员和员工两部分,主要实现了用户登录,商品类型管理 ...

  8. python迷你停车场管理系统_基于微信小程序的停车场管理系统

    本科学生毕业设计(论文)选题审批表 学院:计算机工程学院 专业:信息管理与信息系统 课题名称 基于微信小程序的停车场管理系统的设计与实现 课题来源 √社会实践 科研课题 自选课题 课题类别 □设计 □ ...

  9. 基于Java+Swing+Mysql实现停车场管理系统

    基于Java+Swing+Mysql实现停车场管理系统 一.系统介绍 二.系统展示 三.其它系统 四.获取源码 一.系统介绍 1.系统功能 用户 1.登录系统 2.信息查询 包含计费标准,当前在场信息 ...

最新文章

  1. 网络系统结构和设计的基本规则(Basic rules for network system architecture and design)
  2. centos nginx不是命令_Nginx 在CentOS 6/7 上的安装与使用
  3. MySQL-查询结果缓存
  4. 报错笔记:linux 命令行中的print输出内容无法重定向到文件中
  5. 2020年推荐系统工程师炼丹手册RecSys-Long Paper版
  6. KernelPCA进行非线性数据的映射和分类
  7. Spring Data JPA: 实现自定义Repository
  8. 201671010128 2017-09-24《Java程序设计》之继承
  9. Python--上下文管理器学习(11.3)
  10. haproxy基于cookie实现会话绑定
  11. 网络运维常见交换机故障
  12. PostgreSQL如何导入SJIS字符集的文件
  13. android客户端与pc服务器实现socket通信(wifi),Android客户端与PC服务器实现Socket通信(wifi)...
  14. 性能测试实战(七):数据驱动
  15. 无盘服务器 显卡,我也来说说网吧配机器该用什么显卡
  16. Python数据分析入门(一)——初探数据可视化
  17. tiktok框架_大动作!海外版抖音TikTok架构将调整,字节跳动开始发力
  18. 高等流体力学复习04
  19. opencv2413 gpu mog2_gpu CascadeClassifier_GPU
  20. java文本区背景颜色_Java如何设置PDF文档背景色详解|chu

热门文章

  1. 虚拟机挂载优盘和识别优盘
  2. 2021最新分享阿里P6面经及心得
  3. 手机上可以拍一寸证件照吗
  4. html+视频添加字幕,给视频加滚动字幕,给视频加字幕制作mv 录制的视频配背景音乐...
  5. 成为一棵大树必备的6个条件
  6. 如何用c写井字棋矩阵游戏(Tic-Tac-Toe)
  7. 美团饿了么外卖cps项目怎么做?谈谈我的推广方法与经验感悟
  8. 入坑MATLAB必会的吐血总结
  9. zk-snark的算法详解
  10. CLion的Toolchains are not configured和no CMAKE profiles问题