车牌管理系统整体设计思路如下,首先,考虑数据储存结构,采用结构体数组存放车牌数据。支持三部分的操作,即省份,城市,汽车牌号,因此产生车牌号时,因为车牌号的固定格式,仅仅产生当前最常见的车牌,其他车牌的兼容性较差。
1.需要在车牌号结构体数组里进行添加和删除。
2.可以对车牌号结构体数组里的信息进行排序和查找。
3.可以查找车牌号结构体数组里的个别信息。
4.可以进行输入,输出,遍历。
根据固定的车牌号格式,输入可以随机产生结构体数组形式的车牌号信息,输入可以手动按照固定格式输入省份,城市,车牌号。
输出按照数组遍历的方式,可以进行全部数据的输出。包含查找的一部分,可以按照所需要的省市条件,进行所需要目标信息的输出。
排序,按照存储方式,省份代号为字符串,可以自行根据大小进行排序,城市代号为字符,也可以根据字符本身大小直接进行排序,车牌号为多位的字符串,可以根据c++自带的string定义进行比较,因此,三者都可以进行大小比较,也就可以非常简单的进行选择排序。
查找,因为存储格式的固定,可以根据三组(省份,城市,车牌号)分别进行查找。
删除,第一,可以在查找的基础上,若查到该数据,则可以进行删除,若查不到则跳出程序,无法执行删除;第二可以在遍历的基础上,提前确定需要删除的位置,直接输入位置信息,将该数据删除。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include
#include
#include
#include
#include<time.h>
using namespace std;
struct car
{
string num;
string province;
char a;
}c[1000000], t;
string pp[100] = { “京”,“津”, “沪”, “渝”, “冀”, “晋”, “辽”, “吉”, “黑”, “苏”, “浙”, “皖”, “闽”, “赣”, “鲁”, “豫”, “鄂”, “湘”, “粤”, “琼”, “川”, “黔”, “滇”, “陕”, “甘”, “青”, “台”, “桂”,“藏”,“蒙”, “宁”, “新”,“港”,“澳” };
int f[1000000];
int main()
{
int c = 1;
int n = 0;
int m = 0;
while (c == 1)
{
cout << “车牌信息管理系统” << endl;
cout << “请输入数字选择下列功能” << endl;
cout << “1随机产生车牌信息” << endl;
cout << “2添加车辆信息” << endl;
cout << “3按照省份排序” << endl;
cout << “4按照牌号排序” << endl;
cout << “5查找车牌号” << endl;//再分三种方法
cout << “6删除车牌号” << endl;
cout << “7输出所有车牌号信息” << endl;
cout << “其他输入跳出程序” << endl;
cin >> c;
if (c == 1)
{
cout << “请输入随机产生车牌号的数量” << endl;
cin >> m;
suiji(n, m);
n += m;
}
else if (c == 2)
{
cout << “请输入添加车牌信息的数量” << endl;
int i;
cin >> i;
for (int j = 0; j < i; j++)
{
tianjia(n);
}
}
else if (c == 3)
{
paixuprovince(n);
cout << “排序完成” << endl;
}
else if (c == 4)
{
paixunum(n);
cout << “排序完成” << endl;
}
if (c == 5)
{
int d;
cout << “请输入查找的方式” << endl;
cout << “1顺序查找” << endl;
cout << “2排序,二分查找” << endl;
cout << “3先确定省份,再查找” << endl;
cout << “其他输入跳出程序” << endl;
cin >> d;
if (d == 1)
{
chazhao(n);
}
else if (d == 2)
{
chazhao2(n);
}
else if (d == 3)
{
chazhao3(n);
}
}
else if (c == 6)
{
int d;
cout << “请选择删除的方式” << endl;
cout << “1删除第几个” << endl;
cout << “2按照信息查找并删除” << endl;
cout << “其他输入跳出程序” << endl;
cin >> d;
if (d == 1)
{
shanchu1(n);
}
else if (d == 2)
{
shanchu(n);
}
else { cout << “输入数字有误” << endl; }
}
else if (c == 7)
{
cout << “请输入数字选择功能” << endl;
cout << “1所有车牌” << endl;
cout << “2某一个省份的车牌” << endl;
cout << “3某一个城市的车牌” << endl;
cout << “其他输入跳出程序” << endl;
int k;
cin >> k;
if (k == 1)shuchu(n);
else if (k == 2)shuchuprovince(n);
else if (k == 3)shuchucity(n);
}
cout << “是否结束程序” << endl;
cout << “1跳转到开始” << endl;
cout << “其他键结束程序” << endl;
cin >> c;
}
system(“pause”);
return 0;
}
void suiji(int n, int m)
{
string h = { “10010” };
char q = ‘0’;
int i = n;
for (int l = 0; i < n + m; l++, i++)//产生从m-n之间,这些个数据
{
h = h.substr(size(h) - 5, size(h));//取h后五位作为车牌号
c[i].num = h;
if (l > 42) { l = l % 42; }
if (l == 10 || l == 11 || l == 12 || l == 13 || l == 14 || l == 15 || l == 16)
{
l = 17;
}
h += q + l;
}
int ii = 0;
for (i = n; i < m + n; i++, ii++)
{
if (ii >= 34) { ii -= 34; } //从pp数组中取34个其中的一个作为省份代号
c[i].province = pp[ii];
}
q = ‘A’;
int l = 0;
for (i = n; i < m + n; i++, l++)
{
if (l > 26) { l = l % 26; } //26个字母作为车牌号城市的代号
c[i].a = q + l;
}
}
排序和查找可以直接用系统库函数
void paixunum(int n)//按照车牌号排序
{
int i, j;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (c[i].num > c[j].num) //按照车牌号第三部分的大小进行排序
{
t = c[i];
c[i] = c[j];
c[j] = t;
}
}
}
}
void chazhao(int n)//直接查找
{
clock_t start, end;
start = clock();
string province, num;
char a = 0;
cout << "按照“省份+空格+城市代号+空格+牌号”的形式输入" << endl;
cin >> province >> a >> num;//输入需要查找的信息
int k = 0;
for (int i = 0; i < n; i++)
{
if (c[i].province == province && c[i].num == num && c[i].a == a)//查找到此条信息
{
k = 1;
cout << "第" << i + 1 << "个" << "查找成功" << endl;
break;
}
}end = clock();printf("time=%f\n", (double)end - start);
if (k == 0)//未查找到此条信息
{
cout << "未找到此车牌号" << endl;
}
}
类似可以设计许多查找方法:二分法或者是先确定省份再查找