资源简介
实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的顺序表,可以不考虑重名的情况,系统包含以下功能:
(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语言版源代码
- DSDEMO-C演示(数据结构C语言版 严蔚敏
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- 数据结构教程李春葆第五版书中例题
- 吕鑫vc6c++数据结构视频源码
- 数据结构教程李春葆第五版课后答案
- 链表实现学生管理系统(main.c)
- 李春葆课后习题答案(数据结构教材
- 数据结构1800题 题+答案(全)
- 数据结构(C语言版)ppt课件,清华,
- c++常用游戏算法及数据结构设计
- 数据结构超全面复习导图
- 《Data Structures and Algorithm Analysis in C
- 数据结构C语言版教学笔记严蔚敏
- c++课程设计学生管理系统浙工大源码
- 数据结构C语言版期末考试试题(有答
- 多功能计算器实现C++代码以及代码详
- C语言数据结构银行客户排队
- C语言实现栈操作
- 简易学生管理系统源码 数据结构 大作
- 数据结构与C语言综合习题集
- 数据结构实验——赫夫曼树相关
- C语言进阶源码---基于graphics实现图书
- 数据结构——C++语言描述 陈慧南
- 广东工业大学数据结构课程设计航空
- 数据结构课程设计扑克牌排序
评论
共有 条评论