软件课程设计指导书2011(JM)
软件课程设计指导书
华中科技大学
光电子科学与工程学院
徐海峰张南洋生蒋明崔晟
目录
第一部分软件课程设计基础知识 (2)
第二部分总体要求 (5)
第三部分设计题目 (6)
1通讯录管理系统 (6)
2飞机订票系统 (9)
3二叉树的查找 (11)
4 HUST学生信息管理系统。 (14)
第四部分设计示例 (16)
第五部分设计报告要求 (18)
附录:软件课程设计报告形式 (22)
指导教师联系方式:
蒋明:jm_china@https://www.360docs.net/doc/8117275225.html,
徐海峰:harryxhf@https://www.360docs.net/doc/8117275225.html,
张南洋生:zny371@https://www.360docs.net/doc/8117275225.html,
崔晟:bitartcs@https://www.360docs.net/doc/8117275225.html,
第一部分 软件课程设计基础知识
1、C 语言知识点总结
C 语言的基础,包括变量、程序控制、输入输出、调试环境等。 C 语言的文件操作知识复习。 (详细见参考材料:“C 语言程序设计――输入输出和文件系统”)
C 语言应用程序的一般结构
2、数据结构简介
数据结构是计算机与信息管理等相关专业的核心课程,是学习软件编程、研读优秀实用代码的基础。涉及如何对数据进行组织、存储和运算,是提高计算(算法)效率的重要手段。
二叉树基础:简单的基本数据结构之一,在数据操作方面具有一定优势。 二叉树节点的定义:
Struct tree
{ char info; struct tree *left, *right;
}
3、软件工程简介
软件生命周期--定义、开发、维护。详细划分为定义阶段的可行性论证与开发计划、需求分析,开发阶段的概要设计、详细设计和编码,维护阶段的测试、运行维护(6或7阶段)。
第二部分总体要求
【设计目的】
基于C语言的基础,熟练运用结构体等扩展数据手段,定义应用数据、并进行运用。要求掌握数据的存储结构、数据操作与编程调试的实践要求,完成编程实践的实现、应用方法。
【设计要求】
根据题目要求及指导内容,独立完成所选的软件设计题目。
【进度安排】
课程设计分基础讲解、题目选择、编程与调试、报告编写等过程。选择好题目后,前2周完成设计规划及技术准备;后2周完成编程、调试、结果输出,报告编写。
【开发环境】
C语言集成开发软件:Turbo C。BORLAND C++, VISUAL C++6.0
【评价标准】
软件课程设计的评分标准包括中期作业(20%)和最终课程设计报告(80%)两部分。
第2周末中期提交内容:课程设计小组成员安排(每个小组最多为2人,需要说明各自在软件设计中的分工),从文件读写数据功能的实现,链表数据结构的实现(选作)。第4周末结题内容:含运行文件,源程序代码、设计报告的电子文档(注意保存到以自己“学号+名字”命名的文件夹,文档以“姓名+软件课程设计报告”命名),设计报告的打印稿。以上两项工作提前完成者可先交给老师。
课程设计结束后每个班级学习委员集中收齐电子档以及未提前交的纸质报告,统一放在以自己班级名命名的文件夹内,再提交给老师。
提交的课程设计报告,应包括①小组成员组成及分工说明(程序、文档各部分分别由谁完成或共同完成);②概要设计、详细设计说明,程序功能图和流程图等;③程序测试截图及说明;④开发日志及编程体会;⑤程序清单。根据各项表现进行综合评价。
1、程序各模块功能图及主要流程图、源程序注释是否标准与完整。
2、程序测试结果。
3、开发日志,开发体会是否真实、恰如其分。
4、是否有算法改进策略及新意。
第三部分设计题目
每位同学选择下述任一题目进行设计,每题的要求见下面的具体要求所述。
1通讯录管理系统
2飞机票销售系统
3二叉树的查找
4 HUST学生成绩管理系统
1通讯录管理系统
【设计题目】通讯录管理系统
【设计目的】利用“结构体”、“数组”、“链表”或“类”、实现通讯录管理系统的数据结构,实现通讯录的按不同“关键字”的排序、查找、加入、删除以及文件加密及存储算法编程。
【题目要求】
掌握常用的字符串函数使用方法,以及快速排序、查找算法,利用“结构体”、“数组”或“链表”实现联系人信息的表示和相关操作。如果有能力应了解C++面向对象的编程方法,利用“类”的概念实现算法编程(可获得加分)。能够编写DOS下的命令菜单,或在Visual C++环境下应用CDialog类实现Windows下的图形用户界面(GUI)。掌握文件的建立、存储和读取方法,以及一些简单的文件加密和解密算法。
【设计内容】
1)、结构简介
系统整体结构如下,包括数据输入、数据加密/解密、数据输出、系统维护和编辑检索五大模块。数据输入负责联系人信息的输入。数据加密/解密模块负责联系人信息存储和读取时的加密/解密。数据输出模块负责联系人信息的显示(人数较多时要分页显示)或打印。编辑检索模块负责按不同关键字(如“姓名”,“电话”)的联系人查询,以及对已有联系人信息的修改和编辑。系统维护模块负责用户管理,即用户名、用户密码口令的管理,以及联系人信息文件的备份和恢复,并生成系统的日志文件(记录某某用户在某某时刻登陆进入系统)。 2)、功能定义
(1)、通讯录中每一联系人信息至少包括姓名,电话,地址/单位,并可进行联系人分类管理,具体分类可以由用户自由定义(如家人、同事、同学、黑名单等等)。
(2)、输入功能:可以一次完成若干联系人信息的输入。
(3)、排序、查找功能:完成按不同关键字对联系人进行排序和查找的功能,如按姓名、电话号码排序和查找。
(4)、显示功能:能够按照一定顺序显示所有符合要求的联系人的信息(如按照姓名的第一个字母顺序显示所有“家人”的信息)。
(5)、删除功能:按关键字(如联系人姓名或电话号码)查找并删除联系人。 (6)、文件的存储和读取功能:能够将联系人记录以文件的形式存储在硬盘上(如contact.dat ),并自动读取或修改。
(7)、用户管理功能:用户名,用户密码的管理。用户必须利用秘密登陆后方能看到相关联系人的信息。如果存在多个用户要求各自互不影响,并只能处理和显
示看到自己相关联系人的信息。具体实现可以采用如下方式:首先将用户名和密码记录存储在硬盘一个独立文件中(例如user.dat),并进行加密。用户需要登陆时通过对话框输入其用户名和密码,程序根据此信息自动打开并在文件中进行字符串的比较和查找,以判断是否存在相应记录,如果存在则进入程序并执行各种功能,如果不存在则自动退出程序。注意由于不同用户对应有不同的联系人记录文件(如user1对应联系人记录文件为contact1.dat, user2对应联系人记录文件为contact2.dat等等),程序应根据用户名判断其所对应的联系人记录文件。(8)、文件的加密和解密:用户可以使用系统主菜单中的密码设置功能设置自己的密码,以后启动程序输入正确的秘密后方可看到联系人的相关信息。
(9)、数据的备份和恢复:能够对存储文件进行备份,并在不同计算机间转移,恢复联系人信息。具体实现可以采用如下方式:程序设计时应保证用户文件和联系人记录文件存储在应用程序所在目录下,以便不同计算机上的程序都能找到并读取相关文件。
(10)、日志文件:日志文件是一个独立的文件,一般可以采用txt文件格式,每次用户登陆时,程序应自动读取计算机当前时间,并以字符串的形式写入日志文件。要求每行只有一个记录,例如:
Xxx,2007/8/31, 19:20登陆
Yyy,2007/8/30, 7:20登陆
(11)、应提供命令行或图形界面来调用各个功能。
3)、数据定义
联系人信息(可以增加但不能减少)
4)、参考算法
折半查找、选择排序、冒泡排序等基本算法以及简单的加密算法。
2飞机票销售系统
【设计题目】
飞机票销售系统
【设计目的】
运用C语言基本知识,结合相关算法思想和数据结构,编写一个单微机系统下运行的飞机票销售系统。以把所学C语言和数据结构知识应用到实际软件开发中去。
通过完成本设计,复习C语言的基本知识,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),能够熟练运用结构等高级数据类型以及函数的调用等,掌握数据结构的一些基本算法思想;并通过程序设计和开发过程,掌握中小规模软件设计和开发的方法和步骤。
【题目要求】
1)、知识点
根据题目要求需要设计者掌握以下C语言知识点:
(1)C语言基本知识
掌握基本数据类型,基本输入输出,控制结构,数组,指针等内容。
(2)高级数据类型
掌握运用结构,联合等构造数据类型。
(3)文件操作
掌握二进制文件和文本文件的输入输出,保存,修改等操作。
2)、训练内容
本课题要求设计实现一个飞机票销售系统。通过模拟售票员使用该飞机票销售系统售票过程,训练采用结构化程序设计方法完成小型软件的开发能力。
售票员在该系统辅助下完成售票的过程描述如下:售票员根据旅客要求对航班的信息进行查询,在航班有票的情况下售出机票,并记录机票销售信息到机票销售记录文件;当旅客要求退票时,查询机票销售记录文件,找到需退票的机票记录,完成退票操作。根据上述过程,要求同学们从中提取有意义的销售信息,例如航班信息、旅客个人信息等并采用一定的结构数据类型加以描述并进行处理操作,实现售票过程的模拟。
本课题设计分为三个步骤:①结合实际情况收集并设计航班和旅客描述信息;分析模拟售票过程,完成系统功能模块划分,采用C/C++语言编写程序实现飞机票销售系统;对设计过程进行总结,提交最终设计报告和源文件。通过完成系统设计过程应掌握以下知识和技能:①软件设计的基本流程:需求分析、模块功能划分以及数据结构的描述和算法的设计实现;②基于一定数据结构(链表、顺序表等)的查询、插入、删除等操作的实现算法;③通过数据文件(二进制文件或文本文件)实现具有一定数据结构的数据信息的存储方法。
程序源文件应书写规范,源程序需加必要的注释,每位同学需提交可独立运行的软件并能完成功能演示;所提交设计报告书,应在格式和内容上符合课程设计的要求。
【设计内容】
1)、结构简介
根据单微机系统下飞机票销售系统的模拟售票过程,所设计系统应基本具有以下功能模块。如下图1.1所示。
图1.1系统基本结构简图
飞机票销售系统应包含航班信息查询、机票购买、机票信息查询和机票退购四个基本模块。
2)、功能定义
根据利用系统进行飞机票销售的模拟过程,系统模块应分别实现以下功能。
(1)航班信息查询:提供航班查询信息输入,如航班号,目的地,起飞时间;利用输入的查询信息在现有的航班信息文件中,查询符合条件的查询信息;显示查询结果在屏幕上,包括该航班机票剩余数目。
航班信息数据存储在航班信息数据文件中,数据结构、具体数据结合实际自定,自行设计查询算法。
(2)机票购买:根据查询信息,确认是否有票;若有票,输入机票信息需要的旅客资料,如姓名,性别等,生成机票编号;显示待售机票信息;售出机票后,记录机票信息到售出机票数据文件;修改航班信息数据文件中相应航班的机票剩余数目。
机票信息数据存储在机票信息数据文件中,数据结构、具体数据结合实际自定。
(3)机票信息查询:提供机票查询信息输入,如旅客姓名,机票编号,航班号等;利用查询条件,在机票信息数据文件中查找售出机票信息;显示查询结果在屏幕上。
(4)机票退购:根据查询结果,在确认机票退购后,删除机票信息数据文件中的退购机票信息;修改航班信息数据文件中相应航班的机票剩余数目。
3)、数据定义
根据以上功能说明,飞机票销售系统的包含两个主要数据结构航班信息和机票信息。具体如下。
航班信息主要包含数据项如下表1.1所示,同学可以在此基础上根据个人理解另行增加信息数据项。具体实现可以用一个结构数据类型来描述。航班信息数据文件应至少包含10个航班信息。
表1.1 航班信息表
机票信息主要包含数据项如下表1.2所示,同学可以在此基础上根据个人理解另行增加信息数据项。具体实现也可以用一个结构数据类型来描述。机票信息数据文件应至少包含50条已售出的机票信息。
表1.2 已售出机票信息表
4)、参考算法
折半查找、选择排序、冒泡排序等基本算法。
3二叉树的查找
【设计题目】
二叉树的查找--用链表结构实现二叉树建立、查询、打印的源程序
【设计目的】
基于C语言的基础,熟练运用结构体等扩展数据手段,定义应用数据、并进行运用。本题要求掌握数据的链式存储结构,并编程实践它们的实现、应用方法。【题目要求】
以下内容中,(1)、(2)为必做内容,(3)、(4)两项内容选做一项。
(1)下面是用链式结构实现二叉树的建立、查询和打印的源程序(见第三部分的设计示例)。读懂上述程序,为程序写出注释,并画出程序的框图(流程图)。
(2)请将他们输入计算机,编译、连接并运行。
(3)上述程序的数据结构使用C中的结构体类型实现的,请改成用C++中的类实现,并将建立、打印、查询函数改成该类的方法。再编写删除一个结点的方法。
(4)编写二叉排序树的前序遍历程序、中序遍历程序和后序遍历程序。
基本要求
要求利用C语言面向过程的编程思想来完成题目要求的设计;
突出C语言的函数特征,以多个函数实现每一个子功能;
画出功能模块图、程序流程框图;
进行简单界面设计,能够实现友好的交互(可选);
具有清晰的程序流程图和数据结构的详细定义;
熟练掌握C语言对文件的各种操作。
创新要求
在基本要求达到后,可进行创新设计,如系统用户进入界面控制,对不同的功能操作提示不同。
1)、知识点
数据结构中的二叉树定义、操作,结果的输入输出方法。
基本C语言功能,结构体、函数定义等。
2)、训练内容
掌握数据的链式存储;
函数运用方法;
标准流程书写方法;
【设计内容】
1)、结构简介
首先针对题目要求,进行所需完成功能的划分;主要是针对程序功能的划分,决定所编代码的组成结构。如“二叉树查找”,整个程序包括如下部分。
主程序
二叉树建立子程序
二叉树查询子程序
二叉树打印子程序
2)、功能定义
程序功能包括数据输入、数据处理、数据输出。数据输入、二叉树创建、查询、打印等功能,一体设计并完成人性化的调试界面。
主程序
输入
创建二叉树
“先序二叉树”输出
询问环节
退出
3)、数据定义
Struct tree
{
char info;
struct tree *left, *right;
}
4)、参考算法
运用递归(原理)方法。
创建二叉树(初始,单树)
do {
printf("Enter a letter:");
gets(s);
if (!root)
root=create_btree(root,root,*s); //
else
create_btree(root,root,*s);
} while (*s) ;
创建二叉树子树(存在一个初始二叉树,再创建左子树、右子树) if (info < r->info)
create_btree(r,r->left,info);
if(info>=r->info)
create_btree(r,r->right,info);
【相关程序设计知识】
程序运行环境
存储区分配;变量置零;
程序调试
(1) 函数返回值的运用
return R函数/程序运行结果:“Bool”结果,或某个变量结果。
函数定义
void print_btree(struct tree *r, int l) //打印二叉树函数
{
int i;
…
}
(2) 程序调试的‘提示’插入
printf()的运用;
调试的过程,要求简捷、高效,提示信息直观。
4 HUST学生成绩管理系统
【设计题目】HUST学生成绩管理系统
【设计目的】
对实际问题编写软件进行处理,学会分析待处理问题对象的特性并设计相应的数据结构进行描述,运用C语言程序设计知识,采用链表动态数据结构来组织记录学生成绩信息、采用文件来存储信息,实现一个HUST学生成绩管理系统。通过本课题设计的训练,使同学们在软件设计流程和上机实践技能方面受到较系统和严格的训练,培养良好的程序设计素质。
【题目要求】
本课题要求设计实现一个HUST学生成绩管理仿真系统,要求实现从信息源文件中读取一个班级的学生成绩信息,采用链表存放学生信息;提供课程设置,人员修改、添加、删除、查询,成绩统计等功能;查询或修改后的同学信息可保存回文件。程序设计语言使用C或/C++,编译工具可采用bc++3.1或vc++6.0。
1)、知识点
掌握VC++6.0编写多文件C程序;文件的使用,包括从文本文件读取信息,保存结果到文件等操作;掌握链表动态数据结构的使用,包括链表的建立、结点插入、结点删除、以及访问查询等功能。
2)、训练内容
本课题设计分为三个步骤:①收集整理本院某班的学生成绩信息资料形成信息源文件(文本文件);②编程实现学生成绩管理系统;③完成设计报告。
通过这次设计,掌握以下基本软件设计技能:
?需求分析、功能划分以及数据结构的描述和算法的设计实现;
?掌握对动态数据结构的操作(链表的建立,结点的增删、插入等操作);
?实现学生信息输入、信息修改、信息查询、文件存储等信息管理功能。
?软件课程设计结束时需要上交以下资料:
提交电子版本源程序和可独立运行的软件并能完成功能演示,源程序需加必要的注释;执行程序要有功能说明及运行操作说明。提交独立完成的软件设计报告书,要求格式规范、内容充实,包括详细叙述软件功能说明、模块的划分、关键数据结构和算法流程图、程序运行结果截图并附录程序开发日志等内容。
评分标准:必须实现文件存取数据功能,90分以上者必须实现链表数据结构组织学生信息功能。程序运行界面简洁清晰。报告内容充实,包含详细开发日志
和开发体会。程序代码中加入适当注释,并在程序关键代码处的注释中标注自己姓名。
【设计内容】
1)、结构简介
HUST学生成绩管理系统功能结构示意图如下:
2)、功能定义和要求
(1)学生信息从信息源文本文件中读入到系统,也可采用交互方式在程序执行过程中添加或编辑修改学生信息\课程设置等内容。
(2)本管理系统针对一个班级,同学20名以上,学生成绩信息包含2门课程或更多,可以设定选修课和必修课等特性。
(3)成绩查询功能包括按学号或姓名查询某学生成绩(必备),某课程学生成绩排名(必备)及优秀和不及格学生统计,同样的功能还可以设计应用于全年级(选做),还可增加其他自行设计的功能(例如查询各班级的排名、几门功课不及格的同学等)。
(4)文件保存功能(学生信息编辑修改后保存到信息源文本文件,下次启动本软件系统时可以使用上次修改后的信息)。
(5)采用链表来建立内部数据结构,处理一个个班级学生成绩,若采用数组数据结构处理学生信息或成绩信息则评定成绩按乘以难度系数0.9算。
3)、数据定义
HUST学生成绩管理系统内部数据信息层次结构如下:
采用二级链表数据结构来保存各班各名学生成绩信息。每个班级的所有学生组成第1级链表,链表上每个结点保存一个同学的信息。学生的功课成绩由第二级链表来保存。
本系统若只处理一个班级的学生信息,则要求学生人数在30名以上。本管理系统还可以扩展成处理全年级多个班级的信息系统,则要求处理数据集包含2个班以上,每班10名同学以上,每名同学课程2门以上。每位学生信息数据结构可参考HUST学生成绩管理实际情况设计.
数据结构类型定义参考:
struct course //课程信息数据结构定义
{
char coursename[20] ;//课程名
float score; //分数
//char flag; //课程类别 0为必修课程 1为选修课程
//struct course *next;//课程链接指针
};
struct huststudent //学生结点数据结构定义
{
char id[20]; //学号
char name[10]; //姓名
//char dorm;//宿舍
//int age; //年龄
……
int coursenumber;//课程数
struct course score[10]; //数组方式保存成绩
struct course *score; //学生成绩链表
//struct huststudent *next; //学生链接指针
};
struct hustclass //班级结点数据结构定义
{
int classindex; //班号
int studentnumber; //人数
struct huststudent *firststudent; //指向该班学生链表头
struct hustclass *next; //班级链表指针
};
4)、参考算法
链表的建立、结点插入、结点删除、查询、排序
文件的存取操作
【相关程序设计知识】
结构, 指针, 数组, 链表等数据结构
查询,统计,排序等数据操作处理
文件的存取
VC++6.0多文件编程
【参考书籍】
VC++6.0编程书籍
《标准C语言程序设计及应用》第9章第11章第3节周纯杰等华中科技大学出版社
《数据结构》第2章,第8章杨薇薇等编著高等教育出版社,中山大学出版社
《数据结构》第2章,第9章严蔚敏等编著清华大学出版社
第四部分设计示例
1、基本功能分块
程序的基本功能分块是,基于题目要求,对所提出的实现要求,按功能划块。其好处是对整个程序的实现内容有完整的限制,并可按此进行程序的函数定义。下图表明程序基本流程组成部分。
2、基本功能分块举例
“二叉树操作”题目基本功能分块,如下图所示。
3、规范流程图
通常根据程序的实现功能的细分,概要设计程序实现的流程图。在详细设计时,同样对功能进行分解并用流程图表示。在具体编码时,流程图则是最常用的基本工具。规范的程序流程定义工具,参考UML与建模工具(功能划分)、SDL方法与表达工具(流程方法)。
4、设计代码举例
二叉树的建立、查询和打印的源程序例程如下所示。
#include
#include
struct tree {
char info;
struct tree *left,*right;
};
struct tree *create_btree(struct tree *root,struct tree *r,char info);
struct tree *search_btree(struct tree *root,char key);
void print_btree(struct tree *r,int l);
void main ()
{ char s[100],c,key=' ' ;
struct tree *root=0 ;
do {
printf("Enter a letter:");
gets(s);
if (!root)
root=create_btree(root,root,*s);
else
create_btree(root,root,*s);
} while (*s) ;
print_btree(root,0);
key='1';
while ( key)
{
printf("Enter a key to find:");
scanf("%s",&c);
root=search_btree(root,c);
printf("press to continue\n");
}
} /* Btree.C 结束 */
struct tree *create_btree(struct tree *root,struct tree *r,char info) { if (r ==0 )
{ r=new (struct tree);//same as function: malloc(sizeof()) if ( r == 0)
{ printf("Out of memory\n"); return 0 ; }
r->left= 0; r->right=0; r->info=info;
。。。
} /* if = = 0 接下页 */
if (info < r->info)
create_btree(r,r->left,info);
if(info>=r->info)
create_btree(r,r->right,info);
} /* create_btree(root,r,info) */
第五部分设计报告要求
1、内容要求
根据所选题目要求,分别进行设计内容的理解、分析、设计、编程、调试,最后完成设计报告。下面以“二叉树查询”为例,简述设计的内容要求分析。
1)、设计思想
利用结构体表达“二叉树”。
2)、程序结构
主程序与函数调用。
3)、功能划分
子功能用函数表示。
4)、程序流程
具体关键算法,利用先序二叉树的原理,对所输入数据进行二叉树生成,同时根据指令进行分类输出。
涉及的C基本逻辑命令方面,主要是对C的基本逻辑命令应非常熟悉。
5)、程序运行结果演示
(1)、结果展示
利用命令行方式,表示输入数据构成的‘二叉树’。
(2)、数据规模
至少输入50个数字(或字母)。
6)、开发日志及设计总结
(1)、设计过程及开发日志
要求根据对题目要求的分析,给出恰当的课程设计过程记录。
(2)、调试过程
首先给出调试环境的描述,然后对调试过程碰到的问题、解决方法进行描述。
(3)、独特之处
可对自己的软件设计中体会深刻、或采用了的独特方法进行说明。
2、格式要求
设计报告给定标准格式见下页。
3、提交时间与要求
1)、第2周末中期提交内容:文件读写功能的实现程序,链表的实现程序(选作)。
2)、第4周末结题内容(以自己“学号+名字”命名文件夹):含运行文件,源程序代码、设计报告的电子文档(“学号+名字+软件课程设计报告”命名),设计报告的打印稿。
以上两项工作提前完成者可先交给老师。
课程设计时间结束后每个班级学习委员集中收齐还未交的,统一放在以自己班级名命名的文件夹内,各同学的内容放在以姓名命名的子文件夹内,再提交给老师。