导航:首页 > 文件目录 > c语言将通讯录文件导入管理系统

c语言将通讯录文件导入管理系统

发布时间:2025-01-10 03:10:37

❶ C语言程序设计,通讯录管理系统

/*【用C语言编写具有数据插入、修改、删除、显示和查询功能的电话薄管理程序】
1、数据包括:人名、工作单位、电话号码和E-mail地址。
2、可对记录中的姓名和电话号码进行修改。
3、可增加或删除记录。
4、可显示所有保存的记录。
5、可按人名或电话号码进行查询。

另:采用结构体数组和文件系统实现。结构体包括人名、工作单位、电话号码和E-mail
绝对原创,2010年7月12日晚刚写完测试通过的,纯C语言! */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#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 <stdio.h>
#include <stdlib.h>
#include <string.h>

struct dataWab{
char name[8];
char telephone[16];
char mobile[16];
char address[16];
char unit[16];
struct dataWab *nextPtr;
}; /*自引用结构,用作通讯录的数据结构*/

typedef struct dataWab DATAWAB;
typedef DATAWAB *DATAWABPTR;
void insertWab(DATAWABPTR*,char[],char[],char[],char[],char[]); /*插入函数*/
void menuWab(void); /*菜单函数*/
void printWab(DATAWABPTR); /*打印所有记录函数*/
void seekWab(DATAWABPTR,char[]); /*查找函数*/
void deleteWab(DATAWABPTR,char[]); /*删除函数*/
void modifyWab(DATAWABPTR,char[]); /*修改函数*/
int test(DATAWABPTR); /*测试函数,测试通讯录内是否有记录*/
void printone(DATAWABPTR); /*打印单条记录函数*/
int controlWab(void); /*程序分支控制函数*/

int main()
{
DATAWABPTR startPtr=NULL;
DATAWABPTR tempPtr;
FILE *fileWab;

char menu; /*菜单操作控制变量*/
char insert; /*插入确认控制变量*/
char modifyName[8]; /*查找时的临时姓名存储*/
char deleteName[8]; /*删除时的临时姓名存储*/
char tempName[8]; /*临时姓名存储*/
char tempTelephone[16]; /*临时电话存储*/
char tempMobile[16]; /*临时手机存储*/
char tempAddress[16]; /*临时地址存储*/
char tempUnit[16]; /*临时单位存储*/
char seekName[8]; /*查找时的临时姓名存储*/

if(!(fileWab=fopen("wab.dat","rb")))
return 0;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
while(fread(tempPtr,sizeof(DATAWAB),1,fileWab)==1){
tempPtr->nextPtr=startPtr;
startPtr=tempPtr;
tempPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
}
fclose(fileWab);

puts("\n\n\t\t欢迎使用个人通讯录1.0\n");
menuWab();
menu=getch();

while(menu!='6'){

switch(menu){

case '1':
printWab(startPtr);
break;
case '2':
while(controlWab()){
printf("\n查找姓名:\n#>");
scanf("%s",seekName);
seekWab(startPtr,seekName);
}
break;
case '3':
while(controlWab()){

puts("\n录入个人信息\n");
printf("姓名:");
scanf("%s",tempName);
printf("\n电话:");
scanf("%s",tempTelephone);
printf("\n手机:");
scanf("%s",tempMobile);
printf("\n地址:");
scanf("%s",tempAddress);
printf("\n单位:");
scanf("%s",tempUnit);
printf("录入正确请按 1 \n#>");
insert=getch();
if(insert=='1')
insertWab(&startPtr,tempName,tempTelephone,tempMobile,
tempAddress,tempUnit);
}
break;
case '4':
while(controlWab()){
printf("\n删除姓名\n#>");
scanf("%s",deleteName);
deleteWab(startPtr,deleteName);
}
break;
case '5':
while(controlWab()){
printf("\n修改姓名\n#>");
scanf("%s",modifyName);
modifyWab(startPtr,modifyName);
}
break;
default:
puts("\n\n输入选项错误,请重新输入\n");
break;
}

menuWab();
menu=getch();
}
if((fileWab=fopen("wab.dat","wb"))==NULL)
return 0;
while(startPtr!=NULL){
fwrite(startPtr,sizeof(DATAWAB),1,fileWab);
startPtr=startPtr->nextPtr;
}
puts("\n\n\t\t谢谢使用个人通讯录1.0,再见\n");
}

void menuWab(void) /*菜单函数*/
{
puts("\t\t\t主菜单");
puts("**********************************************************");
puts("**********************************************************");
puts("**\t<<-1->>所有记录\t\t<<-2->>查找记录\t\t**");
puts("**\t<<-3->>增加记录\t\t<<-4->>删除记录\t\t**");
puts("**\t<<-5->>修改记录\t\t<<-6->>退出程序\t\t**");
puts("**********************************************************");
puts("**********************************************************");
puts("\n请选择 1-6");
printf("#>");
}

void insertWab(DATAWABPTR *tempPtr,char temp2Name[],char temp2Telephone[],
char temp2Mobile[],char temp2Address[],char temp2Unit[])
/*插入函数*/

{
DATAWABPTR newPtr;
newPtr=(DATAWABPTR)malloc(sizeof(DATAWAB));
strcpy(newPtr->name,temp2Name);
strcpy(newPtr->telephone,temp2Telephone);
strcpy(newPtr->mobile,temp2Mobile);
strcpy(newPtr->address,temp2Address);
strcpy(newPtr->unit,temp2Unit);

newPtr->nextPtr=*tempPtr;
*tempPtr=newPtr;
}

void printWab(DATAWABPTR printPtr) /*打印函数*/
{
if(!(test(printPtr))){
printf("\n%8s%16s%16s%16s%16s\n","姓名","电话","手机","住址","单位");

while(printPtr!=NULL){
printf("%8s%16s%16s%16s%16s\n",printPtr->name,printPtr->telephone,
printPtr->mobile,printPtr->address,printPtr->unit);
printPtr=printPtr->nextPtr;
}
}
}

void seekWab(DATAWABPTR seekPtr,char tempName[])

/*查找函数*/
{
if(!(test(seekPtr))){
while(seekPtr!=NULL){

if(!(strcmp(tempName,seekPtr->name))){
printone(seekPtr);
seekPtr=seekPtr->nextPtr;
}
else
seekPtr=seekPtr->nextPtr;
}
}
}

void deleteWab(DATAWABPTR deletePtr,char deleteName[])
/*删除函数*/
{
DATAWABPTR tempPtr,forePtr;
forePtr=deletePtr;
tempPtr=deletePtr->nextPtr;
while(tempPtr!=NULL){
if(!(strcmp(tempPtr->name,deleteName))){
forePtr->nextPtr=tempPtr->nextPtr;
free(tempPtr);
break;
}
else{
forePtr=tempPtr;
tempPtr=tempPtr->nextPtr;
}
}
}

void modifyWab(DATAWABPTR modifyPtr,char modifyName[])
/*修改函数*/
{
if(!(test(modifyPtr))){
while(modifyPtr!=NULL){
if(!(strcmp(modifyName,modifyPtr->name))){
printf("请输入新姓名:");
scanf("%s",modifyPtr->name);
printf("\n请输入新电话:");
scanf("%s",modifyPtr->telephone);
printf("\n请输入新手机:");
scanf("%s",modifyPtr->mobile);
printf("\n请输入新地址:");
scanf("%s",modifyPtr->address);
printf("\n请输入新单位:");
scanf("%s",modifyPtr->unit);
break;
}
else
modifyPtr=modifyPtr->nextPtr;
}
}
}

int test(DATAWABPTR testPtr)
{
if(testPtr==NULL)
puts("通讯录内没有任何记录");
else
return 0;
return 1;
}

void printone(DATAWABPTR printone)
{
printf("\n%8s%16s%16s%16s%16s\n","姓名","电话","手机","住址","单位");
printf("%8s",printone->name);
printf("%16s",printone->telephone);
printf("%16s",printone->mobile);
printf("%16s",printone->address);
printf("%16s\n",printone->unit);
}

int controlWab(void)
{
puts("继续执行请按 1");
if(getch()=='1')
return 1;
return 0;
}
回答者: 虑而后能得 - 助理 二级 2-19 11:36
我来评论>>
提问者对于答案的评价:感激不尽~~评价已经被关闭 目前有 1 个人评价

100% (1) 不好
0% (0)
相关内容
• 救命啊! 哪位高手能帮我用C语言编写一个通讯录管理的...
• 3110c 通讯录的问题
• 索爱510c的电话本备份?
• 6120C的电话本能不能通过什么方式转到6500C来
• 关于诺基亚7310c通讯录显示姓名的问题~~~
更多关于c语言编写通讯录管理程序的问题>>
查看同主题问题:高手 语言 通讯录 救命 管理 程序
其他回答 共 4 条
分少啊,没动力,谁会写啊
回答者: 229273121 - 见习魔法师 三级 2-19 10:16
本人的C++通讯录程序代码
#include<iostream>
#include<string>
#include<iomanip>
#include<list>
#include<fstream>
#include<algorithm>
#define SPACE "\t\t\t"
using namespace std;
struct Record{
string name;
string tel;
public:
friend ostream& operator<<(ostream& os,const Record *rec){
return os<<rec->name<<SPACE<<rec->tel<<endl;
};
friend istream& operator>>(istream& is,Record *rec){
is>>rec->name;

is>>rec->tel;
return is;
}
static bool comp(string patten,int type,Record *rec){
switch(type){
case 0: {return rec->name==patten;}break;
case 1: {return rec->tel==patten;}break;
}
return false;
}
static bool isvan(Record *rec){
return (rec->name==""&&rec->tel=="");
}
};
class RecordList:public list<Record*>
{
public:
friend ostream& operator<<(ostream& os,const RecordList &c_rl){
RecordList::const_iterator it=c_rl.begin();
while(it!=c_rl.end()){
os<<*it;
it++;
}
return os;
}
friend istream& operator>>(istream& is,RecordList &rl){
RecordList::const_iterator it;
while(!is.eof()){
Record *prec=new Record;
is>>prec;
if(Record::isvan(prec)) continue;
rl.list<Record*>::push_back(prec);
}
return is;
}
void clear();
iterator erase(iterator pos);
~RecordList(){
this->clear();
}
};
void RecordList::clear(){
RecordList::const_iterator it=this->begin();
while(it!=this->end()){
delete(*it);
it++;
}
this->list<Record*>::clear();
}
RecordList::iterator RecordList::erase(iterator pos){
delete(*pos);
return list<Record*>::erase(pos);
}
class AddressList{
protected:
RecordList recList;
public:
typedef RecordList::iterator Iterator;
//从通信录中寻找一个记录
virtual Iterator findRecord(string patten,int type,Iterator from);
virtual void addRecord(Record* rec);
virtual void removeRecord(Iterator it);
virtual void editRecord(Record* rec,Iterator it);
virtual void saveRecords(ostream& os);
virtual void loadRecords(istream& is);
virtual void addRecords(istream& is);
virtual ~AddressList();
const int size() const{return (int)recList.size();}
const void clear(){recList.clear();}
Iterator begin(){return recList.begin();}
Iterator end() {return recList.end();}
};
AddressList::Iterator AddressList::findRecord(string patten,int type,Iterator from){
Iterator it;
it=from;
while(it!=recList.end()){
if(Record::comp(patten,type,*it)){
return it;
}
it++;
}
return it;
}
void AddressList::addRecord(Record* rec){
recList.push_back(rec);
}
void AddressList::removeRecord(Iterator it){
recList.erase(it);
}
void AddressList::editRecord(Record* rec,Iterator it){
delete(*it);
*it=rec;
}

void AddressList::saveRecords(ostream& os){
os<<recList;
}
void AddressList::loadRecords(istream& is){
is>>recList;
}
void AddressList::addRecords(istream& is){
}
AddressList::~AddressList(){
recList.clear();
}
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 saveRecords();
//读取记录
virtual void loadRecords();
//结束程序
virtual void quit();
//清空当前记录信息
virtual void clear();
protected:
//菜单选择函数
char menuSelect();
//显示表头
void dispTable();
};
AddressBook::AddressBook(){
}
AddressBook::~AddressBook(){;}
char AddressBook::menuSelect(){
char a=0;
cin>>a;
if(a=='y'||a=='Y'){a='1';}
if(a=='n'||a=='N'){a='2';}
return a;
}
void AddressBook::start(){
cout << "\n\t***** 欢迎使用通讯录管理程序 *****";
handleMenu();
}
void AddressBook::handleMenu(){
cout << "\n\n\t\t\t-- 菜单管理 --\n\n";
cout << "\tA -- 添加人员纪录 (Add Record)\n"
<< "\tF -- 查询纪录 (Find Record)\n"
<< "\tD -- 显示纪录 (Display Records)\n"
<< "\tL -- 从文本或标准输入流中加载纪录 (Load Records)\n"
<< "\tC -- 清空当前记录信息\n"
<< "\tS -- 保存记录 (Save Records)\n"
<< "\tQ -- 结束程序 (QUIT)\n";
switch(menuSelect()){

case 'A':
case 'a':addRecord();break;
case 'F':
case 'f':queryRecord();break;
case 'D':
case 'd':displayRecords();break;
case 'L':
case 'l':loadRecords();break;
case 'C':
case 'c':clear();break;
case 'S':
case 's':saveRecords();break;
case 'Q':
case 'q':quit();break;
}
handleMenu();

}
void AddressBook::displayRecords(){
cout<<"姓名"<<SPACE<<"电话"<<endl;
AddressList::saveRecords(cout);
cout<<"一共找到"<<size()<<"个对象。"<<endl;
cout<<"1"<<SPACE<<"返回"<<endl;
cout<<"2"<<SPACE<<"修改"<<endl;
cout<<"3"<<SPACE<<"删除"<<endl;
switch(menuSelect()){
case '1':break;
case '2':{
if(!size()){
cout<<"记录为0,无法修改。"<<endl;
break;
}
cout<<"要修改第几个?"<<"1~"<<size()<<endl;
int i;
cin>>i;
if(i<1||i>size()){
break;
}
Record *prec=new Record;
cout<<"姓名:"<<'\n'<<"电话:"<<'\n';
cin>>prec;
Iterator it=recList.begin();
while(i!=1){
it++;
i--;
}
editRecord(prec,it);
}break;
case'3':{
if(!size()){
cout<<"记录为0,无法修改。"<<endl;
break;
}
cout<<"要删除第几个?"<<"1~"<<size()<<endl;
int i;
cin>>i;
if(i<1||i>size()){
break;
}
Iterator it=recList.begin();
while(i!=1){
it++;
i--;
}
removeRecord(it);
}break;
}
}
void AddressBook::addRecord(){
string name,tel;
cout << "\n输入名字: ";
cin >> name;
cout << "输入电话: ";
cin >> tel;
Record* temp=new Record;
temp->name=name;
temp->tel=tel;
AddressList::addRecord(temp);
cout<<"是否继续(Y/N)"<<endl;
switch(menuSelect()){
case '1':addRecord();break;
case '2':break;
}
}
void AddressBook::queryRecord(){
cout<<"1"<<SPACE<<"按姓名查找"<<endl;
cout<<"2"<<SPACE<<"按电话查找"<<endl;
int type=-1;
string patten;
switch(menuSelect()){
case '1':{
type=0;
cout<<"请输入姓名"<<endl;
cin>>patten;
}break;
case '2':{
type=1;
cout<<"请输入电话号码"<<endl;
cin>>patten;
}break;
}
Iterator it=begin();
list<Iterator> li;
cout<<"姓名"<<SPACE<<"电话"<<endl;
while((it=findRecord(patten,type,it))!=end()){
cout<<*it;
li.push_back(it);
it++;
}
cout<<"一共找到"<<li.size()<<"个对象。"<<endl;
cout<<"1"<<SPACE<<"返回"<<endl;
cout<<"2"<<SPACE<<"修改"<<endl;
cout<<"3"<<SPACE<<"删除"<<endl;
switch(menuSelect()){
case'1':break;
case'2':{
if(!li.size()){
cout<<"记录为0,无法修改。"<<endl;
break;
}
cout<<"要修改第几个?"<<"1~"<<li.size()<<endl;
int i;
cin>>i;
Record *prec=new Record;
cout<<"姓名:"<<'\n'<<"电话:"<<'\n';
cin>>prec;
list<Iterator>::const_iterator it=li.begin();
while(i!=1){
it++;
i--;
}
editRecord(prec,*it);
}break;
case'3':{
if(!li.size()){
cout<<"记录为0,无法修改。"<<endl;
break;
}
cout<<"要删除第几个?"<<"1~"<<li.size()<<endl;
int i;
cin>>i;
list<Iterator>::const_iterator it=li.begin();
while(i!=1){
it++;
i--;
}
removeRecord(*it);
}break;
}
}
void AddressBook::saveRecords(){
cout<<"1"<<SPACE<<"使用默认文件名。"<<endl;
cout<<"2"<<SPACE<<"使用自定义文件名。"<<endl;
cout<<"3"<<SPACE<<"返回"<<endl;
switch(menuSelect()){
case '1':{
ofstream file("default",ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '2':{
cout<<"请输入您定义的文件名:"<<endl;
string fname;
cin>>fname;
ofstream file(fname.c_str(),ios::app);
AddressList::saveRecords(file);
file.close();
}break;
case '3':break;
}

}
void AddressBook::loadRecords(){
cout<<"1"<<SPACE<<"使用默认文件。"<<endl;
cout<<"2"<<SPACE<<"使用自定义文件。"<<endl;
cout<<"3"<<SPACE<<"返回"<<endl;
switch(menuSelect()){
case '1':{
cout<<"1"<<SPACE<<"覆盖当前内容"<<endl;
cout<<"2"<<SPACE<<"追加到当前文件"<<endl;
switch(menuSelect()){
case '1':
AddressList::clear();break;
case '2':break;
}

ifstream file("default");
AddressList::loadRecords(file);
file.close();
}break;
case '2':{
cout<<"请输入文件名:"<<endl;
string fname;
cin>>fname;
ifstream file(fname.c_str());
AddressList::loadRecords(file);
file.close();
}break;
case '3':break;
}
}
void AddressBook::clear(){
cout<<"是否要清除内存中所有内容?(Y/N)"<<endl;
switch(menuSelect()){
case '1':AddressList::clear();break;
case '2':break;
}
}
void AddressBook::quit(){
cout<<"是否要保存文件?(Y/N)"<<endl;
switch(menuSelect()){
case'1':saveRecords();break;
case'2':break;
}
exit(0);
}

int main(int argc, char *argv[])
{
AddressBook a;
a.start();
system("PAUSE");
return EXIT_SUCCESS;

}

阅读全文

与c语言将通讯录文件导入管理系统相关的资料

热点内容
wps表格怎样取消密码设置密码 浏览:135
老黄历哪个网站好 浏览:316
rar是文件怎么打开 浏览:395
java开发app的架构 浏览:865
ppt怎么放音频文件 浏览:874
app被骗钱怎么找回 浏览:813
型动app怎么做教练 浏览:364
雪佛兰车载app怎么样 浏览:133
637的微信版本如何建百人群 浏览:41
外梯形螺纹怎么编程 浏览:986
vs2010vb工具箱 浏览:938
win10重装多少钱 浏览:662
数据库系统由什么什么等构成 浏览:413
java父子关系生成树 浏览:936
达梦数据库oci编程需要哪些库 浏览:64
手机数据恢复精灵导出什么意思 浏览:930
js字体红色 浏览:942
win10文件被占用 浏览:995
压缩文件格式转换 浏览:651
数控编程需要掌握哪些指令 浏览:427

友情链接