#include <stdio.h>
#include <assert.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef struct {
char id[20]; //学生学号id
char name[20]; //学生姓名
} student;
typedef student ElemType;
typedef struct {
student *elem; //存储空间的基地址
int length; //学生表中当前学生人数
} SqList;
/**
* 建立学生表
* @return
*/
Status InitList(SqList &L) {
L.elem = new ElemType[MAXSIZE];
if (!L.elem) {
exit(OVERFLOW);
}
L.length = 0;
return OK;
}
/**
* 获得学生表
* @param L 学生表
* @param i 位置
* @return i元素代表的学生对象
*/
ElemType GetElem(SqList &L, int i) {
return L.elem[i];
}
/**
* 添加学生
* @param 学生表
* @param 插入的位置
* @param 学生对象
* @return
*/
Status ListInsert(SqList &L, int i, ElemType e) {
//i值异常
if ((i < 1) || (i > L.length + 1)) {
return ERROR;
}
//内存空间已满
if (L.length == MAXSIZE) {
return ERROR;
}
//添加元素,此元素后面的元素向后移一位
for (int j = L.length; j >= i; j--) {
L.elem[j + 1] = L.elem[j];
}
L.elem[i] = e;
++L.length;
return OK;
}
/**
* 删除学生
* @param L 学生表
* @param i 删除位置
* @return
*/
Status ListDelete(SqList &L, int i) {
if ((i < 1) || (i > L.length)) {
return ERROR;
}
for (int j = i; j <= L.length; j++) {
//被删除的元素之后的元素前移
L.elem[j] = L.elem[j + 1];
}
--L.length;
return OK;
}
/**
* 输入规格
* @param e
*/
void Input(ElemType &e) {
printf("姓名:");
scanf("%s", e.name);
printf("学号:");
scanf("%s", e.id);
printf("输入完成\n\n");
}
/**
* 输出规格
* @param e
*/
void Output(ElemType &e) {
printf("姓名:%s\n学号:%s\n\n", e.name, e.id);
}
void Console() {
SqList L;
ElemType a, c;
printf("1. 构造顺序表\n");
printf("2. 录入指定人数的学生信息\n");
printf("3. 显示学生表中的所有信息\n");
printf("4. 在指定位置插入学生信息\n");
printf("5. 在指定位置删除学生信息\n");
printf("0. 退出\n");
int x, choose;
int i = 0;
while (1) {
printf("请输入你要选择的功能前的序号:");
scanf("%d", &choose);
if (choose == 0) {
break;
}
switch (choose) {
case 1:
if (InitList(L)) {
printf("成功建立顺序表\n");
} else {
printf("顺序表建立失败\n");
}
break;
case 2:
printf("请输入要录入学生的人数:");
scanf("%d", &x);
for (i = 1; i <= x; i++) {
printf("第%d个学生:\n", i);
Input(L.elem[i]);
}
L.length = x;
break;
case 3:
for (i = 1; i <= x; i++) {
a = GetElem(L, i);
Output(a);
}
break;
case 4:
printf("请输入要插入的位置:");
int id2;
scanf("%d", &id2);
printf("请输入学生信息:\n");
Input(c);
if (ListInsert(L, id2, c)) {
x++;
printf("插入成功\n");
} else {
printf("插入失败\n");
}
break;
case 5:
printf("请输入要删除的位置:");
int id3;
scanf("%d", &id3);
if (ListDelete(L, id3)) {
x--;
printf("删除成功\n");
} else {
printf("删除失败\n");
}
break;
}
}
printf("\n\n请按任意键退出\n\n");
};
int main() {
Console();
return 0;
}
01.顺序表学生管理系统
最新推荐文章于 2024-08-17 19:00:11 发布