软件工程中包含需求、设计、编码和测试四个阶段
功能分析(需求):分析软件用户的需求,以及需要分析统计的数据。
模块划分(设计):基于功能划分、基于层次划分、基于专业划分、基于需求划分,通过功能分析,对系统所需要的功能进行划分,首先将规模较大的问题分解为若干个功能相对独立的小问题即模块,每个模块还可以再细分,这个过程也可参照自顶向下、逐步求精的思路完成。根据上述的需求分析确定系统应该完成的几大功能模块。
关键技术研究(设计与编码的过渡):通过功能分析和模块划分,了解实现该系统功能需要的关键技术。
代码实现(编码):书写程序代码。
测试:运行系统,测试系统。
2.1 学生成绩管理系统的功能分析
2.1.1需求分析
基于用户的需求分析:
(1)管理员用户:教师和学生信息管理。
(2)教师用户: 成绩管理。
(3)学生用户: 成绩查询。
2.1.2数据需求
(1)学生数据(结构体)
(2)用户数据(结构体)
问题求解过程中,要有效地表示和组织问题相关的数据,包括输入、输出、中间结果等,在设计算法时,需要精确定义对何种对象进行操作,可以进行哪些操作等,这些必须在开始编写代码之前完成。本系统中约定学生的信息需要包括学号、姓名、3门课的成绩和总分,学生的数据信息存放在磁盘文件中。
2.2 学生成绩管理系统的模块划分
1、管理员:增删改用户。
2、教师:增删改成绩(成绩管理)、查询成绩(成绩、学号、课程)、成绩统计(平均分、排序)、成绩输出。
3、学生:查询成绩(姓名、学号、课程)。
2.3 关键知识点
结构体
学生信息、用户信息。
函数
用户的每个功能使用函数实现。
文件
用户信息和学生成绩信息。
一、结构体
(1)学生类型
(2)用户类型
1、结构体类型的定义:
2、结构体变量的定义:
(1)先定义结构体类型,再定义结构体变量。
struct student
{ char name[20];
char num[12];
int score[M+1];
};
struct student stu1,stu2;
(2)在定义结构体类型的同时说明结构体变量。
(3)省略结构体类型名,直接定义结构体变量。
3、结构体变量的使用:
引用:结构体变量名.成员名
赋值:逐个成员赋值、整体赋值
gets(stu1.name); gets(stu1.num);
stu1.score[M]=0;
for(i=0;i<M;i++)
{ scanf("%d",&stu1.score[i])
stu1.score[M]=stu1.score[M]+stu1.score[i];}
stu2=sut1;//相当于逐个成员赋值
4、结构体数组:
struct student
{ char name[20];
char num[12];
int score[M+1];
}stu[1000];
for(i=0;i<1000;i++)
{gets(stu[i].name);
gets(stu[i].num);
for(j=0;j<M;j++)
scanf("%d",&stu[i].score[j]);}
5、指向结构体的指针:
struct student *pstu,stu1; pstu=&stu1;
pstu->num (*pstu).num
*pstu=stu;
gets((*p).name);或者gets(p->name);
二、函数
1、函数的定义:
void students()
{int sel;
char filename[20];
do
{ printf("------------学生模块的选择-------------\n");
printf("---------------------------------------\n");
printf(" 1: 按姓名查询 \n");
printf(" 2: 按学号查询 \n");
printf(" 3: 按课程查询 \n");
printf(" 0: 退出 \n");
printf(" 请选择 0-3 \n");
printf("----------------------------------------\n");
scanf("%d",&sel);getchar();
switch(sel)
{ case 1: printf("请输入学生姓名");gets(name);quname(name);break;