简单停车位管理系统(C语言版)
简单功能介绍
- 录入车辆信息
- 查找车辆信息
- 删除车辆信息
- 修改车辆信息
- 查找区域车辆信息
- 排序(按照车主姓名排序)
- 展示所有车辆信息
- 将录入的数据保存在文件中
- 将文件中的数据读出
算法构造
链表的增删改查
- 结构体的定义
typedef struct Parking
{char name[20]; //车主姓名char carname[10]; //车牌号long information; //车主联系方式char region; //车位区域编号int num; //车位编号struct Parking *next; //指针
}Parking;
- 录入车辆信息
利用尾插法插入新添加的数据
Parking *Addcar(Parking *head) //录入车辆信息
{int x;system("cls"); //清屏操作system("color B"); //改变字体颜色Parking *p = head;while(p->next!=NULL) //利用尾插法插入新用户信息{p = p->next;}printf("输入需要添加的车辆个数:");scanf("%d", &x);while(x--) //输入用户信息{system("cls");Parking *Node = (Parking *)malloc(sizeof(Parking));printf("\n输入用户姓名:");scanf("%s",Node->name);printf("\n输入车牌号:");scanf("%s",Node->carname);printf("\n输入车主联系方式:");scanf("%ld",&Node->information);printf("\n输入车位区域编号:");getchar();scanf("%c",&Node->region);printf("\n输入车位编号:");scanf("%d",&Node->num);Node->next=NULL;p->next = Node;p = p->next;}printf("\n输入完成!");F(head); //打印添加后的用户信息printf("\n按任意键返回主页\n");getch(); //用来显示结果return head;
}
- 删除用户信息
根据用户名匹配查找用户信息进行删除
Parking *Delete(Parking *head) //删除用户信息
{char name[20];system("cls");system("color B");printf("\n\t\t输入你要删除的用户姓名:");scanf("%s", name);Parking *p = head;Parking *q = p->next;while(q) //找到需要删除数据的前结点{if(strcmp(q->name,name)==0) //判断字符串是否相等函数{p->next = q->next;free(q); //释放内存空间break;}p = q;q = p->next;}if(p->next==NULL){printf("\n\t\t未找到该用户信息!");}else{printf("\n\t\t删除成功!!");F(head);}printf("\n\t\t按任意键返回主菜单");getch();return head;
}
- 查找用户信息
根据字符串匹配查找用户信息
void Find(Parking *head) //查找用户信息
{system("cls");system("color B");char name[20];printf("\n\t\t输入你要查找的用户姓名:");scanf("%s", name);Parking *p = head;while(p->next){if(strcmp(p->next->name,name)==0){printf("找到了!\n");printf("该用户的信息如下:");printf("\n\t\t---用户姓名 %s",p->next->name);printf("\n\t\t---车牌号 %s",p->next->carname);printf("\n\t\t---车主联系方式 %ld",p->next->information);printf("\n\t\t---车位区域编号 %c",p->next->region);printf("\n\t\t---车位编号 %d",p->next->num);break;}p = p->next;}if(p->next==NULL)printf("\n\t\t没有找到该用户信息");printf("\n\t\t按任意键返回主菜单");getch();
}
- 修改用户信息
查找用户找到后显示该用户的信息,根据用户选择修改信息
Parking *Change(Parking *head) //修改用户信息
{char name[20];system("cls");system("color B");printf("输入需要修改的用户姓名:");scanf("%s", name);Parking *p = head->next;while(p){if(strcmp(p->name,name)==0){system("cls");system("color B");int x;printf("\n\t\t --该用户信息-- \n\n");printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);printf("\n输入你要修改的信息编号:\n");printf(" 1-车主姓名 \n");printf(" 2-车牌号 \n");printf(" 3-车主联系方式 \n");printf(" 4-车位区域编号 \n");printf(" 5-车位编号 \n");scanf("%d", &x);switch(x){case 1:printf("\n\t输入修改后的信息");scanf("%s", p->name);break;case 2:printf("\n\t输入修改后的信息");scanf("%s", p->carname);break;case 3:printf("\n\t输入修改后的信息");scanf("%ld", &p->information);break;case 4:printf("\n\t输入修改后的信息");scanf("%c", &p->region);break;case 5:printf("\n\t输入修改后的信息");scanf("%d", &p->num);break; }printf("\n\t\t修改后的用户信息为");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);break;}p = p->next;}if(p==NULL){printf("\n未找到相应用户");printf("\n按任意键返回主页\n");getch();return head;}printf("\n修改完成!");F(head); //显示修改后的全部信息printf("\n按任意键返回主页\n");getch();return head;
}
其他链表操作
- 排序(根据用户姓名排序)
void *Sort(Parking *head) //排序
{Parking *p=head;Parking *q,*p1=NULL,*p2=NULL;while(p->next != NULL){q = p->next;while(q->next != NULL){if(strcmp(p->next->name,q->next->name)>0) //字符串比较{p1 = p->next; //记录p与q的下一结点p2 = q->next;q->next = q->next->next;p->next = p2;p2->next = p1;}elseq = q->next;}p = p->next;}F(head);printf("\n\t\t按任意键返回主菜单");getch();
}
- 查找区域车辆信息
void RegionalVehicles(Parking *head) //寻找指定区域内车辆信息
{system("cls");system("color B");char c;printf("\n\t\t输入你想要查看的区域");getchar();scanf("%c", &c);Parking *p = head->next;printf("\n\t\t --%c区域内车辆用户信息-- \n\n",c);printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");while(p){if(p->region==c) //判断区域字符与输入字符是否相等,相等则输出{printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);}p = p->next;}printf("\n\t\t按任意键返回主菜单");getch();
}
文件的读取与输入
- 将数据保存在文件中
之所以用w形式打开文件是因为我在程序运行前已将文件内数据读出,最后进行保存数据时覆盖原数据不会导致原数据丢失
这里的文件路径根据自己创建的文件进行更改,文件为text文件即可
void Preservation(Parking *head) //保存数据在文件中
{const char* filename1 = "C:/Users/judicious/Desktop/car.text"; //文件路径FILE *fp = fopen(filename1, "w"); //以写的方式打开文件,若文件不存在,则建立新的文件。若文件内有内容则会覆盖原有内容if (fp == NULL) //判断是否成功打开{puts("Fail to open file!");exit(1);}Parking * p = head->next;while(p){fprintf(fp,"%s %s %ld %c %d\n", p->name, p->carname, p->information, p->region, p->num); //向文件内输入数据p = p->next;}fclose(fp); //关闭文件return;
}
- 将文件中数据读出
将文件内数据读出并保存在链表当中,方便对数据进行修改
Parking *Read() //读取文件内数据
{const char* filename1 = "C:/Users/judicious/Desktop/car.text";FILE *fp = fopen(filename1, "rt"); //以读的方式打开文件if (fp == NULL){puts("Fail to open file!");exit(1); }Parking *head = (Parking *)malloc(sizeof(Parking)); //为头指针申请内存空间head->next = NULL; Parking *p1 = (Parking *)malloc(sizeof(Parking)); //申请存放数据的结点p1->next = NULL;if(fscanf(fp, "%s %s %ld %c %d", p1->name, p1->carname, &p1->information, &p1->region, &p1->num)!=EOF) //判断所读文件内容是否为空{head->next=p1;Parking *tmp=head;while (tmp->next) //利用尾插法插入结点,确保读出的数据安正序输出{tmp=tmp->next;}while(fgetc(fp)!=EOF) //判断文件是否为空{Parking *p = (Parking *)malloc(sizeof(Parking));fscanf(fp, "%s %s %ld %c %d", p->name, p->carname, &p->information, &p->region, &p->num);tmp->next=p;p->next=NULL;tmp = tmp->next;}Parking *p2 = head; //删除最后一个结点while(p2->next->next){p2 = p2->next;}p2->next = NULL;}elsereturn NULL;fclose(fp);return head->next;
}
删除最后一个结点的原因是我存入数据时每行数据后有一个换行符,fgetc()将换行符读走,最后一行时也将换行符读走。此时判断文件不为空,继续读取内容,所以最后一个结点内的内容为随机值,因此删除该结点。
主菜单
void menu() //主菜单
{Parking *head = (Parking *)malloc(sizeof(Parking));head->next = Read(); //读取文件信息system("cls");HideCursor(); //隐藏光标int choice;do{system("cls"); //主页面printf("--------------------------------------------------------------");printf("\n\n");printf("********************欢迎来到停车位管理系统********************\n");printf("\n\n");printf("---------------------------------------------------------\n");printf("\n 1- 录入车辆信息 ");printf("\n 2- 查找车辆信息 ");printf("\n 3- 移除车辆信息 ");printf("\n 4- 修改车辆信息 ");printf("\n 5- 查找区域车辆信息 ");printf("\n 6- 展示所有车辆信息 ");printf("\n 7- 按车主姓名排序 ");printf("\n 0- 退出管理系统并保存数据 \n");printf("\n-------------------------------------------------------\n");scanf("%d", &choice);switch(choice){case 1:head = Addcar(head);break;case 2:Find(head);break;case 3:head = Delete(head);break;case 4:head = Change(head);break;case 5:RegionalVehicles(head);break;case 6:F(head);break;case 7:Sort(head);break;}} while (choice!=0);Preservation(head); //保存数据
}
主函数
int main()
{menu();return 0;
}
完整代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h> //system("cls"):清屏
#include <conio.h> //getch()typedef struct Parking
{char name[20]; //车主姓名char carname[10]; //车牌号long information; //车主联系方式char region; //车位区域编号int num; //车位编号struct Parking *next; //指针
}Parking;void HideCursor() //隐藏光标
{CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}void F(Parking *head) //打印用户信息
{ system("cls");system("color B");Parking *p = head->next;printf("\n\t\t --停车场用户信息-- \n\n");printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");while (p){printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);p = p->next;}getch();return;
}Parking *Addcar(Parking *head) //录入车辆信息
{int x;system("cls");system("color B");Parking *p = head;while(p->next!=NULL){p = p->next;}printf("输入需要添加的车辆个数:");scanf("%d", &x);while(x--){system("cls");Parking *Node = (Parking *)malloc(sizeof(Parking));printf("\n输入用户姓名:");scanf("%s",Node->name);printf("\n输入车牌号:");scanf("%s",Node->carname);printf("\n输入车主联系方式:");scanf("%ld",&Node->information);printf("\n输入车位区域编号:");getchar();scanf("%c",&Node->region);printf("\n输入车位编号:");scanf("%d",&Node->num);Node->next=NULL;p->next = Node;p = p->next;}printf("\n输入完成!");F(head);printf("\n按任意键返回主页\n");getch();return head;
}Parking *Change(Parking *head) //修改用户信息
{char name[20];system("cls");system("color B");printf("输入需要修改的用户姓名:");scanf("%s", name);Parking *p = head->next;while(p){if(strcmp(p->name,name)==0){system("cls");system("color B");int x;printf("\n\t\t --该用户信息-- \n\n");printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);printf("\n输入你要修改的信息编号:\n");printf(" 1-车主姓名 \n");printf(" 2-车牌号 \n");printf(" 3-车主联系方式 \n");printf(" 4-车位区域编号 \n");printf(" 5-车位编号 \n");scanf("%d", &x);switch(x){case 1:printf("\n\t输入修改后的信息");scanf("%s", p->name);break;case 2:printf("\n\t输入修改后的信息");scanf("%s", p->carname);break;case 3:printf("\n\t输入修改后的信息");scanf("%ld", &p->information);break;case 4:printf("\n\t输入修改后的信息");scanf("%c", &p->region);break;case 5:printf("\n\t输入修改后的信息");scanf("%d", &p->num);break; }printf("\n\t\t修改后的用户信息为");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);break;}p = p->next;}if(p==NULL){printf("\n未找到相应用户");printf("\n按任意键返回主页\n");getch();return head;}printf("\n修改完成!");F(head);printf("\n按任意键返回主页\n");getch();return head;
}Parking *Delete(Parking *head) //删除用户信息
{char name[20];system("cls");system("color B");printf("\n\t\t输入你要删除的用户姓名:");scanf("%s", name);Parking *p = head;Parking *q = p->next;while(q){if(strcmp(q->name,name)==0){p->next = q->next;free(q);break;}p = q;q = p->next;}if(p->next==NULL){printf("\n\t\t未找到该用户信息!");}else{printf("\n\t\t删除成功!!");F(head);}printf("\n\t\t按任意键返回主菜单");getch();return head;
}void Find(Parking *head) //查找用户信息
{system("cls");system("color B");char name[20];printf("\n\t\t输入你要查找的用户姓名:");scanf("%s", name);Parking *p = head;while(p->next){if(strcmp(p->next->name,name)==0){printf("找到了!\n");printf("该用户的信息如下:");printf("\n\t\t---用户姓名 %s",p->next->name);printf("\n\t\t---车牌号 %s",p->next->carname);printf("\n\t\t---车主联系方式 %ld",p->next->information);printf("\n\t\t---车位区域编号 %c",p->next->region);printf("\n\t\t---车位编号 %d",p->next->num);break;}p = p->next;}if(p->next==NULL)printf("\n\t\t没有找到该用户信息");printf("\n\t\t按任意键返回主菜单");getch();
}void RegionalVehicles(Parking *head) //寻找指定区域内车辆信息
{system("cls");system("color B");char c;printf("\n\t\t输入你想要查看的区域");getchar();scanf("%c", &c);Parking *p = head->next;printf("\n\t\t --%c区域内车辆用户信息-- \n\n",c);printf("\t---------------------------------------------------------------------\n");printf("\t车主姓名--------车牌号-------车主联系方式---车位区域编号-----车位编号----\n");while(p){if(p->region==c){printf("\t%-17s%-16s%-15ld%-16c%-17d\n", p->name, p->carname, p->information, p->region, p->num);}p = p->next;}printf("\n\t\t按任意键返回主菜单");getch();
}void *Sort(Parking *head) //排序
{Parking *p=head;Parking *q,*p1=NULL,*p2=NULL;while(p->next != NULL){q = p->next;while(q->next != NULL){if(strcmp(p->next->name,q->next->name)>0){p1 = p->next;p2 = q->next;q->next = q->next->next;p->next = p2;p2->next = p1;}elseq = q->next;}p = p->next;}F(head);printf("\n\t\t按任意键返回主菜单");getch();
}void Preservation(Parking *head) //保存数据在文件中
{const char* filename1 = "C:/Users/judicious/Desktop/car.text";FILE *fp = fopen(filename1, "w");if (fp == NULL){puts("Fail to open file!");exit(1);}Parking * p = head->next;while(p){fprintf(fp,"%s %s %ld %c %d\n", p->name, p->carname, p->information, p->region, p->num);p = p->next;}fclose(fp);return;
}Parking *Read() //读取文件内数据
{const char* filename1 = "C:/Users/judicious/Desktop/car.text";FILE *fp = fopen(filename1, "rt");if (fp == NULL){puts("Fail to open file!");exit(1); }Parking *head = (Parking *)malloc(sizeof(Parking));head->next = NULL;Parking *p1 = (Parking *)malloc(sizeof(Parking));p1->next = NULL;if(fscanf(fp, "%s %s %ld %c %d", p1->name, p1->carname, &p1->information, &p1->region, &p1->num)!=EOF){head->next=p1;Parking *tmp=head;while (tmp->next){tmp=tmp->next;}while(fgetc(fp)!=EOF){Parking *p = (Parking *)malloc(sizeof(Parking));fscanf(fp, "%s %s %ld %c %d", p->name, p->carname, &p->information, &p->region, &p->num);tmp->next=p;p->next=NULL;tmp = tmp->next;}Parking *p2 = head;while(p2->next->next){p2 = p2->next;}p2->next = NULL;}elsereturn NULL;fclose(fp);return head->next;
}void menu() //主菜单
{Parking *head = (Parking *)malloc(sizeof(Parking));head->next = Read(); //读取文件信息system("cls");HideCursor(); //隐藏光标int choice;do{system("cls");printf("--------------------------------------------------------------");printf("\n\n");printf("********************欢迎来到停车位管理系统********************\n");printf("\n\n");printf("---------------------------------------------------------\n");printf("\n 1- 录入车辆信息 ");printf("\n 2- 查找车辆信息 ");printf("\n 3- 移除车辆信息 ");printf("\n 4- 修改车辆信息 ");printf("\n 5- 查找区域车辆信息 ");printf("\n 6- 展示所有车辆信息 ");printf("\n 7- 按车主姓名排序 ");printf("\n 0- 退出管理系统并保存数据 \n");printf("\n-------------------------------------------------------\n");scanf("%d", &choice);switch(choice){case 1:head = Addcar(head);break;case 2:Find(head);break;case 3:head = Delete(head);break;case 4:head = Change(head);break;case 5:RegionalVehicles(head);break;case 6:F(head);break;case 7:Sort(head);break;}} while (choice!=0);Preservation(head); //保存数据
}int main()
{menu();return 0;
}
若有错误,欢迎指正!!!
简单停车位管理系统(C语言版)相关推荐
- 汽车销售管理系统 c语言版 课程设计,汽车销售管理系统c语言版.docx
Document serial number[NL89WT-NY98YT-NC8CB-NNUUT-NUT108] Document serial number[NL89WT-NY98YT-NC8CB- ...
- 教师查询系统C语言,教师管理系统c语言版
<教师管理系统c语言版>由会员分享,可在线阅读,更多相关<教师管理系统c语言版(7页珍藏版)>请在人人文库网上搜索. 1.include/头文件#include/字符处理头文件 ...
- 酒店管理系统c语言带注释,酒店管理系统--C语言版.pdf
酒店管理系统...C语言版. // #include #include #include #include //成员变量的声明 int i,j,k,p 0; char temp[] "&qu ...
- 学生成绩排名及管理系统c语言,学生成绩管理系统__C语言版.doc
学生成绩管理系统__C语言版 学生成绩管理系统__C语言版 #include #include #include #include #include #include using namespace ...
- 学生管理系统——C语言版
文章目录 学生管理系统--C语言版 主函数 录入学生信息 删除学生信息 修改学生信息 查找学生信息 打印学生信息 保存学生信息 读取学生信息 求班级成绩的平均值 学生管理系统--C语言版 主函数 in ...
- 生成绩管理系统c语言,学生成绩管理系统——C语言版
<学生成绩管理系统--C语言版>由会员分享,可在线阅读,更多相关<学生成绩管理系统--C语言版(12页珍藏版)>请在人人文库网上搜索. 1.*常用的标准输入输出函数*/*acc ...
- 学生信息管理系统(C++语言版)
学生信息管理系统(C语言版) #include "stdio.h" #include "bios.h" #include "conio.h" ...
- SpringBoot实现的简单停车位管理系统
此篇是基于SpringBoot+Thymeleaf+Mybatis框架简单的停车位管理系统 系统分前台和后台 前台是用户登录 后台是管理员登录 前台用户功能有:个人中心.订单管理.查看车位.预约车位. ...
- 图书管理系统C语言版
图书管理系统是一种用于组织.存储和管理图书相关信息的软件系统.C语言版的图书管理系统是使用C语言开发的一种图书管理软件.这种系统通常可以实现图书的借阅.归还.查询等功能,方便图书馆工作人员和读者使用.
最新文章
- 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )
- 腾讯云centos7搭建javaweb服务器(本人亲自经历,详细)
- 一条SQL语句在MySQL中是如何执行的
- cheat sheet for cs221 at stanford: good luck
- kubectl技巧之查看资源列表,资源版本和资源schema配置
- 使用IShellView接口函数CreateViewWindow
- SAP UI5 ConnectionManager - drives initialization of odata model
- matlab小波脊线,小波脊线提取,模极大值法。运行的结果不太对,代码有些地方我也没完全看懂...
- C#算法设计排序篇之07-希尔排序(附带动画演示程序)
- html 隐藏hide,jQuery UI 实例
- 问题 B: 字符串的长度
- 【渝粤教育】国家开放大学2018年秋季 7160-22T卫生法学 参考试题
- 基于JAVA的超市库存管理系统
- LPC1788 NVIC 的设置
- 在iPhone设置一个快捷指令,一键将PDF转为图片
- 【AnySDK】接入必读及常见问题
- php按一列拆分excel表格,excel表格要根据某一列数据拆分-excel怎么按照某一列拆分表格...
- 快速实现免费的个人免签收款功能(不写一行代码)
- ORACLE数据库数据类型
- 4 计算机系统的异步性,操作系统复习资料.doc