程序设计基础课程设计指导书(6)

2020-06-05 10:41

}

printf(\ /*读入家庭地址*/ scanf(\

printf(\ /*读入联系电话*/ scanf(\

录入完毕后典型的一份信息如下所示: NO: 1 Name: 张三 Sex: m

Birthday(y/m/d): 1980 5 12 Postnum: 100034

Address: Beijing University Tele: (010)62005200

3.电子通讯录记录的维护(插入与删除)

在实际使用中,数据资料输入后,还需要不断的更新和维护操作,最常见的是数 据的插入与删除。作为顺序表来说,如何在插入与删除数据资料后仍然能保持 原有数据之间的关系,是需要考虑的关键问题。 电子通讯录的插入算法如下:

printf(\No:\ /*录入插入位置*/ scanf(\

for(j=i+1;j>k;j--) /*插入位置后的元素顺序后移*/

{ strcpy(friends[j].name,friends[j-1].name); /*交换元素内容*/ friends[j].sex=friends[j+1].sex;

friends[j].birth.year=friends[j-1].birth.year; friends[j].birth.month=friends[j-1].birth.month; friends[j].birth.day=friends[j-1].birth.day;

strcpy(friends[j].addr.post_num,friends[j-1].addr.post_num); strcpy(friends[j].addr.addr,friends[j-1].addr.addr); strcpy(friends[j].telephone,friends[j-1].telephone); }

Data_Input(k); /*插入位置上填入待插入元素*/ i++; /*总元素个数增1*/ 删除算法如下:

printf(\No:\ /*读入删 除位置*/ scanf(\

for(j=k;j

strcpy(frinds[j].name,frinds[j+1].name); friends[j].sex=frinds[j+1].sex;

friends[j].birth.year=friends[j+1].birth.year; friends[j].birth.month=friends[j+1].birth.month; frinds[j].birth.day=friends[j+1].birth.day;

20

} i--;

strcpy(friends[j].addr.post_num,friends[j+1].addr.post_num); strcpy(friends[j].addr.addr,friends[j+1].addr.addr); strcpy(friends[j].telephone,friends[j+1].telephone); /*元素总数减1*/

函数search的代码如下: search() {

printf(\input name:\ /*提示输入要查询的姓名*/ gets(search_name); for(j=1;j<=i;j++)

{ if(strcmp(search_name,friends[j].name)==0) /*比较二个串*/ { Data_Show(j); /*查询成功,打印记录,结束循环*/ break; } }

if(j>1) /*查询失败,给出提示信息*/ printf(\No such records\}

文件存盘代码如下 FILE *fp;

void Data_Save() {

int j;

fp=fopen(\ /*c以可写方式打开或创建文件friend.txt*/ for(j=1;j<=i;j++)

fwrite(&friends[j],sizeof(struct friend),1,fp); fclose(fp); }

处理有关的文件操作,最容易忽视的就是关闭文件的操作..如果不及时关闭,容易造成 文件内容的丢失,或者占用大量的内存,导至程序的执行速度下降。

从文件friend.txt读取记录的代码如下: void Data_Load() {

int j; long k;

fp=fopen(\ /*打开文件friend.txt*/ if(fp!=NULL)

{ for(i=1;i<50;i++)

{ if(j=fgetc(fp)==EOF) /*判断是否到了文件尾*/ return; k=i-1;

21

fseek(fp,k*sizeof(struct friend),SEEK_SET);

fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读一条记录*/ } }

else /*如果文件不存在*/ { fp=fopen(friend.txt\ i=1; } }

六、【总体设计】

在前面五个步聚的基础上开始进行程序主函数的设计。主函数首先调用初始化函数

Data_Load从已有文件friend.txt读取记录,如果是第一次使用,那么该文件不存在就创建一个新文件,接下来程序进入一个无限循环,首先用一系列printf语句打印出各功能的选择菜单,并提示按下数字键调用相应的功能。这里使用了switch分支结构来处理按键消息,这是一种典型的用法,当选择了‘quit''''菜单后,程序给出是否存盘的提示。

/*---------全部源代码如下-------------------*/ #include #include #include #include #include

struct addr /*通讯地址结构定义*/ { char post_num[10]; /*邮编*/

char addr[40]; /*家庭地址*/ };

struct birth /*出生年月结构定义*/ { int year; /*年份*/ int month; /*月份*/ int day; /*日期*/ };

struct friend1 /*电子通讯录结构定义*/ { int number; /*序号*/ char name[20]; /*姓名*/

char sex; /*性别*/ struct birth birth; /*出生年月*/ struct addr addr; /*通信地址*/ char telephone[13]; /*联系电话*/ }friends[50]; FILE *fp; int i;

22

void Data_Load() { int j; long k;

fp=fopen(\ /*打开文件friend.txt*/ if(fp!=NULL)

{ for(i=1;i<50;i++) { j=fgetc(fp);

if(j==EOF) /*判断是否到了文件尾*/ return; k=i-1;

fseek(fp,k*sizeof(struct friend1),SEEK_SET);

fread(&friends[i],sizeof(struct friend1),1,fp);/*从文件中读取一条记录*/

} } else

{ fp=fopen(\ i=1; } }

void Data_Show(int j) /*打印记录的详细资料*/ {

printf(\

printf(\.birth.month,friends[j].birth.day);

printf(\ printf(\ printf(\} void {

Data_Input(int j) /*记录插入函数*/

fflush(stdin);

friends[j].number=j;

printf(\%d record\

printf(\ /*读入姓名*/ scanf(\ fflush(stdin);

printf(\ /*读入性别*/ scanf(\

printf(\ /*读入出生年月*/ printf(\

scanf(\ printf(\

23

}

scanf(\printf(\

scanf(\

printf(\ /*读入邮编*/ scanf(\

printf(\ /*读入家庭地址*/ scanf(\

printf(\ /*读入联系电话*/ scanf(\

void { } void {

Data_Save()

int j;

fp=fopen(\for(j=1;j<=i;j++)

{ fwrite(&friends[j],sizeof(struct friend1),1,fp); }

main()

int j,k; char ch;

char *search_name; clrscr(); Data_Load(); i--; do

{ printf(\choose:\ printf(\ printf(\ printf(\ printf(\ printf(\

printf(\and Exit\ printf(\ printf(\

printf(\ ch=getche(); switch(ch)

{ case '1': j=1; /*显示通讯录中的所有记录*/ while(getch()!=0x1b&&j<=i) Data_Show(j++); if(j>i) printf(\of e_note\\n\ break;

24


程序设计基础课程设计指导书(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学思品学习评价存在的问题及对策

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: