C++链表实现通讯录管理系统
用数据结构里面线性结构的链表实现,供大家参考,具体内容如下
文件操作未写
有登录操作,复制源码需要更改登录模块的密码文件存放位置
使用VS2017编译器需要保留开头:#define_CRT_SECURE_NO_WARNINGS
#define_CRT_SECURE_NO_WARNINGS
#include"iostream"
#include"cstdio"
#include"fstream"
#include"stdlib.h"
#include"String"
#include"iomanip"
#include"windows.h"
#defineLEN100
usingnamespacestd;
usingstd::cin;
usingstd::cout;
usingstd::endl;
usingstd::ifstream;
usingstd::ofstream;
usingstd::ios;
usingstd::cerr;
usingstd::string;
usingstd::setw;
typedefstructLNode{
charnum[10];
charname[20];
chartelNum[12];
charqq[10];
structLNode*next;
}LNode,*LinkList;
intn=0;
voidInitList(LinkList&L);//初始化表
voidInsertLNode(LinkList&L,LNode*s);//前插法插入新结点
LinkListSearchName(LinkListL);//按姓名查找
LinkListSearchNum(LinkListL);//按学号查找
voidDelLNode(LinkList&L,LinkListp);//删除p结点
voidPrintLNode(LinkListp);//打印结点
voidPrintList(LinkListL);//打印表
/*----------------系统函数----------------*/
voidCreateLinkList(LinkList&L);//创建链表
voidDelName(LinkList&L);//按姓名删除通讯录成员
voidDelNum(LinkList&L);//按学号删除通讯录成员
voidsaveRecord(LinkListL);//存储信息
voidloadRecord(LinkList&L);//加载信息
/*--------------------------------------*/
voidSecret();
voidfun();
voidver();
voidyanshi(char*p);
voidclear();
voidheader();
voidmenu(){
LinkListL=NULL;
intselect;
do{
system("cls");
printf("\t\t\tWelcometotheaddressbookinformationmanagementsystem!\n\n\n");
printf("\t\t\t\t***************************************************\n");
printf("\t\t\t\t*│1.InitList2.AddMessage│*\n");
printf("\t\t\t\t*││*\n");
printf("\t\t\t\t*│3.SearchMessage4.SaveFile│*\n");
printf("\t\t\t\t*││*\n");
printf("\t\t\t\t*│5.SortStatic6.LoadMessage│*\n");
printf("\t\t\t\t*││*\n");
printf("\t\t\t\t*│7.DisplayMessage8.DeleteMessage│*\n");
printf("\t\t\t\t*││*\n");
printf("\t\t\t\t*│9.SaveMessage0.ExitSystem│*\n");
printf("\t\t\t\t***************************************************\n");
cout<>select;
switch(select){
case8:
cout<<"Pleaseselectthedeletionmethod:\n1.Deletebystudentnumber2.Deletebyname\n"<>x;
switch(x){
case1:
DelNum(L);
break;
case2:
DelName(L);
break;
}
case6:
loadRecord(L);
break;
case5:
break;
case4:
saveRecord(L);
break;
case3:
clear();
cout<<"Pleaseselectasearchmethod:\n1.Findbystudentnumber2.Findbyname\n"<>a;
switch(a){
case1:
clear();
{
LinkListaa=SearchNum(L);
header();
PrintLNode(aa);
cout<<"\n\n\n成功!"<next=NULL;
}
//插入一条信息
voidInsertLNode(LinkList&L,LNode*s)
{
s->next=L->next;
L->next=s;
}
//按姓名查找
LinkListSearchName(LinkListL)
{
charname[20];
cout<<"请输入要查找的姓名:"<>name;
LinkListp=L->next;
while(p){
//如果找到,退出循环,返回p
if(strcmp(p->name,name)==0)
break;
else
p=p->next;
}
returnp;
}
//按学号查找
LinkListSearchNum(LinkListL)
{
charnum[10];
cout<<"请输入要查找的学号:"<>num;
LinkListp=L->next;
while(p){
//如果找到,退出循环,返回p
if(strcmp(p->num,num)==0)
break;
else
p=p->next;
}
returnp;
}
//删除节点
voidDelLNode(LinkList&L,LinkListp)
{
LinkLists=NULL,q;
q=L->next;
//将s指向p前面的一个结点
while(q&&q!=p){
s=q;
q=q->next;
}
s->next=q->next;
deleteq;
}
//打印一条信息
voidPrintLNode(LinkListp)
{
printf("%15s",p->num);
printf("%15s",p->name);
printf("%15s",p->telNum);
printf("%15s\n",p->qq);
}
//打印通讯录
voidPrintList(LinkListL)
{
clear();
header();
LinkListp=L->next;
while(p){
PrintLNode(p);
p=p->next;
}
system("pause");
}
//添加信息
voidCreateLinkList(LinkList&L)
{
charans='y';
n=0;
while(ans=='y'||ans=='Y'){
system("cls");
LNode*p=newLNode;
cout<<"请输入学号:"<>p->num;
cout<<"请输入姓名:"<>p->name;
cout<<"请输入电话号码:"<>p->telNum;
cout<<"请输入QQ号:"<>p->qq;
InsertLNode(L,p);
n++;
cout<<"是否继续?(Y/N)"<>name;
p=SearchName(L);
if(p){
DelLNode(L,p);
}
system("pause");
}
//按学号删除
voidDelNum(LinkList&L)
{
charnum[20];
LinkListp;
cout<<"请输入要删除的学生学号:"<>num;
p=SearchName(L);
if(p){
DelLNode(L,p);
}
system("pause");
}
//存储信息
voidsaveRecord(LinkListL)
{
FILE*fp=NULL;
intcount=0;
if((fp=(fopen("student.dat","wb")))==NULL){
cout<<"Can'topenthisfile!"<next;
while(q){
fwrite(q,sizeof(LNode),1,fp);
count++;
q=q->next;
}
fclose(fp);
cout<<"Savethefilesuccessfully!"<0){
InsertLNode(L,p);
count++;
}
else{
break;
}
}
fclose(fp);
cout<UsrName);
strcpy_s(psword,usr->Psword);
stringtemp;
intflag=0;
inti=0;
ifstreamfin("E:\\Love-Study\\学生通讯录管理系统\\static.dat",ios::in);//在这个路径下读入文件
ofstreamfout("E:\\Love-Study\\学生通讯录管理系统\\static.dat",ios::app);//在同一个路径下,如果注册成功则写入文件
while(std::getline(fin,temp))//每次读一行的数据进入temp中。
{
i++;
if(i%2==0)continue;//访问的是密码这一行,跳出。
if(!strcmp(usrname,temp.c_str()))flag=1;//flag=1说明用户名已经被注册了
}
fin.close();
if(flag){
return0;//之前有重复的账户名
}
else{//没注册
fout<UsrName);
strcpy_s(psword,usr->Psword);
stringtemp1;
stringtemp2;
intexistname=0;
intmatch=0;
inti=0;
ifstreamfin("E:\\Love-Study\\学生通讯录管理系统\\static.dat",ios::in);
while(std::getline(fin,temp1))
{
std::getline(fin,temp2);//一次读进去两行,分别是用户名和密码
if(!strcmp(usrname,temp1.c_str())){//有这个用户名了,接下来看看密码是不是相符的
existname=1;
if(!strcmp(psword,temp2.c_str())){//相符
match=1;
break;
}
}
}
fin.close();
if(!existname){
return2;//没有账户名
}
else{
if(match)return1;
elsereturn3;//用户名和密码不匹配
}
}
voidSecret()
{
clear();
cout<<"1.注册2.登录"<>c;
switch(c){
case1:
{
clear();
UsrInfotest1;//用于测试注册程序的。
charurr[20],prr[20];
cout<<"请输入用户名:"<>urr;
cout<<"请输入密码:"<>prr;
strcpy(test1.UsrName,urr);
strcpy(test1.Psword,prr);
switch(regest(&test1))
{
case1:
cout<<"注册成功"<>ur;
cout<<"请输入密码:"<>pr;
strcpy(test2.UsrName,ur);
strcpy(test2.Psword,pr);
switch(login(&test2))
{
case1:
cout<<"登录成功"<
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。