数据结构课程设计
时间: 1ms 内存:128M
描述:
输入:
输出:
示例输入:
示例输出:
提示:
参考答案(内存最优[0]):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct txl{
char name[20];
char tel[20];
char add[20];
}pop;
typedef struct list{
pop data;
struct list *next;
}List;
void chakan() //查看所有通讯人
{
FILE *fp;
char ch[100];
int i=0;
if((fp=fopen("tongxunlu.txt","rb"))==NULL)
{
printf(" *******************\n");
printf(" 通讯录不存在!!!\n");
printf(" 请添加联系人!\n");
printf(" *******************\n");
}
else{
rewind(fp);
while(fgets(ch,100,fp)!=NULL)
{
if(i==0)
{
printf(" 所有通讯人\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
i++;
switch(i%3)
{
case 1:{
printf("姓名:\n");
break;
}
case 2:{
printf("电话:\n");
break;
}
case 0:{
printf("地址:\n");
break;
}
}
printf("%s",ch);
if(i%3==0) printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
}
}
void zengjia() //增加通讯人
{
FILE *fp;
pop *stu;
stu=(pop*)malloc(sizeof(pop));
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
printf("通讯录不存在!!!\n");
else{
printf(" *******************\n");
printf(" 请输入姓名:\n");
printf(" *******************\n");
scanf("%s",stu->name);
printf(" *******************\n");
printf(" 请输入电话:\n");
printf(" *******************\n");
scanf("%s",stu->tel);
printf(" *******************\n");
printf(" 请输入地址:\n");
printf(" *******************\n");
scanf("%s",stu->add);
fprintf(fp,"%s\n",stu->name);
fprintf(fp,"%s\n",stu->tel);
fprintf(fp,"%s\n",stu->add);
printf(" ***********************************************\n");
printf(" 已成功存入!!!\n");
printf(" ***********************************************\n\n\n");
}
fclose(fp);
}
void shuchu(FILE *fp,int n,char a[],char s) //查找删除联系人
{
List *stu,*p,*r,*x;
char ch[100];
int i=0,l=0,j=1,k=0;
stu=(List*)malloc(sizeof(List));
r=(List*)malloc(sizeof(List));
r=stu;
x=(List*)malloc(sizeof(List));
p=(List*)malloc(sizeof(List));
while((fgets(ch,100,fp))!=NULL) //所有通讯人存入数组
{
i++;
ch[strlen(ch)-1]='\0';
switch(i%3)
{
case 1:{
strcpy(p->data.name,ch);
break;
}
case 2:{
strcpy(p->data.tel,ch);
break;
}
case 0:{
strcpy(p->data.add,ch);
r->next=p;
r=p;
p=(List*)malloc(sizeof(List));
break;
}
}
}
r->next=NULL;
p=r;
fclose(fp);
p=(List*)malloc(sizeof(List));
p=stu->next;
while(p!=NULL) //查找联系人
{
switch(n)
{
case 1:{
if(strcmp(a,p->data.name)==0){
l=1;x=p;k=1;
}
break;
}
case 2:{
if(strcmp(a,p->data.tel)==0){
l=1;x=p;k=1;
}
break;
}
case 0:{
if(strcmp(a,p->data.add)==0){
l=1;x=p;k=1;
}
break;
}
}
p=p->next;
if(l==1){
printf("\n\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("姓名:\n");
printf("%s\n",x->data.name);
printf("电话:\n");
printf("%s\n",x->data.tel);
printf("地址:\n");
printf("%s\n",x->data.add);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
l=0;
}
}
if(k==0){
printf(" ******************\n");
printf(" 通讯人不存在!!!\n");
printf(" ******************\n\n");
}
if(s=='y'&&l==1) //判断是否进行删除操作
{
fp=fopen("tongxunlu.txt","w");
p=stu->next;
while(p!=NULL)
{
if(p!=x)
{
fprintf(fp,"%s\n",p->data.name);
fprintf(fp,"%s\n",p->data.tel);
fprintf(fp,"%s\n",p->data.add);
}
p=p->next;
}
printf(" ***********************************************\n");
printf(" 已成功删除!!!\n");
printf(" ***********************************************\n");
}
fclose(fp);
}
void chazhaoshanchu() //查找删除联系人
{
FILE *fp;
pop *stu;
char a[20],s;
int n,i=0;
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
{
printf(" ******************\n");
printf(" 通讯录不存在!!!\n");
printf(" ******************\n");
}
stu=(pop*)malloc(sizeof(pop));
stop:printf(" ************************************************************\n");
printf(" * *\n");
printf(" * 1.按姓名查找 2.按电话查找 *\n");
printf(" * *\n");
printf(" * 3.按地址查找 *\n");
printf(" * *\n");
printf(" ************************************************************\n");
printf(" *******************\n");
printf(" 请选择:\n");
printf(" *******************\n");
scanf("%d",&n);
if(n!=1&&n!=2&&n!=3) {
printf(" ***************************\n");
printf(" 输入错误请重新输入!!!\n");
printf(" ***************************\n");
goto stop;}
printf(" *************************\n");
printf(" 是否要进行删除操作?(y/n):\n");
printf(" *************************\n");
getchar();
scanf("%c",&s);
switch(n)
{
case 1:{
printf(" ******************\n");
printf(" 请输入姓名:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,1,a,s);
break;
}
case 2:{
printf(" ******************\n");
printf(" 请输入电话:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,2,a,s);
break;
}
case 3:{
printf(" ******************\n");
printf(" 请输入地址:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,0,a,s);
break;
}
}
}
int main() //主函数
{
int n;
printf("\n\n");
stop:printf(" ******************欢迎使用通讯录管理系统********************\n");
printf(" * *\n");
printf(" * 1.查看所有信息 2.增加通讯人 *\n");
printf(" * *\n");
printf(" * 3.查找删除通讯人 *\n");
printf(" * *\n");
printf(" * 4.退出 *\n");
printf(" * *\n");
printf(" ************************************************************\n");
printf(" *******************\n");
printf(" 请选择:\n");
printf(" *******************\n");
scanf("%d",&n);
switch(n){
case 1:{
chakan();
break;
}
case 2:{
zengjia();
break;
}
case 3:{
chazhaoshanchu();
break;
}
case 4:{
printf("\n\n");
printf(" **************************谢谢使用************************\n");
exit(1);
}
}
goto stop;
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct txl{
char name[20];
char tel[20];
char add[20];
}pop;
typedef struct list{
pop data;
struct list *next;
}List;
void chakan() //查看所有通讯人
{
FILE *fp;
char ch[100];
int i=0;
if((fp=fopen("tongxunlu.txt","rb"))==NULL)
{
printf(" *******************\n");
printf(" 通讯录不存在!!!\n");
printf(" 请添加联系人!\n");
printf(" *******************\n");
}
else{
rewind(fp);
while(fgets(ch,100,fp)!=NULL)
{
if(i==0)
{
printf(" 所有通讯人\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
i++;
switch(i%3)
{
case 1:{
printf("姓名:\n");
break;
}
case 2:{
printf("电话:\n");
break;
}
case 0:{
printf("地址:\n");
break;
}
}
printf("%s",ch);
if(i%3==0) printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
}
}
}
void zengjia() //增加通讯人
{
FILE *fp;
pop *stu;
stu=(pop*)malloc(sizeof(pop));
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
printf("通讯录不存在!!!\n");
else{
printf(" *******************\n");
printf(" 请输入姓名:\n");
printf(" *******************\n");
scanf("%s",stu->name);
printf(" *******************\n");
printf(" 请输入电话:\n");
printf(" *******************\n");
scanf("%s",stu->tel);
printf(" *******************\n");
printf(" 请输入地址:\n");
printf(" *******************\n");
scanf("%s",stu->add);
fprintf(fp,"%s\n",stu->name);
fprintf(fp,"%s\n",stu->tel);
fprintf(fp,"%s\n",stu->add);
printf(" ***********************************************\n");
printf(" 已成功存入!!!\n");
printf(" ***********************************************\n\n\n");
}
fclose(fp);
}
void shuchu(FILE *fp,int n,char a[],char s) //查找删除联系人
{
List *stu,*p,*r,*x;
char ch[100];
int i=0,l=0,j=1,k=0;
stu=(List*)malloc(sizeof(List));
r=(List*)malloc(sizeof(List));
r=stu;
x=(List*)malloc(sizeof(List));
p=(List*)malloc(sizeof(List));
while((fgets(ch,100,fp))!=NULL) //所有通讯人存入数组
{
i++;
ch[strlen(ch)-1]='\0';
switch(i%3)
{
case 1:{
strcpy(p->data.name,ch);
break;
}
case 2:{
strcpy(p->data.tel,ch);
break;
}
case 0:{
strcpy(p->data.add,ch);
r->next=p;
r=p;
p=(List*)malloc(sizeof(List));
break;
}
}
}
r->next=NULL;
p=r;
fclose(fp);
p=(List*)malloc(sizeof(List));
p=stu->next;
while(p!=NULL) //查找联系人
{
switch(n)
{
case 1:{
if(strcmp(a,p->data.name)==0){
l=1;x=p;k=1;
}
break;
}
case 2:{
if(strcmp(a,p->data.tel)==0){
l=1;x=p;k=1;
}
break;
}
case 0:{
if(strcmp(a,p->data.add)==0){
l=1;x=p;k=1;
}
break;
}
}
p=p->next;
if(l==1){
printf("\n\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("姓名:\n");
printf("%s\n",x->data.name);
printf("电话:\n");
printf("%s\n",x->data.tel);
printf("地址:\n");
printf("%s\n",x->data.add);
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
l=0;
}
}
if(k==0){
printf(" ******************\n");
printf(" 通讯人不存在!!!\n");
printf(" ******************\n\n");
}
if(s=='y'&&l==1) //判断是否进行删除操作
{
fp=fopen("tongxunlu.txt","w");
p=stu->next;
while(p!=NULL)
{
if(p!=x)
{
fprintf(fp,"%s\n",p->data.name);
fprintf(fp,"%s\n",p->data.tel);
fprintf(fp,"%s\n",p->data.add);
}
p=p->next;
}
printf(" ***********************************************\n");
printf(" 已成功删除!!!\n");
printf(" ***********************************************\n");
}
fclose(fp);
}
void chazhaoshanchu() //查找删除联系人
{
FILE *fp;
pop *stu;
char a[20],s;
int n,i=0;
if((fp=fopen("tongxunlu.txt","a+"))==NULL)
{
printf(" ******************\n");
printf(" 通讯录不存在!!!\n");
printf(" ******************\n");
}
stu=(pop*)malloc(sizeof(pop));
stop:printf(" ************************************************************\n");
printf(" * *\n");
printf(" * 1.按姓名查找 2.按电话查找 *\n");
printf(" * *\n");
printf(" * 3.按地址查找 *\n");
printf(" * *\n");
printf(" ************************************************************\n");
printf(" *******************\n");
printf(" 请选择:\n");
printf(" *******************\n");
scanf("%d",&n);
if(n!=1&&n!=2&&n!=3) {
printf(" ***************************\n");
printf(" 输入错误请重新输入!!!\n");
printf(" ***************************\n");
goto stop;}
printf(" *************************\n");
printf(" 是否要进行删除操作?(y/n):\n");
printf(" *************************\n");
getchar();
scanf("%c",&s);
switch(n)
{
case 1:{
printf(" ******************\n");
printf(" 请输入姓名:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,1,a,s);
break;
}
case 2:{
printf(" ******************\n");
printf(" 请输入电话:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,2,a,s);
break;
}
case 3:{
printf(" ******************\n");
printf(" 请输入地址:\n");
printf(" ******************\n");
scanf("%s",a);
shuchu(fp,0,a,s);
break;
}
}
}
int main() //主函数
{
int n;
printf("\n\n");
stop:printf(" ******************欢迎使用通讯录管理系统********************\n");
printf(" * *\n");
printf(" * 1.查看所有信息 2.增加通讯人 *\n");
printf(" * *\n");
printf(" * 3.查找删除通讯人 *\n");
printf(" * *\n");
printf(" * 4.退出 *\n");
printf(" * *\n");
printf(" ************************************************************\n");
printf(" *******************\n");
printf(" 请选择:\n");
printf(" *******************\n");
scanf("%d",&n);
switch(n){
case 1:{
chakan();
break;
}
case 2:{
zengjia();
break;
}
case 3:{
chazhaoshanchu();
break;
}
case 4:{
printf("\n\n");
printf(" **************************谢谢使用************************\n");
exit(1);
}
}
goto stop;
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。