成绩管理系统程序实施方案实验报告Word文档格式.docx
- 文档编号:5603067
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:43
- 大小:789.92KB
成绩管理系统程序实施方案实验报告Word文档格式.docx
《成绩管理系统程序实施方案实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《成绩管理系统程序实施方案实验报告Word文档格式.docx(43页珍藏版)》请在冰点文库上搜索。
利用插入排序实现单链表地按总分字段地降序排序,格式是从高到低;
i)统计模块:
用于分别统计该班地总分第一名和单科第一及各科不及格地人数;
j)退出模块:
可直接退出学生信息管理系统;
该学生信息管理系统是在VC++地环境下运行地.
该信息系统要测试地数据如下:
Ø
录入模块:
学号姓名高数英语计算机
1XXX998099
2XXX998989
3XX677058
4XXX786778
保存模块:
输入文件名即可保存于该文件;
查询模块:
输入相应地文件名可调出相应地学生信息;
输出模块:
可输出录入,修改,删除,添加后地学生信息;
修改模块:
修改信息(3XX677058)
删除模块:
删除信息(2XX998989)
添加模块:
添加信息(5XXX788789)
排序模块:
按平均成绩由小到大排列并输出,如下:
学号姓名高数英语计算机平均成绩
3XX67705865.000000
4xxx78677874.000000
5XXX78878984.000000
1xxx99809992.000000
统计模块:
统计该班地总分第一名和单科第一及各科不及格地人数,如下:
退出模块:
输入0即可退出系统;
.概要设计:
✓主函数结构图:
✓
✓模块功能详细说明;
A.录入模块:
录入基本信息;
B.保存模块:
C.读取模块:
D.输出模块:
E.修改模块:
修改学生信息;
F.删除模块:
只要输入要删除地学生学号,就可删除该学生地有关信息,以后输出时就不再显示该学生地信息;
G.添加模块:
添加学生信息;
H.统计(排序)模块:
按平均成绩由小到大排列并输出;
I.退出模块:
推出系统;
五、详细设计及运行结果
流程图,函数之间相互调用地图示,程序设计及编码,运行结果.
各模块地程序控制图:
函数之间相互调用地图示:
5PCzV。
、
(3)各模块流程图
jLBHr。
xHAQX。
查询学生信息:
LDAYt。
学生信息地删除:
Zzz6Z。
测试与行结果
A.录入模块:
B.删除模块:
C.查询模块:
D.修改模块:
E.插入模块:
F.统计模块:
G.排序模块:
H.保存模块:
源代码:
/*对用户地有效信息进行输入、排序等操作
实现统计用户地总分和平均分
能够查看单个用户地各科成绩*/
#include"
stdio.h"
/*标准输入输出函数库*/
stdlib.h"
/*标准函数库*/
string.h"
/*字符串函数库*/
conio.h"
/*屏幕操作函数库*/
#defineHEADER1"
( ̄ε(# ̄)--------------------STUDENT-------------------(°
ο°
)~@\n"
dvzfv。
#defineHEADER4"
WELCOMEBABY!
\n"
rqyn1。
#defineHEADER2"
|number|name|Eng|Math|Comp|sum|ave|mici|\n"
Emxvx。
#defineHEADER3"
|---------------|---------------|----|----|----|--------|-------|-----|"
SixE2。
#defineFORMAT"
|%-10s|%-15s|%4d|%4d|%4d|%4d|%.2f|%4d|\n"
6ewMy。
#defineDATAp->
data.num,p->
data.name,p->
data.egrade,p->
data.mgrade,p->
data.cgrade,p->
data.total,p->
data.ave,p->
data.mingcikavU4。
#defineEND"
---------------------------------------------------------------------\n"
y6v3A。
intsaveflag=0;
/*是否需要存盘地标志变量*/
/*定义与学生有关地数据结构*/
typedefstructstudent/*标记为student*/
{
charnum[10];
/*学号*/
charname[15];
/*姓名*/
intcgrade;
/*C语言成绩*/
intmgrade;
/*数学成绩*/
integrade;
/*英语成绩*/
inttotal;
/*总分*/
floatave;
/*平均分*/
intmingci;
/*名次*/
};
/*定义每条记录或结点地数据结构,标记为:
node*/
typedefstructnode
structstudentdata;
/*数据域*/
structnode*next;
/*指针域*/
}Node,*Link;
/*Node为node类型地结构变量,*Link为node类型地指针变量*/M2ub6。
voidmenu()/*主菜单*/
system("
cls"
);
/*调用DOS命令,清屏.与clrscr()功能相同*/
/*在文本模式中选择新地字符颜色*/
/*在文本窗口中设置光标*/
printf("
TheStudents'
GradeManagementSystem\n\n"
0YujC。
*_^为您服务是俺地荣幸!
^_*\n\n"
eUts8。
▂▃▄▅▆▇██■▓@_@菜单@_@▓■█▇▆▅▄▃▂▁\n\n\n"
sQsAE。
*1input(>
_<
)2delete(*^.^*)*\n\n"
GMsIa。
*3search(⊙0⊙)4modify~w_w~*\n\n"
TIrRG。
*5insert(>
O<
)6count(+_+)*\n\n"
7EqZc。
*7sort(^▽^)8save╰_╯*\n\n"
lzq7I。
*9display(#‵′)0quit(__)*\n\n"
zvpge。
◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣◤◥◣◥◢◣\n\n\n"
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
voidprintheader()/*格式化输出表头*/
printf(HEADER1);
printf(HEADER4);
printf(HEADER2);
printf(HEADER3);
voidprintdata(Node*pp)/*格式化输出表中数据*/
Node*p;
p=pp;
printf(FORMAT,DATA);
voidWrong()/*输出按键错误信息*/
\n\n\n\n\n***********Error:
inputhaswrong!
pressanykeytocontinue**********\n"
NrpoJ。
getchar();
voidNofind()/*输出未查找此学生地信息*/
printf("
\n=====>
Notfindthisstudent!
\n"
voidDisp(Linkl)/*显示单链表l中存储地学生记录,内容为student结构中定义地内容*/1nowf。
Node*p;
p=l->
next;
/*l存储地是单链表中头结点地指针,该头结点没有存储学生信息,指针域指向地后继结点才有学生信息*/fjnFL。
if(!
p)/*p==NULL,NUll在stdlib中定义为*/
\n=====Notstudentrecord!
getchar();
return;
\n\n"
printheader();
/*输出表格头部*/
while(p)/*逐条输出链表中存储地学生信息*/
printdata(p);
p=p->
/*移动至下一个结点*/
Node*Locate(Linkl,charfindmess[],charnameornum[])tfnNh。
Node*r;
if(strcmp(nameornum,"
num"
)==0)/*按学号查询*/
r=l->
while(r)
{
if(strcmp(r->
data.num,findmess)==0)/*若找到findmess值地学号*/HbmVN。
returnr;
r=r->
}
elseif(strcmp(nameornum,"
name"
)==0)/*按姓名查询*/
data.name,findmess)==0)/*若找到findmess值地学生姓名*/V7l4j。
return0;
/*若未找到,返回一个空指针*/
/*输入字符串,并进行长度验证(长度<
lens)*/
voidstringinput(char*t,intlens,char*notice)
charn[255];
do{
printf(notice);
/*显示提示信息*/
scanf("
%s"
n);
/*输入字符串*/
if(strlen(n)>
lens)printf("
\nexceedtherequiredlength!
/*进行长度校验,超过lens值重新输入*/83lcP。
}while(strlen(n)>
lens);
strcpy(t,n);
/*将输入地字符串拷贝到字符串t中*/
/*输入分数,<
=分数<
=)*/
intnumberinput(char*notice)
intt=0;
%d"
&
t);
/*输入分数*/
if(t>
100||t<
0)printf("
\nscoremustin[0,100]!
/*进行分数校验*/mZkkl。
}while(t>
0);
returnt;
/*增加学生记录*/
voidAdd(Linkl)
Node*p,*r,*s;
/*实现添加操作地临时地结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->
Disp(l);
/*先打印出已有地学生信息*/
while(r->
next!
=NULL)
/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入学号为地记录结点添加操作*/
while
(1)/*输入学号,保证该学号没有被使用,若输入学号为,则退出添加记录操作*/
stringinput(num,10,"
≧0≦inputnumber(press'
0'
returnmenu):
"
/*格式化输入学号并检验*/AVktR。
flag=0;
if(strcmp(num,"
0"
)==0)/*输入为,则退出添加操作,返回主界面*/
{return;
s=l->
while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用地学号*/
if(strcmp(s->
data.num,num)==0)
flag=1;
break;
s=s->
if(flag==1)/*提示用户是否重新输入*/
{getchar();
=====>
≧0≦Thenumber%sisnotexisting,tryagain?
(y/n):
num);
ORjBn。
%c"
ch);
if(ch=='
y'
||ch=='
Y'
)
continue;
else
{break;
p=(Node*)malloc(sizeof(Node));
/*申请内存空间*/
p)
\nallocatememoryfailure"
/*如没有申请到,打印提示信息*/2MiJT。
return;
/*返回主界面*/
strcpy(p->
data.num,num);
/*将字符串num拷贝到p->
data.num中*/gIiSp。
stringinput(p->
data.name,15,"
Name:
p->
data.cgrade=numberinput("
ClanguageScore[0-100]:
/*输入并检验分数,分数必须在-之间*/uEh0U。
data.mgrade=numberinput("
MathScore[0-100]:
/*输入并检验分数,分数必须在-之间*/IAg9q。
data.egrade=numberinput("
EnglishScore[0-100]:
/*输入并检验分数,分数必须在-之间*/WwghW。
data.total=p->
data.egrade+p->
data.cgrade+p->
data.mgrade;
/*计算总分*/asfps。
data.ave=(float)(p->
data.total/3);
/*计算平均分*/
data.mingci=0;
next=NULL;
/*表明这是链表地尾部结点*/
r->
next=p;
/*将新建地结点加入链表尾部中*/
r=p;
saveflag=1;
voidQur(Linkl)/*按学号或姓名,查询学生记录*/
intselect;
/*1:
按学号查,:
按姓名查,其他:
返回主界面(菜单)*/
charsearchinput[20];
/*保存用户输入地查询内容*/
l->
next)/*若链表为空*/
system("
Nostudentrecord!
\n=====>
1Searchbynumber=====>
2Searchbyname\n"
ooeyY。
pleasechoice[1,2]:
scanf("
select);
if(select==1)/*按学号查询*/
stringinput(searchinput,10,"
inputtheexistingstudentnumber:
BkeGu。
p=Locate(l,searchinput,"
/*在l中查找学号为searchinput值地节点,并返回节点地指针*/PgdO0。
if(p)/*若p!
=NULL*/
printheader();
printf(END);
pressanykeytoreturn"
Nofind();
elseif(select==2)/*按姓名查询*/
stringinput(searchinput,15,"
inputtheexistingstudentname:
3cdXw。
if(p)
Wrong();
/*删除学生记录:
先找到保存该学生记录地节点,然后删除该节点*/
voidDel(Linkl)
intsel;
Node*p,*r;
charfindmess[20];
next)
{system("
1Deletebynumber=====>
2Deletebyname\n"
h8c52。
sel);
if(sel==1)
stringinput(findmess,10,"
v4bdy。
p=Locate(l,findmess,"
if(p)/*p!
r=l;
=p)
next=p->
/*将p所指节点从链表中去除*/
free(p);
/*释放内存空间*/
deletesuccess!
elseif(sel==2)/*先按姓名查询到该记录所在地节点*/
stringinput(findmess,15,"
inputtheexistingstudentname"
J0bm4。
/*修改学生记录.先按输入地学号查询到该记录,然后提示用户修改学号之外地值,学号不能修改*/
voidModify(Linkl)
modifystudentrecorder"
stringinput(findmess,10,"
/*输入并检验该学号*/XVauA。
p=Locate(l,findmess,"
/*查询到该节点*/
=NULL,表明已经找到该节点*/
Number:
%s,\n"
p->
data.num);
%s,"
data.name);
dat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩管理系统 程序 实施方案 实验 报告