学生成绩管理系统Word文件下载.docx
- 文档编号:18467598
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:33
- 大小:379.95KB
学生成绩管理系统Word文件下载.docx
《学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
(九)学生信息排序;
(十)学生信息排序;
(十一)主函数
【①②③④⑤为各种方式的排序】*/
#include"
stdio.h"
stdlib.h"
string.h"
conio.h"
/*屏幕操作函数库*/
#defineHEADER1"
****************************学生信息表*************************\n\n"
#defineHEADER2"
|学号|姓名|学院|班级|C语言|高数|英语|总分|平均分|\n"
#defineHEADER3"
|====|======|========|========|=====|====|====|========|========|\n"
#defineFORMAT"
|%-4s|%-6s|%-8s|%-8s|%4d|%4d|%4d|%4d|%5.1f|\n"
#defineDATAp->
data.num,p->
data.name,p->
data.xueyuan,p->
data.banji,p->
data.egrade,p->
data.mgrade,p->
data.cgrade,p->
data.total,p->
data.ave
#defineEND"
*****************************************************************\n"
intsaveflag=0;
/*是否需要存盘的标志变量*/
structstudent
{
charnum[10];
/*学号*/
charname[15];
/*姓名*/
charxueyuan[15];
/*学院*/
charbanji[15];
/*班级*/
intcgrade;
/*C语言成绩*/
intmgrade;
/*高数成绩*/
integrade;
/*英语成绩*/
inttotal;
/*总分*/
floatave;
/*平均分*/
};
typedefstructnode/*定义每条记录或结点的数据结构,标记为:
node*/
structstudentdata;
/*数据域*/
structnode*next;
/*指针域*/
}Node,*Link;
/*Node为node类型的结构变量,*Link为node类型的指针变量*/
//
(一)主菜单界面======================================================================================================================================
voidmenu()
{system("
color2e"
);
system("
cls"
/*调用DOS命令,清屏*/
printf("
\n学生成绩管理系统\n\n\n"
--------------------------主菜单------------------------------\n\n"
*1创建学生信息*2插入学生信息\n\n"
*3删除学生信息*4修改学生信息\n\n"
*5按学号排序*6查询学生信息\n\n"
*7按总分排序*8学生信息整理\n\n"
*9保存学生信息*0退出系统\n\n"
-------------------------------------------------------------\n"
}
//表格形式显示记录===========================================================================================================================
voidprintheader()/*格式化输出表头*/
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
voidprintdata(Node*pp)/*格式化输出表中数据*/
Node*p;
p=pp;
printf(FORMAT,DATA);
voidWrong()/*输出按键错误信息*/
\n\n\n\n\n·
·
Error:
输入错误!
\n"
getchar();
voidNofind()/*输出未查找此学生的信息*/
\n……>
未查找到该学生的信息!
voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
Node*p;
p=l->
next;
/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/
if(!
p)
{
printf("
没有学生信息!
getch();
return;
}
\n\n"
printheader();
/*输出表格头部*/
while(p)/*逐条输出链表中存储的学生信息*/
printdata(p);
p=p->
/*移动直下一个结点*/
printf(HEADER3);
\n\n按任意键继续!
getch();
//
(二)记录查找定位函数
Node*Locate(Linkl,charfindmess[],charnameornum[])
Node*r;
if(strcmp(nameornum,"
num"
)==0)/*①按学号查询*/
r=l->
while(r)
{
if(strcmp(r->
data.num,findmess)==0)
returnr;
r=r->
}
elseif(strcmp(nameornum,"
name"
)==0)/*②按姓名查询*/
{
data.name,findmess)==0)
return0;
/*若未找到,返回一个空指针*/
//==================Locate2=============================
intLocate2(Linkl,charfindmess[],charnameornum[])
intlogo=0;
xueyuan"
)==0)/*③按学院查询*/
if(r!
=NULL)
printheader();
data.xueyuan,findmess)==0)
{
printdata(r);
printf(HEADER3);
logo=1;
}
banji"
)==0)/*④按班级查询*/
data.banji,findmess)==0)
returnlogo;
//输入字符串,并进行长度验证(长度<
lens)
voidstringinput(char*t,intlens,char*notice)
charn[255];
do{
printf(notice);
/*显示提示信息*/
scanf("
%s"
n);
if((int)strlen(n)>
lens)printf("
\n超出指定长度,请重新输入!
\n"
/*进行长度校验,超过lens值重新输入*/
}while((int)strlen(n)>
lens);
strcpy(t,n);
/*将输入的字符串拷贝到字符串t中*/
//输入分数,0<
=分数<
=100)
intnumberinput(char*notice)
intt=0;
%d"
&
t);
if(t>
100||t<
0)printf("
\n分数范围必须在[0,100]!
/*进行分数校验*/
}while(t>
0);
returnt;
//(三)创建学生信息(根据提示输入学生的各项信息,计算出总分和平均分,并将学生成绩信息存储到一个二进制文件中)==================================================================================================================================
voidCreate(Linkl)
Node*p,*r,*s;
/*实现添加操作的临时的结构体指针变量*/
charch,flag=0,num[10];
r=l;
s=l->
Disp(l);
/*先打印出已有的学生信息*/
while(r->
next!
r=r->
/*将指针移至于链表最末尾,准备添加记录*/
while
(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/
while
(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/
stringinput(num,10,"
请输入学号(输入'
0'
返回主菜单):
"
/*格式化输入学号并检验*/
flag=0;
if(strcmp(num,"
0"
)==0)/*输入为0,则退出添加操作,返回主界面*/
{return;
s=l->
while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/
if(strcmp(s->
data.num,num)==0)
{flag=1;
break;
s=s->
if(flag==1)/*提示用户是否重新输入*/
{
getch();
printf("
……>
学号%s已存在,是否重新输入?
(y/n):
num);
scanf("
%c"
ch);
if(ch=='
y'
||ch=='
Y'
)
continue;
else
return;
else
{break;
p=(Node*)malloc(sizeof(Node));
/*申请内存空间*/
if(!
p)
printf("
\n内存申请失败!
"
return;
strcpy(p->
data.num,num);
/*将字符串num拷贝到p->
data.num中*/
stringinput(p->
data.name,6,"
姓名:
data.xueyuan,8,"
学院:
data.banji,8,"
班级:
p->
data.cgrade=numberinput("
C语言成绩[0-100]:
/*输入并检验分数,分数必须在0-100之间*/
data.mgrade=numberinput("
高数成绩[0-100]:
/*输入并检验分数,分数必须在0-100之间*/
data.egrade=numberinput("
英语成绩[0-100]:
data.total=p->
data.egrade+p->
data.cgrade+p->
data.mgrade;
/*计算总分*/
data.ave=(p->
data.total/(float)3);
/*计算平均分*/
next=NULL;
/*表明这是链表的尾部结点*/
r->
next=p;
/*将新建的结点加入链表尾部中*/
r=p;
saveflag=1;
return;
//(四)查询学生记录=================================================================================================================================
voidFind(Linkl)
intlogo,select;
charsearchinput[20];
/*保存用户输入的查询内容*/
Node*p,*q;
l->
next)/*若链表为空*/
system("
没有学生信息!
\n……>
1按学号查询\n……>
2按姓名查询\n……>
3按学院查询\n……>
4按班级查询\n"
请选择[1,2,3,4]:
scanf("
select);
if(select==1)/*按学号查询*/
stringinput(searchinput,4,"
请输入现有的学生的学号:
p=Locate(l,searchinput,"
/*在l中查找学号为searchinput值的节点,并返回节点的指针*/
if(p)
printdata(p);
printf(END);
按任意键返回主菜单!
else
Nofind();
elseif(select==2)/*按姓名查询*/
q=l->
stringinput(searchinput,6,"
请输入现有的学生的姓名:
elseif(q)
while(q)
if(strstr(q->
data.name,searchinput)!
=NULL)/*模糊查询*/
{
printdata(q);
printf(HEADER3);
}
q=q->
elseif(select==3)/*按学院查询*/
stringinput(searchinput,8,"
请输入现有的学生的学院名称:
logo=Locate2(l,searchinput,"
if(logo==0)
Wrong();
\n按任意键返回主菜单!
elseif(select==4)/*按班级查询*/
请输入现有的学生的班级:
}
//(五)删除学生记录:
提示用户输入要进行修改操作的学号,如果在文件中信息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作===================================================================================
voidDel(Linkl)
intsel;
Node*p,*r;
charfindmess[20];
next)
{system("
return;
1按学号删除\n……>
2按姓名删除\n"
请选择[1,2]:
sel);
if(sel==1)
stringinput(findmess,10,"
p=Locate(l,findmess,"
if(p)
r=l;
while(r->
=p)
r=r->
r->
next=p->
/*将p所指节点从链表中去除*/
free(p);
/*释放内存空间*/
deletesuccess!
getch();
saveflag=1;
elseif(sel==2)/*先按姓名查询到该记录所在的节点*/
stringinput(findmess,15,"
请输入现有的学生的姓名"
删除成功!
else
Wrong();
//(六)修改学生记录。
先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改=======================================================================================
voidModify(Link
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统
![提示](https://static.bdocx.com/images/bang_tan.gif)