车牌号管理系统_第1页
车牌号管理系统_第2页
车牌号管理系统_第3页
车牌号管理系统_第4页
车牌号管理系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、淮海 工学院 计算机工程学院课程设计报告设计名称:数据结构课程设计选题名称:车牌号管理系统姓 名:学 号:专业班级:软件工程设计时间:2011.12.192011.12.30设计地点:软件工程实验室、教室成绩:指导教师评语:签名:数据结构课程设计报告第 3 页,共 页1 .课程设计目的F 1:!( , !:!(一,!» MF , 0F !* * WW «,一:! F11 、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解 指定问题。2 .初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3 .提高综合运用所学的理

2、论知识和方法独立分析和解决问题的能力;4 .训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平, 并在此过程中培养他们严谨的科学态度和良好的工作作风。2 .课程设计任务与要求:任务根据教材数据结构-C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、 算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算

3、法复杂性,能够巩固数据结构课程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现 抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作 完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的 重用率。2、 .设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用 C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立

4、提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于 10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。3 .课程设计说明书一需求分析1 .功能需求:本程序利用基数排序的思想对一批具有结构特征的汽车牌照进行排序,并且利用二分查找的思想对排好序的汽车牌照进行查找。2 .性能需求:运行程序时,输入一组要求的数据后,按要求操作,进行排序,查询时程序查找到匹 配的数据,输出该关键字的其他信息。3 .数据需求:数据包括3项,分别为牌照的号码,车的型号,车主的姓名,其中牌照的一项输入形 式为01B732日前两位代表地区,字母代表车的使用类型,后四位代表车号,查询

5、时要求输入 正确的车牌号码。二概要设计1 .设计静态查找表的抽象数据类型ADT RecordTypechar name20; 车主名字char carname20; 车名KeyType key7; 子关键字 ADT RecordTypeADT SLinkList数据元素:关键字,是一个 RecordType类型的数组,存放车牌号 数据之间的关系是线性关系;2 .本程序包含三个模块。主程序中的内容有Void main1初始化加入数据;2 .遍历'表;3 .排序;4 .折半查找;5 .退出;系统中的子程序及功能要求。1 .Void Distribute(RecordType r口,int

6、i,pvector head,pvector tail)数据结构课程设计报告第4页,共 页记录一数一组一一甲一已按低位关键学一一_一keyi+ij,:二,keym一进行低位优先排序;本算法按.第一一个' 关键字keyi建立10个队列,同一个队列中记录的 keyi相同。Headj和tailj 分别指 向各自队列中第一个和最后一个记录(j=0,1,2,9).headj=0 表示相应队列为空队列。2 .Void collect(RecordType r,pvctor head,pvctor tail)本算法从0到9扫描个队列将所有非空队列首尾相接,重新链接成一个链表。3 .Void Radi

7、xSort(Record r,int length)Length个记录存放在数组r中,执行本算法进行基数排序后,链表中的记录将按关键字从 小到大的顺序链接。5. void arrange(SLinkList *l)对静态表进行整序6.1 nt search_bin(SLList l,char key)二分查找7. void GetData(SLinkList *L)从键盘获得数据。8. void SLListTraverse(SLinkList *L)遍历"静态表9. int Equal(char key1,char key2)判断相等10. int Little(char key1

8、,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+) 初始化队列队列的头指针=0;全部为0对列的尾指针=0;全部为0p=第一个数据在数组中的位置while(第一个数据在数组中的位置!=0)上=第一个数据的第i位在第几个队列数据结构课程设计报告第 5 页,共 页if(头指针二=0)头指针二第一个数据载表中的位置;else该队列已有数据的

9、下一个位置=p否则将该数在静态链表中的位置放在在同一个 队列的数据之后尾指针=p;tialj=该数在静态链表中的位置p=下一个数据的位置值;void Collect_n(RecordType r,shuzi head,shuzi tail)/收集重新构成链表int j=0,t;while(headj=0)+j;/找第一个不为空的队列r0.next=headj;t=tailj;/把 headj给第一个数据的位置while(j<9)+j;while(j<9)&&(headj=0)找到不为 0 的队列+j;if(headj!=0)rt.next=headj;t=tailj

10、;rt.next=0;/使最后一个数的 next=0void radixsort(SLinkList *l)基数排序数据结构课程设计报告第6页,共 页int n=l->length;数组的长度zimu head,tail;shuzi heads,tails;for(int i=0;i<=n-1;i+)l->ri.next=i+1;初始化静态链表,确定静态链表的各个元素的位置l->rn.next=0;使最后一个数的next等于0for(i=6;i>2;i-)Distribute_n(l->r,i,heads,tails); 调用分配函数Collect_n(l-

11、>r,heads,tails);调用收集函数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,tai调用分配函数Collect_n(l->r,heads,tails);调用收集函数void arrange(SLinkList *l)整序int p,q;RecordType buf;建立中间变量p=第一个元素在表中的位置;p指向第一个元素在表中的位置for(int i=1;i< 表的长

12、度;i+)数据结构课程设计报告第7页,共 页while(p<i)p=第p个元素的下一个数在表中的位置;4=第p个元素的下一个数在表中的位置;if(p!=i)buf=第p个元素的地址;第p个元素的地址=第i个元素的地址;交换第i个元素的地址与第p个元素的地址第i个元素的地址=buf;第i个元素的下一个数在表中的位置=p; p=q;void GetData(SLinkList *L) 获得数据char key='0'int j=1;cout<<”请输入车牌号码及车名与车主名,用#结束"<<endl;cout<<"例如:0

13、1B3456"<<endl;cout<<"车牌号="for(int i=0;i<7;i+)cin>>key;输入数据第一个数据的车牌号码=key;cout<<"车名:";cin>>第一个数据的车名;cout<<"车主名:";cin>>第一个数据的车主名;while(key!='#')数据结构课程设计报告第 17 页,共 页j+;cout<<endl<<"车牌号="for(int

14、 i=0;i<7;i+) cin>>key; 输入第j个数据的车牌号码if(key='#') j-;break;第j个数据的车牌号码=key;if(key='#') break;cout<<"车名:";cin>>L->rj.carname;cout<<"车主名:";cin>>L->;L->length=j;int binsearch(SLinkList *L,char s7)折半查找int k=0,sum=0,ss=0,mid

15、,high,low=1;high=L->length;while(low<=high) mid=(high+low)/2;if(Equal(s,L->rmid.key)return(mid);调用判断相等函数else if(Little(s,L->rmid.key)high=mid-1;调用比较大小函数else low=mid+1;return(0);四设计与调试分析1 .车牌号管理1.1 初始化输入数据,车牌号码,车主名以及车名。从键盘输入需要的数据 如车牌号:20W4521车名bmw 车主名zzx车牌号:11F4587 车名lanbogine车主名zzp车牌号:55

16、F1254 车名benz车主名xclD: '课程设计"课程设计代内D花,、车牌号管理系统6 &请选择5退出2 .遍历表 3 ,对车牌号挑序il码&21 号45K5牌明刖ZX 车皿=2训论 人.一号:b名 需牌名主 请例丰44与车王名,用7,结束慢号=11F45R7 名:lanbofine 车主名:zzp号:b名牌名主攀jit.初始化表加入数据2 ,遍历表 3 ,对车牌号排序4 .折半查找必须先排好序 5退出初始化成功1.2将表中的内容输出-D: '课程诳计程设计代内建车牌号管理系统. 车牌亭11磊5叩不 各:lanboine车主名:22P 车牌号4sp

17、i鸡4 车名:benz 车主名:xcl法连择工,初始化表加入数据 £.遍历表 3.对车牌号排序4 .折半查找(必须先排好序) 港出2庠牌号车名 车主名20W452111F458755F1254Irniu 22 x Janbovineszpbenz xcl请选择1 初始化表加入数据 2 ,遍历表 "对本牌号排序4.折半查找工必须先排好序 E退出遍历成功。车牌号:20W4521车名bmw 车主名zzx车牌号:11F4587 车名lanbogine车主名zzp车牌号:55F1254 车名benz车主名xcl与输入结果一致。1.3对车牌号进行排序,用基数排序的方法。11F4587

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

19、名,若没有 此信息则返回没有此车牌号。六测试成果七附录(源程序清单)#define KEY_SIZE 7#define LIST_SIZE 10#include <iostream> using namespace std;typedef structchar keyKEY_SIZE;char name10;char carname20;int next;RecordType;typedef structRecordType rLIST_SIZE;int length;int keynum;SLinkList;typedef int shuzi10;typedef int zimu

20、26;void InitSLList(SLinkList *L)/链表初始化L->length=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;elsertai皿next=p;tailj=p;p=rp.next;void Distribute_c(Rec

21、ordType r口,int i,zimu head,zimu tail)字母分配int p,j;for(j=0;j<=25;j+)headj=0;tailj=0;p=r0.next;while(p!=0)j=int(int(rp.keyi)-'A');if(headj=0)headj=p;else rtai皿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;

22、while(j<9)+j;while(j<9)&&(headj=0)+j;if(headj!=0)rt.next=headj;t=tailj;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;第 17页,共 页数据结构课程设计报告while(j<25)+j;while(j<25)&&(headj=0)+j;if(headj!=0)rt.next=head

23、j;t=tailj;rt.next=0;void radixsort(SLinkList *l)基数排序int n=l->length;zimu head,tail;shuzi heads,tails;for(int i=0;i<=n-1;i+)l->ri.next=i+1;l->rn.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); 调用

24、分配函数Collect_c(l->r,head,tail);调用收集函数数据结构课程设计报告第 20 页,共 页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;i<l->length;i+)while(p<i)p=l->rp.ne

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

26、l;cout<<"车牌号="for(int i=0;i<7;i+)cin>>key;L->r1.keyi=key;cout<<"车名:"cin>>L->r1.carname;cout<<"车主名:"cin>>L->;while(key!='#')j+;cout<<endl<<"车牌号="for(int i=0;i<7;i+)cin>>key;if(k

27、ey='#') j-;break;L->rj.keyi=key;if(key='#') break;cout<<"车名:"cin>>L->rj.carname;cout<<"车主名:"cin>>L->;数据结构课程设计报告第20页,共 页L->length=j;)void SLListTraverse(SLinkList *L)遍历静态表(int i,j;cout<<endl;cout<<"车牌号&quo

28、t;<<""<<"车名"<<""<<"车主名"<<endl<<endl;for(i=1;i<=L->length;i+)(for(j=0;j<7;j+)cout<<L->ri.keyj;cout<<" "<<L->ri.carname<<""cout<<L-><<endl;)int E

29、qual(char key1口,char key2口)/判断相等(for(int i=0;i<7;i+)if(key1i!=key2i) return 0;return 1;int Little(char key1口,char key2口)判断较小for(int i=0;i<7;i+)数据结构课程设计报告第 23 页,共 页if(key1i<key2i) return 1;else if(key1i>key2i) return 0;/折半查找return 0;int binsearch(SLinkList *L,char s7)int k=0,sum=0,ss=0,mi

30、d,high,low=1;high=L->length;while(low<=high)mid=(high+low)/2;if(Equal(s,L->rmid.key)return(mid);else if(Little(s,L->rmid.key)high=mid-1;else low=mid+1;return(0);void main()int i;SLinkList l;docout<<”请选择1.初始化表加入数据2.遍历表3.对车牌号排序4折半查找(必须先排好序)5退出"<<endl;cin>>i;switch(i)

31、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;cout<<"请输入要查找的车牌号码"<<endl;cin>>s;find=binsearch(&l,s);if(find)cout<<”在表中的位置为"<<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论