⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c pro5.cpp

📁 一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -