数据结构问题(用c),学生通讯录(满意答案加50)

设计一个班级同学的通讯录,要求如下:通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。如果需要更多其他信息,请自行添... 设计一个班级同学的通讯录,要求如下:
 通讯录中每个同学的信息包含以下内容:学号(id)、姓名(name)、电话号码(tel)。如果需要更多其他信息,请自行添加。
 程序主菜单包含以下几个功能:
(1) 添加记录:通过键盘输入信息,添加一条通讯录记录。
(2) 删除记录:通过键盘输入学号,删除该学号的记录。
(3) 输出记录:输出通讯录全部记录。
(4) 按姓名查找:通过键盘输入姓名,输出该同学的所有信息。
(5) 保存记录:把通讯录中所有的记录保存到文件中。
(6) 清空记录:删除通讯录中的全部记录,并删除文件。
(7) 退出
提示:
 程序启动时应判断是否存在记录文件,如果存在,则读取每条记录到链表中。
 用户选择并完成主菜单某功能后,除了退出程序,应该返回主菜单。
 添加一条记录时,插入到链表的尾部。(尾插入法)
 查找、删除记录时,如果该记录不存在,则应该输出不存在的提示。
 添加记录、删除记录时不需要写文件。
 保存记录时,用覆盖写文件的方法。(或者先删除原文件,再保存全部记录信息)
 各个功能模块写成函数,由主函数调用。
展开
 我来答
百度网友c78508f
2011-10-06 · TA获得超过112个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:166万
展开全部
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
struct persion
{
char name[10];
char tep[20];
}student;
int main()
{
int chose;

struct persion *imf_p=&student;
void input(struct persion *p);
void output(struct persion *p);
void change(struct persion *p);
void del(struct persion *p);
void add(struct persion *p);
void end();
printf("\t\t\t\t\t通讯录\n\n");

do
{
printf("\n请正确选择操作:\n");
printf("\n1.全部重输\n2.查看\n3.修改\n4.删除\n5.添加\n6.退出\n\n请选择:");
scanf("%d",&chose);
switch (chose)
{
case 1:
input(imf_p);
break;
case 2:
output(imf_p);
break;
case 3:
change(imf_p);
break;
case 4:
del(imf_p);
break;
case 5:
add(imf_p);
break;
case 6:
end();
}
}
while (1);
}

void input(struct persion *p) //输入
{

FILE *fp;

fp=fopen("imformation.dat","wb");
printf("请输入名字和电话号码:\n");
printf("\n在姓名处输入<-1>结束!\n\n");
while (1)
{
printf("姓名:");
scanf("%s",p->name);
if (!strcmp(p->name,"-1"))break;
printf("电话号码:");
scanf("%s",p->tep);
fwrite(p,sizeof(struct persion),1,fp);
}

fclose(fp);
printf("输入完成!\n");
system("pause");
system("cls");
}

void output(struct persion *p) //查看
{

FILE*fp;
fp=fopen("imformation.dat","rb");
while (1)
{
fread(p,sizeof(struct persion),1,fp);
if (feof(fp))break;
printf("姓名:%s\n",p->name);
printf("电话:%s\n",p->tep);
}
fclose(fp);
system("pause");
system("cls");
}

void change(struct persion *p) //修改
{
int i=0;
char name_change[10],tep_change[20];
FILE*fp1,*fp2;
printf("请输入要修改的人名:");
scanf("%s",name_change);

fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (feof(fp1)==0)
{

fread(p,sizeof(struct persion),1,fp1);
if (!strcmp(p->name,name_change))
{
if (feof(fp1))break;
i=1;
printf("请输入新的号码:");
scanf("%s",tep_change);
strcpy(p->tep,tep_change);
}
if (feof(fp1)==0)
fwrite(p,sizeof(struct persion),1,fp2);
}
fclose(fp2);
fclose(fp1);
remove("imformation.dat");
rename("temp","imformation.dat");
if (i==1)
printf("已成功修改!\n");
if (i==0)
printf("没有搜索到文件!\n");
system("pause");
system("cls");
}

void del(struct persion *p) //删除
{
int i=0;
char name_change[10];
FILE*fp1,*fp2;
printf("请输入要删除的人名:");
scanf("%s",name_change);

fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (!feof(fp1))
{
fread(p,sizeof(struct persion),1,fp1);

if (!strcmp(p->name,name_change))
{
i=1;
continue;
}

if (!feof(fp1))
fwrite(p,sizeof(struct persion),1,fp2);
}
fclose(fp2);
fclose(fp1);
remove("imformation.dat");
rename("temp","imformation.dat");
if (i==1)
printf("已完成删除操作!\n");
if (i==0)
printf("没有搜索到名字!\n");
system("pause");
system("cls");
}

void add(struct persion *p) //增加
{
FILE *fp1,*fp2;

fp1=fopen("imformation.dat","rb+");
fp2=fopen("temp","wb+");
while (!feof(fp1))
{
fread(p,sizeof(struct persion),1,fp1);
if (!feof(fp1))
fwrite(p,sizeof(struct persion),1,fp2);
}

printf("请输入要增加的名字和电话号码:\n");
printf("\n在姓名处输入<-1>结束!\n\n");

while (1)
{
printf("姓名:");
scanf("%s",p->name);
if (!strcmp(p->name,"-1"))break;
printf("电话号码:");
scanf("%s",p->tep);
fwrite(p,sizeof(struct persion),1,fp2);
}

fclose(fp1);
fclose(fp2);
remove("imformation.dat");
rename("temp","imformation.dat");
printf("输入完成!\n");
system("pause");
system("cls");
}

void end()
{
exit(0);
}
追问
大哥,格式我就不奢求了,可学号都没写进去啊!
追答
特意留下来给你动动脑的。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
sxsy556
2011-10-08 · TA获得超过1284个赞
知道小有建树答主
回答量:1037
采纳率:0%
帮助的人:653万
展开全部
邮箱给我。给你发一个参考一下
追问
898819386@qq,com
追答
fale
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式