【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第1张图片

大家好,各位努力奋斗的大学生小伙伴们!今天,我将带你们领略一项令人惊叹的程序设计奇迹——《奖学金评定系统》!是不是感到激动呢?别急,让我为你们揭开这个能让你在C语言程序设计中拿满分的秘密武器!

首先放成绩单cancan实力(bushi。。。

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第2张图片

要求: 

一、系统设计
1.设计2022-2023-1学期,班级学生成绩管理系统的数据结构,着眼于实际需要和问题解决,设计合理的数据类型;
2.设计学号输入方式,保证学号格式规范,学号与专业、班级、入学年份匹配;
3.成绩输入按实际情况,出一门成绩,录入一次,并做好统计已录入成绩门次;
4.所有课程成绩录入完毕,并经确认无误之后才能进行计算均分、计算获得学分和奖学金评定;
5.设计修改功能,防止信息录入错误,无法修改,影响后续功能的完成;
6.以二维表格形式输出班级所有学生信息,表头使用中文名称;
7.根据业务课程综合成绩评选.一、二、三等奖学金,获奖信息输出准确,包括获奖学生的全部信息;
8.设计思路明确,采用自顶向下的程序设计,系统组织架构清晰,模块功能明确,
二、编程
1.格式书写规范(锯齿状);
2.鼓励采用函数式多文件结构;
3.减少使用全局变量;
4.代码通俗易懂;
5.程序运行流畅,交互友好、操作方便;
三、系统测试
1.所有功能均需符合实际应用情况,均需进行测试;
2.必须经过大量数据测试,保证运行结果的正确;
四、报告
1.内容部分:包括封面、目录、正文(系统设计、功能描述、总结);
2.封面部分:C语言程序设计实训1(黑体三号居中)、实训内容、班级、学号、姓名、完成日期(宋体四号居中);
3.正文部分:系统设计描述清晰,功能描述需要和截图匹配(截图大小每副运行截图12*8cm,居中显示);
4.总结部分:总结描述客观;
5.文件采用学号+姓名.doc格式
五、其他
1.独立完成;
2.按时完成;
3.在实训过程中,遵守职业操守,做有温度的人,写有温度的代码,切实提高自己综合应用开发能力,不断巩固职业素养。

一、简介

奖学金评定系统的整体功能都包括主菜单、子菜单、录入学生成绩、修改学生成绩、导出学生成绩、删除学生信息、对学生进行排名、评定奖学金、查看个人成绩、查看班级成绩、查看个人班级排名、查看不及格课程等功能,以下目录为程序的基本功能:

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第3张图片

二、程序功能展现

1.主菜单功能

可以选择教师端或者学生端以实现不同功能

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第4张图片

 2.子菜单功能

设计两个菜单,根据不同用户的需要可实现不同的功能

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第5张图片

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第6张图片

3.录入学生成绩功能(教师端)

以下为测试数据:

将学生信息导入,如果录入时学号相同或者成绩不符合规范将会提示错误并且重新输入成绩。

4.修改学生成绩功能(教师端)

可对录入的成绩进行修改,并对输入正确性进行检测,而且进行学分的修改,设计修改功能,防止信息录入错误,无法修改,影响后续功能的完成

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第7张图片

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第8张图片

5.导出学生成绩功能(教师端)

可以以二维表格形式输出班级所有学生信息,表头使用中文名称

6.删除学生信息功能(教师端)

可对输入学生的信息进行删除

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第9张图片

7.对学生进行排名功能(教师端)

可实现依据总分对学生进行排名,并导出成绩单

8.评定奖学金功能(教师端)

可评出学分修满且成绩优异的三名学生,若有科目不及格将不会进行奖学金的评定

9.查看个人成绩功能(学生端)

可供学生输入学好查寻自己的成绩

10.查看班级成绩(学生端)

可供学生查看班级成绩单

11.查看个人班级排名功能(学生端)

可供学生查询自己在班级中的排名

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第10张图片

12.查看不及格课程功能(学生端)

可供学生查询自己不及格的课程,若全部及格则输出无,否则则输出不及格的课程

【期末满分作业】C语言程序设计 实训1——奖学金评定系统的设计与实现(附带实验报告、源码以及解释)_第11张图片

 三、完整代码

#include
#include
#include
#include
#include
using namespace std;

struct Node{
	char id[20];
	char name[10];
	double credit;
	double maths;
	double PE;
	double history;
	double introduction;
	double English;
	double design;  
	double sum;
	double score;
};
Node stu[100];
int num=0;

bool cmp(Node x,Node y){
	return x.sum>y.sum;
}

int serch(char ID[]){
	
    for(int i=1;i<=num;i++){
        if(strcmp(stu[i].id,ID)==0) {
            return i;
        }  
    }
    return -1; 
}

int serch1(char ID[]){
	
    for(int i=1;i>stu[num].id;
		while(serch1(stu[num].id)!=-1){
			printf("学号重复,请重新输入!!!\n");
			printf("请输入学号:");
			cin>>stu[num].id;
			getchar();
		}
		
			
		printf("请输入姓名:");
		scanf("%s",stu[num].name);
		getchar();
			
		printf("请输入高等数学成绩:");
		scanf("%lf",&stu[num].maths);
		while(stu[num].maths>100||stu[num].maths<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].maths);
		}
		if(stu[num].maths>=60){
			stu[num].score+=5;
		} 
		
		printf("请输入大学体育成绩:");
		scanf("%lf",&stu[num].PE);
		while(stu[num].PE>100||stu[num].PE<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].PE);
		}
		if(stu[num].PE>=60){
			stu[num].score+=1;
		} 
		
		printf("请输入中国近代史纲要成绩:");
		scanf("%lf",&stu[num].history);
		while(stu[num].history>100||stu[num].history<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].history);
		}
		if(stu[num].history>=60){
			stu[num].score+=2;
		}
		
		printf("请输入软件技术导论成绩:");
		scanf("%lf",&stu[num].introduction);
		while(stu[num].introduction>100||stu[num].introduction<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].introduction);
		}
		if(stu[num].introduction>=60){
			stu[num].score+=2;
		}
		
		printf("请输入大学英语成绩:");
		scanf("%lf",&stu[num].English);
		while(stu[num].English>100|stu[num].English<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].English);
		}
		if(stu[num].English>=60){
			stu[num].score+=4;
		}
		
		printf("请输入C语言程序设计成绩:");
		scanf("%lf",&stu[num].design);
		while(stu[num].design>100||stu[num].design<0){
			printf("输入错误,请重新输入!!!\n");
			scanf("%lf",&stu[num].design);
		}
		if(stu[num].design>=60){
			stu[num].score+=4;
		}
		
		stu[num].sum=stu[num].maths+stu[num].PE+stu[num].history+stu[num].introduction+stu[num].English+stu[num].design;
		
		string choice; 
		printf("是否继续输入?(是/否)\n");
		cin>>choice;
		system("cls");
		
        if(choice=="否"){
        	return;
		}
	}
}

void revise(){
	
	while(1){
        char ID[20];
        int index;
        printf("请输入要修改的学生的学号:");
        
        while(1){
         	scanf("%s",&ID);
            getchar();
         	index=serch(ID); 
         	if(index==-1){
              printf("该学生不存在,请重新输入!\n");
         	}else{
         		break;
			}
		}
		
		int choice;
        printf("请输入您要修改的学生信息:\n");
        printf("1.修改姓名\n");
        printf("2.修改高等数学成绩\n");
		printf("3.修改大学体育成绩\n");
		printf("4.修改中国近代史纲要成绩\n");
		printf("5.修改软件技术导论成绩\n");
		printf("6.修改大学英语成绩\n");
		printf("7.修改C语言程序设计成绩\n");
       	scanf("%d",&choice);
       	
		int f=0;
        switch(choice){
        	
        	case 1: printf("请输入姓名:");
			scanf("%s",stu[num].name);
			getchar();
			break;
            
            case 2:printf("请输入高等数学成绩:");
            
            if(stu[index].maths<60){
            	f=1;
			}
			scanf("%lf",&stu[index].maths);
			
			while(stu[index].maths>100||stu[index].maths<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%d",&stu[index].maths);
			}
			
			if(stu[index].maths>=60&&f==1){
				stu[index].score+=5;
			} 
			getchar();
            break;
			  
            case 3:	printf("请输入大学体育成绩:");
            
			if(stu[index].PE<60){
            	f=1;
			}
			
			scanf("%lf",&stu[index].PE);
			
			while(stu[index].PE>100||stu[index].PE<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%lf",&stu[index].PE);
			}
			
			if(stu[index].PE>=60&&f==1){
				stu[index].score+=1;
			} 
			getchar();
 			break;
			   
            case 4:	printf("请输入中国近代史纲要成绩:");
			
			if(stu[index].history<60){
            	f=1;
			}
			
			scanf("%lf",&stu[index].history);
			while(stu[index].history>100||stu[index].history<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%lf",&stu[index].history);
			}
			
			if(stu[index].history>=60&&f==1){
				stu[index].score+=2;
			}
			getchar();
            break;
			  
            case 5:printf("请输入软件技术导论成绩:");
			
			if(stu[index].introduction){
            	f=1;
			}
			
			scanf("%lf",&stu[index].introduction);
			while(stu[index].introduction>100||stu[index].introduction<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%lf",&stu[index].introduction);
			}
			
			if(stu[index].introduction>=60&&f==1){
				stu[index].score+=2;
			}
			getchar();
            break;
			  
            case 6:	printf("请输入大学英语成绩:");
		
			if(stu[index].English<60){
            	f=1;
			}
			
			scanf("%lf",&stu[index].English);
			
			while(stu[index].English>100|stu[index].English<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%lf",&stu[index].English);
			}
			
			if(stu[index].English>=60&&f==1){
				stu[index].score+=4;
			}
			getchar();
            break;
			  
            case 7:	printf("请输入C语言程序设计成绩:");
			
			if(stu[index].design<60){
            	f=1;
			}
			
			scanf("%lf",&stu[index].design);
			
			while(stu[index].design>100||stu[index].design<0){
				printf("输入错误,请重新输入!!!\n");
				scanf("%lf",&stu[index].design);
			}
			
			if(stu[index].design>=60&&f==1){
				stu[index].score+=4;
			}
			getchar();
        	break;
        	
		}   
		
		stu[index].sum=stu[index].maths+stu[index].PE+stu[index].history+stu[index].introduction+stu[index].English+stu[index].design;
		
		system("cls");
		string choice2;
        printf("是否继续修改?(是/否)\n");
		cin>>choice2;
        if(choice2=="否"){
        	return;
		}
		
    }

}

void inquire(){
	char ID[20];
    int index;
    printf("请输入要查找的学生的学号:");
        
    while(1){
       	scanf("%s",&ID);
        getchar();
        index=serch(ID); 
        if(index==-1){
             printf("该学生不存在,请重新输入!\n");
        }else{
         	break;
		}
	}
	printf("-------------------------------------------------------------------------------------------------------------------\n");
    printf("|%s|    %s    | %s |%s|%s|%s|%s|%s|%s| %s |%s|\n","序号","学号","姓名","高等数学","大学体育","中国近代史纲要","软件技术导论","大学英语","C语言程序设计","总分","实际获得学分");
    printf("|----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
	printf("|%4d|%12s|%6s|%8.1lf|%8.1lf|%14.1lf|%12.1lf|%8.1lf|%13.1lf|%6.1lf|%12.1f|\n",index,stu[index].id,stu[index].name,stu[index].maths,stu[index].PE,stu[index].history,stu[index].introduction,stu[index].English,stu[index].design,stu[index].sum,stu[index].score);
    printf("-------------------------------------------------------------------------------------------------------------------\n");
	system("pause");
	system("cls");	
}

void output(){
	printf("-------------------------------------------------------------------------------------------------------------------\n");
    printf("|%s|    %s    | %s |%s|%s|%s|%s|%s|%s| %s |%s|\n","序号","学号","姓名","高等数学","大学体育","中国近代史纲要","软件技术导论","大学英语","C语言程序设计","总分","实际获得学分");
    printf("|----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
    
	for(int i=1;i<=num;i++){
        printf("|%4d|%12s|%6s|%8.1lf|%8.1lf|%14.1lf|%12.1lf|%8.1lf|%13.1lf|%6.1lf|%12.1f|\n",i,stu[i].id,stu[i].name,stu[i].maths,stu[i].PE,stu[i].history,stu[i].introduction,stu[i].English,stu[i].design,stu[i].sum,stu[i].score);
    	if(i!=num){
    		 printf("|----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
		}else{
			printf("-------------------------------------------------------------------------------------------------------------------\n");
		}
	}
	system("pause");
	system("cls");
}

void remove(){

    while(1){
        char ID[20];
        int index;
        printf("请输入要删除的学生的学号:");
        scanf("%s",&ID);
        getchar();
        index=serch(ID);  
        
        while(index==-1){
        	printf("学生不存在,请重新输入!\n");
        	scanf("%s",&ID);
        	index=serch(ID); 
		}
		string choice1;
        printf("是否确认删除?(是/否)\n");
		cin>>choice1;
		
        if(choice1=="否"){
        	printf("请重新输入。\n"); 
        	system("pause");
			system("cls");
        	continue;
		}else{
            for(int i=index;i>choice2;
		if(choice2=="否"){
        	return;
		}
    }
	system("pause");
	system("cls");
}

void rank(){
	sort(stu+1,stu+num+1,cmp);
	printf("-------------------------------------------------------------------------------------------------------------------\n");
    printf("|%s|    %s    | %s |%s|%s|%s|%s|%s|%s| %s |%s|\n","序号","学号","姓名","高等数学","大学体育","中国近代史纲要","软件技术导论","大学英语","C语言程序设计","总分","实际获得学分");
    printf("|----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
    
	for(int i=1;i<=num;i++){
        printf("|%4d|%12s|%6s|%8.1lf|%8.1lf|%14.1lf|%12.1lf|%8.1lf|%13.1lf|%6.1lf|%12.1f|\n",i,stu[i].id,stu[i].name,stu[i].maths,stu[i].PE,stu[i].history,stu[i].introduction,stu[i].English,stu[i].design,stu[i].sum,stu[i].score);
    	if(i!=num){
    		 printf("|----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
		}else{
			printf("-------------------------------------------------------------------------------------------------------------------\n");
		}
	}
	system("pause");
	system("cls");
}

void judge(){
	sort(stu+1,stu+num+1,cmp);
	int cnt=0;
	int i=1;
	printf("--------------------------------------------------------------------------------------------------------------------\n");
	printf("|%5s|    %s    | %s |%s|%s|%s|%s|%s|%s| %s |%s|\n","奖项","学号","姓名","高等数学","大学体育","中国近代史纲要","软件技术导论","大学英语","C语言程序设计","总分","实际获得学分");
	printf("|-----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
	    
	for(i=1;i<=num;i++){
			
		if(stu[i].score!=18){
			continue;
		}
		cnt++;
	        
		printf("|%d等奖|%12s|%6s|%8.1lf|%8.1lf|%14.1lf|%12.1lf|%8.1lf|%13.1lf|%6.1lf|%12.1f|\n",cnt,stu[i].id,stu[i].name,stu[i].maths,stu[i].PE,stu[i].history,stu[i].introduction,stu[i].English,stu[i].design,stu[i].sum,stu[i].score);
	    if(cnt==3||i!=num){
	    	printf("--------------------------------------------------------------------------------------------------------------------\n");
	    	 
		}else{
			printf("|-----|------------|------|--------|--------|--------------|------------|--------|-------------|------|------------|\n");
		}
		
		if(cnt==3||i==num){
			break;
		}
	}
	
	system("pause");
	system("cls");
}

void checkrank(){
	char ID[20];
    int index;
    printf("请输入要查找的学生的学号:");
    scanf("%s",&ID);
    getchar();
    index=serch(ID);  
        
    while(index==-1){
	    printf("学生不存在,请重新输入!\n");
	    scanf("%s",&ID);
	    index=serch(ID); 
	}
	printf("您在班级的排名为%d名!",index); 
	
	system("pause");
	system("cls");
}

void checkfail(){
	char ID[20];
    int index,n=0;
    printf("请输入要查找的学生的学号:");
    scanf("%s",&ID);
    getchar();
    index=serch(ID);  
        
    while(index==-1){
	    printf("学生不存在,请重新输入!\n");
	    scanf("%s",&ID);
	    index=serch(ID); 
	}
	printf("不及格的科目有:");

	if(stu[index].maths<60){
		printf("高等数学 ");
		n++;
	} 
		
	if(stu[index].PE<60){
		printf("大学体育 ");
		n++;
	} 
	
	if(stu[index].history<60){
		printf("中国近代史纲要 ");
		n++;
	}
		
	if(stu[index].introduction<60){
		printf("软件技术导论 ");
		n++;
	}
		
	if(stu[index].English<60){
		printf("大学英语 ");
		n++;
	}
		
	if(stu[index].design<60){
		printf("C语言程序设计 ");
		n++;
	}
	
	if(n==0){
		printf("无!!!");
	}
	system("pause");
	system("cls");
}

void meno1(){
	int choice1;
	
    while(1){
		printf("        教师端  \n ");   
		printf("******************\n");
		printf("      功能菜单 \n"); 
		printf("姓名:     \n"); 
		printf("==================\n"); 
		printf("1.录入学生成绩         \n");
		printf("2.修改学生成绩         \n"); 
		printf("3.查询学生成绩         \n"); 
		printf("4.导出学生成绩         \n"); 
		printf("5.删除学生信息         \n"); 
		printf("6.对学生进行排名       \n"); 
		printf("7.评定奖学金           \n");  
	    printf("0.退出程序             \n");
		printf("==================\n");
		printf("请输入您的选择:");
		scanf("%d",&choice1);
		system("cls");
		
		switch(choice1){
			case 1: input();	break;
			case 2:	revise();   break;
			case 3: inquire();  break;
			case 4: output();   break;
			case 5: remove();   break;
			case 6: rank();     break;
			case 7: judge();    break;
	    	case 0: printf("欢迎你再次使用,再见!\n");    return;
			default: printf("对不起,您的选择有误,请重新输入!!!\n");	
			system("pause");
			system("cls");
		} 
	}
}

void meno2(){
	int choice2;
	
    while(1){
		printf("        学生端         \n");
		printf(" ********************\n");
		printf("      功能菜单 \n"); 
		printf("姓名:     \n"); 
		printf("==================\n"); 
		printf("1.查看个人成绩          \n"); 
		printf("2.查看班级成绩        \n"); 
		printf("3.查看个人班级排名    \n"); 
		printf("4.查看不及格课程     \n");
		printf("0.结束程序             \n");
		printf("==================\n ");
	 	printf("请输入您的选择:"); 
		scanf("%d",&choice2);
		system("cls");
		
		switch(choice2){
			case 1: inquire();    break; 
			case 2: output();     break;       
			case 3: checkrank();  break;
			case 4: checkfail();  break;
			case 0: printf("欢迎你再次使用,再见!\n");    return;
			default:printf("对不起,您的选择有误,请重新输入!!!\n");	
			system("pause");
			system("cls");
		} 
	}
} 

int main(){
	int choice;
	
    while(1){
    	printf("	  主菜单			\n");
    	printf("*****************************\n");
    	printf("	1.教师端        	\n");
    	printf("	2.学生端        	\n");
		printf("	0.结束程序	        \n"); 
		printf("*****************************\n");
		printf("请输入您的选择:");
		scanf("%d",&choice);
		system("cls");
		
		switch(choice){
       		case 1: meno1();break;
      		case 2: meno2();break;
       		case 0: printf("欢迎您再次使用,再见!\n");exit(0);
	   		default:printf("对不起,您的选择有误,请重新输入!!!\n");
	   		system("pause");
			system("cls");
	    }
	}
	return 0;
}

四、实验报告 (附带实验报告、源码以及解释)

你可能感兴趣的:(c语言,实训,学习,作业,考试)