




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告姓名:张晓静学号:1104014006班级:11计本班四班题目实时监控报警系统。建立一个报警和出警管理信息系统。要求:(1)采用一定的存储结构存储报警信息,要求有内容、时间;(2)有一次的出警就应该在待处理的信息中删除这条信息;(3)记录出警信息;(4)待处理信息过多时会发出警告。一、问题分析和任务定义。有题目可知,我们需要建立一个报警、出警系统,这个课题的重点有如下几点:(1)用什么样的存储结构储存报警信息。(2)如何实现报警和出警这两项主要功能。(3)如何将出警信息保存下来,以待查询。(4)报警信息储存过多时需要发出警告。经过一学期的数据结构的学习,我学习到了链表这一种数据结构
2、,考虑到需要储存以及删除一些信息,所以我选择用链表来储存报警信息,且可以将上述的任务要求转化成一下几占:八、(1)用链表储存报警信息以及出警信息。(2) 报警即将输入的信息储存在链表A里,我将会对链表 A进行插入操作,将出警信 息插入到A中;出警则是对储存报警信息的链表进行删除,首先查找到相应的信息,再对链表A进行删除操作,并用链表B储存删除的结点。(3)输出储存在链表 B中的结点信息,即可知道出警信息。(4) 对储存报警信息的链表 A进行遍历,若它的结点个数过多,则发出警告。二、数据结构的选择和概要设计。由以上的问题可知,我选择使用链表这一种数据结构来完成我的程序。由于报警时要求有内容有时间
3、、出警时则可以根据案件的编号或者是报案的时间出警,所以链表中结点的类型是结构体。typedef structint num; /编号 char time30; / 时间char matter50; / 内容datatype;typedef struct no dedatatype data;struct node *n ext ;List no de;所用到的数据结构:numtimen ext 域matter对于本次的课程设计,我的主要思路是:在主函数中输出一个菜单,让用户选择需要执行的操作,包括报警、出警、查看出警记录、退出程序。再编写子函数,子函数有插入函数:void insertnode
4、(linklisthead,Listnode*x);删除函数:intdelnode(linklisthead,List node*x); 查找函数(以便查找到需要删除的出警记录):List node*listfi nd(li nklist head);输出出警记录函数:void prin tlist(li nklist head);完成主要的功能。子函数之间的调用如下:三、详细设计和编码。(1) 链表的结构类型如下:typedef structint num; /编号 char time30; / 时间char matter50; / 内容datatype;typedef struct no
5、dedatatype data;struct node *n ext ;List no de;定义指向List node结构体的指针类型;List node *li nklist, *A,*B;A指向未处理的报警信息的链表头结点,B指向报警信息的链表头结点(2) 编写主函数,主函数中使用 switch()语句,casel:中解决出警问题,调用插入函数,记录下出警记录,并提示用户已经报警成功。但是由于题目要求报警信息储存过多时需要发出警告,首先对链表A进行遍历,若 A的结点个数过多则输出警告信息,如下:设置一个整型变量jj,遍历到链表A有一个结点jj则加1,以此来记录结点的个数。 int jj=
6、O;h=A->n ext;while(h) /通过链表遍历来确定有多少节点jj+;h=h->n ext;if(jj>3) /此时已有3次警务未处理prin tf("累计多次警务未处理,建议立即处理警务!”);break;插入函数 void insertnode(linklist head丄istnode *x);首先在casel中定义一个链表x,要求用户输入报警的信息,包括时间内容编号,将信息存储在x中,再将x插入到链表A中,插入的过程是:首先寻找合适的插入位置,再利用指 针,进行插入。void insertno de(l in klist head,List no
7、de *x)List node *p1,*p2;p仁head;p2=p1- >n ext ;while(p2!=NULL&& ( p2->data. num < x->data .n um ) /寻找插入位置p仁 p2;p2=p2->next ;p1-> next =x; II按编号大小顺序插入x_>next =p2;这样不断地执行casel的操作,就会得到一个从头结点算起编号由小到大的链表,报警操作成功。case2中调用删除函数,其中删除函数del no de()中调用了查找函数,所以先介绍查找函数查找函数分按照编号查找和按时间查找,
8、如果按编号查找,由于链表是从头结点开始编号由小到大的,所以比较需要查找的数字与链表中结点的编号的大小,若需要查找的数字大于链表中结点编号则指针p往后移,直至找到结点,返回指针p。如果按照时间查找,则半段用户输入的时间这个字符串是否与链表结点中的时间字符串相等,若不等指针p还是往后移,直至查找到节点,返回p。List node *listfi nd(li nklist head) II查找某节点List node *p;int num;char time30;int n;printf("tt1.按编号查询n”); II 两种查找方式printf("tt2.按时间查询 n&qu
9、ot;);printf("tt 请选择:n");p=head->next ;sca nf("%d",&n);if(n=1 &&p!=NULL)printf(”请输入要查找的编号:");scan f("%d",&n um);while(p->n ext!=NULL&& (p->data .num <num )p=p->next ;if(p=NULL|(p->data .num <num)p=NULL; II没查到返回空elseif(n=2
10、&&p!=NULL).o-t:mprin tf(”请输入要查找的时间:”);scan f("%s", &time);while(p&&strcmp(p->data .time,time)!=O) /比较字符串是否相同p=p->next ; return p;而删除函数首先查找到需要出警的结点,从p指向的第一个结点开始,检查该结点中的num,或time值是否等于输入的要求删除的那个编号或时间。如果相等就将该结点删除, 如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。int delno de(l in klis
11、t head,List node *g)List node *p,*q;p=listfi nd(head); /执行查找函数if(p=NULL)printf("没有查找到该事件n");return 0;elseq=head;保存头结点while(q!=NULL&&q-> next=p)q->n ext =p->n ext ;*g=*p;free(p);return 1;在case3中则调用输出函数,对储存出警情况的链表B进行输出。先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针 的的指针(即
12、下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到 p指针指 向NULL为止。void prin tlist(l in klist head)List node *p;p=head-> next ; /将第一个节点赋给 pif(p=NULL) printf(" 没有信息!nn”); return; / 返回空prin tf(" 编号 时间 内容n");while(p!=NULL) prin tf("%dt%st%sn",p->data .nu m,p->data.time,p->data.matter);p
13、=p->next ;四、上机调试过程 曾经出现的错误:(1) 在定义结构体的时候,把时间和内容定义的是字符串,但是在主函数中却编写scan f("%d%c%c", &x->data .n um, &x->data .time, &x->data .matter);,导致程序出现死循环的情况。(2) 在查找函数中,要求用户输入按照1、按编号,2、按时间查找,程序里有一个if() 语句,我一开始将里面的条件设为if(n=1),if(拿)这样编写以后程序还是能够运行,但是程序有一个漏洞,就是当你报警一次再出警一次之后,链表里应该没有
14、了之前的记录,女口果再出一次警应该显示“没有信息”,但是实际上再出一次警之后,程序就不能正常显示了。最后仔细查看之后将if里的条件改为if(n=1 &&p!=NULL),考虑到了若出警的链表A为空的情况。五、测试结果及其分析。(1)首先出现菜单界面-S3 C: . Docuiiients and Settings Administrators桌面 新建文件喪Debug实时监(2)报警,输入案件的编号、时间、内容,输入完毕显示用户已经报警。因 C:DoctimentsandSettlngsAdminlstrator桌面、新逢文件火.Debug实时监-口(3)再次报警,多次报警的话
15、会出现警告,提示未处理的信息过多。:-:;欢迎空内容:2 2013.1.2 lose般编号0号-3- 系一 -支一 勇一 一為一 塞n 一 一青一 1U 一一节 一 艮.兄- 扌- - 空-»!- 应理星请岀查退统二系一 警一 报一 空-吨»苗请 蓋一e简岀 查退使二二迎一 欢一(4)出警,按照编号或者时间查找到案件,随后提示已经出警。出警诵裁2 -查简笛善情况请按了 -退岀请擬丄-技编号查询交-按时间查询请选骸溝输入要查找的时间= 2013.1.2! 2013.1.2 loseB岀警¥(5)查询出警情况,将会显示出警的信息,包括案件的编号、报案时间、报案内容。(
16、6)退出程序。欢迎使.鬍出 :杳通 一二感谢您的?Pi'ess anu key to continue六、用户使用说明。(1)程序执行后首先出现的是一个选择菜单,请根据菜单进行选择。(2)在实现报警功能时需要输入编号、 时间和内容可以输入任意字符串。(3)本程序以C语言编写, 过多的功能。七、参考文献。 :1作者:王昆仑、铁道八、附录。#in clude<stdio.h>#in clude<stri ng.h>#in clude<stdlib.h> typedef struct int num; / char time30; / char matte
17、r50; /datatype; typedef struct no de datatype data; struct node *n ext ;List no de,*li nklist; /时间、内容三大项,请注意编号请输入整形字符,可以完成报警、出警、查询出警情况、提示未处理的案件李红书名:数据结构与算法出版地:北京出版商:中国出版社 出版时间:2006年7月第一版。字符串处理编号,这里用int的型在后面比较大小时方便一点 时间内容链表,定义了指向List node结构体的指针类型List node *listfi nd(li nklist head); /void insertno de
18、(l in klist head,List node *x); / 表的插入)int delno de(l in klist head,List node *x); /查找报警及出警保存记录(相当于链出警(相当于链表的删除,但该过程 出警后,要在删除之前把节点插入到另一个链表中(保存记录的链表)void prin tlist(li nklist head); /输出所有未出警的和已出警的信息/* 主函*/void mai n() int k;表示未处理的警务数量int jj=0; jjList node *x;List node *h;List node *y;List node *A,*B;
19、/A是未处理的报警记录的链表头结点,B是已经出警的记录链表A=(List node *)malloc(sizeof(List no de);B=(List node *)malloc(sizeof(List no de);A->next =NULL; /把指针域置空,这里A, B是头结点,没有信息的B-> next =NULL;while(12).5:.:“:r:y:printf("t欢迎使用实时监控报警系统 n");printf("t 报警请按1n");printf("t 出警请按2n");printf("t
20、查询出警情况请按3n");printf("t 退出请按0n");scan f("%d",&k);switch(k)case 0:printf("tt感谢您的使用!");exit(0);正常结束程序运行case 1:h=A->n ext;while(h) /通过链表遍历来确定有多少节点jj+;h=h->n ext;if(jj>2) /此时已有10次警务未处理prin tf("累计多次警务未处理,建议立即处理警务!n"break;elseprintf(" 请输入:"
21、;);printf(" 编号 tt 时间 tt 内容:”); x=(List node *)malloc(sizeof(List no de);scan f("%d%s%s", &x->data .n um, &x->data .time, &x->data .matter); in sert no de(A,x);printf(" 已报警!n");break;case 2:y=(List node *)malloc(sizeof(List no de);在函数if(del no de(A,y)在删除成
22、功执行下列语句,如果删除不成功,del no de()里有提示并返回值0。prin tf("%d %s %s",y->data .num ,y->data .time ,y->data .matter);printf("已出警!n");B中保存记录in sert node(B,y); /出警之后在把节点信息插入到break;case 3:未处理的警务有:”);pri ntf(”pri ntlist(A);printf("已处理的警务有:”);prin tlist(B); break;*插入即报警功能*void insertno
23、 de(l in klist head,List node *x) List node *p1,*p2;p仁head;p2=p1- >n ext ;寻找插入位置while(p2!=NULL&& ( p2->data. num < x->data. num ) / p仁 p2;p2=p2->next ;p1-> next =x; II按编号大小顺序插入x_>next =p2;/return p;*查找功育总 *查找某节点List node *listfi nd(li nklist head) IIList node *p; int num
24、;char time30;int n;printf("tt1.按编号查询n”); II 两种查找方式printf("tt2.按时间查询 n");printf("tt请选择:n");p=head->next ;sca nf("%d",&n);if(n=1 &&p!=NULL)prin tf("请输入要查找的编号:”);scan f("%d",&n um);while(p->n ext!=NULL&& (p->data .num <num
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡水限价房管理办法细则
- 襄阳收费车位管理办法
- 西平县流动摊位管理办法
- 订单信息化系统管理办法
- 证监会新型犯罪管理办法
- 财务不相容岗位管理办法
- 质量巡检专家库管理办法
- 贵州省电力补贴管理办法
- 资产管理与产权管理办法
- 超龄农民工用工管理办法
- 宫外孕右输卵管妊娠腹腔镜下盆腔粘连分解术、右输卵管妊娠开窗取胚术手术记录模板
- 教科版 科学小学二年级下册期末测试卷及参考答案(基础题)
- 2022年全国各省县市名称
- 制药企业实验室安全操作规程
- CSCEC8XN-SW-商务工程师项目实操手册
- 混凝土重力坝设计说明书
- 弱电设备维护保养方案
- 道路及两侧便道保洁方案.docx
- 腾讯公司职业发展体系管理者手册
- 《舾装培训讲义》
- 山东生态功能区划(文字)
评论
0/150
提交评论