11特殊矩阵的压缩存储算法的实现.docx
- 文档编号:25926537
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:51
- 大小:635.30KB
11特殊矩阵的压缩存储算法的实现.docx
《11特殊矩阵的压缩存储算法的实现.docx》由会员分享,可在线阅读,更多相关《11特殊矩阵的压缩存储算法的实现.docx(51页珍藏版)》请在冰豆网上搜索。
11特殊矩阵的压缩存储算法的实现
软件综合课程设计
实时监控报警系统
图书借阅管理系统
二〇一四年六月
目录
一、实时监控报警系统3
1.问题陈述3
2.需求分析3
3.概要设计3
4.程序代码7
5.运行结果与测试12
6.设计体会与总结14
二、图书借阅管理系统14
1.问题陈述15
2.需求分析15
3.概要设计15
4.程序代码16
5.运行结果与测试34
6.设计体会与总结35
一、实时监控报警系统
1.问题陈述
1)采用一定的存储结构存储报警信息,要示有内容、时间;
2)有一次的出警就应该是在待处理的信息中删除这条信息;
3)记录出警信息;
4)待处理信息过多时会发出警告;
2.需求分析
图1
(1)报警:
编号、时间、内容
(2)出警:
1)按编号处理
2)按时间处理
(3)查询警备情况:
1)报警情况
2)出警情况
(4)存储结构:
存储信息
通过运用所学习的知识:
1)用链表存储结构来存储信息,报警信息存入链表A中。
2)出警信息是在A的基础上设计的,即是首先找到要处理的信息所在的位置,然后把其在A的信息删除,用链表B来存储所删除信息所在的结点。
将B中信息输出就得到了出警信息。
3)对链表A进行遍历,当结点数大于限制个数,就发出警告。
3.概要设计
由上述可知,本次是使用链表来解决问题的。
因涉及到链表中结点问题,所以链表中结点的类型是结构体。
Typedefstruct{
Intnum;//编号
Chartime[30];//时间
}datatype;
Typedefstructnode{
Datatypedata;
Structnode*next
}Listnode;
其用到的数据结构为:
主要思路:
如图1所示:
(1)在main函数中输出一个菜单,让用户选择所需要执行的操作,主要是:
报警、出警、查看情况和退出系统。
(2)在子函数中有以下四种
1)报警函数:
voidinsertnode(linklisthead,Listnode*x);
2)出警函数:
intdelnode(linklisthead,Listnode*x);
3)查看情况函数:
Listnode*listfind(linklisthead);
4)输出函数:
voidprintlist(linklisthead);
4.详细设计
(1)链表结构:
typedefstruct
{
intnum;//序号
chartime[30];//时间
charmatter[50];//内容
}datatype;
typedefstructnode
{
datatypedata;
structnode*next;
}listnode;//链表,定义了指向listnode结构体的指针类型
Listnode*linklist,*A,*B;
A为未处理的报警信息,B为已处理的报警信息,即出警信息。
(2)主函数:
主函数使用switch语句,case1解决报警问题,调用插入函数并记录信息,同时对此链表进行遍历以检查结点数是否超出要求,具体如下:
遍历:
Intjj=0;
h=A->next;
While(h){
jj++;
h=h->next;
}
if(jj>9){
printf(“累计多次警务未处理,建议立即处理警务!
”);
break;
}
插入函数:
Voidinsertnode(linklisthead,Listnode*x)
{Listnode*p1,*p2;
p1=head;
p2=p1->next;
While(p2!
=NULL&&(p2->data.num
p1=p2;
p2=p2->next;
}
p1->next=x;
x->next=p2;}
case2中调用删除函数,采用两种方式1)按编号2)按时间,具体如下:
查找所需要的结点:
listnode*listfind(linklisthead)
{
//查找某节点
listnode*p;
intnum;
chartime[30];
intn;
//两种查找方式
cout<<"\t\t1:
按编号查询"< cout<<"\t\t2: 按时间查询"< cout<<"\t\t请选择: "< p=head->next; cin>>n; if(n==1){ cout<<"请输入要查询的编号: "< cin>>num; while(p&&(p->data.num p=p->next; if(p==NULL||(p->data.num p=NULL;//没查到返回空 } else if(n==2){ cout<<"请输入要查找的时间: "< cin>>time; while(p&&strcmp(p->data.time,time)! =0)//这里是判断两个字符串是否相同,用strcmp() p=p->next; } returnp; } 删除该结点的信息: intdelnode(linklisthead,listnode*g) { listnode*p,*q; p=listfind(head);//执行查找函数 if(p==NULL){ cout<<"没有查找到该事件"< return0; } else { q=head;//保存头结点 while(q! =NULL&&q->next! =p) q=q->next; q->next=p->next; *g=*p; deletep; return1; } } case3中则是调用输出函数,主要是将链表B中信息输出,具体如下: voidprintlist(linklisthead){ listnode*p; p=head->next;//将第一个节点赋给p if(p==NULL){ cout<<"没有信息! "< return;//返回空 } cout<<"编号,时间,内容"< while(p! =NULL) { cout< p=p->next;} } 4.程序代码 #include #include #include #include #include usingnamespacestd; typedefstruct { intnum;//序号 chartime[30];//时间 charmatter[50];//内容 }datatype; typedefstructnode { datatypedata; structnode*next; }listnode;//链表,定义了指向listnode结构体的指针类型 typedeflistnode*linklist;//定义了指向listnode结构体的指针类型 listnode*listfind(linklisthead);//查找 voidinsertnode(linklisthead,listnode*x);//报警及出警保存记录(相当于链表的插入) intdelnode(linklisthead,listnode*x);//出警(相当于链表的删除,但该过程出警后,要在删除之前把节点插入到另一个链表中(保存记录的链表)) voidprintlist(linklisthead);//输出所有未出警的和已出警的信息 //主函数 voidmain() { //ofstreamout("f: /vctxt/实时监控报警系统1数据.txt"); intjj=0;//jj表示未处理数量 listnode*A,*B;//A是未处理,B是已出警 A=newlistnode;//申请内存 B=newlistnode; A->next=NULL;//把指针域置空 B->next=NULL; while (1){ cout<<"\t**********************************"< cout<<"\t**********************************"< cout<<"\t欢迎使用实施控制报警系统"< cout<<"\t1: 报警"< cout<<"\t2: 出警"< cout<<"\t3: 查询出警情况"< cout<<"\t4: 退出"< cout<<"\t**********************************"< cout<<"\t**********************************"< cout< L1: cout<<"请选择功能(1~4): "< intk; cin>>k; while(k<=0||k>=5) { cout<<"输入错误! \n"< gotoL1; } switch(k) { case1: listnode*h; h=A->next; while(h){ //确定多少节点 jj++; h=h->next; } if(jj>9){ cout<<"累计多次警务未处理,建议立即处理警务! "< break; } else { cout<<"请输入: "< cout<<"编号,时间,内容: "< listnode*x; x=newlistnode; cin>>x->data.num>>x->data.time>>x->data.matter; insertnode(A,x); cout<<"已报警! "< } break; case2: listnode*y; y=newlistnode; if(delnode(A,y))//成功执行下列语句,如不成功,提示并返回 { cout< cout<<"已出警! "< insertnode(B,y);//出警之后在把节点信息插入到B中保存记录 } break; case3: cout<<"未处理的警务有: "< printlist(A); cout<<"已处理的警务有: "< printlist(B); break; case4: cout<<"感谢您的使用! "< exit(0);//正常结束程序运行 } } } //报警功能 voidinsertnode(linklisthead,listnode*p){ listnode*p1,*p2; p1=head; p2=p1->next; while(p2! =NULL&&(p2->data.num {//寻找插入位置 p1=p2; p2=p2->next; } p1->next=p;//按编号大小顺序插入 p->next=p2; } //查找功能 listnode*listfind(linklisthead) { //查找某节点 listnode*p; intnum; chartime[30]; intn; //两种查找方式 cout<<"\t\t1: 按编号查询"< cout<<"\t\t2: 按时间查询"< cout<<"\t\t请选择: "< p=head->next; cin>>n; if(n==1){ cout<<"请输入要查询的编号: "< cin>>num; while(p&&(p->data.num p=p->next; if(p==NULL||(p->data.num p=NULL;//没查到返回空 } else if(n==2){ cout<<"请输入要查找的时间: "< cin>>time; while(p&&strcmp(p->data.time,time)! =0)//这里是判断两个字符串是否相同,用strcmp() p=p->next; } returnp; } //出警功能 intdelnode(linklisthead,listnode*g) { listnode*p,*q; p=listfind(head);//执行查找函数 if(p==NULL){ cout<<"没有查找到该事件"< return0; } else { q=head;//保存头结点 while(q! =NULL&&q->next! =p) q=q->next; q->next=p->next; *g=*p; deletep; return1; } } //输出功能 voidprintlist(linklisthead){ listnode*p; p=head->next;//将第一个节点赋给p if(p==NULL){ cout<<"没有信息! "< return;//返回空 } cout<<"编号,时间,内容"< while(p! =NULL) { cout< p=p->next; } } 5.运行结果与测试 6.设计体会与总结 通过这次的课程设计,从整体上学习到了从选题到开始分析程序的组成再后来的编写程序、程序调试和进行一定的修改。 这次的课程设计不仅仅是学习到了如何系统的运用自己已经学习的知识,也学习到了课程设计不是说只有是编写出程序更重要的是要学会如何分析一个程序,在这个的基础上才是如何编写出一个程序。 在这次的学习中我也学习到了要学会查找书本资料,因为自己的想法在实现的时候总是有着或多或少的问题的,在这个时候就需要去参考书本资料,这些的资料总是对分析问题的时候有着一定的问题。 总体上来说在这次的课程学习中学习到了许多的知识,想必这些知识在以后的学习中一定是帮助的。 二、图书借阅管理系统 1.问题陈述 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息); 系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、等管理过程。 2.需求分析 (1)图书修改功能: 能对图书借阅系统存储的信息进行修改。 提供两种修改方式,如按照图书编号修改、按照书名修改。 图书编号是图书记录的自然顺序编号。 (2)图书删除功能: 能对图书借阅系统的图书信息进行删除。 删除时以记录为单位,能一次删除一条记录。 (3)借书功能: 能对借出的图书作记录信息,能一次借出一本图书。 (4)还书功能: 能将被借出的图书信息还原,能一次借出一本图书。 (5)保存功能: 能将记录保存到文件中。 (6)最后,退出该系统。 3.概要设计 本程序主要出是运用链表和指针,大体上与第一个程序是一样的。 主要用的是链表和指针具体如下: 1)建立一个链表用于存放图书信息 typedefstructbook//书的结构体 { intmembernum;//借书人编号 charname[80];//图书名 longnum;//图书编号 intyes;//判断书是否存在或者已经借出,1存在,0借出 structbook*next;//结点指针 }Book,*BookList; 2)用于存放会员信息 typedefstructmember//会员的结构体 { charname[20];//会员姓名 charsex;//会员性别,男M,女F longnum;//会员编号 intmax;//会员借书数目,初始为0 intyes;//会员是否借书,1是,0否 BBookt[MAX];//会员借的书的数组 structmember*next;//结点指针 }Member,*MemberList; 4.程序代码 #include #include #include #include #include #include #include #defineMAX10//会员最大借阅量 typedefstructbook//书的结构体 { intmembernum;//借书人编号 charname[80];//图书名 longnum;//图书编号 intyes;//判断书是否存在或者已经借出,1存在,0借出 structbook*next;//结点指针 }Book,*BookList; typedefstructBorrowBook//会员借的书的结构体 { longnum;//借的书的编号 }BBook; typedefstructmember//会员的结构体 { charname[20];//会员姓名 charsex;//会员性别,男M,女F longnum;//会员编号 intmax;//会员借书数目,初始为0 intyes;//会员是否借书,1是,0否 BBookt[MAX];//会员借的书的数组 structmember*next;//结点指针 }Member,*MemberList; //查询图书 intSearch_BookName(BookList&H)//按书名查询 { Book*p; p=H->next; charn[80]; intflag=0; cout<<"输入要查询的书名: "; cin>>n; for(;p! =NULL;p=p->next) { if(strcmp(p->name,n)==0) { if(flag==0) cout< cout< if(p->yes==1) cout< else cout< flag=1; continue; } } cout<<"===================================="< if(p==NULL&&flag==0) { cout<<"没有相关信息! "< cout<<"===================================="< } return1; } //增加图书 Book*Init_B()//初试化图书链表 { Book*H; H=(Book*)malloc(sizeof(Book)); if(! H)exit (1); H->next=NULL; returnH; } //建立一个带头结点的链表用来存储图书信息 intBookAdd(BookList&H) { inti=0;//统计要增加的图书量 Book*p,*q; p=(Book*)malloc(sizeof(Book)); if(! p) exit (1); if(H->next==NULL) { cout<<"输入图书编号: "; cin>>p->num; if(p->num==0)//退出"增加图书" { cout<<"共计"< "< cout<<"===================================="< return1; } cout<<"输入书名: "; cin>>p->name; p->yes=1;//1表示没有借出 p->next=NULL; H->next=p; q=p; ++i; cout< } else { q=H; while(q->next! =NULL) q=q->next; p->num=1;//进入循环的条件 p->next=NULL; } while(p->num! =0)//以图书编号作为判断链表是否结束 { p=(Book*)malloc(sizeof(Book)); if(! p) exit (1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 特殊 矩阵 压缩 存储 算法 实现