数据结构(顺序表):学生管理系统的设计与实现(C语言)

您所在的位置:网站首页 c语言创建一个顺序表 数据结构(顺序表):学生管理系统的设计与实现(C语言)

数据结构(顺序表):学生管理系统的设计与实现(C语言)

2023-07-27 22:10| 来源: 网络整理| 查看: 265

实践项目:学生管理系统的设计与实现

设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况,系统至少包含以下功能:

(1)根据指定学生个数,逐个输入学生信息;

(2)逐个显示学生表中所有学生的相关信息;

(3)给定一个学生信息,插入到表中指定的位置;

(4)删除指定位置的学生记录;

(5)统计表中学生个数;

(6)利用快速排序按照学号进行排序;

(7)分别利用直接插入排序和折半插入排序按照成绩进行排序;

(8)根据成绩进行折半查找,成功返回此学生的学号和姓名。

注:本系统是参照网上改编,最后由同学帮助改正。vc6.0运行,

#include #include #include #define MAXSIZE 100 typedef struct Student{ double no;// 学号 char name[20];// 姓名 int price;// 成绩 }Student; int sum=0; typedef struct{ Student elem[MAXSIZE];//线性表占用的数组空间 int last;//最后一个元素的下标 }SeqList; //根据指定学生个数,逐个输入学生信息 void inList(SeqList *L,int i) { int x; printf("请输入学生的数量:"); scanf("%d",&x); printf("\n"); sum=x; for(i=1;ielem[i].no); printf("-----------------------------\n"); printf("姓名:"); scanf("%s",&L->elem[i].name); printf("-----------------------------\n"); printf("成绩:"); scanf("%d",&L->elem[i].price); printf("-----------------------------\n"); } L->last=x; printf("\n"); } //逐个显示学生表中所有学生的相关信息 void outList(SeqList *L,int i) { printf("所有学生的相关信息为:\n\n"); for(i=1;ilast;i++) { printf("学号:%.0lf姓名:%s 成绩:%d\n\n",L->elem[i].no,L->elem[i].name,L->elem[i].price); } printf("\n"); } //给定一个学生信息,插入到表中指定位置 int InsList(SeqList *L,int i,Student e) //插入学生信息 { /*在L中第i个位置之前插入新的数据元素e,L的长度加1*/ int k; if(iL->last+2)) { return 0; } for(k=L->last;k>=i;k--) //元素向后移动位置 L->elem[k+1]=L->elem[k]; L->elem[i]=e; L->last++; return 1; } //删除指定位置的学生记录 int DelList(SeqList *L,int i) { int k; if(iL->last+1) return 0; for(k=i;klast;k++) { L->elem[k]=L->elem[k+1]; //将后面元素依次前移 } L->last--; return 1; } //统计学生数量 void numberList(SeqList *L) { printf("总学生个数为:%d\n\n",sum); } //直接插入排序 void InsertSort(SeqList* L) { int i, j; for(i=2;ilast;i++) if (L->elem[i].price < L->elem[i - 1].price)//待比较数值小于前一个数 { L->elem[0] = L->elem[i]; L->elem[i] = L->elem[i-1]; for (j =i-2;L->elem[0].price < L->elem[j].price; --j) L->elem[j + 1] = L->elem[j]; L->elem[j + 1] = L->elem[0]; } printf("按成绩进行直接插入排序为:\n"); for(i=1;ilast;i++) { printf("学号:%.0lf 姓名:%s 成绩:%d\n\n",L->elem[i].no,L->elem[i].name,L->elem[i].price); } printf("\n"); } //折半插入排序(成绩) void BInsert_price(SeqList*L) { int low,j;int high; if(L->lastelem[i]; for(i=1;ilast;i++) { a[0]=a[i]; low=1;high=i; while(lowelem[i].no,L->elem[i].name,L->elem[i].price); } printf("\n"); } //根据成绩进行折半查找,成功返回此学生的学号和姓名 void Binary_Search(SeqList *L) { int key; printf("输入要查找的学生成绩:"); scanf("%d",&key); int low=1,high=L->last; while(lowelem[mid].price==key) { printf("学号:%.0lf 姓名:%s\n",L->elem[mid].no,L->elem[mid].name); return; } else if(L->elem[mid].priceelem[mid].price>key) high=mid-1; } printf("错误!!!没有此学生信息!\n"); } //快速排序(学号) int Patition(SeqList *L,int low,int high) { L->elem[0]=L->elem[low]; //用第一个记录作枢轴记录 double pivotkey=L->elem[low].no; //枢轴记录关键字 while(low=pivotkey) --high; L->elem[low]=L->elem[high]; //将比枢轴小的记录移动到低端 while(lowelem[low].noelem[high]=L->elem[low]; //将比枢轴大的记录移动到高端 } L->elem[low]=L->elem[0]; //枢轴记录到位 return low; //返回枢轴位置 } void QSort(SeqList *L,int low,int high) { //对表L中的子序列L.r[low...high]做快速排序 if (lowlast); } int main() { int i,x,a,select,c; SeqList L; Student m,e; printf("********************************************************************\n"); printf("* 1. 根据指定学生个数,逐个输入学生信息; *\n"); printf("* 2. 逐个显示学生表中所有学生的相关信息; *\n"); printf("* 3. 给定一个学生信息,插入到表中指定的位置; *\n"); printf("* 4. 删除指定位置的学生记录; *\n"); printf("* 5. 统计表中学生个数; *\n"); printf("* 6. 利用快速排序按照学号进行排序; *\n"); printf("* 7. 分别利用直接插入排序和折半插入排序按照成绩进行排序; *\n"); printf("* 8. 根据成绩进行折半查找,成功返回此学生的学号和姓名; *\n"); printf("* 9. 退出; *\n"); printf("********************************************************************\n"); printf("\n"); while(select) { printf("请选择你要操作的选项:"); scanf("%d",&select); printf("\n"); switch(select) { case 1:inList(&L,i);break; case 2:outList(&L,i);break; case 3: printf("请输入你要插入的位置:"); scanf("%d",&a); printf("请输入插入学生信息:\n"); printf("学号:"); scanf("%lf",&m.no); printf("姓名:"); scanf("%s",&m.name); printf("成绩:"); scanf("%d",&m.price); if(InsList(&L,a,m)) { sum++; printf("插入成功!\n\n"); } else printf("插入失败!\n\n"); break; case 4: printf("请输入要删除学生的位置:"); scanf("%d",&c); if(DelList(&L,c)) { sum--; printf("删除成功!\n\n"); } else printf("删除失败!\n\n"); break; case 5:numberList(&L);break; case 6:QuickSort(&L); printf("按学号进行快速排序为\n"); outList(&L,i); break; case 7:InsertSort(&L); BInsert_price(&L); break; case 8:Binary_Search(&L);break; case 9: { printf("\n退出系统成功!请按任意键结束!\n"); exit(0); } break; } } return 0; }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3