学生管理系统.docx
《学生管理系统.docx》由会员分享,可在线阅读,更多相关《学生管理系统.docx(21页珍藏版)》请在冰豆网上搜索。
学生管理系统
#include
#include
#include
#include
structstudent_info
{charnumber[15];/*学号*/
charname[20];/*姓名*/
chargender[8];/*性别*/
charsushe_no[10];/*宿舍号*/
chartel[20];
};
structstudent_grade
{
charnumber[15];
charcourseno[10];/*课程号*/
charcoursename[20];/*课程名称*/
intxuefen;
intpingshicj;
intshiyancj;
intjuanmiancj;
floatzonghecj;
floatshidecj;
};
typedefstructstudent_infostu_info;/*用typedef来定义新类型stu_info代替已有的结构体structstudent_info*/
typedefstructstudent_gradestu_grade;/*用typedef来定义新类型stu_grade代替已有的结构体structstudent_grade*/
intCourseInfoIndex=0;
intStudentInfoIndex=0;
stu_info*StuInfo=NULL;/*定义指向结构体的指针,并初始化为0*/
stu_grade*StuCour=NULL;/*定义指向结构体的指针,并初始化为0*/
intReadStuInfo(void)//从原有的学生信息文件中读取信息
{
FILE*fp;
StudentInfoIndex=0;
if((fp=fopen("d:
\\A.txt","rb"))==NULL)
{
return-1;
}
else
{
while(!
feof(fp))
{
if(fread(&StuInfo[StudentInfoIndex],sizeof(stu_info),1,fp)==1)
{
StudentInfoIndex++;
}
}
fclose(fp);
return0;
}
}
intWriteStuInfo(void)//将学生信息写入到文件中
{
FILE*fp;
if(StudentInfoIndex>=0)
{
if((fp=fopen("d:
\\A.txt","wb"))==NULL)
{
return-1;
}
else
{
fwrite(StuInfo,sizeof(stu_info)*StudentInfoIndex,1,fp);
fclose(fp);
return0;
}
}
return0;}
voidPrintStuInfo(intindex)//显示学生信息
{
inti=0;
ReadStuInfo();//调用ReadStoInf函数,自文件A中读取数据
printf("\n输出学生个人信息数据:
\n");
printf("学号姓名性别宿舍号码电话号码\n");
if(index==-1)
{
for(i=0;i<=StudentInfoIndex-1;i++)
{
printf("%s",StuInfo[i].number);
printf("%s",StuInfo[i].name);
printf("%s",StuInfo[i].gender);
printf("%s",StuInfo[i].sushe_no);
printf("%s\n",StuInfo[i].tel);
}
}
else
{
printf("%s",StuInfo[index].number);
printf("%s",StuInfo[index].name);
printf("%s",StuInfo[index].gender);
printf("%s",StuInfo[index].sushe_no);
printf("%s\n",StuInfo[index].tel);
}
}
voidInStuInfo(void)//添加学生信息
{
intt=0;
charstr[20];
ReadStuInfo();//读取原数据
printf("请输入学生的相关个人信息记录,\n结束记录请以'*'标识.\n");
while(str[0]!
='*')
{
t++;
printf("-------------------------------------\n");
printf("请输入第%d条个人信息记录:
\n",t);
printf("学号:
");
gets(str);
if(str[0]=='*')//如果碰到结束标志
{
continue;
}
strcpy(StuInfo[StudentInfoIndex].number,str);/*输入学生基本信息*/
printf("\n学生姓名:
");
gets(StuInfo[StudentInfoIndex].name);
printf("\n性别:
");
gets(StuInfo[StudentInfoIndex].gender);
printf("\n宿舍号码:
");
gets(StuInfo[StudentInfoIndex].sushe_no);
printf("\n电话号码:
");
gets(StuInfo[StudentInfoIndex].tel);
StudentInfoIndex++;
}
WriteStuInfo();/*将所输信息写入文件A中*/
}
intReadCourseInfo(void)//从原有的学生成绩信息文件中读取信息
{
FILE*fp;
CourseInfoIndex=0;
if((fp=fopen("d:
\\B.txt","rb"))==NULL)
{
return-1;
}
else
{
while(!
feof(fp))
{
if(fread(&StuCour[CourseInfoIndex],sizeof(stu_grade),1,fp)==1)
{
CourseInfoIndex++;
}
}
fclose(fp);
return0;
}
}
intWriteCourseInfo(void)//将成绩信息写入到文件中
{
FILE*fp;
if(CourseInfoIndex>=0)
{
if((fp=fopen("d:
\\B.txt","wb"))==NULL)
{
return-1;
}
else
{
fwrite(StuCour,sizeof(stu_grade)*CourseInfoIndex,1,fp);
fclose(fp);
return0;
}
}
return0;
}
voidPrintCourseInfo(intindex)
{
inti=0;
ReadCourseInfo();
printf("\n输出课程信息:
\n");
printf("学号课程号课程名学分平时成绩实验成绩卷面成绩综合成绩实得学分\n");
if(index==-1)
{
for(i=0;i<=CourseInfoIndex-1;i++)
{
printf("%s",StuCour[i].number);
printf("%s",StuCour[i].courseno);
printf("%s",StuCour[i].coursename);
printf("%d",StuCour[i].xuefen);
printf("%d",StuCour[i].pingshicj);
printf("%d",StuCour[i].shiyancj);
printf("%d",StuCour[i].juanmiancj);
printf("%f",StuCour[i].zonghecj);
printf("%f\n",StuCour[i].shidecj);
}
}
else
{
printf("%s",StuCour[index].number);
printf("%s",StuCour[index].courseno);
printf("%s",StuCour[index].coursename);
printf("%d",StuCour[index].xuefen);
printf("%d",StuCour[index].pingshicj);
printf("%d",StuCour[index].shiyancj);
printf("%d",StuCour[index].juanmiancj);
printf("%f",StuCour[index].zonghecj);
printf("%f\n",StuCour[index].shidecj);
}
}
voidInStuCourseInfo(void)//输入学生成绩信息记录
{
intt=0;
charstr[20];
ReadCourseInfo();//先把原先文件中存在的记录读到内存中
printf("请输入学生课程记录,\n结束记录请以'*'标识.\n");
while(str[0]!
='*')
{
t++;
printf("-------------------------------------\n");
printf("请输入第%d条课程信息记录:
\n",t);
printf("学号:
");
gets(str);
if(str[0]=='*')//如果碰到结束标志
{
continue;
}
strcpy(StuCour[CourseInfoIndex].number,str);
printf("\n课程号:
");
gets(StuCour[CourseInfoIndex].courseno);
printf("\n课程名:
");
gets(StuCour[CourseInfoIndex].coursename);
printf("\n学分:
");
gets(str);
StuCour[CourseInfoIndex].xuefen=(int)atof(str);//将字符串装换为int型
printf("\n平时成绩:
");
gets(str);
StuCour[CourseInfoIndex].pingshicj=(int)atof(str);
printf("\n实验成绩:
");
gets(str);
StuCour[CourseInfoIndex].shiyancj=(int)atof(str);
printf("\n卷面成绩:
");
gets(str);
StuCour[CourseInfoIndex].juanmiancj=(int)atof(str);
//下面计算综合成绩和实得成绩
if(StuCour[CourseInfoIndex].shiyancj==-1)
{
StuCour[CourseInfoIndex].zonghecj=StuCour[CourseInfoIndex].pingshicj*0.3+StuCour[CourseInfoIndex].juanmiancj*0.7;
}
else
{
StuCour[CourseInfoIndex].zonghecj=StuCour[CourseInfoIndex].shiyancj*0.15+StuCour[CourseInfoIndex].pingshicj*0.15+StuCour[CourseInfoIndex].juanmiancj*0.7;
}
if(StuCour[CourseInfoIndex].zonghecj>=90)
{
StuCour[CourseInfoIndex].shidecj=StuCour[CourseInfoIndex].xuefen*1.0;
}
else
{
if(StuCour[CourseInfoIndex].zonghecj>=70)
{
StuCour[CourseInfoIndex].shidecj=StuCour[CourseInfoIndex].xuefen*0.8;
}
else
{
if(StuCour[CourseInfoIndex].zonghecj>=60)
{
StuCour[CourseInfoIndex].shidecj=StuCour[CourseInfoIndex].xuefen*0.6;
}
else
{
StuCour[CourseInfoIndex].shidecj=0.0;
}
}
}
CourseInfoIndex++;
}
WriteCourseInfo();//保存到文件中
}
voidSeekInfo()/*按照学号查询*/
{charxh[20];
printf("请输入要查找的学号:
\n");
gets(xh);
ReadStuInfo();
printf("学号姓名性别宿舍号码电话号码\n");
for(intm=0;m{if(strcmp(xh,StuInfo[m].number)==0)
{//ReadStuInfo();
printf("%s",StuInfo[m].number);
printf("%s",StuInfo[m].name);
printf("%s",StuInfo[m].gender);
printf("%s",StuInfo[m].sushe_no);
printf("%s\n",StuInfo[m].tel);
}
}
}
voidSeekInfox()/*按照姓名查询*/
{charxm[20];
printf("请输入要查找的姓名:
\n");
gets(xm);
ReadStuInfo();
printf("学号姓名性别宿舍号码电话号码\n");
for(intx=0;x{if(strcmp(xm,StuInfo[x].name)==0)
{//ReadStuInfo();
printf("%s",StuInfo[x].number);
printf("%s",StuInfo[x].name);
printf("%s",StuInfo[x].gender);
printf("%s",StuInfo[x].sushe_no);
printf("%s\n",StuInfo[x].tel);
}
}
}
voidSeekInfocj()/*按照学号查询成绩信息*/
{charxn[20];
printf("查找成绩,请输入要查找的学号:
\n");
gets(xn);
ReadStuInfo();
for(inty=0;y{if(strcmp(xn,StuInfo[y].number)==0)
{//ReadStuInfo();
printf("学号:
%s",StuInfo[y].number);
printf("姓名:
%s\n",StuInfo[y].name);
}
}
ReadCourseInfo();
for(intz=0;z{if(strcmp(xn,StuCour[z].number)==0)
{//ReadCoursefo();
printf("课程编号:
%s",StuCour[z].courseno);
printf("课程名称:
%s",StuCour[z].coursename);
printf("综合成绩:
%f",StuCour[z].zonghecj);
printf("实得学分:
%f\n",StuCour[z].shidecj);
}
}
}
voidSeekInfoss()/*按照宿舍号查询*/
{charxs[20];
printf("请输入要查找的宿舍号:
\n");
gets(xs);
ReadStuInfo();
printf("学号姓名性别宿舍号码电话号码\n");
for(ints=0;s{if(strcmp(xs,StuInfo[s].sushe_no)==0)
{//ReadStuInfo();
printf("%s",StuInfo[s].number);
printf("%s",StuInfo[s].name);
printf("%s",StuInfo[s].gender);
printf("%s",StuInfo[s].sushe_no);
printf("%s\n",StuInfo[s].tel);
}
}
}
/*将src指向的一条记录复制给dest指向的记录*/
voidCopyStuInfo(stu_info*src,stu_info*dest)
{
intj;
strcpy(dest->number,src->number);
strcpy(dest->name,src->name);
strcpy(dest->gender,src->gender);
strcpy(dest->sushe_no,src->sushe_no);
strcpy(dest->tel,src->tel);
}
voidDel(void)
{
charstrdel[15];
intp=0;
intflag=0;
intt=StudentInfoIndex;
printf("删除一个学生的相关信息记录:
\n");
ReadCourseInfo();
ReadStuInfo();
PrintStuInfo(-1);//打印学生信息
printf("请输入要删除学生的学号:
");
gets(strdel);
while(p<=t&&flag==0)
{
if(strcmp(strdel,StuInfo[p].number)==0)
{
flag=1;//找到该学号的记录
CopyStuInfo(&StuInfo[t-1],&StuInfo[p]);//将最后一个记录覆盖当前记录,如果找到的是最后一个记录,则直接丢失
t--;
StudentInfoIndex--;
}
else
{
p++;
}
}
WriteStuInfo();
WriteCourseInfo();
PrintStuInfo(-1);//显示学生基本信息和成绩信息
PrintCourseInfo(-1);
}
voidSelectway()
{printf("a.按学号查询;\n");
printf("b.按姓名查询;\n");
charflagw[20];
gets(flagw);
if(flagw[0]=='a')
{SeekInfo();}
else
{SeekInfox();}
}
/*将src指向的一条记录复制给dest指向的记录*/
voidCopyCourseInfo(stu_grade*src,stu_grade*dest)
{
intj;
strcpy(dest->number,src->number);
strcpy(dest->courseno,src->courseno);
strcpy(dest->coursename,src->coursename);
dest->xuefen=src->xuefen;
dest->pingshicj=src->pingshicj;
dest->juanmiancj=src->juanmiancj;
dest->zonghecj=src->zonghecj;
dest->shidecj=src->shidecj;
}
voidSortInfo(void)/*实现按综合成绩或实得学分正逆排序*/
{
charstr[5];
inti,j;
stu_gradetmps;
printf("选择方式对综合成绩和实得成绩排序:
\n");
printf("1.按综合成绩正向排序\n");
printf("2.按综合成绩逆向排序\n");
printf("3.按实得学分正向排序\n");
printf("4.按实得学分逆向排序\n");
gets(str);
ReadCourseInfo();//读取文件的信息
if(str[0]<'1'||str[0]>'4')return;/*起泡法进行排序*/
for(i=0;i<=CourseInfoIndex-2;i++)
{
for(j=i+1;j<=CourseInfoIndex-1;j++)
{
if((str[0]=='1'&&StuCour[i].zonghecj>StuCour[j].zonghecj)||
(str[0]=='2'&&StuCour[i].zonghecj(str[0]=='3'&&StuCour[i].shidecj>StuCour[j].shidecj)||
(str[0]=='4'&&StuCour[i].shidecj{
CopyCourseInfo(&StuCour[i],&tmps);
CopyCourseInfo(&StuCour[j],&StuCour[i]);
CopyCourseInfo(&tmps,&StuCour[j]);
}
}
}
WriteCourseInfo();//将排序好的写入到文件中