学生通讯录程序:用结构体和数组实现学生通讯录程序。基本信息包括学号、姓名、班级、籍贯、手机、QQ号、电子邮箱等信息。具体实现的管理功能如下:(1)输入并显示多个学生信息;(2)可实现学生信息的添加;(3)查询(至少提供按姓名和手机查询两种方式);(4)修改(只提供按照姓名进行修改);(5)删除(依据指定的信息删除如姓名、学号等);(6)文件的导入和导出(从文件中读取若干条通讯录,或者将通讯录输出到文件中)。
#include<iostream>
#include<string>
#include <fstream>
using namespace std;
struct Student
{
int num;
char name[20];
char Class[20];
char addr[30];
int phone;
int QQ;
char mail[50];
Student *next;
};
Student *creat()
{
int i=1;
char n='y';
Student *head= new Student();
if(head==NULL)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
head->next==NULL;
while(n=='y')
{
Student *newStudent= new Student();
if(head==NULL)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
cin>>newStudent->num>>newStudent->name>>newStudent->Class>>newStudent->addr>>newStudent->phone>>newStudent->QQ>>newStudent->mail;
newStudent->next=NULL;
newStudent->next=head->next;
head->next=newStudent;
i++;
cout<<"是否继续?";
cin>>n;
}
cout<<"是否继续?";
cin>>n;
return head;
}
bool Add(Student *head)
{
Student *newStudent=new Student();
if(newStudent==NULL)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
cin>>newStudent->num>>newStudent->name>>newStudent->Class>>newStudent->addr>>newStudent->phone>>newStudent->QQ>>newStudent->mail;
newStudent->next=head->next;
head->next=newStudent;
return true;
}
bool Search(Student *head,char name[20],int phone)
{
Student *p=head->next;
while(p!=NULL&&(p->name!=name||p->phone!=phone))
{
p=p->next;
}
if(p==NULL) return false;
return true;
}
bool Change(Student *head,int num)
{
Student *p=head->next;
while(p!=NULL&&(p->num!=num))
{
p=p->next;
}
int p1;char p2[20];char p3[20];char p4[30];int p5; int p6;char p7[50];
cin>>p1>>p2>>p3>>p5>>p5>>p6>>p7;
p->num=p1;
p->name[20]=p2[20];p->Class[20]=p3[20];p->addr[30]=p4[30];
p->phone=p5;p->QQ=p6;p->mail[50]=p7[20];
if(p==NULL) return false;
return true;
}
bool Delete(Student *head,int num)
{
Student *pre=head;
Student *p=head->next;
while(p!=NULL&p->num!=num)
{
pre=p;
p=p->next;
}
if(p==NULL) return false;
delete p;
p=NULL;
return true;
}
void Print(Student *head)
{
Student *p=head->next;
while(p!=NULL)
{
cout<<"学号:"<<p->num<<endl;
cout<<"姓名:"<<p->name<<endl;
cout<<"班级:"<<p->Class<<endl;
cout<<"地址:"<<p->addr<<endl;
cout<<"电话:"<<p->phone<<endl;
cout<<"QQ:"<<p->QQ<<endl;
cout<<"邮箱:"<<p->mail<<endl;
p=p->next;
}
}
Student *Read()
{
Student *head= new Student();
if(head==NULL)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
ifstream inFile;
inFile.open("student.txt",ios::in);
if(!inFile.is_open())
{
cout<<"Error:opening file fail"<<endl;
exit(1);
}
Student *newStudent =new Student();
if(NULL==newStudent)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
while(!inFile.eof())
{
Student *newStudent= new Student();
if(NULL==newStudent)
{
cerr<<"内存空间分配失败"<<endl;
exit(1);
}
inFile>>newStudent->num>>newStudent->name>>newStudent->Class>>newStudent->addr>>newStudent->phone>>newStudent->QQ>>newStudent->mail;
newStudent->next=head->next;
head->next=newStudent;
}
inFile.close();
return head;
}
bool Write( Student *head)
{
Student *p=head->next;
ofstream outFile;
outFile.open("student.txt",ios::out);
if(!outFile)
{
cout<<"Error:opening file fail"<<endl;
exit(1);
}
while(p!=NULL)
{
outFile<<p->num<<" "<<p->name<<" "<<p->Class<<" "<<p->addr<<" "<<p->phone<<" "<<p->QQ<<" "<<p->mail<<endl;
p->next;
}
return true;
}
int main()
{
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<<"请选择: ";
int m;
int num,phone;
char name[20];
bool finished=false;
Student *head=NULL;
cin>>m;
switch(m)
{
case 1:
head=creat();
break;
case 2:
if(Add(head))
cout<<"添加学生信息成功!"<<endl;
else
cout<<"添加学习信息失败!"<<endl;
break;
case 3:
if(Search(head,name,phone))
cout<<"搜索成功!"<<endl;
else
cout<<"搜索失败!"<<endl;
break;
case 4:
cout<<" 请输入要修改的学生通讯录信息的学号:";
cin>>num;
if(Search(head,name,phone))
cout<<"修改成功!"<<endl;
else
cout<<"修改失败!"<<endl;
break;
case 5:
if(Delete(head,num))
cout<<"删除成功!"<<endl;
else
cout<<"删除失败!"<<endl;
break;
case 6:
Print(head);
case 7:
Read();
break;
case 8:
Write(head);
break;
case 9:
finished=true;
break;
default:
cout<<"输入选择错误,请重新输入!"<<endl;
}
return 0;
}