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

📄 学生成绩管理.cpp

📁 学生成绩管理 学生成绩管理软件 实现学生分班输入成绩
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// 学生成绩管理.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>              //头文件

#define N 60
#define M 8                     //预处理定义
        
static char name[12];
static int count;                //静态变量声明

int i,j;
FILE *fp;                        //全局变量声明

////////////////////////////////////////////////////////////////////
//
struct student   //学生资料
{   
	char num[11];    //学生学号
	char name[11];   //学生姓名
	char sex[3];     //学生性别
	float score[M];  //学生各科分数
	float total;     //总分
	float average;   //平均分
}stu[N],temp;        //存放学生资料的结构变量,临时结构变量

///////////////////////////////////////////////////////////////////
//
void exit1()                           //退出函数
{   
	printf("                                 ============================         \n\n");
	printf("                                        谢谢使用,再见!                \n\n");
	printf("                                 ============================         \n\n");
	exit(0);
}//

///////////////////////////////////////////////////////////////////
//
void go_on()              //是否继续函数
{   
	char j[1]; 
	
	void menu();
	void operate();
    void goback();

	printf("\n\t\t是否继续操作该系统?(y/n)");
	while(1)
	{   
		scanf("%s",j);
	    if(strlen(j)>1)                 //判断输入是否合法
		{
			printf("\n\t输入不合法,请重新输入!(y/n)");
			continue;
		}
		if(j[0]=='y')                  //清屏后显示返回菜单
		{
			system("cls");
			goback();
		}
		else if(j[0]=='n')             //调用退出函数
			exit1();
		else 
			printf("\n\t输入不合法,请重新输入!(y/n)");
	}
}//

////////////////////////////////////////////////////////////////////
//
void goback()                     //返回菜单函数
{   
	char m[1];

	void menu();
	void operate();

	printf("                     ***************************************************   \n\n");
	printf("                                         1.返回到主界面                    \n\n");
	printf("                                         2.返回到操作界面                  \n\n");
	printf("                                         0.退出                            \n\n");
    printf("                     ***************************************************   \n\n");
	printf("\n\t请在上面选择你所需要的操作:");
	while(1)
	{   
		scanf("%s",m);
		if(strlen(m)>1)               //判断输入是否合法      
		{
			printf("\n\t输入不合法,请重新输入!(0-2)");
			continue;
		}
		switch(m[0])                   //进行菜单选择
		{  
		case '1' :system("cls");menu();break;      //清屏后调用主菜单函数
		case '2' :system("cls");operate();break;   //清屏后调用操作菜单函数
		case '0' :exit1();break;                   //调用退出函数
		default:printf("输入不合法,请重新输入!(0-2)");
		}
	}
}//

//////////////////////////////////////////////////////////////////////
//
void save()         //资料输入后的存储
{   
	char m[1];

    void show2();

	fp=fopen(name,"wb");                   //打开可写文件
	for(i=0;i<count;i++)
		fwrite(&stu[i],sizeof(struct student),1,fp);       //将记录逐个写进文件
	fclose(fp);
	printf("                    ***************************************************   \n\n");
	printf("                                   已成功将资料存储到磁盘!                \n\n");
	printf("                    ***************************************************   \n\n");
	printf("若想查看是否已存储请按1,若想退出请按0.\t");
	while(1)
	{   
		scanf("%s",m);
	    if(strlen(m)>1)                 //判断输入是否合法     
		{
			printf("\n\t输入不合法,请按照提示重新输入:");
			continue;
		}
	    if(m[0]=='1')                   //查看存储的记录
		{
			show2();
			go_on();
		}
		else if(m[0]=='0')             //调用退出函数
			exit1();
	}
}//

////////////////////////////////////////////////////////////////////
//
void save2()                      //进入操作菜单的资料存储
{
	char w[1],p[1];

	void getin();

	printf("\n\t\t是否已完成资料输入?(y/n)");
	while(1)
	{
		scanf("%s",w);
		if(strlen(w)>1)                //判断输入是否合法    
		{
			printf("\n\t输入不合法,请按照提示重新输入:");
			continue;
		}
		if(w[0]=='y')                   //准备调用资料输入函数
		{   
			printf("\n\t\t你还没输入资料,是否现在就录入资料?(y/n)");
			while(1)
			{   
				scanf("%s",p);
				if(strlen(p)>1)         //判断输入是否合法    
				{
					printf("\n\t输入不合法,请按照提示重新输入:");
					continue;
				}
				if(p[0]=='y')
					getin();                 //调用输入函数
				else if(p[0]=='n')
					exit1();                //调用退出函数
				else                        //判断输入是否合法             
				{
					printf("\n\t输入不合法,请按照提示重新输入:");
					continue;
				}
			}
		}
		else if(w[0]=='n')              //准备调用资料输入函数
		{   
			printf("\n\t\t是否现在就录入资料?(y/n)");
			while(1)
			{   
				scanf("%s",p);
				if(strlen(p)>1)              //判断输入是否合法
				{
					printf("\n\t输入不合法,请按照提示重新输入:");
					continue;
				}
				if(p[0]=='y')
					getin();                 //调用输入函数
				else if(p[0]=='n')
					go_on();                  //调用是否继续函数
				else                          //判断输入是否合法
				{
					printf("\n\t输入不合法,请按照提示重新输入:");
					continue;
				}
			}
		}
	}
}//

//////////////////////////////////////////////////////////////////////
//
void getin()       //资料输入
{   
	int k,q=1,t=0;
	char m[1],l[1],g[1];
	
	void save();

	system("cls");                    //先清屏
	while(1)                          //开始进行资料录入
	{    
		printf("请输入要录入的班级(如:04计算机1班):");
	     scanf("%s",name);
		 if(strlen(name)!=11)           //判断文件名是否合法
		 {
			 printf("输入长度不符,请重新输入!\n");
			 continue;
		 }
		 if((fp=fopen(name,"rb"))!=NULL)      //检查输入的文件名是否存在
		 {   
			 printf("已经存在该班级的资料,请重新输入!\n");
		     continue;
		 }
		 else 
			 break;
	}
	printf("\n\n\t\t\t\t你正在输入%s的成绩!\n\n",name);           //科目显示
	printf("本学期所修科目如下:\n\n");
    printf("      \t\t1大学英语(2) 2高等数学(下) 3线性代数 4毛泽东思想概论\n\n");
	printf("      \t\t5大学物理-a  6大学体育(2)  7法律基础 8电路与电子技术\n\n");
	printf("\n\t\t请按下面提示输入学生的资料:\n");
	for(i=0;i<N;i++)                         //学生记录逐个录入
	{
		while(1)
		{   
			printf("学生%d\t学号(10位)",q++);
			scanf("%s",stu[i].num);               //输入学号
			k=0;
			if(strlen(stu[i].num)!=10)               //学号长度判断
			{   printf("输入长度不符,请重新输入!\n");
			    q--;
				continue;
			}
			t=i+1;
			while(t-->0)                             //学号是否重复
				if(strcmp(stu[i].num,stu[t-1].num)==0)
				{   printf("学号重复,请重新输入!\n");
					k=1;
					q--;
					break;
				}
			if(k==1)continue;                       //是否成功输入后判断
			if(k==0)break;
		}
		printf("   \t姓名(中文):");                //输入名字
		scanf("%s",stu[i].name);
		while(1)
		{  
			printf("   \t性别(1.男 2.女):");             //性别输入
			scanf("%s",l);
			if(strlen(l)>1)
			{
				printf("输入不合法,请重新输入!\n");         //判断输入是否正确
				continue;
			}
			if(l[0]!='1'&&l[0]!='2')                        //不合法输入判断
			{
				printf("输入不合法,请重新输入!\n");
				continue;
			}
			else if(l[0]=='1')                       //输入正确后转换存储
			{
				strcpy(stu[i].sex,"男");
				break;
			}
			else if(l[0]=='2')
			{
				strcpy(stu[i].sex,"女");
				break;
			}
		}
		stu[i].total=0;                //总分赋初值0
		for(j=0;j<M;j++)                //循环输入分数
		{   
			while(1)                        //输入分数后判断是否合法
			{	
				printf("   \t分数%d(0-100):",j+1);
				scanf("%f",&stu[i].score[j]);
				gets(g);
				if(strlen(g)>=1)             
				{
					printf("输入不合法,请重新输入!\n");
					continue;
				}
				else if(stu[i].score[j]>100||stu[i].score[j]<0)
					printf("输入不合法,请重新输入!\n");
				else 
					break;
			}
			stu[i].total+=stu[i].score[j];         //累加各科分数
		}
		stu[i].average=float(stu[i].total/M);         //计算平均分
		count++;
		printf("你已输入%d个同学的成绩,并且系统已帮你计算好总分和平均分!\n",count);
		printf("是否继续录入?(y/n)");               //显示是否继续输入
		while(1)
		{
			scanf("%s",m);              //判断输入是否合法
			if(strlen(m)>1)
			{
				printf("输入不合法,请重新输入:");
				continue;
			}
			if(m[0]=='y')               //跳出循环继续录入
				break;
			else if(m[0]=='n')
			{   
				printf("你已输入%d个同学的成绩,是否想存储资料?(y/n)",count);
				while(1)
				{
					scanf("%s",m);                     //判断输入是否合法              
					if(strlen(m)>1)
					{
						printf("输入不合法,请重新输入:");
						continue;
					}
					if(m[0]=='y')save();          //将录入的资料存储
					else if(m[0]=='n')exit1();     //退出系统
				}
			}
		}
	}
}//

/////////////////////////////////////////////////////////////////////
//
void show()                      //资料显示
{   
	char c[1];
	void go_on();

	printf("\n\t请输入要查看的班级(如:04计算机1班):");    
	scanf("%s",name);                           //输入要查看的文件名
	if((fp=fopen(name,"rb"))==NULL)                 //判断是否存在输入文件的资料
	{   
		printf("\n\t\t对不起,不存在任何资料!\n");
		printf("\n\t\t是否要录入资料(y/n)?");
		while(1)
		{   
			scanf("%s",c);             //判断输入是否合法
			if(strlen(c)>1)
			{
				printf("\n\t输入不合法,请重新输入(y/n):");
				continue;
			}
			if(c[0]=='y')               //输入要求录入资料
				getin();
			else if(c[0]=='n')         //退出系统
				exit1();
			else printf("\n\t输入不合法,请重新输入:(y/n)");   //输入不合法,重新输入
		}
	}
	else 
	{   
		system("cls");                          //清屏后显示资料
		printf("你现在所查看的是:\n\n");
		printf("\t\t  %s\n\n",name);
	    printf("   学号     姓名  性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
		for(i=0;i<N;i++)
		{   
			if(fread(&stu[i],sizeof(struct student),1,fp)==1)
			{   
				printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
				for(j=0;j<M;j++)
					printf("   %3.1f",stu[i].score[j]);
				printf("  %3.1f",stu[i].total);
				printf("   %3.1f",stu[i].average);
				printf("    %d\n",i+1);
			}
			else 
				break;
		}
	}
	fclose(fp);                  //关闭文件指针
	printf("\n");
	go_on();                     //显示是否继续函数
}//

/////////////////////////////////////////////////////////////////////////////
//
void copy()                  //资料备份
{   
	FILE *in,*out;                  //定义文件指针
	
	char infile[10],outfile[10];         //定义文件名字符串变量

	while(1)
	{    
		printf("\n\t请输入原存储在磁盘的班级名:");     //输入原来文件名
		scanf("%s",infile);
		if((in=fopen(infile,"rb"))==NULL)              //判断是否存在该文件名
		{   
			printf("\n\t不存在你所输入的原有磁盘文件名!\n");        //不存在,重新输入    
			continue;
		}
		else 
			break;
	}
	while(1)
	{    
		printf("\n\t请输入新复制到磁盘的文件名:");              //输入新的要复制到的文件名
	    scanf("%s",outfile);
		if((out=fopen(outfile,"rb"))!=NULL)
		{   
			printf("\n\t该文件名已经存在,请重新输入!\n");            //判断存在,重新输入其它的
			continue;
		}
		else 
			break;
	}
	if((out=fopen(outfile,"wb"))==NULL)
		printf("不能打开此文件!");
	while(!feof(in))fputc(fgetc(in),out);           //将原来的资料复制到新的文件
	fclose(in);
	fclose(out);                              //关闭两个指针
	printf("\n");
	printf("                    *******************************************************   \n\n");
	printf("                                      你已成功将资料备份!                     \n\n");
	printf("                    *******************************************************   \n\n");
	go_on();                                  //显示是否继续函数
}//

///////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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