您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 《软件工程导论》实验报告
《软件工程导论》实验报告2021-2021《软件工程导论》实验报告学院:计算机学院班级:软件工程软112姓名:吴梦慧学号:119074202实验一:项目计划、分析和设计[实验日期]2021年4月20日[实验目的]初步了解结构化分析、设计方法的原理、步骤以及各阶段的文档,练习撰写简要的需求文档、设计文档。[实验内容]要求学生根据周围的实际应用需求,自选一个小型的C语言应用项目,依据项目可行性研究的结果,进行需求分析和设计,编写简要的需求文档、设计文档。[实验原理和步骤]当前的建模方法主要有传统的结构化分析、设计方法(SA/D)和面向对象分析、设计方法(OOA/D)两种,以下只对SA/D进行说明。分析阶段:结构化分析(SA)是一种建模技术,它通过一定方法帮助开发人员定义系统需要什么功能,系统需要存储和使用哪些数据,以及为完成这些功能,系统需要什么样的输入和输出以及如何把这些功能结合在一起来完成任务。结构化分析方法的实质是采用一组分层数据流图及相应的数据字典作为系统的模型,从总体来看是一种强烈依赖数据流图的自顶向下的建模方法。由事件列表、数据流图、实体关系图、数据流定义、数据字典、结构化英语、状态转换图等最终构成系统的分析模型。分析阶段的重要文档有《可行性研究报告》、《项目计划》和《需求规格说明》。设计阶段:分总体设计和详细设计两阶段。总体设计阶段的任务主要是确定系统由哪些模块组成,以及这些模块之间的相互关系;详细设计阶段的任务主要是设计每个模块的处理过程。总体设计又称为概要设计或初步设计,它的基本目的就是回答“概括地说,系统应该如何实现?”这个问题。总体设计通常由系统设计和结构设计两个阶段组成。系统设计阶段确定一个合理的、具体的实现方案;结构设计阶段确定软件的结构,即确定系统由哪些模块组成,以及这些模块之间的相互关系。【方案+体系结构】常用的结构化设计(SD)方法有面向数据流分析(DFA)的设计方法和面向数据的设计方法【如Jackson方法(JSD)和逻辑构造程序方法(LCP)(一般用于详细设计)】。DFA方法以数据流图为基础,它定义了把DFD(变换型数据流,事务型数据流及混合型)变换成软件结构图(SC)的不同映射方法。DFA设计技术实施的通用步骤:(1)复查并精化DFD;(2)确定DFD类型;(3)把DFD映射到系统模块结构,设计出模块结构的上层;(4)基于DFD逐步分解高层模块,设计出下层模块〈初步结构〉;(5)根据模块独立性原理,精化模块结构,得到更为合理的软件结构;(6)模块接口描述;(7)修改和补充数据词典;(8)制定测试计划。详细设计阶段的任务主要是确定每个模块的处理过程,包括(1)确定每个模块的算法。(2)确定每一个模块的数据组织。(3)为每个模块设计一组测试用例。(4)编写详细设计说明书。详细设计阶段采用的方法是结构化程序设计(SP),与SA,SD方法衔接。目标是给出可以直接用以编码的程序逻辑结构,强调清晰第一。设计阶段的主要文档有《总体设计说明书》和《详细设计说明书》。所有文档的格式可参照《软件设计文档国家标准_GB8567—88》具体步骤是:程序功能的文字陈述、图形描述;设计思路的文字描述和图形描述[实验报告要求]需求规格说明书。主要功能:所编写程序欲实现插入删除、修改、查询、浏览、初始化、成绩录入、导入、导出等功能,并希望每次运行程序时将外部文件中的数据导入链表,程序结束时将链表中数据导出到文件。选修课管理系统IPO图:输入处理输出总体设计说明书各模块功能:(1)main():主函数,控制整个程序的运行。(2)menu():选单函数,显示菜单并接受选择。(3)browse():浏览函数,将链表中各结点的数据依次输出。(4)insert():插入函数,向链表中插入新结点,并使链表的各结点按学号升序排列。(5)search():查找函数,在链表中按姓名或学号进行查找。(6)delete():删除函数,在链表中按姓名或学号或序号删除结点。(7)scorein():成绩录入函数,依次给链表中各结点的数据录入成绩。(8)change():修改函数,对链表中各结点的数据进行修改。(9)load():读入函数,从文件中将选课情况导入到链表。(10)save():保存函数,将链表中选课情况保存到文件。HIOP详细设计说明书:1.2.3.4.5.7.8.[实验总结]①任何一个程序的设计都要经过计划、分析、设计。需求分析是理解、分析和表达“系统必须做什么”的过程。概要设计帮助我们明确了程序的总体流程,为编程指明方向。详细设计将整个程序划分成一些功能模块,便于分工合作、查找错误,提高程序的目地性。②流程图要符合单入口单出口原则。实验二编码[实验日期]2021年4月20日[实验目的]:培养良好的编码风格。[实验内容]:根据详细设计的结果,按结构化思想编写代码,并对程序进行注释。[实验原理和步骤]:编码风格强调“清晰易读”而不是个人技巧。请注意变量或函数的名字要有意义,表达式和语句要一目了然,排版风格、循环语句风格要保持一致,函数宏的定义,常数的定义,注释要全面.。注释包括序言性注释、函数模块注释和程序语句注释。具体步骤:每个程序头部写序言性注释,每个函数前写模块注释,重要语句写功能性注释,变量或函数的名字要有意义,排版要美观。[实验报告要求]//用单链表实现的选修课管理系统#include#include#includetypedefstructst{charnum[10],name[9],bclass[11];//学号、姓名、班级floatscore1,score2,score;//平时成绩、期末成绩、总评成绩structst*next;}stud;charmenu();//选单stud*load();//导入stud*search(stud*,int*);//查询voidsave(stud*);//导出voidscorein(stud*);//成绩录入voidinsert(stud*);//插入voiddeletel(stud*);//删除voidchange(stud*);//修改voidbrowse(stud*);//浏览//*************************************************************************main(){charchoice,c;inti;stud*head,*p;head=(stud*)malloc(sizeof(stud));//准备好表头head-next=NULL;while(1){choice=menu();switch(choice){case'1':printf(浏览选课情况。\n);browse(head);getchar();break;case'2':printf(插入选课学生。\n);insert(head);break;case'3':printf(查询选课学生。\n);p=search(head,&i);if(p!=NULL){printf(%2d%10s%8s%10s,i,p-num,p-name,p-bclass);printf(%5.1f%5.1f%5.1f\n,p-score1,p-score2,p-score);}elseprintf(未找到!);break;case'4':printf(删除学生记录。\n);deletel(head);break;case'5':printf(学生成绩录入。\n);scorein(head);break;case'6':printf(修改学生记录。\n);change(head);break;case'7':printf(从文件中将选课情况导入链表。\n);head=load();break;case'8':printf(将链表中选课情况保存到文件。\n);save(head);break;case'9':printf(系统初始化。\n);head=(stud*)malloc(sizeof(stud));head-next=NULL;printf(%d%d\n,head,head-next);break;case'0':printf(退出选修课管理系统。\n);printf(是否保存当前数据到文件?(Y/N):);c=toupper(getchar());getchar();if(c=='Y')save(head);break;default:printf(输入错误!);}if(choice=='0')break;printf(\n按任意键继续......!);getchar();}}//*******************************************************************charmenu(){charc;printf(\n\n\n\n\n\n\n=====通讯录管理系统=====\n);printf(----------\n);printf(1.浏览选课情况\n);printf(2.插入选课学生\n);printf(3.查询选课学生\n);printf(4.删除学生记录\n);printf(5.学生成绩录入\n);printf(6.修改学生记录\n);printf(7.从文件中将选课情况导入打链表\n);printf(8.将链表中选课情况导出到文件\n);printf(9.系统初始化\n);printf(0.退出系统\n);printf(\n\n请选择......\n\n\n\n\n);c=getchar();getchar();returnc;}voidbrowse(stud*head){//将链表中各结点的数据依次输出inti=0;stud*p;//工作指针phead-next;//指向首结点printf(序号学号姓名班级平时成绩期末成绩总评成绩\n);while(p!=NULL){printf(%2d%-10s%-8s%-10s,++i,p-num,p-name,p-bclass);printf(%5.1f%5.1f%5.1f\n,p-score1,p-score2,p-score);p=p-next;//工作指针p移动}}//***********************************************************************voidinsert(stud*head){//插入新结点,并使链表各结点按学号升序排列charan,xh[10],xm[9],bc[11];stud*p,*q;do{p=head;printf(请输入学生的学号、姓名、班级:\n);gets(xh);gets(xm);gets(bc);//输入数据if(!strcmp(xh,0000))return;//以“0000”作为结束标记while((p-next!=NULL)&&(strcmp(xh,p-next-num)0))p=p-next;//查找新结点的插入位置q=(stud*)malloc(sizeof(stud));//生成新结点由q指向strcpy(q-num,xh);//把数据送入新结点strcpy(q-name,xm);strcpy(q-bclass,bc);q-next=p-next;p-next=q;printf(继续吗?);an=toupper(getchar());getchar();}while(an=='Y');}//******************************************************************stud*search(stud*head,int*i){//在链表中按姓名或按学号进行查找intxz;charxh[10],xm[9];stud*p;//工作指针phead-next;*i=1;//指向首结点printf(1.按姓名查找0.按学号查找\n);sca
本文标题:《软件工程导论》实验报告
链接地址:https://www.777doc.com/doc-7846422 .html