c语言编写一个通讯录系统 用简单一点的c

c语言编写一个通讯录系统 用简单一点的c,第1张

#define N 100

#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

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6698872.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-26
下一篇2023-03-26

发表评论

登录后才能评论

评论列表(0条)

    保存