基于C语言实现的(控制台)班级学生成绩管理【100010575】

班级学生成绩管理

1.设计题目与要求

设计实现一个模拟的班级学生成绩管理系统目的:通过学生成绩管理系统的设计,培养学生综合利用 C/C++ 语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计。

基本要求:该系统用于管理学生的基本信息、课程成绩。要求实现以下功能:

① 通过此模块来管理课程信息,包括查询、添加、修改、删除等功能。在进行课程信息添加时,系统会自动监测所添加的信息是否已经存在,如果存在,会提示已经存在。在进行课程信息删除时,同样要求再次确定。

② 实现对学生信息、课程成绩的文件存取(分别存储在 StudentInfo.txt、StudentScore.txt 文件中),实现对学生信息、课程成绩的记录增加、删除及修改;

③ 实现输入学生学号或姓名查询并显示学生的课程成绩。

学生的基本信息记录,如:

学号 姓名 性别 出生日期 专业
20050999 张三 1980 年 6 月 1 日 软件工程
…… …… …… …… ……

学生的课程成绩记录,如:

学号 课程名称 学分 成绩
20050999 毛泽东思想概论 4 60
20050999 高级语言程序设计 3 70
20050999 Web 程序设计 2 80
20050999 IT 企业管理 1 90
…… …… …… ……

2.设计软硬件环境

计算机:Surfacepro6 处理器:I5-8250U1.8GHZ 内存容量:8.00GB 操作系统:Windows10 企业版 IDE:Devc++

3.功能设计与描述

(一)班级学生成绩管理系统功能:

1.按学号/姓名查询学生成绩

2.查询学生信息

3.按学号/姓名查询学生信息

4.学生信息的增加/修改/删除

5.查询课程信息

6.课程信息的增加/修改/删除

7.对存有学生信息及成绩信息的文件进行读写功能模块图如下:

图 1:班级学生成绩管理系统的功能模块图

(二)班级学生成绩管理系统算法设计:

1.学生成绩查询流程图:

图 2:学生成绩查询算法流程图

2.学生信息查询流程图:

图 3:学生信息查询算法流程图 3.学生信息修改算法流程图

图 4:学生信息修改算法流程图

4.学生信息添加算法流程图

图 5:学生信息添加算法流程图 5.学生信息删除算法流程图

图 6:学生信息删除算法流程图 6.课程信息查询算法流程图:

图 7:课程信息查询算法流程图

7.课程信息增加算法流程图:

图 8:课程信息增加算法流程图

8.课程信息修改算法流程图:

图 9:课程信息修改算法流程图 9.课程信息删除算法流程

图 10:课程信息删除算法流程图

4.源程序代码清单

# include<stdio.h>
# include<stdlib.h>
# include <unistd.h> 
# include"validation.h"

# include"stmanagement.h" 
# include"clmanagement.h" 
# include"Linklist.h" 
# include"searchway.h" 
int validation(int,int); 						//合法性验证 
void classmenu(NodeB **TB,NodeA **TA);			//课程信息管理菜单 
void studentmenu(NodeB **TB,NodeA **TA);		//学生信息管理菜单 
void classqeury(NodeB **TB,NodeA **TA);			//课程信息显示  
void classmanagement(NodeB **TB,NodeA **TA);	//课程信息管理
void studentquery(NodeB **TB,NodeA **TA);		//学生信息查询 
void studentmanagement(NodeB **TB,NodeA **TA);	//学生信息管理 
void stresult(NodeB **TB,NodeA **TA);			//学生成绩查询 
void themenu(NodeB **TB,NodeA **TA);			//主菜单 


int main(void){
		NodeA *TA=NULL;//学生信息 
		NodeB *TB=NULL;//学生成绩 
		TA=initializeA();//学生信息初始化
		TB=initializeB();//学生成绩初始化 
		themenu(&TB,&TA);//主菜单 
		return 0; 
}
void themenu(NodeB **TB,NodeA **TA){
		int x=-1,y=2;
		printf("**************************************欢迎使用班级学生成绩管理系统**************************************\n");
		printf("*                                         请选择需要使用的功能                                         *\n");
		printf("*                                          1.课程信息管理                                              *\n");
		printf("*                                          2.学生信息管理                                              *\n");
		printf("*                                          3.学生成绩查询                                              *\n");
		printf("*                                          0.退  出                                                    *\n");
		printf("********************************************************************************************************\n");
		
	while(x==-1){
		 
		scanf("%d",&x);
		x=validation(x,3);//合法性验证 
		switch(x){
			case 1:system("cls"); classmenu(TB,TA);							break;//课程信息管理 
			case 2:system("cls"); studentmenu(TB,TA);						break;//学生信息管理 
			case 3:system("cls"); stresult(TB,TA);							break;//成绩查询 
			case 0: printf("再见");stdatewritten(TA);cldatewritten(TB);	exit(1);  //数据写入文件并退出 
			case -1:														break; 
		
		} 
	}

	 
} 
void classmenu(NodeB **TB,NodeA **TA){
		int x=-1; 
		printf("**********************************************课程信息管理**********************************************\n");
		printf("*                                         请选择需要使用的功能                                         *\n");
		printf("*                                          1.课程信息查询                                              *\n");
		printf("*                                          2.课程信息管理                                              *\n");
		printf("*                                          3.返回上一级                                                *\n");
		printf("*                                          0.退出                                                      *\n");
		printf("********************************************************************************************************\n");
		while(x==-1){
		 	scanf("%d",&x);
			x=validation(x,3);//合法性验证
			switch(x){
				case 1:system("cls");TraverseNodeB(*TB); themenu(TB,TA);		break; 
				case 2:system("cls"); classmanagement(TB,TA); themenu(TB,TA);	break;//课程查询 
				case 3:system("cls"); themenu(TB,TA);							break;//课程管理 
				case 0: printf("再见");stdatewritten(TA);cldatewritten(TB);	exit(1);  //数据写入文件并退出
				
		
		} 
	}
}
void studentmenu(NodeB **TB,NodeA **TA){
		int x=-1; 
		printf("**********************************************学生信息管理**********************************************\n");
		printf("*                                         请选择需要使用的功能                                         *\n");
		printf("*                                           1.学生信息查询                                             *\n");
		printf("*                                           2.学生信息管理                                             *\n");
		printf("*                                           3.返回上一级                                               *\n");
		printf("*                                           0.退出                                                     *\n");
		printf("********************************************************************************************************\n");
		while(x==-1){
		 	scanf("%d",&x);
			x=validation(x,3);//合法性验证 
			switch(x){
				case 1:system("cls");studentquery(TB,TA);					  	break;//学生信息查询 
				case 2:system("cls");studentmanagement(TB,TA);   			 	break;//学生信息管理 
				case 3:system("cls");themenu(TB,TA);						 	break;//主菜单 
				case 0:printf("再见");stdatewritten(TA);cldatewritten(TB);	exit(1);  //数据写入文件并退出 
				case -1:														break;
		
		} 
	}

}
void classmanagement(NodeB **TB,NodeA **TA){//课程信息管理 
	printf("**********************************************课程信息管理**********************************************\n");
	printf("*                                         请选择需要使用的功能                                         *\n");
	printf("*                                          1.课程信息添加                                              *\n");
	printf("*                                          2.课程信息修改                                              *\n");
	printf("*                                          3.课程信息删除                                              *\n");
	printf("*                                          4.返回上一级                                                *\n");
	printf("*                                          0.退出                                                      *\n");
	printf("********************************************************************************************************\n");
	int x=-1;
	while(x==-1){
	 	scanf("%d",&x);
			x=validation(x,4);//合法性验证 
			switch(x){
				case 1:system("cls"); classadd(TB);								break;//课程信息添加 
				case 2:system("cls"); classchange(TB);							break;//课程信息修改 
				case 3:system("cls"); classdel(TB);								break;//课程信息删除 
				case 4:system("cls"); classmenu(TB,TA);							break;//课程菜单 
				case 0: printf("再见");stdatewritten(TA);cldatewritten(TB);	exit(1);  //数据写入文件并退出
				case -1:														break;
		
}
}
}
void studentquery(NodeB **TB,NodeA **TA){//学生信息查询
	printf("**********************************************学生信息查询**********************************************\n");
	printf("*                                            1.加载全部信息                                            *\n");
	printf("*                                            2.按学号/姓名查询                                         *\n");
	printf("********************************************************************************************************\n");
	int i=0;
	scanf("%d",&i);
	if(i==1){
		system("cls");
		bool x=1;
		i=-1;
		
		printf("*******************************************正在加载学生信息*********************************************\n");
		x=TraverseNodeA(*TA);//学生信息加载 
		printf("********************************************************************************************************\n");
		while(i==-1){
			printf("键入0以结束浏览\n"); 
			scanf("%d",&i);
			i=validation(i,0);//合法性验证 
    		if(i==0){
				system("cls");
				themenu(TB,TA); //返回主菜单 
			}else i=-1;
		}
		
	} 
	else{
		system("cls");
		printf("*******************************************请输入学号或者姓名*******************************************\n"); 
		char a[11],c[11];
		scanf("%s",c);
		system("cls");
		printf("********************************************************************************************************\n");
		search(TA,c);//查询并显示 
		printf("********************************************************************************************************\n");
		int i=-1;
		while(i==-1){
			printf("键入0以结束浏览\n"); 
			scanf("%d",&i);
			i=validation(i,0);//进行合法性验证 
    		if(i==0){
				system("cls");
				themenu(TB,TA); //返回主菜单 
			}
			else 
				i=-1;
		}
	}
	studentmenu(TB,TA); //返回上一级菜单 
}
void studentmanagement(NodeB **TB,NodeA **TA){//学生信息管理 
	printf("*****************************************学生信息管理***************************************************\n");
	printf("*                                     请选择需要使用的功能                                             *\n");
	printf("*                                       1.学生信息添加                                                 *\n");
	printf("*                                       2.学生信息修改                                                 *\n");
	printf("*                                       3.学生信息删除                                                 *\n");
	printf("*                                       4.返回上一级                                                   *\n");
	printf("*                                       0.退出                                                         *\n");
	printf("********************************************************************************************************\n");
	int x=-1;
	while(x==-1){
	 	scanf("%d",&x);
			x=validation(x,4);//合法性验证 
			switch(x){
				case 1:system("cls"); newstudent(TB,TA);studentmanagement(TB,TA);	break;//学生信息添加 
				case 2:system("cls"); changestudent(TB,TA);studentmanagement(TB,TA);break;//学生信息修改 
				case 3:system("cls"); delstudent(TB,TA);studentmanagement(TB,TA);	break;//学生信息删除 
				case 4:system("cls"); studentmenu(TB,TA);							break;//学生管理菜单 
				case 0: printf("再见");stdatewritten(TA);cldatewritten(TB);		exit(1);  //将内存中的数据写入文件并关闭程序 
				case -1:break;
			}
		}
		
}

void stresult(NodeB **TB,NodeA **TA){//学生成绩查询 
	printf("*******************************************请输入学号或者姓名*******************************************\n"); 
	char c[11];
	scanf("%s",c);
	system("cls");
	printf("********************************************************************************************************\n");
	searchresult(TA,TB,c);	//调用成绩查找函数 
	printf("********************************************************************************************************\n");
	int i=-1;
	while(i==-1){
		printf("键入0以结束浏览\n"); 
		scanf("%d",&i);
		i=validation(i,0);
    	if(i==0){
			system("cls");
			themenu(TB,TA); //返回主菜单 
			}
		else 
			i=-1;
	}

}

5.程序运行结果

1.学生信息查看

2.学生信息修改

3.学生信息增加

4.学生信息删除

5.学生成绩查询

6.课程信息查询

7.课程信息增加

8.课程信息修改

9.课程信息删除

6.设计总结

本次设计班级学生成绩管理系统采用了模块化的程序设计结构,即将程序分为菜单模块、数据处理模块、学生信息管理模块、课程信息管理模块、合法性验证模块、结构体模块、查询模块这 7 大模块,实现了对单独模块的调试与修改,减少了开发难度并提升了可维护性。在程序设计上,按照要求绘制了程序流程图简化设计流程,提高开发速度。

为满足开发需求,程序中运用了 c 标准库函数以及链表数据结构。通过使用带有头节点的循环单链表实现学生信息、课程信息的增删读写查。c 标准库函数和文件读写函数实现了字符串的规律读写。

在程序的编写以及调试过程中遇到了一些问题,并加以修正。下面列出一些显著问题:

1.链表指针问题

最开始使用指针值的传递来进行对链表的修改,但这极大的消耗资源并带来不必要的编写难度,后来选择了指针引用/地址传递避免了指针的回传。

2.文件读写问题

由于文件读写指针的特性会导致某些字符在读写时丢失,采用指针复位的方法进行了优化。

3.循环条件问题

在链表遍历过程中循环条件很重要,针对头结点的特殊标记显然起了很大作用。

本次程序的设计与编写锻炼了我的代码编写能力以及调试能力。通过对指针的使用对 c/c++ 最为重要的特性加深了理解,因为时间关系,对于合法性验证模块做的并不是很完整,今后将继续完善此设计并尝试图形化界面的绘制。

♻️ 资源

在这里插入图片描述

**大小:**3.52MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87404242

猜你喜欢

转载自blog.csdn.net/s1t16/article/details/130025174