剽窃代码即可。。
已经按照你的要求做了一个,VC6上运行确认了:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
typedef struct PersonalInfo
{
char name[50]
char address[30]
char telno[30]
char postcode[30]
struct PersonalInfo *next
}INFO
INFO *head
void Initiate()
void Menu()
void Create()//的功能是:创建新的通讯录。
void Add()// 在通讯录的末尾,写入新的信息,并返回选单
void Find()//查找记录
void Alter()//修改记录如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
void Delete()//删除某人的信息,如果未找到要删的人,提示通讯录中没有此人的信息,并返回选单。
void List()//的功能是:显示通讯录中的所有记录。
//初始化
void Initiate()
{
if((head=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1)
head->next=NULL
}
//显示菜单
void Menu()
{
printf("**************欢迎使用通讯录系统**************")
printf("\n")
printf("\n")
printf(" 1.创建通讯录。\n")
printf(" 2.插入信息。\n")
printf(" 3.查询记录\n")
printf(" 4.修改记录\n")
printf(" 5.删除记录!\n")
printf(" 6.显示所有记录\n")
printf(" 0.退出通讯录\n")
printf(" 请输入0~6 \n")
}
//创建通讯录
void Create()
{
INFO *p1[100],*p2
int m,i
printf("请输入创建个数:")
scanf("%d",&m)
for(i=1i<=mi++)
{
p1[i]=(INFO *)malloc(sizeof(INFO))
printf("请输入第%d条信息!\n",i)
printf("姓名:\n")
scanf("%s",&p1[i]->name)
printf("地址:\n")
scanf("%s",&p1[i]->address)
printf("电话:\n")
scanf("%s",&p1[i]->telno)
printf("邮编:\n")
scanf("%s",&p1[i]->postcode)
p1[i]->next=NULL
if(head->next==NULL)
head->next=p1[i]
else
{
for(p2=headp2->next!=NULLp2=p2->next) //找到结点尾
p2->next=p1[i]
}
}
printf("信息已添加!\n")
return //保存到链表
}
//添加通讯录信息
void Add()
{
INFO *p,*q
if((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1)
printf("请输入要添加的信息!\n")
printf("姓名:\n") //添加信息
scanf("%s",&q->name)
printf("性别:\n")
scanf("%s",q->address)
printf("电话:\n")
scanf("%s",q->telno)
printf("城市:\n")
scanf("%s",q->postcode)
for(p=headp->next!=NULLp=p->next)
p->next=q
q->next=NULL
printf("此信息已添加!")
return
}
//查找通讯录信息
void Find()
{
INFO *p
char name[50]
if(head->next==NULL)
{
printf("此通讯录为空!\n")
return
}
printf("请输入要查找的姓名:\n")
scanf("%s",&name)
for(p=head->nextp!=NULLp=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("姓名\t地址\t邮编\t电话\n")
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)
}
else if(p->next==NULL)
printf("无此信息!\n")
}
}
//修改通讯录信息
void Alter()
{
char name[50] //先查找 后删除
INFO *p, *p1
if (head->next == NULL)
{
printf("此通讯录为空!\n")
return
}
printf("请输入要修改的姓名:\n")
scanf("%s",name)
for(p=head->nextp!=NULLp=p->next)
{
if(strcmp(p->name,name)==0)
break
else if(p->next==NULL)
{
printf("无此信息!\n")
return
}
}
p1=(INFO *)malloc(sizeof(INFO))
printf("姓名:\n") //添加信息
scanf("%s",p1->name)
strcpy(p->name,p1->name)
printf("性别:\n")
scanf("%s",p1->address)
strcpy(p->address,p1->address)
printf("电话:\n")
scanf("%s",p1->telno)
strcpy(p->telno,p1->telno)
printf("城市:\n")
scanf("%s",p1->postcode)
strcpy(p->postcode,p1->postcode)
printf("此信息已修改!\n")
//显示修改的信息
printf("姓名\t地址\t邮编\t电话\n")
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)
free(p1)
}
//删除通讯录信息
void Delete()
{
char name[50] //先查找 后删除
INFO *p = head->next, *p1 =head->next,*p2
if (head->next == NULL)
{
printf("此通讯录为空!\n")
return
}
printf("请输入要删除的姓名:\n")
scanf(" %s",name)
while ((strcmp(p->name,name)!=0 )&& p->next != NULL)
{
p1=p
p =p->next
}
if (strcmp(name, p->name)==0) //输出删除信息
{
if (p == head->next&&p->next!=NULL)
head->next = p->next
else if(p==head->next&&p->next==NULL)
{
head->next=p->next
printf("信息已删除,先此通讯录为空!!\n")
return
}
else
p1->next = p->next
}
else
{
printf("此信息不存在!!!\n")
return
}
printf("此信息已删除!")
printf("姓名\t地址\t邮编\t电话\n")
for(p2=head->nextp2!=NULLp2=p2->next)
printf("%s\t%s\t%s\t%s\n",p2->name,p2->address,p2->postcode,p2->telno)
}
//显示所有记录
void List()
{
INFO *p
if(head->next==NULL)
{
printf("此通讯录中无记录!\n")
return
}
printf("姓名\t地址\t邮编\t电话\n")
for(p=head->nextp!=NULLp=p->next)
printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)
}
void main()
{
int choice
char yes_no
system("color a")
Initiate()
do
{
Menu()
printf("请选择0-6的数字\n")
scanf("%d",&choice)
printf("\n")
switch(choice)
{
case 1:Create()
break
case 2:Add()
break
case 3:Find()
break
case 4:Alter()
break
case 5:Delete()
break
case 6:List()
break
case 0:
printf("************感谢您的使用************\n")
exit(0)
break
default:
printf("输入有误!请重新输入\n")
break
}
printf("是否继续 Y or N? \n")
do
{
scanf("%c",&yes_no)
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')
}while(yes_no=='Y'||yes_no=='y')
}
建立同学通讯录#include"stdio.h"
#define NUM 3
struct mem
{
char name[20]
char phone[10]
}
main()
{
struct mem man[NUM]
int i
for(i=0i<NUMi++)
{
printf("input name:\n")
gets(man[i].name)
printf("input phone:\n")
gets(man[i].phone)
}
printf("name\t\t\tphone\n\n")
for(i=0i<NUMi++)
printf("%s\t\t\t%s\n",man[i].name,man[i].phone)
}
#define N 100#define SIZE 30
#include <stdio.h>
#include <string.h>
#include <conio.h>
struct student{
char num[SIZE]
char name[SIZE]
char tel[SIZE]
}
/*函数声明*/
void myprint()/*显示菜单*/
int mycreat(struct student*p,int n)/*输入通讯录*/void mydisplay(struct student*p,int n)/*显示通讯录*/void mysearch(struct student*p,int n)/*查找*/
void mymodify(struct student*p,int n)/*修改通讯录*/int myadd(struct student*p,int n)/*增加通讯录*/int mydelete(struct student*p,int n)/*删除*/void mysort(struct student*p,int n)/*排序*/
void sch_num(struct student*p,int n)/*按学号查找*/void sch_name(struct student*p,int n)/*按姓名查找*/
int loadinfo(struct student*p,int n)/*载入通讯录信息*/int saveinfo(struct student*p,int n)/*保存通讯录信息*/void main(){
/*文件定义*/char choose,yes_no
struct studentrecord[N]/*存放通讯录信息,共100条*/int total=0,flag/*通讯录总数*/
total=loadinfo(record,N)/*从文件读取记录信息,不超过100条*/do{
myprint()/*显示菜单*/
printf("请选择:")do{
choose=getchar()}
while(choose<'0'||choose>'9')switch(choose){
case'1':
total=mycreat(record,total)breakcase'2':
mydisplay(record,total)breakcase'3':
mysearch(record,total)breakcase'4':
mymodify(record,total)breakcase'5':
total=myadd(record,total)breakcase'6':
total=mydelete(record,total)breakcase'7':
mysort(record,total)breakcase'8':
flag=saveinfo(record,total)if(flag==1)
printf("\n保存成功!\n")else
printf("\n保存失败!\n")breakcase'0':
breakdefault:
printf("\n%c为非法选项!\n",choose)}
if(choose=='0')breakprintf("\n要继续选择吗(Y/N)?")do{
yes_no=getchar()}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')}
while(yes_no!='Y'||yes_no!='y')}
void myprint()/*显示菜单信息*/{
printf("\n\n\n\n\n")printf("\n")printf("请输入选项编号(0--7)\n")printf("1---批量输入通讯录\n")printf("2---显示通讯录\n")printf("3---查询通讯录\n")printf("4---修改通讯录\n")printf("5---添加通讯录\n")printf("6---删除通讯录\n")printf("7---排序通讯录\n")printf("8---保存通讯录\n")printf("0---退出\n")printf("\n")
}
int mycreat(struct student*p,int n)/*批量输入学生信息*/{
int i=0int m
printf("添加前的记录,共有<%d>个:\n",n)printf("\n记录号学号姓名电话号码\n")
i=0
while((i<n)&&(strcmp(p->num,"")!=0)){
printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)i++p++}
printf("\n请输入要输入的学生人数(<%d):",N-n)
scanf("%d",&m)i=0
while(i<m){
printf("\n")
printf("请输入第%d个记录:\n",i+1)printf("学号:")do{
gets(p->num)}
while(strcmp(p->num,"")==0)printf("姓名:")gets(p->name)
printf("电话号码:")gets(p->tel)p++i++}
return m+n}
void mydisplay(struct student*p,int n)/*显示学生信息*/{
/*clrscr()*/int i=0
printf("\n记录号学号姓名电话号码\n")while(i<n){
printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)p++i++}}
void mymodify(struct student*p,int n)/*修改学生信息*/{
int i
char nam[10]mydisplay(p,n)
printf("\n请输入要修改记录的姓名:")gets(nam)
for(i=0i<ni++,p++)
if(strcmp(nam,p->name)==0)breakif(i==n)
printf("无此人!\n")else{
printf("请输入正确的学号:")do{
gets(p->num)}
while(strcmp(p->num,"")==0)printf("请输入正确的姓名:")gets(p->name)
printf("请输入正确的电话号码:")gets(p->tel)}
}
void mysearch(struct student*p,int n)/*查找指定学生*/{
char c
mydisplay(p,n)
printf("\n按学号查询(h),还是按姓名查询(m)?")c=getchar()
if(c=='h'||c=='H')
sch_num(p,n)else if(c=='m'||c=='M')
sch_name(p,n)else
printf("\n非法字符!\n")}
void sch_num(struct student*p,int n)/*按学号查询*/{
int i,flag=0char nm[10]
printf("\n请输入要查询记录的学号:")gets(nm)
for(i=0i<ni++)
if(strcmp(nm,p[i].num)==0)
{
printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1
}
if(flag==0)
printf("无此人!\n")}
void sch_name(struct student*p,int n)/*按姓名查询*/{
int i,flag=0char nam[10]
printf("\n请输入要查询记录的姓名:")gets(nam)
for(i=0i<ni++)
if(strcmp(nam,p[i].name)==0){
printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1}
if(flag==0)
printf("无此人!\n")
}
int myadd(struct student*p,int n)/*增加学生信息*/{
int i=0char c
struct studentt,*q
printf("添加前的记录:\n")printf("\n学号姓名电话号码\n")i=0q=p
/*显示原有记录信息*/while(i<n){
printf("%15s%15s%15s\n",q->num,q->name,q->tel)i++q++}do{
printf("请输入新记录的学号:\n")do{
gets(t.num)
}
while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)
printf("请输入新记录的电话号码:")gets(t.tel)
for(i=0i<ni++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}
/*找到最后,没有重复*/if(i==n){
*(p+i)=t
printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)
printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}
}
while(c=='y'||c=='Y')return n+1}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x
char c,nm[10],nam[10]
printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:")gets(nm)
for(x=0x<nx++)
{
gets(t.num)
}
while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)
printf("请输入新记录的电话号码:")gets(t.tel)
for(i=0i<ni++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}
/*找到最后,没有重复*/if(i==n){
*(p+i)=t
printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)
printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}
}
while(c=='y'||c=='Y')return n+1}
int mydelete(struct student*p,int n)/*删除学生信息*/{
int i,x
char c,nm[10],nam[10]
printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()
if(c=='h'||c=='H'){
printf("\n请输入要删除记录的学号:")gets(nm)
for(x=0x<nx++)
int j,i,kchar c1,c2
struct studenttemp
printf("\n排序前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("\n按学号排序(h),还是按姓名排序(m)?")c1=getchar()
if(c1=='h'||c1=='H'){
printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()/*升序*/
if(c2=='s'||c2=='S'){
for(i=0i<n-1i++){
k=i
for(j=ij<nj++)
if(strcmp(p[k].num,p[j].num)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("\n排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0i<n-1i++){
k=i
for(j=0j<nj++)
if(strcmp(p[k].num,p[j].num)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else printf("\n非法字符\n")}
else if(c1=='m'||c1=='M')/*按姓名排序*/{
printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()
if(c2=='s'||c2=='S'){
for(i=0i<n-1i++){
k=i
for(j=0j<nj++)
if(strcmp(p[k].name,p[j].name)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp}
printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)
}
else if(c2=='j'||c2=='J')/*降序*/{
for(i=0i<n-1i++){
k=i
for(j=ij<nj++)
if(strcmp(p[k].name,p[j].name)<0)
k=j
temp=p[k]p[k]=p[i]p[i]=temp
}
printf("排序后的记录:\n")printf("\n学号
姓名电话号码\n")
for(i=0i<ni++)
printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}
else printf("\n非法字符!\n")}
else printf("\n非法字符!\n")}
int loadinfo(struct student*p,int n)/*载入通讯录信息*/{
FILE*fpint i,all=0
char filename[30]="tongxunlu.txt"fp=fopen(filename,"r")if(fp==NULL){
printf("\n***不能打开文件%s,或%s文件不存在,创建一个新文件!
",filename,filename)*/
fp=fopen(filename,"w")}
fscanf(fp,"%d\n",&all)
if(all>N)/*读取记录总数*/{
printf("文件记录数太多,不能读取")return 0}
for(i=0i<alli++)/*读取记录信息*/{
fscanf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)}
fclose(fp)/*关闭文件*/return all}
int saveinfo(struct student*p,int n){
FILE*fpint i,all=0
char filename[30]="txl.dat"/*文件可以用记事本打开*/fp=fopen(filename,"w")if(fp==NULL){
printf("\n***不能建立或打开文件%s!***",filename)return 0}
fprintf(fp,"%d\n",n)for(i=0i<ni++)
fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)fclose(fp)return 1}
抄来的