学生成绩管理系统Word文件下载.docx

上传人:b****4 文档编号:18467598 上传时间:2022-12-16 格式:DOCX 页数:33 大小:379.95KB
下载 相关 举报
学生成绩管理系统Word文件下载.docx_第1页
第1页 / 共33页
学生成绩管理系统Word文件下载.docx_第2页
第2页 / 共33页
学生成绩管理系统Word文件下载.docx_第3页
第3页 / 共33页
学生成绩管理系统Word文件下载.docx_第4页
第4页 / 共33页
学生成绩管理系统Word文件下载.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统Word文件下载.docx

《学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统Word文件下载.docx

(九)学生信息排序;

(十)学生信息排序;

(十一)主函数

【①②③④⑤为各种方式的排序】*/

#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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1