学生成绩管理系统(数据结构之线性表实现)
来源:互联网 发布:淘宝专业版店铺装修 编辑:程序博客网 时间:2024/06/05 15:21
AddrList.h
#include <iostream>#include <iomanip>#include <fstream>#include <process.h>#include <string.h>using namespace std;const int LIST_INIT_SIZE=10;const int LISTINCREMENT=5;//student,typedef struct Contacts{ char id[10]; //学号 char name[10]; //姓名 char sex[10]; //性别 char class_number[10]; //班级 char class_name[30]; //科目 char score[30]; //成绩}Student;//scorebook表typedef struct scorebook{ Student *elem; int length; int listsize; int incrementsize;}scorebook;//错误运行void ErrorMessage(char *s){ cout<<s<<endl; exit(1); //非正常运行导致退出程序}//getchar()吸收换行来模拟暂停void Pause(){ cout<<endl<<"按任意键继续......"; getchar();getchar();}//初始化 length=0,获取 maxsize, incresize,new 长度为maxsize的student数组void InitList_Sq(scorebook &L, int maxsize=LIST_INIT_SIZE, int incresize=LISTINCREMENT){ L.elem=new Student [maxsize]; L.length=0; L.listsize=maxsize; L.incrementsize=incresize;}//查找元素(按id学号查询)int LocateElem_Sq(scorebook &L, Student e){ for(int i=0;i<L.length;i++) if(strcmp(L.elem[i].id,e.id)==0) return i+1; return 0;}//获取元素void GetElem_Sq(scorebook &L, int i, Student &e){ e=L.elem[i-1];}//增加存储空间和长度void increment(scorebook &L){ Student *p=new Student[L.listsize+L.incrementsize]; for(int i=0;i<L.length;i++) p[i]=L.elem[i]; delete [] L.elem; L.elem=p; L.listsize=L.listsize+L.incrementsize;}//增加元素void ListInsert_Sq(scorebook &L, Student e){ if(L.length>=L.listsize) increment(L); if(L.length ==0) { L.elem[0]=e; L.length++; } else { int i=L.length-1; while((strcmp(L.elem[i].id,e.id)>0)&&i>=0) { L.elem[i+1]=L.elem[i]; i--; } L.elem[i+1]=e; ++L.length; } }void ListInsert_Sq(scorebook &L, int i, Student e ){ if (i<1||i>L.length+1) ErrorMessage(" i 值不合法"); if (L.length>=L.listsize) increment(L); Student *q = &(L.elem[i-1]); for (Student *p=&(L.elem[L.length-1]); p>=q;--p) *(p+1) = *p; *q = e; ++L.length;}//删除信息void ListDelete_Sq(scorebook &L, int i,Student e){ if ((i<1) || (i>L.length)) ErrorMessage("i值不合法"); Student *p=&(L.elem[i-1]); e=*p; Student *q=L.elem+L.length-1; for(++p; p<=q; ++p ) *(p-1)=*p; --L.length;}//销毁表void DestroyList_Sq(scorebook &L){ delete [] L.elem; L.listsize=0; L.length=0;}//清空表void ClearList_Sq(scorebook &L){ L.length=0;}bool ListEmpty_Sq(scorebook &L){ if(L.length==0) return true; else return false;}//输出信息void ListTraverse_Sq(scorebook &L){ cout<<"\n======================== 学生成绩信息表 ========================"<<endl<<endl; cout<<"学号、姓名、性别、班级、科目、成绩:\n"; for(int i=0;i<L.length;i++) cout<<setiosflags(ios_base::left)<<setw(12)<<L.elem[i].id <<setw(12)<<L.elem[i].name<<setw(15)<<L.elem[i].sex<<setw(10)<<L.elem[i].class_number <<setw(12)<<L.elem[i].class_name<<setw(16)<<L.elem[i].score<<resetiosflags(ios_base::left)<<endl; Pause();}//输入void input(char *tid,scorebook &L){ int n; Student e; ofstream wfile; wfile.open(tid,ios_base::binary); cout<<"请输入信息表中的联系人人数:"; cin>>n; cout<<"请输入学生的学号、姓名、性别、班级、科目、成绩:\n"; for(int i=1 ;i<=n;i++) { cin>>e.id>>e.name>>e.sex>>e.class_number>>e.class_name>>e.score; ListInsert_Sq(L,e); wfile.write((char *)(&e),sizeof(Student)); } wfile.close();}void load(char *tid,scorebook &L){ Student e; ifstream rfile; rfile.open(tid,ios_base::binary); while(rfile.read((char *)(&e),sizeof(e))) { ListInsert_Sq(L,e); } rfile.close();}void save(char *tid,scorebook &L){ ofstream save; save.open(tid,ios_base::binary); for(int i=0;i<L.length;i++) save.write((char *)(&L.elem[i]),sizeof(Student)); save.close();}//排序(按照学号)void Sort_id(scorebook &L){ int i,j,k; Student e; for(i=0;i<L.length-1;i++) { k=i; for(j=i+1;j<L.length;j++) if(strcmp(L.elem[j].id,L.elem[k].id)<0) k=j; if(i!=k) { e=L.elem[i]; L.elem[i]=L.elem[k]; L.elem[k]=e; } }}//排序(按照成绩)void Sort_class_number(scorebook &L){ int i,j,k; Student e; for(i=0;i<L.length-1;i++) { k=i; for(j=i+1;j<L.length;j++) if(strcmp(L.elem[j].score,L.elem[k].score)<0) k=j; if(i!=k) { e=L.elem[i]; L.elem[i]=L.elem[k]; L.elem[k]=e; } }}//单个输出信息void SingleOut(Student e){ cout<<"学号、姓名、性别、班级、科目、成绩:\n"; cout<<setiosflags(ios_base::left)<<setw(12)<<e.id <<setw(12)<<e.name<<setw(15)<<e.sex<<setw(10)<<e.class_number <<setw(12)<<e.class_name<<setw(16)<<e.score<<resetiosflags(ios_base::left)<<endl;}int Reademe(){ cout<<"实现:数据结构之线性表"<<endl; cout<<endl; cout<<"内容:成绩管理系统"<<endl; cout<<endl; cout<<"时间:2016-11-08 "<<endl; cout<<endl; cout<<"HPioneer一直在追逐"<<endl;}
AddrList.cpp
#include "AddrList.h"int main(){ Student e; int i,n; bool flag=true; char yn; char addlist[30]; scorebook L; InitList_Sq(L,LIST_INIT_SIZE,LISTINCREMENT); cout<<"请输入成绩表的存盘文件名:"; cin>>addlist; fstream file; file.open(addlist,ios::in); if(!file) { cout<<"成绩表不存在,建立一个新的成绩表(Y/N)?"; cin>>yn; if(yn=='Y'||yn=='y') { file.close(); input(addlist,L); } } else { file.close(); load(addlist,L); ListTraverse_Sq(L); } while(flag) { system("cls"); cout<<"\n 学生成绩管理系统主菜单 \n"; cout<<"======================================\n"; cout<<" 1 添加学生 \n"<<endl; cout<<" 2 删除学生 \n"<<endl;; cout<<" 3 按学号查找学生\n"<<endl; cout<<" 4 输出成绩表\n"<<endl; cout<<" 5 保存\n"<<endl; cout<<" 6 修改学生信息\n"<<endl; cout<<" 7 按学号排序\n"<<endl; cout<<" 8 按成绩排序(从小到大)\n"<<endl; cout<<" 9 关于作者\n"<<endl; cout<<" 0 退出\n"<<endl; cout<<"======================================\n"; cout<<" \n"; cout<<" Please select 1、 2、 3、 4、 5、 6、 7、 8、9、0: "; cin>>n; switch (n) { case 1: cout<<"请输入该学生新的学号、姓名、性别、班级、科目、成绩:\n"; cin>>e.id>>e.name>>e.sex>>e.class_number>>e.class_name>>e.score; ListInsert_Sq(L,e); break; case 2 : cout<<"请输入要删除的学生的学号:"; cin>>e.id; char yn; i=LocateElem_Sq(L,e); if(i==0) { cout<<"学号为:"<<e.id<<" 的学生不存在,不能被删除!!\n"; break ; } cout<<"你确实要删除么?"; cin>>yn; if(yn=='Y'||yn=='y') ListDelete_Sq(L,i,e); else { cout <<"!!不删除!!"<<endl;} break; case 3: { cout<<"请输入要查找的学生学号:"; cin>>e.id; i=LocateElem_Sq(L,e); if(i!=0) { GetElem_Sq(L,i,e); SingleOut(e); } else cout<<endl<<"!!学号为:"<<e.id<<" 的学生不存在!!\n"; } Pause(); break; case 4: ListTraverse_Sq(L); break; case 5: { save(addlist,L); break; } case 6: cout<<"请输入要修改的学生的学号:"; cin>>e.id; i=LocateElem_Sq(L, e); if(i!=0) { GetElem_Sq(L,i,e); SingleOut(e); cout<<"确实要修改么Y/N?"; cin>>yn; if(yn=='y'||yn=='Y') { ListDelete_Sq(L,i,e); cout<<"请输入该学生新的学号、姓名、性别、班级、科目、成绩:\n"; cin>>e.id>>e.name>>e.sex>>e.class_number>>e.class_name>>e.score; ListInsert_Sq(L,e); } } else cout<<endl<<"!!学号为 "<<e.id<<" 的学生不存在!!\n"; Pause(); break; case 7: Sort_id(L); ListTraverse_Sq(L); break; case 8: Sort_class_number(L); ListTraverse_Sq(L); break; case 9: Reademe(); Pause(); break; case 0: flag=false; break; default: cout<<endl<<"!! 选择错误,请重新选择 !!"<<endl; Pause(); } } return 0;}
因为没看课程要求就自己发挥了,在这里附上作业要求与按要求的写的代码:
题目:学生成绩管理系统
要求:
1. 基于顺序表或单链表实现学生成绩管理系统
2. 学生信息定义可参照如下结构体设计
typedef struct
{ long num;// 编号
char name[20]; //姓名
char sex; //性别
float english; //英语
float math; //高数
float computer; //计算机
float score; //总成绩
} ElemType;
3.设计头文件StuList.h,包含数据类型定义和成绩表的基本操作
4.设计程序文件StuList.cpp,以菜单形式实现系统控制
5.系统实现的功能:成绩的录入、查询、删除、修改、输出、保存、排序(以姓名、总成绩等作为关键字)、统计(如单科分数段统计)等功能。
(源代码+实验报告+作业要求)
链接:http://pan.baidu.com/s/1qYMt97m 密码:h7pv
0 0
- 学生成绩管理系统(数据结构之线性表实现)
- 学生成绩管理系统(链表的实现)
- 学生成绩管理系统链表实现
- 学生成绩管理系统(java实现)
- 数据结构 课程设计 学生成绩管理系统
- 数据结构:单链表:学生成绩管理系统
- 数据结构课程设计-学生成绩管理系统
- 数据结构-学生成绩管理系统
- 数据结构课程设计---学生成绩管理系统
- 数据结构课程设计--学生成绩管理系统
- 学生成绩管理系统课程设计(C语言,链表实现)
- 学生成绩管理系统的链表实现
- 简单学生成绩管理系统(Java实现)
- 学生成绩管理系统的初步实现(C)
- 学生成绩管理系统(C语言实现)
- 类实现学生成绩管理系统
- 课程设计之学生成绩管理系统
- 课程设计之学生成绩管理系统
- Canopy算法
- Karel,规范你的Java编程思维及编程习惯!
- .text()与.html()与.val()的区别
- [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游戏框架搭建
- 99. Recover Binary Search Tree
- 学生成绩管理系统(数据结构之线性表实现)
- 最坏情况为线性时间的选择算法---算法导论学习笔记(2)
- PL/SQL基础语法
- C++继承解析
- Hibernate初体验(1)
- OllyDbg学习进度
- Ajax的原理和应用
- 《数据结构与算法分析java语言描述》知识点总结(1-2章)
- 20161108随笔