
#define SIZE 30
#include <stdio.h>
#include <string.h>
#include <conio.h>
struct student{
char num[SIZE]
char name[SIZE]
char tel[SIZE]
}
/*函数声明*/
void myprint()/*显示菜单*/
int mycreat(struct student*p,int n)/*输入通讯录*/void mydisplay(struct student*p,int n)/*显示通讯录*/void mysearch(struct student*p,int n)/*查找*/
void mymodify(struct student*p,int n)/*修改通讯录*/int myadd(struct student*p,int n)/*增加通讯录*/int mydelete(struct student*p,int n)/*删除*/void mysort(struct student*p,int n)/*排序*/
void sch_num(struct student*p,int n)/*按学号查找*/void sch_name(struct student*p,int n)/*按姓名查找*/
int loadinfo(struct student*p,int n)/*载入通讯录信息*/int saveinfo(struct student*p,int n)/*保存通讯录信息*/void main(){
/*文件定义*/char choose,yes_no
struct studentrecord[N]/*存放通讯录信息,共100条*/int total=0,flag/*通讯录总数*/
total=loadinfo(record,N)/*从文件读取记录信息,不超过100条*/do{
myprint()/*显示菜单*/
printf("请选择:")do{
choose=getchar()}
while(choose<'0'||choose>'9')switch(choose){
case'1':
total=mycreat(record,total)breakcase'2':
mydisplay(record,total)breakcase'3':
mysearch(record,total)breakcase'4':
mymodify(record,total)breakcase'5':
total=myadd(record,total)breakcase'6':
total=mydelete(record,total)breakcase'7':
mysort(record,total)breakcase'8':
flag=saveinfo(record,total)if(flag==1)
printf("\n保存成功!\n")else
printf("\n保存失败!\n")breakcase'0':
breakdefault:
printf("\n%c为非法选项!\n",choose)}
if(choose=='0')breakprintf("\n要继续选择吗(Y/N)?")do{
yes_no=getchar()}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')}
while(yes_no!='Y'||yes_no!='y')}
void myprint()/*显示菜单信息*/{
printf("\n\n\n\n\n")printf("\n")printf("请输入选项编号(0--7)\n")printf("1---批量输入通讯录\n")printf("2---显示通讯录\n")printf("3---查询通讯录\n")printf("4---修改通讯录\n")printf("5---添加通讯录\n")printf("6---删除通讯录\n")printf("7---排序通讯录\n")printf("8---保存通讯录\n")printf("0---退出\n")printf("\n")
}
int mycreat(struct student*p,int n)/*批量输入学生信息*/{
int i=0int m
printf("添加前的记录,共有<%d>个:\n",n)printf("\n记录号学号姓名电话号码\n")
i=0
while((i<n)&&(strcmp(p->num,"")!=0)){
printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)i++p++}
printf("\n请输入要输入的学生人数(<%d):",N-n)
scanf("%d",&m)i=0
while(i<m){
printf("\n")
printf("请输入第%d个记录:\n",i+1)printf("学号:")do{
gets(p->num)}
while(strcmp(p->num,"")==0)printf("姓名:")gets(p->name)
printf("电话号码:")gets(p->tel)p++i++}
return m+n}
void mydisplay(struct student*p,int n)/*显示学生信息*/{
/*clrscr()*/int i=0
printf("\n记录号学号姓名电话号码\n")while(i<n){
printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)p++i++}}
void mymodify(struct student*p,int n)/*修改学生信息*/{
int i
char nam[10]mydisplay(p,n)
printf("\n请输入要修改记录的姓名:")gets(nam)
for(i=0i<ni++,p++)
if(strcmp(nam,p->name)==0)breakif(i==n)
printf("无此人!\n")else{
printf("请输入正确的学号:")do{
gets(p->num)}
while(strcmp(p->num,"")==0)printf("请输入正确的姓名:")gets(p->name)
printf("请输入正确的电话号码:")gets(p->tel)}
}
void mysearch(struct student*p,int n)/*查找指定学生*/{
char c
mydisplay(p,n)
printf("\n按学号查询(h),还是按姓名查询(m)?")c=getchar()
if(c=='h'||c=='H')
sch_num(p,n)else if(c=='m'||c=='M')
sch_name(p,n)else
printf("\n非法字符!\n")}
void sch_num(struct student*p,int n)/*按学号查询*/{
int i,flag=0char nm[10]
printf("\n请输入要查询记录的学号:")gets(nm)
for(i=0i<ni++)
if(strcmp(nm,p[i].num)==0)
{
printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1
}
if(flag==0)
printf("无此人!\n")}
void sch_name(struct student*p,int n)/*按姓名查询*/{
int i,flag=0char nam[10]
printf("\n请输入要查询记录的姓名:")gets(nam)
for(i=0i<ni++)
if(strcmp(nam,p[i].name)==0){
printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1}
if(flag==0)
printf("无此人!\n")
}
int myadd(struct student*p,int n)/*增加学生信息*/{
int i=0char c
struct studentt,*q
printf("添加前的记录:\n")printf("\n学号姓名电话号码\n")i=0q=p
/*显示原有记录信息*/while(i<n){
printf("%15s%15s%15s\n",q->num,q->name,q->tel)i++q++}do{
printf("请输入新记录的学号:\n")do{
gets(t.num)
}
while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)
printf("请输入新记录的电话号码:")gets(t.tel)
for(i=0i<ni++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}
/*找到最后,没有重复*/if(i==n){
*(p+i)=t
printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)
printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}
}
while(c=='y'||c=='Y')return n+1}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x
char c,nm[10],nam[10]
printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:")gets(nm)
for(x=0x<nx++)
{
gets(t.num)
}
while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)
printf("请输入新记录的电话号码:")gets(t.tel)
for(i=0i<ni++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}
/*找到最后,没有重复*/if(i==n){
*(p+i)=t
printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)
printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}
}
while(c=='y'||c=='Y')return n+1}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x
char c,nm[10],nam[10]
printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:")gets(nm)
for(x=0x<nx++)
int j,i,kchar c1,c2
struct studenttemp
printf("\n排序前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("\n按学号排序(h),还是按姓名排序(m)?")c1=getchar()
if(c1=='h'||c1=='H'){
printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()/*升序*/
if(c2=='s'||c2=='S'){
for(i=0i<n-1i++){
k=i
for(j=ij<nj++)
if(strcmp(p[k].num,p[j].num)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("\n排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0i<n-1i++){
k=i
for(j=0j<nj++)
if(strcmp(p[k].num,p[j].num)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else printf("\n非法字符\n")}
else if(c1=='m'||c1=='M')/*按姓名排序*/{
printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()
if(c2=='s'||c2=='S'){
for(i=0i<n-1i++){
k=i
for(j=0j<nj++)
if(strcmp(p[k].name,p[j].name)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp}
printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)
}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0i<n-1i++){
k=i
for(j=ij<nj++)
if(strcmp(p[k].name,p[j].name)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("排序后的记录:\n")printf("\n学号
姓名电话号码\n")
for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else printf("\n非法字符!\n")}
else printf("\n非法字符!\n")}
int loadinfo(struct student*p,int n)/*载入通讯录信息*/{
FILE*fpint i,all=0
char filename[30]="tongxunlu.txt"fp=fopen(filename,"r")if(fp==NULL){
printf("\n***不能打开文件%s,或%s文件不存在,创建一个新文件!
",filename,filename)*/
fp=fopen(filename,"w")}
fscanf(fp,"%d\n",&all)
if(all>N)/*读取记录总数*/{
printf("文件记录数太多,不能读取")return 0}
for(i=0i<alli++)/*读取记录信息*/{
fscanf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)}
fclose(fp)/*关闭文件*/return all}
int saveinfo(struct student*p,int n){
FILE*fpint i,all=0
char filename[30]="txl.dat"/*文件可以用记事本打开*/fp=fopen(filename,"w")if(fp==NULL){
printf("\n***不能建立或打开文件%s!***",filename)return 0}
fprintf(fp,"%d\n",n)for(i=0i<ni++)
fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)fclose(fp)return 1}
抄来的
#include <iostream>#include <string>
#include "address.h"
#include "addressList.h"
#include "addressBook.h"
using namespace std
int main()
{
new AddressBook//开启通信录
return 0
}
ostream&operator<<(ostream&os, const RecordList&c_rl)
{
RecordList::const_iterator it
RecordList::const_iterator it_end =c_rl.end()
for (it=c_rl.begin()it!=it_endit++)
{
os <<(*it)->name <<'\n' <<(*it)->tel <<'\n'
}
return os
}
istream&operator>>(istream&is, RecordList&rl)
{
Record* rec
string name
while (true)
{
//注意这里使用的是全局的getline()函数,而不是istream的成员函
//数.全局的getling()函数将从istream中取出最后一个分隔符,
//而istream的成员函数getline则不会
getline(is,name)
if (name =="")
break
rec = new Record
rec->name=name
getline(is,rec->tel )
rl.push_back(rec)
}
return is
}
#include<stdlib.h>
#include<fstream>
#include "addressBook.h"
using namespace std
AddressBook::AddressBook()
{
isModified = false
start()
}
AddressBook::~AddressBook()
{
}
//功能:显示欢迎画面,并开始进行用户交互处理
void AddressBook::start()
{
cout<<"\n"
<<"\t******************************\n"
<<"\t* 这是一个 *\n"
<<"\t* 简单的通信录程序 *\n"
<<"\t* 可以对通信录进行简单管理 *\n"
<<"\t* 欢迎使用通信录 *\n"
<<"\t******************************\n"
<<"\n"
handleMenu()
}
//功能:显示通信录菜单,返回用户选择的选项
//返回:用户选择的选项,是1-9之间的一个字符
char AddressBook::menuSelect()
{
cout<<"\n"
<<"1.显示记录\n"
<<"2.查询记录\n"
<<"3.增加记录\n"
<<"4.删除记录\n"
<<"5.保存记录\n"
<<"6.读取记录\n"
<<"7.新建记录\n"
<<"8.结束运行\n"
<<"\n左边数字对应功能选择,请选1-8:"
char choice[2]
while(true)
{
cin.getline(choice,2)
if(choice[0]<'1' || choice[0]>'8')
cout<<"\n输入错误,重选1-8:"
else
break
}
return choice[0]
}
//功能:根据用户选择的项目调用相应的处理函数
void AddressBook::handleMenu()
{
while(true)
{
switch(menuSelect())
{
case '1':
displayRecords()
break
case '2':
queryRecord()
break
.......
//功能:打印用于显示记录信息时的表头
void AddressBook::dispTable()
{
}
//功能:显示通信录中的所有记录
void AddressBook::displayRecords()
{
}
//功能:首先检查通信录是否已保存,然后清空当前通信录中所有记录
//注意:该函数覆盖了基类中的函数
void AddressBook::clear()
{
}
//功能:查询指定记录
void AddressBook::queryRecord()
{
//功能:向当前通信录追加新的记录
//注意:该函数重载了基类中的函数
void AddressBook::addRecord()
{
}
/*
//说明:如果使用string 类,效果更好。下面是实现本功能的程序代码:
while(true)
{
//输入新记录
string name
cout<<"姓名:"
getline(cin,name)
//如果输入的姓名为“0”,则结束添加记录的 *** 作
if(name=="0")
break
Record* rec=new Record
rec->name=name
cout<<"电话:"
getline(cin,rec->tel)
//将新记录加入链表
AddressList::addRecord(rec)
}
//同理,下面的成员函数removeRecord()中的判断,可以使用如下替代方法:
string str
getline(cin,str)
while(true)
{
if(str[0]!='1' &&str[0]!='2')
{
cout<<"输入错误,重选1-2:"
getline(cin,str)
}
else
break
}
*/
//功能:从当前通信录移除指定的记录
//注意:该函数重载了基类中的函数
void AddressBook::removeRecord()
{
if(empty())
{
cout<<"通信录已空,退出删除 *** 作!"<<endl
return
}
//选择获取需要删除的记录的方式
cout<<"可以通过姓名或电话删除记录\n"
<<"1.通过姓名\n"
<<"2.通过电话\n"
char choice[2]
cin.getline(choice,2)
while(true)
{
if(choice[0]!='1' &&choice[0]!='2')
{
cout<<"输入错误,重选1-2:"
cin.getline(choice,2)
}
else
break
}
int type=static_cast<int>(choice[0])-48
//输入需要匹配的字符串
if(type==1)
cout<<"请输入姓名:"<<flush
else
cout<<"请输入电话:"<<flush
char pattern[20]
cin.getline(pattern,20)
int deletedCount=0
//找到匹配的记录
Iterator it=findRecord(pattern,type,first())
Iterator it_end=pastEnd()
while(it!=it_end)
{
cout<<"找到一条匹配的记录:\n"
dispTable()
cout<<(*it)->name<<"\t\t"<<(*it)->tel<<"\n"
cout<<"确定要删除这条记录吗?[Y/N]"
cin.getline(choice,2)
//删除这条记录
if(choice[0]!='n' &&choice[0]!='N')
{
it=AddressList::removeRecord(it)
deletedCount++
}
//取下一条匹配的记录
if(it!=it_end)
it=findRecord(pattern,type,++it)
}
cout<<"一共删除了"<<deletedCount<<"条记录\n"
<<"现在还有"<<size()<<"条记录"<<endl
if(deletedCount!=0)
isModified=false
}
//功能:将通信录保存至指定文件
//注意:该函数重载了基类中的函数
void AddressBook::saveRecords()
{
if(empty())
{
cout<<"没有记录可存!"<<endl
return
}
//因为下面的程序中使用string类的成员函数,所以需要进行一次转换
string fname
char name[16]
cout<<"请输入要存在的文件名(直接回车选择文件sname):"
cin.getline(name,16)
fname=name
if(fname.empty())
fname="sname"
ofstream of(fname.c_str(),ios_base::out)
if(!of)
{
cout<<"不能存入文件!"<<endl
return
}
AddressList::saveRecords(of)
of.close()
cout<<size()<<"条记录已经存入文件,请继续 *** 作。"<<endl
isModified=false
}
//功能:从指定文件读取记录追加到当前通信录末尾
//注意:该函数重载了基类中的函数
void AddressBook::loadRecords()
{
}
void AddressBook::quit()
{
}
#ifndef H_ADDRESSBOOK_H_NNN
#define H_ADDRESSBOOK_H_NNN
#include "addressList.h"
//处理通信录 *** 作的面向用户使用的类,包含所有功能的用户界面及用户交互的实现
class AddressBook :public AddressList
{
protected:
bool isModified//通信录是否已被修改还未保存
public:
AddressBook()
virtual ~AddressBook()
//开始通信录的用户界面 *** 作
virtual void start()
//菜单处理函数
virtual void handleMenu()
//显示记录
virtual void displayRecords()
//查询记录
virtual void queryRecord()
//增加记录
virtual void addRecord()
//删除记录
virtual void removeRecord()
//保存记录
virtual void saveRecords()
//读取记录
virtual void loadRecords()
//结束程序
virtual void quit()
//清空当前通信录
virtual void clear()
protected:
//菜单选择函数
char menuSelect()
//显示表头
void dispTable()
}
#endif //H_ADDRESSBOOK_HZ-NNN
#include "addressList.h"
AddressList::~AddressList()
{
recList.clear()
}
//功能:向通信录中添加新的记录
//参数:rec,指向新记录的指针
void AddressList::addRecord (Record* rec)
{
if (rec !=NULL)
{
recList.push_back(rec)
}
}
//功能:从通讯录中删除一个记录
//参数:it,指向欲删除记录的迭代器
//注意:it,应是可提领的迭代器,可以通过findRecord()获得
AddressList::Iterator AddressList::removeRecord(AddressList::Iterator it)
{
return recList.erase(it)
}
//功能:从通信录中寻找一个记录
//参数:pattern,欲寻找的记录的指定域与pattern相等
// type,为1表示欲寻找记录的名称(name)与pattern相等;
// 为2表示欲寻找记录的电弧(tel)与(pattern)相等。
// from,从from开始寻找匹配的记录。
//返回:若找到了则返回的迭代器指向第一个匹配记录的迭代器,
// 若找不到则返回的迭代器等于pastEnd()的返回值。
//注意:from应是可提领的迭代器。
// 第一次调用可以用first(),之后使用上一次findRecord()的返回值增1,
// 直到返回pastEnd(),便可以获得所有匹配的记录。
AddressList::Iterator AddressList::findRecord(string pattern,int type,AddressList::Iterator from)
{
Iterator it
Iterator it_end=recList.end()
for (it=fromit!=it_endit++)
{
if ((type==1 &&(*it)->name==pattern)||(type==2 &&(*it)->tel==pattern))
break
}
return it
}
//功能:将通信录保存到输出流中
//参数:os.指定的输出流
void AddressList::saveRecords(ostream &os)
{
os <<recList
}
//功能:从输入流中读入数据并追加到当前通信录的末尾
//参数:is,指定的输入流
//返回:读入的记录数
int AddressList::loadRecords(istream &is)
{
int ori =size()
is >>recList
return size()-ori
}
#ifndef H_ADDRESSLIST_H_AAA
#define H_ADDRESSLIST_H_AAA
#include <iostream>
#include <string>
#include "address.h"
using namespace std
//处理通信录 *** 作的底层类,包括增加记录、删
//除记录、查询记录以及保存和读取记录的函数,
//该类不涉及任何关于用户界面的 *** 作
class AddressList
{
protected:
RecordList recList// 使用对象成员作为数据成员
public:
typedef RecordList::iterator Iterator
//向通信录中添加新的记录
virtual void addRecord(Record* rec)
//从通信录中删除一个记录
virtual Iterator removeRecord(Iterator it)
//从通讯录中寻找一个记录
virtual Iterator findRecord(string pattern,int type,Iterator from)
//将通信录保存到输出流中
virtual void saveRecords(ostream&os)
//从输入流中读入数据并追加到当前通信录的末尾
virtual int loadRecords(istream&is)
virtual ~AddressList()
//获得通信录中存储的记录数
const int size() const
//通信录是否为空
const bool empty() const
//清除通信录
virtual void clear()
//获得通信录的第一条记录
Iterator first()
//获得通信录超过最后一个记录之后的迭代器
Iterator pastEnd()
}
#endif //H_ADDRESSLIST_H_AAA
另外,站长团上有产品团购,便宜有保证
#include <iostream>#include <string>
using namespace std
const int nu=100
enum Sex{Man,Woman,mid}
class Stuinf{
private:
string Name
string Num
enum Sex sex
int Age
string Address
string Phone
Stuinf *next
public:
Stuinf(){Name="no name"Num="no num"sex=midAge=0Address="no address"Phone="no phone"next=NULL}
void setname(){cout<<"输入姓名"<<endlcin>>Name}
string getname(){return Name}
void setnum(){cout<<"输入学号"<<endlcin>>Num}
string getnum(){return Num}
void setsex(){int xcout<<"输入0或1,0代表男性,1代表女性"<<endlcin>>xsex=(x==0)?Man:Woman}
string getsex(){return (sex==Man)?"Man":"Woman"}
void setage(){cout<<"输入年龄"<<endlcin>>Agewhile(!(0<Age&&Age<100)){cout<<"输入错误,请重输"<<endlcin>>Age}}
int getage(){return Age}
void setaddress(){cout<<"输入地址"<<endlcin>>Address}
string getaddress(){return Address}
void setphone(){cout<<"输入电话号码"<<endlcin>>Phone}
string getphone(){return Phone}
void setnext(Stuinf *stu){next=stu}
Stuinf* getnext(){return next}
~Stuinf(){}
}
int main(){
Stuinf *head=new Stuinf()Stuinf *st[nu]int i
int n
cout<<"请输入指令 0,1,2,3,4,5"<<endl
cout<<"0、退出通讯录系统"<<endl
cout<<"1、 录入功能:用于增加通信录的内容,即首次录入同学的相关信息。"
cout<<"性别的输入应是男或"<<"女,如果输入错误,请重新输入;"
cout<<"输入的年龄应在0~100之间,否则重新输入。"<<endl
cout<<"2、 插入功能:用于随时增加一个同学的相关信息。"<<endl
cout<<"3、 删除功能:用于随时删除一个同学的相关信息。"<<endl
cout<<"4、 查找功能:可以分别通过姓名、性别、年龄、地址、邮编和联系电话查找某个同学的信息。"<<endl
cout<<"5、 修改功能:通过姓名查找,然后写成完成姓名、性别、年龄、地址、邮编、联系电话等信息的修改。"<<endl
cout<<"请输入:"<<endl
cin>>n
while(!(0<=n&&n<6)){
cin>>n
}
while(n){
switch (n){
case 1:{
int num
cout<<"请输入需要录入的学生人数"<<endl
cin>>num
for(i=0i<numi++){
st[i]=new Stuinf()
st[i]->setname()
st[i]->setage()
st[i]->setnum()
st[i]->setphone()
st[i]->setaddress()
st[i]->setsex()
st[i]->setnext(head->getnext())
head->setnext(st[i])
}
break
}
case 2:{
Stuinf* p
p=new Stuinf()
p->setname()
p->setage()
p->setnum()
p->setphone()
p->setaddress()
p->setsex()
p->setnext(head->getnext())
head->setnext(p)
break
}
case 3:{
string number
cout<<"输入要删除的学生学号"<<endl
cin>>number
Stuinf* pStuinf* q
p=head
if(head->getnext()==NULL) cout<<"通讯录为空"<<endl
while(p->getnum()!=number){
q=p
p=p->getnext()
}
if(p->getnext()==NULL)
cout<<"该学生不存在"<<endl
else{
q->setnext(p->getnext())
p->~Stuinf()
cout<<"学号为"<<number<<"的学生已经删除"<<endl
}
break
}
case 4:{
string na
cout<<"请输入姓名"<<endl
cin>>na
Stuinf * p=head->getnext()
while(p){
if(p->getname()==na) break
p=p->getnext()
}
if(p==NULL) cout<<"该学生不存在"<<endl
else{
cout<<"学生信息:"<<endl
cout<<"姓名:"<<p->getname()<<endl
cout<<"学号:"<<p->getnum()<<endl
cout<<"年龄:"<<p->getage()<<endl
cout<<"地址:"<<p->getaddress()<<endl
cout<<"性别:"<<p->getsex()<<endl
cout<<"电话号码:"<<p->getphone()<<endl
}
break
}
case 5:{
string na
cout<<"请输入姓名"<<endl
cin>>na
Stuinf * p=head->getnext()
while(p){
if(p->getname()==na) break
p=p->getnext()
}
if(p==NULL) cout<<"该学生不存在"<<endl
else{
cout<<"修改姓名"<<endl
p->setname()
cout<<"修改学号"<<endl
p->setnum()
cout<<"修改年龄"<<endl
p->setage()
cout<<"修改地址"<<endl
p->setaddress()
cout<<"修改性别"<<endl
p->setsex()
cout<<"修改电话号码"<<endl
p->setphone()
cout<<"修改完毕"<<endl
}
break
}
}
cout<<"请输入指令 0,1,2,3,4,5"<<endl
cout<<"0、退出通讯录系统"<<endl
cout<<"1、 录入功能:用于增加通信录的内容,即首次录入同学的相关信息。"
cout<<"性别的输入应是男或女,如果输入错误,请重新输入;"
cout<<"输入的年龄应在0~100之间,否则重新输入。"<<endl
cout<<"2、 插入功能:用于随时增加一个同学的相关信息。"<<endl
cout<<"3、 删除功能:用于随时删除一个同学的相关信息。"<<endl
cout<<"4、 查找功能:可以分别通过姓名、性别、年龄、地址、邮编和联系电话查找某个同学的信息。"<<endl
cout<<"5、 修改功能:通过姓名查找,然后写成完成姓名、性别、年龄、地址、邮编、联系电话等信息的修改。"<<endl
cout<<"请输入:"<<endl
cin>>n
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)