精华内容
下载资源
问答
  • 由于顺序结构存储时用的是一段连续的存储空间,不适合存储大量的信息量,因此本人使用单链表的数据结构来对学生的信息进行管理。本次课程设计中,学生的信息分为了四大项,分别是学生的学号、姓名、年龄、成绩,这四...
  • C语言开发简单的学生成绩管理系统(附源码)

    万次阅读 多人点赞 2019-04-15 21:08:22
    学生成绩管理系统 开发语言:C语言 开发工具:Visual Studio 2019 开发时间:2019.4.14 开发者:summer @一、系统使用展示 @二、系统功能 @三、菜单 @四、录入学生信息 @五、打印学生信息 @六、保存学生信息 @七、...

    学生成绩管理系统

    开发语言:C语言
    开发工具:Visual Studio 2019
    开发时间:2019.4.14
    开发者:summer

    商业合作可淘宝搜索店铺“程序员夏天的小店”

    @一、系统使用展示

    @二、系统功能

    @三、菜单

    @四、录入学生信息

    @五、打印学生信息

    @六、保存学生信息

    @七、读取学生信息

    @八、统计所有学生人数

    @九、查找学生信息

    @十、修改学生信息

    @十一、删除学生信息

    @十二、退出系统

    @十三、出错

    一、系统使用展示

    Alt

    二、系统功能

    1. 系统功能介绍
    1.录入学生信息:用户可以自由输入学生信息到系统中。
    2.打印学生信息:格式化展示系统中的学生信息。
    3.保存学生信息:将系统中的学生信息保存到本地文档。
    4.读取学生信息:读取本地文档中的学生信息并显示。
    5.统计所有学生人数
    6.查找学生信息:根据用户给定的信息(学号)在系统中查找该学生的信息
    7.修改学生信息
    8.删除学生信息
    0.退出系统
    
    1. 系统main函数,while循环在外,系统程序能够持续运行,switch判断语句进行功能选择与函数切换。
    int main() {
    	while (1)
    	{
    		//打印菜单
    		Menu();
    		//读取一个字符 整数,字符在内存中映射为ASCII码
    		char ch = _getch();
    
    		switch (ch)
    		{
    		case '1'://1.录入学生信息
    			InputStudent();
    			break;
    		case '2'://2.打印学生信息
    			PrintStudent();
    			break;
    		case '3'://3.保存学生信息
    			SaveStudent();
    			break;
    		case '4'://4.读取学生信息
    			ReadStudent();
    			break;
    		case '5'://5.统计所有学生人数
    			CountStudent();
    			break;
    		case '6'://6.查找学生信息
    			FindStudent();
    			break;
    		case '7'://7.修改学生信息
    			ChangeStudent();
    			break;
    		case '8'://8.删除学生信息
    			DeleteStudent();
    			break;
    		case '0'://0.退出系统
    			return 0;
    			break;
    		default:
    			printf("输入有误,没有该功能\n\n");
    			system("pause");  //暂停
    			system("cls");    //清屏
    			break;
    		}
    	}
    
    	return 0;
    }
    

    三、菜单

    1. 菜单显示
    //菜单
    void Menu() {
    	printf("*************************************************\n");
    	printf("*\t欢迎使用高校学生成绩管理系统V1.0\t*\n");
    	printf("*\t\t请选择功能\t\t\t*\n");
    	printf("*************************************************\n");
    	printf("*\t\t1.录入学生信息\t\t\t*\n");
    	printf("*\t\t2.打印学生信息\t\t\t*\n");
    	printf("*\t\t3.保存学生信息\t\t\t*\n");
    	printf("*\t\t4.读取学生信息\t\t\t*\n");
    	printf("*\t\t5.统计所有学生人数\t\t*\n");
    	printf("*\t\t6.查找学生信息\t\t\t*\n");
    	printf("*\t\t7.修改学生信息\t\t\t*\n");
    	printf("*\t\t8.删除学生信息\t\t\t*\n");
    	printf("*\t\t0.退出系统\t\t\t*\n");
    	printf("*************************************************\n");
    }
    
    1. 打印菜单

    scanf()、getchar()输入后均需要按enter,而getch()不用

    	//打印菜单
    	Menu();
    	//读取一个字符 整数,字符在内存中映射为ASCII码
    	char ch = _getch();
    

    四、录入学生信息

    1. 定义学生结构体、链表节点结构体
    //定义一个学生
    typedef struct tagStudent {
    	char szName[20];	//姓名
    	char szSex[4];		//性别
    	int  nAge;			//年龄
    	int  nStuNo;		//学号
    	int  nScore;		//成绩
    }Student;
    
    //链表
    //节点
    typedef struct tagNode
    {
    	Student stu;			//学生信息
    	struct tagNode* pNext;	//指向下一个节点
    }Node;
    
    //创建头节点
    Node* g_pHead = NULL;		//指向头节点
    
    1. 利用学生结构体,以及链表操作输入学生信息
    //1.录入学生信息
    void InputStudent() {
    	//创建一个人,在堆中分配内存
    	Node* pNewNode = (Node*)malloc(sizeof(Node));
    	//指针下一个指向空
    	pNewNode->pNext = NULL;
    
    	//查找链表的尾结点
    	Node* p = g_pHead;
    	while (g_pHead != NULL && p->pNext != NULL)
    	{
    		p = p->pNext;
    	}
    
    	//把节点插到链表的尾节点
    	if (g_pHead == NULL) {
    		g_pHead = pNewNode;
    	}
    	else {
    		p->pNext = pNewNode;
    	}
    
    	//录入学生信息
    	printf("请输入学生姓名:\n");
    	scanf_s("%s", pNewNode->stu.szName, sizeof(pNewNode->stu.szName));
    	printf("请输入性别:\n");
    	scanf_s("%s", pNewNode->stu.szSex, sizeof(pNewNode->stu.szSex));
    	printf("请输入学生年龄:\n");
    	scanf_s("%d", &pNewNode->stu.nAge);
    	printf("请输入学号:\n");
    	scanf_s("%d", &pNewNode->stu.nStuNo);
    	printf("请输入成绩:\n");
    	scanf_s("%d", &pNewNode->stu.nScore);
    
    	printf("学生信息录入成功。\n\n");
    	system("pause");
    	system("cls");
    }
    

    五、打印学生信息

    1. 读取链表结构,输出学生信息。先进行判空处理,如果无学生信息则输出提示信息,反之则正确输出学生信息。
    //2.打印学生信息
    void PrintStudent() {
    
    	system("cls");
    	//遍历链表
    	Node* p = g_pHead;
    	if (p == NULL) {
    		printf("系统中暂无学生信息,请录入后再来打印查看。\n\n");
    	}
    	else {
    		printf("*********************************************************************************\n");
    		printf("*\t\t\t欢迎使用高校学生成绩管理系统V1.0\t\t\t*\n");
    		printf("*********************************************************************************\n");
    		printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    		printf("*********************************************************************************\n");
    
    		while (p != NULL)
    		{
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    
    			//下一个节点
    			p = p->pNext;
    			printf("*********************************************************************************\n");
    		}
    	}
    
    	system("pause");
    	system("cls");
    }
    

    六、保存学生信息

    1. 利用文件对学生信息进行存储
    //3.保存学生信息
    void SaveStudent() {
    	//打开文件
    	FILE* pFile;
    	pFile = fopen(".\\stuinfo.dat", "w");
    	
    	if (pFile == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    
    	//写入数据
    	Node* p = g_pHead;
    	while (p != NULL)
    	{
    		fwrite(&p->stu, sizeof(Node), 1, pFile);
    		p = p->pNext;
    	}
    
    	//关闭文件
    	fclose(pFile);
    
    	printf("数据保存成功。\n");
    	system("pause");
    	system("cls");
    }
    
    1. fopen在vs中会报错,解决方式

    (1)按照vs的提示,将fopen换成fopen_s

    (2)不修改函数,仅仅修改项目的属性。因为fopen_s是一种Microsoft的函数,若纯做Windows开发则直接改为_s也无妨,但是我们尽量还是用标准C++比较好,这样代码有较好的移植性。

    具体操作:

    右键工程名–>属性–>C/C++–>预处理器–>预处理器定义,编辑右边输入框加入: _CRT_SECURE_NO_WARNINGS

    保存(注意用分号隔开)。

    七、读取学生信息

    1. 打开存储学生信息的文本,单个单词读取,判断非分隔符或者空时则赋值给链表中的节点,读取完毕后,直接调用PrintStudent()函数进行打印结果。
    //4.读取学生信息
    void ReadStudent() {
    	system("cls");
    
    	//打开文件
    	FILE* pFile;
    	pFile = fopen(".\\stuinfo.dat", "r");
    
    	if (pFile == NULL) {
    		printf("打开文件失败。\n");
    		return;
    	}
    	
    	//创建一个人,在堆中分配内存
    	Node* p = (Node*)malloc(sizeof(Node));
    	p->pNext = NULL;
    	//重新建立链表
    	g_pHead = p;
    
    	//逐个单词读入文本内容
    	char str[200];
    	int i = 0;
    	while (fscanf(pFile, "%s", str) != EOF) {  //读文件 
    		//单词不是*或者空时,进行赋值
    		if (strcmp(str, "*") && str != NULL) {
    			switch (i)
    			{
    			case 0:
    				p->stu.nStuNo = atoi(str);
    				break;
    			case 1:
    				strcpy(p->stu.szName, str);
    				break;
    			case 2:
    				strcpy(p->stu.szSex, str);
    				break;
    			case 3:
    				p->stu.nAge = atoi(str);
    				break;
    			case 4:
    				p->stu.nScore = atoi(str);
    				break;
    			default:
    				Node* pNewNode = (Node*)malloc(sizeof(Node));
    				pNewNode->pNext = NULL;
    				p->pNext = pNewNode;
    				p = pNewNode;
    				p->stu.nStuNo = atoi(str);
    				i = 0;
    				break;
    			}
    			i++;
    		}
    	}
    	//打印读取结果
    	PrintStudent();
    }
    
    1. 读取文本时,将内容全部赋值给char数组,所有赋值时需特殊处理。
    • char数组赋值给整数

      在<stdlib.h>头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数的char数组转化为整数,和将整数按位数分解依次存入char数组中。

    • char数组赋值给char数组

      用strcpy函数!

      原型声明:extern char *strcpy(char *dest,char *src);

      头文件:string.h

      功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

      说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

      返回指向dest的指针。

      注:不能使用memcpy(a, b, strlen(b)),会导致中文乱码。

    八、统计所有学生人数

    1. 设置计数器,遍历链表
    //5.统计所有学生人数
    void CountStudent() {
    	int countStu = 0;
    
    	//遍历链表
    	Node* p = g_pHead;
    	while (p != NULL)
    	{
    		countStu++;
    		p = p->pNext;
    	}
    	printf("学生总人数:%d\n\n", countStu);
    
    	system("pause");
    	system("cls");
    }
    

    九、查找学生信息

    1. 本次查找以学号为示例,改用姓名等信息查询流程基本一致。

      遍历链表,如果有符合信息的学生则打印,反之则继续下一个节点,若系统中无该学生信息,给予用户无结果提示。

    //6.查找学生信息
    void FindStudent() {
    	system("cls");
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入查找学生学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    		}
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十、修改学生信息

    1. 可参考查找学生信息代码段,在查找后进行修改即可
    //7.修改学生信息
    void ChangeStudent() {
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入欲修改学生的学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			//修改学生信息
    			printf("请输入学生姓名:\n");
    			scanf_s("%s", p->stu.szName, sizeof(p->stu.szName));
    			printf("请输入性别:\n");
    			scanf_s("%s", p->stu.szSex, sizeof(p->stu.szSex));
    			printf("请输入学生年龄:\n");
    			scanf_s("%d", &p->stu.nAge);
    			printf("请输入学号:\n");
    			scanf_s("%d", &p->stu.nStuNo);
    			printf("请输入成绩:\n");
    			scanf_s("%d", &p->stu.nScore);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    			printf("学生信息修改成功,请注意及时保存。\n\n");
    		}
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息,无法进行修改。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十一、删除学生信息

    1. 仍然以查找学生信息操作为基础,以学号为线索,查找到则进行删除,未查找到则进行错误提示,删除时需要区分当前节点是头结点、尾节点或者中间节点,不同节点操作不同,同时该删除仅作用于本次操作,需保存学生信息才能长久生效。
    //8.删除学生信息
    void DeleteStudent() {
    	system("cls");
    	//以学号为查找示例,其他信息查找流程基本相似
    	int stuNum;
    	printf("请输入删除学生的学号:");
    	scanf("%d", &stuNum);
    	//遍历链表查找,查找到后进行信息显示
    	Node* p = g_pHead;
    	//记录前一个节点,删除时方便操作
    	Node* beforeNode = g_pHead;
    
    	//对表头进行展示一次
    	bool isShowHead = false;
    	//记录是否有找到该学号的学生信息
    	bool isFindStu = false;
    	while (p != NULL)
    	{
    		if (stuNum == p->stu.nStuNo) {
    			if (!isShowHead) {
    				printf("*********************************************************************************\n");
    				printf("*\t学号\t*\t姓名\t*\t性别\t*\t年龄\t*\t成绩\t*\n");
    				printf("*********************************************************************************\n");
    				isShowHead = true;
    			}
    			printf("*\t%d\t*\t%s\t*\t%s\t*\t%d\t*\t%d\t*\n",
    				p->stu.nStuNo,
    				p->stu.szName,
    				p->stu.szSex,
    				p->stu.nAge,
    				p->stu.nScore
    			);
    			isFindStu = true;
    			printf("*********************************************************************************\n");
    
    			//删除节点为头节点
    			if (p == g_pHead) {
    				g_pHead = p->pNext;
    			}
    			//删除节点为尾节点
    			else if (p->pNext == NULL) {
    				p = beforeNode;
    				p->pNext = NULL;
    			}
    			//删除节点为中间节点
    			else {
    				beforeNode->pNext = p->pNext;
    			}
    			printf("删除成功,请记得保存。\n\n");
    		}
    		beforeNode = p;
    		p = p->pNext;
    	}
    
    	if (!isFindStu) {
    		printf("学号输入有误,系统中暂无该学生信息,无法进行删除操作。\n\n");
    	}
    
    	system("pause");
    	system("cls");
    }
    

    十二、退出系统

    直接在选择0时,设置return即可。

    十三、出错

    用户输入有误时,进行提示信息输出即可。

    	printf("输入有误,没有该功能\n\n");
    	system("pause");  //暂停
    	system("cls");    //清屏
    

    展开全文
  • // 线性表__学生成绩管理.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 /* 线性表是数据结构中最简单最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响 着后续知识...

    // 线性表__学生成绩管理.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。
    /*
    线性表是数据结构中最简单最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响
    着后续知识的学习。本章通过四个模拟项目来学习线性表的顺序和链式存储结构,首先通过使用有关数组的操作实现学生成绩管理,其次通过使用有关线性链表的操作实现考试报名管理,然后通关过是用循环链表的操作
    实现约瑟夫生者死者游戏。
    1.1 学生成绩管理
    1.1.1项目简介
    学生成绩管理是学校教务部门的日常工作的重要组成部分,其处理信息量很大。本项目是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。
    1.1.2设计思路
    本项目的实质是完成对学生成绩信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
    1.1.3数据结构
    本项目的数据十一组学生的成绩信息,每条学生的成绩信息由序号、姓名和成绩来组成,这组学生的成绩信息具有相同特性,属于同一数据对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据具有线性表中数据元素的性质,所以该系统的数据采用线性表来
    存储。
    顺序表示线性表的顺序存储结构,是指一组连续的内存单元以此存放线性表的数据元素。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点。本项目可以采用顺序表的线性表顺序存储结构。
    若一个数据元素仅占一个存储单元,其存储方式如下:
    Loc(ai)=loc(a1)+(i-1)
    假设线性表中每个元素占用k个存储单元,那么在顺序表中,线性表的第i个元素的存储位置与第1个元素的存储位置的关系是:
    Loc(ai)=loc(a1)+(i-1)*k
    这里Loc(ai)是第i个元素的存储位置,loc(a1)是第一个元素的存储位置,也称为线性表的基址。显然,顺序表便于进行随机访问,故线性表的顺序存储结构是一种随机存储结构。
    顺序表适宜于做查找这样的静态的操作;顺序存储的优点是存储密度大,存储空间利用率高。缺点是插入或删除元素时不方便。
    由于C语言的数组类型也有随机存储的特点,一维数组的机内表示就是顺序结构。因袭,可用C语言的一维数组实现线性表的顺序存储。数组实现的线性表的顺序存储的优点是可以随机存取表中任一元素O(1),存储空间使用紧凑;缺点是在插入,删除某一元素时,需要移动大量元素O(n),预先分配空间按最大空间分配,利用不充分,表容量难以扩充。
    用结构体类型定义每个学生数据,故该数组中的每个数据的结构可描述为:
    typedef struct STU
    {
    char stuno[10];//学号
    char name[10];//姓名
    float score;//成绩
    }ElemType;

    完整的程序清单:
    //1.1.4 程序清单
    #include
    #include
    #include <malloc.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>

    using namespace std;

    #define MaxListSize 20
    #define EQUAL 1

    typedef struct STU
    {
    char stuno[10];//学号
    char name[10];//姓名
    float score;//成绩
    int age;
    }ElemType;

    class List
    {
    public:
    //输入学生的数据:
    void init(List **L, int ms);
    //删除所有学生数据
    void DsatoryList(List &L) { free(&L);}
    //将顺序表置为空
    void ClearList() { length = 0; }
    //判断顺序表是否为空表
    bool ListEmpty()
    {
    return length == 0;
    }
    //判断顺序表是否为满
    bool ListFull()
    {
    return length == MaxSize;
    }
    //删除某个学生数据
    bool ListDelete(int,ElemType &e);
    //遍历顺序表
    void ListTraverse();
    //返回顺序表的长度
    int ListLength();
    //学生数据查询
    void GetElem(int, ElemType *);
    //修改学生数据
    bool UpdateList(ElemType&e, ElemType&e1);
    //添加学生数据
    bool ListInsert(int, ElemType &);
    //对学生数据进行排序
    void printlist(int);
    //???
    bool EqualList(ElemType *, ElemType *);
    //???
    bool LocateElem(ElemType e, int type);
    //???
    bool Less_EqualList(ElemType *, ElemType *);

    private:
    //线性表的数组表示
    ElemType elem[MaxListSize];
    int length;
    int MaxSize;

    };

    void List::init(List**L,int ms)
    {
    L = (List)malloc(sizeof(List));
    (*L)->length = 0;
    (*L)->MaxSize = ms;
    }

    int List::ListLength()
    {
    return length;
    }

    bool List::ListDelete(int mark, ElemType &e)
    {
    int i, j;
    if (ListEmpty())return false;
    if (mark > 0)
    {
    //删除表头元素
    e = elem[0];
    for (i = 1; i < length; i++)
    elem[i - 1] = elem[i];
    }
    else
    {
    //删除表尾元素
    if (mark < 0)e = elem[length - 1];
    else
    {//删除值为e的元素
    for (i = 0; i < length; i++)
    if (strcmp(elem[i].name, e.name) == 0)break;
    if (i >= length)return false;
    else e = elem[i];
    for (j = i + 1; j < length; j++)
    elem[j - 1] = elem[j];
    }

    }
    length--;
    return true;
    

    }

    void List::ListTraverse()
    {
    for (int i = 0; i < length; i++)
    {
    cout << setw(8) << elem[i].name;
    cout << setw(10) << elem[i].stuno;
    cout << setw(9) << elem[i].score<<endl;

    }
    

    }

    void List::GetElem(int i, ElemType *e)
    {
    *e = elem[i];
    }

    bool List::EqualList(ElemType *e1,ElemType *e2)
    {
    if (strcmp(e1->name, e2->name))
    return false;
    if (strcmp(e1->stuno, e2->stuno))
    return false;
    if (e1->score != e2->score)
    return false;
    return true;
    }
    bool List::Less_EqualList(ElemType *e1, ElemType *e2)
    {
    if (strcmp(e1->name, e2->name) <= 0)return true;
    else return false;
    }

    bool List::LocateElem(ElemType e, int type)
    {
    int i;
    switch (type)
    {
    case EQUAL:
    for (i = 0; i < length; i++)
    {
    if (EqualList(&elem[i], &e))
    return true;
    break;
    default:break;
    }

    }
    return false;
    

    }

    //修改学生数据
    bool List::UpdateList(ElemType &e, ElemType &e1)
    {
    for (int i=0;i<length;i++)
    if (strcmp(elem[i].name, e.name) == 0)
    {
    elem[i] = e1; return true;
    }
    return false;
    }

    bool List::ListInsert(int i, ElemType &e)
    {
    ElemType *p, *q;
    if (i<1 || i>length + 1)return false;
    q = &elem[i - 1];
    for (p = &elem[length - 1]; p >= q; --p)
    *(p + 1) = *p;
    *q = e;
    ++length;
    return true;

    }

    //对学生成绩按升序或降序输出
    void List::printlist(int mark)
    {
    int* b = new int[length];
    int i, k;
    cout << " 姓名 学号 成绩\n";
    if (mark != 0) {
    for (i = 0; i < length; i++) b[i] = i;
    for (i = 0; i < length; i++) {
    k = i;
    for (int j = i + 1; j < length; j++) {
    if (mark == 1 && elem[b[j]].score < elem[b[k]].score) k = j;
    if (mark == -1 && elem[b[k]].score < elem[b[j]].score) k = j;
    }
    if (k != i) { int x = b[i]; b[i] = b[k]; b[k] = x; }
    }
    for (int i = 0; i < length; i++)
    {
    cout << setw(8) << elem[b[i]].name;
    cout << setw(10) << elem[b[i]].stuno;
    cout << setw(9) << elem[b[i]].age;
    cout << setw(8) << elem[b[i]].score << endl;
    }
    }
    else {
    for (i = 0; i < length; i++)
    {
    cout << setw(8) << elem[i].name;
    cout << setw(10) << elem[i].stuno;
    cout << setw(9) << elem[i].age;
    cout << setw(8) << elem[i].score << endl;
    }
    }
    }
    void main()
    {
    cout << “linelist1m.cpp运行结果:\n”;
    ElemType e, e1, e2, e3, e4, e5, e6;
    List *La, *Lb, *Lc;
    int k;
    cout << “首先调用插入函数.\n”;
    La->init(&La, 4);
    strcpy(e1.name, “stu1”);
    strcpy(e1.stuno, “100001”);
    e1.age = 22;
    e1.score = 88;
    La->ListInsert(1, e1);
    strcpy(e2.name, “stu2”);
    strcpy(e2.stuno, “100002”);
    e2.age = 21;
    e2.score = 79;
    La->ListInsert(2, e2);
    strcpy(e3.name, “stu3”);
    strcpy(e3.stuno, “100003”);
    e3.age = 19;
    e3.score = 87;
    La->ListInsert(3, e3);
    La->printlist(0);
    cout << “表La长:” << La->ListLength() << endl;
    cin.get();

    Lb->init(&Lb, 4);
    strcpy(e4.name, "zmofun");
    strcpy(e4.stuno, "100001");
    e4.age = 20;
    e4.score = 94;
    Lb->ListInsert(1, e4);
    strcpy(e5.name, "bobjin");
    strcpy(e5.stuno, "100002");
    e5.age = 23;
    e5.score = 69;
    Lb->ListInsert(2, e5);
    strcpy(e6.name, "stu1");
    strcpy(e6.stuno, "100001");
    e6.age = 22;
    e6.score = 88;
    Lb->ListInsert(3, e6);
    Lb->printlist(0);
    cout << "表Lb长:" << Lb->ListLength() << endl;
    cin.get();
    
    k = Lc->ListDelete(-1, e6);
    if (k == 0) cout << "删除失败!\n";
    else cout << "删除成功!\n";
    cout << "输出表Lc:\n";
    Lc->printlist(0);
    cin.get();
    cout << "按成绩升序输出表Lc\n";
    Lc->printlist(1); cin.get();
    cout << "按成绩降序输出表Lc\n";
    Lc->printlist(-1); cin.get();
    

    }

    展开全文
  • 学生成绩数据结构

    千次阅读 2018-06-10 13:35:24
    如果要写程序表达一个班级的很多个学生的很多门课的成绩,应该如何表达这些数据?如果我们希望通过学生的姓名,可以找到他的所有的成绩,而每一门课的成绩,是由课程名称和分数构成的。而如果我们还希望这个程序能找...

    如果要写程序表达一个班级的很多个学生的很多门课的成绩,应该如何表达这些数据?

    如果我们希望通过学生的姓名,可以找到他的所有的成绩,而每一门课的成绩,是由课程名称和分数构成的。

    而如果我们还希望这个程序能找出某一门课的全部学生的成绩应该怎样做呢?

    注意,并非所有的学生都参加了所有的课程。

    package hello;

    import java.util.HashMap;

     public class Main {
        
        private HashMap<String, HashMap<String, Integer>> stuname = new  HashMap<String, HashMap<String, Integer>>();
            
        public Main() {
        }
        
        public void setCourselist(String studentname,String coursename, Integer score) {
                    
            HashMap<String, Integer> map = (HashMap<String, Integer>) stuname.get(studentname);
            
            if(map == null) {
                map = new HashMap<String, Integer>();
                stuname.put(studentname, map);
            }
            map.put(coursename, score);
            
        }
        
        void listofstu(String name) {
            System.out.println(name+"'s course and score are:");
            
            HashMap<String, Integer> map = stuname.get(name);
            if (map == null) {
                System.out.println("wrong name, please input again:/n");
            }
            
            for (String course : map.keySet()) {
                System.out.println(course + " : "+map.get(course));
            }
        }
        
        
        void listofcourse(String course) {
            System.out.println(course+"\n student and score are:");
            for (String studentname : stuname.keySet()) {
                HashMap<String, Integer> map = stuname.get(studentname);
                if (map == null) break;
                else    
                for (String coursename : map.keySet()) {
                if (course == coursename){
                System.out.println(studentname + " : "+map.get(coursename));
                }
            }
            }
        }
        
         public static void main(String[] args) {
        Main stu1 = new Main();
                    
            stu1.setCourselist("A","Math",90);
            stu1.setCourselist("A","Chinese",91);
            stu1.setCourselist("A","English",93);
            stu1.setCourselist("B","Math",94);
            stu1.setCourselist("B","Chinese",95);
            stu1.setCourselist("B","English",96);
            stu1.setCourselist("C","Chinese",97);
            stu1.setCourselist("C","English",98);
            stu1.listofstu("A");
            System.out.println("-----------------");
            stu1.listofstu("B");
            System.out.println("-----------------");
            stu1.listofcourse("Math");
       }
     }
    展开全文
  • 数据结构--学生成绩管理

    千次阅读 2017-01-01 16:14:08
    /* ... * All rights reserved.... * 作 者:刘光辉 * 完成日期:2017年1月1日 ...*问题描述: 学生成绩管理是学校教务...对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据; 学生数
    /*  
    * Copyright (c)2017,烟台大学计算机与控制工程学院  
    * All rights reserved.  
    * 作    者:刘光辉
    * 完成日期:2017年1月1日    
    *问题描述:  学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。本项目是
    对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:输入学生数据;输出学生数据;
    学生数据查询;添加学生数据;修改学生数据;删除学生数据。
    本项目的实质是完成对学生成绩信息的建立、查找、插入、修改、删除等功能,可以首
    先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函
    数以验证各个函数功能并得出运行结果。

    */    

    源程序:

    #include<iostream.h>  
    #include<string.h>  
    #include<stdlib.h>  
    #include<conio.h>  
    #include<stdio.h>  
    #include<windows.h>  
      
    const MaxListSize=100;//设置数组长度为100  
    //student类  
    class student  
    {  
    private:  
        int num;  //学号
        int grade[5];  //学生各科编号
        float sum;   // 学生各科成绩总和
        float ping;   //学生总成绩平均值
        char name[20];  //学生姓名
        int age;    //学生年龄
    public:  
        student(){}  
        void setnum(int nu){num=nu;}  
        int getnum(){int n;n=num;return n;}  
        void setgrade(int a,int b){grade[b]=a;}  
        int getgrade(int n){int a;a=grade[n];return a;}  
        void setname(char *na){strcpy(name,na);}  
        char *getname(){char *na;na=name;return na;}  
        void setage(int a){age=a;}  
        int getage(){int a;a=age;return a;}  
        friend class SeqList;  
        float getping();  
        int getsum();  
        student (student &s);  
    };  
    //求个人成绩总和  
    int student::getsum()  
    {  
        int sum=0;  
        for(int i=0;i<5;i++)  
            sum=sum+grade[i];  
        return sum;  
    }  
    //求个人成绩平均  
    float student::getping()  
    {  
        float sum=0;  
        for(int i=0;i<5;i++)  
            sum=sum+grade[i];  
        sum=sum/5;  
        return sum;  
          
    }  
      
    student::student (student &s)   //数据转移 
    {  
        num=s.num;  
        age=s.age;  
        strcpy(name,s.name);  
        for(int i=0;i<5;i++)  
            grade[i]=s.grade[i];  
    }  
      
    typedef student datatype;  
    //Seqlist类  
    class SeqList   
    {  
    private:  
        datatype data[MaxListSize];  
    public:  
        int size;  
        int ListSize(){ return size;};  
        void Find(datatype& item);  
        void Find3(datatype& item);  
        void Insert(datatype& item,int pos);  
        void ClearList();  
        void luru(int n);  
        void xianshi(int n);   
        void xinming(int n);  
        void xuehao(int a);  
        void change(int a);  
        void del(int n);  
        void paixu1(datatype array[],int k,int length);  
        void Find1(datatype& item,int j);  
        datatype erfen(datatype a[],int key,int n);  
        void duoyu1();  
        void Find2(datatype& item);  
        void zong(int n);  
    };  
    //定义查询 个人成绩   
    void SeqList::Find1(datatype& item,int j)  
    {  
        printf("学号:%d",item.getnum());  
        printf(" 姓名:%s",item.getname());  
        printf(" 年龄:%d",item.getage());  
        printf(" 成绩%d:%d",j,item.getgrade(j));  
        printf("\n");  
    }  
    //全班成绩
    void SeqList::Find2(datatype& item)  
    {  
        printf("学号:%d",item.getnum());  
        printf(" 姓名:%s",item.getname());  
        printf(" 年龄:%d",item.getage());  
        printf(" 总成绩:%d",item.getsum());  
        printf(" 平均成绩:%.2f",item.getping());  
        printf("\n");  
    }  
    //希尔排序  
    void paixun(datatype array[],int length)    
    {  
        int d = length/2;   //设置希尔排序的增量  
        int i ;  
        int j;  
        student temp,t;  
        while(d>=1)  
        {  
            for(i=d;i<length;i++)  //对所有相隔d位置的元素组采用直接插入排序
            {  
                temp=array[i];  
                j=i-d;  
                while(j>=0 && array[j].getnum()>temp.getnum())  //对所有d位置的元素组进行排序
                {  
                    t=array[j];  
                    array[j+d]=t;  
                    j=j-d;  
                }  
                array[j+d]=temp;  
            }  
            d= d/2;    //缩小增量  
        }  
    }  
    //seqlist类中查询函数  
    void SeqList::Find(datatype& item)  
    {  
        printf("学号:%d",item.getnum());  
        printf(" 姓名:%s",item.getname());  
        printf(" 年龄:%d",item.getage());  
        for(int j=0;j<5;j++)  
            printf(" 成绩:%d",item.getgrade(j));  
        printf(" 总成绩:%d",item.getsum());  
        printf(" 平均成绩:%.2f",item.getping());  
    }  
      
    void SeqList::Find3(datatype& item)  
    {  
        printf("学号:%d",item.getnum());  
        printf(" 姓名:%s",item.getname());  
        printf(" 年龄:%d",item.getage());  
        for(int j=0;j<5;j++)  
            printf(" 成绩:%d",item.getgrade(j));  
        printf(" 总成绩:%d",item.getsum());  
        printf(" 平均成绩:%.2f",item.getping());  
    }  
      
    void SeqList::ClearList ()  
    {  
        size =0;  
    }  
      
    SeqList list;  
    void guanliyuan(int n);  
    void guanliyuanmain(int n);  
    void guanliyuan_denglu(int n);  
    void duoyu1();  
    void xianshi1(int n);  
    void duoyu2();  
    void paixun(datatype array[],int length);  
    void studentmain(int n);  
    void zhu();  
    void main()  
    {  
        int a;  
        do                                
        {  
            system("cls");  
            list.ClearList();  
            printf("\n\n\n");  
            printf("\t\t\t    欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t******************************\n");  
            printf("\t\t\t*                            *\n");  
            printf("\t\t\t*    *1.管理员登陆           *\n");  
            printf("\t\t\t*    *2.学员登录             *\n");  
            printf("\t\t\t*    *3.退出                 *\n");  
            printf("\t\t\t*                            *\n");  
            printf("\t\t\t******************************\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>3)                 
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:
    			guanliyuan_denglu(0);break;     
            case 2:
    			studentmain(1);break;              
            case 3:
    			system("cls");
    			cout<<"                               感谢使用本系统"<<endl;exit(0);break;                 
            }    
        }  
        while(a!=0);               
    }  
    //主界面  
    void zhu()  
    {  
        int a;  
        do                                
        {  
            system("cls");  
            printf("\n\n\n");  
            printf("\t\t\t    欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t******************************\n");  
            printf("\t\t\t*                            *\n");  
            printf("\t\t\t*   *1.管理员登陆            *\n");  
            printf("\t\t\t*   *2.学员登录              *\n");  
            printf("\t\t\t*   *3.退出                  *\n");  
            printf("\t\t\t*                            *\n");  
            printf("\t\t\t******************************\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>3)                
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:
    			guanliyuan_denglu(0);break;     
            case 2:
    			studentmain(1);break;               
            case 3:
    			system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;                 
            }    
        }  
        while(a!=0);   
          
    }  
    //管理员登陆界面  
    void guanliyuan_denglu(int n)  
    {  
        system("cls");  
        char z[10],sun[10]={'\0'},c;  
        int i=0;  
        printf("\t\t\n\n\n\n");  
        printf("\t\t\t    欢迎使用学生成绩管理系统       \n ");  
        printf("\t*************************************************************\n\n\n");  
        printf("\t\t\t     请输入管理员账号:");  
        scanf("%s",&z);  
        printf("\t\t\t     请输入管理员密码:");  
        while(1)  
        {  
            c=getch();  
              
            if(c != '\r')  
            {  
                printf("*");  
                sun[i]=c;  
                i++;  
                  
            }  
            else break;  
              
        }  
        if(strcmp("root",z)==0&&strcmp("123456",sun)==0)  
            guanliyuan(n);  
        else   
        {  
            printf("\t\t\t您输入的有误!!!");  
              
        }     
    }  
    //管理员界面  
    void guanliyuan(int n)               
    {  
        int a;                  
        do  
        {     
            system("cls");  
            printf("\n\n\n");  
            printf("\t\t\t        欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t**************************************\n");  
            printf("\t\t\t*    *                          *    *\n");  
            printf("\t\t\t*     *     1.录入系统        *      *\n");  
            printf("\t\t\t*      *    2.查询系统      *        *\n");  
            printf("\t\t\t*       *   3.修改系统     *         *\n");  
            printf("\t\t\t*           4.删除系统               *\n");  
            printf("\t\t\t*           5.返回主菜单             *\n");  
            printf("\t\t\t*           6. 退出                  *\n");  
            printf("\t\t\t*                                    *\n");  
            printf("\t\t\t**************************************\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>6)                 
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:
    			list.luru(n);
    			break;     
            case 2:
    			guanliyuanmain(n);
    			break;  
            case 3:
    			list.change( n);
    			break;  
            case 4:
    			list.del(n);
    			break;  
            case 5:
    			zhu();
    			break;  
            case 6:
    			system("cls");
    			cout<<"                               感谢使用本系统"<<endl;
    			exit(0);
    			break;              
            }  
        }  
        while(a!=0);                        
        system("cls");   
    }  
    //管理员查询界面  
    void guanliyuanmain(int n)                       
    {  
           int a;                   
           do  
           {  
               system("cls");  
               printf("\n\n\n");  
               printf("\t\t\t       欢迎使用学生成绩管理系统       \n ");            
               printf("\t\t\t**************************************\n");   
               printf("\t\t\t*    *                           *    *\n");  
               printf("\t\t\t*     *   1.查询全班信息       *      *\n");  
               printf("\t\t\t*      *  2.查询个人信息     *        *\n");  
               printf("\t\t\t*       * 3.返回上一级菜单 *          *\n");  
               printf("\t\t\t*        4.返回主菜单                 *\n");  
               printf("\t\t\t*        5.退出                       *\n");  
               printf("\t\t\t*                                     *\n");      
               printf("\t\t\t**************************************\n\n");  
               printf("\t\t\t请输入你要操作的序号:\n");  
               printf("\t\t\t你要输入的序号是:");  
               scanf("%d",&a);  
               if(a<0||a>4)              
                   printf("您输入的有误,请重新输入!!!");  
               switch(a)  
               {  
                     
               case 1:
    			   list.xianshi(n);break;  
               case 2:
    			   xianshi1(n);break;  
               case 3:
    			   guanliyuan(n);break;  
               case 4:
    			   zhu();break;              
               case 5:
    			   system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;                
               }  
           }  
           while(a!=0);                              
    }  
    //录入数据  
    void SeqList::luru(int n)          
    {     
        system("cls");  
        int j,num,age,grade[5],k=0;                   
        char ch[20];  
        do  
        {   k=0;  
        system("cls");  
        printf("\n输入学生信息:\n");  
        printf("\n学号: ");  
        scanf("%d",&num);  
        for(int i=0;i<=list.size;i++)  
            if(list.data[i].getnum()==num)  
                k=1;  
            if(k==0)  
            {  
                
                list.data[size].setnum(num);  
                printf("\n姓名: ");  
                cin>>ch;  
                list.data[size].setname(ch);  
                printf("\n年龄: ");  
                cin>>age;  
                list.data[size].setage(age);  
                printf("注:(成绩1为数学,成绩2为计算机,成绩3为英语,成绩4为语文,成绩5为思修 \n");  
                for(j=0;j<5;j++)               
                {             
                    printf("\n成绩%d: ",j+1);  
                    cin>>grade[j];   
                    list.data[size].setgrade(grade[j],j);  
                }  
                list.size++;  
            }  
            else if(k==1)  
                printf("此学号已存在,请查实后再输入!!");  
            printf("\n如要继续输入学生信息,请选择(y/n): ");  
            scanf("%s",ch);         
              
        }  
        while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0);  
        paixun(list.data,list.size);  
        guanliyuan(n);  
    }  
      
    void SeqList::xianshi(int n)  
    {  
        system("cls");  
        int i;  
        for(i=0;i<list.size;i++)  
        {  
            Find(list.data[i]);  
            printf("\n");  
        }  
        if(n==1)  
            duoyu1();  
        else if(n==0)  
            duoyu2();  
    }  
      
    void xianshi1(int n)  
    {  
        int a;  
        do  
        {     
            system("cls");  
            printf("\n\n\n");  
            printf("\t\t\t      欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t**************************************\n");  
            printf("\t\t\t *                             *     \n");  
            printf("\t\t\t   *      1.按姓名查找       *       \n");  
            printf("\t\t\t     *    2.按学号查找     *         \n");   
            printf("\t\t\t       *  3.按总成绩查找 *           \n");  
            printf("\t\t\t          4.返回主菜单               \n");  
            printf("\t\t\t          5. 退出                    \n");  
            printf("\t\t\t                                     \n");  
            printf("\t\t\t**************************************\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>5)                 
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:list.xinming(n);break;     
            case 2:list.xuehao(n);break;    
            case 3:list.zong(n);break;  
            case 4:zhu();break;  
            case 5:system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;  
            }  
        }while(a!=0);  
    }  
    //姓名  
    void SeqList::xinming(int n)  
    {  
        system("cls");  
        char key[20];  
        printf("请输入姓名:");  
        scanf("%s",key);  
        for(int i=0;i<list.size;i++)  
        {  
            if(i>list.size)  
                printf("无该人,请确认后在输入!");  
            else if(strcmp(list.data[i].getname(),key)==0)  
                Find(list.data[i]);  
        }  
        if(n==1)  
            duoyu1();  
        else if(n==0)  
            duoyu2();  
    }  
    //二分法  
    datatype SeqList::erfen(datatype a[],int key,int n)    
    {  
        int low=0,high=n-1;  
        int mid;  
        while(low<=high)  
        {  
            mid=(low+high)/2;  
            if(a[mid].getnum()==key)  
                return a[mid];  
            else if(a[mid].getnum()<key)  
                low=mid+1;  
            else high=mid-1;  
        }  
        guanliyuanmain(0);  
        printf("无该学生!!");  
    }  
    //学号  
    void SeqList::xuehao(int a)  
    {  
        system("cls");  
        int n;  
        student stu;  
        printf("请输入学号:");  
        cin>>n;  
        stu=erfen(list.data,n,list.size);  
        Find(stu);  
        getch();  
        if(n==1)  
            duoyu1();  
        else if(n==0)  
            duoyu2();  
    }  
    
    //总成绩  
    void SeqList::zong(int n)  
    {  
        system("cls");  
        int j;  
        student stu[100];  
        for(j=0;j<list.size ;j++)  
            stu[j]=list.data[j];  
        paixu1(stu,9,list.size);  
      
        getch();  
        if(n==1)  
            duoyu1();  
        else if(n==0)  
            duoyu2();  
    }  
    //修改信息  
    void SeqList::change(int a)  
    {  
        int n,i,j;  
        int k=0,l=0;  
        int num,grade[5];  
        char name[20],ch[5];  
        printf("请输入要修改的学生学号:");  
        cin>>n;  
        for(i=0;i<list.size;i++)  
        {  
            if(list.data[i].getnum()==n)  
            {  
                printf("\n你确定要修改学号吗?(y/n): ");  
                scanf("%s",ch);  
                if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)      
                {  
                    printf("\n学号:");  
                    cin>>num;  
                    for(j=i;j<list.size;j++)  
                        if(list.data[j].getnum()==num)  
                            l=1;  
                        if(l==0)  
                        {  
                            list.data[i].setnum(num);  
                            k=1;  
                        }  
                        else   
                        {  
                            k=8;  
                            printf("学生输入异常!");  
                            getch();  
                            break;  
                            duoyu2();  
                        }  
                }  
                printf("\n你确定要修改学生姓名吗?(y/n): ");  
                cin>>ch;  
                if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)       
                {   
                    printf("\n名字:");   
                    cin>>name;  
                    list.data[i].setname(name);  
                    k=1;  
                }  
                    printf("\n你确定要修改学生年龄吗?(y/n): ");  
                cin>>ch;  
                if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)       
                {   
                    int age;  
                    printf("\n年龄:");   
                    cin>>age;  
                    list.data[i].setage(age);  
                    k=1;  
                }  
                printf("\n你确定要修改学生成绩吗?(y/n): ");  
                scanf("%s",ch);  
                printf("\n");  
                if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)     
                {  
                    printf("注:(成绩1为数学,成绩2为计算机,成绩3为英语,成绩4为语文,成绩5为思修 )\n");  
                    for(j=0;j<5;j++)  
                    {    
                        printf("成绩%d:",j+1);   
                        cin>>grade[j];  
                        list.data[i].setgrade(grade[j],j);  
                        printf("\n");   
                        k=1;  
                    }     
                }  
            }break;  
        }  
        system("cls");  
        if(k==1)  
            Find(list.data[i]);  
        else if(k==0)  
            printf("无该学生,或您没执行操作!!!");  
        paixun(list.data,list.size);  
        duoyu2();  
    }  
    //删除  
    void SeqList::del(int n)  
    {  
        system("cls");  
        int i,j;  
        int c;  
        int k=0;  
        printf("\n输入你要删除的学生学号 :\n");  
        printf("num:");  
        cin>>c;  
        for(i=0;i<list.size;i++)  
            if(list.data[i].getnum()==c)    
            {  
                k=1;  
                break;  
            }  
            if(k==1)  
            {  
                for(j=i;j<list.size;j++)  
                    list.data[j]=list.data[j+1];  
                printf("\t\t你已经删除 %d的信息\n",c);  
                list.size--;  
            }  
            else if(k==0)  
                printf("无该学生,请确认后再输入!!!");  
            duoyu2();  
    }  
      
    void SeqList::paixu1(datatype array[],int k,int length)  
    {  
        int d = length/2;   //设置希尔排序的增量  
        int i ;  
        int j;  
        student temp,t;  
        if(k==9)  
        {  
            while(d>=1)  
            {  
                for(i=d;i<length;i++)  
                {  
                    temp=array[i];  
                    j=i-d;  
                    while(j>=0 && array[j].getsum()<temp.getsum())  
                    {  
                        t=array[j];  
                        array[j+d]=t;  
                        j=j-d;  
                    }  
                    array[j+d]=temp;  
                }  
                d= d/2;    //缩小增量  
            }  
            for(i=0;i<list.size;i++)  
                Find2(array[i]);  
        }  
        else if(k!=9)  
        {  
            while(d>=1)  
            {  
                for(i=d;i<length;i++)  
                {  
                    temp=array[i];  
                    j=i-d;  
                    while(j>=0 && array[j].getgrade(k)<temp.getgrade(k))  
                    {  
                        t=array[j];  
                        array[j+d]=t;  
                        j=j-d;  
                    }  
                    array[j+d]=temp;  
                }  
                d= d/2;    //缩小增量  
            }  
            for(i=0;i<list.size;i++)  
                Find1(array[i],k);  
        }  
    }  
    //学生界面  
    void studentmain(int n)  
    {  
        int a;                   
           do  
           {  
               system("cls");  
               printf("\n\n\n");  
               printf("\t\t\t       欢迎使用学生成绩管理系统       \n ");            
               printf("\t\t\t**************************************\n");   
               printf("\t\t\t* *                               *   *\n");  
               printf("\t\t\t*   *     1.查询全班信息        *     *\n");  
               printf("\t\t\t*     *   2.查询个人信息      *       *\n");  
               printf("\t\t\t*       * 3.返回上一级菜单 *          *\n");  
               printf("\t\t\t*         4.退出                      *\n");  
               printf("\t\t\t*                                     *\n");      
               printf("\t\t\t*************************************\n\n");  
               printf("\t\t\t请输入你要操作的序号:\n");  
               printf("\t\t\t你要输入的序号是:");  
               scanf("%d",&a);  
               if(a<0||a>4)            //判断输入的是否大于4或小于0  
                   printf("您输入的有误,请重新输入!!!");  
               switch(a)  
               {  
                   //调用geren函数  
               case 1:
    			   list.xianshi(1);break;  
               case 2:
    			   xianshi1(1);break;  
               case 3:
    			   zhu();break;               
               case 4:
    			   system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;               
               }  
           }  
           while(a!=0);                             
    }  
    //返回界面  
    void SeqList::duoyu1()  
    {  
          
        int a;  
        do  
        {  
            printf("\n\n\n");  
            printf("\t\t\t      欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t***********************************\n");  
            printf("\t\t\t* *                        *       *\n");  
            printf("\t\t\t*  *   1.返回学生菜单    *         *\n");  
            printf("\t\t\t*   *  2.返回主菜单    *           *\n");  
            printf("\t\t\t*    * 3.退出        *             *\n");  
            printf("\t\t\t*                                  *\n");  
            printf("\t\t\t************************************\n\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>3)                                           
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:
    			studentmain(1);break;  
            case 2:
    			zhu();break;  
            case 3:
    			system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;  
            }  
        }while(a!=0);  
        system("cls");  
    }  
      
    void duoyu2()  
    {  
          
        int a;  
        do  
        {  
            printf("\n\n\n");  
            printf("\t\t\t      欢迎使用学生成绩管理系统       \n ");  
            printf("\t\t\t***********************************\n");  
            printf("\t\t\t* *                           *   *\n");  
            printf("\t\t\t*   *  1.返回管理员菜单    *      *\n");  
            printf("\t\t\t*     *2.返回主菜单     *         *\n");  
            printf("\t\t\t*      3.退出                     *\n");  
            printf("\t\t\t*                                 *\n");  
            printf("\t\t\t***********************************\n\n\n");  
            printf("\t\t\t请输入你要操作的序号:\n");  
            printf("\t\t\t你要输入的序号是:");  
            scanf("%d",&a);  
            if(a<0||a>3)                                           
                printf("您输入的有误,请重新输入!!!");  
            switch(a)  
            {  
            case 1:guanliyuan(0);break;  
            case 2:zhu();break;  
            case 3:system("cls");cout<<"                               感谢使用本系统"<<endl;exit(0);break;  
            }  
        }while(a!=0);  
        system("cls");  
    } 

    部分程序截图:



    展开全文
  • 数据结构课程设计 学生成绩管理

    千次阅读 2015-12-25 18:08:07
    本次实验设计了一个学生管理系统,程序运用结构体 链表,学生的信息分为了四大项,分别是学生的学号、姓名、年龄、成绩,这四项一起作为链表节点的数据部分,程序功能如下: (1)输入成绩 (2)输出成绩(3)删除...
  • 6.查找学生成绩(按照学号) 7.打印学生成绩单 C语言代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> s..
  • 学生成绩管理系统设计》 二、实训目的 (1)掌握结构程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。 (2)掌握C++的基本概念和基础知识。 (3)通过训练能够读懂较为复杂的C++语言源程序...
  • 2.学生成绩应包含4科成绩和总成绩(C语言、数据结构、高数、英语) 3.建立学生成绩单并保存到文件中(直接从控制台获取) 4.打印学生成绩单 5.按学号或者姓名查找学生成绩单 6.按总成绩进行排序,并保存到新的...
  • 数据结构-学生成绩管理系统

    万次阅读 多人点赞 2015-12-25 15:31:21
    #include #include #include #include using namespace std; struct student { int id; // 学号 char name[30]; // 姓名 char sex[2]; // 性别 ... // 成绩 }; typedef struct student DataType; /
  • 根据给出的排序和查找源代码设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况,系统至少包含以下功能: (1) 根据指定学生个数,逐个输入学生信息;V (2)...
  • // 单链表.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; int _tmain...
  • 数据结构实验报告---学生成绩管理

    千次阅读 2018-12-29 22:01:55
    上机实验习题 上机实验要求及规范 ...按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?)。然后设计有关操作的函...
  • c语言版数据结构课程设计 学生成绩管理系统

    万次阅读 多人点赞 2013-11-18 14:58:20
    学生成绩管理系统完成15项功能,是我经过很多次的修改得到的。花费时间不短,功能齐全,主要完成了:输入,输出,插入,修改,删除,查询,读取文件,写入文件,复制文件,建立索引,显示各种情况下的信息,追加...
  • 每个节点包含data域:存储数据,next域:指向下一个节点 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 没有头节点单链表:也就是phead只是一个引用(指针),指向链表的第一个节点 有头节点...
  • 学生成绩管理系统(数据结构之线性表实现)

    万次阅读 多人点赞 2016-11-08 21:46:41
    "\n======================== 学生成绩信息表 ========================" ; cout "学号、姓名、性别、班级、科目、成绩:\n" ; for ( int i= 0 ;i length ;i++) cout(ios_base::left)( 12 )[i].id ( 12 )[i]....
  • printf("\t\t\t 欢迎使用学生成绩管理系统 \n "); printf("\t\t\t******************************\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 1.管理员登陆 *\n"); printf("\t\t\t* 2.学员登录 *\n"); ...
  • 运行环境 开发工具:Dev C+ 需求分析 此课程设计的题目为学生成绩管理系统,该系统模拟学校在考完试之后对学生成绩的处理。为了方便管理者对学生成绩的处理,本系统设有录入、显示、查找、修改、排序、删除、保存、...
  • 课程设计:c++实现学生成绩管理系统

    万次阅读 多人点赞 2020-11-28 10:59:08
    学生成绩管理系统课程设计,作为计算机科学专业学生的一门必修课,印象非常深刻,上机,编码,写报告,答辩,最后很多人勉强完成了功课,但是却很少能学到东西,算是一种遗憾吧,即使我们毕业了,仍然会想回去再做一...
  • C语言数据结构学生成绩 顺序表

    千次阅读 多人点赞 2019-04-10 22:37:37
    一个简单的顺序表实现一组学生信息增,删,查,取功能。其中文件导入部分的处理花费了较多时间 代码如下: 在这里插入代码片 ```#include<stdio.h> #include<stdlib.h> #include<string.h> #...
  • 汇编程序设计--学生成绩管理系统

    千次阅读 2017-11-26 20:40:14
    学生成绩管理系统——汇编程序设计题目要求一个学生的信息包括姓名、班级、学号、成绩,其中成绩需要精确到1位小数。实现以下功能: (1) 可以录入学生成绩(十进制形式); (2) 可以按要求(如学号或成绩)...
  • C++ 学生成绩管理系统

    万次阅读 多人点赞 2019-10-04 20:26:09
    用c++实现学生成绩管理系统,此系统可以提供成绩的录入,可以按学生成绩进行排名,求总分和平均分以及提供成绩查询功能等。 实现功能 提供成绩录入 统计每个学生的总分和平均分 按总分由大到小排出名次 提供成绩...
  • MFC课程设计 --学生成绩管理系统

    万次阅读 多人点赞 2018-07-26 21:12:55
    MFC课程设计 ,C++课程设计 --学生成绩管理系统 ps:因为课设完成的过程大家都不太一样,以下的代码仅供学习一下在MFC下各个控件的用法,有问题欢迎留言讨论。     实验目的 使用MFC类库编制应用程序:按钮...
  • 设计一个学生成绩管理程序(如上图所示),它具有下列功能: 1.   初始化功能; void Initial( List *lst ) 2.   建表功能; void CreateList( List *lst,int maxsize ) 3.   学生成绩记录录入功能...
  • 学生成绩管理系统

    万次阅读 多人点赞 2018-06-02 13:58:58
    基于Jsp+sql server数据库的学生成绩管理系统需求分析学生成绩管理系统需求服务对象为在校学生和在校交工校教工. 整体分为学生模块和教师模块.学生模块 需求 :1:学生个体通过学号登录系统.2:网页页面显示学生信息...
  • WEB课设之学生成绩管理系统

    千次阅读 多人点赞 2019-07-18 17:40:44
    学生成绩管理系统主要是用来管理学生基本信息数据学生成绩的系统。需要提供如录入、删除、修改、查找学生基本信息以及成绩,甚至个别学生或者全体学生成绩报表的导出和学生成绩柱状图的生成。 1、 系...
  • 单链表学生成绩管理系统

    千次阅读 2018-01-01 10:31:27
    程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩; 输入功能由带头结点的单链表实现,并且使用前插法输入学生信息; 输入功能可以实现插入学生信息的功能,所以无需再专门写...
  • 巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。 二、实验内容 建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现...
  • 相信很多大一的同学在做c语言程序设计期末大作业的时候,都会被这些题目所困扰:学生成绩管理系统、学生信息管理系统、图书借阅管理系统、通讯录、选课系统......上网百度到别人的代码,有的人用C++写,有的人用类C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,425
精华内容 14,570
关键字:

学生成绩管理数据结构程序

数据结构 订阅