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

📄 学生成绩管理.cpp

📁 学生成绩管理系统报告
💻 CPP
字号:
/**********************************************************************
*制作人:  朱威
*制作时间:2007年9月13日
*程序名称:学生成绩管理系统
*程序功能:能实现对学生成绩的录入,插入,删除,查找,浏览,排序,
*          合计,保存,读取等功能
***********************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100       //学生最大人数控制

// 结构体定义学生的所有属性,包括学生证号,姓名,3门学科成绩,总成绩,平均成绩
struct student
{
	int no;
	char name[15];
	int score1;
	int score2;
	int score3;
	int sum;
	double avr;
}s[N];


// 函数声明

void mune();        //主菜单函数
void input();       //录入函数
void insert();      //插入函数
void del();         //删除函数
void delNo();       //按学生证号删除
void delName();     //按姓名删除  
void select();      //查找函数
void selectNo();    //按学生证号查找
void selectName();  //按姓名查找
void sort();        //冒泡排序函数
void display();     //制表格式函数
void total();       //分类合计函数
void save();        //保存函数
void load();        //读取函数


// 全局变量

int i,j;            //循环变量
int count=0;        //控制数组下标变量


// 主函数

void main ()
{
	int in;        //选择功能的变量
	char ch='y';   //选择是否继续时的变量,(y / n)
	do
	{
		mune();  
		scanf("%d",&in);
		if(in<0 || in>9)
		{
			printf("\a输入有误,请在0~9之间选择!");
			continue;
		}
		else if(in==0){
			printf("确定要退出程序吗?(y / n) ");
			scanf(" %c",&ch);
			printf("\n");
			if(ch=='Y' || ch=='y')
			{
				printf("谢谢您的使用,再见!");
				break;
			}
		}
		switch(in)
		{
			case 1:                                    //录入
				printf("\n-----------------------------    请输入学员信息    -----------------------------");
				input();
				break;
			case 2:	                                   //插入
				insert();
				break;
			case 3:                                    //删除
				if(count!=0)
				{
					del();	
				}
				else
				{
					printf("\a没有数据!\n");       //(如果学生人数为0,弹出此消息) 
				}
				break;
			case 4:                                    //查找
				if(count!=0)
				{
					select();
				}
				else
				{
					printf("\a没有数据!\n");
				}
				break;
			case 5:                                    //制表
				if(count!=0)
				{
					display();
				}
				else
				{
					printf("\a没有数据!\n");
				}
				break;
			case 6:                                    //排序				
				if(count!=0)
				{
					sort();
					display();
				}
				else
				{
					printf("\a没有数据!\n");
				}
				break;
			case 7:                                    //合计				
				if(count!=0)
				{
					total();
				}
				else
				{
					printf("\a没有数据!\n");
				}
				break;
			case 8:                                    //保存
				save();
				break;
			case 9:                                    //读取
				load();
				break;
			default : 
				break;			
			}		
	}while(1);	
}




// 主菜单函数
void mune()
{
	   printf("                     *****************************************\n");
	   printf("                     |         学生成绩系统主菜单界面        |\n");
	   printf("                     |                                       |\n");
	   printf("                     |    1.录入学生成绩    6.排序学生成绩   |\n");
	   printf("                     |                                       |\n");
	   printf("                     |    2.插入学生成绩    7.合计学生成绩   |\n");
	   printf("                     |                                       |\n");
	   printf("                     |    3.删除学生成绩    8.存储学生成绩   |\n");
       printf("                     |                                       |\n"); 
	   printf("                     |    4.查找学生成绩    9.读取学生成绩   |\n");
       printf("                     |                                       |\n");
	   printf("                     |    5.浏览学生成绩    0.安全退出系统   |\n");
	   printf("                     |                                       |\n");
	   printf("                     |----------->学生成绩管理程序<----------|\n");
	   printf("                     *****************************************\n");
	   printf("                               请在0~9之间选择 :");      
}


// 录入函数
void input()
{	
	char ch;
	for(i=count;i<N;i++) 
	{		
		printf("\n学生证号: ");
		scanf("%d",&s[i].no);
		printf("\n姓名: ");
		scanf("%s",&s[i].name);
		printf("\n微机原理(成绩): ");
		scanf("%d",&s[i].score1);
		if(s[i].score1>100 || s[i].score1<0){
			printf("输入有误,请重新输入!\n");
			printf("\n微机原理(成绩): ");
			scanf("%d",&s[i].score1);
		}
		printf("离散数学(成绩): ");
		scanf("%d",&s[i].score2);
		if(s[i].score2>100 || s[i].score2<0){
			printf("输入有误,请重新输入!\n");
			printf("\n离散数学(成绩): ");
		    scanf("%d",&s[i].score2);
		}
		printf("数据结构(成绩): ");
		scanf("%d",&s[i].score3);
		if(s[i].score3>100 || s[i].score3<0){
			printf("输入有误,请重新输入!\n");
			printf("\n数据结构(成绩): ");
			scanf("%d",&s[i].score3);
		}
		s[i].sum=s[i].score1+s[i].score2+s[i].score3;
		s[i].avr=s[i].sum/3.0;
		printf("\n总成绩:%d",s[i].sum);
		printf("\n平均成绩:%lf",s[i].avr);
		printf("\n\n");
		count++; 
		printf("是否继续输入?(y / n)  ");
		scanf(" %c",&ch);
		printf("\n");
		if(ch!='Y' && ch!='y')
		{
			break;
		}
	}
	
}


// 插入函数
void insert()
{
	printf("\n------------------------    请输入要插入的学员信息    ------------------------");
	struct student temp;
	input();
	for(i=0;i<count;i++)
	{
		if(s[i].avr<temp.avr)
			break;
	}
	for(j=count;j>=i;j--)
	{
		s[j+1]=s[j];
	}
	s[i]=temp;
}


// 删除函数,含子菜单:按学生证号删除,按姓名删除
void del()
{
	int in;  	
	do
	{
		printf("                            ************************\n");
		printf("                            |    1.按学生证号删除  |\n");
		printf("                            |                      |\n");
		printf("                            |    2.学生按姓名删除  |\n");
		printf("                            |                      |\n");
		printf("                            |    3.返回上一级菜单  |\n");
		printf("                            ************************\n");
		printf("                               请在1~3之间选择: ");
		scanf("%d",&in);
		if(in<1 || in>3)
		{
			printf("\a输入有误,请重新输入!\n");
			continue;
		}
		else
		{
			break;
		}
	}while(1);
	switch(in)
	{
		case 1:
			delNo();
			break;
		case 2:
			delName();
			break;
		case 3:
			break;
	}
}


// 删除函数,按学生证号删除
void delNo()
{
	 printf("\n--------------------    请输入要删除的学员的学生证号   ------------------------");
	 int dno;
	 char ch;
	 printf("\n输入: ");
     scanf("%d",&dno);
     for(i=0;i<count;i++)
     {
		 if(dno==s[i].no){
			printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
		    printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
			printf("\n确定要删除吗?(Y / N)");
			scanf(" %c",&ch);
			printf("\n");
			if(ch=='y' || ch=='Y'){
				for(j=i;j<count-1;j++)
				{
					s[j]=s[j+1];
				}
				printf("删除成功\n");
				count--;
				break;
			}
		 }
      }
}


// 删除函数,按学生姓名删除
void delName()
{
	 printf("\n--------------------    请输入要删除的学员的姓名   ------------------------");
	 char name[15];
	 char ch;
	 printf("\n输入: ");
     scanf("%s",&name);
     for(i=0;i<count;i++)
     {
		 if((strcmp(name,s[i].name))==0){
			printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
		    printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
			printf("\n确定要删除吗?(Y / N)");
			scanf(" %c",&ch);
			printf("\n");
			if(ch=='y' || ch=='Y'){
				for(j=i;j<count-1;j++)
				{
					s[j]=s[j+1];
				}
				printf("删除成功\n");
				count--;
				break;
			}
		 }
      }
}

// 查找函数,含子程序:按学生证号查找,按姓名查找
void  select()
{
	int in;  	
	do
	{
		printf("                            ************************\n");
		printf("                            |    1.按学生证号查找  |\n");
		printf("                            |                      |\n");
		printf("                            |    2.按学生姓名查找  |\n");
		printf("                            |                      |\n");
		printf("                            |    3.返回上一级菜单  |\n");
		printf("                            ************************\n");
		printf("                               请在1~3之间选择: ");
		scanf("%d",&in);
		if(in<1 || in>3)
		{
			printf("\a输入有误,请重新输入!\n");
			continue;
		}
		else
		{
			break;
		}
	}while(1);
	switch(in)
	{
		case 1:
			selectNo();
			break;
		case 2:
			selectName();
			break;
		case 3:
			break;
	}
}


// 查找函数,按学生证号查找学员信息
void selectNo()
{	printf("\n--------------------    请输入要查找的学员的学生证号    --------------------");
	int no;
	printf("\n输入:");
	scanf("%d",&no);
	for(i=0;i<count;i++)  
	{
		if(s[i].no==no)
		{
			printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
		    printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
			printf("\n");
		}
	}

}


// 查找函数,按姓名查找学员信息
void selectName()
{
	printf("\n--------------------    请输入要查找的学员的姓名    --------------------");
	char name[15]; 
	printf("\n输入:");
	scanf("%s",&name);
	for(i=0;i<count;i++)  
	{
		if((strcmp(name,s[i].name))==0)
		{
			printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
		    printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
			printf("\n");
		}
	}
}


// 排序函数,按平均成绩从高到低排序
void sort()
{
	struct student t;
	for(i=0;i<count;i++)
	{
		for(j=0;j<count-i-1;j++)
		{
			if(s[j].avr<s[j+1].avr)
			{
				t=s[j];
				s[j]=s[j+1];
				s[j+1]=t;
			}
		}
    }
}


// 制表函数,将所有学员成绩以表格形式输出
void display()
{
	printf("------------------------------------------------------");
	printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
	for(i=0;i<count;i++)
	{
		printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",s[i].no,s[i].name,s[i].score1,s[i].score2,s[i].score3,s[i].sum,s[i].avr);
	}
	printf("------------------------------------------------------\n");
}


// 合计函数,将3门学科的个人成绩,总分,平均分输出
void total()
{
	int tot1=0,tot2=0,tot3=0;
	double avr1=0,avr2=0,avr3=0;
	printf("\n\t\t微机原理\t离散数学\t数据结构\n\n");
	for(i=0;i<count;i++){
		tot1+=s[i].score1;
		tot2+=s[i].score2;
		tot3+=s[i].score3;
		avr1=tot1/count;
		avr2=tot2/count;
		avr3=tot3/count;
		printf("\t\t  %d\t\t  %d\t\t  %d\n",s[i].score1,s[i].score2,s[i].score3);
	}
	printf("\n");
	printf("合计:\t\t  %d\t\t  %d\t\t  %d\n",tot1,tot2,tot3);
	printf("平均分:\t\t %.01f\t\t %.01f\t\t %.01f\n",avr1,avr2,avr3);
	printf("\n");
}


// 保存函数,将数据保存到student.txt文件下
void save()
{
	FILE *fp;
	fp=fopen("student.txt","a+");
	if(fwrite(&s[i],sizeof(struct student),1,fp)!=1){
		printf("文件保存失败!\n");	
	}
	else{
		fwrite(&s[i],sizeof(struct student),count,fp);
		printf("数据成功保存到程序下的student.txt文件中!\n");
	}
	fclose(fp);
}


// 读取函数,提取student.txt文件中的数据
void load()
{
	FILE *fp;
	int counter=0;
	char ch;
	struct student stu[N];
	
	
	fp=fopen("student.txt","r+");
	if(fp==NULL)
	{
		printf("\a文件打开失败!\n");	
	}
	else
	{
		i=0;
		while(!feof(fp))
		{
			fread(&stu[i],sizeof(struct student),1,fp);
			i++;
			counter++;
		}
		counter--;  //在读取循环过程中counter多加了一次,所以在循环结束后自身减1


		//  读取完毕后打印出来
 
		for(i=0;i<counter;i++)
		{
			printf("\n学号\t姓名\t微机\t离散\t数构\t总分\t平均\n\n");
		    printf(" %d\t%s\t%d\t%d\t%d\t%d\t%.0lf\n",stu[i].no,stu[i].name,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].sum,stu[i].avr);
		}
		printf("是否提取到当前数据中 (Y / N)");
		scanf(" %c",&ch);
		printf("\n");
		if(ch=='Y' || ch=='y')
		{
			for(i=count;i<counter;i++)
			{
				s[count]=stu[i];
				count++;
			}
			printf("提取成功!\n");
		}
	}	
}

⌨️ 快捷键说明

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