软件课设大作业学生成绩管理系统程序.docx
《软件课设大作业学生成绩管理系统程序.docx》由会员分享,可在线阅读,更多相关《软件课设大作业学生成绩管理系统程序.docx(24页珍藏版)》请在冰点文库上搜索。
软件课设大作业学生成绩管理系统程序
#include
#include
#include
#include
#defineMAXN40
#defineMAX_NAME200
//结构体定义
typedefstructstudent
{
intnum;
charname[MAX_NAME];
doubleChinese;
doublemath;
doubleEnglish;
doublemark_ave;
doublemark_tot;
}STUDENT;
//子函数
voidmenuin();
voidmenuout();
voidmenu_do();
intpassword();
voidreset();
intb=123;
//添加成绩条
voidinput(STUDENT*data,int*len)
{
inti,a;
printf("请输入学生资料,1/0!
\n");
scanf("%d",&a);
while(a!
=0)
{
printf("请输入学生学号(学号应大于0):
");/*输入学号,学号应大于0*/
scanf("%d",&data[*len].num);
while(data[*len].num<0)
{
getchar();
printf("输入错误,请重新输入学生学号:
");
scanf("%d",&data[*len].num);
}
/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/
if(*len>=0)
{
for(i=0;i<(*len);i++)
if(data[*len].num==data[i].num)
{
printf("学号重复,请重输!
\n");
break;
}
/*当输入的学号已经存在,程序报错,重新输入*/
if(i==(*len))
{
printf("请输入学生姓名:
");
scanf("%s",&data[*len].name);/*输入学生姓名*/
printf("请输入语文成绩(0~100):
");/*输入语文成绩,成绩应在0-100*/
scanf("%lf",&data[*len].Chinese);
while(data[*len].Chinese<0||data[*len].Chinese>100)
{
getchar();
printf("输入错误,请重新输入语文成绩");/*输入错误,重新输入语文成绩直到正确为止*/
scanf("%lf",&data[*len].Chinese);
}
printf("请输入英语成绩(0~100):
");/*输入英语成绩,成绩应在0-100*/
scanf("%lf",&data[*len].English);
while(data[*len].English<0||data[*len].English>100)
{
getchar();
printf("输入错误,请重新输入英语成绩");/*输入错误,重新输入英语成绩直到正确为止*/
scanf("%lf",&data[*len].English);
}
printf("请输入数学成绩(0~100):
");/*输入数学成绩,成绩应在0-100*/
scanf("%lf",&data[*len].math);
while(data[*len].math<0||data[*len].math>100)
{
getchar();
printf("输入错误,请重新输入数学成绩");
scanf("%lf",&data[*len].math);
}/*输入错误,重新输入数学成绩直到正确为止*/
while(data[*len].num!
=0)
{
data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len].English)/3.0;
data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len].English;
(*len)++;
}
}
}
/*输入的学号唯一,输入信息*/
printf("请输入学生资料,1/0!
\n");
scanf("%d",&a);}
}
//成绩条输出
voidoutput(STUDENT*data,intlen)
{
inti;
doublea=0,b=0,c=0;
for(i=0;i{
a=a+data[i].Chinese;
b=b+data[i].math;
c=c+data[i].English;
}
a=a/len;
b=b/len;
c=c/len;
system("cls");
printf("学生成绩:
\n");
printf("%8s","学号");
printf("%8s","姓名");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%10s","平均分");
printf("%10s","总分");
printf("\n\n");
printf("_______________________________________________________________\n");
for(i=0;i{
printf("%8d",data[i].num);
printf("%8s",data[i].name);
printf("%8.1lf",data[i].Chinese);
printf("%8.1lf",data[i].math);
printf("%10.1lf",data[i].English);
printf("%12.1lf",data[i].mark_ave);
printf("%10.1lf",data[i].mark_tot);
putchar('\n');
}
printf("\n");
printf("平均成绩:
\n语文:
%.1lf\t",a);
printf("数学:
%.1lf\t",b);
printf("英语:
%.1lf\n",c);
printf("_______________________________________________________________\n");
printf("按回车键继续.");
getch();
}
//排序
voidsort(STUDENT*data,intlen)
{
inti,j,k;
STUDENTtemp;
for(i=0;ifor(k=i,j=i+1;jif(data[k].mark_ave>data[j].mark_ave)k=j;
if(k!
=i){
temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
printf("排序已完成!
");
system("pause");
}
//查找
voidfind(STUDENT*data,intlen)
{
intfind_num,result;
inti;
printf("\n请输入学号查找(-1退出).");
scanf("%d",&find_num);
printf("\n");
while(find_num!
=-1)
{result=0;
while(data[result].num!
=find_num&&resultif(result>=len)
printf("%s\n","未查询到相关信息");
else
{
system("cls");
printf("%s\n","查询信息如下:
");
for(i=0;i<80;i++)
putchar('=');
putchar('\n');
printf("%8s","学号");
printf("%8s","姓名");
printf("%8s","语文");
printf("%8s","数学");
printf("%10s","英语");
printf("%12s","平均分");
printf("%10s","总分");
putchar('\n');
printf("%8d",data[result].num);
printf("%8s",data[result].name);
printf("%8.1lf",data[result].Chinese);
printf("%8.1lf",data[result].math);
printf("%10.1lf",data[result].English);
printf("%12.1lf",data[result].mark_ave);
printf("%10.1lf",data[result].mark_tot);
}
printf("\n请输入学号查找(-1退出).");
scanf("%d",&find_num);
}
}
//插入
voidinsert(STUDENT*data,int*len)
{
intnum,pos;
doubleChinese,math,English,mark_ave,mark_tot;
inti;
charname[MAX_NAME];
printf("输入新的记录,-1退出");
printf("\n格式:
\n");
printf("\n学号姓名语文数学英语\n");
scanf("%d",&num);
while(num!
=-1)
{
data[*len].num=num;
scanf("%s%lf%lf%lf",name,&Chinese,&math,&English);
mark_ave=(Chinese+math+English)/3.0;
mark_tot=Chinese+math+English;
pos=0;
while((data[pos].mark_avepos++;
for(i=*len-1;i>=pos;i--)
data[i+1]=data[i];
data[pos].num=num;
strcpy(data[pos].name,name);
data[pos].Chinese=Chinese;
data[pos].math=math;
data[pos].English=English;
data[pos].mark_ave=mark_ave;
data[pos].mark_tot=mark_tot;
(*len)++;
printf("输入新的记录,-1退出");
printf("\n学号姓名语文数学英语\n");
printf("____________________________\n");
scanf("%d",&num);
}
}
//删除
voiddelete_item(STUDENT*data,int*len)
{
intnum,i,pos;
printf("%s\n","输入需要删除的学生的学号,退出当前菜单请输入0.");
scanf("%d",&num);
while(num!
=0)
{
pos=0;
while((data[pos].num!
=num)&&(pos<*len))
pos=pos+1;
if(pos>=*len)
printf("%s\n","未找到需要删除的学生");
else{
for(i=pos+1;i<*len;i++)
data[i-1]=data[i];
*len=*len-1;
printf("删除完成!
");
if(*len==0)
{
printf("%s\n","没有任何记录,请按回车键返回.");
printf("\n");
return;
}
}
printf("%s\n","输入需要删除的学生的学号,退出当前菜单请输入0.");
scanf("%d",&num);
}
}
//统计
voidstat(STUDENT*data,intlen)
{
intnum_59=0,num_69=0,num_79=0,num_89=0,num_100=0;
inti;
for(i=0;iif(data[i].mark_ave<=59)num_59++;
elseif(data[i].mark_ave<=69)num_69++;
elseif(data[i].mark_ave<=79)num_79++;
elseif(data[i].mark_ave<=89)num_89++;
elsenum_100++;
}
system("cls");
printf("\n");
printf("%10s","分数");
printf("%10s","0--59");
printf("%10s","60--69");
printf("%10s","70--79");
printf("%10s","80--89");
printf("%10s","90--100");
putchar('\n');
putchar('\n');
printf("%10s","学生");
printf("%10d",num_59);
printf("%10d",num_69);
printf("%10d",num_79);
printf("%10d",num_89);
printf("%10d",num_100);
printf("\n");
printf("按回车键返回");
getchar();
}
//文件导出
voidsave(STUDENT*data,intlen)
{
inti;
FILE*fp;
doublea=0,b=0,c=0;
for(i=0;i{
a=a+data[i].Chinese;
b=b+data[i].math;
c=c+data[i].English;
}
a=a/len;
b=b/len;
c=c/len;
fp=fopen("学生成绩统计表.txt","w");
fprintf(fp,"学生成绩信息");
fprintf(fp,"\n班级:
0311101\n");
fprintf(fp,"%8s","学号");
fprintf(fp,"%8s","姓名");
fprintf(fp,"%8s","语文");
fprintf(fp,"%8s","数学");
fprintf(fp,"%10s","英语");
fprintf(fp,"%12s","平均分");
fprintf(fp,"%10s\n","总分");
fprintf(fp,"+++++++++++++++++++++++++++++++++++++++++++++++\n");
putchar('\n');
for(i=0;i{
fprintf(fp,"%8d",data[i].num);
fprintf(fp,"%8s",data[i].name);
fprintf(fp,"%8.1lf",data[i].Chinese);
fprintf(fp,"%8.1lf",data[i].math);
fprintf(fp,"%10.1lf",data[i].English);
fprintf(fp,"%12.1lf",data[i].mark_ave);
fprintf(fp,"%10.1lf\n",data[i].mark_tot);
}
fprintf(fp,"平均成绩:
\n语文:
%.1lf",a);
fprintf(fp,"数学:
%.1lf",b);
fprintf(fp,"英语:
%.1lf\n",c);
fprintf(fp,"++++++++++++++++++++++++++++++++++++++++++++\n");
fclose(fp);
printf("文件已保存到\"学生成绩统计表.txt\"");
getchar();getchar();
}
//文件导入
voidload(STUDENT*data,int*len)
{
charfilepn[10];
FILE*fp;
printf("请输入文件路径及文件名:
");
scanf("%s",filepn);/*输入文件路径及名称*/
if((fp=fopen(filepn,"r+"))==NULL)
printf("不能打开文件!
\n");
elseif((fp=fopen(filepn,"r+"))!
=NULL)
{
fscanf(fp,"考试成绩管理系统\n");
fscanf(fp,"学号\t姓名\t语文\t数学\t英语\t\n");
fscanf(fp,"________________________________________________________\n");/*读入表格域*/
printf("考试成绩管理系统\n");
printf("学号\t姓名\t语文\t数学\t英语\t\n");
printf("___________________________________________________________\n");/*打印表格域*/
do
{
fscanf(fp,"%d%s%lf%lf%lf\n",&data[*len].num,&data[*len].name,&data[*len].Chinese,&data[*len].math,&data[*len].English);
printf("%d\t%s\t%.1lf\t%.1lf\t%.1lf\t\n",data[*len].num,data[*len].name,data[*len].Chinese,data[*len].math,data[*len].English);
/*文件读入与显示*/
data[*len].mark_ave=(data[*len].Chinese+data[*len].math+data[*len].English)/3.0;
data[*len].mark_tot=data[*len].Chinese+data[*len].math+data[*len].English;
(*len)++;
}while(!
feof(fp));
printf("____________________________________________________________\n");/*表格下线*/
fclose(fp);/*结束读入,关闭文件*/
}
system("pause");
}
//主菜单
voidmenu(STUDENT*data,int*len)
{
charctrl_ch;
//inti;
system("cls");
printf("学生成绩管理系统");
printf("\n\n\n\n\n");
printf("\t管理员权限\t\t学生权限\n");
printf("\t_________________________________________________\n");
printf("\t\t1输入学生信息\t||4输出学生信息\n");
printf("\t\t2学生成绩管理\t||\n");
printf("\t\t3密码修改\t||\n");
printf("\t_________________________________________________\n");
putchar('\n');
ctrl_ch=getch();printf("%c",ctrl_ch);getch();
putchar('\n');
switch(ctrl_ch)
{
case'1':
if(password())
menuin(data,len);
break;
case'2':
if(password())
menu_do(data,len);
break;
case'3':
if(password())
reset();
menu(data,len);
break;
case'4':
menuout(data,len);
break;
default:
if(ctrl_ch!
='\n'){printf("%s\n","输入错误!
");system("pause");}
break;
}
menu(data,len);
}
//输入菜单
voidmenuin(STUDENT*data,int*len)
{charctrl_ch;
system("cls");
printf("输入信息");
printf("\n\n\n\