簡單c語言通訊錄的製作,c語言做通訊錄管理系統

本文目錄一覽:

用C語言編寫一個小型的通訊錄

#include iostream

#include string

#include “address.h”

#include “addressList.h”

#include “addressBook.h”

using namespace std;

int main()

{

new AddressBook; //開啟通信錄

return 0;

}

ostream operator(ostream os, const RecordList c_rl)

{

RecordList::const_iterator it;

RecordList::const_iterator it_end =c_rl.end();

for (it=c_rl.begin();it!=it_end; it++)

{

os (*it)-name ‘\n’ (*it)-tel ‘\n’;

}

return os;

}

istream operator (istream is, RecordList rl)

{

Record* rec;

string name;

while (true)

{

//注意這裡使用的是全局的getline()函數,而不是istream的成員函

//數.全局的getling()函數將從istream中取出最後一個分隔符,

//而istream的成員函數getline則不會

getline(is,name);

if (name ==””)

break;

rec = new Record;

rec-name=name;

getline(is,rec-tel );

rl.push_back(rec);

}

return is;

}

#includestdlib.h

#includefstream

#include “addressBook.h”

using namespace std;

AddressBook::AddressBook()

{

isModified = false;

start();

}

AddressBook::~AddressBook()

{

}

//功能:顯示歡迎畫面,並開始進行用戶交互處理

void AddressBook::start()

{

cout”\n”

“\t******************************\n”

“\t* 這是一個 *\n”

“\t* 簡單的通信錄程序 *\n”

“\t* 可以對通信錄進行簡單管理 *\n”

“\t* 歡迎使用通信錄 *\n”

“\t******************************\n”

“\n”;

handleMenu();

}

//功能:顯示通信錄菜單,返回用戶選擇的選項

//返回:用戶選擇的選項,是1-9之間的一個字符

char AddressBook::menuSelect()

{

cout”\n”

“1.顯示記錄\n”

“2.查詢記錄\n”

“3.增加記錄\n”

“4.刪除記錄\n”

“5.保存記錄\n”

“6.讀取記錄\n”

“7.新建記錄\n”

“8.結束運行\n”

“\n左邊數字對應功能選擇,請選1-8:”;

char choice[2];

while(true)

{

cin.getline(choice,2);

if(choice[0]’1′ || choice[0]’8′)

cout”\n輸入錯誤,重選1-8:”;

else

break;

}

return choice[0];

}

//功能:根據用戶選擇的項目調用相應的處理函數

void AddressBook::handleMenu()

{

while(true)

{

switch(menuSelect())

{

case ‘1’:

displayRecords();

break;

case ‘2’:

queryRecord();

break;

…….

//功能:打印用於顯示記錄信息時的表頭

void AddressBook::dispTable()

{

}

//功能:顯示通信錄中的所有記錄

void AddressBook::displayRecords()

{

}

//功能:首先檢查通信錄是否已保存,然後清空當前通信錄中所有記錄

//注意:該函數覆蓋了基類中的函數

void AddressBook::clear()

{

}

//功能:查詢指定記錄

void AddressBook::queryRecord()

{

//功能:向當前通信錄追加新的記錄

//注意:該函數重載了基類中的函數

void AddressBook::addRecord()

{

}

/*

//說明:如果使用string 類,效果更好。下面是實現本功能的程序代碼:

while(true)

{

//輸入新記錄

string name;

cout”姓名:”;

getline(cin,name);

//如果輸入的姓名為「0」,則結束添加記錄的操作

if(name==”0″)

break;

Record* rec=new Record;

rec-name=name;

cout”電話:”;

getline(cin,rec-tel);

//將新記錄加入鏈表

AddressList::addRecord(rec);

}

//同理,下面的成員函數removeRecord()中的判斷,可以使用如下替代方法:

string str;

getline(cin,str);

while(true)

{

if(str[0]!=’1′ str[0]!=’2′)

{

cout”輸入錯誤,重選1-2:”;

getline(cin,str);

}

else

break;

}

*/

//功能:從當前通信錄移除指定的記錄

//注意:該函數重載了基類中的函數

void AddressBook::removeRecord()

{

if(empty())

{

cout”通信錄已空,退出刪除操作!”endl;

return;

}

//選擇獲取需要刪除的記錄的方式

cout”可以通過姓名或電話刪除記錄\n”

“1.通過姓名\n”

“2.通過電話\n”;

char choice[2];

cin.getline(choice,2);

while(true)

{

if(choice[0]!=’1′ choice[0]!=’2′)

{

cout”輸入錯誤,重選1-2:”;

cin.getline(choice,2);

}

else

break;

}

int type=static_castint(choice[0])-48;

//輸入需要匹配的字符串

if(type==1)

cout”請輸入姓名:”flush;

else

cout”請輸入電話:”flush;

char pattern[20];

cin.getline(pattern,20);

int deletedCount=0;

//找到匹配的記錄

Iterator it=findRecord(pattern,type,first());

Iterator it_end=pastEnd();

while(it!=it_end)

{

cout”找到一條匹配的記錄:\n”;

dispTable();

cout(*it)-name”\t\t”(*it)-tel”\n”;

cout”確定要刪除這條記錄嗎?[Y/N]”;

cin.getline(choice,2);

//刪除這條記錄

if(choice[0]!=’n’ choice[0]!=’N’)

{

it=AddressList::removeRecord(it);

deletedCount++;

}

//取下一條匹配的記錄

if(it!=it_end)

it=findRecord(pattern,type,++it);

}

cout”一共刪除了”deletedCount”條記錄\n”

“現在還有”size()”條記錄”endl;

if(deletedCount!=0)

isModified=false;

}

//功能:將通信錄保存至指定文件

//注意:該函數重載了基類中的函數

void AddressBook::saveRecords()

{

if(empty())

{

cout”沒有記錄可存!”endl;

return;

}

//因為下面的程序中使用string類的成員函數,所以需要進行一次轉換

string fname;

char name[16];

cout”請輸入要存在的文件名(直接回車選擇文件sname):”;

cin.getline(name,16);

fname=name;

if(fname.empty())

fname=”sname”;

ofstream of(fname.c_str(),ios_base::out);

if(!of)

{

cout”不能存入文件!”endl;

return;

}

AddressList::saveRecords(of);

of.close();

coutsize()”條記錄已經存入文件,請繼續操作。”endl;

isModified=false;

}

//功能:從指定文件讀取記錄追加到當前通信錄末尾

//注意:該函數重載了基類中的函數

void AddressBook::loadRecords()

{

}

void AddressBook::quit()

{

}

#ifndef H_ADDRESSBOOK_H_NNN

#define H_ADDRESSBOOK_H_NNN

#include “addressList.h”

//處理通信錄操作的面向用戶使用的類,包含所有功能的用戶界面及用戶交互的實現

class AddressBook :public AddressList

{

protected:

bool isModified; //通信錄是否已被修改還未保存

public:

AddressBook();

virtual ~AddressBook();

//開始通信錄的用戶界面操作

virtual void start();

//菜單處理函數

virtual void handleMenu();

//顯示記錄

virtual void displayRecords();

//查詢記錄

virtual void queryRecord();

//增加記錄

virtual void addRecord();

//刪除記錄

virtual void removeRecord();

//保存記錄

virtual void saveRecords();

//讀取記錄

virtual void loadRecords();

//結束程序

virtual void quit();

//清空當前通信錄

virtual void clear();

protected:

//菜單選擇函數

char menuSelect();

//顯示錶頭

void dispTable();

};

#endif //H_ADDRESSBOOK_HZ-NNN

#include “addressList.h”

AddressList::~AddressList()

{

recList.clear();

}

//功能:向通信錄中添加新的記錄

//參數:rec,指向新記錄的指針

void AddressList::addRecord (Record* rec)

{

if (rec !=NULL)

{

recList.push_back(rec);

}

}

//功能:從通訊錄中刪除一個記錄

//參數:it,指向欲刪除記錄的迭代器

//注意:it,應是可提領的迭代器,可以通過findRecord()獲得

AddressList::Iterator AddressList::removeRecord(AddressList::Iterator it)

{

return recList.erase(it);

}

//功能:從通信錄中尋找一個記錄

//參數:pattern,欲尋找的記錄的指定域與pattern相等

// type,為1表示欲尋找記錄的名稱(name)與pattern相等;

// 為2表示欲尋找記錄的電弧(tel)與(pattern)相等。

// from,從from開始尋找匹配的記錄。

//返回:若找到了則返回的迭代器指向第一個匹配記錄的迭代器,

// 若找不到則返回的迭代器等於pastEnd()的返回值。

//注意:from應是可提領的迭代器。

// 第一次調用可以用first(),之後使用上一次findRecord()的返回值增1,

// 直到返回pastEnd(),便可以獲得所有匹配的記錄。

AddressList::Iterator AddressList::findRecord(string pattern,int type,AddressList::Iterator from)

{

Iterator it;

Iterator it_end=recList.end();

for (it=from; it!=it_end; it++)

{

if ((type==1 (*it)-name==pattern)||(type==2 (*it)-tel==pattern))

break;

}

return it;

}

//功能:將通信錄保存到輸出流中

//參數:os.指定的輸出流

void AddressList::saveRecords(ostream os)

{

os recList;

}

//功能:從輸入流中讀入數據並追加到當前通信錄的末尾

//參數:is,指定的輸入流

//返回:讀入的記錄數

int AddressList::loadRecords(istream is)

{

int ori =size();

is recList;

return size()-ori;

}

#ifndef H_ADDRESSLIST_H_AAA

#define H_ADDRESSLIST_H_AAA

#include iostream

#include string

#include “address.h”

using namespace std;

//處理通信錄操作的底層類,包括增加記錄、刪

//除記錄、查詢記錄以及保存和讀取記錄的函數,

//該類不涉及任何關於用戶界面的操作

class AddressList

{

protected:

RecordList recList;// 使用對象成員作為數據成員

public:

typedef RecordList::iterator Iterator;

//向通信錄中添加新的記錄

virtual void addRecord(Record* rec);

//從通信錄中刪除一個記錄

virtual Iterator removeRecord(Iterator it);

//從通訊錄中尋找一個記錄

virtual Iterator findRecord(string pattern,int type,Iterator from);

//將通信錄保存到輸出流中

virtual void saveRecords(ostream os);

//從輸入流中讀入數據並追加到當前通信錄的末尾

virtual int loadRecords(istream is);

virtual ~AddressList();

//獲得通信錄中存儲的記錄數

const int size() const

//通信錄是否為空

const bool empty() const

//清除通信錄

virtual void clear()

//獲得通信錄的第一條記錄

Iterator first()

//獲得通信錄超過最後一個記錄之後的迭代器

Iterator pastEnd()

};

#endif //H_ADDRESSLIST_H_AAA

另外,站長團上有產品團購,便宜有保證

c語言編寫一個通訊錄系統 用簡單一點的c?

#define N 100

#define SIZE 30

#include stdio.h

#include string.h

#include conio.h

struct student{

 char num[SIZE];

char name[SIZE];

 char tel[SIZE];

};

/*函數聲明*/

void myprint();/*顯示菜單*/

int mycreat(struct student*p,int n);/*輸入通訊錄*/void mydisplay(struct student*p,int n);/*顯示通訊錄*/void mysearch(struct student*p,int n);/*查找*/

void mymodify(struct student*p,int n);/*修改通訊錄*/int myadd(struct student*p,int n);/*增加通訊錄*/int mydelete(struct student*p,int n);/*刪除*/void mysort(struct student*p,int n);/*排序*/

void sch_num(struct student*p,int n);/*按學號查找*/void sch_name(struct student*p,int n);/*按姓名查找*/

int loadinfo(struct student*p,int n);/*載入通訊錄信息*/int saveinfo(struct student*p,int n);/*保存通訊錄信息*/void main(){

/*文件定義*/char choose,yes_no;

struct studentrecord[N];/*存放通訊錄信息,共100條*/int total=0,flag;/*通訊錄總數*/

total=loadinfo(record,N);/*從文件讀取記錄信息,不超過100條*/do{

myprint();/*顯示菜單*/

printf(“請選擇:”);do{

choose=getchar();}

while(choose’0’||choose’9′);switch(choose){

case’1′:

total=mycreat(record,total);break;case’2′:

mydisplay(record,total);break;case’3′:

mysearch(record,total);break;case’4′:

mymodify(record,total);break;case’5′:

total=myadd(record,total);break;case’6′:

total=mydelete(record,total);break;case’7′:

mysort(record,total);break;case’8′:

flag=saveinfo(record,total);if(flag==1)

printf(“\n保存成功!\n”);else

printf(“\n保存失敗!\n”);break;case’0′:

break;default:

printf(“\n%c為非法選項!\n”,choose);}

if(choose==’0′)break;printf(“\n要繼續選擇嗎(Y/N)?”);do{

yes_no=getchar();}

while(yes_no!=’Y’yes_no!=’y’yes_no!=’N’yes_no!=’n’);}

while(yes_no!=’Y’||yes_no!=’y’);}

void myprint()/*顯示菜單信息*/{

printf(“\n\n\n\n\n”);printf(“\n”);printf(“請輸入選項編號(0–7)\n”);printf(“1—批量輸入通訊錄\n”);printf(“2—顯示通訊錄\n”);printf(“3—查詢通訊錄\n”);printf(“4—修改通訊錄\n”);printf(“5—添加通訊錄\n”);printf(“6—刪除通訊錄\n”);printf(“7—排序通訊錄\n”);printf(“8—保存通訊錄\n”);printf(“0—退出\n”);printf(“\n”);

}

int mycreat(struct student*p,int n)/*批量輸入學生信息*/{

int i=0;int m;

printf(“添加前的記錄,共有%d個:\n”,n);printf(“\n記錄號學號姓名電話號碼\n”);

i=0;

while((in)(strcmp(p-num,””)!=0)){

printf(“%d:%15s%15s%15s\n”,i+1,p-num,p-name,p-tel);i++;p++;}

printf(“\n請輸入要輸入的學生人數(%d):”,N-n);

scanf(“%d”,m);i=0;

while(im){

printf(“\n”);

printf(“請輸入第%d個記錄:\n”,i+1);printf(“學號:”);do{

gets(p-num);}

while(strcmp(p-num,””)==0);printf(“姓名:”);gets(p-name);

printf(“電話號碼:”);gets(p-tel);p++;i++;}

return m+n;}

void mydisplay(struct student*p,int n)/*顯示學生信息*/{

/*clrscr();*/int i=0;

printf(“\n記錄號學號姓名電話號碼\n”);while(in){

printf(“%d:%15s%15s%15s\n”,i+1,p-num,p-name,p-tel);p++;i++;}}

void mymodify(struct student*p,int n)/*修改學生信息*/{

int i;

char nam[10];mydisplay(p,n);

printf(“\n請輸入要修改記錄的姓名:”);gets(nam);

for(i=0;in;i++,p++)

if(strcmp(nam,p-name)==0)break;if(i==n)

printf(“無此人!\n”);else{

printf(“請輸入正確的學號:”);do{

gets(p-num);}

while(strcmp(p-num,””)==0);printf(“請輸入正確的姓名:”);gets(p-name);

printf(“請輸入正確的電話號碼:”);gets(p-tel);}

}

void mysearch(struct student*p,int n)/*查找指定學生*/{

char c;

mydisplay(p,n);

printf(“\n按學號查詢(h),還是按姓名查詢(m)?”);c=getchar();

if(c==’h’||c==’H’)

sch_num(p,n);else if(c==’m’||c==’M’)

sch_name(p,n);else

printf(“\n非法字符!\n”);}

void sch_num(struct student*p,int n)/*按學號查詢*/{

int i,flag=0;char nm[10];

printf(“\n請輸入要查詢記錄的學號:”);gets(nm);

for(i=0;in;i++)

if(strcmp(nm,p[i].num)==0)

{

printf(“\n學號姓名電話號碼\n”);printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);flag=1;

}

if(flag==0)

printf(“無此人!\n”);}

void sch_name(struct student*p,int n)/*按姓名查詢*/{

int i,flag=0;char nam[10];

printf(“\n請輸入要查詢記錄的姓名:”);gets(nam);

for(i=0;in;i++)

if(strcmp(nam,p[i].name)==0){

printf(“\n學號姓名電話號碼\n”);printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);flag=1;}

if(flag==0)

printf(“無此人!\n”);

}

int myadd(struct student*p,int n)/*增加學生信息*/{

int i=0;char c;

struct studentt,*q;

printf(“添加前的記錄:\n”);printf(“\n學號姓名電話號碼\n”);i=0;q=p;

/*顯示原有記錄信息*/while(in){

printf(“%15s%15s%15s\n”,q-num,q-name,q-tel);i++;q++;}do{

printf(“請輸入新記錄的學號:\n”);do{

gets(t.num);

}

while(strcmp(t.num,””)==0);/*學號不能為空*/printf(“請輸入新記錄的姓名:”);gets(t.name);

printf(“請輸入新記錄的電話號碼:”);gets(t.tel);

for(i=0;in;i++)

if(strcmp(t.num,(p+i)-num)==0||strcmp(t.tel,(p+i)-tel)==0){

printf(“學號或電話號碼重,要重新輸入嗎(Y/N)?”);c=getchar();putchar (‘\n’);break;}

/*找到最後,沒有重複*/if(i==n){

*(p+i)=t;

printf(“添加後的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in+1;i++)

printf(“%15s%15s%15s\n”,(p+i)-num,(p+i)-name,p[i].tel);break;}

}

while(c==’y’||c==’Y’);return n+1;}

int mydelete(struct student*p,int n)/*刪除學生信息*/{

int i,x;

char c,nm[10],nam[10];

printf(“刪除前的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);printf(“按學號刪除(h),還是按姓名刪除(m)?”);c=getchar();

if(c==’h’||c==’H’){

printf(“\n請輸入要刪除記錄的學號:”);gets(nm);

for(x=0;xn;x++)

{

gets(t.num);

}

while(strcmp(t.num,””)==0);/*學號不能為空*/printf(“請輸入新記錄的姓名:”);gets(t.name);

printf(“請輸入新記錄的電話號碼:”);gets(t.tel);

for(i=0;in;i++)

if(strcmp(t.num,(p+i)-num)==0||strcmp(t.tel,(p+i)-tel)==0){

printf(“學號或電話號碼重,要重新輸入嗎(Y/N)?”);c=getchar();putchar (‘\n’);break;}

/*找到最後,沒有重複*/if(i==n){

*(p+i)=t;

printf(“添加後的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in+1;i++)

printf(“%15s%15s%15s\n”,(p+i)-num,(p+i)-name,p[i].tel);break;}

}

while(c==’y’||c==’Y’);return n+1;}

int mydelete(struct student*p,int n)/*刪除學生信息*/{

int i,x;

char c,nm[10],nam[10];

printf(“刪除前的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);printf(“按學號刪除(h),還是按姓名刪除(m)?”);c=getchar();

if(c==’h’||c==’H’){

printf(“\n請輸入要刪除記錄的學號:”);gets(nm);

for(x=0;xn;x++)

int j,i,k;char c1,c2;

struct studenttemp;

printf(“\n排序前的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);printf(“\n按學號排序(h),還是按姓名排序(m)?”);c1=getchar();

if(c1==’h’||c1==’H’){

printf(“\n按升序排序(s),還是按降序排序(j)?”);c2=getchar();/*升序*/

if(c2==’s’||c2==’S’){

for(i=0;in-1;i++){

k=i;

for(j=i;jn;j++)

if(strcmp(p[k].num,p[j].num)0)

k=j;

temp=p[k];p[k]=p[i];p[i]=temp;

}

printf(“\n排序後的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);}

else if(c2==’j’||c2==’J’)/*降序*/{

for(i=0;in-1;i++){

k=i;

for(j=0;jn;j++)

if(strcmp(p[k].num,p[j].num)0)

k=j;

temp=p[k];p[k]=p[i];p[i]=temp;

}

printf(“排序後的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);}

else printf(“\n非法字符\n”);}

else if(c1==’m’||c1==’M’)/*按姓名排序*/{

printf(“\n按升序排序(s),還是按降序排序(j)?”);c2=getchar();

if(c2==’s’||c2==’S’){

for(i=0;in-1;i++){

k=i;

for(j=0;jn;j++)

if(strcmp(p[k].name,p[j].name)0)

k=j;

temp=p[k];p[k]=p[i];p[i]=temp;}

printf(“排序後的記錄:\n”);printf(“\n學號姓名電話號碼\n”);for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);

}

else if(c2==’j’||c2==’J’)/*降序*/{

for(i=0;in-1;i++){

k=i;

for(j=i;jn;j++)

if(strcmp(p[k].name,p[j].name)0)

k=j;

temp=p[k];p[k]=p[i];p[i]=temp;

}

printf(“排序後的記錄:\n”);printf(“\n學號

姓名電話號碼\n”);

for(i=0;in;i++)

printf(“%15s%15s%15s\n”,p[i].num,p[i].name,p[i].tel);}

else printf(“\n非法字符!\n”);}

else printf(“\n非法字符!\n”);}

int loadinfo(struct student*p,int n)/*載入通訊錄信息*/{

FILE*fp;int i,all=0;

char filename[30]=”tongxunlu.txt”;fp=fopen(filename,”r”);if(fp==NULL){

printf(“\n***不能打開文件%s,或%s文件不存在,創建一個新文件!

“,filename,filename);*/

fp=fopen(filename,”w”);}

fscanf(fp,”%d\n”,all);

if(allN)/*讀取記錄總數*/{

printf(“文件記錄數太多,不能讀取”);return 0;}

for(i=0;iall;i++)/*讀取記錄信息*/{

fscanf(fp,”%s%s%s\n”,p[i].num,p[i].name,p[i].tel);}

fclose(fp);/*關閉文件*/return all;}

int saveinfo(struct student*p,int n){

FILE*fp;int i,all=0;

char filename[30]=”txl.dat”;/*文件可以用記事本打開*/fp=fopen(filename,”w”);if(fp==NULL){

printf(“\n***不能建立或打開文件%s!***”,filename);return 0;}

fprintf(fp,”%d\n”,n);for(i=0;in;i++)

fprintf(fp,”%s%s%s\n”,p[i].num,p[i].name,p[i].tel);fclose(fp);return 1;}

抄來的

如何用C語言做通訊錄

剽竊代碼即可。。

已經按照你的要求做了一個,VC6上運行確認了:

#include stdio.h 

#include stdlib.h

#include string.h 

typedef struct PersonalInfo

{

 char name[50];

 char address[30];

 char telno[30];

 char postcode[30];

 struct PersonalInfo *next;

}INFO;

INFO *head;

void Initiate();

void Menu();

void Create();//的功能是:創建新的通訊錄。

void Add();// 在通訊錄的末尾,寫入新的信息,並返回選單

void Find();//查找記錄

void Alter();//修改記錄如果未找到要修改的人,則提示通訊錄中沒有此人的信息,並返回選單。

void Delete();//刪除某人的信息,如果未找到要刪的人,提示通訊錄中沒有此人的信息,並返回選單。

void List();//的功能是:顯示通訊錄中的所有記錄。

//初始化

void  Initiate()

{

    if((head=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);

    head-next=NULL;

}

//顯示菜單

void Menu()

{

  printf(“**************歡迎使用通訊錄系統**************”);

  printf(“\n”);

  printf(“\n”);

  printf(”    1.創建通訊錄。\n”);

  printf(”    2.插入信息。\n”);

  printf(”    3.查詢記錄\n”);

  printf(”    4.修改記錄\n”);

  printf(”    5.刪除記錄!\n”);

  printf(”    6.顯示所有記錄\n”);

  printf(”    0.退出通訊錄\n”);

  printf(”      請輸入0~6     \n”);

}

//創建通訊錄

void Create()

{

     INFO *p1[100],*p2;

     int  m,i;

     printf(“請輸入創建個數:”);

     scanf(“%d”,m);

     for(i=1;i=m;i++)

     {

        p1[i]=(INFO *)malloc(sizeof(INFO));

        printf(“請輸入第%d條信息!\n”,i);

        printf(“姓名:\n”);

        scanf(“%s”,p1[i]-name);

        printf(“地址:\n”);

        scanf(“%s”,p1[i]-address);

        printf(“電話:\n”);

        scanf(“%s”,p1[i]-telno);

        printf(“郵編:\n”);

        scanf(“%s”,p1[i]-postcode);

        p1[i]-next=NULL;

        if(head-next==NULL)

           head-next=p1[i];

        else

        {

            for(p2=head;p2-next!=NULL;p2=p2-next);       //找到結點尾

            p2-next=p1[i];

        }

     }

    printf(“信息已添加!\n”);

    return;                                     //保存到鏈表

}

//添加通訊錄信息

void Add()

{

     INFO *p,*q;

     if((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);

     printf(“請輸入要添加的信息!\n”);

     printf(“姓名:\n”);                             //添加信息

     scanf(“%s”,q-name);

     printf(“性別:\n”);

     scanf(“%s”,q-address);

     printf(“電話:\n”);

     scanf(“%s”,q-telno);

     printf(“城市:\n”);

     scanf(“%s”,q-postcode);

     for(p=head;p-next!=NULL;p=p-next) ;

        p-next=q;

     q-next=NULL;

     printf(“此信息已添加!”);

     return;

}

//查找通訊錄信息

void Find()

{

    INFO *p;

    char name[50];

    if(head-next==NULL)

    {

      printf(“此通訊錄為空!\n”);

      return;

    }

    printf(“請輸入要查找的姓名:\n”);

    scanf(“%s”,name);

    for(p=head-next;p!=NULL;p=p-next)

    {

       if(strcmp(p-name,name)==0)

       {

           printf(“姓名\t地址\t郵編\t電話\n”);

           printf(“%s\t%s\t%s\t%s\n”,p-name,p-address,p-postcode,p-telno);

       }

       else  if(p-next==NULL)

          printf(“無此信息!\n”);

    }

}

//修改通訊錄信息

void Alter()

{

   char name[50];                                     //先查找 後刪除

   INFO *p, *p1;

   if (head-next == NULL)

   {

      printf(“此通訊錄為空!\n”);

      return;

   }

   printf(“請輸入要修改的姓名:\n”);

   scanf(“%s”,name);

   for(p=head-next;p!=NULL;p=p-next)

   {

       if(strcmp(p-name,name)==0)

          break;

       else   if(p-next==NULL)

       {

           printf(“無此信息!\n”);

           return;

       }

   }

   p1=(INFO *)malloc(sizeof(INFO));

   printf(“姓名:\n”);                             //添加信息

   scanf(“%s”,p1-name);

   strcpy(p-name,p1-name);

   printf(“性別:\n”);

   scanf(“%s”,p1-address);

   strcpy(p-address,p1-address);

   printf(“電話:\n”);

   scanf(“%s”,p1-telno);

   strcpy(p-telno,p1-telno);

   printf(“城市:\n”);

   scanf(“%s”,p1-postcode);

   strcpy(p-postcode,p1-postcode);

   printf(“此信息已修改!\n”);

   //顯示修改的信息

   printf(“姓名\t地址\t郵編\t電話\n”);

   printf(“%s\t%s\t%s\t%s\n”,p-name,p-address,p-postcode,p-telno);

   free(p1);

}

//刪除通訊錄信息

void Delete()

{

   char  name[50];                                     //先查找 後刪除

   INFO *p = head-next, *p1 =head-next,*p2;

   if (head-next == NULL)

   {

     printf(“此通訊錄為空!\n”);

     return;

   }

   printf(“請輸入要刪除的姓名:\n”);

   scanf(” %s”,name);

   while ((strcmp(p-name,name)!=0 ) p-next != NULL)

   {

      p1=p;

      p =p-next;

   }

   if (strcmp(name, p-name)==0)                    //輸出刪除信息

   {

       if (p == head-nextp-next!=NULL)

         head-next = p-next;

       else  if(p==head-nextp-next==NULL)

       {

           head-next=p-next;

           printf(“信息已刪除,先此通訊錄為空!!\n”);

           return;

       }

       else

         p1-next = p-next;

   }

   else

   {

       printf(“此信息不存在!!!\n”);

       return;

   }

   printf(“此信息已刪除!”);

   printf(“姓名\t地址\t郵編\t電話\n”);

   for(p2=head-next;p2!=NULL;p2=p2-next)

      printf(“%s\t%s\t%s\t%s\n”,p2-name,p2-address,p2-postcode,p2-telno);

}

//顯示所有記錄

void List()

{

   INFO *p;

   if(head-next==NULL)

   {

       printf(“此通訊錄中無記錄!\n”);

       return;

   }

   printf(“姓名\t地址\t郵編\t電話\n”);

   for(p=head-next;p!=NULL;p=p-next)

      printf(“%s\t%s\t%s\t%s\n”,p-name,p-address,p-postcode,p-telno);

}

void main() 

   int  choice;

   char  yes_no;

   

   system(“color a”); 

   Initiate();

   do

   {

      Menu();

      printf(“請選擇0-6的數字\n”);

      scanf(“%d”,choice);

      printf(“\n”);

      switch(choice)

      {

          case 1:Create();

          break;

          case 2:Add();

          break;

          case 3:Find();

          break;

          case 4:Alter();

          break;

          case 5:Delete();

          break;

          case 6:List();

          break;

          case 0:

          printf(“************感謝您的使用************\n”);

          exit(0);

          break;

          default:

          printf(“輸入有誤!請重新輸入\n”);

          break;

      }

      printf(“是否繼續  Y  or   N?  \n”);

      do

      {

         scanf(“%c”,yes_no);

      }while(yes_no!=’Y’yes_no!=’y’yes_no!=’N’yes_no!=’n’);

   }while(yes_no==’Y’||yes_no==’y’);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/293820.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-26 13:15
下一篇 2024-12-26 13:15

相關推薦

  • 銀行資金管理系統總結

    銀行資金管理系統是銀行日常業務運營的核心支撐系統,主要負責處理銀行的資金流動、結算、清算等業務。本文將從功能特點、技術架構、安全性以及未來發展趨勢等多個方面對銀行資金管理系統進行詳…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論