C语言作业-成绩管理

C语言作业-成绩管理

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>     // 内存操作头文件 
#include <string.h>     // 字符串操作头文件 

typedef struct student {
	
	char Id[30];                // 学号  备注:不可重复 
	char Name[30];              // 名字  
	char Gender[10];            // 性别
	int Age;                    // 年龄 
	
	int AE;                     // analog electronic (模拟电子)
	int C;                      // C Language (C语言)
	int singlechip;             // 单片机
	int CAD;                    // 电子CAD
	int OSHD;                   // Open Source Hardware Development(开源硬件开发)
	
	struct student * pNext;
	
}Student, *Pstudent; 

// 定义函数 
void UI(void);
void UI2(void);
Pstudent createLisr(int len);                      // 新建数据档案
void printList(Pstudent pHead);                    // 输出 
bool insertList(Pstudent pHead, int pos);          // 插入  pos:链表下标值 注:数据不可为空! 
bool deleteList(Pstudent pHead, int pos);          // 删除 
int lengthList(Pstudent pHead);                    // 判断长度
void sortList(Pstudent pHead, int subject);        // 排序 
void inquireList(Pstudent pHead, char ID[]);       // 查询 

int main (void) 
{
	int i = 0, j = 0, pos = 0, subject = 0;
	Pstudent student;
	char ID[30];
	
	while (true) {
		
		UI ();
		
		printf("请输入:");
		scanf("%d",&i);
		
		switch (i) {
			case 0: 
				return 0;
			case 1:
				printf("请输入新建数据档案人数:");
				scanf("%d",&j);
				student = createLisr(j);
				break;
			case 2:
				insertList(student, 1);
				break;
			case 3:
				printList(student);
				printf("\n请输入删除的数据的编号:");
				scanf("%d",&pos);
				deleteList(student, pos);
				break;
			case 4:
				UI2();
				printf("\n请输入:");
				scanf("%d",&subject);
				sortList(student, subject); 
				break;
			case 5:
				printf("\n请输入要查询的学生学号:");
				scanf("%s",&ID);
				inquireList(student, ID); 
				break;
			default:
				printf("输入错误,请重新输入!\n");
				break;
		} 
	}
	return 0;
}

void UI () {
	
	system("cls");
	
	printf("**********学生成绩管理系统**********\n");
	printf("\n");
	printf("           1:新建数据档案\n");     
	printf("           2:添加数据\n");         
	printf("           3:删除数据\n");         
	printf("           4:排序\n");			   
	printf("           5:查询\n");             
	printf("           0:退出\n");
	printf("\n");
	printf("************************************\n");	
	printf("\n");
	printf("请输入序号:");
	printf("\n");
	
} 
void UI2 () {
	
	system("cls");
	
	printf("**********学生成绩单科排名**********\n");
	printf("\n");
	printf("          1:模拟电子\n");     
	printf("          2:C语言程序设计\n");          
	printf("          3:单片机程序设计与制作\n");          
	printf("          4:电子CAD\n");			   
	printf("          5:开源硬件开发\n");            
	printf("\n");
	printf("************************************\n");	
	printf("\n");
	printf("请输入序号:");
	printf("\n");
	
} 

Pstudent createLisr(int len) {
	
	system("cls");
	
	Pstudent Head, Node, End;
	
	Head = (Pstudent)malloc(sizeof(Student)); 
	if (NULL == Head) {
		printf("分配失败\n");
		exit(-1);
	}
	
	End = Head;
	
	printf("提示:请按(格式)格式依次输入\n");
	
	for (int i = 0; i < len; i++) {
		
		Node = (Pstudent)malloc(sizeof(Student));
		if (NULL == Node) {
			
			printf("分配失败\n");
			exit(-1);
		}
		
		printf("请输入第%d的值。\n", i + 1);
		printf("提示:请按(学号 名字 性别 年龄)格式依次输入\n");
		scanf("%s %s %s %d", &Node->Id ,&Node->Name ,&Node->Gender, &Node->Age);
		printf("提示:请按(模拟电子 C语言 单片机 CAD 开源硬件开发)格式依次输入\n");
		scanf("%d %d %d %d %d", &Node->AE, &Node->C, &Node->singlechip, &Node->CAD, &Node->OSHD);
		
		End->pNext = Node;
		End = Node;
	}
	
	End->pNext = NULL;
	return Head;
}

void printList(Pstudent pHead) {
	
	system("cls");
	
	Pstudent temp = pHead->pNext;
	
	while (temp != NULL) {
		printf("\n");
		printf("学号\t\t姓名\t性别\t年龄\t模拟电子\tC语言\t单片机\t电子CAD\t开源硬件开发\n\n");
		
		printf("%s\t%s\t%s\t%d\t%d\t\t%d\t%d\t%d\t%d\t\n", 
		temp->Id, temp->Name, temp->Gender, temp->Age, 
		temp->AE, temp->C, temp->singlechip, temp->CAD, temp->OSHD);

		
		temp = temp->pNext;	
	}
	
} 

bool insertList(Pstudent pHead, int pos) {
	
	system("cls");
	
	int i = 0;
	Pstudent p = pHead;
	
	while (NULL != p && i < pos - 1) {
		p = p->pNext;
		i ++;
	}
	
	if (i > pos - 1 || NULL == p) {
		return false;
	}
	
	Pstudent pNew = (Pstudent)malloc(sizeof(Student));
	if (NULL == pNew) {
		printf("分配失败\n");
		exit(-1);
	}
	
	printf("提示:请按(学号 名字 性别 年龄)格式依次输入\n");
	scanf("%s %s %s %d", &pNew->Id ,&pNew->Name ,&pNew->Gender, &pNew->Age);
	printf("提示:请按(模拟电子 C语言 单片机 CAD 开源硬件开发)格式依次输入\n");
	scanf("%d %d %d %d %d", &pNew->AE, &pNew->C, &pNew->singlechip, &pNew->CAD, &pNew->OSHD);
	
	Pstudent q = p->pNext;
	p->pNext = pNew;
	pNew->pNext = q;
	
	return true;
}

bool deleteList(Pstudent pHead, int pos) {
	int i = 0;
	Pstudent p = pHead;
	
	while (NULL != p && i < pos - 1) {
		p = p->pNext;
		i ++;
	}
	
	if (i > pos - 1 || NULL == p->pNext) {
		return false;
	}
	
	Pstudent q = p->pNext;
	p->	pNext = p->pNext->pNext;
	free(q);
	q = NULL;
	
	return true;
}

int lengthList(Pstudent pHead) {
	int length = 0;
	Pstudent temp = pHead->pNext;
	while (temp != NULL) {
		temp = temp->pNext;	
		length ++;
	}
	return length;
}

void sortList(Pstudent pHead, int subject) {
	
	system("cls");
	
	Pstudent p, q;
	int i, j, t, len = lengthList(pHead);
	
	char t1[30], t2[30];
	
	for (
	i = 0, p = pHead->pNext;
	i < len -1;
	i ++, p = p->pNext) {
		for (
		j = i + 1, q = p->pNext;
		j < len;
		j++, q = q->pNext) {
			
			// analog electronic (模拟电子)
			if (subject == 1) {
				
				if (p->AE < q->AE) {
					
					t = p->AE;
					p->AE = q->AE;
					q->AE = t;
					
					strcpy(t1, p->Id);
					strcpy(p->Id, q->Id);
					strcpy(q->Id, t1);
					
					strcpy(t2, p->Name);
					strcpy(p->Name, q->Name);
					strcpy(q->Name, t2);		
				}
			}
			
			//  C Language (C语言)
			if (subject == 2) {
				
				if (p->C < q->C) {
					
					t = p->C;
					p->C = q->C;
					q->C = t;
					
					strcpy(t1, p->Id);
					strcpy(p->Id, q->Id);
					strcpy(q->Id, t1);
					
					strcpy(t2, p->Name);
					strcpy(p->Name, q->Name);
					strcpy(q->Name, t2);		
				}
			}
			
			// 单片机
			if (subject == 3) {
				
				if (p->singlechip < q->singlechip) {
					
					t = p->singlechip;
					p->singlechip = q->singlechip;
					q->singlechip = t;
					
					strcpy(t1, p->Id);
					strcpy(p->Id, q->Id);
					strcpy(q->Id, t1);
					
					strcpy(t2, p->Name);
					strcpy(p->Name, q->Name);
					strcpy(q->Name, t2);		
				}
			}
			
			// 电子CAD
			if (subject == 4) {
				
				if (p->CAD < q->CAD) {
					
					t = p->CAD;
					p->CAD = q->CAD;
					q->CAD = t;
					
					strcpy(t1, p->Id);
					strcpy(p->Id, q->Id);
					strcpy(q->Id, t1);
					
					strcpy(t2, p->Name);
					strcpy(p->Name, q->Name);
					strcpy(q->Name, t2);		
				}
			}
			
			//  Open Source Hardware Development(开源硬件开发)
			if (subject == 5 ){
				
				if (p->OSHD < q->OSHD) {
					
					t = p->OSHD;
					p->OSHD = q->OSHD;
					q->OSHD = t;
					
					strcpy(t1, p->Id);
					strcpy(p->Id, q->Id);
					strcpy(q->Id, t1);
					
					strcpy(t2, p->Name);
					strcpy(p->Name, q->Name);
					strcpy(q->Name, t2);		
				}
			}
		}
	}
	
	system("cls");
	
	Pstudent temp = pHead->pNext;
	
	while (temp != NULL) {
		
		switch (subject) {
			case 1:
				printf("学号\t\t姓名\t模拟电子\n\n");
		
				printf("%s\t\t%s\t%d\t\n", 
				temp->Id, temp->Name, 
				temp->AE);
				break;
			case 2:
				printf("学号\t\t姓名\tC语言\n\n");
		
				printf("%s\t%s\t%d\t\n",
				temp->Id, temp->Name, 
				temp->C);
				break;
			case 3:
				printf("学号\t\t姓名\t单片机\n\n");
		
				printf("%s\t\t%s\t%d\t\n",
				temp->Id, temp->Name, 
				temp->singlechip);
				break;
			case 4:
				printf("学号\t\t姓名\t电子CAD\n\n");
		
				printf("%s\t\t%s\t%d\t\n",
				temp->Id, temp->Name, 
				temp->CAD);
				break;
			case 5:
				printf("学号\t\t姓名\t开源硬件开发\n\n");
		
				printf("%s\t\t%s\t%d\t\n",
				temp->Id, temp->Name, 
				temp->OSHD);
				break;
		}
		temp = temp->pNext;	
	}
	system("pause");
	return;
}

void inquireList(Pstudent pHead, char ID[]) {
	
	system("cls");
	
	Pstudent temp = pHead->pNext;
	
	while (temp != NULL) {
		
		if (strcmp(temp->Id, ID) == 0) {
			printf("\n");
			printf("学号\t\t姓名\t性别\t年龄\t模拟电子\tC语言\t单片机\t电子CAD\t开源硬件开发\n\n");
			printf("%s\t%s\t%s\t%d\t%d\t\t%d\t%d\t%d\t%d\t\n", 
			temp->Id, temp->Name, temp->Gender, temp->Age, 
			temp->AE, temp->C, temp->singlechip, temp->CAD, temp->OSHD);
		}
		
		temp = temp->pNext;	
	}
	system("pause");	
} 
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、除等操作时执行额外的逻辑。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值