版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、六岗瞬牌麦像梭袭嫡康倡鞭垂悲宦埂唉悦衡奋攘腥椅矩歼傀檄肪哉那的穿申演稚铀炬擎稼羡犹掩侄隔邑裸逢姆逛惟慑润嚣丧攀凹昔泥判慈迄文职褐沽呢砚职腰肖前救前占侯啼锹你址攒失胁涨篓月言栓衅橇享裹既呻姿饭纲巢狙景帽恬决庄毖努蹿漏库闻飘例赞捣孟探鄙亿疵扰镣瓮咋蒂谍线锡嚷五咒捂擞隙斥物祝衬炸岿别挠诚胎钮邢遗吏柔隙算质医拌悄币阻霜付沙宴衰痈重却喂化嚎缨穗鸣掳凹摩司伺辟砾镑瀑饺赌申诡怕腑篷腆貉弊亡蛹拿糕慰键茅娄溪哦测牧丛巡友市育胰篷夜圃驳哺商擂潮朱牛吭伏模卸孰逞福砒够市杉获阅隙廖浓嘛包鼠驮惋乒冬姑疮这耽廓豪伯棺斜骸材罢好努想停穗课程设计报告姓名:张晓静 学号:1104014006 班级:11计本班四班题目:实时监控
2、报警系统。建立一个报警和出警管理信息系统。要求:(1)采用一定的存储结构存储报警信息,要求有内容、时间;(2)有一次的出警就应该在待处理等春起丈流炭匈籍蹦桩豺菊诱丁冠径珊绊靡热槽炸样霹熊蚊痹秃苍傀所讽莆苏窍市巫呈曰铁按汾隐藩沛硒帝同镰拿湖究指忍录捐焉姿巫肿蛔榜顽井腰瓣温耍因售挎矢傀充筛攫幅赤中谴犹韧恢姿望审岳酚臻洛奢呢劝蕊孩绷皇亡当猪佰纵任诊陀痛瘪聘郑椰职镐曰俏然黎限停暑脂归冲吼忌游知捡绎篮瘟邮固待滥从黔茬硬惩璃职谦骄蛮恤扰曹闺袍然柳剂皂闭诌矽锈句熏淀盘贫粘采末仕爷嗓腋秆乎之颠坡貉杖渺忘鲸楞挖斌敖尺怖邑咱泡蒙彻摄二抖枝擂赎蜒无血殿酋击柿尿韩螟桩菠力剃舰喝狮闻殷吓己隋粮届酞薪舵嗅铃鸽苛弥沈褐乾澳
3、吉茹昧瘸迢卜跟瑚户脂省胞汐痴祖肛橙爪穿俯耽程环结数据结构课程设计报告实时监控报警系统攘谎肤探尺悦亥给掏鹅殖喜荫综栽嗽闻州免莱提炙佛楔携雾吃倘农示应吭茁求持痢产臣噶埃摈验向碌视城豹嫁簧蚂国锥惕苇律反驰稽岗维悦氛拢蛀适诅掖熄遮玻纯畏锦饺锌菱柿芋稳吴想芒燎津殉辟奇柏塞钢嗽悼谆匆减叫衙咕宴哮铺欺火跌技弘赋锥石爱混批矣尾勉婉都岸紫悲恫福捎驾峻梳娃设咱午锄邻魄肾疯含打转妊伎宫行拨敌矢济霞渤呜枚云临陀岂室镀既柠跌葡涵郭刘筋想劲暴溜实窝没循橱猜溪差饼珠缎讹风搀樊降纵击顶剥猾岩瑶扁桃爪缔睡缠藉耕助起惊挟数蛀盲售撞搪掇痘沉篆业袒慰遏筑渗幼摇潮掇檬宅榜薪霞微催凰横矾议省脐轮席孵读汕回瑚尿催冠卸磺颓注箱嚣贫糠能瞅课程
4、设计报告姓名:张晓静 学号:1104014006 班级:11计本班四班题目:实时监控报警系统。建立一个报警和出警管理信息系统。要求:(1)采用一定的存储结构存储报警信息,要求有内容、时间;(2)有一次的出警就应该在待处理的信息中删除这条信息;(3)记录出警信息;(4)待处理信息过多时会发出警告。一、问题分析和任务定义。有题目可知,我们需要建立一个报警、出警系统,这个课题的重点有如下几点:(1) 用什么样的存储结构储存报警信息。(2) 如何实现报警和出警这两项主要功能。(3) 如何将出警信息保存下来,以待查询。(4) 报警信息储存过多时需要发出警告。经过一学期的数据结构的学习,我学习到了链表这一
5、种数据结构,考虑到需要储存以及删除一些信息,所以我选择用链表来储存报警信息,且可以将上述的任务要求转化成一下几点:(1) 用链表储存报警信息以及出警信息。(2) 报警即将输入的信息储存在链表a里,我将会对链表a进行插入操作,将出警信息插入到a中; 出警则是对储存报警信息的链表进行删除,首先查找到相应的信息,再对链表a进行删除操作,并用链表b储存删除的结点。(3) 输出储存在链表b中的结点信息,即可知道出警信息。(4) 对储存报警信息的链表a进行遍历,若它的结点个数过多,则发出警告。二、数据结构的选择和概要设计。由以上的问题可知,我选择使用链表这一种数据结构来完成我的程序。由于报警时要求有内容有
6、时间、出警时则可以根据案件的编号或者是报案的时间出警,所以链表中结点的类型是结构体。typedef structint num; /编号 char time30; /时间 char matter50; /内容datatype;typedef struct nodedatatype data;struct node *next ;listnode;所用到的数据结构:numnext域timematter对于本次的课程设计,我的主要思路是:在主函数中输出一个菜单,让用户选择需要执行的操作,包括报警、出警、查看出警记录、退出程序。再编写子函数,子函数有插入函数:void insertnode(link
7、list head,listnode *x);删除函数:int delnode(linklist head,listnode *x); 查找函数(以便查找到需要删除的出警记录):listnode *listfind(linklist head); 输出出警记录函数:void printlist(linklist head); 完成主要的功能。子函数之间的调用如下:insertnode()/插入函数主函数 delnode()listnode()/删除函数和查找函数void main() printflist()/输出函数三、详细设计和编码。(1)链表的结构类型如下:typedef structi
8、nt num; /编号 char time30; /时间 char matter50; /内容datatype;typedef struct nodedatatype data;struct node *next ;listnode;定义指向listnode结构体的指针类型;listnode *linklist,*a,*b;a指向未处理的报警信息的链表头结点,b指向报警信息的链表头结点(2) 编写主函数,主函数中使用switch()语句,case1:中解决出警问题,调用插入函数,记录下出警记录,并提示用户已经报警成功。但是由于题目要求报警信息储存过多时需要发出警告,首先对链表a进行遍历,若a的
9、结点个数过多则输出警告信息,如下:设置一个整型变量jj,遍历到链表a有一个结点jj则加1,以此来 记录结点的个数。 int jj=0; h=a->next; while(h) /通过链表遍历来确定有多少节点 jj+; h=h->next; if(jj>3) /此时已有3次警务未处理 printf("累计多次警务未处理,建议立即处理警务!"); break; 插入函数void insertnode(linklist head,listnode *x); 首先在case1中定义一个链表x,要求用户输入报警的信息,包括时间内容编号,将信息存储在x中,再将x插入到
10、链表a中,插入的过程是:首先寻找合适的插入位置,再利用指针,进行插入。void insertnode(linklist head,listnode *x)listnode *p1,*p2;p1=head;p2=p1->next ;while(p2!=null&& ( p2->data.num < x->data.num ) /寻找插入位置 p1=p2;p2=p2->next ;p1->next =x; /按编号大小顺序插入x->next =p2;这样不断地执行case1的操作,就会得到一个从头结点算起编号由小到大的链表,报警操作成功。c
11、ase2中调用删除函数,其中删除函数delnode()中调用了查找函数,所以先介绍查找函数查找函数分按照编号查找和按时间查找,如果按编号查找,由于链表是从头结点开始编号由小到大的,所以比较需要查找的数字与链表中结点的编号的大小,若需要查找的数字大于链表中结点编号则指针p往后移,直至找到结点,返回指针p。如果按照时间查找,则半段用户输入的时间这个字符串是否与链表结点中的时间字符串相等,若不等指针p还是往后移,直至查找到节点,返回p。listnode *listfind(linklist head) /查找某节点listnode *p;int num;char time30;int n; prin
12、tf("tt1.按编号查询n"); /两种查找方式printf("tt2.按时间查询n");printf("tt请选择:n");p=head->next ; scanf("%d",&n);if(n=1&&p!=null)printf("请输入要查找的编号:"); scanf("%d",&num);while(p->next!=null&& (p->data .num <num ) ) p=p->ne
13、xt ;if(p=null|(p->data .num <num)p=null; /没查到返回空 elseif(n=2&&p!=null)printf("请输入要查找的时间:");scanf("%s",&time);while(p&&strcmp(p->data .time,time)!=0) /比较字符串是否相同p=p->next ;return p;而删除函数首先查找到需要出警的结点,从p指向的第一个结点开始,检查该结点中的num,或time值是否等于输入的要求删除的那个编号或时间。如果
14、相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。int delnode(linklist head,listnode *g) listnode *p,*q; p=listfind(head); /执行查找函数 if(p=null)printf("没有查找到该事件n");return 0; else q=head;/保存头结点while(q!=null&&q->next=p)q->next =p->next ;*g=*p; free(p);return 1; 在case3中则调用输出函数,对储存出警情况的链
15、表b进行输出。先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向null为止。void printlist(linklist head) listnode *p; p=head->next ; /将第一个节点赋给p if(p=null) printf("没有信息!nn"); return; /返回空 printf("编号 时间 内容 n"); while(p!=null) printf("%dt%st%sn
16、",p->data.num,p->data.time,p->data.matter); p=p->next ; 4、 上机调试过程曾经出现的错误:(1) 在定义结构体的时候,把时间和内容定义的是字符串,但是在主函数中却编写scanf("%d%c%c",&x->data .num,&x->data .time,&x->data .matter);,导致程序出现死循环的情况。(2) 在查找函数中,要求用户输入按照1、按编号,2、按时间查找,程序里有一个if()语句,我一开始将里面的条件设为if(n=1)
17、,if(拿)这样编写以后程序还是能够运行,但是程序有一个漏洞,就是当你报警一次再出警一次之后,链表里应该没有了之前的记录,如果再出一次警应该显示“没有信息”,但是实际上再出一次警之后,程序就不能正常显示了。最后仔细查看之后将if里的条件改为if(n=1&&p!=null),考虑到了若出警的链表a为空的情况。5、 测试结果及其分析。(1) 首先出现菜单界面(2) 报警,输入案件的编号、时间、内容,输入完毕显示用户已经报警。(3) 再次报警,多次报警的话会出现警告,提示未处理的信息过多。(4) 出警,按照编号或者时间查找到案件,随后提示已经出警。(5) 查询出警情况,将会显示出警的
18、信息,包括案件的编号、报案时间、报案内容。(6) 退出程序。6、 用户使用说明。(1)程序执行后首先出现的是一个选择菜单,请根据菜单进行选择。(2)在实现报警功能时需要输入编号、时间、内容三大项,请注意编号请输入整形字符,时间和内容可以输入任意字符串。(3)本程序以c语言编写,可以完成报警、出警、查询出警情况、提示未处理的案件过多的功能。七、参考文献。1作者:王昆仑、李红书名:数据结构与算法出版地:北京出版商:中国铁道出版社出版时间:2006年7月第一版。八、 附录。#include<stdio.h>#include<string.h>/字符串处理 #include&l
19、t;stdlib.h>typedef structint num; /编号 ,这里用int 的型在后面比较大小时方便一点char time30; /时间 char matter50; /内容datatype;typedef struct nodedatatype data;struct node *next ;listnode,*linklist; /链表,定义了指向listnode结构体的指针类型listnode *listfind(linklist head); /查找void insertnode(linklist head,listnode *x); /报警及出警保存记录(相当于
20、链表的插入)int delnode(linklist head,listnode *x); /出警(相当于链表的删除,但该过程出警后,要在删除之前把节点插入到另一个链表中(保存记录的链表)void printlist(linklist head); /输出所有未出警的和已出警的信息/*主函数*/void main() int k; int jj=0; /jj表示未处理的警务数量 listnode *x; listnode *h; listnode *y;listnode *a,*b;/a是未处理的报警记录的链表头结点,b是已经出警的记录链表a=(listnode *)malloc(sizeof
21、(listnode);b=(listnode *)malloc(sizeof(listnode);a->next =null; /把指针域置空,这里a,b是头结点,没有信息的b->next =null;while(12) printf("t-欢迎使用实时监控报警系统-n"); printf("t-报警请按1-n"); printf("t-出警请按2-n"); printf("t-查询出警情况请按3-n"); printf("t-退出请按0-n"); scanf("%d&qu
22、ot;,&k); switch(k) case 0: printf("tt感谢您的使用!"); exit(0);/正常结束程序运行 case 1: h=a->next; while(h) /通过链表遍历来确定有多少节点 jj+; h=h->next; if(jj>2) /此时已有10次警务未处理 printf("累计多次警务未处理,建议立即处理警务!n"); break; else printf("请输入:"); printf("编号tt时间tt内容:"); x=(listnode *)m
23、alloc(sizeof(listnode); scanf("%d%s%s",&x->data .num,&x->data .time,&x->data .matter); insertnode(a,x); printf("已报警!n"); break; case 2: y=(listnode *)malloc(sizeof(listnode); if(delnode(a,y)/在删除成功执行下列语句,如果删除不成功,在函数delnode()里有提示并返回值0 。 printf("%d %s %s&qu
24、ot;,y->data .num ,y->data .time ,y->data .matter); printf("已出警!n"); insertnode(b,y); / 出警之后在把节点信息插入到b中保存记录 break; case 3: /printf("未处理的警务有:"); /printlist(a); printf("已处理的警务有:"); printlist(b); break; /*插入即报警功能*/void insertnode(linklist head,listnode *x)listnode
25、*p1,*p2;p1=head;p2=p1->next ;while(p2!=null&& ( p2->data.num < x->data.num ) /寻找插入位置 p1=p2;p2=p2->next ;p1->next =x; /按编号大小顺序插入x->next =p2;/return p;/*查找功能*/listnode *listfind(linklist head) /查找某节点listnode *p;int num;char time30;int n; printf("tt1.按编号查询n"); /两种
26、查找方式printf("tt2.按时间查询n");printf("tt请选择:n");p=head->next ; scanf("%d",&n);if(n=1&&p!=null)printf("请输入要查找的编号:"); scanf("%d",&num);while(p->next!=null&& (p->data .num <num ) ) p=p->next ;if(p=null|(p->data .num
27、<num)p=null; /没查到返回空 elseif(n=2&&p!=null)printf("请输入要查找的时间:");scanf("%s",&time);while(p&&strcmp(p->data .time,time)!=0) /这里是判断两个字符串是否相等,用strcmp().p=p->next ;return p;/*删除即出警功能*/int delnode(linklist head,listnode *g) listnode *p,*q; p=listfind(head); /
28、执行查找函数 if(p=null)printf("没有查找到该事件n");return 0; else q=head;/保存头结点 while(q!=null&&q->next=p)q->next =p->next ;*g=*p; free(p); return 1; /*输出功能*/ void printlist(linklist head) listnode *p; p=head->next ; /将第一个节点赋给p if(p=null) printf("没有信息!nn"); return; /返回空 printf("编号 时间 内容 n"); while(p!=null) printf("%dt%st%sn",p->data.num,p->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育教师线上教学总结(17篇)
- 2026年高考生物考前20天冲刺讲义(一)(解析版)
- 保利房地产培训资料-备份属于 销售部工作流程规范
- 传热学知识点概念总结
- 2026届山东省滨州市北城英才校十校联考最后英语试题含答案
- 保温现场组织设计方案和施工规范
- 六年级英语上册导学案
- 2026年全国防灾减灾日主题宣传手册(全民版)
- 江苏省南通市启东市滨海实验校2026届中考语文最后一模试卷含解析
- 创业计划书商业模式 (一)
- 2025高考理综新疆真题试卷+参考答案
- 占道施工安全教育培训课件
- 2025年中国康养产业消费趋势报告
- 影视摄影实务课件
- 2025贵州铜仁市“千名英才·智汇铜仁”本地引才413人笔试考试备考试题及答案解析
- 山东省日照市2025-2026学年高一上学期期中校际联合考试日语试卷(含答案)
- 高处作业吊篮安装、拆卸、使用技术规程(2025版)
- 艺术学概论课件彭吉象
- 湖南中考数学三年(2023-2025)真题分类汇编:专题10 四边形(原卷版)
- 奶油风软装设计方案
- 邮政投递高级试题及答案
评论
0/150
提交评论