中北大学课程设计报告(实时监控报警系统)学院:软件学院专业:软件工程系学生姓名:严云飞学号:0921010447 设计题目:实时监控报警系统设计地点:软件学院机房指导教师:尹四清薛海丽目录一、课程设计题目………………………………………………………二、设计目的……………………………………………………………三、需求分析…………………………………………………………四、概要设计……………………………………………………………五、详细设计……………………………………………………………六、心得体会…………………………………………………………一、课程设计题目:实时监控报警系统二、设计目的数据结构是计算机专业的核心课程,是计算机科学的算法理论基础和软件设计的技术基础。
它主要研究信息的逻辑结构及其基本操作在计算机中的表示和实现。
数据结构是实践性很强的课程。
课程设计是加强学生实践能力的一个强有力手段。
课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。
严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
三、需求分析1.程序设计任务:建立一个报警和出警管理的系统。
2. 明确规定:1. 采用一定的存储结构存储报警信息,要求有内容、时间;2. 有一次的出警就应该在待处理的信息中删除这条信息;3. 记录出警信息;4. 待处理信息过多时会发出警告;四、概要设计1本程序中用到的抽象数据类型定义如下ADT List {数据对象:D={ai|ai∈ElemSet,i=1,2,....,n,n>=0}数据关系:Rl={<ai-1,ai>|ai-1,ai∈D,i=2,...n}基本操作;IntList(&L)操作结果:构造一个空的线性表L。
ListEmpty(L)操作结果:若L为空表,则返回TRUE,否则返回FALSE。
ListInsert(&L,i,e)操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1.ListDelet(&L,i,&e)操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1.ListTraverse(L,visit())操作结果:依次对L的每个数据元素调用函数visit(),一旦visit()失败,则操作失败。
}ADT list其他抽象数据类型定义如下typedef struct LNode{char * data;struct LNode *next;} LNode, *LinkList;2函数间的调用关系:首先定义用来存放报警信息的单链表,然后编写各个需要的基本操作函数,然后写出主函数。
主函数与其他模块之间的调用关系是:主函数中先调用LinkList 和L InitList_L(L)函数创建存放报警信息的空链表。
接着调用ListCreate_L(L,n)函数在空链表的基础上初始化报警信息,调用visit_L(L)函数显示所有报警信息。
然后调用ListDelete_L(L,i,x) 函数来实现出警并显示出警信息和ListInsert_L(L,i,x)函数来对报警系统进行插入信息。
五、详细设计源程序:#include "stdafx.h"#include<iostream>#include<string.h>#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 20#define OK 1#define OVERFLOW -2#define ERROR 0typedef int Status;/* 定义单链表*/typedef struct LNode{char * data;struct LNode *next;} LNode, *LinkList;int InitList_L(LinkList &L){L=new LNode;if(!L) exit(OVERFLOW);L->next=NULL;return OK;}//InitList_Lvoid ListCreate_L(LinkList &L,int n) { //尾插法建立带头结点的单链表Lchar * x;LNode *p;printf(" ");for(int i=n;i>0;--i){p=new LNode;x=new char[20];if(!p) exit(OVERFLOW);scanf("%s",x);{p->data=x;p->next=L->next;L->next=p;}}}//ListCreate_Lint ListInsert_L(LinkList &L, int i, char * e){ // 在带头结点的单链线性表L的第i个元素之前插入元素e LNode *p,*s;int j=0;p = L;while ( p && j < i-1){p = p->next;++j;}if (!p || j > i-1) return 0;s = new LNode;s->data = e;s->next = p->next;p->next = s;return 1;}//ListInsert_Lint ListDelete_L(LinkList &L, int i,char e[]){// 删除以L 为头指针(带头结点)的单链表中第i 个结点LNode *p,*q;int j = 0;p=L;while (p->next && j < i-1){p = p->next; ++j;} // 寻找第i 个结点,并令p 指向其前趋if (!(p->next) || j > i-1)return ERROR; // 删除位置不合理q = p->next; p->next = q->next; // 删除并释放结点//e = q->data;sprintf(e,"%s",q->data);delete q;return OK;} // ListDelete_Lvoid visit_L( LinkList L ) /* 显示数据*/{LNode *p=L->next;while(p){printf("%s",p->data);p=p->next;}putchar('\n');}void main(){LinkList L;char * x=(char*)malloc(50);int j;int n;int i;InitList_L(L);printf("******************************************************************* *********\n");printf("*************************** 实时监控报警系统*****************************\n");printf("********************************************************\n");printf("*************************** 中北大学软件学院*****************************\n");printf("*************************** 0921010447*****************************\n");printf("*************************** 严云飞*****************************\n");printf("******************************************************************* *********\n");printf("【系统中有多少个报警信息】:");scanf("%d",&n);printf("【初始化报警系统】:");ListCreate_L(L,n);printf("【报警系统】:");visit_L(L);while(1){printf("1:【出警系统启动】\n");printf("2:【显示报警信息】\n");printf("3:【新的报警系统】\n");printf("4:【结束】\n");scanf("%d",&j);switch(j){case 1:printf("【出警】:");scanf("%d",&i);if(ListDelete_L(L,i,x)){printf("【出警信息显示】:");printf("【现存的报警信息】:");visit_L(L);}else printf("【出警信息不存在】.");break;case 2:visit_L(L);break;case 3:printf("【插入报警信息】:");scanf("%d,%s",&i,&x);if(ListInsert_L(L,i,x)) visit_L(L);else printf("【插入错误】");break;case 4:exit(0);break;default:printf("【输入错误】");}}system("PAUSE");}六、心得体会数据结构是在整个计算机科学与技术领域上广泛被使用的术语。
它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。
数据结构有逻辑上的数据结构和物理上的数据结构之分。
逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。