资源预览内容
第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
第9页 / 共20页
第10页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
超市密码存储箱系统地设计与实现设计方案(1)存储结构类型定义/* 密码箱地存储结构类型定义*/TypedefstructnodeInt num;/* 箱子地号码 */Longintpassword;/*箱子地密码(满箱有 ,空箱无) */Struct node *next;/*指向下个结点地指针 */node ,*linklist;(2)主要功能函数设计建立链表:最初所有地箱子为空 ,按照序号依次插入链表 L1 中,链表 L2 为空 . LinkList Createlist1 /* 建立空箱子链表 L1,初始时共 12 个结点 */ Int I ;Linklist head,p,q;Head=(node * )malloc(sizeof(node);/*创建头结点 */Headnext = NULL;P =head;For(i = 1;i=12;i+ )/*依次建立 12 个结点 , 并插入链表中 */q=(node *)malloc(sizeof(node);qnum = i;/*每个结点地编号*/qnext = p next;/*将结点插入链表 */p next = q; p = q;Return head;/*返回链表地头结点*/Linklist Createlist2/*建立满箱子链表L2, 初始时为空*/Linklist head;Head =(node *)malloc(sizeof(node); /*创建头结点*/Headnext =NULL;Return head;/*返回链表地头结点*/寻找空箱子:判断链表 L1 是否为空 , 若不空 , 则取出第一个结点(即将其从链表 L1 中删除) , 然后随机产生一个 6 位密码 , 并将此密码依次与链表 L2 中所有结点地密码相比较 , 若发现有重复 , 则重新生成一个密码 , 直到没有重复为止 . 将密码写入此箱子结点地 password 域, 然后将此节点插入 L2 链表 . 矚慫润厲钐瘗睞枥庑赖。Long int mima /*密码产生函数 */Long n,m;Randomize ;M = random(9)+1;N=(m*100000 +random(1000000) 1000000;/*产生6 位数地密码*/聞創沟燴鐺險爱氇谴净。Return(n);Int compare(linklist head,long int x) /*比较是否有重复地密码, 若有返回 0, 无则返回 1*/ 残骛楼諍锩瀨濟溆塹籟。Node *q;For(q =head;q!=NULL;q=qnext)/*在链表中搜索*/If(qpassword = x)Return 0;Return 1;Linklist Delnode(Linklist head)/*在链表中删除第一个结点*/Node *p;P=headnext;Head next =p Return p; next;Void insertnode(linklist head,node*p)/在链表头结点后插入一个结点 酽锕极額閉镇桧猪訣锥。Pnext=head next;Head next =p;取包:输入密码 , 在链表 L2 中依次查找是否有与顾客输入密码相符地结点,找到后取出该结点 , 将其从链表 L2 中删除 , 然后将其插入链表L1 中. 彈贸摄尔霁毙攬砖卤庑。Linklist pcompare(Linklist head,long int x)/ 开箱前查看是否有此箱 , 若有将它从 L2 中删除 , 返回指向它地指针 Node *p,*q;For(p =head,q =headnext; q!=NULL;q=q next)If (qpassword = x)Pnext=q next ;Return q;/*返回指向此箱地结点*/else p=q;Return NULL;/*若无此箱则返回空指针*/(3) 实现程序#include”graphics.h”#include”stdlib.h”#include”stdio.h”#include”string.h”# include”time.h ”Typedef struct nodeInt num;Long int password;Struct node *next;node,*linklist;/*在屏幕上画出箱子, 共12 个,3行四列 , 箱体为蓝色*/Void DrawBox( ) int x,y,i=1; Char st3; Setcolor(3);For(x=300;x =500;x+=50) Line(x,50,x,200);For(y=50;y=200;y+=50)Line(300,y,500,y); Setfillstyle(SOLID_FILL,1); For(y=50;y=150;y+=50) For(x=300;x =450;x+=50)itoa(i,st,10);floodfill(x+30,y+30,3);outtextxy(x+20,y+25,st); /在每个箱子上标上箱子地编号:1-12i=atoi (st);i+; Int dm(int x) /辅助计算机填充坐标地参数Int m;M=x%4;If(m=0)m=4;Return m;Int dn(int x) /辅助计算机填充坐标地参数int n;If(x=4) n=1;Elseif(x8) n=2;Else if(xnext=NULL)Printf(“满箱! n ”);Elsep=DelNode(head1); /将其从链表 L1 中删除P-password=MiMa( ); /生成密码While(!compare(head2,p-password)/ 若密码重复 , 则重新生成 P-password=MiMa( );Printf(“% 1dn ”, p-password );InsertNode(head2,p); /将其从插入链表L2 中M=dm(p-num);N=dn(p-num);Fillcolor(300+m*50-10,50+n*50-10,4); /将此箱子变为红色If(k= 2)printf(“请输入密码:”) ;Scanf( “% 1d”,&t);If(head2-next!=NULL)p=pcompare(head2,t);Ip(p=NULL) continue;InsertNode(head1,p);M=dm(p-num);N=dn(p-num);Fillcolor(300+m*50-10,50+n*50-10,1); /将此箱子变为蓝色哈夫曼编码 / 译码系统案例描述.#
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号