AI智能
改变未来

学生管理系统(C/C#)详细代码及软件设计说明书


学生管理系统(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 100typedef 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 && L->elem[high].no>= pivotkey)--high;L->elem[low] = L->elem[high];         //将比枢轴小的记录移动到低端while (low < high && L->elem[low].no <= pivotkey)++low;L->elem[high] = L->elem[low];         //将比枢轴大的记录移动到高端}L->elem[low] = L->elem[0];               //枢轴记录到位return low;                              //返回枢轴位置}void QSort(SqList* L, int low, int high) {//对顺序表L中的子序列L.r[low...high]做快速排序if (low < high) {                          //长度大于等于1int pivotloc = Patition(L, low, high); //一分为二QSort(L, low, pivotloc - 1);           //对低子表递归排序QSort(L, pivotloc + 1, high);          //对高子表递归排序}}void QuickSort(SqList* L) {//对顺序表L做快速排序QSort(L, 1, L->length);}/*void InsertSort(SqList& L){//对顺序表L做直接插入排序,根据学生成绩排序int i, j;for(i=2;i<=L.length;i++)if (L.elem[i].grade < L.elem[i - 1].grade)//“<”,需将elem[i]插入有序子表{L.elem[0] = L.elem[i]; //将待插入的记录暂存到监视哨中L.elem[i] = L.elem[i-1];//elem[i-]后移for (j = i - 2; L.elem[0].grade < L.elem[j].grade; --j)//从后向前寻找插入位置L.elem[j + 1] = L.elem[j];//记录逐步后移,直到找到插入位置L.elem[j + 1] = L.elem[0];//将elem[0]即原elem[i],插入到正确位置}}*/void BInsertSort(SqList& L){                            //对顺序表L做折半插入排序,根据学生成绩排序int i, j, m, low, high;for (i = 2; i <= L.length; ++i){L.elem[0] = L.elem[i];//将待插入的记录暂存到监视哨中low = 1; high = i - 1;//置查找区间初值while (low <= high)   //在elem[low..high]中折半查找插入的位置{m = (low + high) / 2;    //折半if (L.elem[0].grade < L.elem[m].grade) high = m - 1;//插入点在前一子表else low = m + 1; //插入点在后一子表}for (j = i - 1; j >= high + 1; --j)  L.elem[j + 1] = L.elem[j];//记录后移L.elem[high + 1] = L.elem[0];//将elem[o]即原elem[i],插入到正确位置}}Status Search(SqList* L, int f)//根据折半查找实现用户提供成绩,系统返回该学生信息{int low = 1, high = L->length, mid;while (low <= high){mid = (low + high) / 2;if (L->elem[mid].grade == f)Output(&L->elem[mid]);if (L->elem[mid].grade > f){high = mid - 1;}else{low = mid + 1;}}return 0;}int Search(SqList &L,char str[]) // 根据名字查找,返回该同学在顺序表中的编号{for(int i=1;i<=L.length;i++){if(strcmp(L.elem[i].name,str)==0)return i;}return 0;}Status ListInsert(SqList &L,int i,ElemType e) // 在 指定位置插入某个学生的信息{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;}Status ListDelete(SqList &L,int i) // 在顺序表中删除 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;}int main(){SqList L;ElemType a,b,c;printf(\"********欢迎来到学生信息管理系统********\\n\");printf(\"\\n**************主菜单******************\\n\\n\");printf(\"1. 构造顺序表\\n\");       //存储学生信息printf(\"2. 录入学生信息\\n\");     //根据指定学生个数,逐个输入学生信息printf(\"3. 显示学生信息\\n\");      //调用OutPut函数实现存储数据的遍历printf(\"4. 输入姓名,查找该学生\\n\");//由学生姓名查找该生信息printf(\"5. 显示某位置该学生信息\\n\"); //在表中某位置的学生信息printf(\"6. 在指定位置插入学生信息\\n\");printf(\"7. 在指定位置删除学生信息\\n\");printf(\"8. 统计学生个数\\n\");printf(\"9. 根据学生成绩排序\\n\");printf(\"10.根据指定分数查找学生信息\\n\");printf(\"0. 退出\\n\");printf(\"\\n**************************************\\n\\n\");int x,i,f,number;while(1){printf(\"\\n请输入所需功能对应的数字\\n\");scanf(\"%d\",&number);if(number==0)	break;switch(number){case 1:if(InitList(&L))printf(\"成功建立顺序表\\n\\n\");elseprintf(\"顺序表建立失败\\n\\n\");break;case 2:printf(\"请输入要录入学生的人数(小于100):\\n\");scanf(\"%d\",&x);for(int i=1;i<=x;i++){printf(\"第%d个学生:\\n\",i);Input(&L.elem[i]);}L.length=x;break;case 3:QuickSort(&L);    //使用快速排序实现根据学号排序for(int i=1;i<= L.length;i++){Output(&L.elem[i]);}break;case 4:char s[20];printf(\"\\n请输入要查找的学生姓名:\\t\");scanf(\"%s\",s);if(Search(L,s))Output(&L.elem[Search(L,s)]);elseputs(\"对不起,查无此人\");break;case 5:printf(\"\\n请输入要查询的位置:\");int id1;scanf(\"%d\",&id1);b=GetElem(L,id1);Output(&b);break;case 6:printf (\"\\n请输入要插入的位置:\");int id2;scanf(\"%d\",&id2);printf(\"请输入学生信息:\\n\");Input(&c);if(ListInsert(L,id2,c)){x++;puts(\"插入成功\");}else{puts(\"插入失败\");}break;case 7:printf(\"\\n请输入要删除的位置:\\n\");int id3;scanf(\"%d\",&id3);if(ListDelete(L,id3)){x--;puts(\"删除成功\");}else{puts(\"删除失败\");}break;case 8:printf(\"\\n已录入的学生个数为:%d\\n\\n\",L.length);break;case 9:puts(\"\\n按照成绩排序为:\\n\");BInsertSort(L);for (int i = 1; i <= L.length; i++){//InsertSort(L);Output(&L.elem[i]);}break;case 10:printf(\"\\n请输入您想查找的分数:\\n\");scanf(\"%d\",&f);Search(&L,f);puts(\"\\n\");break;}}printf(\"\\n\\n谢谢您的使用,请按任意键退出\\n\\n\\n\");system(\"pause\");return 0;}``## 软件设计说明书在本博客下,请移步到我的博客下查看,谢谢!
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 学生管理系统(C/C#)详细代码及软件设计说明书