数据结构 设计一 学生成绩管理.docx
- 文档编号:28586634
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:15
- 大小:18.12KB
数据结构 设计一 学生成绩管理.docx
《数据结构 设计一 学生成绩管理.docx》由会员分享,可在线阅读,更多相关《数据结构 设计一 学生成绩管理.docx(15页珍藏版)》请在冰豆网上搜索。
数据结构设计一学生成绩管理
设计一学生成绩管理
一、实验目的:
基于顺序表或单链表实现学生成绩的常规管理。
二、实验内容及要求:
已知学生结构体的类型定义如下:
typedefstruct
{longnum;//编号
charname[20];//姓名
charsex;//性别
floatenglish;//英语
floatmath;//高数
floatcomputer;//计算机
floatscore;//总成绩
}ElemType;
1.设计头文件StuList.h,包含数据类型定义和成绩表的基本操作;
2.设计程序文件StuList.cpp,完成一个班级学生成绩的管理,实现:
成绩的录入、查询、删除、修改、输出、保存、排序(以总成绩为关键字)等功能。
注:
学生成绩表信息存入二进制文件Student.dat
学生表格式如下:
编号(num)姓名(name)性别(sex)英语(english)高数(math)计算机(computer)总成绩(score)
1001LIM786773
1002ZHANGF878785
1003WANGF677691
……
附参考程序清单:
StuList.h
#include
#include
#include
#include
usingnamespacestd;
constintLIST_INIT_SIZE=10;
constintLISTINCREMENT=5;
//数据元素结构定义
typedefstruct
{longnum;//编号
charname[20];//姓名
charsex;//性别
floatenglish;//英语
floatmath;//高数
floatcomputer;//计算机
floatscore;//总成绩
}ElemType;
//顺序表的结构定义
typedefstruct
{
ElemType*elem;//存储空间基址
intlength;//当前长度
intlistsize;//当前分配的存储容量以一数据元素存储长度为单位
intincrementsize;//约定的增补空间长度
}SqList;
//顺序表的基本操作
voidErrorMessage(char*s)//错误处理函数
{
cout<
exit
(1);
}
//1.初始化操作
voidInitList_Sq(SqList&L,intmaxsize=LIST_INIT_SIZE,intincresize=LISTINCREMENT)
{
L.elem=newElemType[maxsize];
L.length=0;
L.listsize=maxsize;
L.incrementsize=incresize;
}
//2.查找元素(按编号)
intLocateElem_Sq(SqList&L,ElemTypee)
{
for(inti=0;i if(L.elem[i].num==e.num)returni+1; return0; } //3.得到某元素 voidGetElem_Sq(SqList&L,inti,ElemType&e) { e=L.elem[i-1]; } //4.插入元素操作1 voidincrement(SqList&L)//为线性表追加存储空间 { ElemType*p=newElemType[L.listsize+L.incrementsize]; for(inti=0;i p[i]=L.elem[i]; delete[]L.elem; L.elem=p; L.listsize=L.listsize+L.incrementsize; } voidListInsert_Sq(SqList&L,ElemTypee) { if(L.length>=L.listsize) increment(L); if(L.length==0) { L.elem[0]=e; L.length++; } else { inti=L.length-1; while(L.elem[i].num>e.num&&i>=0) { L.elem[i+1]=L.elem[i]; i--; } L.elem[i+1]=e; ++L.length; } } //5.插入元素操作2 voidListInsert_Sq(SqList&L,inti,ElemTypee) {//在顺序线性表L的第i个元素之前插入新的元素e,i的合法值为 //1≤i≤L.length+1,若表中容量不足,则按预定义增量扩容 if(i<1||i>L.length+1)ErrorMessage("i值不合法"); if(L.length>=L.listsize)increment(L); //当前存储空间已满,为L增加分配L.incrementsize个元素空间 ElemType*q=&(L.elem[i-1]);//q为插入位置 for(ElemType*p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;//插入位置及之后的元素右移 *q=e;//插入e ++L.length;//表长增1 }//ListInsert_Sq //6.删除元素操作 voidListDelete_Sq(SqList&L,inti,ElemTypee) {//在顺序线性表L中删除第i个元素,并用e返回其值。 i的合法值为1≤i≤L.length。 if((i<1)||(i>L.length))ErrorMessage("i值不合法"); ElemType*p=&(L.elem[i-1]);//p为第i-1个结点的地址,也即删除元素 e=*p; ElemType*q=L.elem+L.length-1;//q为最后一个结点的地址 for(++p;p<=q;++p) *(p-1)=*p; --L.length; }//ListDelete_Sq //7.销毁结构操作 voidDestroyList_Sq(SqList&L) { delete[]L.elem; L.listsize=0; L.length=0; } //8.清空表 voidClearList_Sq(SqList&L) { L.length=0; } //9.判断表是否为空表 boolListEmpty_Sq(SqList&L) { if(L.length==0) returntrue; elsereturnfalse; } //10.依次输出线性表中的每个数据元素 voidListTraverse_Sq(SqList&L) { cout<<"========================学生成绩表========================"< cout<<"编号姓名性别英语高数计算机总成绩"< for(inti=0;i cout< : left)< < : left)< < } //11.输入数据元素 voidinput(char*tname,SqList&L) { intn; ElemTypee; ofstreamwfile; wfile.open(tname,ios_base: : binary); cout<<"请输入学生表中的人数: "; cin>>n; cout<<"请输入"< "< for(inti=1;i<=n;i++) { cin>>e.num>>e.name>>e.sex>>e.english>>e.math>>puter; e.score=e.english+e.math+puter; ListInsert_Sq(L,e); wfile.write((char*)(&e),sizeof(ElemType)); } wfile.close(); } //12.读入文件中的学生信息 voidload(char*tname,SqList&L) { ElemTypee; ifstreamrfile; rfile.open(tname,ios_base: : binary); while(rfile.read((char*)(&e),sizeof(e))) { ListInsert_Sq(L,e); } rfile.close(); } //13.学生信息写入磁盘文件中 voidsave(char*tname,SqList&L) { ofstreamsave; save.open(tname,ios_base: : binary); for(inti=0;i save.write((char*)(&L.elem[i]),sizeof(ElemType)); save.close(); } //14.按编号排序 voidSort_num(SqList&L) { inti,j,k; ElemTypee; for(i=0;i { k=i; for(j=i+1;j if(L.elem[j].num if(i! =k) { e=L.elem[i]; L.elem[i]=L.elem[k]; L.elem[k]=e; } } } //15.按总成绩排序 voidSort_score(SqList&L) { inti,j,k; ElemTypee; for(i=0;i { k=i; for(j=i+1;j if(L.elem[j].score if(i! =k) { e=L.elem[i]; L.elem[i]=L.elem[k]; L.elem[k]=e; } } } StuList.cpp #include"StuList.h" intmain() { ElemTypee; inti,n; boolflag=true; charyn; charstutable[30]; SqListL; InitList_Sq(L,LIST_INIT_SIZE,LISTINCREMENT); cout<<"请输入学生基本信息表表名: "; cin>>stutable; fstreamfile; file.open(stutable,ios: : in); if(! file) { cout<<"学生表不存在,建立一个新的学生表(Y/N)? "; cin>>yn; if(yn=='Y'||yn=='y') {file.close(); input(stutable,L); } } else { file.close(); load(stutable,L); cout<<"学生表的内容为: "< ListTraverse_Sq(L); } while(flag) { cout<<"\n学生成绩表操作菜单\n"; cout<<"======================================\n"; cout<<"1插入\n"< cout<<"2删除\n"< cout<<"3查找某个元素\n"< cout<<"4输出顺序表\n"< cout<<"5保存\n"< cout<<"6修改\n"< cout<<"7排序(按成绩)\n"< cout<<"8排序(按编号)\n"< cout<<"9退出\n"< cout<<"======================================\n"; cout<<"\n"; cout<<"Pleaseselect1、2、3、4、5、6、7、8、9: "; cin>>n; switch(n) { case1: cout<<"请输入要插入学生的编号、姓名、性别、英语、高数、计算机成绩: \n"; cin>>e.num>>e.name>>e.sex>>e.english>>e.math>>puter; e.score=e.english+e.math+puter; ListInsert_Sq(L,e); break; case2: cout<<"请输入要删除学生的编号: "; cin>>e.num; charyn; i=LocateElem_Sq(L,e); if(i==0) { cout<<"编号为"< break; } cout<<"你确实要删除么? "; cin>>yn; if(yn=='Y'||yn=='y') ListDelete_Sq(L,i,e); else {cout<<"不删除"< break; case3: {cout<<"请输入要查找的学生编号: "; cin>>e.num; i=LocateElem_Sq(L,e); if(i! =0) {GetElem_Sq(L,i,e); cout<<"该学生的编号姓名性别英语高数计算机总成绩: \n"; cout<<""< < } elsecout< ! 编号为"< ! \n"; } break; case4: ListTraverse_Sq(L); break; case5: { save(stutable,L); break; } case6: cout<<"请输入要修改的学生的编号: "; cin>>e.num; i=LocateElem_Sq(L,e); if(i! =0) {GetElem_Sq(L,i,e); cout<<"该学生的编号姓名性别英语高数计算机总成绩: \n"; cout<<""< < cout<<"确实要修改么Y/N? "; cin>>yn; if(yn=='y'||yn=='Y') { ListDelete_Sq(L,i,e); cout<<"请输入该学生新的编号、姓名、性别、英语、高数、计算机成绩: \n"; cin>>e.num>>e.name>>e.sex>>e.english>>e.math>>puter; e.score=e.english+e.math+puter; ListInsert_Sq(L,e); } } elsecout< ! 编号为"< ! \n"; break; case7: Sort_score(L); break; case8: Sort_num(L); break; case9: flag=false; break; default: cout< ! 选择错误,请重新选择! ! "< } } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 设计一 学生成绩管理 设计 学生 成绩 管理