C++中怎么链表实现一个通讯录管理系统
创始人
2024-12-24 15:03:49
0次

具体内容如下

文件操作未写

有登录操作,复制源码需要更改登录模块的密码文件存放位置

使用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"#define LEN 100using namespace std;  using std::cin;using std::cout;using std::endl;using std::ifstream;using std::ofstream;using std::ios;using std::cerr;using std::string;using std::setw; typedef struct LNode { char num[10]; char name[20]; char telNum[12]; char qq[10]; struct LNode *next;}LNode,*LinkList; int n = 0; void InitList(LinkList &L);//初始化表void InsertLNode(LinkList &L,LNode *s);//前插法插入新结点LinkList SearchName(LinkList L);//按姓名查找LinkList SearchNum(LinkList L);//按学号查找void DelLNode(LinkList &L,LinkList p);//删除p结点void PrintLNode(LinkList p);//打印结点void PrintList(LinkList L);//打印表/*----------------系统函数----------------*/void CreateLinkList(LinkList &L);//创建链表void DelName(LinkList &L);//按姓名删除通讯录成员void DelNum(LinkList &L);//按学号删除通讯录成员void saveRecord(LinkList L);//存储信息void loadRecord(LinkList &L);//加载信息/*--------------------------------------*/void Secret();void fun();void ver();void yanshi(char *p);void clear();void header(); void menu() { LinkList L=NULL; int select; do { system("cls"); printf("\t\t\t  Welcome to the address book information management system!\n\n\n"); printf("\t\t\t\t***************************************************\n"); printf("\t\t\t\t * │1.InitList   2.Add Message │ *\n"); printf("\t\t\t\t * │         │ *\n"); printf("\t\t\t\t * │3.Search Message 4.Save File  │ *\n"); printf("\t\t\t\t * │         │ *\n"); printf("\t\t\t\t * │5.Sort Static  6.Load Message │ *\n"); printf("\t\t\t\t * │         │ *\n"); printf("\t\t\t\t * │7.Display Message 8.Delete Message│ *\n"); printf("\t\t\t\t * │         │ *\n"); printf("\t\t\t\t * │9.Save Message  0.Exit System │ *\n"); printf("\t\t\t\t***************************************************\n"); cout << endl; yanshi((char *)"\t\tPlease choose the mode of operation(1~8):\n");/* cout << "\t\tPlease choose the mode of operation(1~8):" << endl;*/ cin >> select; switch (select) { case 8: cout << "Please select the deletion method:\n1.Delete by student number 2.Delete by name\n" << endl; int x; cin >> x; switch (x) { case 1: DelNum(L); break; case 2: DelName(L); break; } case 6: loadRecord(L); break; case 5: break; case 4: saveRecord(L); break; case 3: clear(); cout << "Please select a search method:\n1.Find by student number 2.Find by name\n" << endl; int a; cin >> a; switch (a) { case 1: clear(); {  LinkList aa = SearchNum(L);  header();  PrintLNode(aa);  cout << "\n\n\n成功!" << endl;  system("pause");  menu(); } break; case 2: clear(); {  LinkList b = SearchName(L);  header();  PrintLNode(b);  cout << "\n\n\n成功!" << endl;  system("pause");  menu();  break; } } break; case 1: InitList(L); break; case 9: break; case 7: PrintList(L); break; case 2: CreateLinkList(L); break; case 0: cout << endl << endl << endl; cout << "The programe is over!" << endl << endl << endl; Sleep(2000); exit(0); break; } } while (select != 8);} int main() { fun(); ver();//版本信息 Secret();//密码登录 menu(); return 0;} //初始化表void InitList(LinkList & L){ L = new LNode;//申请头结点 L->next= NULL;} //插入一条信息void InsertLNode(LinkList & L, LNode *s){ s->next = L->next; L->next = s;} //按姓名查找LinkList SearchName(LinkList L){ char name[20]; cout << "请输入要查找的姓名:" << endl; cin >> name; LinkList p = L->next; while (p) { //如果找到,退出循环,返回p if (strcmp(p->name, name) == 0) break; else p = p->next; } return p;} //按学号查找LinkList SearchNum(LinkList L){ char num[10]; cout << "请输入要查找的学号:" << endl; cin >> num; LinkList p = L->next; while (p) { //如果找到,退出循环,返回p if (strcmp(p->num, num) == 0) break; else p = p->next; } return p;} //删除节点void DelLNode(LinkList &L,LinkList p){ LinkList s=NULL, q; q = L->next; //将s指向p前面的一个结点 while (q&&q!=p) { s = q; q = q->next; } s->next = q->next; delete q;} //打印一条信息void PrintLNode(LinkList p){ printf("%15s", p->num); printf("%15s", p->name); printf("%15s", p->telNum); printf("%15s\n",p->qq);} //打印通讯录void PrintList(LinkList L){ clear(); header(); LinkList p = L->next; while (p) { PrintLNode(p); p = p->next; } system("pause");} //添加信息void CreateLinkList(LinkList & L){ char ans = 'y'; n = 0; while (ans=='y'||ans=='Y') { system("cls"); LNode *p = new LNode; cout << "请输入学号:" << endl; cin >> p->num; cout << "请输入姓名:" << endl; cin >> p->name; cout << "请输入电话号码:" << endl; cin >> p->telNum; cout << "请输入QQ号:" << endl; cin >> p->qq; InsertLNode(L,p); n++; cout<<"是否继续?(Y/N)"<> name; p = SearchName(L); if (p) { DelLNode(L,p); } system("pause");} //按学号删除void DelNum(LinkList & L){ char num[20]; LinkList p; cout << "请输入要删除的学生学号:" << endl; cin >> num; p = SearchName(L); if (p) { DelLNode(L, p); } system("pause");} //存储信息void saveRecord(LinkList L){ FILE *fp=NULL; int count = 0; if ((fp=(fopen("student.dat","wb")))==NULL) { cout << "Can't open this file!" << endl; Sleep(3000); } LinkList q = L->next; while (q) { fwrite(q, sizeof(LNode), 1, fp); count ++; q = q->next; } fclose(fp); cout << "Save the file successfully!" << endl; getchar();} //加载信息void loadRecord(LinkList & L){ FILE *fp=NULL; int count = 0; if ((fp=(fopen("student.dat", "rb"))) == NULL) { cout << "Can't open this file!" << endl; Sleep(3000); } LinkList p=NULL; while(1){ p = new LNode; if (fread(p, sizeof(LNode), 1, fp) > 0) { InsertLNode(L,p); count++; } else { break; } } fclose(fp); cout << endl << endl << "Load "<UsrName); strcpy_s(psword, usr->Psword); string temp; int flag = 0; int i = 0; ifstream fin("E:\\Love-Study\\学生通讯录管理系统\\static.dat", ios::in);//在这个路径下读入文件 ofstream fout("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) { return 0;//之前有重复的账户名 } else {//没注册 fout << usrname << endl;//向文件写入注册者的用户名,然后换一行 fout << psword << endl;//写入密码,换行 fout.close(); return 1;//注册成功 }}int login(struct UsrInfo* usr) { char usrname[20]; char psword[20]; strcpy_s(usrname, usr->UsrName); strcpy_s(psword, usr->Psword); string temp1; string temp2; int existname = 0; int match = 0; int i = 0; ifstream fin("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) { return 2;//没有账户名 } else { if (match) return 1; else return 3;//用户名和密码不匹配 }}void Secret(){ clear(); cout << "1.注册 2.登录" << endl; int c; cin >> c; switch (c) { case 1: { clear(); UsrInfo test1;//用于测试注册程序的。 char urr[20], prr[20]; cout << "请输入用户名:" << endl; cin >> urr; cout << "请输入密码:" << endl; cin >> prr; strcpy(test1.UsrName, urr); strcpy(test1.Psword, prr); switch (regest(&test1)) { case 1: cout << "注册成功" << endl; system("pause"); Secret(); break; case 0: cout << "用户名已被注册,请重新选择用户名" << endl; system("pause"); Secret(); break; default: break; } break; } case 2: { clear(); UsrInfo test2;//用于测试注册程序的。 char ur[20], pr[20]; cout << "请输入用户名:" << endl; cin >> ur; cout << "请输入密码:" << endl; cin >> pr; strcpy(test2.UsrName, ur); strcpy(test2.Psword, pr); switch (login(&test2)) { case 1: cout << "登录成功" << endl; system("pause"); menu(); break; case 3: cout << "密码错误" << endl; system("pause"); Secret(); break; case 2: cout << "没有此用户名,请注册" << endl; system("pause"); Secret(); break; default: break; } } }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...