c語言通訊錄程序設計-九游会j9娱乐平台
⑴ c語言程序設計,通訊錄管理系統
/*【用c語言編寫具有數據插入、修改、刪除、顯示和查詢功能的電話薄管理程序】
1、數據包括:人名、工作單位、電話號碼和e-mail地址。
2、可對記錄中的姓名和電話號碼進行修改。
3、可增加或刪除記錄。
4、可顯示所有保存的記錄。
5、可按人名或電話號碼進行查詢。
另:採用結構體數組和文件系統實現。結構體包括人名、工作單位、電話號碼和e-mail
絕對原創,2010年7月12日晚剛寫完測試通過的,純c語言! */
#include
#include
#include
#define szstr 64
#define filedb "c:\\contact.txt"
struct contact {
char name[szstr];/*姓名*/
char unit[szstr];/*工作單位*/
char tele[szstr];/*電話*/
char mail[szstr];/*mail*/
};
typedef struct contact con;
#define bname 1
#define bunit 2
#define btele 4
#define bmail 8
#define bfull 0xff
int oper[5] = {bfull, bname, bunit, btele, bmail};
void input(con * s, int mask)
{
if(mask & bname) { printf("請輸入學生姓名:"); scanf("%s", s->name); }
if(mask & bunit) { printf("請輸入工作單位:"); scanf("%s", s->unit); }
if(mask & btele) { printf("請輸入聯系電話:"); scanf("%s", s->tele); }
if(mask & bmail) { printf("請輸入電子郵件:"); scanf("%s", s->mail); }
}/*end input*/
void show (int id, con * s)
{
if(!s) return ;
if(id)
printf("%d\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->tele , s->mail );
else
printf("【姓名】%s【工作單位】%s【電話】%s【電郵】%s\n",
s->name , s->unit , s->tele , s->mail );
/*end if*/
}/*end show*/
void regist(void)
{
con s; file * f = 0;
input(&s, bfull);
f = fopen(filedb, "ab");
fwrite(&s,sizeof(s),1,f);
fclose(f);
printf("資料已保存!\n");
}/*end regist*/
int browse(char * key, fpos_t * p, con * s)
{
file * f =0; int i = 0, r = 0; con t;
char * a = 0, * b = 0; fpos_t q;
if(!s) return 0;
f = fopen(filedb, "rb");
if(!f) {
printf("資料庫暫無記錄\n");
return 0;
}/*end if*/
printf("編號\t姓名\t單位\t電話\t電郵\n");
printf("------------------------------------------------\n");
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&t, sizeof(t), 1, f);
if(r<1)break;
if(t.name[0]==0) continue;
if(key) {
a = strstr(t.name , key);
b = strstr(t.tele , key);
if(a == 0 && b == 0) continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));
i ;
show(i, &t);
}/*end while*/
fclose(f);
printf("------------------------------------------------\n");
return i;
}/*end browse*/
fpos_t query(con * s)
{
char key[szstr]=""; fpos_t p = 0; int r = 0;
printf("請輸入姓名或者電話號碼:");
scanf("%s", key);
r = browse(key, &p, s);
return r?p:-1;
}/*end query*/
void clear(void)
{
file * f = 0; con s;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(filedb, "rb ");
fsetpos(f, &p);
memset(&s, 0, sizeof(s));
fwrite(&s, sizeof(s),1, f);
fclose(f);
printf("記錄已刪除!\n");
}/*end clear*/
void modify(void)
{
file * f = 0; con s; int cmd = 0;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(filedb, "rb ");
fsetpos(f, &p);
for(;;) {
show(0, &s);
printf("請選擇:1-姓名;2-工作單位;3-電話;4-電郵;5-保存並退出;6-放棄修改並退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
input(&s, oper[cmd]);
break;
case 5:
fsetpos(f, &p);
fwrite(&s, sizeof(s), 1, f);
case 6:
fclose(f);
return;
default:
printf("錯誤的操作,請重新輸入。\n");
}/*end case*/
}/*mext*/
}/*end clear*/
int main(void)
{
int cmd = 0; con s;
for(;;) {
printf("歡迎使用通信簿!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-全部輸出;0-退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 0: return 0;
case 1: regist(); break;
case 2: query(&s); break;
case 3: clear(); break;
case 4: modify(); break;
case 5: browse(0, 0, &s); break;
}//end case
}
return 0;
}
⑵ 求c語言程序設計手機通訊錄代碼,急,
//這個是我教材上的,不知道你要的是不這個
#include
#include
struct friends_list
{
char name[10];
int age;
char telephone[13];
};
int count=0;
void new_friend(struct friends_list friends[]);
void search_friend(struct friends_list friends[],char *name);
int main(void)
{
int choice;
char name[10];
struct friends_list friends[50];
do
{
printf("通訊錄功能選項:1:新建2:查詢0:退出\n");
printf("請選擇功能:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:new_friend(friends);
break;
case 2:printf("請輸入要查找的聯系人姓名:");
scanf("%s",name);
search_friend(friends,name);
break;
case 0:break;
}
}
while(choice!=0);
printf("謝謝使用通訊錄功能!\n");
return 0;
}
void new_friend(struct friends_list friends[])
{
struct friends_list f;
if(count==50)
{
printf("通訊錄已滿!\n");
return;
}
printf("請輸入新聯系人的姓名:");
scanf("%s",f.name);
printf("請輸入新聯系人的年齡:");
scanf("%d",&f.age);
printf("請輸入新聯系人的聯系電話:");
scanf("%s",f.telephone);
friends[count]=f;
count ;
}
void search_friend(struct friends_list friends[],char *name)
{
int i,flag=0;
if(count==0)
{
printf("通訊錄是空的!\n");
return;
}
for(i=0;i
{
flag=1;
break;
}
if(flag)
{
printf("姓名:%s\t",friends[i].name);
printf("年齡:%d\t",friends[i].age);
printf("電話:%s\n",friends[i].telephone);
}
else
printf("無此聯系人!");
}
⑶ c語言的課程設計,做的是全班同學通訊錄,然而我並不懂程序是怎樣調用的
裡麵包括文件的調用,各種查找,篩選的函
⑷ c語言程序設計 通訊錄系統管理
// 頭文件部分
//============================
#include
#include
#include
#include
// 初始化數據部分
int menu();
void start();
void write();
void read();
void search();
void detele();
void beauty();
void rework();
void lock();
int judge();
//============================
struct student{
char name[20];
char tel[20];
char qq[20];
int age;
}xy[100];
char wenjian[10000];
char number[10];
char number=0;
int goto;
//
int main()
{
start();
for(;;)
{
goto=menu();
if(goto==1)
{
for(;;)
{
write();
int judge=judge();
if(judge==2)
{
break;
}
}
}
if(goto==2)
{
for(;;)
{
read();
system("pause");
break;
}
}
if(goto==3)
{
for(;;)
{
search();
int judge=judge();
if(judge==2)
{
break;
}
}
}
if(goto==4)
{
for(;;)
{
rework();
int judge=judge();
if(judge==2)
{
break;
}
}
}
if(goto==5)
{
detele();
break;
}
if(goto==6)
{
beauty();
break;
}
if(goto==7)
{
}
if(goto==8)
{
printf("");
break;
}
if(goto==9)
{
printf("\t\t\t退出系統\n\n");
return 0;
}
if(goto==0)
{
printf("");
break;
}
}
// beauty();
//
// write();
// read();
// search();
// rework();
// detele();
return 0;
}
void write()
{
printf("\t\t\t請輸入好友名字\n");
scanf("%s",&xy[number].name);
printf("\t\t\t請輸入好友電話號碼\n");
scanf("%s",&xy[number].tel);
printf("\t\t\t請輸入好友qq號碼\n");
scanf("%s",&xy[number].qq);
printf("\t\t\t請輸入好友年齡\n");
scanf("%d",&xy[number].age);
file *file;
if((file=fopen("friend.txt","rt"))==null)
{
file=fopen("friend.txt","wt");
fprintf(file,"%-20s%-20s%-20s%-20s","姓名","電話","qq","年齡");
}
file=fopen("friend.txt","at");
fprintf(file,"%-20s%-20s%-20s%-20d\n",xy[number].name,xy[number].tel,xy[number].qq,xy[number].age);
fclose(file);
number ;
number[0]=number;
file * sta;
if((sta=fopen("number.txt","r"))=null)
{
sta=fopen("number.txt","wt");
exit(1);
}
sta=fopen("number.txt","wt");
fprintf(sta,"%d",number[0]);
fclose(sta);
}
void read()
{
printf("\t\t\t您通訊錄中一共有%d位好友\n",number[0]);
file* read;
if((read=fopen("friend.txt","r"))=null)
{
printf("\t\t\t您通訊中當前沒有好友,請返回添加\n");
}
read=fopen("friend.txt","rt");
printf("%-20s%-20s%-20s%-20s\n","姓名","電話 ","qq","年齡");
for(int i=0;i
fscanf(read,"%s%s%s%d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,&xy[i].age);
printf("%-20s%-20s%-20s%-20d\n",xy[i].name,xy[i].tel,xy[i].qq,xy[i].age);
}
/* fread(wenjian,10000,1,read);
for(int i=0;i
printf("%c",wenjian[i]);
}
printf("\n");
*/
fclose(read);
}
void beauty()
{
int d;
do{
printf("choose");
scanf("%d",&d);
}while(d<1&&d>5);
if(d==1)
{
system("color 27");
printf("===1===");
}
if(d==2)
{
system("color 37");
printf("===2===");
}
if(d==3)
{
system("color 47");
printf("===3===");
}
if(d==4)
{
system("color 57");
printf("===4===");
}
if(d==5)
{
system("color 67");
printf("===5===");
}
}
void start()
{
file* start;
if((start=fopen("number.txt","r"))==null)
{
start=fopen("number.txt","w");
number=0;
number[0]=number;
fscanf(start,"%d",&number[0]);
printf("\t\t\t您的通訊錄中還沒有任何好友,趕快添加吧.此次操作需要重新運行程序。\n");
exit(1);
}
start=fopen("number.txt","r");
fscanf(start,"%d",&number[0]);
number=number[0];
fclose(start);
}
void search()
{
int change=0;
char searchname[20];
printf("\t\t\t輸入要查找的好友的名字\n\n");
scanf("%s",&searchname);
fflush(stdin);
printf("\t\t\t您要查找的好友是 %s \n\n",searchname);
file *search;
search=fopen("friend.txt","rt");
for(int i=0;i<=number;i )
{
fscanf(search,"%s%s%s%d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,&xy[i].age);
if(strcmp(xy[i].name,searchname)==0)
{
printf("\t\t\t下面是該好友的信息:\n\n");
printf("%-20s%-20s%-20s%-20s\n","姓名","電話 ","qq","年齡");
printf("%-20s%-20s%-20s%-20d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,xy[i].age);
change=1;
}
fclose(search);
}
if(change==0)
{
printf("\t\t\t您要查找的好友不存在,請返回菜單添加。\n");
}
}
void rework()
{
char rework[20];
printf("\t\t\t輸入要修改的好友的名字\n\n");
scanf("%s",&rework);
printf("\t\t\t您要修改 %s 的信息\n\n",rework);
int change=0;
file *search;
search=fopen("friend.txt","rt");
for(int i=0;i<=number;i )
{
fscanf(search,"%s%s%s%d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,&xy[i].age);
if(strcmp(xy[i].name,rework)==0)
{
printf("\t\t\t下面是該好友的信息:\n\n");
printf("%-20s%-20s%-20s%-20s\n","姓名","電話 ","qq","年齡");
change=1;
int choose;
printf("%-20s%-20s%-20s%-20d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,xy[i].age);
//---------------------------------------------------------------------
do
{
printf("\t\t\tchoose\t\t\t1-----3");
scanf("%d",&choose);
}while(choose>3||choose<1);
if(choose==1){
printf("\t\t\t請輸入好友電話號碼\n");
scanf("%s",&xy[i].tel);
}
if(choose==2)
{
printf("\t\t\t請輸入好友qq號碼\n");
scanf("%s",&xy[i].qq);
}
if(choose==3)
{
printf("\t\t\t請輸入好友年齡\n");
scanf("%d",&xy[i].age);
}
search=fopen("friend.txt","wt");
for(int sta=0;sta {
fprintf(search,"%-20s%-20s%-20s%-20d\n",xy[sta].name,xy[sta].tel,xy[sta].qq,xy[sta].age);
}
if(sta==i)
{
fprintf(search,"%-20s%-20s%-20s%-20d\n",xy[i].name,xy[i].tel,xy[i].qq,xy[i].age);
i ;
}
for(i;i<=number;i )
{
fprintf(search,"%-20s%-20s%-20s%-20d\n",xy[i].name,xy[i].tel,xy[i].qq,xy[i].age);
}
printf("\t\t\t修改後的信息為:\n\n");
read();
}
fclose(search);
}
if(change==0)
{
printf("\t\t\t您要查找的好友不存在,請返回菜單添加。\n");
}
}
void detele()
{
int change=0;
char delete_friend[20];
printf("\t\t\t輸入要刪除的好友的名字\n\n");
scanf("%s",&delete_friend);
fflush(stdin);
printf("\t\t\t您要刪除的好友是 %s \n\n",delete_friend);
file *deletef;
deletef=fopen("friend.txt","rt");
for(int i=0;i<=number;i )
{
fscanf(deletef,"%s%s%s%d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,&xy[i].age);
if(strcmp(xy[i].name,delete_friend)==0)
{
printf("\t\t\t下面是該好友的信息:\n\n");
printf("%-20s%-20s%-20s%-20s\n","姓名","電話 ","qq","年齡");
printf("%-20s%-20s%-20s%-20d\n",&xy[i].name,&xy[i].tel,&xy[i].qq,xy[i].age);
change=1;
deletef=fopen("friend.txt","wt");
for(int st=0;st {
fprintf(deletef,"%-20s%-20s%-20s%-20d\n",xy[st].name,xy[st].tel,xy[st].qq,xy[st].age);
}
i ;
for(i;i<=number;i )
{
printf("%-20s%-20s%-20s%-20d\n",xy[i].name,xy[i].tel,xy[i].qq,xy[i].age);
fprintf(deletef,"%-20s%-20s%-20s%-20d\n",xy[i].name,xy[i].tel,xy[i].qq,xy[i].age);
}
}
//--------------------------------------------------------------------------------
if(change==1)
{
printf("\t\t\t刪除後的通訊錄信息為:\n\n");
number--;
number[0]=number;
file * st;
if((st=fopen("number.txt","r"))=null)
{
st=fopen("number.txt","wt");
exit(1);
}
st=fopen("number.txt","wt");
fprintf(st,"%d",number[0]);
fclose(st);
fclose(deletef);
start();
read();
}
}
if(change==0)
{
printf("\t\t\t您要刪除的好友不存在。\n");
}
}
void lock()
{
}
int menu()
{
printf("\t\t*****歡迎進入通訊管理界面*****\n\n");
printf("\t\t\t1.添加我的好友\n");
printf("\t\t\t2.顯示所有好友\n");
printf("\t\t\t3.查找我的好友\n");
printf("\t\t\t4.修改好友信息\n");
printf("\t\t\t5.刪除我的好友\n");
printf("\t\t\t6.設置背景顏色\n");
printf("\t\t\t7.設置管理密碼\n");
printf("\t\t\t8.使用注意事項\n");
printf("\t\t\t9.退出通訊系統\n");
printf("\t\t\t0.作者想說的話\n");
printf("\t\t******************************\n\n");
do{
printf("\t\t\t請輸入你的選擇:\n\n");
scanf("%d",&goto);
}while(goto>9||goto<1);
return goto;
}
int judge()
{
char judge;
do
{
printf("\t\t\t是否繼續當前操作\n\n y(yes) / n(no)\n");
printf("\t\t\t輸入你的選擇\n");
judge=getch();
if(judge=='y'||judge=='y')
{
return 1;
}
if(judge=='n'||judge=='n')
{
return 2;
}
}while(judge!='y'||judge!='n');
}
⑸ 請c語言高手幫忙做一下c程序設計題目
沒工夫編了,給你找了個現成的,網路知道里的。
#include
#include
#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;
}
#include
#include
#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<<"通信錄已空,退出刪除操作!"<
}
//選擇獲取需要刪除的記錄的方式
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_cast
//輸入需要匹配的字元串
if(type==1)
cout<<"請輸入姓名:"<
cout<<"請輸入電話:"<
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<<"一共刪除了"<
ismodified=false;
}
//功能:將通信錄保存至指定文件
//注意:該函數重載了基類中的函數
void addressbook::saverecords()
{
if(empty())
{
cout<<"沒有記錄可存!"<
}
//因為下面的程序中使用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<<"不能存入文件!"<
}
addresslist::saverecords(of);
of.close();
cout<
}
//功能:從指定文件讀取記錄追加到當前通信錄末尾
//注意:該函數重載了基類中的函數
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
#include
#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 {return (int)reclist.size();}
//通信錄是否為空
const bool empty() const {return reclist.empty();}
//清除通信錄
virtual void clear() {reclist.clear();}
//獲得通信錄的第一條記錄
iterator first(){return reclist.begin();}
//獲得通信錄超過最後一個記錄之後的迭代器
iterator pastend() {return reclist.end();}
};
#endif //h_addresslist_h_aaa
⑹ 用c語言幫忙寫一個「tcp client/server模式的通信程序設計與實現」
client:
#include
#include
#include
#pragma comment(lib,"ws2_32")
#define port 6666 /* 客戶機連接遠程主機的埠 */
#define maxdatasize 100 /* 每次可以接收的最大位元組 */
int main()
{
int sockfd, numbytes;
char buf[maxdatasize];
char msg[maxdatasize];
char *argv="127.0.0.1";
struct sockaddr_in their_addr; /* 對方的地址埠信息 */
wsadata ws;wsastartup(makeword(2,2),&ws); //初始化windows socket dll
if ((sockfd = socket(af_inet, sock_stream, 0)) == -1)
{
//如果侍基建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}
//連接對方
their_addr.sin_family = af_inet; /* 協議類型是inet */
their_addr.sin_port = htons(port); /* 連接對方port埠悔洞 */
their_addr.sin_addr.s_addr = inet_addr(argv); /* 連接對方老前謹的ip */
if (connect(sockfd, (struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1)
{
//如果連接失敗,退出程序
printf("connet error\n");
closesocket(sockfd);
exit(1);
}
while(1){
scanf("%s",msg);
//發送數據
if (send(sockfd, msg, maxdatasize, 0) == -1)
{
printf("send error");
closesocket(sockfd);
exit(1);
}
//接收數據,並列印出來
if ((numbytes=recv(sockfd, buf, maxdatasize, 0)) == -1)
{
//接收數據失敗,退出程序
printf("recv error\n");
closesocket(sockfd);
exit(1);
}
buf[numbytes] = '\0';
printf("received: %s\n",buf); }
closesocket(sockfd);
return 0;
}
server:
#include
#include
#pragma comment(lib,"ws2_32")
#define myport 6666 /*定義用戶連接埠*/
#define backlog 10 /*多少等待連接控制*/ #define maxdatasize 100
int main()
{
int sockfd, new_fd; /*定義套接字*/
struct sockaddr_in my_addr; /*本地地址信息 */
struct sockaddr_in their_addr; /*連接者地址信息*/
int sin_size,numbytes; char msg[10],buf[maxdatasize];
wsadata ws;
wsastartup(makeword(2,2),&ws); //初始化windows socket dll
//建立socket
if ((sockfd = socket(af_inet, sock_stream, 0)) == -1)
{
//如果建立socket失敗,退出程序
printf("socket error\n");
exit(1);
}
//bind本機的myport埠
my_addr.sin_family = af_inet; /* 協議類型是inet */
my_addr.sin_port = htons(myport); /* 綁定myport埠*/
my_addr.sin_addr.s_addr = inaddr_any; /* 本機ip*/
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1)
{
//bind失敗,退出程序
printf("bind error\n");
closesocket(sockfd);
exit(1);
}
//listen,監聽埠
if (listen(sockfd, backlog) == -1)
{
//listen失敗,退出程序
printf("listen error\n");
closesocket(sockfd);
exit(1);
}
printf("listen...");
//等待客戶端連接
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
{
printf("accept error\n");
closesocket(sockfd);
exit(1);
}
printf("\naccept!\n");
while(1) {
if((numbytes=recv(new_fd, buf, maxdatasize, 0)) == -1) continue;
if(!strcmp(buf,"bye"))
{
//成功,關閉套接字
closesocket(sockfd);
closesocket(new_fd);
return 0;
}
printf("%s %d",buf,strlen(buf));
sprintf(msg,"%d",strlen(buf));
if (send(new_fd,msg,maxdatasize, 0) == -1)
{
printf("send erro");
closesocket(sockfd);
closesocket(new_fd);
return 0;
}
}
}