本文目錄一覽:
用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-tw/n/293820.html