一、实验名称:
实验B:小系统开发 二、实验目的:
1、掌握一个完整系统开发的基本过程 2、掌握完整系统开发过程中应注意的问题 三、实验器材:
1、计算机 四、实验内容:
我们这儿设计系统的主要目的是为了了解一个完整系统开发的一般过程及各类资源的组织方式,所以我们选择以一个“班级基本信息管理系统”为例,班级内部基本信息情况大家比较熟悉。
按照软件工程原理,将软件的生命周期大体划分为8个阶段,如下: 1、问题的定义:
须确定“要解决的问题是什么?”
通过对客户的访问调查,系统分析员扼要写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。
开发一个针对本班的“班级基本信息管理系统”以实现对本班成员基本信息的自动化管理。 2、可行性研究:
用来确定上一阶段中的问题是否有行得通的解决办法。
班级基本信息大家比较熟悉,又有一定的C语言基础,有充足的上机实践时间,完全有能力开发这样的一个小系统。
另外,在性能、功能要求不高的情况下,此系统的开发也不需要太大的成本。 3、需求分析:
主要需要确定目标系统必须具备哪些功能。
系统分析员在此阶段须和用户密切配合,充分交流信息,以得出用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。
这个阶段需要准确完整地体现用户要求,用正式文档准确记录对目标系统的需求,这份文档通常叫做规格说明书(Specification)。
大体如下:
基本信息包括如下内容:学号(14位)、姓名(最多三个汉字)、性别(一个汉字)、年龄(3位),其它信息可根据情况自定 班级总人数
功能要求:录入功能、按学号查找(速度不能太慢)、按学号修改人员信息、按学号删除人员、将全部人员信息按学号顺序列表输出、启动时的用户合法性检测功能、永久性存盘功能等。 性能要求:查找速度不能太慢(5秒以内) 4、系统设计(概要设计):
设计出实现目标系统的几种可能的方案,从中选择一种最佳的。设计系统的总体结构,也即确定程序由哪些模块组成及模快间的关系。
首先,每个人员的基本信息可以用结构体来表示,而所有成员的信息在内存中可以用一个一维数组来存放,用一个变量CurrentCount来表示目前数组中具有有效信息的人员数,初值为0,如下:
#include
#define N 100 //最大人数
struct stu_info {
char xh[14]; //学号 char xm[7]; //姓名 char xb[3]; //性别 int nl; //年龄 };
struct stu_info stu[N+1];//用于存放所有人相关信息,0号元素备用 int CurrentCount=0; //当前实际人数
按系统的逻辑功能,可以将系统大体划分为如右图所示几大模块: 5、详细设计:
主要指对各个模块具体算法及数据结构的设计。 针对本系统的各个模块的算法描述见后面各图: 2
6、编码:
指选择具体的计算机语言去书写程序。 #include
#define N 100 //最大人数
struct stu_info {
char xh[14]; //学号 char xm[7]; //姓名 char xb[3]; //性别 int nl; //年龄 };
struct stu_info stu[N+1];//用于存放所有人相关信息,0号元素备用 int CurrentCount=0; //当前实际人数
void input() //录入模块 {
char sfjx=1;
3
while(sfjx!=0) {
if(CurrentCount==N) {
printf(\人数已达上限,不能添加!!!\\n\ sfjx=0; } else {
CurrentCount++;
printf(\请输入一个人员的相关信息(学号 姓名 性别 年龄):\
scanf(\rrentCount].nl);
printf(\是否继续(0--结束,其它--继续):\ scanf(\ } }
system(\}
void save() //保存模块 {
FILE *fp;
fp=fopen(\ if(fp==NULL)
printf(\文件打开不成功,信息无法保存!!!\\n\ else {
fprintf(fp,\ for(int i=1;i<=CurrentCount;i++)
fprintf(fp,\ fclose(fp);
printf(\信息已成功保存!!!\\n\ }
system(\}
void read() //读盘模块 {
FILE *fp;
fp=fopen(\ if(fp==NULL)
printf(\文件打开不成功,信息无法读取!!!\\n\ else {
fscanf(fp,\ for(int i=1;i<=CurrentCount;i++)
4
{
fscanf(fp,\ printf(\学号:%s 姓名:%s 性别:%s 年
龄:%d\\n\ }
fclose(fp);
printf(\信息已成功读取!!!\\n\ }
system(\}
void search() //查询模块 {
char dcxh[14]; int sfjx=1,i; while(sfjx!=0) {
printf(\请输入一个待查学员的学号:\ scanf(\
strcpy(stu[0].xh,dcxh); i=CurrentCount;
while(strcmp(stu[i].xh,dcxh)!=0) i--; if(i==0)
printf(\查无此人!!!\\n\ else {
printf(\此人详细信息如下:\\n\ printf(\学号:%s 姓名龄:%d\\n\ }
printf(\是否继续(0--结束,其它--继续):\ scanf(\ }
system(\}
void del() //删除模块 {
char dcxh[14]; int sfjx=1,i,j; while(sfjx!=0) {
printf(\请输入一个待删学员的学号:\ scanf(\
strcpy(stu[0].xh,dcxh); i=CurrentCount;
while(strcmp(stu[i].xh,dcxh)!=0)
5
%s 性别:%s 年
: