学生成绩管理系统.docx

上传人:b****6 文档编号:7242105 上传时间:2023-05-11 格式:DOCX 页数:33 大小:379.95KB
下载 相关 举报
学生成绩管理系统.docx_第1页
第1页 / 共33页
学生成绩管理系统.docx_第2页
第2页 / 共33页
学生成绩管理系统.docx_第3页
第3页 / 共33页
学生成绩管理系统.docx_第4页
第4页 / 共33页
学生成绩管理系统.docx_第5页
第5页 / 共33页
学生成绩管理系统.docx_第6页
第6页 / 共33页
学生成绩管理系统.docx_第7页
第7页 / 共33页
学生成绩管理系统.docx_第8页
第8页 / 共33页
学生成绩管理系统.docx_第9页
第9页 / 共33页
学生成绩管理系统.docx_第10页
第10页 / 共33页
学生成绩管理系统.docx_第11页
第11页 / 共33页
学生成绩管理系统.docx_第12页
第12页 / 共33页
学生成绩管理系统.docx_第13页
第13页 / 共33页
学生成绩管理系统.docx_第14页
第14页 / 共33页
学生成绩管理系统.docx_第15页
第15页 / 共33页
学生成绩管理系统.docx_第16页
第16页 / 共33页
学生成绩管理系统.docx_第17页
第17页 / 共33页
学生成绩管理系统.docx_第18页
第18页 / 共33页
学生成绩管理系统.docx_第19页
第19页 / 共33页
学生成绩管理系统.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生成绩管理系统.docx

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

学生成绩管理系统.docx

学生成绩管理系统

C语言开放实验

大作业

 

序号:

52

学号:

xxxxxx

姓名:

xxx

专业:

信息10-3班

实验题目:

学生成绩管理系统

 

成绩:

实验题目:

学生成绩管理系统

学生包含以下信息项:

学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。

系统的主要功能包括:

1.创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。

2.增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:

增加后的学生信息仍按学号排序,并继续保存至原文件。

3.删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。

4.修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。

5.按不同条件对学生信息进行查询操作,输出满足条件的学生信息。

(1)按学号查询,输入一个学号,输出对应的学生信息。

(2)按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。

(3)按学院查询,输入学院名称,输出该学院的全部学生的信息。

(4)按班级查询,输入班级名称,输出该班级的全部学生的信息。

6.按不同条件对学生成绩进行统计工作。

(1)按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件中。

(2)按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。

(3)分别找出3门课程成绩最高的学生,并输出他们的信息。

(4)分别统计出3门课程的不及格率,并输出。

 

源程序:

/*

(一)主菜单界面显示;

(二)记录查找函数;

(三)创建学生信息;

(四)查询学生记录;

(五)删除学生记录;

(六)修改学生记录;

(七)添加学生信息;

(八)统计学生成绩;

(九)学生信息排序;

(十)学生信息排序;

(十一)主函数

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

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"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");

printf("--------------------------主菜单------------------------------\n\n");

printf("*1创建学生信息*2插入学生信息\n\n");

printf("*3删除学生信息*4修改学生信息\n\n");

printf("*5按学号排序*6查询学生信息\n\n");

printf("*7按总分排序*8学生信息整理\n\n");

printf("*9保存学生信息*0退出系统\n\n");

printf("-------------------------------------------------------------\n");

}

//表格形式显示记录===========================================================================================================================

voidprintheader()/*格式化输出表头*/

{

printf(HEADER1);

printf(HEADER2);

printf(HEADER3);

}

voidprintdata(Node*pp)/*格式化输出表中数据*/

{

Node*p;

p=pp;

printf(FORMAT,DATA);

}

voidWrong()/*输出按键错误信息*/

{

printf("\n\n\n\n\n········Error:

输入错误!

········\n");

getchar();

}

voidNofind()/*输出未查找此学生的信息*/

{

printf("\n……>未查找到该学生的信息!

\n");

}

voidDisp(Linkl)/*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/

{

Node*p;

p=l->next;/*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/

if(!

p)

{

printf("\n……>没有学生信息!

\n");

getch();

return;

}

printf("\n\n");

printheader();/*输出表格头部*/

while(p)/*逐条输出链表中存储的学生信息*/

{

printdata(p);

p=p->next;/*移动直下一个结点*/

printf(HEADER3);

}

printf("\n\n按任意键继续!

\n");

getch();

}

 

//

(二)记录查找定位函数

Node*Locate(Linkl,charfindmess[],charnameornum[])

{

Node*r;

if(strcmp(nameornum,"num")==0)/*①按学号查询*/

{

r=l->next;

while(r)

{

if(strcmp(r->data.num,findmess)==0)

returnr;

r=r->next;

}

}

elseif(strcmp(nameornum,"name")==0)/*②按姓名查询*/

{

r=l->next;

while(r)

{

if(strcmp(r->data.name,findmess)==0)

returnr;

r=r->next;

}

}

return0;/*若未找到,返回一个空指针*/

}

//==================Locate2=============================

intLocate2(Linkl,charfindmess[],charnameornum[])

{

Node*r;

intlogo=0;

if(strcmp(nameornum,"xueyuan")==0)/*③按学院查询*/

{

r=l->next;

if(r!

=NULL)

printheader();

while(r)

{

if(strcmp(r->data.xueyuan,findmess)==0)

{

printdata(r);

printf(HEADER3);

logo=1;

}

r=r->next;

}

}

elseif(strcmp(nameornum,"banji")==0)/*④按班级查询*/

{

r=l->next;

if(r!

=NULL)

printheader();

while(r)

{

if(strcmp(r->data.banji,findmess)==0)

{

printdata(r);

printf(HEADER3);

logo=1;

}

r=r->next;

}

}

returnlogo;

}

 

//输入字符串,并进行长度验证(长度

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;

do{

printf(notice);/*显示提示信息*/

scanf("%d",&t);

if(t>100||t<0)printf("\n分数范围必须在[0,100]!

\n");/*进行分数校验*/

}while(t>100||t<0);

returnt;

}

//(三)创建学生信息(根据提示输入学生的各项信息,计算出总分和平均分,并将学生成绩信息存储到一个二进制文件中)==================================================================================================================================

voidCreate(Linkl)

{

Node*p,*r,*s;/*实现添加操作的临时的结构体指针变量*/

charch,flag=0,num[10];

r=l;

s=l->next;

system("cls");

Disp(l);/*先打印出已有的学生信息*/

while(r->next!

=NULL)

r=r->next;/*将指针移至于链表最末尾,准备添加记录*/

while

(1)/*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/

{

while

(1)/*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/

{

stringinput(num,10,"请输入学号(输入'0'返回主菜单):

");/*格式化输入学号并检验*/

flag=0;

if(strcmp(num,"0")==0)/*输入为0,则退出添加操作,返回主界面*/

{return;}

s=l->next;

while(s)/*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/

{

if(strcmp(s->data.num,num)==0)

{flag=1;break;}

s=s->next;

}

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,"姓名:

");

stringinput(p->data.xueyuan,8,"学院:

");

stringinput(p->data.banji,8,"班级:

");

p->data.cgrade=numberinput("C语言成绩[0-100]:

");/*输入并检验分数,分数必须在0-100之间*/

p->data.mgrade=numberinput("高数成绩[0-100]:

");/*输入并检验分数,分数必须在0-100之间*/

p->data.egrade=numberinput("英语成绩[0-100]:

");/*输入并检验分数,分数必须在0-100之间*/

p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;/*计算总分*/

p->data.ave=(p->data.total/(float)3);/*计算平均分*/

p->next=NULL;/*表明这是链表的尾部结点*/

r->next=p;/*将新建的结点加入链表尾部中*/

r=p;

saveflag=1;

}

return;

}

 

//(四)查询学生记录=================================================================================================================================

voidFind(Linkl)

{

intlogo,select;

charsearchinput[20];/*保存用户输入的查询内容*/

Node*p,*q;

if(!

l->next)/*若链表为空*/

{

system("cls");

printf("\n……>没有学生信息!

\n");

getch();

return;

}

system("cls");

printf("\n……>1按学号查询\n……>2按姓名查询\n……>3按学院查询\n……>4按班级查询\n");

printf("请选择[1,2,3,4]:

");

scanf("%d",&select);

if(select==1)/*按学号查询*/

{

stringinput(searchinput,4,"请输入现有的学生的学号:

");

p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/

if(p)

{

printheader();

printdata(p);

printf(END);

printf("按任意键返回主菜单!

");

}

else

Nofind();

getch();

}

elseif(select==2)/*按姓名查询*/

{

q=l->next;

stringinput(searchinput,6,"请输入现有的学生的姓名:

");

p=Locate(l,searchinput,"name");

if(p)

{

printheader();

printdata(p);

printf(END);

printf("按任意键返回主菜单!

");

}

elseif(q)

{

printheader();

while(q)

{

if(strstr(q->data.name,searchinput)!

=NULL)/*模糊查询*/

{

printdata(q);

printf(HEADER3);

}

q=q->next;

}

}

else

Nofind();

getch();

}

elseif(select==3)/*按学院查询*/

{

stringinput(searchinput,8,"请输入现有的学生的学院名称:

");

logo=Locate2(l,searchinput,"xueyuan");

if(logo==0)

Wrong();

printf("\n按任意键返回主菜单!

\n");

getch();

}

elseif(select==4)/*按班级查询*/

{

stringinput(searchinput,8,"请输入现有的学生的班级:

");

logo=Locate2(l,searchinput,"banji");

if(logo==0)

Wrong();

printf("\n按任意键返回主菜单!

\n");

getch();

}

}

 

//(五)删除学生记录:

提示用户输入要进行修改操作的学号,如果在文件中信息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作===================================================================================

voidDel(Linkl)

{

intsel;

Node*p,*r;

charfindmess[20];

if(!

l->next)

{system("cls");

printf("\n……>没有学生信息!

\n");

getch();

return;

}

system("cls");

Disp(l);

printf("\n……>1按学号删除\n……>2按姓名删除\n");

printf("请选择[1,2]:

");

scanf("%d",&sel);

if(sel==1)

{

stringinput(findmess,10,"请输入现有的学生的学号:

");

p=Locate(l,findmess,"num");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;/*将p所指节点从链表中去除*/

free(p);/*释放内存空间*/

printf("\n……>deletesuccess!

\n");

getch();

saveflag=1;

}

else

Nofind();

getch();

}

elseif(sel==2)/*先按姓名查询到该记录所在的节点*/

{

stringinput(findmess,15,"请输入现有的学生的姓名");

p=Locate(l,findmess,"name");

if(p)

{

r=l;

while(r->next!

=p)

r=r->next;

r->next=p->next;

free(p);

printf("\n……>删除成功!

\n");

getch();

saveflag=1;

}

else

Nofind();

getch();

}

else

Wrong();

getch();

}

 

//(六)修改学生记录。

先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改=======================================================================================

voidModify(Link

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2