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

📄 c pro.cpp

📁 一个学生信息管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define	M 30                         //学生人数
#define N 20                          //课程数目
char a[10]={'1','2','3','4','5','6'}; //密码
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<=5;i++)
		{
			b=getch();
		    putch('*');
			if(b==a[i])
				m++;
		}
		if(m==6)
			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");
	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\n\n\n\n\n");
	scanf("%d",&a);
	switch(a)
	{
	case 1:
		menu_weihu();
		break;
	case 2:
		menu_jiansuo();
		break;
	case 3:
		menu_tongji();
		break;
	case 4:
		break;
	default:
		printf("\n\n输入信息错误,返回上级菜单\n\n");
		menu();
	}
	return ;
}


void menu_weihu()                 //二级菜单 信息维护
{
	int a=0;

	printf("\n\n\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\n\n\n\n\n");

	
 
	scanf("%d",&a);
	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\t 请输入学生的学号(1~25):\n");
	scanf("%d",&b);
	if(stu0[b].number!=100)
	{
		printf("\t\t 已输入该学生信息\n\n");
		show();
		while((d!='y')&&(d!='n'))
		{
			printf("\t\t 是否覆盖?(y/n)\n\n");
			scanf("%c",&d);
			getchar();
		}
	}
	else if(stu0[b].number==100||(d=='y'))
	{
		stu0[b].number=b;
		printf("\t\t 请输入该学生的姓名:\n");
		getchar();
		gets(stu0[b].name);
		printf("\t\t 请输入该学生的班级:\n");
		gets(stu0[b].grade);
		printf("\t\t 请输入该学生的性别(男m,女f):\n");
		scanf("%c",&stu0[b].sex);
        getchar();
		printf("\t\t 请输入该学生的地区:\n");
		gets(stu0[b].area);
		printf("\t\t 请输入该学生的通信地址:\n");
		gets(stu0[b].adress);
		printf("\t\t 输入完毕!\n\n");
		while((c!='y')&&(c!='n'))
		{
			printf("\t\t 是否继续输入(y/n)\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)\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 %d     %s   %c  %s      %s        %s\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)
		 printf("\n  error");
	 fclose(fp);
	}


	return ;
}


void build_marks()         //建立学生成绩表
{
	int a,b=0;
	char f='q',g='q';
	printf("请输入学生学号(1~25):\n");
	scanf("%d",&a);
	printf("请输入课程编号(1~%d):\n",N-1);
	scanf("%d",&b);
	stu0[a].mark[b].kecheng=b;
	printf("请输入这门课程的成绩:\n");
	scanf("%d",&stu0[a].mark[b].score);
	printf("\t\t 输入完毕!\n\n");
	while((f!='y')&&(f!='n'))
	{
		printf("\t\t 是否继续输入(y/n)\n");
		scanf("%c",&f);
	}
	getchar();
	if(f=='y')
	{
		printf("\n\n");
		build_marks();
	}
	else
	{
		show2();
		while((g!='y')&&(g!='n'))
		{
			printf("\n是否返回上级菜单?(y/n)\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;
	}
	printf("-----------------------------------------------------\n");
	
	printf("   学号      姓名       课程编号        课程成绩 ");
		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'))
	{
		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~25):\n");
	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);
		for(j=1;j<=N-1;j++)
		{
			if(stu0[a].mark[j].kecheng!=200)
			printf("\t\t\t\t   %d   %d",stu0[a].mark[j].kecheng,stu0[a].mark[j].score);
		}
	}
	while((c!='y')&&(c!='n'))
	{
		printf("是否要修改该学生的信息?(y/n)\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");
		printf("8 课程成绩\n");
		scanf("%d",&e);
		switch(e)
		{
		case 1:
			printf("请输入新学号(1~25):\n");
			scanf("%d",&d);
			stu1[d].number=d;
			if(stu0[d].number==100)
			{
				printf("此学号为别的学生的,该学生的信息为:\n");
				printf("\n\n");
				printf("-----------------------------------------------------------------------\n");
				printf("学号    姓名    性别    班级     地区     通信地址   课程编号  课程成绩\n");
				printf("%d  %s %c  %s   %s     %s",stu0[d].number,stu0[d].name,stu0[d].sex,stu0[d].grade,stu0[d].area,stu0[d].adress);
				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);
				}
				while((f!='y')&&(f!='n'))
				{
					printf("是否覆盖?(y/n)\n");
					scanf("%c",&f);
				}
				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 2:
			printf("请输入该学生的姓名:\n");
			getchar();
			gets(stu0[a].name);
			show();
			 
		case 3:
			printf("请输入该学生的性别:\n");
			scanf("%c",&stu0[a].sex);
			show();
			 
		case 4:
			printf("请输入该学生的班级:\n");
			getchar();
			gets(stu0[a].grade);
			show();
			 
		case 5:
			printf("请输入该学生的所在地区:\n");
			gets(stu0[a].area);
			show();
		 
		case 6:
			printf("请输入该学生的通信地址:\n");
			getchar();
			gets(stu0[a].adress);
			show();
			 
		case 7:
			printf("请输入需要修改的课程编号:\n");
			scanf("%d",&h);
			printf("请输入修改后的课程编号(1~%d):\n",N-1);
			 
			scanf("%d",&k);
			for(i=1;i<=N-1;i++)
				if(stu0[a].mark[i].kecheng==k)
				{
					while((b!='y')&&(b!='n'))
					{
						printf("这个课程编号已存在,是否继续修改?(y/n)\n");
						scanf("%c",&b);
					}
					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;
				}
				show();
				 
		case 8:
			while(m!='n')
			{
				printf("请输入需要修改成绩的课程的课程编号(1~%d):\n",N-1);
				scanf("%d",&l);
				if(stu0[a].mark[l].kecheng==200)
				{
					printf("该学生无此项课程!!\n");
					while((n!='y')&&(n!='n'))
					{
						printf("是否返回上级菜单?\n");
						scanf("%c",&n);
					}
					if(n=='y')
						menu_weihu();
				}
				else
				{
					printf("请输入成绩:\n");
					scanf("%d",&stu0[a].mark[l].score);
				}
				while((m!='y')&&(m!='n'))
				{
					printf("是否继续修改成绩?(y/n)\n");
					scanf("%c",&m);
				}
			}
			show();
		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("请输入学生姓名:\n");
	getchar();
	gets(a);
	for(i=1;i<=M-1;i++)
	{
		if(strcmp(stu0[i].name,a)==0)
		{
			printf("该学生已经找到,其信息为:\n");
			printf("学号:%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("该学生的课程编号及成绩为:\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");
		}
		if(m==0)
			printf("查无此人!\n");
	}
	while((b!='y')&&(b!='n'))
	{
		printf("是否继续查询?(y/n)\n");
		scanf("%c",&b);
	}
	if(b=='y')
		search_name();
	else
		menu_jiansuo();
	return ;
}



void search_grade()         //按班级查找
{
	char a[16],b='q';
	int i,j,n=0,m=0;
	printf("请输入班级名称:\n");
	getchar();
	gets(a);
	for(i=1;i<=M-1;i++)
	{
		if(strcmp(stu0[i].grade,a)==0)
			m=1;
	}
	if(m!=0)
	{
		printf("%s班级的成员有:\n",a);
		for(i=1;i<=M-1;i++)
		{
			if(strcmp(stu0[i].grade,a)==0)
			{
				printf("学号:%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("该学生的课程编号及成绩为:\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");
			scanf("%c",&b);
			
		}
		if(b=='y')
			search_grade();
		else if (b=='n')
			menu_jiansuo();
		return ;
}

void search_another()        //按其他信息查找
{
	int a;
	printf("\t\t 请输入您的选择:\n");
	printf("\t\t  1 按性别查找;\n");
	printf("\t\t  2 按地区查找;\n");
	printf("\t\t  3 按课程编号查找;\n");
	printf("\t\t  4 按成绩查找;\n");
	printf("\t\t  5 返回上级菜单;\n");
	scanf("%d",&a);
	switch(a)
	{
	case 1:
		search_sex();
		break;
	case 2:
		search_area();
		break;
	case 3:
		search_kecheng();
		break;
	case 4:
		search_score();
		break;
	case 5:
		menu_jiansuo();
		break;
	default :

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -