首页 【数据结构】汽车牌照的快速查询

【数据结构】汽车牌照的快速查询

举报
开通vip

【数据结构】汽车牌照的快速查询【数据结构】汽车牌照的快速查询 东北大学信息科学与工程学院 数据结构课程设计报告 题目 汽车牌照的快速查询 课题组长 肖瑶 课题组成员 陈果 张帅 专业名称 计算机科学与技术 班级 计算机1307 指导教师 杨雷 2015 年 1月 - 1 - 课程设计任务书 题目: 汽车牌照的快速查询 问题描述: 在汽车数据的信息模型中,汽车牌照是具有结构特点的一类关键字。汽车牌照是字母和数字混编的,例如01B7238。利用查找和排序算法,实现辽宁省内汽车牌照的快速查找。 设计要求: 设计汽车牌...

【数据结构】汽车牌照的快速查询
【数据结构】汽车牌照的快速查询 东北大学信息科学与工程学院 数据结构课程设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 题目 汽车牌照的快速查询 课题组长 肖瑶 课题组成员 陈果 张帅 专业名称 计算机科学与技术 班级 计算机1307 指导教师 杨雷 2015 年 1月 - 1 - 课程设计任务书 题目: 汽车牌照的快速查询 问题描述: 在汽车数据的信息模型中,汽车牌照是具有结构特点的一类关键字。汽车牌照是字母和数字混编的,例如01B7238。利用查找和排序算法,实现辽宁省内汽车牌照的快速查找。 设计要求: 设计汽车牌照的快速查询程序。 (1)采用顺序表、静态链表等数据结构。 (2)利用静态链表对汽车牌照进行链式基数排序。 (3)采用折半查找汽车牌照。 (4)可以按城市进行分块索引查找。 (5)其它完善性功能。 指导教师签字: 2014年12月24日 - 2 - 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 1 课题概述 .................................... 1 1.1 课题任务 .................................. 1 1.2 课题原理 .................................. 1 1.3 相关知识 .................................. 3 2 需求分析 .................................... 2 2.1 课题调研 .................................. 2 2.2 用户需求分析 .............................. 2 3 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 设计 .................................... 2 3.1 总体功能设计 .............................. 2 3.2 数据结构设计 .............................. 2 3.3 函数原型设计 .............................. 2 3.4 主算法设计 ................................ 3 4 方案实现 .................................... 7 4.1 开发环境与工具 ............................ 7 4.2 程序设计关键技术 ........................... 7 4.3 个人设计实现(按组员分工) 4.3.1 肖瑶设计实现 ............................ 7 4.3.1 张帅设计实现 ........................... 10 4.3.1 陈果设计实现 ........................... 14 5 测试与调试 ................................. 12 5.1 个人测试(按组员分工) ........................... 12 5.1.1 肖瑶测试 ............................... 12 5.1.2 张帅测试 ............................... 14 5.1.3 测试 ................................... 15 - 3 - 5.2 组装与系统测试 ........................... 15 6 课题总结 ................................... 17 6.1 课题评价 ................................. 17 6.2 团队协作 ................................. 17 6.3 下一步工作 ............................... 17 6.4 个人设计小结(按组员分工) ................. 18 6.4.1 肖瑶设计小结 ........................... 18 6.4.2 陈果设计小结 ........................... 18 6.4.3 张帅设计小结 ........................... 19 7 附录A 课题任务分工 ......................... 20 A-1 课题程序设计分工 .......................... 20 A-2 课题报告分工 ............................. 21 附录B 课题设计文档(光盘) ................... 22 B-1课程设计报告(电子版) ..................... 22 B-2源程序代码(*.H,*.CPP) ................... 22 B-3工程与可执行文件) ........................ 22 B-4屏幕演示录像文件(可选) ................... 22 附录C 用户操作手册(可选) .................... 22 C.1 运行环境说明 ............................. 22 C.2 操作说明 ................................. 22 课题概述 - 4 - 1.1课题任务 在汽车数据的信息模型中,汽车牌照是具有结构特点的一类关键字。汽车牌照是字母和数字混编的,例如01B7238。利用查找和排序算法,实现辽宁省内汽车牌照的快速查找。 设计汽车牌照的快速查询程序。 (1)采用顺序表、静态链表等数据结构。 (2)利用静态链表对汽车牌照进行链式基数排序。 (3)采用折半查找汽车牌照。 (4)可以按城市进行分块索引查找。 (5)其它完善性功能。 1.2 课题原理 通过输入汽车牌照信息,保存在一个文件中。程序从文件中读入信息,把车牌号码转换成相应的关键字并把车牌信息和关键字保存在链表中。再通过链式基数排序算法整理这些信息便于查找,最后通过折半查找算法实现快速查找功能。 1.3 相关知识 一个汽车牌照相当于一辆汽车的身份证,因此通过查询汽车牌照便可知道这辆汽车的主人、品牌等信息。汽车牌照是由汉子、字母及数字组成,即多关键字,其中数字和字母的比较1容易实现的,考虑到汉字的存储等各方面的原因,对汉字的排序并不是很容易就能完成的,因此不能直接对汉字排序。但特殊的是,汽车牌照中的汉字是各个省、直辖市及自治区的简称(比如辽代表辽宁,京代表北京),一共34个。但是由于汉语拼音可以和英文字母相互转换,因此可以按照汉语拼音的 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 进行排序。 需求分析 - 5 - 2.1 课题调研 汽车牌照由汉子、字母、数字组成,一汉字+字母+数字方式呈现。要实现对车牌号码的排序与查找就得想办法把汉字和字母转换成数字。 2.2 用户需求分析 能对车牌号码实现链式基数排序,并能用查找算法让用户户能根据车牌号码查到相关信息,能够输出车牌信息。 方案设计 3.1 总体功能设计 1.从文件读入数据保存进链表 2.对车牌进行基数排序 3(二分查找查询汽车牌照 4.输出车牌信息 3.2 数据结构设计 程序要求实现对汽车牌照的排序与查找,而如果仅仅进行牌照的排序与查找,则显得 程序没有太大的实用性,所以考虑在程序中加入例如车主的姓名以及车子的品牌等内容来增加程序的实用性。为了能够更好的完成这些功能,在这里选用链表来存储所有车辆的信息,用链表中的单个节点来存储一辆汽车的信息,而对应的各个节点的域中则存储其对应的车辆信息(如车牌号码、车主姓名、车的品牌等信息)。在存储汽车牌照中的汉字时,由于汉字在内存中占用两个字节,需要使用字符串数据来存储。其中的26个字母则使用一个一维字符数组来存储。车主的姓名及车子的品牌则使用一维字符数组来存储。在基数排序时,每趟的数据收集由两个链队列来完成,链队列的个数为基数的个数,两个链队列的队列指针分别指向每组链队列的队头和队尾。 3.3 函数原型设计 main():主函数; Rnode *Setlist():添加车辆函数; void Distribute(Rnode *q,int j):进行基数排序每一趟的分配函数; void Collect():进行基数排序每一趟的收集函数; int Search_Bin((Rnode *q,long int k,int low,int high); void find(Rnode *q):二分查找函数; void menu():菜单函数; void print():输出所有车辆信息函数; Rnode *RadixSort(Rnode *p):基数排序函数; - 6 - 3.4 主算法设计 建立链表,添加汽车牌照信息: 开始 申请一结点p并为其分配内存空间 head=NULL N Y head=p 输入汽车的相应信息,经过相应的处理后 存入结点p相应的域。 将该结点按尾插法插入到链表的相应位 置 返回该链表的头指针 结束 对车牌号码进行基数排序: - 7 - 开始 i=M-1 i>=0 Y N 调用Distribute及 Collect函数 i++ 遍历排序好的链表将每个车辆的牌照号转换为长整型数据存于一个一维数组A[MAX]中。 结束 按车牌号码查询: - 8 - 开始 输入需要查找的牌照 将待查找的牌照号处理 后,存于一整型变量中 调用二分查找函数并返 回c c=-1 Y N 没有查找成功 查找成功并输出该车的 信息 结束 各函数间的关系: menu() Setlist() Distribute() RadixSortCollect() main() () find() Search_Bin() print() - 9 - 菜单界面,选择功能: 开始 输入n N n=1 Y 调用子函数SetList(p) n=p N Y 调用子函数paixu(p) N n=c N Y 调用子函数find(p) N n=s Y N 调用子函数print() N n=q N Y 结果 N N 方案实现 - 10 - 4.1 开发环境与工具 Windows 7,CodeBlocks 4.2 程序设计关键技术 1. 把车牌号码转换成用于比较和排序的关键字:设立一个字符数组存26各大写字母, 再设一个string类型数组存34省、直辖市、自治区各地的简称。那么汉字和字母 就可转化成它们在数组中的位序数字; 2.递归实现二分查找算法; 3.链式基数排序的实现; 4.3 个人设计实现(按组员分工) 4.3.1 肖瑶设计实现 Rnode *SetList()//头插法建立链表,从文件中读取信息保存到链表中 { FILE *f1; Rnode *head,*p,*l; int m,j,k; string r; if((f1=fopen("汽车管理.txt","r"))==NULL) printf("不能打开文件!"); head=NULL; p=(Rnode *)malloc(sizeof(Rnode)); while(fscanf(f1,"%s%s%s",p->key ,p->name ,p->paizi)!=EOF) { //头插法建链表 if(head==NULL) {l=head=p;} else{ l->next=p; l=p; } p=(Rnode *)malloc(sizeof(Rnode)); p->next=NULL; } p=head; while(p!=NULL) { string key1=(string)p->key; string key2=key1.substr(0,2); for(j=0;j33||k<0) { cout<<"==您输入的车牌号码错误,请重新选择输入!"<keynum[0]=s; s=k%10; p->keynum[1]=s; for(int h=0;hkey[2]==name2[h]) m=h; } if(m>25||m<0) { cout<<"==您输入的车牌号码错误,请重新选择输入!"<keynum[2]=s; s=m%10; p->keynum[3]=s; for(int n=3;nkey[n]-48; p->keynum[n+1]=c; } p=p->next; } flag=1; return head; } int Search_Bin(Rnode *q,long int k,int low,int high) //递归实现折半查找 { int mid; if(low>high) return -1; else { mid=(high+low)/2; if(A[mid]==k) - 12 - return mid; else if(k>d; string key1=(string)d; string key2=key1.substr(0,2); for(int j=0;j33||k<0) cout<<"对不起,您输入的车牌号不合法,请重新输入!"<25||m<0) cout<<"对不起,您输入的车牌号不合法,请重新输入!"<next; cout<<"\t\t"<key<<"\t"<name<<"\t\t"<paizi<next; k=p->keynum[j]; if(f[k]==NULL) f[k]=p; else r[k]->next=p; //队尾指针向后移动一位 r[k]=p; r[k]->next=NULL; p=q; } } Rnode *Collect()//基数排序的一趟收集 { Rnode *L; int i=0,j,k; while(f[i]==NULL) i++; L=f[i]; for(j=i,k=i+1;k<=RAX-1;k++) if(f[k]!=NULL) { r[j]->next=f[k]; j=k; } return L; } - 14 - Rnode *RadixSort(Rnode *p)//对车牌号码进行链式基数排序 { Rnode *q; int a=0; for(int i=M-1;i>=0;i--) { Distribute(p,i); q=p=Collect(); } cout<<"==完成对车辆信息的排序!"<keynum[0]*100000000+q->keynum[1]*10000000+q->keynum[2]*1000000+q-> keynum[3]*100000+q->keynum[4]*10000+q->keynum[5]*1000+q->keynum[6]*100+q-> keynum[7]*10+q->keynum[8]; q=q->next; b=a; a++; } flag=0; return p; } 4.3.3 陈果设计实现 void menu() //菜单即主界面 { cout<<"\t\t\t????????????????????"<=0;i--) { Distribute(p,i); q=p=Collect(); } cout<<"==完成对车辆信息的排序!"<keynum[0]*100000000+q->keynum[1]*10000000+q->keynum[2]*1000000+q->keynum [3]*100000+q->keynum[4]*10000+q->keynum[5]*1000+q->keynum[6]*100+q->keynum[7]*10 +q->keynum[8]; q=q->next; b=a; a++; } flag=0; return p; } 测试与调试 5.1 个人测试(按组员分工) 5.1.1 肖瑶测试 - 16 - 5.1.2 张帅测试 - 17 - 排序前: 5.1.3陈果测试 - 18 - 5.2 组装与系统测试 - 19 - - 20 - 课题总结 6.1 课题评价 总的来说这次课程设计我们基本实现了题目所要求的功能,但整体情况不是特别理想有一些缺陷。题目要求我们用静态链,但不知道如何吧文件中的信息读入静态链表,如何把信息插入静态链表。我们试了很多次,但屡试屡败,所以就用了大家都比较熟练的动态链表。另外因为索引查找,我们不知道如何从链表中抽出索引块来,所以没有实现。 这次课程设计也算历经坎坷,由于我们仨编码能力太过薄弱,在很多地方走了不少弯路。 写一个程序的过程不一定是快乐的,但是当程序调试成功的时候一定是激动人心的。从这次实验中,我们都深深认识到实践对于编程能力提高的重要性。我们不能只抱着数据结构钻研而不上机敲代码。通过这次实验,我们深感现实生活中问题的复杂性和灵活性,它不是直接套用树上的算法和数据结构就可以解决的。想解决现实生活中的问题我们必须学会转化,把问题分解然后一一分解再套用书上的数据结构去实现。当我们拿到这个问题时,因为不知道如何比较车牌间的关系,一筹莫展。但是我们想到了利用各种规则把汉字和字母转换成数字,从而整个车牌号码就变成了可以直接比较的关键字。所以我们深感转化问题能力的重要性。 6.2 团队协作 程序开发不是一蹴而就的得慢慢的改,所以小组成员之间的配合特别重要。我们从这次课程设计中体会到了合作和交流的妙处。大家一起交流,能互相启发,有些问题就会迎刃而解。 6.3下一步工作: 做出一个友好的可视化用户界面,完善功能,找出程序中的漏洞。 - 21 - 6.4个人设计小结(按组员分工) 6.4.1肖瑶总结: 通过这次实验巩固了我对数据结构的理解,提高了运用知识解决问题的能力。当我 能看懂书上的算法,实现起来却是一波三折,一种“纸上得来终觉浅”的感慨。可见要 想提高编程能力,光看算法可不行,上机敲代码也相当重要。 在这次实验中我担当组长,这也给了我一个锻炼的机会,让我提高了自己的组织能 力,让我学会了担当,让让我学会了要有全局观念意识。 6.4.2陈果总结: 通过本次课程设计,让我感受到了团队的力量,课程设计刚开始时,小组成员一起思考讨论实际问题的解决方法,每个人都提出了自己的意见和建议,最后达成一致。在接下来的实现过程中,每个人又有自己不同的分工,并在过程中不断交流,优化问题的解决方法。更重要的是,这次课程设计让我有了一次把理论运用于实际的 经验 班主任工作经验交流宣传工作经验交流材料优秀班主任经验交流小学课改经验典型材料房地产总经理管理经验 。在和同学的交流中,在自己亲手编码的过程中加深了对知识的理解。我也深感自己编码能力不大好,所以也让我有了多敲代码、努力提高编程技巧的动力。 6.4.3张帅总结: 这是我第一次做大型的课程设计,在此过程中遇到了很多不懂的问题,发现了自己还有很多不足,在寻找解决方法的过程中也获得了很多难得的心得与感悟。 课程设计是一个查漏补缺、不断完善的过程。通过查找资料,相互学习,使我对课程设计有了一个更清晰的认识,同时我也被先辈们的聪明才智深深折服。程序设计就是寻找一个最优化的方法去解决实际问题,给人们的生活带去方便与快捷。 - 22 - 附录A课题程序设计分工 A-1 课题程序设计分工 学号 姓名 程序设计函数原型、类 功能说明 Rnode *SetList() 建立并从文件添加车辆牌照函 数; 20133993 肖瑶 int Search_Bin(Rnode *q,long int k,int low,int high); 二分查找算法的实现; void find(Rnode *q); 用按车牌用二分查找查询车辆 牌照; void Distribute(Rnode *q,int j); 链式基数排序的一趟分配过 程; 20133997 张帅 Rnode *Collect(); 链式基数排序的一趟收集过 程; Rnode *RadixSort(Rnode *p); 对汽车牌照进行链式基数排 序; 20134002 陈果 void print(Rnode *p); 输出全部汽车牌照信息; void menu(); 程序主界面; - 23 - A-2 课题报告分工 章节 内容 完成人 1 课题概述 1.1 课题任务 1.2 课题原理 肖瑶 1.3 相关知识 2 需求分析 2.1 课题调研 肖瑶 2.2 用户需求分析 3 方案设计 3.1 总体功能设计 3.2 数据结构设计 3.3 函数原型设计 肖瑶 3.4 主算法设计 3.5 用户界面设计 4 方案实现 4.1 开发环境与工具 4.2 程序设计关键技术 肖瑶 4.3 个人设计实现(按组员分工) 4.3.1 肖瑶设计实现 肖瑶 4.3.2 张帅设计实现 张帅 4.3.3 陈果设计实现 陈果 5 测试与调试 5.1 个人测试(按组员分工) 5.1.1 肖瑶测试 肖瑶 5.1.2 张帅测试 张帅 - 24 - 5.1.3 陈果测试 陈果 5.2 组装与系统测试 肖瑶 6 课题总结 6.1 课题评价 6.2 团队协作 肖瑶 6.3 下一步工作 6.4 个人设计心得(按组员分工) 6.4.1 肖瑶设计心得 肖瑶 6.4.2 张帅设计心得 张帅 6.4.3 陈果设计心得 陈果 附录B 课题设计文档(光盘) B-1课程设计报告(电子版) B-2源程序代码(*.H,*.CPP) B-3工程与可执行文件) B-4屏幕演示录像文件(可选) 附录C 用户操作手册(可选) C.1 运行环境说明 C.2 操作说明 B-2源程序代码: #define N 34 //省市自治区的个数 #define K 26 //大写字母的个数 #define RAX 10 //基数的个数 #define MAX 100 //最大能够处理的车辆数 - 25 - typedef struct node{ int keynum[M]; char key[10]; char name[10]; char paizi[10]; struct node *next; }Rnode; string name1[N]={"澳","川","鄂","甘","赣","港","贵","桂","黑","沪","吉","津","晋","京","辽","鲁","闽","内","宁","青","琼","山","陕","苏","台","皖","湘","新","冀","渝","豫","云","藏","浙"}; char name2[K]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; Rnode *f[RAX],*r[RAX]; //*f[RAX],*r[RAX]分别为链队列的队头指针和队尾指针 long int A[MAX]; int flag=0; //记录在查找前是否进行了排序 int b; //汽车牌照转换为数字后最后一个汽车牌照的数组中的下标 Rnode *SetList() { FILE *f1; Rnode *head,*p,*l; int m,j,k; string r; if((f1=fopen("汽车管理.txt","r"))==NULL) printf("不能打开文件!"); head=NULL; p=(Rnode *)malloc(sizeof(Rnode)); while(fscanf(f1,"%s%s%s",p->key ,p->name ,p->paizi)!=EOF) { //头插法建链表 if(head==NULL) {l=head=p;} else{ l->next=p; l=p; } p=(Rnode *)malloc(sizeof(Rnode)); p->next=NULL; } p=head; while(p!=NULL) { - 26 - string key1=(string)p->key; string key2=key1.substr(0,2); for(j=0;j33||k<0) { cout<<"==您输入的车牌号码错误,请重新选择输入!"<keynum[0]=s; s=k%10; p->keynum[1]=s; for(int h=0;hkey[2]==name2[h]) m=h; } if(m>25||m<0) { cout<<"==您输入的车牌号码错误,请重新选择输入!"<keynum[2]=s; s=m%10; p->keynum[3]=s; for(int n=3;nkey[n]-48; p->keynum[n+1]=c; } p=p->next; } flag=1; return head; } void Distribute(Rnode *q,int j) - 27 - { Rnode *p; int i,k=0; for(i=0;i<=RAX-1;i++) f[i]=r[i]=NULL; p=q; while(p!=NULL) { q=q->next; k=p->keynum[j]; if(f[k]==NULL) f[k]=p; else r[k]->next=p; //队尾指针向后移动一位 r[k]=p; r[k]->next=NULL; p=q; } } Rnode *Collect() { Rnode *L; int i=0,j,k; while(f[i]==NULL) i++; L=f[i]; for(j=i,k=i+1;k<=RAX-1;k++) if(f[k]!=NULL) { r[j]->next=f[k]; j=k; } return L; } int Search_Bin(Rnode *q,long int k,int low,int high) { //递归调用折半查找 int mid; if(low>high) return -1; else { mid=(high+low)/2; if(A[mid]==k) return mid; else if(k>d; string key1=(string)d; string key2=key1.substr(0,2); for(int j=0;j33||k<0) cout<<"对不起,您输入的车牌号不合法,请重新输入!"<25||m<0) cout<<"对不起,您输入的车牌号不合法,请重新输入!"<next; cout<<"\t\t"<key<<"\t"<name<<"\t\t"<paizi<key<<"\t"<name<<"\t\t"<paizi<next; } cout<=0;i--) { Distribute(p,i); q=p=Collect(); } cout<<"==完成对车辆信息的排序!"<keynum[0]*100000000+q->keynum[1]*10000000+q->keynum[2]*1000000+q->keynum [3]*100000+q->keynum[4]*10000+q->keynum[5]*1000+q->keynum[6]*100+q->keynum[7]*10 +q->keynum[8]; q=q->next; b=a; a++; } flag=0; return p; } void menu() { - 30 - cout<<"\t\t\t????????????????????"<>n; while(n!=0) { switch(n) { case 1:system("cls"); menu(); cout<<"文件已录入~"<>n; } return 0; } - 32 -
本文档为【【数据结构】汽车牌照的快速查询】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_079973
暂无简介~
格式:doc
大小:264KB
软件:Word
页数:0
分类:交通与物流
上传时间:2017-09-01
浏览量:51