数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)

这篇具有很好参考价值的文章主要介绍了数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面:欢迎来到「湫歌」的博客。我是秋秋,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!

课程题目:学生成绩查询与分析系统

1、学生信息包括:学号、姓名、性别、四门课成绩

2、系统要求:分为两个版本系统,老师版和学生版,老师版需要输入密码进入老师版系统,在老师版系统中可以删除和修改学生成绩。学生版系统不需要输入密码,但不可以修改和删除学生成绩。

3、功能要求:如果选择“输入学生信息”,则显示“请输入学生姓名、学号、成绩”,并能输入;选择“学生姓名查找”,可以按照姓名查找该学生的各科成绩和平均分;选择“学生学号查找”,可以按照学号查找该学生的各科成绩和平均分,选择“按照姓名排序”,可以显示按姓名排序结果;选择“按照学号排序”,可以显示按学号排序结果;选择“按照总成绩排序”,可以显示按成绩排序结果;选择“按照学号查找学生信息”,可以按照学号输出学生姓名,学号,成绩;选择“按照姓名查找学生信息”,可以按照姓名输出学生姓名,学号,成绩;选择0,显示“谢谢使用”;选择其他则显示“输入错误,请重新输入)。

4、基本要求:用C语言实现程序设计;
利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
系统的各个功能模块要求用函数的形式实现;
界面友好(良好的人机交互),程序要有注释。
程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。

一、结构体与链表

1、学生信息结构体

//学生信息结构体
typedef struct
{
	int num;//学号
	char name[50];//姓名
	char sex[50];
	float chengji1, chengji2, chengji3, chengji4;
	float sum, average;
	int score;
}student;

2、链表结构体

//链表的结构体
typedef struct LNode
{
	student data;
	struct LNode* next;
}LNode, * LinkList;

二、总体功能设计

1、菜单页

系统主菜单 

//主菜单
void menu() {
	system("cls");
	printf("主菜单==============\n");
	printf("0.退出系统\n");
	printf("1.选择教师版系统\n");
	printf("2.选择学生版系统\n");
	printf("===================\n");
	printf("请选择(0-2)\n");
	printf("\n");
}

 老师版系统菜单

//老师版菜单
void teachermenu() {
	system("cls");
	printf("老师版系统==========\n");
	printf("0.返回主菜单\n");
	printf("1.输入学生信息\n");
	printf("2.按姓名查询学生信息\n");
	printf("3.按学号查找学生信息\n");
	printf("4.修改学生信息\n");
	printf("5.删除学生信息\n");
	printf("6.按姓名排序\n");
	printf("7.按学号排序\n");
	printf("8.按总成绩排序\n");
	printf("9.打印学生信息\n");
	printf("===================\n");
	printf("请选择(0-9)\n");
	printf("\n");
}

学生版系统菜单 

//学生版菜单
void studentmenu() {
	system("cls");
	printf("学生版系统==========\n");
	printf("0.返回主菜单\n");
	printf("1.按姓名查询学生信息\n");
	printf("2.按学号查找学生信息\n");
	printf("3.按姓名排序\n");
	printf("4.按学号排序\n");
	printf("5.按总成绩排序\n");
	printf("6.打印学生信息\n");
	printf("===================\n");
	printf("请选择(0-6)\n");
	printf("\n");
}

2、主要功能

功能一——输入学生信息

//输入学生信息
void input(LinkList& L) {
	FILE* outfile;
	outfile = fopen("student.txt", "a+");
	float sum, average;
	printf("请输入学生信息\n");
	LNode* p = new LNode;
	p = L;
	while (p->next != NULL) {
		p = p->next;
	}
	for (;;) {
		LNode* q = new LNode;
		q->next = NULL;
		printf("请输入学生学号\n");cin >> q->data.num;
		printf("请输入学生姓名\n");cin >> q->data.name;
		printf("请输入学生性别\n");cin >> q->data.sex;
		printf("请依次输入四门课程的成绩(python,java,c++,数据结构)\n");cin >> q->data.chengji1 >> q->data.chengji2 >> q->data.chengji3 >> q->data.chengji4;
		q->data.sum = q->data.chengji1 + q->data.chengji2 + q->data.chengji3 + q->data.chengji4;q->data.average = q->data.sum / 4.0;
		if (outfile == NULL) {
			printf("不能打开文件\n");
		}
		else {
			fprintf(outfile, "%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2, q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);
			fclose(outfile);
		}
		p->next = q;
		p = q;
		L->data.score++;
		int j;
		printf("若继续输入学生信息则输入1,返回主菜单则输入0\n");
		scanf("%d", &j);
		//若用户输入1,则继续输入学生信息
		if (j == 1) {N++;continue;}
		//若用户输入0,则返回主菜单
		else{break;}
	}
	system("pause");
}

功能二——按姓名查询学生信息

//姓名查找
int xingmingchazhao(LinkList& L) {
	char ch[50];
	bool flag = true;
	printf("请输入查询学生的姓名:");
	cin >> ch;
	LNode* p = new LNode;
	p = L;
	int m;
	while (p->next != NULL) {
		if (strcmp(p->data.name, ch) == 0) {

			printf("请输入要查询的学生成绩的学科\n");
			printf("0、返回上一页面 1、Python 2、Java 3、C++ 4、数据结构 5、总成绩 6、平均分 7、所有数据信息\n");
			scanf("%d", &m);
			if (m == 0 || m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7) {
				switch (m)
				{
				case 0:return 0;
				case 1: {printf("Python分数:%.2f\n", p->data.chengji1);break;}
				case 2: {printf("Java分数:%.2f\n", p->data.chengji2);break;}
				case 3: {printf("C++分数:%.2f\n", p->data.chengji3);break;}
				case 4: {printf("数据结构分数:%.2f\n", p->data.chengji4);break;}
				case 5: {printf("总成绩:%.2f\n", p->data.sum);break;}
				case 6: {printf("平均分:%.2f\n", p->data.average);
					break;
				}
				case 7: {printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
					printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t%.2f\n",
						p->data.num, p->data.name, p->data.sex, p->data.chengji1, p->data.chengji2,
						p->data.chengji3, p->data.chengji4, p->data.sum, p->data.average);
					break;
				}
				}
			}


			else {
				printf("输入错误请重新输入\n");
				system("pause");
			}



			flag = false;
		}
		p = p->next;
	}
	if (flag) {
		printf("系统没有该学生信息!");system("pause");
	}
	system("pause");
}

功能三——按学号查找学生信息

//学号查找
int xuehaochazhao(LinkList& L) {
	int ch;
	int m;
	bool flag = true;
	printf("请输入查询学生的学号:");
	cin >> ch;
	LNode* p = new LNode;
	p = L;
	while (p->next != NULL) {
		if (ch==p->data.num) {
			
			printf("请输入要查询的学生成绩的学科\n");
			printf("0、返回上一页面 1、Python 2、Java 3、C++ 4、数据结构 5、总成绩 6、平均分 7、所有数据信息\n");
			scanf("%d", &m);
			if (m == 0 || m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6||m==7) {
				switch (m)
				{
				case 0:return 0;
				case 1: {printf("Python分数:%.2f\n", p->data.chengji1);break;}
				case 2: {printf("Java分数:%.2f\n", p->data.chengji2);break;}
				case 3: {printf("C++分数:%.2f\n", p->data.chengji3);break;}
				case 4: {printf("数据结构分数:%.2f\n", p->data.chengji4);break;}
				case 5: {printf("总成绩:%.2f\n", p->data.sum);break;}
				case 6: {printf("平均分:%.2f\n", p->data.average);
					break;
				}
				case 7: {printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
					printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t\t%.2f\t%.2f\t%.2f\n",
						p->data.num, p->data.name, p->data.sex, p->data.chengji1, p->data.chengji2,
						p->data.chengji3, p->data.chengji4, p->data.sum, p->data.average);}
				}
			}
			else {
				printf("输入错误请重新输入\n");
				system("pause");
			}
			
			
			
			flag = false;
		}
		p = p->next;
	}
	if (flag) {
		printf("系统没有该学生信息!");system("pause");
	}
	system("pause");
}

功能四——删除学生信息

//删除信息
void cut(LinkList& L) {
	printf("请输入要删除的学生学号:");
	int n;
	bool flag = true;
	cin >> n;
	LNode* p = new LNode;
	p = L;

	while (p->next != NULL)
	{
		if (n == p->next->data.num)
		{
			p->next = p->next->next;
			p = L;            //又从头开始遍历,避免忽略掉连续数据相同的情况
			flag = false;
			continue;

		}
		p = p->next;
	}
	if (flag) {
		printf("系统没有该学生信息!\n");
	}
	else {
		printf("删除成功!\n");
	}
	system("pause");
}

功能五——修改学生信息

//修改成绩
void change(LinkList& L) {
	printf("请输入要修改的学生学号:");
	int n;
	bool flag = true;
	cin >> n;
	LNode* p = new LNode;
	p = L;
	while (p != NULL)
	{
		if (n == p->data.num) {
			printf("请输入修改的成绩:\n");
			printf("该学生姓名为:%s\n", p->data.name);
			printf("Python成绩: %.2f,新成绩为:", p->data.chengji1);cin >> p->data.chengji1;
			printf("Java成绩: %.2f,新成绩为:", p->data.chengji2);cin >> p->data.chengji2;
			printf("C++成绩: %.2f,新成绩为:", p->data.chengji3);cin >> p->data.chengji3;
			printf("数据结构成绩: %.2f,新成绩为:", p->data.chengji4);cin >> p->data.chengji4;
			printf("修改成功!\n");
			system("pause");
			flag = false;
		}
		p = p->next;
	}
	if (flag) {
		printf("系统没有该学生信息!");
	}
	system("pause");
}

功能六——按姓名排序

//按姓名排序
void xingmingpaixu(LinkList& L) {
	LNode* Q = new LNode;
	Q->next = NULL;
	paixubeifen(L);
	duqubeifen(Q);
	LNode* p = new LNode;
	p = Q;
	LNode* max = new LNode;
	max=Q;
	if (Q->next == NULL) {
		printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
		printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
			Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
			Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);
	}
	else {
		printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t总成绩\t平均分\n");

		for (;p != NULL;p = p->next) {
			for (max = p->next;max != NULL;max = max->next) {
				if (strcmp(p->data.name,max->data.name)<0) {
					student tmp = p->data;
					p->data = max->data;
					max->data = tmp;
				}
			}
		}
		while (Q->next != NULL) {
			Q = Q->next;
			printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
				Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);
			
		}
	}
	system("pause");
}

功能七——按学号排序

//按学号排序
void xuehaopaixu(LinkList& L) {
	LNode* Q = new LNode;
	Q->next = NULL;
	paixubeifen(L);
	duqubeifen(Q);
	LNode* p = new LNode;
	p = Q;
	LNode* max = new LNode;
	if (Q->next == NULL) {
		printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
		printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
			Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
			Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);
	}
	else {
		printf("学号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t成绩4\t总成绩\t平均分\n");

		for (;p != NULL;p = p->next) {
			for (max = p->next;max != NULL;max = max->next) {
				if (max->data.num < p->data.num) {
					student tmp = p->data;
					p->data = max->data;
					max->data = tmp;
				}
			}
		}
		while (Q->next != NULL) {
			Q = Q->next;
			printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
				Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);

		}
	}
	system("pause");
}

功能八——按总成绩排序

//按总成绩排序
void zongchengjipaixu(LinkList& L) {
	LNode* Q = new LNode;
	Q->next = NULL;
	paixubeifen(L);
	duqubeifen(Q);
	LNode* p = new LNode;
	p = Q;
	LNode* max = new LNode;
	if (Q->next == NULL) {
		printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
		printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
			Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
			Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);
	}
	else {
		printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");

		for (;p != NULL;p = p->next) {
			for (max = p->next;max != NULL;max = max->next) {
				if (max->data.sum > p->data.sum) {
					student tmp = p->data;
					p->data = max->data;
					max->data = tmp;
				}
			}
		}
		while (Q->next != NULL) {	
			printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				Q->data.num, Q->data.name, Q->data.sex, Q->data.chengji1, Q->data.chengji2,
				Q->data.chengji3, Q->data.chengji4, Q->data.sum, Q->data.average);
			Q = Q->next;
		}
	}
	system("pause");
}

功能九——打印学生信息

//打印学生信息
void dayingxueshengxinxi(LinkList& L) {
	if (L->data.score == 0) {
		printf("该系统暂时没有学生信息\n");
	}
	else {
		LNode* q = new LNode;
		q = L;
		printf("学号\t姓名\t性别\tPython\tJava\tC++\t数据结构\t总成绩\t平均分\n");
		while (q->next != NULL) {

			q = q->next;
			printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2,
				q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);
		}
	}
	system("pause");
}

//存入文件
void save(LinkList& L) {
	FILE* outfile;
	outfile = fopen("student.txt", "w+");
	LNode* q = new LNode;
	q = L;
	if (outfile == NULL) {
		printf("不能打开该文件\n");
		_getch();
	}
	else {
		while (q->next != NULL) {
			q = q->next;
			fprintf(outfile,"%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",
				q->data.num, q->data.name, q->data.sex, q->data.chengji1, q->data.chengji2,
				q->data.chengji3, q->data.chengji4, q->data.sum, q->data.average);
		}
	}
	fclose(outfile);
}

相关资源及源代码:(1条消息) 数据结构课程设计c语言学生管理系统(简单详细版)-C/C++文档类资源-CSDN文库文章来源地址https://www.toymoban.com/news/detail-497870.html

到了这里,关于数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 定义学生信息结构体,包含学生的姓名、学号、年龄、成绩等信息。 建立学生信息管理系统的主菜单,包括录入学生信息、查询学生信息、修改学生信息、删除学生信息等功能。 实现录入学生信息的功能,可以根据用户输入...

    下面是关于学生信息结构体、学生信息管理系统主菜单以及其中的功能的 C 语言实现示例: ``` #include stdio.h #include string.h #define MAX_STUDENT_NUM 1000 // 学生信息结构体 struct Student { char name[100]; // 姓名 int id; // 学号 int age; // 年龄 float score; // 成绩 }; // 学生信息数组 struct Student stu

    2024年02月04日
    浏览(37)
  • C#学生选课及成绩查询系统

    学生选课及成绩查询系统是一个学校不可缺少的部分,传统的人工管理档案的方式存在着很多的缺点,如:效率低、保密性差等,所以开发一套综合教务系统管理软件很有必要,它应该具有传统的手工管理所无法比拟的优点,如:检索迅速、查找方便、可靠性高、存储量大、

    2024年02月07日
    浏览(29)
  • 10-23 查询平均成绩以上的课程(MSSQL)

    本题目要求编写SQL语句, 查询每个同学超过他选修的平均成绩的课程。 请使用: 1)用相关子查询实现 2)使用派生表实现。 表结构: 请在这里写定义表结构的SQL语句。例如: -- 课程表 CREATE TABLE  cou  (      cno  char(4) NOT NULL,    cname  nvarchar(30) NOT NULL,    credit  smallint D

    2024年02月06日
    浏览(28)
  • 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一、设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程。 通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运

    2024年02月09日
    浏览(40)
  • SQL初学、精通者必看:10个学生成绩查询史上最强技巧全攻略

    本文提供了一个含有学生、成绩、课程和教师信息的完整数据库,并为读者提供了 SQL 查询练习题,还包含了练习的答案以及解析。这些题目旨在帮助有一定SQL使用经验的读者更深入地了解学生成绩相关的知识,也有助于初学者提高其SQL使用技能。这些题目涉及学生成绩排名

    2024年02月06日
    浏览(37)
  • MySQL---多表联合查询(上)(多表关系、外键约束、学生成绩多表关系、交叉连接查询)

    1. 多表关系 MySQL 多表之间的关系可以概括为: 一对一:        比如:一个学生只有一张身份证;一张身份证只能对应一学生。        实现原则:在任一表中添加唯一外键,指向另一方主键,确保一对一关系。         一般一对一关系很少见,遇到一对一关系的表最好是

    2024年02月05日
    浏览(43)
  • 【期末课程设计】学生成绩管理系统

    因其独特,因其始终如一 文章目录 一、学生成绩管理系统介绍 二、学生成绩管理系统设计思路 三、源代码 1. test.c  2. Student Management System.c 3.Stu_System.c 4.Teacher.c 5.Student Management System.h   前言: 学生成绩管理系统含教师登录入口和学生登录入口,可实现学生信息的添加,删

    2024年02月16日
    浏览(30)
  • Java课程设计——学生成绩管理系统

    1 需求分析 1.1 需求分析概述 需求分析是开发软件系统的重要环节,是系统开发的第一步和基础环节。通过需求分析充分认识系统的目标、系统的各个组成部分、各部分的任务职责、工作流程、工作中使用的各种数据及数据结构、各部门的业务关系和数据流程等, 为系统设计

    2024年02月03日
    浏览(62)
  • C++课程设计——学生成绩管理系统

    今天清理电脑偶尔发现一个我刚学编程时用c++写的一份课程设计,使用到简单的链表,结构体,c++类与对象的知识——学生成绩管理系统。 ~~ 系统结构: 管理员模式 教师模式 学生模式 实现了对学生成绩及信息的增删改查以及排序。 效果图 主菜单 管理员模式菜单 源代码

    2024年02月16日
    浏览(29)
  • C语言课程设计-学生成绩管理系统

    需求分析: 1.设计题目:学生成绩管理系统 2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找 概要设计 1. 功能模块图 详细设计 1. 流程图 测试结果 :列出所有功能的运行界面,并作文字说明。 1.录入成绩:录入3个人的学号和各科成绩 2.每门课程

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包