资源描述:
《09级ds(超市密码存储箱系统设计与实现等)实验代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、超市密码存储箱系统的设计与实现设计方案(1)存储结构类型定义/*密码箱的存储结构类型定义*/Typedefstructnode{Intnum;/*箱子的号码*/Longintpassword;/*箱子的密码(满箱有,空箱无)*/Structnode*next;/*指向下个结点的指针*/}node,*linklist;(2)主要功能函数设计①建立链表:最初所有的箱子为空,按照序号依次插入链表L1中,链表L2为空。LinkListCreatelist1﹙﹚/*建立空箱子链表L1,初始时共12个结点*/{IntI;Linklisthe
2、ad,p,q;Head=(node*)malloc(sizeof(node));/*创建头结点*/Head→next=NULL;P=head;For(i=1;i﹤=12;i++)/*依次建立12个结点,并插入链表中*/{q=(node*)malloc(sizeof(node));q→num=i;/*每个结点的编号*/q→next=p→next;/*将结点插入链表*/p→next=q;p=q;}Returnhead;/*返回链表的头结点*/}LinklistCreatelist2﹝﹞/*建立满箱子链表L2,初始时为空*/{Link
3、listhead;Head=(node*)malloc(sizeof(node));/*创建头结点*/Head→next=NULL;Returnhead;/*返回链表的头结点*/}②寻找空箱子:判断链表L1是否为空,若不空,则取出第一个结点(即将其从链表L1中删除),然后随机产生一个6位密码,并将此密码依次与链表L2中所有结点的密码相比较,若发现有重复,则重新生成一个密码,直到没有重复为止。将密码写入此箱子结点的password域,然后将此节点插入L2链表。Longintmima﹝﹞/*密码产生函数*/{Longn,m;Rand
4、omize﹝﹞;M=random(9)+1;N=(m*100000+random(1000000))℅1000000;/*产生6位数的密码*/Return(n);}Intcompare(linklisthead,longintx)/*比较是否有重复的密码,若有返回0,无则返回1*/{Node*q;For(q=head;q!=NULL;q=q→next)/*在链表中搜索*/{If(q→password==x)Return0;}Return1;}LinklistDelnode(Linklisthead)/*在链表中删除第一个结点*/
5、{Node*p;P=head→next;Head→next=p→next;Returnp;}Voidinsertnode(linklisthead,node*p)//在链表头结点后插入一个结点{P→next=head→next;Head→next=p;}③取包:输入密码,在链表L2中依次查找是否有与顾客输入密码相符的结点,找到后取出该结点,将其从链表L2中删除,然后将其插入链表L1中。Linklistpcompare(Linklisthead,longintx)//开箱前查看是否有此箱,若有将它从L2中删除,返回指向它的指针{N
6、ode*p,*q;For(p=head,q=head→next;q!=NULL;q=q→next){If(q→password==x){P→next=q→next;Returnq;/*返回指向此箱的结点*/}elsep=q;}ReturnNULL;/*若无此箱则返回空指针*/(3)实现程序#include”graphics.h”#include”stdlib.h”#include”stdio.h”#include”string.h”#include”time.h”Typedefstructnode{Intnum;Longintp
7、assword;Structnode*next;}node,*linklist;/*在屏幕上画出箱子,共12个,3行四列,箱体为蓝色*/VoidDrawBox(){intx,y,i=1;Charst[3];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)
8、{itoa(i,st,10);floodfill(x+30,y+30,3);outtextxy(x+20,y+25,st);//在每个箱子上标上箱子的编号:1-12i=atoi(st);i++;}}Intdm(intx)//辅助计算机填充坐标的参数{Intm;M