【练习】学生成绩管理系统
来源:互联网 发布:爱奇艺视频转换器mac版 编辑:程序博客网 时间:2024/06/05 15:59
学生成绩管理是学校教务部门日常工作的重要组成部分,其处理信息量很大。这个项目是对学生成绩管理的简单模拟,用菜单选择方式完成下列功能:
- 输入学生数据
- 输出学生数据
- 学生数据查询
- 添加学生数据
- 修改学生数据
- 删除学生数据
本项目的数据是一组学生的成绩信息,每条学生的成绩信息由学号、姓名和成绩组成,这组学生的成绩信息具有相同特性,属于同一数据对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据具有线性表中数据元素的性质,所以该系统的数据采用线性表来存储。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点,本项目可以采用顺序表的线性表顺序存储结构。
- 源码如下
#include<iostream>#include<iomanip>#include<malloc.h>#include<string.h>using namespace std;#define MaxListSize 20#define EQUAL 1typedef struct STU{ char stuno [10]; char name [10]; float score; int age;}ElemType;class List{private: //线性表的数组表示 ElemType elem[MaxListSize]; int length; int MaxSize; public: //输入学生数据 void init(List **L,int ms); //删除所有学生数据 void DestroyList(List &L){free(&L);} //将顺序表置为空表 void ClearList(){length=0;} //判断顺序表是否为空表 bool ListEmpty() {return length==0;} //判断顺序表是否为满 bool ListFull() {return length==MaxSize;} //删除某个学生数据 bool ListDelete(int,ElemType &e); //遍历顺序表 void ListTraverse(); //返回顺序表的长度 int ListLength(); //学生数据查询 void GetElem(int,ElemType *); //修改学生数据 bool UpdateList(ElemType& e,ElemType); //添加学生数据 bool ListInsert(int,ElemType &); //对学生数据按升序或降序输出 void printlist(int); bool EqualList(ElemType *,ElemType *); bool Less_EqualList(ElemType *,ElemType *); bool LocateElem(ElemType ,int);};void List::init(List **L,int ms){*L=(List *)malloc(sizeof(List)); (*L)->length=0; (*L)->MaxSize=ms;}int List::ListLength(){return length;}bool List::ListDelete(int mark,ElemType &e){int i,j; if(ListEmpty()) return false; if(mark>0) { //删除表头元素 e=elem[0]; for(i=1; i<length; i++) elem[i-1]=elem[i];} else //删除表尾元素 if(mark<0) e=elem[length-1]; else { //删除值为e的元素 for(i=0;i<length;i++) if(strcmp(elem[i].name,e.name)==0) break; if(i>=length) return false; else e=elem[i]; for(j=i+1;j<length;j++) elem[j-1]=elem[j];} length--; return true;}void List::ListTraverse(){for(int i=0;i<length;i++) {cout<<setw(8)<<elem[i].name; cout<<setw(10)<<elem[i].stuno; cout<<setw(9)<<elem[i].age; cout<<setw(8)<<elem[i].score<<endl;}}void List::GetElem(int i,ElemType *e){*e=elem[i];}bool List::EqualList(ElemType *e1,ElemType *e2){ if (strcmp(e1->name,e2->name)) return false; if (strcmp(e1->stuno,e2->stuno)) return false; if (e1->age!=e2->age) return false; if (e1->score!=e2->score) return false; return true;}bool List::Less_EqualList(ElemType *e1,ElemType *e2){ if(strcmp(e1->name,e2->name)<=0) return true; else return false;}bool List::LocateElem(ElemType e,int type){ int i; switch (type) { case EQUAL: for(i=0;i<length;i++) if(EqualList(&elem[i],&e)) return true; break; default:break;} return false;}//修改学生数据bool List::UpdateList(ElemType& e,ElemType e1){for(int i=0;i<length;i++) if(strcmp(elem[i].name,e.name)==0) { elem[i]=e1;return true;} return false;}bool List::ListInsert(int i,ElemType &e){ElemType *p,*q; if(i<1||i>length+1) return false; q=&elem[i-1]; for(p=&elem[length-1];p>=q;--p) *(p+1)=*p; *q=e; ++length; return true;}//对学生成绩按升序或降序输出void List::printlist(int mark){int* b=new int[length]; int i,k; cout<<" 姓名 学号 成绩\n"; if(mark!=0){ for(i=0; i<length;i++) b[i]=i; for(i=0; i<length;i++) {k=i; for(int j=i+1;j<length;j++) { if(mark==1&&elem[b[j]].score<elem[b[k]].score) k=j; if(mark==-1&&elem[b[k]].score<elem[b[j]].score) k=j;} if(k!=i) {int x=b[i];b[i]=b[k];b[k]=x;}} for(int i=0;i<length;i++) {cout<<setw(8)<<elem[b[i]].name; cout<<setw(10)<<elem[b[i]].stuno; cout<<setw(9)<<elem[b[i]].age; cout<<setw(8)<<elem[b[i]].score<<endl;}} else { for(i=0;i<length;i++) {cout<<setw(8)<<elem[i].name; cout<<setw(10)<<elem[i].stuno; cout<<setw(9)<<elem[i].age; cout<<setw(8)<<elem[i].score<<endl;}}}int main(){ cout<<"linelist1m.cpp运行结果:\n"; ElemType e,e1,e2,e3,e4,e5,e6; List *La,*Lb,*Lc; int k; cout<<"首先调用插入函数.\n"; La->init(&La,4); strcpy(e1.name,"stu1"); strcpy(e1.stuno,"100001"); e1.age=22; e1.score=88; La->ListInsert(1,e1); strcpy(e2.name,"stu2"); strcpy(e2.stuno,"100002"); e2.age=21; e2.score=79; La->ListInsert(2,e2); strcpy(e3.name,"stu3"); strcpy(e3.stuno,"100003"); e3.age=19; e3.score=87; La->ListInsert(3,e3); La->printlist(0); cout<<"表La长:"<<La->ListLength()<<endl; cin.get(); Lb->init(&Lb,4); strcpy(e4.name,"zmofun"); strcpy(e4.stuno,"100001"); e4.age=20; e4.score=94; Lb->ListInsert(1,e4); strcpy(e5.name,"bobjin"); strcpy(e5.stuno,"100002"); e5.age=23; e5.score=69; Lb->ListInsert(2,e5); strcpy(e6.name,"stu1"); strcpy(e6.stuno,"100001"); e6.age=22; e6.score=88; Lb->ListInsert(3,e6); Lb->printlist(0); cout<<"表Lb长:"<<Lb->ListLength()<<endl; cin.get(); k=Lc->ListDelete(-1,e6); if(k==0) cout<<"删除失败!\n"; else cout<<"删除成功!\n"; cout<<"输出表Lc:\n"; Lc->printlist(0); cin.get(); cout<<"按成绩升序输出表Lc\n"; Lc->printlist(1);cin.get(); cout<<"按成绩降序输出表Lc\n"; Lc->printlist(-1);cin.get(); return 0;}
阅读全文
0 0
- c++练习-学生成绩管理系统
- 【练习】学生成绩管理系统
- Java GUI 实战练习 学生成绩管理系统
- lua 自学笔记 练习篇-学生成绩管理系统之学生文档
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 学生成绩管理系统
- 顺序表的实现
- caffe源码阅读之layer(2)——DataLayer层(2)
- LWIP 实现DHCP及DNS功能
- RecycleView适配器 Persener层
- eclipse查看一个方法被谁引用的快捷键
- 【练习】学生成绩管理系统
- Windows下安装MySql的图文详解
- JavaScript (二)我的第一个JavaScript程序
- webpack+vue+elementui构建后台管理系统
- Maven工程远程部署Tomcat配置
- Linux中模拟shell实现mybash
- MVC三层架构
- 二级列表购物车
- 文章标题