📄 c pro5.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define M 35 //学生人数
#define N 10 //课程数目
char a[10]={'1','2','3','4','5'}; //密码
struct marks //学生成绩
{
int kecheng;
int score;
};
struct student //学生信息
{
int number;
char name[50];
char grade[20];
char sex;
char area[50];
char adress[100];
int sign1;
struct marks mark[N];
};
struct student stu0[M];
struct student stu1[M];
void menu(); //定义函数
void menu_weihu();
void menu_jiansuo();
void menu_tongji();
void build_infor();
void build_marks();
void add_infor();
void del_infor();
void laws();
void show();
void show2();
void search_name();
void search_grade();
void search_another();
void search_sex();
void search_area();
void search_kecheng();
void search_score();
void tongji_score();
void tongji_other();
void tongji_score_grade();
void tongji_score_kecheng();
void tongji_score_number();
void tongji_other_sex();
void tongji_other_area();
void tongji_other_kecheng();
main()
{
char b;
int i,j,m=0,n=0;
for(i=0;i<=M-1;i++)
{
stu0[i].sign1=0;
stu0[i].number=100;
for(j=0;j<=N-1;j++)
{
stu0[i].mark[j].kecheng=200;
stu0[i].mark[j].score=0;
}
}
stu1[M]=stu0[M];
while(n<=2) //输入密码,进入系统 //密码输入有问题
{
printf("\n\n\n\n\n\n");
printf("\t\t\t请输入五位密码\n\n");
printf(" ");
for(i=0;i<=4;i++)
{
b=getch();
putch('*');
if(b==a[i])
m++;
}
if(m==5)
break;
else
{
printf("\n\n\n 密码错误,请重新输入!!\n\n");
n++;
}
}
if(n<=2)
menu();
else
printf("\n\t\t密码三次输入错误,请退出程序!\n");
return 0;
}
void menu() //一级菜单
{
printf("\n\n\n\n\n\n\n\n 密码正确 \n\n 欢迎进入学校学生信息管理系统\n");
int a=0;
printf("\n\n\n\n");
printf("\n\t\t 1------- 信息维护\n");
printf("\n\t\t 2------- 信息检索\n");
printf("\n\t\t 3------- 信息统计\n");
printf("\n\t\t 4------- 退出\n");
printf("\n\t\t 请输入您的选择:");
scanf("%d",&a);
printf("\n\n\n");
switch(a)
{
case 1:
menu_weihu();
break;
case 2:
menu_jiansuo();
break;
case 3:
menu_tongji();
break;
case 4:printf(" 退出本系统\n\n\n");
break;
default:
printf("\n\n输入信息错误,返回上级菜单\n\n");
menu();
}
return ;
}
void menu_weihu() //二级菜单 信息维护
{
int a=0;
printf("\n\n\n\n");
printf("\n\n\n\t 信息维护\n\n");
printf("\n\t\t 1------- 建立学生基本信息表 \n");
printf("\n\t\t 2------- 建立学生成绩表 \n");
printf("\n\t\t 3------- 添加学生记录 \n");
printf("\n\t\t 4------- 删除学生记录 \n");
printf("\n\t\t 5------- 修改学生记录 \n");
printf("\n\t\t 6------- 返回上级菜单 \n");
printf("\n\t\t 请输入您的选择:");
scanf("%d",&a);
printf("\n\n");
switch(a)
{
case 1:
build_infor();
break;
case 2:
build_marks();
break;
case 3:
add_infor();
break;
case 4:
del_infor();
break;
case 5:
laws();
break;
case 6:
menu();
break;
default :
printf("输入信息错误,返回上级菜单\n\n");
menu_weihu();
}
return ;
}
void build_infor() //建立学生基本信息表
{
char a='q',c,d='q';
int b;
printf("\t 请输入学生的学号(1-30):");
scanf("%d",&b);
if(stu0[b].number!=100)
{
show();
}
else if(stu0[b].number==100||(d=='y'))
{
stu0[b].number=b;
printf("\t 请输入该学生的姓名:");
getchar();
gets(stu0[b].name);
printf("\t 请输入该学生的班级:");
gets(stu0[b].grade);
printf("\t 请输入该学生的性别(男m,女f):");
scanf("%c",&stu0[b].sex);
getchar();
printf("\t 请输入该学生的地区:");
gets(stu0[b].area);
printf("\t 请输入该学生的通信地址:");
gets(stu0[b].adress);
printf("\t 输入完毕!\n\n");
while((c!='y')&&(c!='n'))
{
printf("\t\t 是否继续输入(y/n)"); //是否继续输入会出现两次
scanf("%c",&c);
}
getchar();
if(c=='y')
{
printf("\n");
build_infor();
printf("\n");
}
else
{
printf("\n");
show();
while((a!='y')&&(a!='n'))
{
printf("\n是否返回上级菜单?(y/n)");
scanf("%c",&a);
}
if(a=='y')
menu_weihu();
}
}
else
menu_weihu();
return ;
}
void show() //显示学生基本信息表
{
FILE *fp;
int i,j=0;
for(i=1;i<=M-1;i++)
{
if(stu0[i].number!=100)
j++;
}
if(j!=0)
{
printf("\n\n");
printf("\n*******************************************************************\n");
printf("\n学号 姓名 性别 班级 地区 通信地址\n ");
for(i=1;i<=M-1;i++)
{
if(stu0[i].number!=100)
{
printf("\n%4d%12s%12c%12s%15s%12s\n",stu0[i].number,stu0[i].name,stu0[i].sex,stu0[i].grade,stu0[i].area,stu0[i].adress);
printf("\n*******************************************************************\n");
}
}
}
if((fp=fopen("stu_list","w"))==NULL)
{ printf("不可以打开文件\n");
return;
}
for (i=0;i<20;i++)
{
if(fwrite(&stu0[i],sizeof(struct student),1,fp)!=1)
fclose(fp);
}
return ;
}
void build_marks() //建立学生成绩表
{
int a,b=0;
char f='q',g='q';
printf("请输入学生学号(1-30):");
scanf("%d",&a);
printf("请输入课程编号(1-%d):",N-1);
scanf("%d",&b);
stu0[a].mark[b].kecheng=b;
printf("请输入这门课程的成绩:");
scanf("%d",&stu0[a].mark[b].score);
printf("\t\t 输入完毕!\n\n");
while((f!='y')&&(f!='n'))
{ scanf("%c",&f);
printf("\t\t 是否继续输入(y/n)");
scanf("%c",&f);
}
getchar();
if(f=='y')
{
printf("\n\n");
build_marks();
}
else
{
show2();
while((g!='y')&&(g!='n'))
{
printf("\n是否返回上级菜单?(y/n)");
scanf("%c",&g);
}
if(g=='y')
menu_weihu();
}
return ;
}
void show2() //显示学生成绩表
{
int i,j,g;
printf("\n************************************************\n");
printf(" \n 学号 姓名 课程编号 课程成绩\n ");
for(i=1;i<=M-1;i++)
{
for(g=1;g<=N-1;g++)
{
if(stu0[i].mark[g].kecheng!=200)
stu0[i].sign1=1;
}
}
for(i=1;i<=M-1;i++)
if(stu0[i].sign1==1)
{
printf("%d %s\n",stu0[i].number,stu0[i].name);
printf("\n**************************************************\n");
for(j=1;j<=N-1;j++)
printf("\t\t\t %d %d\n",stu0[i].mark[j].kecheng,stu0[i].mark[j].score);
}
return ;
}
void add_infor() //增加学生信息
{
build_infor();
return ;
}
void del_infor() //删除学生信息
{
int i,j,n,q=1;
char a='e';
show2();
printf("其中:\n");
for(i=1;i<=M-1;i++)
{
for(j=1;j<=N-1;j++)
{
if((stu0[i].mark[j].score<60)&&(stu0[i].mark[j].kecheng!=200))
n++;
}
if(n>=3)
q=i;
continue;
}
printf("*******************************************************\n");
printf(" 学号 姓名 课程编号 课程成绩\n ");
printf("%d %s\n",stu0[q].number,stu0[q].name);
printf("********************************************************\n");
for(j=1;j<=N-1;j++)
printf("\t\t\t %d %d\n",stu0[q].mark[j].kecheng,stu0[q].mark[j].score);
printf("\t\t 有三门或三门以上不及格\n");
while((a!='y')&&(a!='n'))
{ scanf("%c",&a);
printf("是否删除他们的信息?(y/n)");
scanf("%c",&a);
}
if(a=='y')
{
for(i=q;i<=M-1;i++)
stu0[i].mark[j].kecheng=stu0[i+1].mark[j].kecheng ;
show2();
menu_weihu();
}
else
menu_weihu();
return ;
}
void laws() //修改学生信息
{
int a,j,e,d,h,k,l,i;
char b='q',c='q',f='q',g='q',m='q',n='q';
printf("请输入需要修改信息的学生的学号(1-30):");
scanf("%d",&a);
if(stu0[a].number==100)
{
printf("\n对不起,您还未输入该学生的信息!!\n请返回上级菜单首先输入该学生的信息!\n");
while((b!='y')&&(b!='n'))
{
printf("是否返回上级菜单?(y/n)");
scanf("%c",&b);
}
if(b=='y')
menu_weihu();
}
else
{
printf("\n\n");
printf("**********************************************************************\n");
printf("学号 姓名 性别 班级 地区 通信地址 \n");
printf("%d %s %c %s %s %s",stu0[a].number,stu0[a].name,stu0[a].sex,stu0[a].grade,stu0[a].area,stu0[a].adress);
}
while((c!='y')&&(c!='n'))
{ scanf("%c",&c);
printf("\n是否要修改该学生的信息?(y/n)");
scanf("%c",&c);
}
if(c=='y')
{
printf("请输入需要修改的项目序号:\n");
printf("1-------- 姓名\n");
printf("2-------- 性别\n");
printf("3-------- 班级\n");
printf("4-------- 地区\n");
printf("5-------- 通信地址\n");
printf("6-------- 课程编号\n");
printf("7-------- 课程成绩\n");
scanf("%d",&e);
switch(e)
{
case 0:
printf("请输入新学号(1-30):");
scanf("%d",&d);
stu1[d].number=d;
if(stu0[d].number==100)
{
printf("此学号为别的学生的,该学生的信息为:\n");
printf("\n\n");
printf("*************************************************************************\n");
printf("学号 姓名 性别 班级 地区 通信地址 课程编号 课程成绩\n");
printf("%d \t%s %c %s %s %s",stu0[d].number,stu0[d].name,stu0[d].sex,stu0[d].grade,stu0[d].area,stu0[d].adress);
printf("***************");
for(j=1;j<=N-1;j++)
{
if(stu0[a].mark[j].kecheng!=200)
printf("\t\t\t\t %d %d\n",stu0[d].mark[j].kecheng,stu0[d].mark[j].score);
}
if(f=='y')
stu0[d].number=stu1[d].number;
else
{
while((g!='y')&&(g!='n'))
{
printf("是否返回上级菜单?(y/n)\n");
scanf("%c",&g);
}
if(g=='y')
menu_weihu();
}
}
else
stu0[d].number=stu1[d].number;
show();
case 1:
printf("请输入该学生的姓名:");
getchar();
gets(stu0[a].name);
show();
case 2:
printf("请输入该学生的性别:");
scanf("%c",&stu0[a].sex);
show();
case 3:
printf("请输入该学生的班级:");
getchar();
gets(stu0[a].grade);
show();
case 4:
printf("请输入该学生的所在地区:");
gets(stu0[a].area);
show();
case 5:
printf("请输入该学生的通信地址:");
getchar();
gets(stu0[a].adress);
show();
case 6:
printf("请输入需要修改的课程编号:");
scanf("%d",&h);
printf("请输入修改后的课程编号(1-%d):",N-1);
scanf("%d",&k);
for(i=1;i<=N-1;i++)
if(stu0[a].mark[i].kecheng==k)
{
if(b=='y')
{
stu0[a].mark[k].kecheng=k;
stu0[a].mark[h].kecheng=200;
}
}
else
{
stu0[a].mark[k].kecheng=k;
stu0[a].mark[h].kecheng=200;
}
show2();
case 7:
while(m!='n')
{ scanf("%d",&l);
printf("请输入需要修改成绩的课程的课程编号(1-%d):",N-1);
if(stu0[a].mark[l].kecheng==200)
{
printf("该学生无此项课程!!\n");
while((n!='y')&&(n!='n'))
{
printf("是否返回上级菜单?(y/n)");
scanf("%c",&n);
}
if(n=='y')
menu_weihu();
}
else
{ scanf("%d",&stu0[a].mark[l].score);
printf("请输入成绩:\n");
scanf("%d",&stu0[a].mark[l].score);
}
while((m!='y')&&(m!='n'))
{ scanf("%c",&m);
printf("是否继续修改成绩?(y/n)");
scanf("%c",&m);
}
}
show2();
default:
printf("输入错误,请重新输入!!");
laws();
}
}
else
menu_weihu();
return ;
}
void menu_jiansuo() //查找
{
int a;
printf("\n\t 信息检索\n");
printf("\n\t 1------- 按姓名查找\n");
printf("\n\t 2------- 按班级查找\n");
printf("\n\t 3------- 按其他信息查找\n");
printf("\n\t 4------- 返回上级菜单\n");
printf("\n\t 请输入您的选择\n");
scanf("%d",&a);
switch(a)
{
case 1:
search_name();
break;
case 2:
search_grade();
break;
case 3:
search_another();
break;
case 4:
menu();
break;
default:
printf("输入错误,请重新输入\n");
menu_jiansuo();
}
}
void search_name() // 按姓名查找
{
char a[20],b='q';
int i,j,n=0,m=0;
printf("请输入学生姓名:");
getchar();
gets(a);
for(i=1;i<=M-1;i++)
{
if(strcmp(stu0[i].name,a)==0)
{
printf("\t以下为查询学生的资料:\n");
printf("\t学号:%d 姓名:%s 班级:%s 性别:%c 地区:%s 通信地址:%s\n",stu0[i].number,stu0[i].name,stu0[i].grade,stu0[i].sex,stu0[i].area,stu0[i].adress);
m=1;
for(j=1;j<=N-1;j++)
{
if(stu0[i].mark[j].kecheng!=200)
n++;
}
if(n!=0)
{
printf("\t该学生的课程编号及成绩为:\n");
for(j=1;j<=N-1;j++)
{
if(stu0[i].mark[j].kecheng!=200)
printf("\t课程编号为%d,成绩为%d\n",stu0[i].mark[j].kecheng,stu0[i].mark[j].score);
}
}
else
printf("该学生还未输入课程编号及成绩!\n");
}
}
while((b!='y')&&(b!='n'))
{
printf("\n是否继续查询?(y/n)");
scanf("%c",&b);
}
if(b=='y')
search_name();
else
menu_jiansuo();
return ;
}
void search_grade() //按班级查找
{
char a[20],b='q';
int i,j,n=0,m=0;
printf("请输入班级名称:");
getchar();
gets(a);
for(i=1;i<=M-1;i++)
{
if(strcmp(stu0[i].grade,a)==0)
m=1;
}
if(m!=0)
{
printf("\t%s以下为查询班级的资料:",a);
for(i=1;i<=M-1;i++)
{
if(strcmp(stu0[i].grade,a)==0)
{
printf("\t学号:%d 姓名:%s 班级:%s 性别:%c 地区:%s 通信地址:%s\n",stu0[i].number,stu0[i].name,stu0[i].grade,stu0[i].sex,stu0[i].area,stu0[i].adress);
for(j=1;j<=N-1;j++)
{
if(stu0[i].mark[j].kecheng!=200)
n++;
}
if(n!=0)
{
printf("\t该学生的课程编号及成绩为:\n");
for(j=1;j<=N-1;j++)
{
if(stu0[i].mark[j].kecheng!=200)
printf("\t课程编号为%d,成绩为%d\n",stu0[i].mark[j].kecheng,stu0[i].mark[j].score);
}
}
else
printf("该学生还未输入课程编号及成绩!\n");
}
}
}
else
printf("查无此班!\n");
while((b!='y')&&(b!='n'))
{
printf("\n是否继续查询?(y/n)");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -