学生管理系统(C/C#)详细代码及软件设计说明书
(对您有用的话,记得推荐给身边小伙伴,点点赞吧!谢谢啦!)
**
实践项目一、学生管理系统的设计与实现 设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况,系统至少包含以下功能:
(1)根据指定学生个数,逐个输入学生信息;
(2)逐个显示学生表中所有学生的相关信息;
(3)给定一个学生信息,插入到表中指定的位置;
(4)删除指定位置的学生记录;
(5)统计表中学生个数;
(6)利用快速排序按照学号进行排序;
(7)分别利用直接插入排序和折半插入排序按照成绩进行排序;
(8)根据成绩进行折半查找,成功返回此学生的学号和姓名。
**
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status; // 定义函数返回值类型
typedef struct
{
double no; // 学号
char name[20]; // 姓名
double grade; // 成绩
}student;
typedef student ElemType;
typedef struct
{
ElemType *elem; // 存储空间的基地址
int length; // 当前长度
}SqList;
Status InitList(SqList *L) // 构造空的顺序表 L
{
L->elem=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);//为顺序表分配一个大小为MAXSIZE的空间
if(!L->elem) exit(OVERFLOW);
L->length=0;
return OK;
}
ElemType GetElem(SqList &L,int i) // 访问顺序表,找到 i位置,返回给 e
{
return L.elem[i];
}
void Input(ElemType* e)
{
printf("学号:"); scanf("%lf", &e->no);
printf("姓名:"); scanf("%s", &e->name);
printf("成绩:"); scanf("%lf", &e->grade);
printf("输入完成\n\n");
}
void Output(ElemType* e)
{
printf("学号(6位内):%-10.0lf\t 姓名:%-20s\t 成绩:%-10.1lf\t\n", e->no, e->name, e->grade);
}
int Patition(SqList* L,int low, int high) {
//快速排序实现按学号排序
//交换顺序表L中子表r[low..high]的记录,枢轴记录到位,并返回其所在位置
//此时在它之前(后)的记录均不大于(小于)它
L->elem[0] = L->elem[low]; //用子表的第一个记录作枢轴记录
int pivotkey = L->elem[low].no; //枢轴记录关键字
while (low < high) {
//从表的两端向中间扫描
while (low < high