学生管理系统Word文档格式.docx
《学生管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《学生管理系统Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
score[0]=t->
score[1]=t->
score[2]=0;
returnt;
}
/*保存数据*/
voidsave(student*stu)
FILE*fp;
if((fp=fopen("
score1"
"
w"
))==NULL)/*为输出打开文件score1*/
{
printf("
cannotopenfile\n"
);
exit(0);
}
stu=stu->
next;
while(stu!
=NULL)
if(fwrite(stu,sizeof(student),1,fp)!
=1)
filewriteerror\n"
fclose(fp);
/*读取数据*/
student*load(student*stu)
student*p,*r;
r=stu;
if((fp=fopen("
r"
))==NULL)/*为输入打开文件score1*/
returnstu;
do
{p=(student*)malloc(sizeof(student));
p->
if((fread(p,sizeof(student),1,fp)!
=1)){fclose(fp);
returnstu;
};
r->
next=p;
r=r->
}while
(1);
/*输出一个特定的学生的成绩*/
voidoutput1(student*t)
{intk;
%s\t%s\t"
t->
num,t->
name);
for(k=0;
k<
5;
k++)
%d\t"
score[k]);
\n"
/*输出全体学生的成绩*/
voidoutput(student*stu)
学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n"
output1(stu);
/*将stu后插在t中*/
student*charu(student*stu,student*t)
{student*p;
intk;
p=(student*)malloc(sizeof(student));
strcpy(p->
num,stu->
num);
name,stu->
score[k]=stu->
score[k];
next=t->
returnp;
/*按成绩排序*/
voidpaixu(student*stu,inti)
student*t,*p,*r;
intj,k;
p=stu;
输入0按数学成绩\n"
输入1按语文成绩\n"
输入2按英语成绩\n"
输入3按总分\n"
输入4按平均分\n"
scanf("
%d"
&
j);
if(j<
0&
&
j>
4)printf("
输入错误请重新输入\n"
elsebreak;
t=init(t);
r=t;
if(t->
next==NULL)
r=charu(stu,t);
/*在排序好的链表t中插入第一个节点*/
if(i==0)/*按升序排序*/
while(stu->
next!
if(r->
score[j]>
stu->
score[j])r=t;
/*如果待插入的score[j]<
当前的score[j],指针r回溯*/
while(r->
next->
score[j]<
score[j]&
r->
/*找到比待插入的score[j]大的指针r->
next*/
r=charu(stu,r);
/*在r后面插入stu*/
else
output(t);
/*排序菜单*/
voidoutput2(student*stu)
{inti;
output(stu);
输入0升序\n"
输入1降序\n"
输入其他任意字符退出\n"
i);
if(i==0||i==1)
paixu(stu,i);
输入任意字符结束\n"
getch();
/*查找学生号为num是否存在*/
student*findnum(char*num,student*t,int*i)
*i=1;
*i=strcmp(t->
num,num);
while(*i<
0)/*t->
num<
num时查找下一个*/
t=t->
/*t->
num>
=num时返回,此时i>
=0*/
/*插入一个学生信息*/
student*insertstu(char*num,student*stu,char*name)
{student*p,*t;
int*i,j;
i=&
j;
t=findnum(num,stu,i);
/*查找该学号是否存在*/
if(j!
=0)/*该学号不存在,则插入*/
p=init(p);
name,name);
{printf("
已有此学号\n学号\t姓名\n%s\t%s\n"
/*录入新学生信息*/
voidbase(student*stu)
charnum[10],name[20];
输入e结束输入新学生的信息\n"
num(不超过10个数)\tname(不超过10个字)\n"
%s"
num);
\t\t\t"
name);
stu=insertstu(num,stu,name);
}while(num[0]!
='
e'
输入任意字符退出\n"
/*增加修改一门课程成绩*/
voidzengjia(student*t,inti)
score[3]-=t->
score[i];
/*总分减去第i门课的成绩*/
(t->
score[i]));
/*输入第i门课的成绩*/
score[3]+=t->
/*总分加上第i门课的成绩*/
voiddeletegrade(student*t,inti)
score[i]=0;
/*第i门课的成绩归零*/
/*修改成绩*/
voidaltergrade(student*stu)
intj,*i;
student*t;
chara,*num;
i=&
0修改数学成绩\n"
1修改语文成绩\n"
2修改英语成绩\n"
3删除数学成绩\n"
4修改语文成绩\n"
5修改英语成绩\n"
输入e结束操作\n"
a=getch();
学号\t成绩\n"
a===%cnum===%s"
a,num);
/*按学生号查找学生信息*/
if(j==0)/*学生号存在*/
switch(a)
case'
0'
:
zengjia(t,0);
break;
1'
zengjia(t,1);
2'
zengjia(t,2);
3'
deletegrade(t,0);
4'
deletegrade(t,1);
5'
deletegrade(t,2);
default:
break;
score[3]/3;
无此学号\n"
/*第i科成绩录入*/
studentgradeenter(student*stu,inti)
student*t;
t=stu;
学号\t该科成绩\n"
while(t!
%s\t"
score[i]==0)/*如果学号为t->
num的同学该科成绩没有*/
t->
score[i]);
/*学号为t->
num的总分*/
num的平均分*/
%d\n"
/*录入下一个同学的该科成绩*/
该科全部输入完成\n输入任意字符结束\n"
/*成绩录入菜单*/
voidentergrade(student*stu)
inti;
0录入数学成绩\n"
1录入语文成绩\n"
2录入英语成绩\n"
switch(i)
case0:
gradeenter(stu,i);
case1:
case2:
printf("
输入错误请输入相应操作的题号\n"
/*按学生号查找学生*/
voidchaxun(student*stu)
char*num;
intj,k,*i;
输入要查询的学生学号\n"
if(j==0)/*该学生号存在*/
查询结果为\n"
output1(t);
/*输出此学生信息*/
查无此号\n"
/*统计全班人数和平均分*/
voidtongji(student*stu)
inttotal=0,score=0;
score+=stu->
score[3];
total++;
score=score/total;
班级总人数为:
%d平均分为:
%d\n输入任意字符退出\n"
total,score);
/*按分数段查询*/
voidfenshuduan(student*stu)
inti,min,max,j;
输入0按数学分数段\n"
输入1按语文分数段\n"
输入2按英语分数段\n"
输入3按总分分数段\n"
输入4按平均分分数段\n"
输入分数段上限:
"
max);
\n输入分数段下限:
min);
if(max<
min)
{j=max;
max=min;
min=j;
if(min<
=stu->
score[i]&
score[i]<
=max)/*将分数段内的同学信息输出*/
voidmain()
chara='
8'
;
student*stu;
stu=init(stu);
/*初始化stu*/
stu=load(stu);
/*读取score1的数据*/
while(a!
7'
)
clrscr();
************************************************************\n"
学生成绩管理系统\n"
-------madeinchina\n"
0录入学生基本信息\n"
1修改或删除学生成绩\n"
2录入学生成绩\n"
3显示指定学生的信息\n"
4输出指定分数段的学生信息\n"
5输出班级总人数和平均分\n"
6输出全体学生的信息\n"
7退出\n"
*************************************************************\n"
case'
base(stu);
altergrade(stu);
entergrade(stu);
chaxun(stu);
fenshuduan(stu);
tongji(stu);
6'
output2(stu);
iamsorrytohearthatyouenterthewrongnum\n"
按任意键重新输入\n"
getch();
continue;
save(stu);
/*将数据保存在score1中*/
欢迎再次使用学生成绩管理系统........请按任意键退出......."
_
层次图描
实验结果记录以及与预期结果比较以及分析
记录每次实验结果以及分析情况
总结以及心得体会
本实验经过我深思熟虑采用链表!
通过本实验的加强功能即文件的操作(保存及导出),我巩固了这部分的功能。
在编写对链表进行升序排序时候,大大的提高了我对链表的操作。
指导老师评阅意见
指导老师:
年月日
填写内容时,可把表格扩大。
实验的源程序代码(要有注释)附在表后。
name