学生成绩管理系统文档格式.docx
《学生成绩管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
charname[20];
charsex[4];
intscore[M];
inttotal;
}stu[N];
2.输入若干学生的信息(人数自定,这里总分不能输入,需要通过计算求得),并按学号升序输出所有学生的完整信息到屏幕,并将结果写到文件stu_info.dat中。
以写的方式创建文件stu_info.da,并检查创建是否成功:
FILE*fp;
if((fp==fopen("
stu_info.dat"
"
r"
))==NULL)
Printf("
cannotopenfile!
"
);
Exit(0);
}
将结构体数组中的学生信息顺序地输入到文件stu_info.da。
这样的操作我给它声明了一个函数,函数声明如下:
voidinput(structStudentst[],intn);
3.根据总分,选择一种排序方法按总分由高到低排名,用一个函数来实现,函数声明在下面,给出每个学生的名次,并将每个学生的学号,姓名,名次这3个信息写入到rank.dat文件中。
一般来说,只要是按序输入的话,名次就很好给出。
FILE*fp;
fp=fopen("
Q:
\\rank.dat"
wb"
if(fp==NULL)
{
printf("
不能打开文件!
\n"
exit
(1);
}
voidsort_sum(structStudentst[],intn);
4.对学生信息的查找可以有多中方法,在这里我用折半查找和顺序查找这两种方法,自己定义两个函数分别实现两种功能。
注意查找的学生学号肯定是已经写入到stu_info.da文件中,下面是两个函数的声明,具体代码在源程序中:
voidseek_1(structStudentst[],intno,intn);
voidseek_2(structStudentst[],intno,intn);
5.对学生信息的更新包括插入,删除,修改等操作,将用三个函数分别来实现这些功能。
(1).增加一条学生信息时,先根据学号找到要插入的位置(数组下标),然后插入,插入点后的个数组的下标加1,如果结构体数组有n个学生信息,则结果数组中的学生信息个数为n+1,注意n+1<
=N;
(2).删除一条学生信息时,先根据学号找到要删除的位置(数组下标),然后删除指定元素,删除点后的个数组的下标减1,如果结构体数组有n个学生信息,则结果数组中的学生信息个数为n-1;
(3)修改一条学生信息时,先根据学号找到要修改元素的位置(数组下标),然后对指定元素(结构体变量)的每个成员分别修改。
这个3个函数的声明如下:
voiddel(structStudentst[],intno,intn);
voidins(structStudentst[],intno,intn);
voidmod(structStudentst[],intno,intn);
6.在main()函数中设计一个菜单对以上模块选择执行,实现完整的学生成绩管理系统。
#include<
stdio.h>
stdlib.h>
intmain()
intchoice,i,n;
printf("
******************************************************\n\n"
欢迎进入学生成绩管理系统\n\n"
menu();
while
(1)
请选择:
scanf("
%d"
&
choice);
switch(choice)
{
case1:
请输入你将要录入学生的个数:
scanf("
n);
input(stu,n);
menu();
break;
case2:
按总分排序后如下:
sort_sum(stu,n);
menu();
case3:
\n请输入你要查找的学生的学号:
i);
seek_1(stu,i,n);
case4:
seek_2(stu,i,n);
case5:
\n请输入要删除的学生的学号:
del(stu,i,n);
case6:
\n请输入你要插入的学生的学号:
ins(stu,i,n);
case7:
\n请输入你要修改的学号:
mod(stu,i,n);
case8:
\n打印n个学生信息:
print(stu,n);
case0:
exit(0);
default:
printf("
errorinput!
请重输!
}
return0;
}可以声明一个menu()函数。
voidmenu()
1.录入学生信息\n"
2.根据总分排序\n"
3.用折半查找学生信息\n"
4.用顺序法查找学生信息\n"
5.根据学号删除学生信息\n"
6.根据学号插入学生信息\n"
7.根据学号修改学生信息\n"
8.打印n个学生信息\n"
0.退出\n"
7.需要同学们自己定义的函数的原型如下:
voidsort_sum(structStudentst[],intn);
voidprint(structStudentst[],intn);
三.程序源代码:
windows.h>
string.h>
conio.h>
#defineM3
voidmenu();
*******************************************************\n\n"
*******************************************************\n"
请输入要录入学生的个数:
请重新输入!
voidinput(structStudentst[],intn)
inti=0,j;
charch;
F:
\\stu_info.dat"
\t\t\t\t1.录入学员信息\n"
do
\t\n输入第%d个学生的信息\n"
i+1);
输入学生学号:
scanf("
st[i].num);
fflush(stdin);
输入学生姓名:
gets(st[i].name);
输入学生性别:
gets(st[i].sex);
输入学生成绩:
for(j=0;
j<
M;
j++)
st[i].score[j]);
fwrite(&
stu,sizeof(stu),1,fp);
是否继续输入?
(Y/N)"
ch=getchar();
if(ch=='
N'
&
ch=='
n'
)
break;
else
i++;
}while(i<
fclose(fp);
voidsort_sum(structStudentst[],intn)
inti,j,sum=0,k;
structStudenttemp;
}
for(i=0;
i<
n;
i++)
for(j=0;
sum+=st[i].score[j];
st[i].total=sum;
sum=0;
for(j=n-1;
j>
i;
j--)
if(st[j].total>
st[j-1].total)
temp=st[j-1];
st[j-1]=st[j];
st[j]=temp;
\n\t所有学生的个人信息如下\n"
k=i+1;
\n学号:
%5姓名:
%4s性别:
%3s名次:
%5d\n"
st[i].num,st[i].name,st[i].sex,k);
st,sizeof(stu),1,fp);
这个学生的各门成绩如下:
%5d"
st[i].score[j]);
\n\n\t\t\t按任意键返回主菜单...\n"
voidseek_1(structStudentst[],intno,intn)
intstart,end,flag=1,i,j,ans;
for(start=0,end=n;
start<
=end;
)
{
i=start+(end-start)/2;
if(no==st[i].num)
printf("
elseif(no<
st[i].num)
end=i-1;
start=i+1;
if(i<
n)
flag=0;
学号:
%5d姓名:
%4s性别:
%3s\n"
st[i].num,st[i].name,st[i].sex);
if(flag)
system("
cls"
没有你要查找的学生\n"
按1返回主菜单\n"
ans);
if(ans==1)
voidseek_2(structStudentst[],intno,intn)
{
inti,j,a,flag=1;
if(st[i].num==no)
break;
\n\n\t\t\t没有你要查找的学生\n"
\n\n\t\t\t按1返回主菜单\n"
a);
if(a==1)
voiddel(structStudentst[],intno,intn)
inti,j,flag=1;
charans1,ans3;
删除前此学号学生的有关信息如下:
删除前此学号学生的各门成绩如下:
break;
\n\n没有您输入的学号!
}while(flag);
\n是否真的要删除此学生的所有信息:
Y/N\b"
ans1=getchar();
if(ans1=='
Y'
n-1;
st[i]=st[i+1];
n--;
\n您已删除该学生学员信息!
\n\n\t\t\t是否继续删除?
ans3=getchar();
while(ans3=='
{
system("
del(stu,i,n);
else
voidins(structStudentst[],intno,intn)
inti;
\n\t请输入你要插入的学生的姓名:
%s"
st[no].name);
\n\t请输入你要插入的学生的性别:
st[no].sex);
\n\t请输入你要插入的学生的各门成绩:
st[no].score[i]);
你要插入的学生的信息成功!
voidmod(structStudentst[],intno,intn)
inti,j,x,flag=1;
修改前此学号学生的有关信息如下:
修改前此学号学生的各门成绩如下:
没有您输入的学号!