使用c/c++开发的一个简单学生信息管理系统,功能如图所示:
选择不同的数字后可以选择不同的功能使用
在刚开始运行系统时会进行一个系统暂停,使用了windows函数库里面的system("pause"),暂停系统有助于保护系统稳定性,防止系统出现闪屏等意外情况导致闪退等,并且使用了windows函数里面的color(颜色函数),把该系统颜色换位绿色,增加系统美观性,便于欣赏!!!
此外,该系统是用结构体数组储存学生数据。
信息录入功能:输入要增加的学生信息,成绩,学号姓名等,可以把该信息导入到结构体数组里面保存起来,如下图所示
在每次增加学生信息后要记得使用文件储存功能把输入的学生信息保存到文件里面,如下图所示:
保存后系统会在该系统路径下创建一个文本文件用于保存学生信息,保存到文件后在下次重新打开系统的时候载入文件信息即可把上次保存到文件里面的信息导入结构体数组里面,再点击查询即可查询到,如下图所示:
此信息为刚才用户输入的学生信息(学号,名字,各科成绩等)
2.信息查询功能:
用户可以选择按照学号查找,按照姓名查找,或者退出查询菜单
3.排序查看功能:
可以把结构体数组里面的信息按照平均成绩排序,然后输出到控制台
4.成绩修改功能:
如下图为该功能展示,分别为修改的信息跟修改后输出的信息
5.信息追加功能:
该功能跟信息录入功能类似,输入学生基本信息后会把该信息追加到结构体数组里面,与·信息追加功能不同的是可以选择追加的学生信息个数,如下图所示:
6.删除数据:即删除学生信息,在选择删除学生的学号或者姓名后,系统会把该学生信息删除出去,如下图所示:,再次选择按学号查找时已找不到该学生信息!
7.成绩分段:即分别按照平均成绩进行分类,及格,优秀,中等。
8.文件储存:该功能在功能1已经介绍过,即输入学生信息后使用该功能,可以把学生信息导入到结构体数组当中,方别下次查找该学生信息
9.文件输出:可以把文件里面的学生信息输出出来,可以直接查看
10.文件载入:该功能也是该系统最后一个功能,可以把文件里面的信息载入到结构体数组里面,方便对信息操作,查看,排序,删除等。文章来源:https://www.toymoban.com/news/detail-490709.html
以下为该系统完整代码:文章来源地址https://www.toymoban.com/news/detail-490709.html
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>//用于界面颜色和系统暂停
#define x 300//学号和姓名和班级名字最大值
#define y 300//最大学生人数
int k=1,n=0,m=0;//n代表当前记录的学生人数,m为新增加的学生人数
struct stdent
{
char studentid[x+1];//学生学号
char studentname[x+1];//学生名字
char studentclass[x+1];//学生班级
double score[5];//5门课成绩
double ave;//每个学生平均成绩
double temp[5];//该函数和下面的函数用于临时交换成绩
char tem[x+1];//用于临时交换成绩
}stu[y];
void insert();//信息录入函数
void menu();//界面函数
void keydown(); //用户交互界面函数
void seek();//信息查询函数
void paixu(); //排序函数
//void ave();//求平均成绩函数,该函数在查询信息函数中调用 ,且在排序函数中调用
void del();//删除学生信息函数
void save();//保存学生信息到文件
void shuchu();//输出文件中学生的信息
void zairu();//载入文件中的信息
void fenduan();//按平均成绩分为三段
void xiugai();//修改学生成绩
int main()
{
system("color B");
printf("\t\t\t\t\t欢迎大哥来到轻大信息查询中心\n");
system("pause") ;
while(1)
{
// system("pause") ;
menu();
keydown();
}
return 0;
}
void menu()//界面函数
{
//zairu();
//system("pause");
printf("主界面\n\n\n");
printf("\t\t\t----------------【轻大学生信息管理系统】----------------\n");
printf("\t\t\t\t\t\t1 .信息录入\n");
printf("\t\t\t\t\t\t2 .信息查询\n");
printf("\t\t\t\t\t\t3 .排序查看\n");
printf("\t\t\t\t\t\t4 .成绩修改\n");
printf("\t\t\t\t\t\t5 .信息追加\n");
printf("\t\t\t\t\t\t6 .删除数据\n");
printf("\t\t\t\t\t\t7 .成绩分段\n");
printf("\t\t\t\t\t\t8 .文件储存\n");
printf("\t\t\t\t\t\t9 .文件输出\n");
printf("\t\t\t\t\t\t10.文件载入\n");
printf("\t\t\t---------------------------------------------------------\n");
printf("\t\t\t\t\t\t<输入0退出>\n");
printf("操作指令:\n");
system("pause");
}
void keydown()//用户交互界面函数
{
int choice;
scanf("%d",&choice);
switch(choice)
{
case 0:
printf("祝您开心每一天,拜拜\n");
system("pause");
exit(0);//结束系统
break;
case 1:
printf("\t\t\t\t----------------【信息录入】----------------\n");
insert();
break;
case 2:
printf("\t\t\t\t----------------【信息查询】----------------\n");
seek();
break;
case 3:
printf("\t\t\t\t----------------【排序查看】----------------\n");
paixu();
break;
case 4:
printf("\t\t\t\t----------------【成绩修改】----------------\n");
xiugai();
break;
case 5:
printf("\t\t\t\t----------------【信息追加】----------------\n");
insert();
break;
case 6:
printf("\t\t\t\t----------------【删除数据】----------------\n");
del();
break;
case 7:
printf("\t\t\t\t----------------【成绩分段】----------------\n");
fenduan();
break;
case 8:
printf("\t\t\t\t----------------【文件储存】----------------\n");
save();
break;
case 9:
printf("\t\t\t\t----------------【文件输出】----------------\n");
shuchu();
break;
case 10:
printf("\t\t\t\t----------------【文件载入】----------------\n");
zairu();
break;
default:
printf("选择错误,请大哥重新输入\n");
break;
}
}
void insert()//增加学生信息
{
int i,j;
printf("请大哥输入待增加的学生数\n");
scanf("%d",&m);
for(i=n;i<n+m;i++)
{
printf("请输入第%d个同学班级:\n",i+1);
scanf("%s",stu[i].studentclass);
printf("请输入第%d个同学姓名:\n",i+1);
scanf("%s",stu[i].studentname);
printf("请输入第%d个同学学号:\n",i+1);
scanf("%s",stu[i].studentid);
printf("请输入第%d个同学c语言成绩:\n",i+1);
scanf("%lf",&stu[i].score[0]);
printf("请输入第%d个同学高数成绩:\n",i+1);
scanf("%lf",&stu[i].score[1]);
printf("请输入第%d个同学英语成绩:\n",i+1);
scanf("%lf",&stu[i].score[2]);
printf("请输入第%d个同学计科成绩:\n",i+1);
scanf("%lf",&stu[i].score[3]);
printf("请输入第%d个同学英语成绩:\n",i+1);
scanf("%lf",&stu[i].score[4]);
}
n+=m;//把n变为当前学生人数
printf("ohhhhh,学生信息增加完毕\n");
return;
//system("pause");
}
void seek()
{
void ave();//求平均成绩,直接求好平均成绩,因为该功能要输出平均成绩
ave();
int i,item,flag;//item代表菜单编号
char s1[x+1],s2[x+1];//s1为用户输入的查找的学号,s2为姓名
printf("\t\t\t\t**********************************************\n");
printf("\t\t\t\t\t\t1.按学号查找\n");
printf("\t\t\t\t\t\t2.按姓名查找\n");
printf("\t\t\t\t\t\t3.退出本菜单\n");
printf("\t\t\t\t**********************************************\n");
while(1)
{
printf("请大哥选择该菜单编号:\n");
scanf("%d",&item);
//flag=0;
switch(item)
{
flag=0;
case 1:
printf("请大哥输入要查询的学生学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
{
//flag=0;
if(strcmp(stu[i].studentid,s1)==0)//查询相同的学号
{
flag++;//标识变量加一
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[i].studentclass,stu[i].studentname,stu[i].studentid,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].ave);
break;
}
}
if(flag==0)//若没有相同学号标识变量为零
{
printf("非常抱歉,查无此人!\n");
break;
}
break;
case 2:
printf("请大哥输入要查询的学生姓名:\n");
scanf("%s",s2);
//getchar();
for(i=0;i<n;i++)
{
//flag=0;
if(strcmp(stu[i].studentname,s2)==0)
{
flag++;
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[i].studentclass,stu[i].studentname,stu[i].studentid,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].ave);
//system("pause");
}
if(flag==0)
{
printf("非常抱歉,查无此人!\n");
break;
}
}
break;
case 3:return;
default:printf("我不懂,请您在1-3之间选择\n");
//system("pause");
}
}
}
void ave()//求平均成绩函数
{
int x3,x4,x1,x2;//x1,x2,x3,x4为循环参数
double sum1=0.0,sum2=0.0;
for(x3=0;x3<5;x3++)//该循环为求每门课平均成绩
{
for(x4=0;x4<n;x4++)
{
sum1+=stu[x4].score[x3];
}
//printf("第%d门课平均成绩为%8.2lf\n",x3+1,sum1/n);
}
for(x1=0;x1<n;x1++)//该循环为求每个同学平均成绩
{
sum2=0;
for(x2=0;x2<5;x2++)
{
sum2+=stu[x1].score[x2];
}
//printf("第%d个同学的平均成绩为%8.2lf\n",x1+1,sum2/n);
stu[x1].ave=sum2/5.0;
}
return;
}
void paixu()//按平均成绩排序
{
void ave();//提前计算平均成绩
ave ();
int i,j,a;
double temp;
char k[x];
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(stu[i].ave<stu[i+j].ave)
{
temp=stu[i].ave;
stu[i].ave=stu[i+j].ave;
stu[i+j].ave=temp;
stu[i].temp[0]=stu[i].score[0];
stu[i].score[0]=stu[i+j].score[0];
stu[i+j].score[0]=stu[i].temp[0];
stu[i].temp[1]=stu[i].score[1];
stu[i].score[1]=stu[i+j].score[1];
stu[i+j].score[1]=stu[i].temp[1];
stu[i].temp[2]=stu[i].score[2];
stu[i].score[2]=stu[i+j].score[2];
stu[i+j].score[2]=stu[i].temp[2];
stu[i].temp[3]=stu[i].score[3];
stu[i].score[3]=stu[i+j].score[3];
stu[i+j].score[3]=stu[i].temp[3];
stu[i].temp[4]=stu[i].score[4];
stu[i].score[4]=stu[i+j].score[4];
stu[i+j].score[4]=stu[i].temp[4];
stu[i].tem[0]=stu[i].studentclass[x+1];
stu[i].studentclass[x+1]=stu[i+j].studentclass[x+1];
stu[i+j].studentclass[x+1]=stu[i].tem[0];
stu[i].tem[0]=stu[i].studentid[x+1];
stu[i].studentid[x+1]=stu[i+j].studentid[x+1];
stu[i+j].studentid[x+1]=stu[i].tem[0];
stu[i].tem[0]=stu[i].studentname[x+1];
stu[i].studentname[x+1]=stu[i+j].studentname[x+1];
stu[i+j].studentname[x+1]=stu[i].tem[0];//用选择排序法交换各个学生信息按平均成绩进行排序
}
}
//printf("%.2lf\n",stu[i].ave);
}
for(a=0;a<n;a++)
{
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[a].studentclass,stu[a].studentname,stu[a].studentid,stu[a].score[0],stu[a].score[1],stu[a].score[2],stu[a].score[3],stu[a].score[4],stu[a].ave);
}
}
void del()//删除学生信息
{
int i,j,flag=0;
char s[x+1];
printf("请大哥输入要删除的学生学号:\n");
scanf("%s",s);
for(i=0;i<n;i++)
{
if(strcmp(stu[i].studentid,s)==0)
{
flag=1;//进入该选择,改变标识变量
for(j=i;j<n-1;j++)//下面加一,此处循环到n-1
{
stu[j]=stu[j+1];//后面一位的学生信息往前进一位
}
n--;//若删除成功,学生人数减一 ,n为现存学生人数
printf("删除信息成功!\n");
break;
}
}
if(flag==0)
{
printf("该学号不存在,请大哥重新输入!\n");
}
}
void save()//载入文件信息
{
ave();//存入文件时先计算一下平均值
FILE *fp1;
int i;
fp1=fopen("giao.txt","a");//以文本形式打开该文件
for(i=0;i<n;i++)
{
fprintf(fp1,"%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[i].studentclass,stu[i].studentname,stu[i].studentid,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].ave);
}
fclose(fp1);
printf("保存成功\n");
system("pause");
}
void shuchu()//文件输出
{
FILE *fp2;
int i,a;
printf("请大哥输入需要查看的学生个数:\n");
scanf("%d",&a);
fp2=fopen("giao.txt","r");
for(i=0;i<a;i++)
{
fscanf(fp2,"%s %s %s %lf %lf %lf %lf %lf %lf\n",&stu[i].studentclass,&stu[i].studentname,&stu[i].studentid,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4],&stu[i].ave);
}
for(i=0;i<a;i++)
{
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[i].studentclass,stu[i].studentname,stu[i].studentid,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].ave);
}
fclose(fp2);
//printf("载入学生信息成功了\n")
}
void zairu()//载入文件中存储的学生信息
{
FILE *fp2;
int i,a;
printf("请大哥输入需要载入的学生个数:\n");
scanf("%d",&a);
fp2=fopen("giao.txt","r");
for(i=0;i<a;i++)
{
fscanf(fp2,"%s %s %s %lf %lf %lf %lf %lf %lf\n",&stu[i].studentclass,&stu[i].studentname,&stu[i].studentid,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4],&stu[i].ave);
}
//printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[i].studentclass,stu[i].studentname,stu[i].studentid,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].ave);
n+=a;
fclose(fp2);
printf("载入学生信息成功\n");
}
void fenduan()//成绩分段函数,按平均成绩分为三档,超强档,一般档,垃圾档
{
void ave();
ave();
int i,a[y],o=0,b[y],c[y],p=0,q=0,j,e,r,t;
for(i=0;i<n;i++)
{
if(stu[i].ave>=90)
{
a[o]=i;//把超强档的学生的序号存入该数组
o++;
}
if(stu[i].ave<90&&stu[i].ave>=60)
{
b[p]=i;//同理
p++;
}
if(stu[i].ave<60)
{
c[q]=i;//同理
q++;
}
}
printf("\t\t\t\t************************超强档*******************\n");
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
for(e=0;e<o;e++)//输出提前存入超强档的学生序号对应的信息
{
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[a[e]].studentclass,stu[a[e]].studentname,stu[a[e]].studentid,stu[a[e]].score[0],stu[a[e]].score[1],stu[a[e]].score[2],stu[a[e]].score[3],stu[a[e]].score[4],stu[a[e]].ave);
}
printf("\t\t\t\t************************一般档*******************\n");
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
for(r=0;r<p;r++)//同理
{
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[b[r]].studentclass,stu[b[r]].studentname,stu[b[r]].studentid,stu[b[r]].score[0],stu[b[r]].score[1],stu[b[r]].score[2],stu[b[r]].score[3],stu[b[r]].score[4],stu[b[r]].ave);
}
printf("\t\t\t\t************************垃圾档*******************\n");
printf("学生班级 学生姓名 学生学号 c语言成绩 高数成绩 英语成绩 计科成绩 体育成绩 平均成绩\n");
for(t=0;t<q;t++)//同理
{
printf("%8s %8s %8s %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf %8.2lf\n",stu[c[t]].studentclass,stu[c[t]].studentname,stu[c[t]].studentid,stu[c[t]].score[0],stu[c[t]].score[1],stu[c[t]].score[2],stu[c[t]].score[3],stu[c[t]].score[4],stu[c[t]].ave);
}
}
void xiugai()//修改学生成绩
{
int b,i,j,flag=0;
char a[x+1];
printf("请大哥输入您要修改的学生的学号:\n");
scanf("%s",a);
for(i=0;i<n;i++)
{
if(strcmp(stu[i].studentid,a)==0)
{
flag++;
printf("请大哥重新输入该学生信息:\n");//重新输入修改后的学生信息
printf("请输入该同学班级:\n");
scanf("%s",stu[i].studentclass);
printf("请输入该同学姓名:\n");
scanf("%s",stu[i].studentname);
printf("请输入该同学学号:\n");
scanf("%s",stu[i].studentid);
printf("请输入该同学c语言成绩:\n");
scanf("%lf",&stu[i].score[0]);
printf("请输入该同学高数成绩:\n");
scanf("%lf",&stu[i].score[1]);
printf("请输入该同学英语成绩:\n");
scanf("%lf",&stu[i].score[2]);
printf("请输入该同学计科成绩:\n");
scanf("%lf",&stu[i].score[3]);
printf("请输入该同学英语成绩:\n");
scanf("%lf",&stu[i].score[4]);
printf("ohhhhhh,修改成功\n");
}
}
if(flag==0)
{
printf("非常抱歉,查无此人!\n");
}
}
到了这里,关于使用c/c++语言写一个简单的学生信息管理系统(使用结构体数组,包含文件储存,文件读取等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!