版权声明:转载请注明 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;
}