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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。