潘治刚成绩管理系统详细设计.docx
- 文档编号:8074603
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:14
- 大小:120.25KB
潘治刚成绩管理系统详细设计.docx
《潘治刚成绩管理系统详细设计.docx》由会员分享,可在线阅读,更多相关《潘治刚成绩管理系统详细设计.docx(14页珍藏版)》请在冰豆网上搜索。
潘治刚成绩管理系统详细设计
成绩管理系统
详细设计
第一章引言
1.1编写目的
学生成绩管理系统详细设计是设计的第二个阶段,这个阶段的主要任务是在学生成绩管理系统概要设计书基础上,对概要设计中产生的功能模块进行过程描述,设计功能模块的内部细节,包括算法和详细数据结构,为编写源代码提供必要的说明。
1.2背景
根据某某学校希望能够充分利用现代科技来提高学生成绩管理的效率,将在原有的办公系统的基础上安装一款可以对学生成绩进行管理统计的软件,使教务人员的工作更加方便,工作效率也更加提高。
1.3参考资料
《C语言基础视频教程》讲师张永来中软卓越培训中心
第二章总体设计
2.1需求概述
高根据某某学校的要求,主要实现对学生基本信息和学生成绩的管理和存储;包括添加,删除,查找,修改,统计
2.1软件结构
第三章程序描述
3.1对数据进行存储
本软件才用结构体来保存一条学生的记录,然后用一个链表来保存一个学生信息表,结构体代码如下:
成绩管理表结构代码:
typedefchar*pChar;
typedefstructGradeInfo
{
intnID;
pCharSubject[15];
intGrade[15];
structGradeInfo*next;
}*pGrade;
学生基本信息结构体代码:
typedefstructStudentInfo
{
intnID;
charname[20];
charsex[3];
intage;
charClassName[20];
structStudentInfo*next;
}*pSTUDENT;
3.2对学生基本信息数据的管理
3.2.1删除指定学号的记录
当用户选择这个功能以后,只需要按提示输入学生学号,系统自动调用下面的DeleteStudent函数删除指定学生信息。
数据流程图:
intDeleteStudent(pSTUDENTlink,intID)
{
pSTUDENTp=stlink,p2=NULL;
while(p->next!
=NULL)
{
if(p->next->nID==ID)
{
p2=p->next;
p->next=p2->next;//这句话就已经让值为ID的结点移出链表了
free(p2);
return0;
}
p=p->next;//如果这个结点不是要删除的节点就继续往下移动
}
return-1;
}
3.2.2插入一条学生信息
当用户选择插入学生信息这项功能以后,系统就调用下面函数,要求用户输入学生信息,保存到结构体中,然后插入到链表中,等待保存到文件中。
intInsertStudent(pSTUDENTlink,intID,charname[],charsex[],intage,charclassname[])
{
st->next=stlink->next;
stlink->next=st;
}
这里采用的是头插法
3,.2.3修改一条学生基本信息
当用户需要修改学生信息的时候,系统需要用户输入该学生的所有信息然后调用ModefyStuInfo函数修改原有能容,函数定义如下:
intModifyStuInfo(pSTUDENTlink,intID,charname[],charsex[],intage,charclassname[])
{
Link->nID=ID;
Strcopy(link->name,name);
Strcopy(link->sex,sex);
Strcopy(link->classname,classname);
Link->age=age;
}
3.3对学生成绩信息数据的管理
3.3.1删除一条学生成绩信息
intDeleteStudent(pGradelink,intID)
{
pSTUDENTp=stlink,p2=NULL;
while(p->next!
=NULL)
{
if(p->next->nID==ID)
{
p2=p->next;
p->next=p2->next;//这句话就已经让值为ID的结点移出链表了
free(p2);
return0;
}
p=p->next;//如果这个结点不是要删除的节点就继续往下移动
}
return-1;
}
3.3.2插入一条学生成绩信息
在这里插入成绩信息的时候需要在学生信息表查找看看学生信息表中有没有该学生的信息,如果没有就不能插入。
数据流程图:
intInsertStudent(pGradelink,intID,charsubject[],intgrade)
{
If(seek(student,ID)=-1)
{
Printf(该生并不存在,清检查后重新输入:
);
}
Else
{
Gre->next=link->next;
Link->next=gre;
}
}
3.3.3查询并修改一条学生成绩信息
intModifyStuInfo(pGradelink,intID,charsubject[],intgrade)
{
Link->nID=ID;
Strcopy(link->subject,subject);
Link->grade=grade;
}
3.4对学生成绩信息数据统计
3.4.1读取学生信息
读取学生信息的时候,就相当于是建立一个链表的时候,读出来的数据放到一个结构体变量中,然后将这个结构体变量插入到链表中去。
当用feof()来判断文件中的数据是否读完
intReadFlieofStu(pSTUDENTStudent)
{
pGradegra;
FILE*fp=NULL;
fp=fopen("StudentGradeInfo.txt","rb");
if(fp==NULL)
{
printf("目前没有学生信息!
\n");
return-1;
}
else
{
gra=newGRADE;
fread(gra,sizeof(GRADE),1,fp);
while(!
feof(fp))
{
gra->next=Grade->next;
Grade->next=gra;
fread(gra,sizeof(GRADE),1,fp);
}
}
fclose(fp);
}
3.4.2读取学生成绩
读取学生信息的过程和上面一个函数的原理一样,这里就不说了
intReadFileofGrade(pGradeGrade);
3.4.3总分成绩第一学生信息
这里直接用比较的方法找出链表中最高分是多少,然后根据这个分数把所有这个分数的同学的信息都显示出来:
intTotalFirst(pGradeGrade)
{
Intdata=0;
pGradep=Grade->next;
While(p!
=null)
{
If(p->grade>data)
Data=grade;
P=p->next;
}
}
3.4.4单科成绩第一学生信息
这个函数分别显示每一个科目分数最高的学生信息,采用的算法和intTotalFirst(pGradeGrade)函数的算法基本一致。
只是要多查找几次而已,这里也就不多说了.
intSingleFirst(pGradeGrade,charSubject[])\
{}
3.4.5不及格学生成绩信息
这里需要因为不及格的学生可能不止一个,所以需要换回一个链表,然后把链表的信息输出来,这里主要涉及的算法就是查找和添加,把分数小于及格分数线的学生信息添加到另一个链表中。
数据流程图:
pGradeflunk(pGradeGrade);
{
pGradelink;
initLink(link);
pGradep=Grade->next,p2=NULL;
If(p->Grade<60)
{
P2=p;
P2->next=link->next;
Link->next=p2;
}
P=p->nxet;
}
3.4.6不及格人数
这个函数算法和上面一样,只是统计的是人数,相对还要简单很多。
intflunkNum(pGradeGrade);
3.4.7显示所有学生的成绩
这里只需要遍历整个链表,然后把所有人的成绩信息输出来就可以了。
voidprintAllGrade(pGradeGrade);
{
pGradep=Grade->next;
While(p!
=NULL)
{
Printf("……",……);
P=p->next;
}
}
3.4.8可以分组统计学生成绩并输出到屏幕
voidprintBySubject(pGradeGrade,charSubject[]);
voidprintByGrade(pGradeGrade,charClassName[15]);
voidprintByClass(pGradeGrade);
3.4.9按总分排序
只需要调用该函数就直接把排序以后的结果显示出来,但是并不改变原来表中的顺序,并把排序以后的结果临时存储起来。
pGradeSortByTotal(pGradeGrade);
{
这个函数采用的算法就是用快速排序法!
将链表中的结点按总分进行排序然后输出。
这里最重的就是设计到结点之间的交换,最好不需要把结点的内容拿出来互换,而是把结点互换。
两结点交换的代码如下:
pGradep=Grade->next,p2=gradeNode;
P-next=p2->next;
P2->next=p2->next->next;
P->next->next=p2;
这段代码实现的就是把p2结点和p2的下一个结点交换位置
}
3.4.10安单科排序
只需要调用该函数就直接把排序以后的结果显示出来,但是并不改变原来表中的顺序,并把排序以后的结果临时存储起来。
数据流程图:
pGradeSortBySubject(pGradeGrade,charSubject[]);
{
单科排序的算法和总分排序的算法一样,只是需要用户输入是按哪一科的成绩来排序,或者哪两科的成绩来排序;
}
3.4.11按学号排序
只需要调用该函数就直接把排序以后的结果显示出来,但是并不改变原来表中的顺序,并把排序以后的结果临时存储起来。
pGradeSortByStudentId(pGradeGrade);
{
这个算法也一样
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 潘治刚 成绩管理系统 详细 设计