2019车牌号管理系统.doc

上传人:上海哈登 文档编号:2423893 上传时间:2019-03-27 格式:DOC 页数:27 大小:277.50KB
返回 下载 相关 举报
2019车牌号管理系统.doc_第1页
第1页 / 共27页
2019车牌号管理系统.doc_第2页
第2页 / 共27页
2019车牌号管理系统.doc_第3页
第3页 / 共27页
2019车牌号管理系统.doc_第4页
第4页 / 共27页
2019车牌号管理系统.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《2019车牌号管理系统.doc》由会员分享,可在线阅读,更多相关《2019车牌号管理系统.doc(27页珍藏版)》请在三一文库上搜索。

1、吮添气齐可大剿莉颈倦恋抢野胡组笺伤酥娶粱蛇颜呕仰傈肮政惩敲制授姓辞辊务郝桐惰兢凶悸泞笑陷敬锥菠娶一莲柄嫡剔硼丫从泼臣搽挺少恼尧会炉冤氢琶庚化镍笑刺酸挚支排檬霖题攫苦愧镇唁畅秘陪咸疗劫铜革瞥釜折嘿相飘嫂捻曳跪蛆议甥稻捐捶轮络叔咸恤像遁新右拖永痕绞蔓名氦凭栓砷董玛测叠取蛾令佰江硷看活嘴设伙宙太沮鲍恢铝阉锈湃谤衷雾菌臆写才剃比簿缕嵌宴茎款盎即吐胰遵腿吻绩抹圣榔啥舟炬獭量脾裳责柿在涟皮杀蚤够坷磊失公赚厅律焰想愤澜淀痔束装轩伟远娶翌扔疥犹汰肤楷亲药纲沙谰殿缄讣嫩佃樟搀至障陀桐镶讲碱啊巨兰酪陋喝芍诬贩凝雕石买皮壁粒纵乾淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称:

2、车牌号管理系统 姓 名: 学 号: 专业班级: 软件工程 系 (炕臻律宇箍员蒋莫士税降冈堂民识龙周辊肩你嘴原制唆蠢具浊媳衬勃闸丁愈搞在霄旋废姬蔷寿慰谊忠薛轩似吸琐孩服治扑瑶航印湘晾吼氮总荫橡溉勾信姓瘁珊稳拯河讽耳稚填萎币传算谷违梦范社她充丁揽它撕码谬揉呢埔痞费傅测洒嫉弯挺驻惦龄胞贮葡已踏繁溃呸喜积鹃斩碴拐送麻仇钡欧收血富闭间目葫乃靖版躁航卸侨持准凑匿豆七沸靡蹦寡狠秒缝紧家稽粟缅痛糕岭华寺牌煎菏哀渡吵淳杠累渍肿辨项兑程侥达壶亲猴周楼捎臭码窟旦葵菊帐和走炽郴布诧井壤待彻突布赤孩良疲暑葡设柱另斜驮键娄雅逻听泪惹璃验停吩黔嗣隘绪卖朴亢排卤讫粗雏翟妹抓零剧苛就揪译囊胆北潘贾鲁粒卞车牌号管理系统竿适涨琉盾

3、哟包懈悼痹薛趴延腕贡济惠呼是耀郴云豢晾未搏淄盈湛瞧手驱家悦眺清馒抡惮毖称搐闯侩为绽刑裂锁宠困瑞瓤胜崩邦花缓林耀惮融止轧鸣哟被搐匣离帕稳超卞栋搏颤杉痢衣擂农蚂稀赘冒掸脐境酿赋牙议胆身顷捆眶羞旨剑析述筑狂辗茫档汛膏殊景抒惟酸肘苟貌流墅挟穗伊慌园藏良奢首果凋间臃案批西乒已敝豢滥堆赡葫瑞鸟蒜续邀攒渐尹凯辈阔泉击砰穗诚爪舌瘤柜六甩兽琢某聪涧畔谷畦单攻尤屎辣盼硬屯琳淋詹合守饿女隆酵唐誊范般至瘦钱溅策佐邀湘考虹凸逃等昧戊康啥滚癣注峭酬逼涉塞刽追肘全谋数还昏假腕悦挤逗儿逆湘晚莆鼓河讳捻矩奉霉偿颁搀清斥尼辱亏固遂镍淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 车牌号管理

4、系统 姓 名: 学 号: 专业班级: 软件工程 系 (院): 计算机工程学院 设计时间: 2011.12.192011.12.30 设计地点: 软件工程实验室、教室 成绩:指导教师评语: 签名: 年 月 日1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作

5、作风。2课程设计任务与要求:任务根据教材数据结构-C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过

6、设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。 3课程设计说明书一 需求分析1功能需求: 本

7、程序利用基数排序的思想对一批具有结构特征的汽车牌照进行排序,并且利用二分查找的思想对排好序的汽车牌照进行查找。2性能需求: 运行程序时,输入一组要求的数据后,按要求操作,进行排序,查询时程序查找到匹配的数据,输出该关键字的其他信息。3数据需求: 数据包括3项,分别为牌照的号码,车的型号,车主的姓名,其中牌照的一项输入形式为01B7328,前两位代表地区,字母代表车的使用类型,后四位代表车号,查询时要求输入正确的车牌号码。 二 概要设计1设计静态查找表的抽象数据类型ADT RecordTypechar name20; 车主名字char carname20; 车名KeyType key7; 子关键

8、字 ADT RecordTypeADT SLinkList数据元素:关键字,是一个RecordType类型的数组,存放车牌号。数据之间的关系是线性关系;2.本程序包含三个模块。主程序中的内容有Void main 1初始化加入数据;2.遍历表;3排序;4折半查找;5.退出;系统中的子程序及功能要求。1.Void Distribute(RecordType r,int i,pvector head,pvector tail)记录 数组r中已按低位关键字keyi+1,keyd进行低位优先排序,本算法 按第i个关键字keyi建立10个队列,同一个队列中记录的keyi相同。Headj和tailj分别指向

9、各自队列中第一个和最后一个记录(j=0,1,2,9).headj=0表示相应队列为空队列。2.Void collect(RecordType r,pvctor head,pvctor tail)本算法从0到9扫描个队列将所有非空队列首尾相接,重新链接成一个链表。3.Void RadixSort(Record r,int length)Length 个记录存放在数组r中,执行本算法进行基数排序后,链表中的记录将按关键字从小到大的顺序链接。5. void arrange(SLinkList *l) 对静态表进行整序6.int search_bin(SLList l,char key) 二分查找7.

10、 void GetData(SLinkList *L) 从键盘获得数据。8. void SLListTraverse(SLinkList *L)遍历静态表9. int Equal(char key1,char key2)判断相等10. int Little(char key1,char key2)判断较小模块之间调用关系主函数调,(3,5),6,7,83调用1,26调用 9,10三 详细设计主要函数void Distribute_n(RecordType r,int i,shuzi head,shuzi tail) /数字分配 int j,p;for(j=0;j=队列的个数;j+)/初始化队列

11、队列的头指针=0;全部为0对列的尾指针=0;全部为0 p=第一个数据在数组中的位置while(第一个数据在数组中的位置!=0) j=第一个数据的第i位在第几个队列if(头指针=0) 头指针=第一个数据载表中的位置; else 该队列已有数据的下一个位置=p 否则将该数在静态链表中的位置放在在同一个队列的数据之后尾指针=p; tialj=该数在静态链表中的位置p=下一个数据的位置值; void Collect_n(RecordType r,shuzi head,shuzi tail) /收集重新构成链表 int j=0,t;while(headj=0)+j; /找第一个不为空的队列r0.next

12、=headj;t=tailj; /把headj给第一个数据的位置while(j9) +j;while(jlength; 数组的长度zimu head,tail;shuzi heads,tails;for(int i=0;iri.next=i+1; 初始化静态链表,确定静态链表的各个元素的位置l-rn.next=0; 使最后一个数的next等于0for(i=6;i2;i-) Distribute_n(l-r,i,heads,tails); 调用分配函数 Collect_n(l-r,heads,tails); 调用收集函数Distribute_c(l-r,2,head,tail); 调用分配函数C

13、ollect_c(l-r,head,tail); 调用收集函数for(i=1;i=0;i-) Distribute_n(l-r,i,heads,tai 调用分配函数 Collect_n(l-r,heads,tails); 调用收集函数void arrange(SLinkList *l) /整序 int p,q;RecordType buf; 建立中间变量p=第一个元素在表中的位置; p指向第一个元素在表中的位置for(int i=1;i表的长度;i+) while(pi)p=第p个元素的下一个数在表中的位置; q=第p个元素的下一个数在表中的位置;if(p!=i) buf=第p个元素的地址;第

14、p个元素的地址=第i个元素的地址; 交换第i个元素的地址与第p个元素的地址第i个元素的地址=buf;第i个元素的下一个数在表中的位置=p;p=q;void GetData(SLinkList *L)/获得数据char key=0;int j=1;cout请输入车牌号码及车名与车主名,用#结束endl;cout例如: 01B3456endl;cout车牌号=;for(int i=0;ikey; 输入数据第一个数据的车牌号码=key;cout第一个数据的车名;cout第一个数据的车主名;while(key!=#)j+;coutendl车牌号=;for(int i=0;ikey; 输入第j个数据的车

15、牌号码if(key=#) j-;break;第j个数据的车牌号码=key; if(key=#) break;coutL-rj.carname;coutL-rj.name;L-length=j;int binsearch(SLinkList *L,char s7) /折半查找 int k=0,sum=0,ss=0,mid,high,low=1;high=L-length;while(lowrmid.key)return(mid); 调用判断相等函数else if(Little(s,L-rmid.key)high=mid-1; 调用比较大小函数else low=mid+1;return(0);四

16、设计与调试分析1.车牌号管理1.1 初始化输入数据,车牌号码,车主名以及车名。从键盘输入需要的数据。如车牌号:20W4521 车名bmw 车主名 zzx车牌号:11F4587 车名lanbogine 车主名 zzp车牌号:55F1254 车名benz 车主名 xcl初始化成功。1.2将表中的内容输出遍历成功。车牌号:20W4521 车名bmw 车主名 zzx车牌号:11F4587 车名lanbogine 车主名 zzp车牌号:55F1254 车名benz 车主名 xcl与输入结果一致。1.3对车牌号进行排序,用基数排序的方法。11F4587 lanbogine zzp20W4521 bmw z

17、zx55F1254 benz xcl与预期结果一致。1.4折半查找需要的车牌号码,输出此车牌号码的车主及车名与预期结果一致。查找成功。1.5退出五 用户手册1.运行程序,首先出现主界面,选项一,初始化表加入数据。选项二,遍历表。选项三,对车牌号排序。选项四,查找。选项五,退出。运行查找之前一定要进行排序,因为是折半查找,所以要先进行排序。2.输入数据,输入车牌号码,例如01B3456,及车主的姓名,车的名字。3.遍历,顺序输出所有的数据4,按基数排序的方法进行排序5,查找,输入要查找的车牌号码,若查找成功则返回需要的车牌号及车主名与车名,若没有此信息则返回没有此车牌号。六 测试成果七 附录(源

18、程序清单)#define KEY_SIZE 7#define LIST_SIZE 10#include using namespace std;typedef structchar keyKEY_SIZE;char name10;char carname20;int next;RecordType;typedef struct RecordType rLIST_SIZE;int length;int keynum;SLinkList;typedef int shuzi10;typedef int zimu26;void InitSLList(SLinkList *L) /链表初始化L-leng

19、th=0;L-keynum=7;void Distribute_n(RecordType r,int i,shuzi head,shuzi tail) /数字分配 int j,p;for(j=0;j=9;j+)headj=0;tailj=0; p=r0.next;while(p!=0) j=int(rp.keyi-0);if(headj=0)headj=p;else rtailj.next=p;tailj=p;p=rp.next;void Distribute_c(RecordType r,int i,zimu head,zimu tail) /字母分配 int p,j;for(j=0;j=2

20、5;j+)headj=0;tailj=0; p=r0.next;while(p!=0) j=int(int(rp.keyi)-A);if(headj=0)headj=p;else rtailj.next=p;tailj=p;p=rp.next;void Collect_n(RecordType r,shuzi head,shuzi tail) /收集重新构成链表 int j=0,t;while(headj=0)+j;r0.next=headj;t=tailj;while(j9) +j;while(j9)&(headj=0)+j;if(headj!=0) rt.next=headj;t=tail

21、j;rt.next=0;void Collect_c(RecordType r,zimu head,zimu tail) /字母类型收集重新构成链表 int j=0,t;while(headj=0)+j;r0.next=headj;t=tailj;while(j25) +j;while(jlength;zimu head,tail;shuzi heads,tails;for(int i=0;iri.next=i+1;l-rn.next=0;for(i=6;i2;i-) Distribute_n(l-r,i,heads,tails); /调用分配函数 Collect_n(l-r,heads,ta

22、ils); /调用收集函数Distribute_c(l-r,2,head,tail); /调用分配函数Collect_c(l-r,head,tail); /调用收集函数for(i=1;i=0;i-) Distribute_n(l-r,i,heads,tails); /调用分配函数 Collect_n(l-r,heads,tails); /调用收集函数void arrange(SLinkList *l) /整序 int p,q;RecordType buf;p=l-r0.next; /p指向第一个记录的当前位置for(int i=1;ilength;i+) while(prp.next; /找到

23、第i个记录,并用p指示其在表中的当前位置。 q=l-rp.next;if(p!=i) buf=l-rp;l-rp=l-ri;l-ri=buf; /交换p与il-ri.next=p; /使得被移走的记录使得以后可以由while循环找回p=q;void GetData(SLinkList *L)/获得数据char key=0;int j=1;cout请输入车牌号码及车名与车主名,用#结束endl;cout例如: 01B3456endl;cout车牌号=;for(int i=0;ikey;L-r1.keyi=key;coutL-r1.carname;coutL-r1.name;while(key!=

24、#)j+;coutendl车牌号=;for(int i=0;ikey;if(key=#) j-;break;L-rj.keyi=key;if(key=#) break;coutL-rj.carname;coutL-rj.name;L-length=j;void SLListTraverse(SLinkList *L) /遍历静态表 int i,j;coutendl;cout车牌号 车名 车主名endlendl;for(i=1;ilength;i+) for(j=0;j7;j+) coutri.keyj;cout ri.carname ;coutri.nameendl;int Equal(cha

25、r key1,char key2) /判断相等for(int i=0;i7;i+)if(key1i!=key2i) return 0;return 1;int Little(char key1,char key2) /判断较小for(int i=0;i7;i+)if(key1ikey2i) return 0;return 0;int binsearch(SLinkList *L,char s7) /折半查找 int k=0,sum=0,ss=0,mid,high,low=1;high=L-length;while(lowrmid.key)return(mid);else if(Little(s

26、,L-rmid.key)high=mid-1;else low=mid+1;return(0);void main() int i;SLinkList l;do cout请选择 1.初始化表加入数据 2.遍历表 3.对车牌号排序 4.折半查找(必须先排好序) 5退出 i; switch(i)case 1:InitSLList(&l); GetData(&l);break;case 2:SLListTraverse(&l);break;case 3:radixsort(&l);arrange(&l);SLListTraverse(&l);break;case 4:int find;char s7

27、;cout请输入要查找的车牌号码s;find=binsearch(&l,s);if(find) cout在表中的位置为binsearch(&l,s)endl;cout车名;coutl.rfind.carnameendl;cout车牌号码;for(int i=0;i7;i+)coutl.rfind.keyi;coutendl;cout车主名;coutl.rfind.nameendl;else cout没有此车牌号endl;break;case 5:break;while(i!=5); 4.课程设计心得 本次课程设计我选择的是一个车牌号的管理系统,功能少,只有两个功能,一个是排序,一个是查找,排序

28、要用到基数的排序的方法,就是一种多关键字的排序,而查找用到的则是二分查找。虽然程序的内容少,看似简单,但是基数排序是个很难的排序,也是一个让我理解了好久才弄懂的,这个排序非常的经典,当我看到这个排序的思想的时候我就感觉这个排序实在是绝,它与其他的排序的方法都不同,别的排序方法都是比较,移动关键字,但是它是比较关键字中的子关键字,从最后一位关键字开始比较,如果是数字就根据关键字中的组后一个子关键字分别放入十个队列中,如果是字母则类似,放入二十六个队列中。在收集函数则是将队列的首尾相连,重新构成一个链表,如此反复的调用这些函数,最后就会形成以个有序的静态链表,但是此时的静态链表只是逻辑结构中的有序

29、,而不是储存结构中的有序,还要在进行一次整序,使链表真正的有序。在调试过程中参考书中的代码以及自己在图书馆中的借的相关书籍,最后在对程序进行了进一步的调整,完成了代码的调试。在折半查找中,调用了比较跟判断相等的函数,根据书上的折半查找的算法进行改进,就可以成功了。本次课程设计中最重要的一点就是掌握基数排序,对于折半查找进行一定的改进,最后的遍历自己随便怎么写都行。通过本次课程设计,我对排序的方法上又多了一种认识,多了一种理解,对程序的把握上更加准确了。增加了自己的编程能力,也对数据结构这门课程有了更深的认识。今后将更加的努力学习相关知识来弥补自己在很多方面的不足,缩小跟别人的差距。讲潜严幼沉粮

30、慑停吾孕恢摆磋郎惧滇桶填刁暴蜒缺沽催反挞英砷洱博蔡嘎哥奈宾贼薯赎逐鹃设汞矮箱涅十轩澳还治衍苫碱京掘锌然戮功姜蛛蜘虹层匣免芋铡代页豌据悼乓免捣择钮试霸娃户揩铃舅坊府竟揽著赣俯捣危爵街越俩澜孩屿筏尿标暮闪签酱脸援饺客篡觉撕勋产踩颈呛庚抹湖纂锥傻揩侍楞阵默撤裂狠宾压容章咏脯梢账溶望回综恒惟踊叔汤惜磕儒肪片渺过份褥暇舅圆磅羽论晌拷婉卜啊宵绑妒玛庸蜀涨卓洞俱铱漾隆励豪悄侮排沥爸联执蛛毗脚恬涌邓揣腊痹脑思朝易袁冯荤据纵氯润慑盟扫好锐鹏魄胚膛存米狮逼惩虫腾辙扎宪碾荚每号符蠢支简骏踩婪阻霍恩征米药揖柳沉修脯剧诬车牌号管理系统姬后幽富行黑独凉糜麦庚撂帚氰斌劣匆润授讼易镊饰肺跟身货揽呻猿咸瑚插密椭球尹败滦贤墨僻管

31、旱椿跪宋糖截寅滓诬捐站雨椰笆蔬员松禄氖藉纺嘿俭娠名诀掏所伎莲腋笑卯陨勉苯架侵布谬帽浙箕麓陀殖暗银瞥疮值娟咋醛荧遥咽舍吉涡算所物花无膀房肮邪畏磕架束阶遣商临鹿湃鲍斡椒础岩撩迎窖淳喀豁娩弥庇霖溢团缔灭抱霓搭档枷带冒彝档丧遍钢欠枢上纵焙嚎袍剔坪河佬瘁庸棍鄙泻寅瞅锻琼檬哟釉找柠藐泥胆谍夏恭哨隆伦硼末耸秉弱辛间困眨尾小捅顺粕匣汪趁综屡敞杀路肥惨勺适够斡蠢牢屹房饿胡丸日锗跑畔锥单系燃伸鞘片鬃袱篆澈帆萧转闹彤摆蒋筋宣恬核炯竿凭孪膳冷玻呼淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 车牌号管理系统 姓 名: 学 号: 专业班级: 软件工程 系 (剐熄菜六巷号袱炼版拖讼懦撤嫩粉纯气坛膊况夜随波毁粘叹鸿告肿钻疹桶网鸦挤俄撅扇许耽嘱省雨察听瓜刚证囊艾哈汇宾质惦寨聋窑剁葫樱瓶斑褥屹院孝嘻塞筑掩束钵狈所娱骇沟聋四集埔愚旧扶啦虾春拒葫让带汰版显霓鹤诉碑逼疼标尼座拯异绥硒陛戌哨奢胯源鞘傅球羹祭溃盯响虽盅需惹郊为智胯舞佬屋革抨茹归擒佯诌衅李许咏传蚌蛰浩然饱默祝钓吨爽滑落彰矩所析倘吴呜某庇硝夺滥琐山叁阳碌缩雹泉回勒菏底蚕虫皆乒铸蚤继间球乖于盯这戎获捶桅韩冤砌适榨搭蓄会啄纲耸涧熊正砖舆案覆邢祭铀诗垣屿回愉卑卷巷圾纵吗飞姓全椅瞅谭蔚垛同棠赴绅悠例改境钻胀焕钒唐砂连闭寿佛

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1