C++/学生信息管理系统
程序员文章站
2022-03-09 19:23:09
...
设计一个学生信息管理系统,实现常见的学生基本信息的基本管理:
1. 有交互式方式
即用户可以根据提示进行操作学生信息如修改、删除、查找学生信息等操作
2. 有文件操作
学生信息存放在文件中,文件具体的地址不限制
3. 有链表结构
学生信息的基本单元存在链表中,可以进行链表的常用操作
4. 学生基本信息
学生学号(9位数字串)、姓名、性别、年龄
5. 将应用程序与存储做到有效分离: 如将应用操作用类表示,学生负责学生基本信息,链表类负责信息管理,程序类负责界面与交互
#include<iostream>
#include<string.h>
#include<fstream>
#include<stdlib.h>
using namespace std;
class Node
{
public:
int number;
char name[20];
char sex[4];
int age;
Node * next;
};
class Operator
{
public:
void CreateSort();
void HeadSortAdd();
// void TailSortAdd();
char searchPrint();
Node* searchReturn();
void print();
void PutToFile();
void InFromFile();
void del(Node* a);
void Modify(Node* a);
void sort();
int length=0;
private:
Node * head;
Node * tail;
};
//----------------------------------------------------------------------------
void Operator::sort()
{
Node *h=head;
//int len=length;
Node * t;
Node * x;
t=h->next;
x=h->next;
while(t->next!=NULL)
{
while(x!=NULL)
{
if(t->number>x->number)
{
//
int e;
e=t->number;
t->number=x->number;
x->number=e;
//
char a[20];
strcpy(a,t->name);
strcpy(t->name,x->name);
strcpy(x->name,a);
//
char b[4];
strcpy(b,t->sex);
strcpy(t->sex,x->sex);
strcpy(x->sex,b);
//
int c;
c=t->age;
t->age=x->age;
x->age=c;
}
x=x->next;
}
t=t->next;
x=t->next;
}
}
void Operator::Modify(Node* a)
{
int x=0;
Node* p;
p=a->next;
cout<<endl;
cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl<<endl;
while(x!=1&&x!=2&&x!=3&&x!=4)
{
cout<<"输入修改信息"<<endl<<"1.修改学号"<<endl<<"2.修改姓名"<<endl<<"3.修改性别"<<endl<<"4.修改年龄"<<endl;
cin>>x;
if(x==1)
{
cout<<"学号修改为:";
cin>>p->number;
}
if(x==2)
{
cout<<"姓名修改为:";
cin>>p->name;
}
if(x==3)
{
cout<<"性别修改为:";
cin>>p->sex;
}
if(x==4)
{
cout<<"修改年龄:";
cin>>p->age;
}
else
cout<<"输入错误!"<<endl;
}
}
void Operator::del(Node* a)
{
Node* p;
Node* b;
b=a->next;
p=b->next;
a->next=p;
free(b);
length--;
}
Node* Operator::searchReturn()
{
Node* p;
Node* c;
c=head;
p=head->next;
int se=0;
int i=0;
while(se!=1&&se!=2)
{
cout<<"输入查找信息"<<endl<<"1.查找学号"<<endl<<"2.查找姓名"<<endl;
cin>>se;
if(se==1)
{
int xue;
cout<<"输入学生的学号:";
cin>>xue;
while(p!=NULL)
{
if(xue==p->number)
{
if(i==1);
return c;
}
else
p=p->next;
c=c->next;
}
}
else if(se==2)
{
char sname[20];
cout<<"输入学生姓名:";
cin>>sname;
while(p!=NULL)
{
if(strcmp(sname,p->name)==0)
{
if(i==1);
return c;
}
else
p=p->next;
c=c->next;
}
}
else
{
cout<<"输入错误,请重新输入";
}
if(i!=1)
{
cout<<"未找到"<<endl;
exit(0);
}
}
}
void Operator::InFromFile()
{
tail=head;
ifstream infile("实验四.txt");
if(!infile)
{
cout<<"open error";
exit(1);
}
Node *p;
//int i=1;
p=head->next;
while(infile.peek()!=EOF)
{
p=new Node;
infile>>p->number>>p->name>>p->sex>>p->age;
//i++;
tail->next=p;
p->next=NULL;
tail=p;
length++;
}
}
void Operator::PutToFile()
{
ofstream outfile("实验四.txt");
if(!outfile)
{
cout<<"open error";
exit(1);
}
Node *p;
p=head->next;
while(p!=NULL)
{
outfile<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
p=p->next;
}
cout<<"已输出到文件“实验四.txt”"<<endl;
}
//
char Operator::searchPrint()
{
Node* p;
p=head->next;
int se=0;
int i=0;
while(se!=1||se!=2)
{
cout<<"输入"<<endl<<"1.查找学号"<<endl<<"2.查找姓名"<<endl;
cin>>se;
if(se==1)
{
int xue;
cout<<"输入查找学生的学号:";
cin>>xue;
while(p!=NULL)
{
if(xue==p->number)
{
cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
if(i==1);
return 0;
}
else
p=p->next;
}
}
else if(se==2)
{
char sname[20];
cout<<"输入查找学生姓名:";
cin>>sname;
while(p!=NULL)
{
if(strcmp(sname,p->name)==0)
{
cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
if(i==1);
return 0;
}
else
p=p->next;
}
}
else
{
cout<<"输入错误,请重新输入";
}
if(i!=1)
{
cout<<"未找到"<<endl;
exit(0);
}
}
return 0;
}
//
void Operator::print()
{
Node *p;
p=head->next;
for(int i=0;i<length;i++)
{
cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl<<endl;
p=p->next;
}
cout<<endl;
}
//
void Operator::CreateSort()
{
head = new Node;
head->next=NULL;
tail=head;
length=0;
}
void Operator::HeadSortAdd()
{
Node *p;
int n;
cout<<"输入你要“头插法”增加的学生数目:";
cin>>n;
for(int i=0;i<n;i++)
{
p=new Node;
cout<<"请以此输入学号、姓名、性别、年龄"<<endl;
cin>>p->number>>p->name>>p->sex>>p->age;
p->next=head->next;
head->next=p;
length++;
cout<<endl;
}
}
void menu(Operator A)
{
system("cls");
cout<<"\t\t\t\tMENU\t\t"<<endl;
cout<<"\t\t\t|---------------------------|\t\t"<<endl;
cout<<endl;
cout<<"\t\t\t| [1] 建立数据/继续输入 |"<<endl;
cout<<"\t\t\t| [2] 查 找 数 据 |"<<endl;
cout<<"\t\t\t| [3] 添 加 数 据 |"<<endl;
cout<<"\t\t\t| [4] 删 除 数 据 |"<<endl;
cout<<"\t\t\t| [5] 输 出 到 文 件 |"<<endl;
cout<<"\t\t\t| [6] 排 序 数 据 |"<<endl;
cout<<"\t\t\t| [7] 修 改 数 据 |"<<endl;
cout<<"\t\t\t| [8] 退 出 |"<<endl;
cout<<endl;
cout<<"\t\t\t|---------------------------|\t\t"<<endl;
if(A.length!=0)
{
cout<<"已存数据为:"<<endl;
A.print();
}
}
//------------------------
int main()
{
Operator A;
Node* searchpoint;
int choose;
while(choose!=8)
{
menu(A);
cin>>choose;
switch(choose)
{
case 1:
A.CreateSort();
A.InFromFile();
A.print();
cout<<endl;
system("pause");
break;
case 2:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
A.searchPrint();
cout<<endl;
system("pause");
break;
case 3:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
A.HeadSortAdd();
cout<<endl;
system("pause");
break;
case 4:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
cout<<"删除数据!"<<endl;
searchpoint=A.searchReturn();
A.del(searchpoint);
cout<<endl;
system("pause");
break;
case 5:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
A.PutToFile();
cout<<endl;
system("pause");
break;
case 6:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
A.sort();
cout<<endl;
system("pause");
break;
case 7:
if(A.length==0)
{
cout<<"目前无数据:"<<endl;
system("pause");
break;
}
cout<<"修改数据!"<<endl;
searchpoint=A.searchReturn();
A.Modify(searchpoint);
cout<<endl;
system("pause");
break;
case 8:
exit(0);
cout<<endl;
system("pause");
break;
default:
cout<<"你使用了非法字符!"<<endl;
cout<<endl;
system("pause");
break;
}
}
return 0;
}
运行结果:
文件输入文件格式:
上一篇: bilibili电脑客户端怎么直播? B站直播教程
下一篇: 打糍粑的东西叫什么