C语言学生信息管理系统代码.docx
《C语言学生信息管理系统代码.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统代码.docx(23页珍藏版)》请在冰豆网上搜索。
![C语言学生信息管理系统代码.docx](https://file1.bdocx.com/fileroot1/2023-6/20/53af8319-a2de-4499-98e3-0ade679b63c8/53af8319-a2de-4499-98e3-0ade679b63c81.gif)
C语言学生信息管理系统代码
XX师范大学
实验报告
课程C语言课程设计
任课老师
学号
姓名
院系
_______年______月至_______年_______月
注意事项
1.使用C语言,代码已在vs中运行过,可以运行(主要功能都能实现)
2.需求分析,前期设计都没写,请同学们自己完成
3.附带有student.txt文件,将其移动至F:
\stu文件夹中,运行程序时可直接选6号指令,从中读取学生信息。
如果没有该txt文件(可能会在上传过程中丢失),仍需在F盘下新建stu文件夹,各文件将保存于该文件夹中
4.按word格式输出尚未设计好,有兴趣可自己完成
5.按excel格式输出,完成后需自行调整相应列宽(拉宽),使内容美观
6.从下一页开始,复制余下全文,粘贴即可运行
#include
#defineM30//班级总人数,暂定30,可修改
#defineN3//课程成绩门数,暂定3,可修改
intinputstu(structstudentstu[],intm,intn);
voidprinstu(structstudentstu[],intm,intn);
intsortsno(structstudentstu[],intm);
intsortage(structstudentstu[],intm);
intsortmark(structstudentstu[],intsm[],intm,intn);
voidprinsort(structstudentstu[],intm,intn);
intwritefile(structstudentstu[],FILE*fp,intm,intn);
intreadfile(structstudentstu[],FILE*fp,intm,intn);
intfprinword(structstudentstu[],FILE*fp,intm,intn);
intfprinexcel(structstudentstu[],FILE*fp,intm,intn);
intseachsno(structstudentstu[],longsno,intm,intn);
intseachsname(structstudentstu[],charsname[],intm,intn);
intdesno(structstudentstu[],longsno,intm);
intdesname(structstudentstu[],charsname[],intm);
intcutin(structstudentstu[],intm,intn);
structstudent
{
intturn;
longsno;
charsname[20];
charsgrade[10];
charsbirth[10];
intsmark[N];
};
voidmain()
{
inti=0;
intcon1=0;
intcon2=0;
longsno;
charsname[20];
FILE*fp=NULL;
structstudentstu[M];
for(i=0;i{
stu[i].turn=-1;
}
do{
printf("\n\n********************************************\n");
printf("\n***学生信息管理系统***\n\n");
printf("***请按提示输入相应命令:
***\n\n");
printf("1键盘输入所有学生的基本信息\n");
printf("2屏幕输出所有学生的基本信息\n");
printf("3子菜单:
按一定顺序对学生进行排序\n");
printf("4按顺序屏幕输出学生信息\n");
printf("5保存学生信息(二进制文件)\n");
printf("6从上次保存的二进制文件中读取学生信息\n");
printf("7子菜单:
将学生信息保存为文本文档(人工阅读)\n");
printf("8子菜单:
对单个学生的插入删除查询修改\n");
printf("-1退出系统\n");
scanf("%d",&con1);
switch(con1)
{
case1:
{
printf("\n***注意!
***\n");
printf("继续进行输入会覆盖原数据!
!
!
\n");
printf("第一次使用本软件或需重新写信息请继续:
\n");
printf("1继续\n");
printf("-1返回\n");
scanf("%d",&con2);
if(con2==1)
{
inputstu(stu,M,N);
}
break;
}
case2:
prinstu(stu,M,N);break;
case3:
{
do{
printf("\n****************************************\n");
printf("1按学号顺序进行排序\n");
printf("2按年龄从小到大排序\n");
printf("3按总成绩由高到低排序\n");
printf("-1返回上一级菜单\n");
scanf("%d",&con2);
switch(con2)
{
case1:
{
sortsno(stu,M);
con2=0;
break;
}
case2:
{
//sortage(stu,M);
break;
}
case3:
{
intsm[M];
sortmark(stu,sm,M,N);
break;
}
case-1:
break;
default:
printf("二级命令输入错误,请重试!
\n");
fflush(stdin);
}
}while(con2!
=-1);
break;
}
case4:
prinsort(stu,M,N);break;
case5:
writefile(stu,fp,M,N);break;
case6:
readfile(stu,fp,M,N);break;
case7:
{
printf("\n************************************************\n");
printf("1将学生信息输出为txt文档,路径:
F:
\stu\student.txt\n");
printf("2将学生信息输出为word文档,路径:
F:
\stu\student.doc\n");
printf("3将学生信息输出为excel文档,路径:
F:
\stu\student.xls\n");
printf("-1返回上一级菜单\n");
scanf("%d",&con2);
switch(con2)
{
case1:
{
break;
}
case2:
{
fprinword(stu,fp,M,N);
break;
}
case3:
{
fprinexcel(stu,fp,M,N);
break;
}
}
}
break;
case8:
{
do
{
printf("\n*******************************\n\n");
printf("1按学号查询单个学生\n");
printf("2按姓名查询单个学生\n");
printf("3按学号删除单个学生\n");
printf("4按姓名删除单个学生\n");
printf("5插入单个学生信息\n");
printf("-1返回主菜单\n");
scanf("%d",&con2);
switch(con2)
{
case1:
{
printf("请输入单个学号:
\n");
scanf("%10ld",&sno);
seachsno(stu,sno,M,N);
break;
}
case2:
{
printf("请输入单个学生姓名:
\n");
scanf("%20s",sname);
seachsname(stu,sname,M,N);
break;
}
case3:
{
printf("请输入单个学号:
\n");
scanf("%10ld",&sno);
desno(stu,sno,M);
break;
}
case4:
{
printf("请输入单个学生姓名:
\n");
scanf("%s",sname);
desname(stu,sname,M);
break;
}
case5:
{
cutin(stu,M,N);
break;
}
default:
{
printf("二级指令错误,请重新输入!
\n");
break;
}
}
}while(con2!
=-1);
}
case-1:
printf("感谢使用本系统!
\n");break;
default:
printf("一级命令输入错误,请重试");
fflush(stdin);
break;
}
}while(con1!
=-1);
}
//输入学生的基本信息
intinputstu(structstudentstu[],intm,intn)
{
inti=0;
intj=0;
printf("请按说明输入学生信息:
\n");
while(i{
printf("请输入第%d个学生的学号,姓名,班级,出生日期:
\n",i+1);
scanf("%10ld%20s%10s%10s",&stu[i].sno,&stu[i].sname,&stu[i].sgrade,&stu[i].sbirth);
for(j=0;j{
printf("请输入第%d个学生的第%d门成绩\n",i+1,j+1);
scanf("%d",&stu[i].smark[j]);
}
i++;
}
returni;
}
//屏幕输出学生信息
voidprinstu(structstudentstu[],intm,intn)
{
inti=0;
intj=0;
printf("**********************************************************\n");
printf("学生基本信息如下:
\n");
printf("学号姓名班级出生年月成绩1成绩2成绩3\n");
while(i{
if(stu[i].sno==0)
{
i++;
continue;
}
printf("%10ld%20s%10s%10s",stu[i].sno,stu[i].sname,stu[i].sgrade,stu[i].sbirth);
for(j=0;j{
printf("%d",stu[i].smark[j]);
}
printf("\n");
i++;
}
}
//按学号顺序进行排序
intsortsno(structstudentstu[],intm)
{
inti=0;
intj=0;
ints;
longsno[M];
for(i=0;i{
sno[i]=stu[i].sno;
}
for(i=0;i{
for(j=i+1;j{
s=sno[i];
if(s>sno[j])
{
s=sno[j];
sno[j]=sno[i];
sno[i]=s;
}
}
}
for(i=0;i{
for(j=0;j{
if(stu[j].sno==sno[i])
{
stu[j].turn=i;
}
}
}
returni;
}
//按年龄对学生进行排序;
intsortage(structstudentstu[],intm)
{
}
//按总成绩由高到低排序
intsortmark(structstudentstu[],intsm[],intm,intn)
{
inti=0;
intj=0;
ints=0;
for(i=0;i{
sm[i]=0;
}
for(i=0;i{
for(j=0;j{
sm[i]=sm[i]+stu[i].smark[j];
}
}
for(i=0;i{
for(j=i+1;j{
s=sm[i];
if(s{
s=j;
}
sm[s]=0;
stu[s].turn=i;
}
}
returni;
}
//按顺序屏幕输出
voidprinsort(structstudentstu[],intm,intn)
{
inti=0;
intj=0;
intk=0;
printf("\n**********************************************************\n");
printf("按排序,学生基本信息如下:
\n");
printf("学号姓名班级出生年月成绩1成绩2成绩3\n");
while(k{
if(stu[i].sno==0)
{
continue;
}
for(i=0;i{
if(stu[i].turn==k)
{
printf("%10ld%20s%10s%10s",stu[i].sno,stu[i].sname,stu[i].sgrade,stu[i].sbirth);
for(j=0;j{
printf("%d",stu[i].smark[j]);
}
printf("\n");
}
}
k++;
}
}
//写数据进二进制文件
intwritefile(structstudentstu[],FILE*fp,intm,intn)
{
inti=1;
fp=fopen("f:
\\stu\\student.txt","wb");
if(fp==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
fwrite(&stu[0],sizeof(structstudent),m,fp);
i=fclose(fp);
returni;
}
//从二进制中读取学生信息
intreadfile(structstudentstu[],FILE*fp,intm,intn)
{
inti=1;
fp=fopen("f:
\\stu\\student.txt","rb");
if(fp==NULL)
{
printf("打开文件失败!
\n");
exit(0);
}
fread(&stu[0],sizeof(structstudent),m,fp);
i=fclose(fp);
returni;
}
//将学生信息写入word文档,保存于F:
\stu\student.doc
intfprinword(structstudentstu[],FILE*fp,intm,intn)
{
inti=0;
intj=0;
fp=fopen("F:
\\stu\\student.doc","w");
if(fp==NULL)
{
printf("文件打开失败!
");
exit(0);
}
while(i{
if(stu[i].sno==0);
{
continue;
}
fprintf(fp,"%10ld%20s%10s%10s",stu[i].sno,stu[i].sname,stu[i].sgrade,stu[i].sbirth);
for(j=0;j{
fprintf(fp,"%d",stu[i].smark[j]);
}
printf("\n");
i++;
}
fclose(fp);
returni;
}
//将学生信息写入excel文档,保存于F:
\stu\student.xls
intfprinexcel(structstudentstu[],FILE*fp,intm,intn)
{
inti=0;
intj=0;
chart='\t';
charlin[20]="成绩";
charstr[4][20];
strcpy(str[0],"学号");
strcpy(str[1],"姓名");
strcpy(str[2],"班级");
strcpy(str[3],"生日");
fp=fopen("F:
\\stu\\student.xls","w");
if(fp==NULL)
{
printf("文件打开失败!
");
exit(0);
}
fprintf(fp,"%s%c%s%c%s%c%s",str[0],t,str[1],t,str[2],t,str[3]);
for(i=0;i{
fprintf(fp,"%c%s%d",t,lin,i+1);
}
fprintf(fp,"\n");
i=0;
while(i{
if(stu[i].sno==-1)
{
continue;
}
fprintf(fp,"%10ld%c%20s%c%10s%c%10s",stu[i].sno,t,stu[i].sname,t,stu[i].sgrade,t,stu[i].sbirth);
for(j=0;j{
fprintf(fp,"%c%d",t,stu[i].smark[j]);
}
fprintf(fp,"\n");
i++;
}
fclose(fp);
returni;
}
//按学号查询单个学生
intseachsno(structstudentstu[],longsno,intm,intn)
{
inti=0;
intj=0;
for(i=0;i{
if(stu[i].sno==sno)
{
printf("按学号查询到的学生基本信息如下:
\n");
printf("学号姓名班级出生年月成绩1成绩2成绩3\n");
printf("%10ld%20s%10s%10s",stu[i].sno,stu[i].sname,stu[i].sgrade,stu[i].sbirth);
for(j=0;j{
printf("%d",stu[i].smark[j]);
}
printf("\n");
break;
}
}
returni;
}
//按姓名查询单个学生
intseachsname(structstudentstu[],charsname[],intm,intn)
{
inti=0;
intj=0;
ints=-1;
for(i=0;i