完整word版车牌号管理系统word文档良心出品Word格式.docx
- 文档编号:16761769
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:25
- 大小:111.37KB
完整word版车牌号管理系统word文档良心出品Word格式.docx
《完整word版车牌号管理系统word文档良心出品Word格式.docx》由会员分享,可在线阅读,更多相关《完整word版车牌号管理系统word文档良心出品Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书
一需求分析
1.功能需求:
本程序利用基数排序的思想对一批具有结构特征的汽车牌照进行排序,并且利用二分查找的思想对排好序的汽车牌照进行查找。
2.性能需求:
运行程序时,输入一组要求的数据后,按要求操作,进行排序,查询时程序查找到匹配的数据,输出该关键字的其他信息。
3.数据需求:
数据包括3项,分别为牌照的号码,车的型号,车主的姓名,其中牌照的一项输入形式为01B7328,前两位代表地区,字母代表车的使用类型,后四位代表车号,查询时要求输入正确的车牌号码。
二概要设计
1.设计静态查找表的抽象数据类型
ADTRecordType{
charname[20];
车主名字
charcarname[20];
车名
KeyTypekey[7];
子关键字
}ADTRecordType
ADTSLinkList{
数据元素:
关键字,是一个RecordType类型的数组,存放车牌号。
数据之间的关系是线性关系;
}
2.本程序包含三个模块。
主程序中的内容有
Voidmain
{
1初始化加入数据;
2.遍历表;
3.排序;
4.折半查找;
5.退出;
系统中的子程序及功能要求。
1.VoidDistribute(RecordTyper[],inti,pvectorhead,pvectortail)
记录数组r中已按低位关键字key[i+1],…,key[d]进行低位优先排序,本算法按第i个关键字key[i]建立10个队列,同一个队列中记录的key[i]相同。
Head[j]和tail[j]分别指向各自队列中第一个和最后一个记录(j=0,1,2,…9).head[j]=0表示相应队列为空队列。
2.Voidcollect(RecordTyper[],pvctorhead,pvctortail)
本算法从0到9扫描个队列将所有非空队列首尾相接,重新链接成一个链表。
3.VoidRadixSort(Recordr[],intlength)
Length个记录存放在数组r中,执行本算法进行基数排序后,链表中的记录将按关键字从小到大的顺序链接。
5.voidarrange(SLinkList*l)
对静态表进行整序
6.intsearch_bin(SLListl,charkey[])
二分查找
7.voidGetData(SLinkList*L)
从键盘获得数据。
8.voidSLListTraverse(SLinkList*L)
遍历静态表
9.intEqual(charkey1[],charkey2[])
判断相等
10.intLittle(charkey1[],charkey2[])
判断较小
模块之间调用关系
主函数调,(3,5),6,7,8
3调用1,2
6调用9,10
三详细设计
主要函数
voidDistribute_n(RecordTyper[],inti,shuzihead,shuzitail)//数字分配
intj,p;
for(j=0;
j<
=队列的个数;
j++)//初始化队列
{
队列的头指针=0;
全部为0
对列的尾指针=0;
}
p=第一个数据在数组中的位置
while(第一个数据在数组中的位置!
=0)
{
j=第一个数据的第i位在第几个队列
if(头指针==0)
头指针=第一个数据载表中的位置;
else
该队列已有数据的下一个位置=p否则将该数在静态链表中的位置放在在同一个队列的数据之后
尾指针=p;
tial[j]=该数在静态链表中的位置
p=下一个数据的位置值;
voidCollect_n(RecordTyper[],shuzihead,shuzitail)//收集重新构成链表
intj=0,t;
while(head[j]==0)
++j;
//找第一个不为空的队列
r[0].next=head[j];
t=tail[j];
//把head[j]给第一个数据的位置
while(j<
9)
while((j<
9)&
&
(head[j]==0))找到不为0的队列
++j;
if(head[j]!
=0)
{
r[t].next=head[j];
t=tail[j];
}
r[t].next=0;
//使最后一个数的next=0
voidradixsort(SLinkList*l)//基数排序
intn=l->
length;
数组的长度
zimuhead,tail;
shuziheads,tails;
for(inti=0;
i<
=n-1;
i++)
l->
r[i].next=i+1;
初始化静态链表,确定静态链表的各个元素的位置
l->
r[n].next=0;
使最后一个数的next等于0
for(i=6;
i>
2;
i--)
Distribute_n(l->
r,i,heads,tails);
调用分配函数
Collect_n(l->
r,heads,tails);
调用收集函数
Distribute_c(l->
r,2,head,tail);
Collect_c(l->
r,head,tail);
调用收集函数
for(i=1;
=0;
Distribute_n(l->
r,i,heads,tai调用分配函数
}
voidarrange(SLinkList*l)//整序
intp,q;
RecordTypebuf;
建立中间变量
p=第一个元素在表中的位置;
p指向第一个元素在表中的位置
for(inti=1;
表的长度;
while(p<
i)p=第p个元素的下一个数在表中的位置;
q=第p个元素的下一个数在表中的位置;
if(p!
=i)
buf=第p个元素的地址;
第p个元素的地址=第i个元素的地址;
交换第i个元素的地址与第p个元素的地址
第i个元素的地址=buf;
第i个元素的下一个数在表中的位置=p;
p=q;
voidGetData(SLinkList*L)//获得数据
{
charkey='
0'
;
intj=1;
cout<
<
"
请输入车牌号码及车名与车主名,用'
#'
结束"
endl;
例如:
01B3456"
车牌号="
7;
cin>
>
key;
输入数据
第一个数据的车牌号码=key;
车名:
cin>
第一个数据的车名;
车主名:
第一个数据的车主名;
while(key!
='
)
j++;
cout<
endl<
for(inti=0;
{
cin>
输入第j个数据的车牌号码
if(key=='
){j--;
break;
第j个数据的车牌号码=key;
if(key=='
)break;
L->
r[j].carname;
r[j].name;
L->
length=j;
intbinsearch(SLinkList*L,chars[7])//折半查找
intk=0,sum=0,ss=0,mid,high,low=1;
high=L->
while(low<
=high)
mid=(high+low)/2;
if(Equal(s,L->
r[mid].key))return(mid);
调用判断相等函数
elseif(Little(s,L->
r[mid].key))high=mid-1;
调用比较大小函数
elselow=mid+1;
return(0);
四设计与调试分析
1.车牌号管理
1.1初始化输入数据,车牌号码,车主名以及车名。
从键盘输入需要的数据。
如
车牌号:
20W4521车名bmw车主名zzx
11F4587车名lanbogine车主名zzp
55F1254车名benz车主名xcl
初始化成功。
1.2将表中的内容输出
遍历成功。
与输入结果一致。
1.3对车牌号进行排序,用基数排序的方法。
11F4587lanboginezzp
20W4521bmwzzx
55F1254benzxcl
与预期结果一致。
1.4折半查找需要的车牌号码,输出此车牌号码的车主及车名
查找成功。
1.5退出
五用户手册
1.运行程序,首先出现主界面,选项一,初始化表加入数据。
选项二,遍历表。
选项三,对车牌号排序。
选项四,查找。
选项五,退出。
运行查找之前一定要进行排序,因为是折半查找,所以要先进行排序。
2.输入数据,输入车牌号码,例如01B3456,及车主的姓名,车的名字。
3.遍历,顺序输出所有的数据
4,按基数排序的方法进行排序
5,查找,输入要查找的车牌号码,若查找成功则返回需要的车牌号及车主名与车名,若没有此信息则返回没有此车牌号。
六测试成果
七附录(源程序清单)
#defineKEY_SIZE7
#defineLIST_SIZE10
#include<
iostream>
usingnamespacestd;
typedefstruct{
charkey[KEY_SIZE];
charname[10];
charcarname[20];
intnext;
}RecordType;
RecordTyper[LIST_SIZE];
intlength;
intkeynum;
}SLinkList;
typedefintshuzi[10];
typedefintzimu[26];
voidInitSLList(SLinkList*L)//链表初始化
length=0;
keynum=7;
voidDistribute_n(RecordTyper[],inti,shuzihead,shuzitail)//数字分配
=9;
j++)
head[j]=0;
tail[j]=0;
p=r[0].next;
while(p!
j=int(r[p].key[i]-'
);
if(head[j]==0)
head[j]=p;
else
r[tail[j]].next=p;
tail[j]=p;
p=r[p].next;
voidDistribute_c(RecordTyper[],inti,zimuhead,zimutail)//字母分配
intp,j;
=25;
j++)
j=int(int(r[p].key[i])-'
A'
if(head[j]==0)head[j]=p;
elser[tail[j]].next=p;
(head[j]==0))
voidCollect_c(RecordTyper[],zimuhead,zimutail)//字母类型收集重新构成链表
25)
25)&
voidradixsort(SLinkList*l)//基数排序
//调用分配函数
//调用收集函数
//调用收集函数
p=l->
r[0].next;
//p指向第一个记录的当前位置
l->
i)p=l->
r[p].next;
//找到第i个记录,并用p指示其在表中的当前位置。
q=l->
buf=l->
r[p];
l->
r[p]=l->
r[i];
r[i]=buf;
//交换p与i
r[i].next=p;
//使得被移走的记录使得以后可以由while循环找回
L->
r[1].key[i]=key;
r[1].carname;
r[1].name;
L->
r[j].key[i]=key;
voidSLListTraverse(SLinkList*L)//遍历静态表
inti,j;
车牌号"
"
车名"
车主名"
=L->
for(j=0;
cout<
r[i].key[j];
r[i].carname<
r[i].name<
intEqual(charkey1[],charkey2[])//判断相等
{if(key1[i]!
=key2[i])return0;
return1;
intLittle(charkey1[],charkey2[])//判断较小
if(key1[i]<
key2[i])return1;
elseif(key1[i]>
key2[i])return0;
return0;
voidmain()
inti;
SLinkListl;
do
请选择1.初始化表加入数据2.遍历表3.对车牌号排序4.折半查找(必须先排好序)5退出"
i;
switch(i)
case1:
InitSLList(&
l);
GetData(&
break;
case2:
SLListTraverse(&
case3:
radixsort(&
arrange(&
SLListTraverse(&
case4:
intfind;
chars[7];
请输入要查找的车牌号码"
s;
find=binsearch(&
l,s);
if(find)
{
cout<
在表中的位置为"
binsearch(&
l,s)<
l.r[find].carname<
车牌号码"
for(inti=0;
cout<
l
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 车牌号 管理 系统 文档 良心 出品