已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计一 学生成绩管理一、实验目的:基于顺序表或单链表实现学生成绩的常规管理。二、实验内容及要求:已知学生结构体的类型定义如下:typedef struct long num;/ 编号 char name20; /姓名 char sex; /性别 float english; /英语 float math; /高数 float computer; /计算机float score; /总成绩 ElemType;1设计头文件StuList.h,包含数据类型定义和成绩表的基本操作;2设计程序文件StuList.cpp,完成一个班级学生成绩的管理,实现:成绩的录入、查询、删除、修改、输出、保存、排序(以总成绩为关键字)等功能。注:学生成绩表信息存入二进制文件Student.dat学生表格式如下:编号(num) 姓名(name) 性别(sex) 英语(english) 高数(math) 计算机(computer) 总成绩(score)1001 LI M 78 67 731002 ZHANG F 87 87 851003 WANG F 67 76 91附参考程序清单:StuList.h#include #include #include #include using namespace std;const int LIST_INIT_SIZE=10;const int LISTINCREMENT=5;/ 数据元素结构定义typedef structlong num; /编号char name20; /姓名char sex; /性别float english; /英语 float math; /高数 float computer; /计算机float score; /总成绩ElemType;/顺序表的结构定义typedef structElemType *elem; /存储空间基址int length; /当前长度int listsize; /当前分配的存储容量以一数据元素存储长度为单位int incrementsize;/约定的增补空间长度SqList; /顺序表的基本操作void ErrorMessage(char *s) /错误处理函数coutsendl;exit(1);/ 1. 初始化操作void InitList_Sq(SqList &L, int maxsize=LIST_INIT_SIZE, int incresize=LISTINCREMENT)L.elem=new ElemType maxsize;L.length=0;L.listsize=maxsize;L.incrementsize=incresize;/ 2. 查找元素(按编号)int LocateElem_Sq(SqList &L, ElemType e)for(int i=0;iL.length;i+)if(L.elemi.num=e.num) return i+1;return 0; / 3. 得到某元素void GetElem_Sq(SqList &L, int i, ElemType &e)e=L.elemi-1;/ 4. 插入元素操作1void increment(SqList &L) /为线性表追加存储空间ElemType *p=new ElemTypeL.listsize+L.incrementsize;for(int i=0;i=L.listsize)increment(L);if(L.length =0)L.elem0=e;L.length+;elseint i=L.length-1; while(L.elemi.nume.num&i=0)L.elemi+1=L.elemi;i-; L.elemi+1=e; +L.length; / 5. 插入元素操作2void ListInsert_Sq(SqList &L, int i, ElemType e ) / 在顺序线性表 L 的第 i 个元素之前插入新的元素 e,i 的合法值为 / 1iL.length+1, 若表中容量不足,则按预定义增量扩容 if (iL.length+1) ErrorMessage( i 值不合法); if (L.length=L.listsize) increment(L); / 当前存储空间已满,为 L 增加分配 L.incrementsize 个元素空间 ElemType *q = &(L.elemi-1); / q为插入位置 for (ElemType *p=&(L.elemL.length-1); p=q;-p) *(p+1) = *p; / 插入位置及之后的元素右移 *q = e; / 插入e +L.length; / 表长增1 / ListInsert_Sq/ 6. 删除元素操作void ListDelete_Sq(SqList &L, int i,ElemType e)/ 在顺序线性表 L 中删除第 i 个元素,并用 e 返回其值。i 的合法值为 1iL.length。if (iL.length) ErrorMessage(i值不合法); ElemType *p=&(L.elemi-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. 销毁结构操作void DestroyList_Sq(SqList &L)delete L.elem;L.listsize=0;L.length=0;/ 8. 清空表void ClearList_Sq(SqList &L)L.length=0;/ 9. 判断表是否为空表bool ListEmpty_Sq(SqList &L)if(L.length=0)return true;else return false;/ 10. 依次输出线性表中的每个数据元素void ListTraverse_Sq(SqList &L)cout= 学生成绩表 =endlendl;cout编号 姓名 性别 英语 高数 计算机 总成绩endl;for(int i=0;iL.length;i+)coutsetiosflags(ios_base:left)setw(8)L.elemi.numsetw(10)L.resetiosflags(ios_base:left)setw(4)L.elemi.sexsetw(10)L.elemi.englishsetw(10)L.elemi.mathsetw(10)L.putersetw(10)L.elemi.scoreendl;/ 11. 输入数据元素void input(char *tname,SqList &L)int n;ElemType e;ofstream wfile;wfile.open(tname,ios_base:binary);coutn;cout请输入n个学生的编号、姓名、性别、英语、高数、计算机成绩,建立学生成绩表:endl;for(int i=1 ;puter;e.score=e.english+e.math+puter;ListInsert_Sq(L,e);wfile.write(char *)(&e),sizeof(ElemType);wfile.close();/ 12. 读入文件中的学生信息void load(char *tname,SqList &L)ElemType e;ifstream rfile;rfile.open(tname,ios_base:binary);while(rfile.read(char *)(&e),sizeof(e)ListInsert_Sq(L,e);rfile.close();/ 13. 学生信息写入磁盘文件中void save(char *tname,SqList &L)ofstream save;save.open(tname,ios_base:binary);for(int i=0;iL.length;i+)save.write(char *)(&L.elemi),sizeof(ElemType);save.close();/ 14. 按编号排序void Sort_num(SqList &L)int i,j,k;ElemType e;for(i=0;iL.length-1;i+)k=i;for(j=i+1;jL.length;j+)if(L.elemj.numL.elemk.num) k=j;if(i!=k) e=L.elemi; L.elemi=L.elemk;L.elemk=e;/ 15.按总成绩排序void Sort_score(SqList &L)int i,j,k;ElemType e;for(i=0;iL.length-1;i+)k=i;for(j=i+1;jL.length;j+)if(L.elemj.scoreL.elemk.score) k=j;if(i!=k) e=L.elemi; L.elemi=L.elemk;L.elemk=e;StuList.cpp#include StuList.hint main()ElemType e;int i,n;bool flag=true;char yn;char stutable30;SqList L;InitList_Sq(L,LIST_INIT_SIZE,LISTINCREMENT);coutstutable;fstream file;file.open(stutable,ios:in);if(!file)coutyn;if(yn=Y|yn=y) file.close();input(stutable,L);elsefile.close();load(stutable,L);cout学生表的内容为:endl;ListTraverse_Sq(L); while(flag) coutn 学生成绩表操作菜单 n;cout=n;cout 1 插入 nendl;cout 2 删除 nendl;cout 3 查找某个元素nendl;cout 4 输出顺序表nendl;cout 5 保存nendl;cout 6 修改nendl;cout 7 排序(按成绩)nendl;cout 8 排序(按编号)nendl;cout 9 退出nendl;cout=n;cout n;coutn;switch (n) case 1:puter;e.score=e.english+e.math+puter;ListInsert_Sq(L,e);break; case 2 :coute.num;char yn;i=LocateElem_Sq(L,e);if(i=0) cout编号为 e.num的学生不存在,不能被删除n; break ; coutyn; if(yn=Y|yn=y) ListDelete_Sq(L,i,e);else cout 不删除endl; break; case 3: coute.num; i=LocateElem_Sq(L,e); if(i!=0) GetElem_Sq(L,i,e); cout该学生的编号 姓名 性别 英语 高数 计算机 总成绩:n ; cout e.num e.sex e.english e.math puter e.scoreendl; else coutendl!编号为 e.num的学生不存在!n; break; case 4: ListTraverse_Sq(L); break; case 5: save(stutable,L);break; case 6: coute.num; i=LocateElem_Sq(L, e); if(i!=0) GetElem_Sq(L,i,e);cout该学生的编号 姓名 性别 英语 高数 计算机 总成绩:n ;cout e.num e.sex e.english e.math puter e.scoreendl; coutyn;if(yn=y|yn=Y)ListDelete_Sq(L,i,e)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 附中乐理考试题目及答案
- 发动机基础考试题及答案
- 镤矿生产建设项目可行性研究报告
- 靖西市乒乓主题体育公园项目可行性研究报告编制服务采购项目
- 食用菌可行性研究报告
- 高中心理健康试题及答案
- Maya 2024三维设计基础教程(全彩微课版)教学大纲、教案全套
- 2025年中药学类之中药学(中级)题库附答案(典型题)
- 2025年中级银行从业资格之中级风险管理真题练习试卷B卷附答案
- 铁路道口协议书
- 血管搭桥手术中的术中监测
- 课间游戏课件教学课件
- 二手摩托车交易协议书范文电子版
- 《边缘计算与人工智能应用开发技术》全套教学课件
- 预算编制服务投标方案(技术标)
- 国开2024年秋季《形势与政策》大作业答案
- 11J930住宅建筑构造图集
- DL-T2078.2-2021调相机检修导则第2部分:保护及励磁系统
- 低应变桩身完整性检测
- T-JGXH 006-2020 金属覆盖层 键合插针化学镀镍-磷合金镀层规范和试验方法
- 2024年山东省水利安全生产知识竞赛考试题库(含答案)
评论
0/150
提交评论