You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
txlglxt/课程设计源代码_通讯录管理系统_1807_184080...

247 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 50
struct TX{
char name[10];
char jiguan[20];
char d1[20],d2[20];
char ema[30];
}inf [SIZE];
void luru(){
system("cls"); //清屏
int i,n;
FILE *fp;
fp=fopen("date.dat","wb");//创建二进制文件进行写
//rewind(fp);
printf("\t\t\t\t\t\t请输入需要录入的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("\t\t\t\t\t\t请输入录入的第%d个人的姓名",i);
scanf("%s",inf[i].name);
printf("\t\t\t\t\t\t请输入籍贯:");
scanf("%s",inf[i].jiguan);
printf("\t\t\t\t\t\t请输入电话号码1");
scanf("%s",inf[i].d1);
printf("\t\t\t\t\t\t请输入电话号码2: ");
scanf("%s",inf[i].d2);
printf("\t\t\t\t\t\t请输入电子邮箱:");
scanf("%s",inf[i].ema);
printf("\n\n\n");
fwrite(&inf[i],sizeof(struct TX),1,fp);//将信息写入二进制文件
}if(n>=1)printf("\t\t\t\t\t\t信息录入完成!\n\n\n\n");
else
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
fclose(fp);//打开文件后要关闭文件,否则可能会造成数据的丢失
}
void addmore(){
system("cls"); //清屏
int i,n;
FILE *fp;
fp=fopen("date.dat","ab+");//打开二进制文件进行读,写,追加
//rewind(fp);
printf("\t\t\t\t\t\t请输入需要增加的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++){
printf("\t\t\t\t\t\t请输入增加的第%d个人的姓名",i);
scanf("%s",inf[i].name);
printf("\t\t\t\t\t\t请输入籍贯:");
scanf("%s",inf[i].jiguan);
printf("\t\t\t\t\t\t请输入电话号码1");
scanf("%s",inf[i].d1);
printf("\t\t\t\t\t\t请输入电话号码2: ");
scanf("%s",inf[i].d2);
printf("\t\t\t\t\t\t请输入电子邮箱:");
scanf("%s",inf[i].ema);
printf("\n\n\n");
fwrite(&inf[i],sizeof(struct TX),1,fp);//将信息写入二进制文件
}if(n>=1)printf("\t\t\t\t\t\t信息录入完成!\n\n\n\n");
else
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
fclose(fp);//打开文件后要关闭文件,否则可能会造成数据的丢失
}
void browse(){
system("cls");
FILE *fp;int i=0;
fp=fopen("date.dat","rb");//打开二进制文件进行只读;
printf("\t\t\t****************************************************************\n");
printf("\t\t\t***** 信息列表 *****\n");
printf("\t\t\t*****------------------------------------------------------*****\n");
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){//从二进制文件中读出信息。若fread(&inf[i],sizeof(struct TX),1,fp)=1代表文件到末尾。
printf("\t\t\t*****姓名:%s\n",inf[i].name);
printf("\t\t\t*****籍贯:%s\n",inf[i].jiguan);
printf("\t\t\t*****电话号码1%s\n",inf[i].d1);
printf("\t\t\t*****电话号码2%s\n",inf[i].d2);
printf("\t\t\t*****邮箱:%s\n\n\n\n",inf[i].ema);
}printf("\n\n\n");
fclose(fp);
}
void change(){
system("cls");
FILE *fp;
char a[20],b[20];
int i,flag=0,n,f=0;
fp=fopen("date.dat","rb");//打开二进制文件进行只读;
printf("\t\t\t\t\t\t请输入需要修改信息的姓名:");
scanf("%s",a);
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){
if(strcmp(a,inf[i].name)==0){//strcmp为比较函数若a=inf[i].name则返回0
printf("\t\t\t\t\t\t当前信息:\n");
printf("\t\t\t\t\t\t姓名:%s\n",inf[i].name);
printf("\t\t\t\t\t\t籍贯:%s\n",inf[i].jiguan);
printf("\t\t\t\t\t\t电话号码1%s\n",inf[i].d1);
printf("\t\t\t\t\t\t电话号码2%s\n",inf[i].d2);
printf("\t\t\t\t\t\t邮箱:%s\n\n\n",inf[i].ema);
flag=1;
break;
}
}fclose(fp);
fp=fopen("date.dat","rb+");
fseek(fp,i*sizeof(struct TX),0);//将文件指针移到需要改变数据的位置,否则会出错
if(flag==0)printf("\t\t\t\t\t\t输入错误!\n\n\n\n\n") ;
if(flag==1){
printf("\t\t\t请输入需要修改的信息1.姓名 2.籍贯 3.电话号码1 4.电话号码2 5.邮箱 6.不需要继续修改了\n");
printf("\t\t\t\t\t\t修改信息:");
for(;f==0;){
scanf("%d",&n);
switch(n){
case 1:printf("\t\t\t\t\t\t将姓名修改为:");
scanf("%s",inf[i].name);
printf("\n");break;
case 2:printf("\t\t\t\t\t\t将籍贯修改为:");
scanf("%s",inf[i].jiguan);printf("\n");break;
case 3:printf("\t\t\t\t\t\t将电话号码1修改为");
scanf("%s",inf[i].d1);printf("\n");break;
case 4:printf("\t\t\t\t\t\t将电话号码2修改为");
scanf("%s",inf[i].d2);printf("\n");break;
case 5:printf("\t\t\t\t\t\t将邮箱修改为:");
scanf("%s",inf[i].ema);printf("\n");break;
case 6:f=1;printf("\n\n\n");break;
}if(n!=6){
printf("\t\t\t\t\t\t还需修改的信息是:");
fwrite(&inf[i],sizeof(struct TX),1,fp);//将修改后的信息写入文件
}
}
fclose(fp);
}
}
void del(){
system("cls");
FILE *fp;
int i,j,flag=1;
char a[20],n;
fp=fopen("date.dat","rb");//以只读的方式打开文件
printf("\t\t\t\t\t\t请输入要删除的联系人:");
scanf("%s",a);
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){//从文件中读取信息
if(strcmp(a,inf[i].name)==0)flag=0;//比较
}
if(flag==1){
printf("\t\t\t\t\t\t输入错误,此联系人不存在!\n\n\n\n");
} if(flag==0){
printf("\t\t\t\t\t\t确定删除请输入Y否则输入N");
getchar();
scanf("%c",&n);
if(n=='N')printf("\t\t\t\t\t\t删除失败!\n\n\n");
if(n=='Y'){
fp=fopen("date.dat","wb+");//打开新二进制文件进行读,写 ,将原有信息覆盖。(替换掉原文件)
for(j=0;j<i;j++){
if(strcmp(a,inf[j].name)!=0)fwrite(&inf[j],sizeof(struct TX),1,fp);//将除了要删除的姓名外的信息写入文件;
}printf("\t\t\t\t\t\t删除成功!\n\n\n\n");
}else
printf("\t\t\t\t\t\t输入错误!\n\n\n\n");
}
fclose(fp);
}
void search(){
system("cls");
FILE *fp;
int i,flag=0;
char a[20];
fp=fopen("date.dat","rb");//以只读方式打开二进制文件
rewind(fp); //将指针指向文件开头,从文件开头查找
printf("\t\t\t\t\t\t请输入需要查询信息的姓名:");
scanf("%s",a);
for(i=0;fread(&inf[i],sizeof(struct TX),1,fp)==1;i++){
if(strcmp(a,inf[i].name)==0){//找到对应的信息则输出
printf("\n\n\n");
printf("\t\t\t\t\t\t------------------------\t\t\t\n");
printf("\t\t\t\t\t\t姓名:%s\n",inf[i].name);
printf("\t\t\t\t\t\t籍贯:%s\n",inf[i].jiguan);
printf("\t\t\t\t\t\t电话号码1%s\n",inf[i].d1);
printf("\t\t\t\t\t\t电话号码2%s\n",inf[i].d2);
printf("\t\t\t\t\t\t邮箱:%s\n",inf[i].ema);
printf("\t\t\t\t\t\t------------------------\t\t\t\n\n\n\n\n");
flag=1;
break;
}
}if(flag==0)printf("\t\t\t\t\t\t输入错误!\n\n\n");
fclose(fp);
}
int main(){
int n;
while(1){
printf("\t\t\t\t\t\t**************\t\t\t\n");
printf("\t\t\t\t\t\t通讯录管理系统\t\t\t\n");
printf("\t\t\t\t\t\t 0.录入信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 1.增加信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 2.浏览信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 3.查询信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 4.修改信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 5.删除信息 \t\t\t\n");
printf("\n");
printf("\t\t\t\t\t\t 6.退出系统 \t\t\t\n");
printf("\t\t\t\t\t\t**************\t\t\t\n");
printf("\t\t\t\t\t\t请输入操作(1-6)");
scanf("%d",&n);
switch(n){
case 0:luru();break;
case 1:addmore();break;
case 2:browse();break;
case 3:search();break;
case 4:change();break;
case 5:del();break;
case 6:printf("\n\n\n\n");
printf("\t\t\t\t\t\t**************\t\t\t\n\n\n");
printf("\t\t\t\t\t\t感谢您的使用 再见!\n\n\n");
printf("\t\t\t\t\t\t**************\n\n\n\n\n");
return 0;
}
}
return 0;
}