国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng)

2020-01-26 13:21:56
字體:
供稿:網(wǎng)友

用數(shù)據(jù)結(jié)構(gòu)里面線性結(jié)構(gòu)的鏈表實(shí)現(xiàn),供大家參考,具體內(nèi)容如下

文件操作未寫

有登錄操作,復(fù)制源碼需要更改登錄模塊的密碼文件存放位置

使用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);//前插法插入新結(jié)點(diǎn)LinkList SearchName(LinkList L);//按姓名查找LinkList SearchNum(LinkList L);//按學(xué)號(hào)查找void DelLNode(LinkList &L,LinkList p);//刪除p結(jié)點(diǎn)void PrintLNode(LinkList p);//打印結(jié)點(diǎn)void PrintList(LinkList L);//打印表/*----------------系統(tǒng)函數(shù)----------------*/void CreateLinkList(LinkList &L);//創(chuàng)建鏈表void DelName(LinkList &L);//按姓名刪除通訊錄成員void DelNum(LinkList &L);//按學(xué)號(hào)刪除通訊錄成員void saveRecord(LinkList L);//存儲(chǔ)信息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;//申請(qǐng)頭結(jié)點(diǎn) L->next= NULL;} //插入一條信息void InsertLNode(LinkList & L, LNode *s){ s->next = L->next; L->next = s;} //按姓名查找LinkList SearchName(LinkList L){ char name[20]; cout << "請(qǐng)輸入要查找的姓名:" << endl; cin >> name; LinkList p = L->next; while (p) { //如果找到,退出循環(huán),返回p if (strcmp(p->name, name) == 0) break; else p = p->next; } return p;} //按學(xué)號(hào)查找LinkList SearchNum(LinkList L){ char num[10]; cout << "請(qǐng)輸入要查找的學(xué)號(hào):" << endl; cin >> num; LinkList p = L->next; while (p) { //如果找到,退出循環(huán),返回p if (strcmp(p->num, num) == 0) break; else p = p->next; } return p;} //刪除節(jié)點(diǎn)void DelLNode(LinkList &L,LinkList p){ LinkList s=NULL, q; q = L->next; //將s指向p前面的一個(gè)結(jié)點(diǎn) 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 << "請(qǐng)輸入學(xué)號(hào):" << endl; cin >> p->num; cout << "請(qǐng)輸入姓名:" << endl; cin >> p->name; cout << "請(qǐng)輸入電話號(hào)碼:" << endl; cin >> p->telNum; cout << "請(qǐng)輸入QQ號(hào):" << endl; cin >> p->qq; InsertLNode(L,p); n++; cout<<"是否繼續(xù)?(Y/N)"<<endl; getchar(); ans=getchar(); } system("pause");} //按姓名刪除void DelName(LinkList &L){ char name[20]; LinkList p; cout << "請(qǐng)輸入要?jiǎng)h除的學(xué)生姓名:" << endl; cin >> name; p = SearchName(L); if (p) { DelLNode(L,p); } system("pause");} //按學(xué)號(hào)刪除void DelNum(LinkList & L){ char num[20]; LinkList p; cout << "請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):" << endl; cin >> num; p = SearchName(L); if (p) { DelLNode(L, p); } system("pause");} //存儲(chǔ)信息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 "<<count<<"messages!" << endl; Sleep(2200);} //控制臺(tái)樣式void fun() { system("color 2a"); system("title 學(xué)生通訊錄信息管理系統(tǒng)");} //版本信息void ver(){ yanshi((char*)"/t /3/3/3/3/3/3/3歡迎使用通訊錄信息管理系統(tǒng)/3/3/3/3/3/3/3/n/n/n/n"); cout << "/t   學(xué)生通訊錄信息管理系統(tǒng)/n/n/n/n/n"; cout << "/t/t  version 1.0/n/n/n/n/n"; cout << "/t/t  xxxxxxxxx 某某某/n/n/n/n/n"; cout << "/t/t  Loading....../n/n" << endl; Sleep(3000); system("cls"); } //延時(shí)輸出void yanshi(char *p){ while (1) { if (*p != 0) cout << *p++; else break; Sleep(50); } } //清屏void clear(){ system("cls");} //表頭void header(){ printf("%15s%15s%15s%15s/n","學(xué)號(hào)","姓名","電話","QQ");} /*--------------------------------登錄模塊----------------------------------*//*--------------------------------登錄模塊----------------------------------*//*--------------------------------登錄模塊----------------------------------*/struct UsrInfo//用戶名的賬戶和密碼信息{ char UsrName[20]; char Psword[20];};/*注意我的文件中用戶名是一行,密碼是一樣。在注冊(cè)的時(shí)候只需要看用戶名,不需要看密碼是不是相符,所以設(shè)置i為計(jì)數(shù)變量,當(dāng)i不能整除2的時(shí)候是訪問用戶名的時(shí)候,當(dāng)i整除2的時(shí)候是訪問密碼的時(shí)候。讀入密碼這一行直接跳出去就行了。*/int regest(struct UsrInfo* usr) {//注冊(cè)程序 char usrname[20]; char psword[20]; strcpy_s(usrname, usr->UsrName); strcpy_s(psword, usr->Psword); string temp; int flag = 0; int i = 0; ifstream fin("E://Love-Study//學(xué)生通訊錄管理系統(tǒng)//static.dat", ios::in);//在這個(gè)路徑下讀入文件 ofstream fout("E://Love-Study//學(xué)生通訊錄管理系統(tǒng)//static.dat", ios::app);//在同一個(gè)路徑下,如果注冊(cè)成功則寫入文件 while (std::getline(fin, temp))//每次讀一行的數(shù)據(jù)進(jìn)入temp中。 { i++; if (i % 2 == 0) continue;//訪問的是密碼這一行,跳出。 if (!strcmp(usrname, temp.c_str())) flag = 1;//flag=1說明用戶名已經(jīng)被注冊(cè)了 } fin.close(); if (flag) { return 0;//之前有重復(fù)的賬戶名 } else {//沒注冊(cè) fout << usrname << endl;//向文件寫入注冊(cè)者的用戶名,然后換一行 fout << psword << endl;//寫入密碼,換行 fout.close(); return 1;//注冊(cè)成功 }}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//學(xué)生通訊錄管理系統(tǒng)//static.dat", ios::in); while (std::getline(fin, temp1)) { std::getline(fin, temp2);//一次讀進(jìn)去兩行,分別是用戶名和密碼 if (!strcmp(usrname, temp1.c_str())) {//有這個(gè)用戶名了,接下來看看密碼是不是相符的 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.注冊(cè) 2.登錄" << endl; int c; cin >> c; switch (c) { case 1: { clear(); UsrInfo test1;//用于測(cè)試注冊(cè)程序的。 char urr[20], prr[20]; cout << "請(qǐng)輸入用戶名:" << endl; cin >> urr; cout << "請(qǐng)輸入密碼:" << endl; cin >> prr; strcpy(test1.UsrName, urr); strcpy(test1.Psword, prr); switch (regest(&test1)) { case 1: cout << "注冊(cè)成功" << endl; system("pause"); Secret(); break; case 0: cout << "用戶名已被注冊(cè),請(qǐng)重新選擇用戶名" << endl; system("pause"); Secret(); break; default: break; } break; } case 2: { clear(); UsrInfo test2;//用于測(cè)試注冊(cè)程序的。 char ur[20], pr[20]; cout << "請(qǐng)輸入用戶名:" << endl; cin >> ur; cout << "請(qǐng)輸入密碼:" << 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 << "密碼錯(cuò)誤" << endl; system("pause"); Secret(); break; case 2: cout << "沒有此用戶名,請(qǐng)注冊(cè)" << endl; system("pause"); Secret(); break; default: break; } } }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁化县| 独山县| 宾川县| 武宁县| 林州市| 北安市| 张家界市| 墨玉县| 浦北县| 开化县| 兴国县| 青冈县| 甘南县| 根河市| 江城| 浪卡子县| 靖西县| 德安县| 禄劝| 泰和县| 封丘县| 察雅县| 玉山县| 韩城市| 华安县| 辽源市| 莎车县| 涪陵区| 藁城市| 宁安市| 海淀区| 城固县| 山东省| 安多县| 文昌市| 青海省| 本溪| 罗源县| 鄂托克旗| 开化县| 武城县|