学生成绩管理系统

初次使用

#include
#include
#include
#include
#include
#include
#define LEN sizeof(struct student)//student结构体所占字节数
#define DATA stu[i].num,stu[i].name,stu[i].c,stu[i].m,stu[i].e,stu[i].sum//设置显示内容
#define FORMAT "%d %s %.2lf %.2lf %.2lf %.2f\n"//设置显示格式
#define N 39//符号常量,班级人数
float Fc,Fm,Fe;//定义全局变量c语言成绩,高数成绩,英语成绩
struct student//结构体名student,结构体内容如下
{
     
	int num;//学号
	char name[39];//姓名
	double c;//c语言课程成绩
	double m;//高数课程成绩
	double e;//英语课程成绩
	double sum;//总分
}stu[N];//定义结构体数组
char mi[6]="123567";//此变量用于存储登录密码,后期可根据具体情况进行完善,密码可以设置为学号[括号数字应随之改变]
void in();//录入学生成绩信息
void color();//设置界面颜色
void show();//显示学生成绩
void order();//按总分排序
void del();//删除学生信息
void modify();//修改学生信息
void menu();//主菜单
void total();//计算总人数
void search();//查找学生信息
void main()
{
     
	int m;//根据该变量选择主菜单的命令
	char s[10];//获取输入的密码,用于验证和登录密码是否相同,[括号里的数字随密码位数变化]
	int flag=0;//通过该变量判断是否达到指定的次数
	int n=3;//限定输入错误的次数是3次
	printf("Hello world!");
	Sleep(1000);
	system("cls");
	do
	{
     
		printf("请您输入界面登录密码:\n");
		scanf("%s",s);
		if(!strcmp(s,mi))//若密码正确
		{
     
			printf("恭喜你成功登陆了!");
			flag=1;
			break;//密码正确登陆成功,退出循环
		}
		else
		{
     
			printf("输入错误请重新输入:\n");
			n--;
		}
	}while(n>0);

	if(!flag)//判断flag标志是否超过指定的猜测次数
	{
     
		printf("请与开发人***联系!\n");//请与谁谁谁联系,写自己名字
		getch();
		exit(0);
	}
	color();
	menu();
	scanf("%d",&m);//输入选择功能的编号
	while(m)
	{
     
		switch(m)
		{
     
		case 1:in();break;//输入学生信息
		case 2:search();break;//查找学生信息
		case 3:del();break;//删除学生信息
		case 4:modify();break;//修改学生信息
		case 5:order();break;//排序
		case 6:total();break;//总数
		default:break;//退出
		}
 	    menu();//执行完成功能再次显示菜单界面
		scanf("%d",&m);
	}
}
void menu()//自定义函数实现菜单功能
{
     
	system("cls");//清屏函数
	system("title csj");
	printf("\n\n\n\n\n");
	printf("\t\t************学生成绩管理系统*************\n");//与case顺序保持一致
	printf("\t\t*\t1.录入学生成绩信息              *\n");
	printf("\t\t*\t2.查询学生成绩信息              *\n");
	printf("\t\t*\t3.删除学生成绩信息              *\n");
	printf("\t\t*\t4.修改学生成绩信息              *\n");
	printf("\t\t*\t5.学生成绩排序                  *\n");
	printf("\t\t*\t6.统计信息数量                  *\n");
	printf("\t\t*\t0.退出                          *\n");
	printf("\t\t*****************************************\n\n");
	printf("\t\t\t请选择(0-6):");
}
void color()//自定义函数实现颜色变化
{
     
	system("color f6");//f为背景色,6为字体颜色

}
void in()//自定义函数实现录入学生成绩信息
{
     
	int i,m=0;//m是记录的条数
	char ch[2];
	FILE *fp;//定义文件指针
	if((fp=fopen("data","a+"))==NULL)//打开指定文件
	{
     
		printf("系统出错,请与开发人***联系!\n");//请与本人联系
		return;
	}
	while(!feof(fp))
	{
     
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
	}
	fclose(fp);//关闭指定文件
	if(m==0)
		printf("无学生成绩记录!\n");
	else
	{
     
		system("cls");
		show();//调用show函数,显示原有信息
	}
	if((fp=fopen("data","a+"))==NULL)
	{
     
		printf("系统出错,请与开发人***联系!\n");
		return;
	}
	printf("是否录入学生信息,请按(y/n):");
	scanf("%s",ch);
	while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要录入新信息
	{
     
		printf("请输入学生学号:\n");
		scanf("%d",&stu[m].num);//输入学生学号
		for(i=0;i<m;i++)
			if(stu[i].num==stu[m].num)
			{
     
				printf("您输入的学号已经存在!\n");
				getch();
				fclose(fp);//文件关闭
				return;
			}
			printf("请输入学生姓名:\n");
			scanf("%s",stu[m].name);//输入学生姓名,字节数和结构体内对应
			printf("c语言: ");
			scanf("%lf",&stu[m].c);//输入c语言成绩
			printf("高数: ");
			scanf("%lf",&stu[m].m);//输入高数成绩
			printf("英语: ");
			scanf("%lf",&stu[m].e);//输入英语成绩
			stu[m].sum=stu[m].c+stu[m].m+stu[m].e;//计算出总成绩
			if(fwrite(&stu[m],LEN,1,fp)!=1)//将新录入的信息写入指定的磁盘文件
			{
     
				printf("系统出错,请与开发人***联系!");
			}
			else
			{
     
				printf("%s信息录入成功!\n",stu[m].name);
				m++;
			}
			printf("是否继续录入?(y/n):");//询问是否继续录入
			scanf("%s",ch);
	}
	fclose(fp);
}
void show()//自定义函数实现显示显示成绩信息
{
     
	FILE *fp;
	int i,m=0;
	fp=fopen("data","r");//只读
	while(!feof(fp))
	{
     
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
	}
	fclose(fp);//关闭文件
	printf("学号  姓名  c语言  高数  英语  总分\t\n");
	for(i=0;i<m;i++)
	{
     
		printf(FORMAT,DATA);//将信息按指定格式打印
	}
}
void del()//删除学生成绩信息
{
     
	FILE *fp;//文件指针
	int snum,i,j,m=0;
	char ch[2];
	if((fp=fopen("data","a+"))==NULL)//文件内容空
	{
     
		printf("系统出错,请与开发人***组长联系!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
		fclose(fp);//关闭文件
		if(m==0)
		{
     
			printf("无记录!\n");
			return;
		}
		printf("请输入您要删除的学号:");
		scanf("%d",&snum);
		for(i=0;i<m;i++)
			if(snum==stu[i].num)
				break;
			if(i==m)
			{
     
				printf("对不起,没有您要删除的学生信息!");
				getchar();
				return;
			}
			printf("确定删除?(y/n)");//在屏幕中显示
			scanf("%s",ch);
			if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)//判断是否要进行删除
			{
     
				for(j=i;j<m;j++)
					stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置
				    m--;//记录的总个数减1
					printf("删除成功!\n");
					getch();
			}
			if((fp=fopen("data","w"))==NULL)
			{
     
				printf("系统出错,请与开发人***组长联系!\n");
				return;
			}
			for(j=0;j<m;j++)//将更改后的记录重新写入指定的磁盘文件中
				if(fwrite(&stu[j],LEN,1,fp)!=1)
				{
     
					printf("更新失败,请与开发人***组长联系!\n");
				}
				fclose(fp);
}
void modify()
{
     
    FILE *fp;//文件指针
	int snum,i,j,m=0;
    if((fp=fopen("data","a+"))==NULL)//文件内容空
	{
     
		printf("系统出错,请与开发人***组长联系!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
		fclose(fp);//关闭文件
		if(m==0)
		{
     
			printf("无记录!\n");//屏幕显示“无记录”
			fclose(fp);
			return;
		}
		printf("请输入您要修改的学号:");
		scanf("%d",&snum);
		for(i=0;i<m;i++)
			if(snum==stu[i].num)
				break;
			if(i<m)
			{
     
				printf("姓名:\n");
				scanf("%s",stu[m].name);
                printf("\nC语言:");
                scanf("%lf",&stu[i].c);
                printf("\n高数:");
                scanf("%lf",&stu[i].m);
                printf("\n英语:");
                scanf("%lf",&stu[i].e);
                stu[i].sum=stu[i].c+stu[i].m+stu[i].e;
			}
			else
			{
     
				printf("没有您要修改的学生信息!");
				getchar();
				return;
			}
           if((fp=fopen("data","w"))==NULL)
			{
     
				printf("系统出错,请与开发人***组长联系!\n");
				return;
			}
			for(j=0;j<m;j++)//将新修改的记录重新写入指定的磁盘文件中
				if(fwrite(&stu[j],LEN,1,fp)!=1)
				{
     
					printf("更新失败,请与开发人***组长联系!\n");
					getchar();
				}
				fclose(fp);
}


void search()
{
     
    FILE *fp;//文件指针
	int snum,i,m=0;
	char ch[2];
    if((fp=fopen("data","r"))==NULL)//文件内容空
	{
     
		printf("系统出错,请与开发人***组长联系!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
		fclose(fp);//关闭文件
		if(m==0)
		{
     
			printf("无记录!\n");//屏幕显示“无记录”
			return;
		}
		printf("请输入您要查找的学号:");
		scanf("%d",&snum);
		for(i=0;i<m;i++)
			if(snum==stu[i].num)
			{
     
				printf("查找成功,是否显示?(y/n)");
				scanf("%s",ch);
            if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)
			{
     
            printf("学号  姓名  c语言  高数  英语  总分\t\n");
            printf(FORMAT,DATA);
            break;
			}
			else
				return;
			}
			if(i==m)
			printf("未找到您要查找的信息\n");
			getch();
}
void order()
{
     
    FILE *fp;//文件指针
	struct student t;
	int snum,i=0,j=0,m=0;
    if((fp=fopen("data","a+"))==NULL)//文件内容空
	{
     
		printf("系统出错,请与开发人***组长联系!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
		fclose(fp);//关闭文件
		if(m==0)
		{
     
			printf("无记录!\n");//屏幕显示“无记录”
			return;
		}
		for(i=0;i<m-1;i++)
			for(j=i+1;j<m;j++)
				if(stu[i].sum<stu[j].sum)
				{
     
					t=stu[i];
					stu[i]=stu[j];
					stu[j]=t;
				}
            if((fp=fopen("data","w"))==NULL)
			{
     
				printf("系统出错,请与开发人***组长联系!\n");
				getch();
				return;
			}
			for(i=0;i<m;i++)
				if(fwrite(&stu[i],LEN,1,fp)!=1)
				{
     
					printf("更新失败,请与开发人***组长联系!\n");
				}
				fclose(fp);
				show();
				getch();
}
void total()
{
     
    FILE *fp;//文件指针
	int m=0;
    if((fp=fopen("data","r"))==NULL)//文件内容空
	{
     
		printf("系统出错,请与开发人***组长联系!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN,1,fp)==1)
			m++;
        if(m==0)
		{
     
			printf("无记录!\n");//屏幕显示“无记录”
			fclose(fp);
			return;
		}
		printf("本系统有%d条记录!\n",m);
		getch();
		fclose(fp);
}
















你可能感兴趣的:(he,数据库)