顺序表实现学生信息管理系统
#include <iostream>
#include<iomanip>
#include <fstream>
#include<string>
using namespace std;
#define MAXSIZE 10000
#define OK 1
#define ERROR 0
typedef int Status;
typedef struct {
string no; //8位学号
string name; //姓名
int score; //成绩
}Student;
typedef Student ElemType;
typedef struct{ //顺序表的结构体
ElemType *elem;
int length;
int listSize;
}SqList;
void Menu(){
cout<<"********欢迎使用学生成绩管理系统********"<<endl;
cout<<"1.输入学生人数与信息"<<endl;
cout<<"2.从指定文件输入学生信息来初始化线性表"<<endl;
cout<<"3.显示学生信息"<<endl;
cout<<"4.根据姓名查找学生信息"<<endl;
cout<<"5.显示指定学生信息"<<endl;
cout<<"6.在指定位置插入学生信息"<<endl;
cout<<"7.学生信息更新"<<endl;
cout<<"8.删除指定位置的学生信息"<<endl;
cout<<"9.统计学生个数"<<endl;
cout<<"10.退出程序"<<endl;
}
void CreatList(int n,SqList &L){ //创建顺序表并输入学生信息
L.elem = new ElemType[MAXSIZE];
L.length=0;
for(int i=0;i<n;i++){
cout<<"请输入学生姓名: "<<endl;
cin>>L.elem[i].name;
cout<<"请输入学生学号: "<<endl;
cin>>L.elem[i].no;
cout<<"请输入学生成绩: "<<endl;
cin>>L.elem[i].score;
L.length++;
}
}
void OpenFile(SqList &L) //从指定文件输入学生信息来初始化线性表
{
L.elem=new ElemType[MAXSIZE];
char filename[20]={0};
int i=0;
cout<<"请输入文件的名称: "<<endl;;
cin>>filename;
fstream file;
file.open(filename);
if(!file){
cout<<"未找到相关文件,无法打开!"<<endl;
}
while(!file.eof()){
file>>L.elem[i].name>>L.elem[i].no>>L.elem[i].score;
i++;
}
cout<<"录入学生信息完毕"<<endl;
file.close();
}
void DisplayList(SqList &L){ //显示学生信息
for(int i=0;i<L.length;i++)
{
cout<<"姓名: "<<L.elem[i].name<<endl;
cout<<"学号: "<<L.elem[i].no<<endl;
cout<<"成绩: "<<L.elem[i].score<<endl;
}
}
void SearchName(SqList &L){ //根据姓名查找学生信息
string str1,str2;
int i=0;
cout<<"请输入姓名:";
cin>>str1;
while(i<L.length)
{
str2=L.elem[i].name;
if(str2==str1)
{
cout<<"该生的学号是: "<<L.elem[i].no<<endl;
cout<<"该生的成绩是: "<<L.elem[i].score<<endl;
}
i++;
}
if(i==L.length&&(str2!=str1))
cout<<"没有该生的信息!"<<endl;
}
void Query(int pos,SqList &L){ //显示指定学生信息
cout<<"姓名: "<<L.elem[pos-1].name<<endl;
cout<<"学号: "<<L.elem[pos-1].no<<endl;
cout<<"成绩: "<<L.elem[pos-1].score<<endl;
}
Status ListInsert(SqList &L,int i,ElemType p){ //在指定位置插入学生信息
if((i<1)||(i>L.length+1))return ERROR;
if(L.length==MAXSIZE)return ERROR;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=p;
++L.length;
return OK;
}
Status Alter(SqList &L){ //学生信息更新
string str1,str2;
cout<<"请输入需要更新的学生的学号: "<<endl;
cin>>str1;
int i=0,choice;
while(1)
{
if((i==L.length)&&(L.elem[i].no!=str1)){
cout<<"没有该学生信息"<<endl;
break;
}
else if((i<L.length)&&(L.elem[i].no!=str1)){
i++;
continue;
}
else if((i<L.length)&&(L.elem[i].no==str1)){
break;
}
else{
cout<<"请重新输入学号: "<<endl;
cin>>str1;
continue;
}
}
for(i=0;i<L.length;i++){
if(L.elem[i].no==str1){
cout<<"请选择需要修改的信息"<<endl;
cout<<"1.姓名"<<"2.学号"<<"3.成绩"<<endl;
}
cin>>choice;
switch(choice){
case 1:
{
cout<<"请输入新的姓名"<<endl;
cin>>L.elem[i].name;
return OK;
}
case 2:
{
cout<<"请输入新的学号"<<endl;
cin>>L.elem[i].no;
return OK;
}
case 3:
{
cout<<"请输入新的成绩"<<endl;
cin>>L.elem[i].score;
return OK;
}
}
}
}
void ListDelete(SqList &L,int pos) //删除指定位置学生信息
{
int i;
for(i=pos;i<L.length;i++)
{
L.elem[i-1]=L.elem[i];
--L.length;
}
}
void CountData(SqList &L)
{
cout<<"学生的个数是: "<<L.length<<endl;
}
int main()
{
Menu();
SqList L;
int choose,i,pos;
int ant=-1;
L.length=0;
while(1)
{
cout<<"请输入您的选择:"<<endl;
cin>>choose;
if(choose==10)
break;
if(choose<1||choose>10)
{
cout<<"对不起,输入非法!请重新输入:";
continue;
}
switch(choose)
{
case 1: //录入学生信息
if(ant!=-1)
{
cout<<"您已将学生信息录入!"<<endl;
continue;
}
cout<<"请输入学生人数:"<<endl;
cin>>ant;
CreatList(ant,L);
continue;
case 2:
OpenFile(L);
continue;
case 3: //输出所有学生信息
DisplayList(L);
continue;
case 4: //根据姓名查找学生信息
SearchName(L);
continue;
case 5: //显示指定学生信息
cout<<"请输入需要查找的学生序号: ";
cin>>pos;
Query(pos,L);
continue;
case 6: //在指定位置插入学生信息
{
cout<<"请输入需要插入学生信息的位置: ";
cin>>i; //输入指定位置
ElemType p;
cout<<"请输入学生的姓名: "<<endl;
cin>>p.name;
cout<<"请输入学生的学号: "<<endl;
cin>>p.no;
cout<<"请输入学生的成绩: "<<endl;
cin>>p.score;
ListInsert(L,i,p);
}
continue;
case 7: //学生信息更新
Alter(L);
continue;
case 8: //删除指定位置的学生信息
cout<<"请输入需要删除的学生的序号: "<<endl;
cin>>pos;
ListDelete(L,pos);
continue;
case 9: //统计学生个数
CountData(L);
continue;
case 10:
break;
}
cout<<"谢谢您的使用,请按任意键退出"<<endl;
return 0;
}
}
链表实现学生信息管理系统
#include <iostream>
#include<iomanip>
#include <fstream>
#include<string>
using namespace std;
fstream OpenFile(); //声明文件输出流
#define MAXSIZE 10000
#define OK 1
#define ERROR 0
typedef struct {
string no; //8位学号
string name; //姓名
int score; //成绩
}Student;
typedef int Status;
typedef Student ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void Menu(){
cout<<"********欢迎使用学生成绩管理系统********"<<endl;
cout<<"1.输入学生人数与信息"<<endl;
cout<<"2.从指定文件输入学生信息来初始化线性表"<<endl;
cout<<"3.显示学生信息"<<endl;
cout<<"4.根据姓名查找学生信息"<<endl;
cout<<"5.显示指定学生信息"<<endl;
cout<<"6.在指定位置插入学生信息"<<endl;
cout<<"7.学生信息更新"<<endl;
cout<<"8.删除指定位置的学生信息"<<endl;
cout<<"9.统计学生个数"<<endl;
cout<<"10.***输出某个成绩区间的学生"<<endl;
cout<<"11.退出程序"<<endl;
}
void CreatList(int n,LinkList &L){ //初始化链表
LinkList r,p;
L = new LNode;
L->next = NULL;
r=L;
for(int i=0;i<n;++i){
p = new LNode;
cout<<"请输入学生的姓名: "<<endl;
cin>>p->data.name;
cout<<"请输入学生的学号: "<<endl;
cin>>p->data.no;
cout<<"请输入学生的成绩: "<<endl;
cin>>p->data.score;
p->next=NULL;
r->next=p;
r=p;
}
}
void OpenFile(LinkList &L){ //通过指定文件录入学生信息
L=new LNode;
LinkList p,r;
r = L;
char filename[20] = {0};
cout<<"请输入文件的名称: ";
cin>>filename;
fstream file;
file.open(filename);
if (!file) {
cout << "未找到相关文件,无法打开!" << endl<<endl;
return;
}
while(!file.eof()){
p = new LNode;
file>>p->data.name>>p->data.no>>p->data.score;
p->next = NULL;
r->next = p;
r = p;
}
cout<<"录入学生信息完毕"<<endl<<endl;
file.close();
}
void DisplayList(LinkList &L){ //显示学生信息
LinkList p;
p=L->next;
while(p){
cout<<"学生的姓名是: "<<p->data.name<<endl;
cout<<"学生的学号是: "<<p->data.no<<endl;
cout<<"学生的成绩是: "<<p->data.score<<endl;
p=p->next;
}
}
void SearchName(LinkList &L){ //根据姓名查找学生信息
string str1,str2;
LinkList p;
p=L->next;
cout<<"请输入姓名: ";
cin>>str1;
while(p){
str2=p->data.name;
if(str2==str1){
cout<<"该生的学号是: "<<p->data.no<<endl;
cout<<"该生的成绩是: "<<p->data.score<<endl;
}
p=p->next;
}
if((p==NULL)&&(str2!=str1))
cout<<"没有该生的信息!"<<endl;
}
Status Query(int pos,LinkList L){ //显示指定学生信息
LinkList p;
int j=1;
p=L->next;
while(p&&j<pos){
p=p->next;
++j;
}
if(!p||j>pos)return ERROR;
cout<<"该生的姓名是: "<<p->data.name<<endl;
cout<<"该生的学号是: "<<p->data.no<<endl;
cout<<"该生的成绩是: "<<p->data.score<<endl;
return OK;
}
Status ListInsert(LinkList &L,int i,ElemType e){ //在指定位置插入学生信息
LinkList p,s;
int j=0;
p=L;
while(p&&(j<i-1)){
p=p->next;
++j;
}
if(!p||j>i-1)return ERROR;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status Alter(LinkList &L){ //学生信息更新
string str1,str2;
LinkList p;
p=L->next;
cout<<"请输入需要更新的学生的学号: "<<endl;
cin>>str1;
int choose;
while(1){
if((p==NULL)&&(p->data.no!=str1)){
cout<<"没有该学生信息!"<<endl;
break;
}
else if(p&&(p->data.no!=str1)){
p=p->next;
continue;
}
else if(p&&(p->data.no==str1)){
break;
}
else{
cout<<"请重新输入学号: "<<endl;
cin>>str1;
continue;
}
}
if(p->data.no==str1){
cout<<"请输入需要修改的信息"<<endl;
cout<<"1.姓名"<<"2.学号"<<"3.成绩"<<endl;
cin>>choose;
switch(choose){
case 1:
cout<<"请输入新的姓名: "<<endl;
cin>>p->data.name;
return OK;
case 2:
cout<<"请输入新的学号: "<<endl;
cin>>p->data.no;
return OK;
case 3:
cout<<"请输入新的成绩: "<<endl;
cin>>p->data.score;
return OK;
}
}
return OK;
}
Status ListDelete(LinkList &L,int pos){ //删除指定位置学生信息
LinkList p,q;
int j=0;
p=L;
while((p->next)&&(j<pos-1)){
p=p->next;
++j;
}
if(!(p->next)||(j>pos-1))return ERROR;
q=p->next;
p=p->next=q->next;
delete q;
return OK;
}
void CountData(LinkList &L){ //统计学生的个数
LinkList p;
int i=1;
p=L->next;
while(p){
p=p->next;
i++;
}
cout<<"学生的个数是: "<<i-1<<"个。"<<endl;
}
void Range(LinkList &L,int smin,int smax){
LinkList p;
p=L->next;
while(p){
if((p->data.score>smin)&&(L->data.score<smax)){
cout<<p->data.name<<" "<<p->data.no<<" "<<p->data.score;
}
p=p->next;
}
cout<<endl;
}
int main()
{
Menu();
LinkList L;
int choose,pos,i,ant=-1;
while(1){
cout<<"请输入您的选择:"<<endl;
cin>>choose;
if(choose==11)
break;
if(choose<1||choose>11)
{
cout<<"对不起,输入非法!请重新输入:";
continue;
}
switch(choose)
{
case 1: //录入学生信息
if(ant!=-1)
{
cout<<"您已将学生信息录入!"<<endl;
continue;
}
cout<<"请输入学生人数:"<<endl;
cin>>ant;
CreatList(ant,L);
continue;
case 2:
OpenFile(L);
continue;
case 3:
DisplayList(L);
continue;
case 4:
SearchName(L);
continue;
case 5:
cout<<"请输入需要查找的学生序号: ";
cin>>pos;
Query(pos,L);
continue;
case 6:
{
cout<<"请输入需要插入学生信息的位置: ";
cin>>i; //输入指定位置
ElemType p;
cout<<"请输入学生的姓名: "<<endl;
cin>>p.name;
cout<<"请输入学生的学号: "<<endl;
cin>>p.no;
cout<<"请输入学生的成绩: "<<endl;
cin>>p.score;
ListInsert(L,i,p);
}
continue;
case 7:
Alter(L);
continue;
case 8:
cout<<"请输入需要删除的学生的序号: "<<endl;
cin>>pos;
ListDelete(L,pos);
continue;
case 9: //统计学生个数
CountData(L);
continue;
case 10:
int smin,smax;
cout<<"请输入最小值smin: ";
cin>>smin;
cout<<"请输入最大值smax: ";
cin>>smax;
Range(L,smin,smax);
continue;
case 11:
break;
}
}
cout<<"谢谢您的使用,请按任意键退出"<<endl;
return 0;
}
来源:CSDN
作者:木港
链接:https://blog.csdn.net/qq_45416480/article/details/103987004