学生信息管理(顺序表)(数据结构入门)

版权声明:转载请注明 https://blog.csdn.net/qq_33831360/article/details/88620913

要求: 自己设计学生基本信息表 具备功能:创建、清空、销毁、插入、删除、按值查找、更新某人信息、指定位置查找、遍历。

详解我是没有了,可以看这里

瞎写的,欢迎纠错

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

typedef struct Item{
	char name[10];
	float score;
	int ID;
}STD;

typedef struct {
	STD *data;
	int listsize;
	int length;
}SqList;

int InitSqList(SqList *L,int max) {
	L->data = (STD *)malloc(max * sizeof(STD));
	L->length = 0;
	L->listsize = max; 
	puts("请输入学生人数:");
	cin >> L->length;
	if (L->length > max || L->data == NULL) {puts("空间不足!");return 0;}
	puts("请按顺序填写学生的姓名,学号,分数:"); 
	for (int i = 1; i <= L->length; i++)
	  cin >> L->data[i-1].name >> L->data[i-1].ID >> L->data[i-1].score;
	puts("创建完成!"); 
	return 1; 
}

int ClearSqList(SqList *L) {
	L->length = 0;
	puts("清空成功!");
	return 1;
}

int DestroySqList(SqList *L) {
	free(L->data);
	L->data = NULL;
	L->length = 0;
	L->length = 0;
	puts("销毁成功!");
	return 1;
} 

int InsertSqList(SqList *L,int p,STD x) {
	if (p<1 || p>L->length) {puts("插入位置异常!");return 0;}
	if (L->length+1 > L->listsize) {puts("容量不足!");return 0;}
	for (int i = L->length; i >= p; i--) L->data[i] = L->data[i-1];
	L->data[p-1] = x; 
	L->length = L->length+1;
	puts("插入成功!");
	return 1;
}

int DeleteSqList(SqList *L,int p) {
	if (L->length == 0) {puts("没有数据,不能删除!");return 0;}
	if (p<1 || p>L->length) {puts("位置异常!");return 0;}
	for (int k = p; k < L->length; k++) 
	  L->data[k-1] = L->data[k];
	L->length = L->length-1;
	puts("删除成功!");
	return 1;
}

int FindValSqList(SqList *L,int ID) {
	for (int i = 0; i < L->length; i++)
	 if (L->data[i].ID == ID) {
	 	cout << "学号为" << ID << "的人是" << L->data[i].name << endl;
	 	return 1;
	 }
	puts("查无此人!");
	return 0; 
} 

int UpdataSqList(SqList *L,int p,STD x) {
	if (L->length == 0) {puts("没有数据,不能更新!");return 0;}
	if (p<1 || p>L->length) {puts("位置异常!");return 0;}
    L->data[p-1] = x;
    puts("更新成功!");
    return 1;
}

int FindPosSqList(SqList *L,int p) {
	if (p<1 || p>L->length) {puts("查找位置有误!"); return 0;}
	cout << "第" << p << "个人是" << L->data[p-1].name << endl;
	return 1; 
} 

int TraversalSqList(SqList *L) {
	if (L->length == 0) {puts("是空表!");return 0;}
	puts("所以学生信息如下:"); 
	for (int i = 0; i < L->length; i++)
	  cout << "姓名:" << L->data[i].name << " ID:" << L->data[i].ID\
	  << " 分数:" << L->data[i].score << endl;
	return 1;
}

int main() {
	puts("输入 1:创建 2:清空 3:销毁 4:插入 5:删除 6:按学号查找 7:更新某人信息 8:指定位置查找 9:遍历");
	int opt,p,id,Maxx;
	SqList L;
	STD x;
    while (1) {
    	cin >> opt;
    	switch(opt) {
    		case 0: return 0;
    		case 1: puts("请输入存储容量(人数上限):");
			        cin >> Maxx; 
			        InitSqList(&L,Maxx); break;
    		case 2: ClearSqList(&L);     break;
    		case 3: DestroySqList(&L);   break;
    		case 4: puts("请输入插入位置和新同学的姓名,学号,成绩:");
			        cin >> p >> x.name >> x.ID >> x.score;
    		        InsertSqList(&L,p,x);
    		        break;
    		case 5: puts("请输入被删除学生的位置:"); 
    		        cin >> p; 
			        DeleteSqList(&L,p);  
					break;
    		case 6: puts("请输入要查找的学生的学号:");
			        cin >> id;
			        FindValSqList(&L,id);
			        break;
			case 7: puts("请输入更新位置和新同学的姓名,学号,成绩:");
			        cin >> p >> x.name >> x.ID >> x.score;
			        UpdataSqList(&L,p,x);
			        break;
			case 8: puts("请输入要查找的学生的位置:");
			        cin >> p;
			        FindPosSqList(&L,p);
			        break;
			case 9: TraversalSqList(&L); break;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_33831360/article/details/88620913