学生成绩管理系统c语言.docx
- 文档编号:11086226
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:29
- 大小:139.25KB
学生成绩管理系统c语言.docx
《学生成绩管理系统c语言.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统c语言.docx(29页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统c语言
实验二学生成绩管理系统
一:
实验目的
使用标准C或C++实现一般管理系统的基本功能。
进一步巩固C语言的学习,培养一定的综合编程能力。
二:
需要处理的基础数据
学生基本信息包括:
学号(如2011级24班13号写作52112413)
姓
名
性别
出生年月日
课程对应的考试成绩(外语SCORE[0]、高数SCORE[1]、
C语言SCORE[2]、马哲SCORE[3])
平均成绩和总成绩
三:
本系统主要具备以下三个功能
1.学生基本情况录入。
要求对输入的性别、出生年月日的合理性进行判断(如0代 表“女”,1代表“男”,输入其他值非法,年龄不能为负, 月份不能大于13等)。
2.允许对已经录入的数据进行显示。
3.允许进行数据的插入。
4.删除基本数据的相关信息。
5.基于姓名的查询。
如:
姓张的所有同学。
6.基于各种基本数据的统计计算。
如:
①统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
②列出90分及以上、80分及以上、70分及以上、60分及以上、不及格学生清单(学号、姓名、不及格的课程和成绩)。
③统计并输出各门功课的平均成绩和总平均成绩。
④按班级统计并输出总成绩(需对学号进行解析)。
四:
数据结构设计及用法说明
需处理的车辆及违章基本信息包括:
车牌号、车主姓名、违章停车次数、闯红灯次数、超速次数。
这些信息采用结构体数据类型表示更为方便,因为违章信息数量的不确定性,所以信息应采用链表进行存储,这更符合实际应用
所以采用的数据结构如下
typedefstructSt1
{
charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表“女”,1代表“男”)*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
floatscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
structSt1*next;
};StudentNode
该程序中需要处理的基础数据有:
学生基本信息:
学号(例如2003级12班6号写作20031206)、姓、名、性别、出生年月日、课程名称(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])、考试成绩等。
因此定义结构体重要包括所以要素,另外,本程序用链表方法来处理对象。
对象之间连接起来的程序为:
p1=p1->next.数据交换的代码为:
p2=p1->next;
P1->next=p2->next;
P2->next=p1;
P1=p2;
五:
各模块的功能
该程序包含的函数以及作用:
head=Enterlist()输入记录
head=Delet(head)从表中删除记录
Searchrecordonname(head)按照姓名查找记录
PrintfSavethefile(head)显示链表中所有记录
Loadthefile(head)从文件中读入记录
Computethescore(head)计算所有学生的总分和均分
Querybyclass(head)按班级查询显示学生成绩
head=Insert(head)插入记录到表中
exit(0)退出
sortbyaverage(head)以平均成绩排序
waiyu(head)输出英语成绩的平均分,总分,各分数段的同学的信息
gaoshu(head)输出高数成绩的平均分,总分,各分数段的同学的信息
cyuyan(head)输出c语言成绩的平均分,总分,各分数段的同学的信息
mazhe(head)输出马哲绩的平均分,总分,各分数段的同学的信息
bujige(head)输出不及格同学的信息
六:
程序结构图
七:
试验结果(包括输入数据和输出结果)
菜单:
密码是:
sundayang。
然后回车
输入2:
输入11个0,结束输入
输入2:
输入错误,会有提示。
。
输入正确信息后,再输入11个零退出输入:
输入4:
按平均成绩排序
输入9,按照姓氏查询学生信息:
输入3,删除学生信息:
输入8退出程序并且保存:
输入9退出程序。
八:
体会
此次的编程实验是“学生成绩管理系统”,主要运用链表实现其功能。
为了做好本次试验,我在实验之前通过翻阅书籍和上网查询获取了所用的基础函数。
然后分析每一模块怎么做,思路是什么。
把整个一个大程序分为几个部分去做,这样编程才会更简单。
为了使做出的系统更加新颖,我在书上学习了一种新的函数getch,这种函数能将在键盘上键入的信息在屏幕上不显示,只显示*号。
这样一个密码系统就完成了。
在完成程序的过程中,我也碰到了很多问题,函数误用,调用指针不明确,还有一些细小的问题,所以以后的实验过程中我会更加仔细。
附录:
程序清单及源程序
#include
#include
#include
#include
#include
#defineNULL0
#defineLENsizeof(StudentNode)
typedefstructSt1{
charIDNumber[16];/*学号*/
charFamilyName[16];/*姓*/
charGivenName[16];/*名*/
intsex;/*性别(0代表“女”,1代表“男”)*/
intBirthYear;/*出生年*/
intBirthMonth;/*出生月*/
intBirthDay;/*出生日*/
floatscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
structSt1*next;
}StudentNode;
intn,m;
charmima[12];
/*********密码验证************/
voidpaw()
{
intk,i,p=0;
charc;
system("cls");
printf("\n\n\n\n");
printf("\t");
for(k=0;k<15;k++)
printf("★☆");
printf("★");
printf("\n");
for(k=0;k<2;k++)
printf("\t☆\t\t\t\t\t\t\t☆\n");
printf("\t☆学生成绩管理系统☆\n");
printf("\t☆\t\t\t\t\t\t\t☆\n");
printf("\t☆\t\t\t\t\t\t☆\n");
printf("\t☆\t\t制作人:
李赛男\t\t\t☆\n");
printf("\t☆\t\t\t\t\t\t☆\n");
for(k=0;k<2;k++)
printf("\t☆\t\t\t\t\t\t\t☆\n",36,36);
printf("\t");
for(k=0;k<15;k++)
printf("★☆");
printf("★");
printf("\n\n\t你最崇拜、最仰慕的人是谁:
");
for(i=0;i<20;i++)
{
c=getch();//输入密码
if(c=='\r'){
break;
}
else
{
printf("*");
mima[i]=c;
}
}
while(strcmp(mima,"wangqingbin")!
=0)//验证密码
{
p++;
if(p>=3)
{
printf("\n\n\t\t----->输入密码错误超过3次,自动退出程序!
<-----\n");
exit(-1);//输入密码次数超过三次则退出程序
}
printf("\n\n\t\t----->密码错误%d次,请重新输入!
<-----\n",p);
printf("\t\t----->密码:
");
for(i=0;i<20;i++)
{
c=getch();
if(c=='\r'){
break;
}
else
{
printf("*");
mima[i]=c;
}
}
}
}
/*******登陆初始界面********/
voidstart()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t*****************************************************************\n\n");
printf("\t\t\t欢迎使用学生成绩管理系统\n\n");
printf("\t*****************************************************************\n\n");
printf("\t初始化信息:
\t\t\t");
printf("1、载入文件\t2、手动录入\n\n\n");
printf("\t请选择菜单:
");
scanf("%d",&m);
}
/**********菜单界面************/
voidindex()
{
system("cls");
printf("\n\n\n\n");
printf("------------------------------------------------------------------------\n");
printf("\t*************欢迎使用学生成绩管理系统**************\n\n");
printf("\t1、显示学生信息2、添加学生信息3、删除学生信息\n\n");
printf("\t4、按平均分排序5、按姓名查找学生信息6、计算总分和平均分\n\n");
printf("\t7、班级成绩总结8、保存并退出9、退出\n\n");
printf("------------------------------------------------------------------------\n\n");
printf("请选择菜单:
");
scanf("%d",&m);
}
/******创建动态链表*******/
StudentNode*creat(void)
{
system("cls");
StudentNode*head;
StudentNode*p1,*p2;
printf("\n\n\t*****************************欢迎使用学生成绩管理系统*******************************\n\n");
n=1;
p1=p2=(StudentNode*)malloc(LEN);
printf("\t(学号,姓,名,性别,出生年,出生月,出生日,外语成绩,高数成绩,C语言成绩,马哲成绩)\n");
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p1->IDNumber,&p1->FamilyName,&p1->GivenName,&p1->sex,&p1->BirthYear,&p1->BirthMonth,
&p1->BirthDay,&p1->score[0],&p1->score[1],&p1->score[2],&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p1->average=p1->sum/4;
head=NULL;
while(strcmp(p1->IDNumber,"0"))
{
while(p1->BirthYear<1985||p1->BirthMonth>12||p1->BirthMonth<0||(p1->sex!
=1&&p1->sex!
=0)||p1->BirthDay>31||p1->BirthDay<0||p1->score[0]>100||p1->score[0]<0||p1->score[1]>100||p1->score[1]<0||p1->score[2]>100||p1->score[2]<0){
printf("输入的数据不合法!
请重新输入\n");
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p1->IDNumber,&p1->FamilyName,&p1->GivenName,&p1->sex,&p1->BirthYear,&p1->BirthMonth,
&p1->BirthDay,&p1->score[0],&p1->score[1],&p1->score[2],&p1->score[3]);
}
n=n+1;
if(n==2)head=p1;
elsep2->next=p1;
p2=p1;
p1=(StudentNode*)malloc(LEN);
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p1->IDNumber,&p1->FamilyName,&p1->GivenName,&p1->sex,&p1->BirthYear,&p1->BirthMonth,
&p1->BirthDay,&p1->score[0],&p1->score[1],&p1->score[2],&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p1->average=p1->sum/4;
}
p2->next=NULL;
return(head);
}
/*******输出学生信息*******/
voidprint(StudentNode*head)
{
system("cls");
printf("\n\n***************************************欢迎使用学生成绩管理系统************************************\n\n");
StudentNode*p;
printf("\t┏━━━━┳━━━┳━━━┳━━━━━┳━━━━┳━━━━┳━━━━━┳━━━━┳━━━━┳━━━┓\n");
printf("\t┃学号┃姓名┃性别┃出生日期┃外语成绩┃高数成绩┃C语言成绩┃马哲成绩┃平均成绩┃总成绩┃\n");
printf("\t┣━━━━╋━━━╋━━━╋━━━━━╋━━━━╋━━━━╋━━━━━╋━━━━╋━━━━╋━━━┫\n");
p=head;
if(head!
=NULL)
do
{
printf("\t┃%-8s┃%1s%s\t┃%-6d┃%4d/%2d/%2d┃%-8.2f┃%-8.2f┃%-10.2f┃%-8.2f┃%-8.2f┃%-6.2f┃\n",p->IDNumber,p->FamilyName,p->GivenName,p->sex,p->BirthYear,
p->BirthMonth,p->BirthDay,p->score[0],p->score[1],p->score[2],p->score[3],p->average,p->sum);
printf("\t┣━━━━╋━━━╋━━━╋━━━━━╋━━━━╋━━━━╋━━━━━╋━━━━╋━━━━╋━━━┫\n");
p=p->next;
}while(p!
=NULL);
printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
system("pause");
}
/*******按平均分排序******/
voidcomp(StudentNode*p)
{
system("cls");
StudentNodet,*p2;
StudentNode*p0,*p1;
p0=p;
while(p0->next!
=NULL)
{
p1=p0->next;
while(p1!
=NULL)
{
if(p0->average>p1->average)
{
t=*p1;
*p1=*p0;
*p0=t;
p2=p1->next;
p1->next=p0->next;
p0->next=p2;
}
p1=(p1->next);
}
p0=p0->next;
}
print(p);
}
/******删除学生信息*****/
StudentNode*del(StudentNode*head)
{
system("cls");
StudentNode*p1,*p2;
chardel_no[16];
printf("\n\n\t\t**********欢迎使用学生成绩管理系统***********\n\n");
printf("\t\t\t提示:
输入0结束当前操作\n\n");
printf("\t\t要删除学生的学号:
");
scanf("%s",&del_no);
while(strcmp(del_no,"0"))
{
if(head==NULL){printf("\n无信息\n");returnhead;}
p1=head;
while(strcmp(del_no,p1->IDNumber)&&p1->next!
=NULL){p2=p1;p1=p1->next;}
if(!
strcmp(del_no,p1->IDNumber))
{
if(p1==head)head=p1->next;
elsep2->next=p1->next;
n=n-1;
printf("删除成功!
\n");
}
elseprintf("\n没找到此学生信息\n");
printf("\t\t要删除学生的学号:
");
scanf("%s",&del_no);
}
return(head);
}
/******添加学生信息*****/
StudentNode*insert(StudentNode*head)
{
system("cls");
printf("\n\n\t\t**********欢迎使用学生成绩管理系统***********\n\n");
StudentNode*p,*p0;
printf("\t\t\t提示:
输入0结束当前操作\n\n");
printf("\t\t\t请输入要添加的信息\n\n");
printf("\t(学号,姓,名,性别,出生年,出生月,出生日,外语成绩,高数成绩,C语言成绩,马哲成绩)\n");
p=(StudentNode*)malloc(LEN);
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p->IDNumber,&p->FamilyName,&p->GivenName,&p->sex,&p->BirthYear,&p->BirthMonth,
&p->BirthDay,&p->score[0],&p->score[1],&p->score[2],&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->average=p->sum/4;
while(strcmp(p->IDNumber,"0"))
{
if(head==NULL)
{
head=p;p->next=NULL;
}
else
{
p0=head;
head=p;
p->next=p0;
}
while(p->BirthYear<1985||p->BirthMonth>12||p->BirthMonth<0||(p->sex!
=1&&p->sex!
=0)||p->BirthDay>31||p->BirthDay<0||p->score[0]>100||p->score[0]<0||p->score[1]>100||p->score[1]<0||p->score[2]>100||p->score[2]<0){
printf("输入的数据不合法!
请重新输入\n");
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p->IDNumber,&p->FamilyName,&p->GivenName,&p->sex,&p->BirthYear,&p->BirthMonth,
&p->BirthDay,&p->score[0],&p->score[1],&p->score[2],&p->score[3]);
}n=n+1;
p=(StudentNode*)malloc(LEN);
printf("\t");
scanf("%s%s%s%d%d%d%d%f%f%f%f",&p->IDNumber,&p->FamilyName,&p->GivenName,&p->sex,&p->BirthYear,&p->BirthMonth,
&p->BirthDay,&p->score[0],&p->score[1],&p->score[2],&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->average=p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 语言