学生通讯录程序: 用链表实现学生通讯录程序。 基本信息包括学号、 姓名、
班级、 籍贯、 手机、 QQ号、 电子邮箱等信息。 具体实现的管理功能如下:
(1) 输入并显示多个学生信息;
(2) 可实现学生信息的添加;
(3) 查询(至少提供按姓名和手机查询两种方式) ;
(4) 修改(只提供按照姓名进行修改) ;
(5) 删除(依据指定的信息删除如姓名、 学号等) ;
(6) 文件的导入和导出(从文件中读取若干条通讯录, 或者将通讯录输出
到文件中) 。
程序所显示的菜单内容如下:
请选择下面的菜单:
1 创建
2 添加
3 查询
4 修改
5 删除
6 显示
7 从文件导入
8 导出到文件
9 退出
请选择:
#include <iostream>//学生通讯录程序
#include<fstream>
using namespace std;
struct student//创建学生信息的结构体
{
string id;//学号
string name;//姓名
string banji;//班级
string jiguan;//籍贯
string tel;//电话
string qq;//qq号
string email;//电子邮箱
student* next;
};
void menu()//菜单
{
cout<<"\n***********请选择下面的菜单:***********\n";
cout<<"\t 1.创建\n";//创建通信录
cout<<"\t 2.添加\n";//添加数据
cout<<"\t 3.查询\n";
cout<<"\t 4.修改\n";
cout<<"\t 5.删除\n";//依据指定的信息删除如姓名、学号等
cout<<"\t 6.显示\n";//显示
cout<<"\t 7.从文件导入\n";
cout<<"\t 8.导出到文件\n";
cout<<"\t 9.退出\n";
cout<<"\t 请选择";
cout<<"\n***************************************\n";
}
student* createlist(int n)//1创建
{
student* head=new student;//生成头结点
student* pre=head; //pre为前一个结点
for(int i=0; i<n; i++)
{
student*p=new student;//生成普通结点
cout<<"请输入第"<<i+1<<"个同学的数据"<<endl;//输入数据
cin>>p->id>>p->name>>p->banji>>p->jiguan;
cin>>p->tel>>p->qq>>p->email;
//构建结点间的关系
pre->next=p;//前一个结点的next存放后一个结点的地址
pre=p;//后一个结点变成了前一个结点
p->next=NULL;//后一个结点的next里为空
}
system("pause");
system("cls");
return head;
}
void printlist(student* head)//遍历输出
{
//cout<<"遍历链表"<<endl;
student* p=head->next;
while(p!=NULL)
{
cout<<endl;
cout<<"学号:"<<p->id<<endl;
cout<<"名字:"<<p->name<<endl;
cout<<"班级:"<<p->banji<<endl;
cout<<"籍贯:"<<p->jiguan<<endl;
cout<<"电话:"<<p->tel<<endl;
cout<<"qq号:"<<p->qq<<endl;
cout<<"邮箱:"<<p->email<<endl;
cout<<endl;
p=p->next;
}
system("pause");
system("cls");
}
void interNode(student*head)//插入
{
int i=0;
cout<<"你想在第几个同学后插"<<endl;
cin>>i;
int j=1;
student* p=head->next;
while(j<i)
{
p=p->next;
j++;
}
if(j==i)
{
student* q=new student;
cout<<"请输入要插入同学的数据"<<endl;//输入数据
cin>>q->id>>q->name>>q->banji>>q->jiguan;
cin>>q->tel>>q->qq>>q->email;
q->next=p->next;
p->next=q;
}
system("pause");
system("cls");
}
void findelement(student* head)//查询
{
cout<<"按电话查询输入1,按姓名查询输入2"<<endl;
int k;
cin>>k;
if(k==1)
{
string tel;
cout<<"输入你要查询的电话"<<endl;
cin>>tel;
student* p=head->next;
while(tel!=p->tel)
{
p=p->next;
}
if(tel==p->tel)
{
cout<<"---查找的数据为---"<<endl;
cout<<endl;
cout<<"学号:"<<p->id<<endl;
cout<<"名字:"<<p->name<<endl;
cout<<"班级:"<<p->banji<<endl;
cout<<"籍贯:"<<p->jiguan<<endl;
cout<<"电话:"<<p->tel<<endl;
cout<<"qq号:"<<p->qq<<endl;
cout<<"邮箱:"<<p->email<<endl;
cout<<endl;
}
}
if(k==2)
{
string str;
cout<<"输入你要查询的姓名"<<endl;
cin>>str;
student* p=head->next;
while(str!=p->name)
{
p=p->next;
}
if(str==p->name)
{
cout<<"---查找的数据为---"<<endl;
cout<<endl;
cout<<"学号:"<<p->id<<endl;
cout<<"名字:"<<p->name<<endl;
cout<<"班级:"<<p->banji<<endl;
cout<<"籍贯:"<<p->jiguan<<endl;
cout<<"电话:"<<p->tel<<endl;
cout<<"qq号:"<<p->qq<<endl;
cout<<"邮箱:"<<p->email<<endl;
cout<<endl;
}
}
system("pause");
system("cls");
}
void deleteNode(student* head)//删除
{
int i;
cout<<"你要删除第几个"<<endl;
cin>>i;
int j=1;
student *p=head->next;
while(j<i)
{
p=p->next;//链表一个一个向后走
j++;
}
if(j==i)
{
int k;
cout<<"删除姓名输1"<<endl;
cin>>k;
if(k==1)
{
p->name=" ";
}
cout<<"删除学号输2"<<endl;
cin>>k;
if(k==2)
{
p->id=" ";
}
}
system("pause");
system("cls");
}
void xiugaiNode(student* head)//修改
{
string str;
cout<<"请输入你要修改的同学的姓名"<<endl;
cin>>str;
student *p=head->next;
while(p->name!=str)
{
p=p->next;
}
if(p->name==str)
{
while(1)
{
int k;
cout<<"修改学号输1,修改班级输2,修改籍贯输3,修改手机输4,修改qq输5,修改email输6,退出输0"<<endl;
cin>>k;
if(k==0)
{
break;
}
if(k==1)
{
string str;
cout<<"请输入新学号"<<endl;
cin>>str;
p->id=str;
}
if(k==2)
{
string str;
cout<<"请输入新班级"<<endl;
cin>>str;
p->banji=str;
}
if(k==3)
{
string str;
cout<<"请输入新籍贯"<<endl;
cin>>str;
p->jiguan=str;
}
if(k==4)
{
string str;
cout<<"请输入新手机号"<<endl;
cin>>str;
p->tel=str;
}
if(k==5)
{
string str;
cout<<"请输入新qq号"<<endl;
cin>>str;
p->qq=str;
}
if(k==6)
{
string str;
cout<<"请输入新email"<<endl;
cin>>str;
p->email=str;
}
}
}
system("pause");
system("cls");
}
void fromfile(student* head)//从文件导入
{
ifstream ifs;
if(!ifs)
{
cout<<"文件打开失败"<<endl;
}
else
{
ifs.open("student,txt",ios::in);//从文件输出
student* p=head->next;
while(p!=NULL)
{
ifs>>p->id;
cout<<p->id<<" ";
ifs>>p->name;
cout<<p->name<<" ";
ifs>>p->banji;
cout<<p->banji<<" ";
ifs>>p->jiguan;
cout<<p->jiguan<<" ";
ifs>>p->tel;
cout<<p->tel<<" ";
ifs>>p->qq;
cout<<p->qq<<" ";
ifs>>p->email;
cout<<p->email<<endl;
p=p->next;
}
cout<<"文件导入成功"<<endl;
}
ifs.close();
system("pause");
system("cls");
}
void tofile(student* head)//保存到文件
{
ofstream ofs;
if(!ofs)
{
cout<<"文件打开失败"<<endl;
}
else
{
ofs.open("student.txt",ios::out);
student* p=head->next;
while(p!=NULL)
{
ofs<<p->id<<" ";
ofs<<p->name<<" ";
ofs<<p->banji<<" ";
ofs<<p->jiguan<<" ";
ofs<<p->tel<<" ";
ofs<<p->qq<<" ";
ofs<<p->email<<" ";
p=p->next;
}
cout<<"文件保存成功"<<endl;
}
ofs.close();
system("pause");
system("cls");
}
int main()
{
int number;//功能键
int n;//学生的的个数
cout<<"输入学生数:"<<endl;
cin>>n;
student* head1;
while(1)
{
menu();
cin>>number;
switch(number)
{
case 1:// 创建通讯录并录入学生信息
head1=createlist(n);
break;
case 2:
interNode(head1);//添加
break;
case 3:
findelement(head1);//查询
break;
case 4:
xiugaiNode(head1);//修改
break;
case 5:
deleteNode(head1);//删除
break;
case 6:
printlist(head1);//输出
break;
case 7:
fromfile(head1);//从文件导入
break;
case 8:
tofile(head1);//保存到文件
break;
case 9:
exit(0);//退出
break;
default:
break;
}
}
return 0;
}
//至今写过最长的代码