最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年12月18日 11:16:26   作者:二兩桃花釀作酒  
這篇文章主要為大家詳細(xì)介紹了C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

文件操作未寫(xiě)

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

使用VS2017編譯器需要保留開(kāi)頭#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 100
using 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í)候是訪問(wèn)用戶名的時(shí)候,當(dāng)i整除2的時(shí)候是訪問(wèn)密碼的時(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è)成功則寫(xiě)入文件
 while (std::getline(fin, temp))//每次讀一行的數(shù)據(jù)進(jìn)入temp中。
 {
 i++;
 if (i % 2 == 0) continue;//訪問(wèn)的是密碼這一行,跳出。
 if (!strcmp(usrname, temp.c_str())) flag = 1;//flag=1說(shuō)明用戶名已經(jīng)被注冊(cè)了
 }
 fin.close();
 if (flag) {
 return 0;//之前有重復(fù)的賬戶名
 }
 else {//沒(méi)注冊(cè)
 fout << usrname << endl;//向文件寫(xiě)入注冊(cè)者的用戶名,然后換一行
 fout << psword << endl;//寫(xiě)入密碼,換行
 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è)用戶名了,接下來(lái)看看密碼是不是相符的
 existname = 1;
 if (!strcmp(psword, temp2.c_str())) {//相符
 match = 1;
 break;
 }
 }
 }
 fin.close();
 if (!existname) {
 return 2;//沒(méi)有賬戶名
 }
 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 << "沒(méi)有此用戶名,請(qǐng)注冊(cè)" << endl;
 system("pause");
 Secret();
 break;
 default:
 break;
 }
 }
 }
}

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

相關(guān)文章

  • c++實(shí)現(xiàn)二路歸并排序的示例代碼

    c++實(shí)現(xiàn)二路歸并排序的示例代碼

    這篇文章主要介紹了c++實(shí)現(xiàn)二路歸并排序的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C/C++中CONST用法總結(jié)(推薦)

    C/C++中CONST用法總結(jié)(推薦)

    這篇文章主要介紹了C/C++中CONST用法總結(jié)(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-07-07
  • C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼

    C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 簡(jiǎn)單舉例說(shuō)明C++中break和continue語(yǔ)句的用法

    簡(jiǎn)單舉例說(shuō)明C++中break和continue語(yǔ)句的用法

    這篇文章主要介紹了簡(jiǎn)單舉例說(shuō)明C++中break和continue語(yǔ)句的用法,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)只是,需要的朋友可以參考下
    2015-09-09
  • 有關(guān)C++中隨機(jī)函數(shù)rand() 和srand() 的用法詳解

    有關(guān)C++中隨機(jī)函數(shù)rand() 和srand() 的用法詳解

    下面小編就為大家?guī)?lái)一篇有關(guān)C++中隨機(jī)函數(shù)rand() 和srand() 的用法詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C語(yǔ)言中函數(shù)返回值不一致問(wèn)題

    C語(yǔ)言中函數(shù)返回值不一致問(wèn)題

    這篇文章主要介紹了C語(yǔ)言中函數(shù)返回值不一致問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    這篇文章主要介紹了C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort,回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)
    2022-08-08
  • c++常量詳解

    c++常量詳解

    常量是存放固定且不可變值的,一旦確定初始值則在程序其它地方不可改變, 所以const對(duì)象必須初始化。常量一般使用const關(guān)鍵字來(lái)修飾
    2017-06-06
  • Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    Qt 實(shí)現(xiàn)桌面雪花飄落代碼

    這篇文章主要介紹了Qt實(shí)現(xiàn)桌面雪花飄落代碼,有需要的朋友可以參考一下
    2013-12-12
  • C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記

    C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記

    這篇文章主要介紹了C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記,包括指針訪問(wèn)數(shù)組等重要知識(shí)點(diǎn),需要的朋友可以參考下
    2016-05-05

最新評(píng)論

侯马市| 远安县| 平顶山市| 永吉县| 大埔县| 噶尔县| 漠河县| 库车县| 苍梧县| 建德市| 神池县| 巧家县| 太湖县| 宾川县| 孟州市| 德钦县| 常山县| 新安县| 成都市| 阳曲县| 浦东新区| 和政县| 留坝县| 施甸县| 萨迦县| 琼中| 康定县| 太白县| 比如县| 平昌县| 江都市| 林甸县| 大埔区| 仪陇县| 通辽市| 大埔县| 富民县| 壶关县| 开封市| 巫山县| 灵丘县|