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

📄 finalwork.c

📁 数据管理功能: 1. 增加一个学生的纪录 2. 根据学号查看某个学生的成绩 3. 计算并输出每个学生的平均成绩 4. 计算并输出每门课的平均成绩 5. 计算并输出所有学生所有课程的平均成绩 6. 按平
💻 C
📖 第 1 页 / 共 2 页
字号:
#include<stdio.h>                               
#include<string.h>
void file();
void init();                     //声明函数                                                              
void init1(); 
void init2();
void init3();
void init4();
void doChoice1();
void doChoice2();
void doChoice3();
void doChoice4();
void doChoice5();
///////////////////////////////////////////////////////////////////////////////////////////////
#define FORMAT "%-7s%-9s%-10.3f%-14.3f%-12.3f%-14.3f%.3f"  //定义FORMAT输出格式
float total_ave,math_ave,data_ave,eng_ave,c_ave;         
      //定义全局变量 total_ave总平均分,math_ave数学,data_ave数据库,eng_ave英语,c_ave C语言平均分                   
int n=0;                                                      //n学生个数
FILE *fp;
     
struct student                                                //定义student结构体
{
	char num[7];                                              //学号
	char name[20];                                            //姓名
	float score[4];                                           //成绩    
	float average;                                            //平均分
}stu[80];                                                     //学生数组长度
struct student *p;                                            //定义全局结构体指针变量

void load(char filename[])                                                   //定义读取文件中数据的函数
{                                                 
	n=0;                                                      //学生个数n
	if((fp=fopen(filename,"rb"))==NULL)                      //判断文件是否存在
	{
		printf("Cannot open file.\n");     
	    return;                                                //文件不存在,返回主函数
	}
	do                                                          //读取数据
	{
		if(fread(&stu[n],sizeof(struct student),1,fp)!=1)      //判断读取是否成功
		{
			if(feof(fp)) return;                              //若读取结束,返回主函数
			printf("file read error!!!\n\n");                 //读取出错 
		}
		n++;                                                  //n学生人数加1
	}while(1);                                              
	fclose(fp);                                               //关闭文件  
}


void save(char filename[])                                                   //保存数据
{                                                 
	int i;
	if((fp=fopen(filename,"wb"))==NULL)                      //判断文件是否存在                              
	{
		printf("Cannot open file.\n");
	    return;  
	}
	else                                                        //保存数据                             
	{
		for(i=0;i<n;i++)
			if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)  //判断数据保存是否成功 
				printf("file write error!!!");
			fclose(fp);                                         //关闭文件
	}
} 
void Edit()                                                     //编辑数据
{
	char choice;
	do                                                         //输出菜单
	{
		init();
		choice=getch();                                         //赋值              
		if(choice=='1')
			doChoice1();                                        //执行命令
		else if(choice=='2')
			doChoice2();
		else if(choice=='3')
			doChoice3();
		else if(choice=='4')
			doChoice4();
		else if(choice=='5')
			doChoice5();
		else if(choice=='6')	  
			return;                                            //返回
		else
			printf("Input error!!!!\n\n");
	}  while(1);
}

void newfile()                       //文件菜单
{
	char ch,filename[15];               //filename文件名
	do
	{
		file();                        //输出菜单                             
		ch=getch();                     
		if(ch=='1')                       //新建文件
		{
			printf("请输入filename:");       
			gets(filename);                  //取文件名
			fp=fopen(filename,"wb+");         
			printf("已成功建立数据库文件。\n\n");
			fclose(fp);
		}
		else if(ch=='2')                        //载入数据
		{
			printf("\n请输入filename:");       
		  	gets(filename);
			fp=fopen(filename,"rb");                //判断是否存在该文件   
			if(fp==NULL) printf("输入有误,不存在该文件!!!\n\n");      //不存在该文件
			else                                                           //存在该文件
			{	
				load(filename);                                                     //载入数据
		    	printf("已成功载入数据。\n\n");
			}
		}
		else if(ch=='3')                                   //编辑数据
		{
			printf("\n");
			Edit();
		}
		
		else if(ch=='4')
		{
			printf("\n请输入filename:");       
		  	gets(filename);
			fp=fopen(filename,"rb");                //判断是否存在该文件   
			if(fp==NULL) printf("输入有误,不存在该文件,请新建立文件!!!\n\n");      //不存在该文件
			else                                                           //存在该文件
			{	
				save(filename);                                                 //保存数据
		    	printf("已成功保存数据。\n\n");
			}
		}
		else if(ch=='5') return;                       //返回主函数              

		else printf("Input error!!!\n\n");
	}while(1);
}


main()                                                           //主函数
{                        //filename文件名                                                    
	system("cls");                                               //清屏	                                                //调用函数  
	printf("\t*****************************************************************\n");
	printf("\t\t\t欢迎使用学生考试成绩数据处理系统\n");
	printf("\t\t\t作者    麻闽政  电31   2003010885\n");
	printf("\t*****************************************************************\n");
    newfile();
	printf("谢谢本处理系统^_^。\n");

}
void file()                                     //文件菜单函数
{
	printf("请选择操作菜单:\n");
	printf("\t①.建立新的数据文件\n");
	printf("\t②.载入数据\n");
	printf("\t③.编辑数据\n");
	printf("\t④.保存\n");
	printf("\t⑤.退出\n");
}

void init()                                                  //菜单函数
{
	printf("请选择操作菜单:\n");
	printf("\t①.增加或删除学生记录\n");
	printf("\t②.查询成绩\n");
	printf("\t③.统计平均成绩\n");
    printf("\t④.不及格统计\n");
	printf("\t⑤.特定查询\n");
	printf("\t⑥.返回\n");
}
//////////////////////////////////////////////////////////////////////////////////////////// 
void init1()                                                 //菜单函数
{
	printf("\n请选择操作菜单:\n");
	printf("\t①.增加学生的记录\n");
	printf("\t②.删除学生的记录\n");
	printf("\t③.返回!!\n");
}
void Add()                                           //添加记录
{
	char c;
	do
	{
		printf("\n请输入学生的学号:");
	    scanf("%s",stu[n].num);
       	printf("请输入学生的姓名:");
    	scanf("%s",stu[n].name);
    	printf("请输入<数学>成绩:");
    	scanf("%f",&stu[n].score[0]);
    	printf("请输入<数据库概论>成绩:");
    	scanf("%f",&stu[n].score[1]);
    	printf("请输入<英语>成绩:");
        scanf("%f",&stu[n].score[2]);
    	printf("请输入<C语言程序设计>成绩:");
    	scanf("%f",&stu[n].score[3]);
    	getchar();
        n++;  //人数增加1
 		printf("继续录入附否?(按y继续,其他退出)");
		c=getch();
        printf("\n");

	}while(c=='y'||c=='Y');
    	printf("\t数据已成功输入^_^!\n");             
}
 
void Del()                                                //删除记录
{
	int i,flag=1;                                         //定一变量,flag作记号
	char number[8];                                  
	printf("请输入学生的学号:");                        //输入学号               
	gets(number);
	for(i=0;i<n;i++)               
		if(strcmp(stu[i].num ,number)==0)                 //寻找要删除的数据    
		{
			stu[i]=stu[n-1];                              //换数据
			n--;                                          //人数减1
			flag=0;                                       //判断是否存在该学生数据   
		}
	if(flag) printf("输入有误,不存在该学生数据!!!\n"); //flag=1,不存在该数据
	printf("\t已成功删除该学生数据^_^!\n");                                

}

void doChoice1()                                         //选项1  
{
	char choice1;
	do 
	{
		init1();                                        //输出菜单
        choice1=getch();
	    if(choice1=='1') Add();                       //添加记录
	    else if(choice1=='2') Del();                     //删除记录
	    else if(choice1=='3') return;                   //返回上一级菜单
	    else printf("Input error!!!!\n");

	}while(1);
	printf("\n");
}

//////////////////////////////////////////////////////////////////////////////////////////////////
void init2()                                             //菜单
{
	printf("\n请选择操作菜单:\n");
    printf("\t①.输入学号查成绩(包括平均成绩)\n");
    printf("\t②.按平均成绩顺序输出学生成绩\n");
    printf("\t③.按学号顺序输出所有学生成绩\n");
    printf("\t④.按某门课成绩好坏顺序输出学生成绩\n");
    printf("\t⑤.返回!!\n");
}

void average()                                               //求平均成绩
{
    float sum=0,sum0=0,sum1=0,sum2=0,sum3=0;
    for(p=stu;p<stu+n;p++)
	{
		p->average=(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4;
        sum=sum+p->average;
	    sum0=sum0+p->score[0];
		sum1=sum1+p->score[1];
	    sum2=sum2+p->score[2];
		sum3=sum3+p->score[3];
	}
	total_ave=sum/n;                                       //总成绩求平均
	math_ave=sum0/n;                                       //数学平均成绩 
	data_ave=sum1/n;                                       //数据库概论平均成绩 
	eng_ave=sum2/n;                                         //英语平均成绩    
	c_ave=sum3/n;                                          //c语言平均成绩         
}

void doChoice2_1()                                         //输入学号查成绩
{
	char number[8];                                        //学号字符数组
	int flag=1;
    printf("\n请输入学号:");                                  //输入学号
    gets(number);
    for(p=stu;p<stu+n;p++)                                  
		if(strcmp(number,p->num)==0)                        //寻找该学生数据
		{                                                   //输出成绩
			printf("\n姓名%s  数学%.3f  数据库概论%.3f  ",p->name,p->score[0],p->score[1]);
			printf("\n英语%.3f  C语言程序设计%.3f  平均成绩%.3f",p->score[2],p->score[3],p->average);
			flag=0;                                         //判断是否存在该学生数据
		}
    printf("\n");         
    if(flag) printf("输入有误,没有该学生数据!!!\n");     //不存在该数据      
}

void Oder1()                                                 //按成绩排序
{
	int i,j;
    struct student t;                                       //定义结构体t
    for(i=0;i<=n-2;i++)                                     //冒泡法排序     
		for(j=0;j<=n-2-i;j++)
			if(stu[j].average<stu[j+1].average)                 
			{
				t=stu[j];                                   //互换数据
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}

}

void Oder2()                                                 //按学号排序
{
	int i,j;
	struct student t;
    for(i=0;i<=n-2;i++)                                      //冒泡法排序
		for(j=0;j<=n-2-i;j++)
			if(strcmp(stu[j].num,stu[j+1].num)>0)
			{
				t=stu[j];
				stu[j]=stu[j+1];
				stu[j+1]=t;
			}
} 

⌨️ 快捷键说明

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