资源简介
实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的顺序表,可以不考虑重名的情况,系统包含以下功能:
(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+
- 上一篇:c语言运动会分数统计
- 下一篇:操作系统基本分页存储系统
相关资源
- 数据结构 通讯录管理 课程设计C++单链
- C++版学生管理系统
- 数据结构程序设计学生成绩管理系统
- 数据结构 运动会分数统计实习报告
- 数据结构c语言 学生成绩管理系统
- C++大作业_学生管理系统(含源代码实
- 哈夫曼编码与译码附报告
- 数据结构抽象性实验——关于B树的基
- [数据结构课程设计——C语言描述第
- 清华大学数据结构C语言版习题答案
- 图的深度优先遍历C语言数据结构
- 哈夫曼编码系统C语言实现
- 数据结构大作业贪吃蛇和实验报告
- mfc学生管理系统112034
- 医务室的模拟 c语言 数据结构
- 数据结构哈夫曼编码译码C语言版程序
- 基于数据结构c语言实现的银行叫号系
- 迷宫求解算法数据结构c语言
- 数据结构——迷宫
- 循环队列c程序
- 史上最全经典数据结构算法c语言实现
- 老鼠走迷宫数据结构课程设计
- C++大作业之学生管理系统图表
- 数据结构之迷宫求解完整代码(C语言
- 数据结构列车时刻表管理系统
- C语言:中缀算术表达式求值栈 附答案
- 数据结构算法与应用 c++语言描述(第
- (严蔚敏)数据结构视频教程C语言版
- C语言数据结构程序表达式求值 二叉树
- 中序遍历二叉排序树
评论
共有 条评论