• 大小: 10KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的顺序表,可以不考虑重名的情况,系统包含以下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 给定一个学生信息,插入到表中指定的位置; (4) 删除指定位置的学生记录; (5) 统计表中学生个数; (6) 利用直接插入排序或者折半插入排序按照姓名进行排序; (7) 利用快速排序按照学号进行排序; (8) 根据姓名进行折半查找,要求使用递归算法实现,成功返回此学生的学号和成绩; (9) 根据学号进行折半查找,要求使用非递归算法实现,成功返回此学生的姓名和成绩。

资源截图

代码片段和文件信息

#include
#include
#include
#define MAXSIZE 21     //能容纳的最大学生数

typedef struct{
int no;    //学号
char name[30]; //姓名
double score; //成绩
}Student;

typedef  struct {
  Student  *stu;     //指向数据元素的基地址
  int  length;       //线性表的当前长度                                                           
 }SqList;

//录入学生信息
void input(SqList &L){
cout << “请输入学生个数(学生个数<=20):“;
int n;
cin >> n;
while(n > 20 || n < 1){
cout << “对不起,输入有误,请重新输入“ << endl;
cout << “请输入学生个数(学生个数<=20):“;
cin >> n;
}
L.stu = new Student[MAXSIZE];
L.length = n;

for(int i = 1 ; i <= n ; i++){
cout << endl;
cout << “请依次输入第“ << i << “个学生的姓名:“;
cin >> L.stu[i].name;
cout << “请依次输入第“ << i << “个学生的学号:“;
cin >> L.stu[i].no;
cout << “请依次输入第“ << i << “个学生的成绩:“;
cin >> L.stu[i].score;
}
cout << endl;
cout << “输入完毕,共输入了“ << n << “个学生的信息!“ << endl << endl;
}

void output(SqList L){
cout << “总共有“ << L.length << “个学生“ << endl;
cout << “学号“ << “\t“ << “姓名“ << “\t“ << “成绩“ << endl;
for(int i = 1 ; i <= L.length ; i++){
cout << L.stu[i].no << “\t“ << L.stu[i].name << “\t“ << L.stu[i].score<< endl;
cout << endl;
}
cout << endl;
}

//判断学生学号是否相同
int judge(int n  SqList L){
for(int i = 1 ; i <= L.length ; i++){
if(n == L.stu[i].no)
return 1;
}
return 0;
}

//插入学生
void insert(SqList &L){
int num = L.length;

if(num == MAXSIZE){
cout << “顺序表已满,无法继续插入学生信息!“ << endl;
exit(1);
}

Student s;
int n;
cout << “请输入要插入学生的位置:“;
cin >> n;
while(n < 1 || n > (num + 1)){
cout <<“对不起,输入的位置有误,请重新输入!“< cout << “请输入要插入学生的位置:“;
cin >> n;
}

cout << “请输入该生的学号:“;
cin >> s.no;
int flag1 = judge(s.no  L);
while(flag1){
cout << “对不起,该学号已存在,请重新输入!“ << endl;
cout << “请输入该生的学号:“;
cin >> s.no;
flag1 = judge(s.no  L);
}
cout << “请输入该生的姓名:“;
cin >> s.name;
cout << “请输入该生的成绩:“;
cin >> s.score;

for(int i = num ; i >= n ; i--)
L.stu[i + 1] = L.stu[i];
L.stu[n] = s;
L.length++;
}

//删除学生
void deletestu(SqList &L){
int num = L.length;
if(num == 0){
cout << “顺序表以为空!“ << endl;
exit(1);
}
int n;
cout << “请输入要删除学生的位置:“;
cin >> n;
while(n < 1 || n > num){
cout <<“对不起,删除的位置有误,请重新输入!“< cout << “请输入要删除学生的位置:“;
cin >> n;
}

char ch;
cout << “要删除的学生学号为“ << L.stu[n].no<< “\t姓名为:“ << L.stu[n].name << endl;
cout << “是否删除?(Y/N)“ << endl;
cin >> ch;
while(ch != ‘Y‘ && ch != ‘y‘ && ch != ‘N‘ && ch != ‘n‘){
cout << “对不起,输入有误, 请重新输入!“ << endl;
cout << “是否继续查找?(Y/N):“;
cin >> ch;
}
if(ch == ‘Y‘ || ch == ‘y‘){
for(int i = n; i <= num; i++)
L.stu[i] = L.stu[i + 1];
L.length--;
cout << “删除完毕!“ << endl << endl;
}
else
cout << “取消删除学生操作!“ << endl << endl;
}

//统计表中学生的个数
void Length(SqList L){
cout << endl;
cout << “目前共有学生“ << L.length << endl;
}

//利用折半插入排序按照姓名进行排序
void Sort_Name(SqList &L){
int len = L.length;
for(int i = 2 ; i <= len ; i+

评论

共有 条评论