学生信息包括学号文档格式.docx
《学生信息包括学号文档格式.docx》由会员分享,可在线阅读,更多相关《学生信息包括学号文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
intStudent_SearchByIndex(charid[])
inti;
for(i=0;
i<
num;
i++)
{
if(strcmp(students[i].ID,id)==0)
returni;
}
return-1;
/*通过姓名返回数组下标*/
intStudent_SearchByName(charname[])
if(strcmp(students[i].Name,name)==0)
/*显示单条学生记录*/
voidStudent_DisplaySingle(intindex)
printf("
%10s%10s%8s%8s%8s%10s\n"
"
学号"
姓名"
成绩"
平均成绩"
);
-------------------------------------------------------------\n"
%10s%10s%8.2f%8.2f%8.2f%10.2f\n"
students[index].ID,students[index].Name,
students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
/*插入学生信息*/
voidStudent_Insert()
while
(1)
请输入学号:
"
scanf("
%s"
&
students[num].ID);
getchar();
请输入姓名:
students[num].Name);
请输入成绩:
%f"
students[num].Mark1);
getchar();
printf("
scanf("
students[num].Mark2);
students[num].Mark3);
students[num].Average=Avg(students[num]);
num++;
是否继续?
(y/n)"
if(getchar()=='
n'
)
break;
}
/*修改学生信息*/
voidStudent_Modify()
floatmark1,mark2,mark3;
charid[20];
intindex;
请输入要修改的学生的学号:
id);
index=Student_SearchByIndex(id);
if(index==-1)
学生不存在!
\n"
else
你要修改的学生信息为:
Student_DisplaySingle(index);
--请输入新值--\n"
students[index].ID);
students[index].Name);
students[index].Mark1);
students[index].Mark2);
students[index].Mark3);
students[index].Average=Avg(students[index]);
if(getchar()=='
/*删除学生信息*/
voidStudent_Delete()
inti;
while
(1)
charid[20];
intindex;
请输入要删除的学生的学号:
index=Student_SearchByIndex(id);
if(index==-1)
else
你要删除的学生信息为:
Student_DisplaySingle(index);
是否真的要删除?
y'
for(i=index;
num-1;
students[i]=students[i+1];
num--;
break;
/*按姓名查询*/
voidStudent_Select()
charname[20];
请输入要查询的学生的姓名:
name);
index=Student_SearchByName(name);
你要查询的学生信息为:
/*按平均值排序*/
voidStudent_SortByAverage()
inti,j;
structStudenttmp;
for(j=1;
j<
num-i;
j++)
if(students[j-1].Average<
students[j].Average)
tmp=students[j-1];
students[j-1]=students[j];
students[j]=tmp;
/*显示学生信息*/
voidStudent_Display()
for(i=0;
students[i].ID,students[i].Name,
students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
/*将学生信息从文件读出*/
voidIO_ReadInfo()
FILE*fp;
if((fp=fopen("
Database.txt"
rb"
))==NULL)
不能打开文件!
return;
if(fread(&
num,sizeof(int),1,fp)!
=1)
num=-1;
for(i=0;
fread(&
students[i],sizeof(structStudent),1,fp);
fclose(fp);
/*将学生信息写入文件*/
voidIO_WriteInfo()
FILE*fp;
if((fp=fopen("
wb"
return;
if(fwrite(&
写入文件错误!
students[i],sizeof(structStudent),1,fp)!
fclose(fp);
/*主程序*/
voidmain()
intchoice;
IO_ReadInfo();
/*主菜单*/
\n------学生成绩管理系统------\n"
1.增加学生记录\n"
2.修改学生记录\n"
3.删除学生记录\n"
4.按姓名查询学生记录\n"
5.按平均成绩排序\n"
6.退出\n"
请选择(1-6):
%d"
choice);
switch(choice)
case1:
Student_Insert();
case2:
Student_Modify();
case3:
Student_Delete();
case4:
Student_Select();
case5:
Student_SortByAverage();
Student_Display();
case6:
exit(0);
IO_WriteInfo();
二
malloc.h>
stdio.h>
#defineLENsizeof(structscorenode)
#defineDEBUG
string.h>
structscorenode
{intnumber;
/*学号*/
charname[10];
/*姓名*/
floatyuwen;
/*语文成绩*/
floatyingyu;
/*英语成绩*/
floatshuxue;
/*数学成绩*/
structscorenode*next;
typedefstructscorenodescore;
intn,k;
/*n,k为全局变量,本程序中的函数均可以使用它*/
/*==============================================================================================*/
score*creat2311(void)
/*函数creat2311,功能:
创建链表,此函数带回一个指向链表头的指针*/
score*head;
score*p1,*p2,*p3,*max;
inti,j;
floatfen;
chart[10];
n=0;
p1=p2=p3=(score*)malloc(LEN);
head=p3;
/*开辟一个新单元*/
请输入学生资料,输0退出!
repeat1:
请输入学生学号(学号应大于0):
/*输入学号,学号应大于0*/
p1->
number);
while(p1->
number<
0)
{getchar();
输入错误,请重新输入学生学号:
}
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
if(p1->
number==0)
gotoend;
/*当输入的学号为0时,转到末尾,结束创建链表*/
else
{
p3=head;
if(n>
{for(i=0;
n;
{if(p1->
number!
=p3->
number)
p3=p3->
next;
else
{printf("
学号重复,请重输!
gotorepeat1;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
请输入学生姓名:
/*输入学生姓名*/
请输入语文成绩(0~100):
/*输入语文成绩,成绩应在0-100*/
yuwen);
yuwen<
0||p1->
yuwen>
100)
{getchar();
输入错误,请重新输入语文成绩"
/*输入错误,重新输入语文成绩直到正确为止*/
请输入英语成绩(0~100):
/*输入英语成绩,成绩应在0-100*/
yingyu);
yingyu<
yingyu>
输入错误,请重新输入英语成绩"
/*输入错误,重新输入英语成绩直到正确为止*/
请输入数学成绩(0~100):
/*输入数学成绩,成绩应在0-100*/
shuxue);
shuxue<
shuxue>
输入错误,请重新输入数学成绩"
}/*输入错误,重新输入数学成绩直到正确为止*/
head=NULL;
while(p1->
=0)
n=n+1;
if(n==1)
head=p1;
p2->
next=p1;
p2=p1;
p1=(score*)malloc(LEN);
repeat2:
输入错误,请重新输入学生学号:
if(p1->
gotoend;
gotorepeat2;
/*当输入的学号已经存在,程序报错,返回前面重新输入*/
}/*输入错误,重新输入语文成绩直到正确为止*/
}/*输入错误,重新输入英语成绩直到正确为止*/
end:
p1=head;
p3=p1;
for(i=1;
for(j=i+1;
=n;
max=p1;
p1=p1->
if(max->
number>
k=max->
number;
max->
number=p1->
p1->
number=k;
/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/
strcpy(t,max->
strcpy(max->
name,p1->
strcpy(p1->
name,t);
/*交换前后结点中的姓名,使之与学号相匹配*/
fen=max->
yuwen;
yuwen=p1->
yuwen=fen;
/*交换前后结点中的语文成绩,使之与学号相匹配*/
yingyu;
yingyu=p1->
yingyu=fen;
/*交换前后结点中的英语成绩,使之与学号相匹配*/
shuxue;
shuxue=p1->
shuxue=fen;
/*交换前后结点中的数学成绩,使之与学号相匹配*/
max=head;
p1=head;
/*重新使max,p指向链表头*/
}
p2->
next=NULL;
/*链表结尾*/
输入的学生数为:
%d个!
n);
return(head);
/*==============================